- README: leerer Code-Block im Abschnitt "Test ohne Auto" ersetzt durch sim_charge.py-Beispiele und die mosquitto_pub-Sequenz. - collector/sim_charge.py: Test-Skript zum Simulieren einer Ladung über MQTT. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.3 KiB
Auto-Charger Log
Kleine Web-App, die die Ladevorgänge des Autos protokolliert. Die Daten kommen
per MQTT von der go-e Wallbox (Device-ID 310014), werden in einer
SQLite-Datenbank gespeichert und als Tabelle mit Energie-Summen angezeigt.
Läuft als zwei Docker-Container auf einem lokalen Server.
Architektur
| Container | Stack | Aufgabe |
|---|---|---|
collector |
Python + paho-mqtt |
MQTT abonnieren, abgeschlossene Ladungen → SQLite |
web |
Next.js 16 / React 19 / Tailwind 4 | SQLite (read-only) lesen, Tabelle + Summen anzeigen |
Beide teilen sich das Volume ./data mit der Datei charges.db. Der Collector
besitzt alle Schreibzugriffe, die Web-App liest nur.
MQTT-Daten (go-e API v2)
Basis-Topic go-eCharger/310014/<key>:
car— Fahrzeug-Status (1=Idle,2=Charging,3=WaitCar,4=Complete). Steuert die Session-Erkennung: Start bei Wechsel nach2, Abschluss bei Wechsel nach1oder4.wh— geladene Energie der aktuellen Ladung in Wh.cdi— Objekt{"type":1,"value":<ms>}mit der Ladedauer in Millisekunden.
Einrichtung
cp .env.example .env
# MQTT_USER / MQTT_PASS in .env eintragen
docker compose up --build
Web-App danach unter http://<server>:8082/ (Port via WEB_PORT in .env).
Konfiguration (.env)
| Variable | Bedeutung | Default |
|---|---|---|
MQTT_HOST |
MQTT-Broker | nuccy |
MQTT_PORT |
MQTT-Port | 1883 |
MQTT_USER/PASS |
MQTT-Credentials | – |
MQTT_TOPIC_BASE |
Basis-Topic der Wallbox | go-eCharger/310014 |
DB_PATH |
Pfad der SQLite-DB im Container | /data/charges.db |
TZ |
Zeitzone (für Monats-/Jahres-Summen) | Europe/Berlin |
WEB_PORT |
Host-Port der Web-App | 8082 |
Test ohne Auto
Am einfachsten über das mitgelieferte Skript collector/sim_charge.py (liest
Broker/Topic aus .env, sendet car=2 → wh → cdi → car=4):
.venv/bin/python collector/sim_charge.py # 5230 Wh, 3600 s
.venv/bin/python collector/sim_charge.py --wh 8000 --duration 5400
.venv/bin/python collector/sim_charge.py --end idle # mit car=1 beenden
Alternativ direkt per mosquitto_pub (Reihenfolge beachten):
mosquitto_pub -h nuccy -t go-eCharger/310014/car -m 2
mosquitto_pub -h nuccy -t go-eCharger/310014/wh -m 7350
mosquitto_pub -h nuccy -t go-eCharger/310014/cdi -m '{"type":1,"value":3600000}'
mosquitto_pub -h nuccy -t go-eCharger/310014/car -m 4
Erwartung: eine neue Zeile (Dauer 1:00, Energie 7,35 kWh); die Summen aktualisieren sich beim Neuladen der Seite.
Bekannte Einschränkung
Der Collector hält den Session-Zustand nur im Speicher. Startet er mitten in einer laufenden Ladung, wird genau diese eine Ladung ggf. nicht (vollständig) erfasst.