PX4 Cloud Integration
PX4 is a first-class UTMOS vendor adapter, peer to DJI. PX4 is not a DJI compatibility layer and is not written into the DJI command catalog.
Real PX4 downlink remains disabled by default. The PX4 edge agent must keep PX4_COMMAND_MODE=disabled unless guarded downlink is explicitly authorized and safety-reviewed.
Command Direction
command.accepted only means the cloud authenticated, authorized, idempotency-checked, and persisted the command. It does not mean PX4 executed it.
PX4 Command Coverage
| Command family | Count | Response model | Page |
|---|
| Generated MAV_CMD flow | 178 | COMMAND_ACK | PX4 Command Catalog |
| Parameter read | 1 | PARAM_VALUE / PARAM_ERROR | px4.parameter.read |
| Named parameter set | 1873 | PARAM_VALUE / PARAM_ERROR | Parameter set catalog |
Non-exposed MAV_CMD_DO_SET_PARAMETER | 1 | Not applicable | Replaced by named parameter set commands |
command.accepted
Subject:
tenant.<tenant_id>.command.accepted
Payload example:
{
"event_id": "uuid",
"event_type": "command.accepted",
"command_id": "uuid",
"tenant_id": "tenant_local",
"client_id": "client_001",
"vendor": "px4",
"device_id": "px4-real-1",
"command_type": "nav_takeoff",
"timeout_seconds": 30,
"accepted_at": "2026-06-08T10:15:30Z",
"request_id": "req_001",
"payload": {
"latitude": 473566000,
"longitude": 85432100,
"altitude": 30
}
}
command.completed
Subject:
tenant.<tenant_id>.command.completed
| PX4 status | adapter_status | public_status |
|---|
rejected_by_agent | REJECTED_BY_ADAPTER | FAILED |
sent_to_px4 | SENT_TO_DEVICE | DELIVERED |
ack_accepted | SENT_TO_DEVICE | SUCCEEDED |
ack_temporarily_rejected | SENT_TO_DEVICE | FAILED |
ack_denied | SENT_TO_DEVICE | FAILED |
ack_unsupported | SENT_TO_DEVICE | UNSUPPORTED |
ack_timeout | RESPONSE_TIMEOUT | TIMED_OUT |
parameter_value_confirmed | SENT_TO_DEVICE | SUCCEEDED |
parameter_error | SENT_TO_DEVICE | FAILED |
parameter_response_mismatch | RECEIVED | UNKNOWN |
parameter_timeout | RESPONSE_TIMEOUT | TIMED_OUT |
transport_failed | TRANSPORT_FAILED | FAILED |
UTMOS stores the raw adapter result and appends command lifecycle events. Query APIs return the aggregate status, so integrators do not need to consume NATS directly.
PX4 terminal events also carry display-ready response fields:
| Field | Description |
|---|
human_summary | Human-readable result, for example PX4 已确认 COM_RC_IN_MODE 设置为 MAVLink only。 |
hardware_response | Typed PX4 hardware response payload, for example COMMAND_ACK, PARAM_VALUE, PARAM_ERROR, MISSION_ACK, FILE_TRANSFER_PROTOCOL, or TIMESYNC. |
source_evidence | Local PX4/MAVLink source evidence defining the response semantics. |
UTMOS persists these fields on the adapter result and returns them from Open API and Console command records. Cloud consumers do not need to parse COMMAND_ACK.result, PARAM_VALUE.param_type, PARAM_ERROR.error, or delegated protocol ACK/NACK payloads directly.
command.problem
Subject:
tenant.<tenant_id>.command.problem
The agent publishes this only for command boundary diagnostics that cannot safely become a command-scoped command.completed event, such as malformed accepted-command JSON. UTMOS projects the raw problem payload into the PX4 device recent-event view so Console operators can inspect the problem_code, problem, detail, and source_subject.
Uplink Direction
The PX4 edge agent publishes:
iot.uplink.px4.telemetry.observed
iot.uplink.px4.state.vehicle
| Data | Policy |
|---|
| High-rate telemetry | Do not write to PostgreSQL primary fact tables |
| Latest state | Store as reconstructable current-state projection |
| Historical analysis | Reserved for ClickHouse telemetry-history feature |
| Runtime metrics | Exposed through Prometheus metrics |