The gateway protocol
The contract between a gateway and Synacl is public and machine-readable: synacl.com/protocol. It is what the Synacl ESP32 firmware speaks, and what you implement to bring your own gateway — see connect your own gateway.
The lifecycle in five lines
- Connect over TLS with the gateway's credentials and a Last Will on
…/status={"online":false}. - Publish
…/status={"online":true,"ts":…}retained, every 60 s. - Publish a capability report on
…/firmware/response. - Publish
…/config/request={"hash":…}; receive the device list on…/config/push; re-send the request with the new hash. - Publish readings on
…/devices/{deviceId}/dataand presence on…/devices/{deviceId}/status.
… is the gateway's topic prefix, tenants/{tenantId}/sources/gateway/{chipId}, shown in its Connection Info.
What the page covers
- The full topic table, grouped by conformance level (core, optional, experimental).
- A JSON Schema (draft-07) and a valid example for every message, uplink and downlink.
- Config delivery and hashing, chunked delivery for large configs.
- Commands and acknowledgements, store-and-forward, validation behaviour and rate limits.
- The known quirks of the reference firmware, stated plainly.
Machine-readable: https://synacl.com/protocol/v1/index.json lists the topic prefix, the topic table and the URL of every schema.
A device that connects on its own, without a gateway, uses the shorter
tenants/{tenantId}/devices/{deviceId}/…topics with the same message shapes — see connect a direct MQTT device and the actuator command contract.