Skip to content

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

  1. Open Admin → DJI management.
  2. Pick the dock in the left list.
  3. Switch to the Licences tab in the detail panel.
  4. Pick the domainAircraft (0) or Dock (3). Most unlocks apply to the aircraft; dock-domain licences exist for specific SDK features.
  5. Click Refresh. ARGUS calls POST /api/dji/docks/{sn}/flysafe/licenses with 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:

ColumnDescription
IdDJI-assigned numeric licence id — the handle used for enable/disable.
NameOperator-facing label (usually the airspace zone, e.g. BCN Airport CTR).
TypeCustom Unlock, Self Unlock, or Education Unlock — set when the licence was issued by DJI.
Valid from / toBegin and end timestamps. A licence outside its window is greyed-out.
Area refThe DJI zone id the licence applies to.
EnabledToggle — sends the unlock_license_switch MQTT service when flipped.
DomainAircraft (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

  1. Click Push new licence. The inline form expands.
  2. File URL — paste a URL to the signed licence file downloaded from DJI’s FlySafe portal. Typical extension .dat or .zip depending on zone type.
  3. Fingerprint — the file’s MD5 hex string. The dock uses it to verify the download against tampering or corruption.
  4. Click Submit. ARGUS calls POST /api/dji/docks/{sn}/flysafe/update; argus-dji publishes unlock_license_update with {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.
  • 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.