Files
auto-charger/README.md
T
admin ca708b5dda docs: Test-Abschnitt reparieren + sim_charge.py aufnehmen
- 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>
2026-07-05 13:13:41 +02:00

3.3 KiB
Raw Blame History

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 nach 2, Abschluss bei Wechsel nach 1 oder 4.
  • 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.