Telemetry is the device's public record of what it measured, how confident it is, and what state it was in when the reading was taken.
The model is versioned so firmware and cloud code can evolve independently.
{
"schema_version": "1.0.0",
"device_id": "demo-device-001",
"firmware_version": "0.1.0-reference",
"recorded_at": "2026-04-24T07:30:00Z",
"sequence": 42,
"readings": [],
"device_status": {
"battery_percent": 82,
"network_rssi_dbm": -58,
"uptime_seconds": 3600
}
}Each reading carries raw and normalized values where applicable:
{
"kind": "soil_moisture",
"unit": "percent",
"value": 41.7,
"raw": {
"kind": "adc",
"value": 1870
},
"quality": "ok",
"calibration_id": "soil-profile-v1"
}| Flag | Meaning |
|---|---|
ok |
Reading is within expected range. |
estimated |
Value was inferred or smoothed. |
uncalibrated |
Raw value exists, but calibrated interpretation is incomplete. |
out_of_range |
Physical reading is outside expected operating bounds. |
sensor_fault |
Sensor did not respond or returned invalid data. |
- Include timestamps from the device when possible.
- Use cloud receive time as a separate ingestion attribute, not a replacement.
- Keep raw values for diagnostics.
- Keep normalized values for product behavior.
- Avoid embedding user identity, location, Wi-Fi details, or private account metadata.
See telemetry.schema.json for the public schema.