Skip to main content

Setup Webapp

When the agent runs a WiFi hotspot (either in ground station mode or with network.hotspot.enabled: true), it serves a setup webapp on the hotspot’s gateway address. Connect to the hotspot, open a browser, and the captive portal guides you through configuration.
ADOS setup webapp with WiFi scan results and pairing code

How to access it

1

Connect to the hotspot

On your phone or laptop, connect to the WiFi network named ADOS-{device-id} (e.g., ADOS-a1b2c3d4). The default password is ados1234 unless you changed it in config.
2

Captive portal opens automatically

Most devices (Android, iOS, macOS, Windows) detect the captive portal and open a browser window automatically. If it does not open, navigate to http://192.168.4.1 manually.
3

Configure and pair

The webapp walks you through WiFi setup, pairing, and network configuration.

Captive portal detection

The agent runs a DNS responder (ados-setup-captive service) that intercepts the standard captive portal probe URLs:
OSProbe URL
Androidconnectivitycheck.gstatic.com/generate_204
iOS/macOScaptive.apple.com/hotspot-detect.html
Windowswww.msftconnecttest.com/connecttest.txt
All probe requests return a 204 response, which tells the OS “there is a captive portal here, open the browser.” Android 11+ is particularly aggressive about verifying “real internet” and will mark the network as having no internet if these probes are not handled correctly. The DNS responder resolves all probe hostnames to the local gateway IP.

Webapp features

The setup webapp is built with vanilla HTML, CSS, and JavaScript. No framework, no build step. Total size is roughly 50 KB gzipped. It runs entirely on the agent’s built-in web server.

WiFi setup

Scan for nearby WiFi networks and join one. This is how you give the drone (or ground station) internet access for cloud features.
  • Scans available networks using nmcli or wpa_cli
  • Shows signal strength and security type
  • Stores credentials so the network is joined automatically on next boot
  • Supports WPA2 and WPA3 networks

Pairing

Displays the 6-character pairing code prominently. If you are setting up a ground station, you can pair it to a specific drone from this screen.

Network status

Shows current network interfaces and their state:
  • WiFi hotspot (always on in ground station mode)
  • WiFi client connection
  • Ethernet
  • Cellular modem
  • USB tether

Device info

Basic information about the agent: device ID, board name, agent version, IP addresses.

Ground station specific pages

When running in ground-station profile, the webapp includes additional pages under the static-ground/ directory:
  • WFB-ng status: Link quality, RSSI, channel, FEC stats
  • Uplink configuration: Internet sharing toggle, data cap settings
  • OLED/button config: Screen order, button mapping
  • Drone pairing: Pair with a specific air unit for coordinated operation

Hotspot configuration

The hotspot settings are in config:
network:
  hotspot:
    enabled: true
    ssid: "ADOS-{device_id}"
    password: "ados1234"
    channel: 6
The {device_id} placeholder in the SSID is replaced with the first 8 characters of the device ID, making each hotspot name unique.
Change the default password (ados1234) before deploying in the field. Anyone who connects to the hotspot can access the setup webapp, the REST API, and the video feed.

Technical details

The webapp is served by the agent’s FastAPI server. Static files live at:
  • src/ados/webapp/static/ for the base setup pages
  • src/ados/webapp/static-ground/ for ground-station-specific pages
The captive DNS responder runs as a separate service (ados-setup-captive) to handle DNS queries before the main web server is ready. It binds to port 53 on the hotspot interface. The DHCP server (ados-dnsmasq-gs) assigns IP addresses in the 192.168.4.0/24 range with the agent at 192.168.4.1.

Disabling the hotspot

If you do not need the WiFi hotspot (for example, you are using Ethernet only), disable it in config:
network:
  hotspot:
    enabled: false
This also disables the setup webapp, captive portal, and DHCP server.
Even with the hotspot disabled, the REST API remains accessible on all network interfaces (port 8080). You can still configure the agent via SSH and the CLI, or over Ethernet from Mission Control.