Das Dashboard erkennt sämtliche Werte einer beliebig verschachtelten Tasmota-JSON-Antwort automatisch. Jeder Datenpunkt wird in SQLite registriert und kann im Adminbereich individuell konfiguriert werden.
Voraussetzung ist ein Rechner oder NAS mit Docker. Für die Compose-Variante wird zusätzlich Docker Compose benötigt, das bei aktuellen Docker-Installationen bereits als docker compose enthalten ist.
git clone https://github.com/bobbaone/oxilife-dashboard.git
cd oxilife-dashboardDanach in docker-compose.yml mindestens diese Werte anpassen:
TASMOTA_BASE_URL: Adresse des Tasmota-Geräts, zum Beispielhttp://192.168.1.50ADMIN_PASSWORD: automatisch vergebenes Passwort für die erste Anmeldung (Standard:wasserwerte)SESSION_SECRET: lange, zufällige Zeichenfolge- bei Bedarf
TASMOTA_STATUS_PATH, Abfrageintervall und Steuerbefehle
Container bauen und im Hintergrund starten:
docker compose up -d --buildImage herunterladen:
docker pull ghcr.io/bobbaone/oxilife-dashboard:latestPersistentes Volume anlegen und Container starten:
docker volume create oxilife-dashboard-data
docker run -d \
--name oxilife-dashboard \
--restart unless-stopped \
-p 8090:8000 \
-v oxilife-dashboard-data:/app/data \
-e TZ=Europe/Berlin \
-e TASMOTA_BASE_URL=http://192.168.1.50 \
-e 'TASMOTA_STATUS_PATH=/cm?cmnd=Status%2010' \
-e POLL_SECONDS=10 \
-e ADMIN_USER=admin \
-e ADMIN_PASSWORD=wasserwerte \
-e SESSION_SECRET=EINE-LANGE-ZUFAELLIGE-ZEICHENFOLGE \
ghcr.io/bobbaone/oxilife-dashboard:latestTASMOTA_BASE_URL und SESSION_SECRET müssen vor dem Start angepasst werden. Die erste Anmeldung erfolgt mit admin und dem Initialpasswort wasserwerte. Danach erzwingt das Dashboard ein individuelles Passwort mit mindestens zehn Zeichen. Der Benutzername admin kann beibehalten oder optional geändert werden. Die Zugangsdaten werden persistent gespeichert; das Passwort liegt ausschließlich als PBKDF2-SHA256-Hash in SQLite.
- Öffentliche Übersicht:
http://SERVER-IP:8090 - Adminbereich:
http://SERVER-IP:8090/admin
SERVER-IP durch die IP-Adresse des Docker-Hosts ersetzen. Auf demselben Rechner kann http://localhost:8090 verwendet werden.
Status und Logs der Compose-Installation anzeigen:
docker compose ps
docker compose logs -fCompose-Installation stoppen beziehungsweise erneut starten:
docker compose down
docker compose up -dAuf das neueste veröffentlichte GHCR-Image aktualisieren:
docker compose down
docker compose pull
docker compose up -d --force-recreateFür einen lokalen Build direkt aus dem ausgecheckten Quellcode stattdessen docker compose up -d --build verwenden.
Eine Installation mit dem fertigen Image aktualisieren:
docker pull ghcr.io/bobbaone/oxilife-dashboard:latest
docker stop oxilife-dashboard
docker rm oxilife-dashboardDanach den oben gezeigten docker run-Befehl erneut ausführen. Die Einstellungen und historischen Messwerte bleiben im Volume oxilife-dashboard-data erhalten.
Objekte werden mit Punktpfaden und Arrays mit Indexpfaden erfasst, zum Beispiel StatusSNS.DS18B20.Temperature oder sensors[0].value. Neue Pfade erscheinen automatisch im Adminbereich. Dort lassen sich Name, Einheit, öffentliche Sichtbarkeit, Reihenfolge, Logging, Diagramm, Widget-Typ, Skalierung, Nachkommastellen sowie Anzeige- und Warngrenzen einstellen.
Nur explizit freigegebene Datenpunkte erscheinen auf der öffentlichen Startseite. Die Historie beginnt für einen Datenpunkt, solange Logging aktiv ist. Deaktivieren stoppt neue Einträge, löscht aber keine vorhandenen Daten.
Die Startseite zeigt Tasmota und Oxilife getrennt an. Der Tasmota-Name kann mit TASMOTA_DISPLAY_NAME vorbelegt und später im Adminbereich geändert werden. Tasmota gilt als online, wenn die HTTP-Abfrage erfolgreich ist.
Für Oxilife wird im Adminbereich unter Verbindungsstatus ein regelmäßig aktualisierter Oxilife-Datenpunkt als Lebenszeichen ausgewählt. Wird er innerhalb des konfigurierten Zeitfensters nicht mehr empfangen, zeigt die Startseite beispielsweise:
ESP32: Online · Oxilife: Offline
Ohne ausgewählten Lebenszeichen-Datenpunkt steht Oxilife auf Nicht konfiguriert. Das verhindert eine falsche Online-Anzeige, bevor die reale JSON-Struktur der Anlage bekannt ist.
Die öffentliche Seite verwendet folgende Bewertung:
- Grün – Perfekt: Wert liegt innerhalb der konfigurierten Warngrenzen.
- Gelb – Kritisch: Wert liegt außerhalb von
Warn minoderWarn max, aber noch innerhalb von Minimum und Maximum. - Rot – Schlecht: Wert liegt außerhalb von Minimum oder Maximum.
Beim Widget-Typ Stufen lauten die drei Zustände stattdessen Langsam, Mittel und Schnell. Ohne konfigurierte Grenzwerte bleibt die Anzeige neutral.
Kritische oder schlechte freigegebene Messwerte werden zusätzlich in einer gut sichtbaren Warnbox unten auf der Startseite zusammengefasst. Damit kann beispielsweise ein niedriger pH-Tankfüllstand sofort auffallen. Pumpen-Datenpunkte mit dem Widget-Typ Stufen lösen diese Warnbox nicht aus.
Im Adminbereich kann unter Wetter eine fünfstellige deutsche Postleitzahl gespeichert werden. Das Dashboard ermittelt den zugehörigen Ort und zeigt unten mittig auf der öffentlichen Startseite aktuelle Temperatur, Wetterlage, Luftfeuchtigkeit und Wind an. Die Daten werden serverseitig zwischengespeichert und standardmäßig höchstens alle 15 Minuten neu abgerufen. Das Intervall kann mit WEATHER_REFRESH_SECONDS angepasst werden.
Optional kann die PLZ bereits in docker-compose.yml vorbelegt werden:
WEATHER_POSTAL_CODE: "75015"
WEATHER_REFRESH_SECONDS: 900WEATHER_POSTAL_CODE dient nur als Erstkonfiguration, solange noch kein Wetterort in SQLite gespeichert wurde. Eine später im Adminbereich gespeicherte PLZ hat Vorrang und bleibt im Docker-Volume erhalten.
Für die Ortsauflösung wird OpenStreetMap Nominatim verwendet; die Wetterdaten stammen von Open-Meteo. Nichtkommerzielle Nutzung benötigt keinen API-Schlüssel. Der Docker-Container benötigt dafür ausgehenden Internetzugriff. Bei einem vorübergehenden API-Ausfall werden nach Möglichkeit die zuletzt bekannten Daten angezeigt; das übrige Dashboard bleibt funktionsfähig.
Das öffentliche Dashboard ist als Progressive Web App (PWA) vorbereitet. Auf iPhone und iPad die Dashboard-Adresse in Safari öffnen und Teilen → Zum Home-Bildschirm auswählen. Auf Android kann im Browser App installieren oder Zum Startbildschirm hinzufügen verwendet werden.
Die installierte PWA startet mit eigenem Oxilife-Icon im eigenständigen App-Fenster. Ist der Dashboard-Server nicht erreichbar, erscheint eine eindeutige Offline-Seite. Messwerte und Steuerbefehle werden absichtlich nicht offline zwischengespeichert, damit keine veralteten Anlagenzustände als aktuell erscheinen.
Für Installation und Service Worker muss das Dashboard per HTTPS oder lokal über localhost aufgerufen werden. Bei Änderungen aktualisiert sich die PWA automatisch mit der veröffentlichten Webseite.
Für jeden numerischen Datenpunkt kann im Adminbereich E-Mail niedrig aktiviert werden. Fällt der skalierte Messwert unter Warn min, sendet das Dashboard beispielsweise:
Achtung. Füllstand pH-Wert 6.4 niedrig.
SMTP und Empfänger werden über Docker-Umgebungsvariablen konfiguriert:
SMTP_HOST: smtp.example.com
SMTP_PORT: 587
SMTP_USER: dashboard@example.com
SMTP_PASSWORD: eigenes-smtp-passwort
SMTP_FROM: dashboard@example.com
ALERT_EMAIL_TO: empfaenger@example.com
ALERT_COOLDOWN_SECONDS: 3600Das Dashboard nutzt STARTTLS. Pro Datenpunkt wird während eines anhaltenden Niedrigstands höchstens eine Nachricht innerhalb der Sperrzeit versendet. Sobald sich der Wert erholt und später erneut absinkt, wird wieder gewarnt.
Die vorhandenen Filterstufen- und Rückspülfunktionen bleiben erhalten. Die voreingetragenen Befehle sind Platzhalter und müssen vor dem Einsatz an einer echten Anlage geprüft werden.
SQLite liegt unter /app/data/oxilife.db. Docker Compose bindet dafür das benannte Volume oxilife-dashboard-data ein. Ein bestehendes bind-mount-basiertes ./data/oxilife.db wird nicht automatisch in das neue Volume kopiert; bei einem Upgrade die Datei einmalig übernehmen oder den bisherigen Mount beibehalten.
Das benannte Volume bleibt erhalten, wenn der Container oder der lokale Projektordner gelöscht und das Repository neu geklont wird. Dadurch bleiben Datenpunkte, Historie, Einstellungen und Adminzugang bei Updates erhalten.
Für einen vollständigen Neustart mit leerer Datenbank müssen Container und Volume ausdrücklich gelöscht werden:
docker compose down -v
docker volume rm oxilife-dashboard-data 2>/dev/null || true
docker compose up -d --buildAchtung: Dabei werden sämtliche Messwerte, Einstellungen und selbst vergebenen Adminzugangsdaten unwiderruflich gelöscht. Die Ersteinrichtung beginnt anschließend wieder mit admin / wasserwerte.
Pushes auf main und manuell gestartete Workflows bauen ein Multi-Arch-Image und veröffentlichen es als ghcr.io/bobbaone/oxilife-dashboard:latest. Für Pull Requests wird nur gebaut, nicht veröffentlicht.