DJI FlySafe unlock licences
DJI’s FlySafe system controls restricted-airspace unlocks — authorisation zones near airports, altitude-limited zones, and temporary no-fly zones. Without the right licence installed, the aircraft refuses to take off inside those polygons or enforces a hard altitude cap. ARGUS surfaces the full licence lifecycle under Admin → DJI management → Licences.
View installed licences
- Open Admin → DJI management.
- Pick the dock in the left list.
- Switch to the Licences tab in the detail panel.
- Pick the domain —
Aircraft(0) orDock(3). Most unlocks apply to the aircraft; dock-domain licences exist for specific SDK features. - Click Refresh. ARGUS calls
POST /api/dji/docks/{sn}/flysafe/licenseswith the selected domain, the bridge asks the dock for its currently installed list, and the table populates when the dock replies.
The domain field is required on modern dock firmware — an empty request is silently rejected. ARGUS always passes one.
Licence columns
Each row in the table shows:
| Column | Description |
|---|---|
| Id | DJI-assigned numeric licence id — the handle used for enable/disable. |
| Name | Operator-facing label (usually the airspace zone, e.g. BCN Airport CTR). |
| Type | Custom Unlock, Self Unlock, or Education Unlock — set when the licence was issued by DJI. |
| Valid from / to | Begin and end timestamps. A licence outside its window is greyed-out. |
| Area ref | The DJI zone id the licence applies to. |
| Enabled | Toggle — sends the unlock_license_switch MQTT service when flipped. |
| Domain | Aircraft (0) or Dock (3). |
Enable / disable a licence
Toggle the checkbox on any row. ARGUS calls
POST /api/dji/docks/{sn}/flysafe/switch with {licenseId, enable}.
argus-dji publishes the unlock_license_switch service over MQTT; the
dock pushes the toggled state to the aircraft. The table auto-refreshes
after one second so the UI reflects the dock-confirmed state rather than
an optimistic local flip (that would diverge on failure).
Disabling a licence doesn’t remove it — the file stays on the aircraft, just inert until re-enabled.
Upload a new licence
- Click Push new licence. The inline form expands.
- File URL — paste a URL to the signed licence file downloaded from
DJI’s FlySafe portal. Typical extension
.dator.zipdepending on zone type. - Fingerprint — the file’s MD5 hex string. The dock uses it to verify the download against tampering or corruption.
- Click Submit. ARGUS calls
POST /api/dji/docks/{sn}/flysafe/update; argus-dji publishesunlock_license_updatewith{file: {url, fingerprint}}. The dock fetches the file, verifies the MD5, and installs it to the aircraft the next time the aircraft is present in the bay.
After ~2 s the licences list auto-refreshes so the newly-installed licence appears.
Aspirational: a first-class upload path — pick a file, ARGUS computes the MD5 client-side, uploads to S3, hands the presigned URL + fingerprint to the dock — is planned. The current URL-based form assumes you’ve hosted the file elsewhere.
Domain filter
The domain radio (Aircraft / Dock) at the top of the tab controls which list the dock is asked to report. Switching domain requires a fresh Refresh click — the dock only reports one domain per query. In practice most operators leave this on Aircraft; dock-domain licences are rare and usually concern PSDK payload unlocks.
Refresh
The Refresh button re-issues the list query. Useful after:
- A licence expires and you want the row to grey out.
- The aircraft returns from flight (the dock only lists licences confirmed-installed on the aircraft, so a just-pushed licence won’t appear until after the next aircraft presence).
- A DJI FlySafe portal push you issued externally — the dock doesn’t broadcast unsolicited licence updates.
Troubleshooting
- Empty list after refresh. The dock returned
[]— either the aircraft has no licences for the selected domain, or the domain field was rejected by an old firmware. Try the other domain; confirm dock firmware ≥ 03.00 (Dock 2) or ≥ 04.00 (Dock 3). - Toggle flips back. The dock ack’d the switch but the aircraft rejected it — usually because the licence window has expired. The one-second refresh shows the authoritative state.
- Push fails silently. The fingerprint didn’t match the downloaded file. DJI’s dock logs the mismatch but ARGUS only sees the timeout — re-compute the MD5 and retry.
Related
- Pairing — the prerequisite step; unpaired docks have no licence surface.
- Geofence / no-fly — ARGUS polygon-based enforcement, separate from DJI FlySafe.
- Firmware — the other Admin-side push pipeline.