Ein Docker-Compose-Stack, der Sensordaten von ESP32-Geräten entgegennimmt, speichert und visualisiert:
- ESP32 veröffentlicht Messwerte per MQTT (siehe Repositories in Micropython und C++)
- Mosquitto (TLS-fähig) nimmt die Nachrichten entgegen
- python-subscriber konsumiert MQTT-Nachrichten und schreibt sie in TimescaleDB/PostgreSQL
- Grafana greift auf die Datenbank zu und stellt Dashboards bereit
[ESP32] → MQTT (mosquitto) → MQTT Consumer (python-subscriber) → TimescaleDB → Grafana
docker-compose.yml– verbindet alle Services und Umgebungsvariablenmosquitto/– Broker-Konfiguration, Passwortdatei und Persistenzpfadepython-subscriber/– MQTT→Postgres Ingestor (siehesubscriber.py)sql/– Init-Skripte für TimescaleDB (Tabelle, Retention, Aggregat)grafana/provisioning/– vordefinierte Datasource und Dashboard
- mosquitto: Exponiert
1883(LAN) und8883(TLS). Zertifikate werden aus/etc/letsencrypt/...als Read-Only eingebunden. Persistente Daten/Logs unter./mosquitto/dataund./mosquitto/log. - postgres (TimescaleDB): Nutzt
pg_dataVolume und führt./sql/*.sqlbeim ersten Start aus. - ingestor: Baut aus
python-subscriber/, verbindet sich mit Mosquitto und Postgres via Umgebungsvariablen, parst JSON-Nachrichten und schreibt inmeasurements. - grafana: Startet mit vorkonfigurierter Datasource und Dashboard, persistiert unter
grafana_dataund läuft auf Port3001.
Lege eine .env im Projektverzeichnis an (Compose liest sie automatisch). Mindestbelegung:
POSTGRES_USER=sensors
POSTGRES_PASSWORD=secret
POSTGRES_DB=sensors
PGHOST=postgres
PGPORT=5432
PGDATABASE=sensors
PGUSER=sensors
PGPASSWORD=secret
MQTT_HOST=mosquitto
MQTT_PORT=1883
MQTT_TOPIC=sensors/esp32/#
MQTT_USERNAME=...
MQTT_PASSWORD=...
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=change-mePasse GF_SERVER_ROOT_URL in docker-compose.yml an, falls Grafana unter einer anderen URL laufen soll. Für TLS auf MQTT-Port 8883 müssen die eingebundenen Let’s-Encrypt-Pfade vorhanden sein oder entfernt werden.
- Build & Start:
docker compose up -d - Logs ansehen:
docker compose logs -f ingestor(odermosquitto,grafana,postgres) - Stack stoppen:
docker compose down - Daten behalten: Volumes
pg_dataundgrafana_datableiben erhalten; Logs/State für Mosquitto liegen unter./mosquitto/
Nach dem Start:
- MQTT:
localhost:1883(oder8883mit TLS) – Benutzer lautmosquitto/passwordfile - Postgres:
localhost:5432– Tabellemeasurementswird durchsql/001_init.sqlerstellt - Grafana:
http://localhost:3001(Admin-Creds aus.env), vordefiniertes Dashboard unter „Sensors“.