MQTT → Rust edge (NATS JetStream) → gRPC → Go cloud (Kafka → TimescaleDB). A runnable reference stack for factory and fleet telemetry with a clear edge/cloud boundary.
Factory floors are noisy. Cloud analytics need typed, batched telemetry — without losing samples when the link drops.
JetStream file-backed queue buffers telemetry before gRPC sync to cloud.
detcp.v1 Protobuf + EdgeSyncService gRPC — edge and cloud stay aligned.
make up + Python fleet simulator → rows in TimescaleDB in minutes.
OpenTelemetry (Collector, Jaeger, Grafana) and mTLS on gRPC. The ingestion hot path works in Docker Compose today.
| Path | Purpose |
|---|---|
proto/ | detcp.v1 Protobuf + gRPC EdgeSyncService |
edge/ | edge-gateway, edge-sync (Rust) |
cloud-plane/ | gRPC ingress + Kafka consumer → DB (Go) |
deploy/ | Compose, Mosquitto, Timescale init SQL |
scripts/ | Fleet simulator, dev layout check |
docs/ | Architecture, phased plan, chaos runbook |
Start or stop the full stack (volumes removed on down).
Regenerate Go from .proto; run dev check script.
git clone https://github.com/vgandhi1/edge-telemetry-plane.git cd edge-telemetry-plane && make up python3 -m venv .venv && . .venv/bin/activate pip install -r scripts/requirements.txt python3 scripts/simulate_robot_fleet.py --count 10 --interval 0.5 docker compose -f deploy/docker-compose.yml exec timescaledb \ psql -U detcp -d detcp -c "SELECT COUNT(*) FROM telemetry_points;"
DETCP: durable edge buffering, typed batches, and a path to scale with Kafka + time-series storage.