What
Turn SIMUT's existing telemetry sinks into a deployable reference receiver — a lightweight, self-contained server that receives data from SIMUT devices and can be dropped into any company's infrastructure without vendor lock-in.
⚠️ Corrected premise — a reference server already exists
An earlier version of this issue said "there is no reference server — each company must build their own receiver from scratch." That is not accurate. Two of them are versioned in this repo and have been run against real hardware in a measured campaign (docs/telemetry-campaign-2026-08-02/):
tools/telemetry_bench/server_http.py — HTTP/HTTPS sink. Records every byte, the wall-clock of every request, and every record it can parse out of the payload. Metrics to JSON (--stats), parsed records to NDJSON (--records).
tools/telemetry_bench/server_mqtt.py — MQTT 3.1.1 broker written from the wire format.
So the receiving, parsing and TLS work is done. What is missing is everything that turns an instrument into a product: durable storage, a query API, a dashboard, packaging, and the removal of the deliberate-fault machinery that has no place in a receiver someone deploys.
This reframes the task from "write a server" to "promote and productize tools/telemetry_bench/" — a much smaller, much better-defined job with a working starting point.
Design philosophy
Not a SaaS. A self-hosted, open-source receiver that:
- Runs on-premises (lab server, Raspberry Pi, Docker, bare metal, cloud VM)
- Has pluggable storage (SQLite for single-site, PostgreSQL for multi-site)
- Exposes a simple REST API + minimal dashboard
- Works with any SIMUT device out of the box
- Zero external dependencies beyond the chosen database
Scope — Phase 1 (MVP)
Start from tools/telemetry_bench/, land the result in tools/receiver/ (or a top-level receiver/).
Carry over:
Remove or gate behind an explicit dev flag:
Add:
Scope — Phase 2 (community-driven)
- Alerting — webhook/email on out-of-range
- Grafana data source
- Multi-tenancy per site/department
- Retention policies
- Authentication (API key or JWT)
Acceptance — Phase 1
References
tools/telemetry_bench/server_http.py, server_mqtt.py, README.md — the starting point
docs/telemetry-campaign-2026-08-02/ — what these servers already proved
src/TelemetryManager.cpp — the device-side client
What
Turn SIMUT's existing telemetry sinks into a deployable reference receiver — a lightweight, self-contained server that receives data from SIMUT devices and can be dropped into any company's infrastructure without vendor lock-in.
An earlier version of this issue said "there is no reference server — each company must build their own receiver from scratch." That is not accurate. Two of them are versioned in this repo and have been run against real hardware in a measured campaign (
docs/telemetry-campaign-2026-08-02/):tools/telemetry_bench/server_http.py— HTTP/HTTPS sink. Records every byte, the wall-clock of every request, and every record it can parse out of the payload. Metrics to JSON (--stats), parsed records to NDJSON (--records).tools/telemetry_bench/server_mqtt.py— MQTT 3.1.1 broker written from the wire format.So the receiving, parsing and TLS work is done. What is missing is everything that turns an instrument into a product: durable storage, a query API, a dashboard, packaging, and the removal of the deliberate-fault machinery that has no place in a receiver someone deploys.
This reframes the task from "write a server" to "promote and productize
tools/telemetry_bench/" — a much smaller, much better-defined job with a working starting point.Design philosophy
Not a SaaS. A self-hosted, open-source receiver that:
Scope — Phase 1 (MVP)
Start from
tools/telemetry_bench/, land the result intools/receiver/(or a top-levelreceiver/).Carry over:
server_http.py)server_mqtt.py)Remove or gate behind an explicit dev flag:
--mode error500|blackhole|slow|half|rst,--tls-fault). These exist to break the device on purpose; a deployed receiver must not be able to do that by accident.Add:
GET /api/devices— registered devices with last-seenGET /api/devices/:id/readings?from=&to=GET /api/devices/:id/alarmsGET /api/export?format=csv— compliance exportdocker compose up) — note the repo's existingDockerfile/docker-compose.ymlare for building firmware; the receiver needs its own, kept separateopensslrecipe is a starting point; test certs must stay unversionedScope — Phase 2 (community-driven)
Acceptance — Phase 1
docker compose upReferences
tools/telemetry_bench/server_http.py,server_mqtt.py,README.md— the starting pointdocs/telemetry-campaign-2026-08-02/— what these servers already provedsrc/TelemetryManager.cpp— the device-side client