Skip to main content

OTA Updates

The agent can update itself over the air. It polls GitHub releases for new versions, downloads the update, installs it, and restarts. You can also roll back to a previous version if something goes wrong. The OTA service runs as ados-ota and is enabled on Tier 3+ boards.

Update channels

Three release channels control which versions the agent sees:
ChannelDescriptionUse when
stableProduction releases only. Tested and verified.Field use, production drones
betaPre-release versions. Functionally complete, may have rough edges.Testing before deploying to fleet
devBleeding edge. May contain breaking changes.Active development, contributing
Set the channel in config:
ota:
  channel: "stable"
Or from the CLI:
ados set ota.channel beta

Checking for updates

Automatic checks

By default, the agent checks for updates every 24 hours:
ota:
  check_interval: 24  # Hours
The check is non-blocking. If an update is found, it is noted but not installed unless auto_install is enabled.

Manual check

$ ados check
Update available: v0.5.4
Changelog: Fixed video pipeline restart on camera hot-plug...
Or via the REST API:
curl -X POST http://localhost:8080/api/ota/check \
  -H "X-ADOS-Key: $KEY"
Response:
{
  "status": "update_available",
  "version": "0.5.4",
  "changelog": "Fixed video pipeline restart on camera hot-plug. Improved MQTT reconnection."
}
If no update is available:
{
  "status": "up_to_date",
  "version": "0.5.3"
}

Upgrading

One-step upgrade

The ados upgrade command checks, downloads, installs, and restarts in one step:
$ ados upgrade
Checking for updates...
Update available: v0.5.4
Install v0.5.4? [y/N]: y
Downloading and installing...
Installed v0.5.4
Restarting service...
Done.
Skip the confirmation prompt with -y:
ados upgrade -y

Via install script

You can also upgrade by re-running the install script:
curl -sSL https://raw.githubusercontent.com/altnautica/ADOSDroneAgent/main/scripts/install.sh | sudo bash -s -- --upgrade
This is equivalent to ados upgrade but also updates the install script itself, systemd service files, and any DKMS drivers.

Auto-upgrade

Enable automatic installation of updates:
ota:
  auto_install: true
Auto-install restarts the agent immediately after installing an update. If the drone is in flight, this could interrupt operations. Only enable auto-install on ground-based drones or when you are confident in the release channel’s stability.

Rolling back

If an update causes problems, roll back to the previous version:
$ ados rollback
Rollback complete. Reverted to v0.5.2.
Roll back to a specific version:
$ ados rollback 0.5.0
Rollback complete. Reverted to v0.5.0.
The rollback command downloads the specified version from PyPI and reinstalls it. Your config is preserved. Via the REST API:
# Rollback to previous version
curl -X POST http://localhost:8080/api/ota/rollback \
  -H "X-ADOS-Key: $KEY"

# Rollback to specific version
curl -X POST "http://localhost:8080/api/ota/rollback?version=0.5.0" \
  -H "X-ADOS-Key: $KEY"

Update status

Check the current OTA state:
$ ados update
Version:    0.5.3
State:      idle
Channel:    stable
Repo:       altnautica/ADOSDroneAgent
Last check: 2026-04-16T10:00:00
Possible states:
StateMeaning
idleNo update activity
checkingCurrently checking for updates
downloadingDownloading an update
installingInstalling an update
restartingRestarting after an update
errorLast operation failed

How updates work internally

1

Check GitHub releases

The OTA service queries the GitHub Releases API for the configured repository (altnautica/ADOSDroneAgent). It filters by the selected channel (stable = full releases, beta = pre-releases, dev = all releases).
2

Compare versions

Compares the latest available version against the installed version. If a newer version exists, it is marked as pending.
3

Download and install

Uses pip to install the new version into the virtual environment at /opt/ados/venv/. The previous version’s wheel is cached for rollback.
4

Restart

Sends a restart command to systemd (systemctl restart ados-supervisor), which brings down all services and starts them again with the new code.

Configuration reference

ota:
  channel: "stable"                          # stable | beta | dev
  check_interval: 24                          # Hours between auto-checks
  auto_install: false                         # Install updates automatically
  github_repo: "altnautica/ADOSDroneAgent"   # Source repository
  pip_path: "/opt/ados/venv/bin/pip"          # Path to pip in the venv
  service_name: "ados-agent"                  # Systemd service to restart

Fleet updates

For fleets of drones, you can trigger updates from Mission Control. The cloud relay sends an update command to each drone, which then checks and installs independently. This approach lets you roll out updates gradually (canary deployments): update one drone, verify it works, then roll out to the rest.
Always test updates on a bench drone before deploying to your field fleet. Use the beta channel on the bench and stable on production drones. Promote a beta release to stable only after bench validation passes.