Configure remotely

Change how a device behaves without touching it. Declare the configuration you want, bind it to a target, and let the platform reconcile what the device reports back.

Versioned config, declared once

A ConfigArtefact is an immutable, versioned blob of configuration validated against a profile schema. Each revision is a new version — nothing is edited in place, so you always know exactly what shipped. Small configs are stored inline; larger ones (like a trained classifier) are uploaded to object storage via a presigned URL.

Desired state, reconciled

A DesiredStateBinding assigns a ConfigArtefact to a target. Targets can be a single device or component, or broader — a device group, device profile, or sensor profile — with the most specific binding winning. The platform tracks a desired version and the version, status, and hash the device actually reports, so you can see whether a target is ACCEPTED, IN_PROGRESS, REJECTED, or FAILED.

Configuration reaches the device as a desired-state document over the message bus; the device applies it and reports back. You never push raw config blindly — you declare intent and watch it converge.

Commands for direct actions

A Command is a one-off instruction to a device with a full acknowledgement lifecycle: PENDING → SENT → ACKNOWLEDGED → SUCCESS (or FAILED / TIMEOUT). Built-in command types include REBOOT, UPDATE_CONFIG, UPDATE_FIRMWARE, and binding or unbinding a config artefact.

In the app

Send commands and bind config artefacts from the Commands tab on a device's detail page (/{slug}/devices/{id}).

In the API

  • GET|POST|DELETE /api/v1/config-artefacts — create immutable config revisions
  • POST /api/v1/config-artefacts/upload-url — get a presigned URL for a large artefact
  • GET|PUT|DELETE /api/v1/desired-state-bindings — assign config to targets and read reported state
  • POST /api/v1/devices/{deviceId}/commands — send a command; GET … to track its status

Was this page helpful?