Device Protocol (S3 Protocol)
How devices communicate with S3Suite - identity, health, commands, and SDKs
This guide explains how your physical devices communicate with S3Suite. It is written for product managers and hardware engineers - no deep software knowledge required.
What is the S3 Protocol?
The S3 Protocol is the communication layer between your devices and the S3Suite platform. It handles:
- Identifying each device uniquely
- Sending health data from devices to the cloud
- Receiving commands (firmware updates, reboots, config changes) from the dashboard
- Provisioning new devices during manufacturing
Device Identity
Every device in S3Suite has a unique identity made up of two parts:
| Component | What it is |
|---|---|
| Lot Token | A unique token assigned to the production lot |
| Device MAC or IMEI | The hardware identifier of the specific device |
- No two devices can have the same identity
- The identity ties the physical device to its digital record in S3Suite
- You can always trace a device back to its production lot
Provisioning
Provisioning is the process of giving a device its identity during manufacturing. Here is how it works:
- You create a production lot in S3Suite (see Manufacturing Suite)
- The lot gets a unique lot token
- During manufacturing, the device firmware reads its own MAC address or IMEI
- The device registers itself with S3Suite using the lot token + its hardware ID
- S3Suite creates the device record and the device is now "provisioned"
Note: Provisioning only happens once per device. After that, the device uses its established identity for all communication.
Health Reporting
Once provisioned, devices send health reports to S3Suite. These reports power the Health Dashboard in the Operations Suite.
What devices can report:
| Metric | Example |
|---|---|
| Temperature | CPU temp, ambient temp, board temp |
| CPU usage | Processor load percentage |
| Memory | RAM usage, storage remaining |
| Signal strength | WiFi RSSI, cellular signal |
| Battery | Charge level, charging status |
| Custom metrics | Any numeric value you define (e.g., motor RPM, sensor reading) |
| Error codes | Application-specific error identifiers |
Remote Commands
From the S3Suite dashboard, you can send commands to devices in the field:
- OTA firmware updates - Push a new firmware version to one device or an entire lot
- Reboot - Remotely restart a device
- Configuration changes - Update settings without a full firmware update
Runtime Modes
Devices can communicate with S3Suite in three different modes, depending on your product's needs:
Periodic Mode
The device sends health data and checks for commands at a fixed interval (e.g., every 5 minutes, every hour). Best for battery-powered or low-bandwidth devices.Piggyback Mode
The device sends data on demand - piggybacking on an existing communication event. For example, the device reports health data whenever it sends a normal data payload. Best for devices that already communicate regularly for other purposes.MQTT Mode
The device maintains a real-time connection to S3Suite. Health data is sent instantly, and commands are received immediately. Best for always-on, always-connected devices where real-time monitoring matters.| Mode | Best for | Latency | Power usage |
|---|---|---|---|
| Periodic | Battery-powered, low-bandwidth | Minutes to hours | Low |
| Piggyback | Devices with existing data streams | Varies | Low |
| MQTT | Always-connected, real-time needs | Instant | Higher |
Libraries (SDKs)
S3Suite provides pre-built libraries that make it easy to add the S3 Protocol to your firmware. You do not need to implement the protocol from scratch.
Available for:
| Platform | Use case |
|---|---|
| ESP32 | WiFi/BLE IoT devices |
| STM32 / Bare metal | Resource-constrained microcontrollers |
| Zephyr RTOS | Zephyr-based embedded projects |
| Linux / Yocto | Linux-based devices and gateways |
| Android | Android-based products |
- Go to your project in S3Suite
- Open the Libraries tab
- Download the library for your platform
- Edit one configuration file with your project credentials (lot token, endpoint URL)
- Add two lines to your firmware's main loop to initialize and run the protocol
Tip: Start with periodic mode during development. You can switch to MQTT later when you need real-time monitoring.
Note: For more on pushing firmware updates from the dashboard side, see Operations Suite - Firmware Updates.