7dd3215520
MQTT-Collector (Python/paho-mqtt) speichert abgeschlossene go-e Wallbox-Ladungen in SQLite; Next.js-Web-App zeigt sie als Tabelle mit Energie-Summen (Monat/Jahr/gesamt) im werte-next-Design. Zwei Docker-Container mit gemeinsamem DB-Volume. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69 lines
2.9 KiB
Markdown
69 lines
2.9 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
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
|
|
|
|
Eine Ladung lässt sich per `mosquitto_pub` simulieren (Reihenfolge beachten):
|
|
|
|
```bash
|
|
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.
|