No description
  • Python 92.2%
  • Shell 7.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-24 18:22:37 +02:00
.gitignore Marstek-Webanzeige hinzufügen 2026-07-24 17:28:42 +02:00
install_service.sh 0.4, update 2026-07-24 18:22:37 +02:00
marstek_web.py 0.4, update 2026-07-24 18:22:37 +02:00
README.md 0.3, update 2026-07-24 18:20:50 +02:00
VERSION 0.3, update 2026-07-24 18:20:50 +02:00

marstekTool

Einfache Webanzeige für den Marstek/Hame-Energy-State aus ioBroker. Die Seite zeigt pe, beide PV-Eingänge (w1, w2), deren Summe, die Ausgangs- bzw. Entladeleistung (m3), die daraus berechnete Differenz und den Batteriestatus. Außerdem werden ts, lc (sofern von ioBroker geliefert) und der Zeitpunkt des letzten Abrufs angezeigt.

Nach jedem erfolgreichen Abruf schreibt die Anwendung die berechneten Werte zusätzlich in folgende ioBroker-States:

ioBroker-State Wert
javascript.0.Variablen.Marstek_pv PV gesamt (w1 + w2)
javascript.0.Variablen.Marstek_soc Ladezustand (pe)
javascript.0.Variablen.Marstek_load Ausgangs-/Entladeleistung (m3)

Voraussetzungen

  • Python 3.10 oder neuer
  • Netzwerkzugriff auf ioBroker

Zusätzliche Python-Pakete sind nicht erforderlich.

Start

python marstek_web.py

Danach ist die Oberfläche unter http://IP-DES-RECHNERS:8321 erreichbar. Sie aktualisiert sich automatisch alle fünf Sekunden.

Auf einem Linux-Server als Dienst einrichten

Der Projektordner kann an einer beliebigen Stelle auf dem Linux-Server liegen. Das Installationsskript ermittelt seinen Pfad automatisch und trägt ihn in den systemd-Dienst ein.

Im Projektordner ausführen:

cd /beliebiger/pfad/PythonProject3
chmod +x install_service.sh
sudo ./install_service.sh

Das Skript verwendet .venv/bin/python, sofern im Projekt eine virtuelle Python-Umgebung vorhanden ist. Andernfalls wird das installierte python3 verwendet. Danach läuft die Webanzeige als Dienst marstek-web, wird bei einem Fehler automatisch neu gestartet und startet auch nach einem Neustart des Servers selbstständig.

Status und Protokoll lassen sich anschließend so aufrufen:

systemctl status marstek-web
journalctl -u marstek-web -f

Der Dienst kann mit folgenden Befehlen gesteuert werden:

sudo systemctl restart marstek-web
sudo systemctl stop marstek-web
sudo systemctl start marstek-web

Versionsanzeige und automatische Updates

Die Fußzeile zeigt die Version aus der Datei VERSION, den aktuellen Git-Commit, dessen Datum und gegebenenfalls den Hinweis lokal geändert. Alle fünf Minuten prüft die Anwendung den konfigurierten Git-Upstream auf neue Commits.

Ist eine neue Version vorhanden, erscheint in der Fußzeile die Schaltfläche UPDATE verfügbar. Nach Bestätigung führt die Anwendung git pull --ff-only aus und startet anschließend den Dienst marstek-web neu. Sobald der Dienst wieder erreichbar ist, lädt die Browserseite automatisch neu.

Das Installationsskript richtet für den Dienstbenutzer eine eng begrenzte sudo-Berechtigung ein, die ausschließlich den Neustart von marstek-web erlaubt. Für die Updatefunktion müssen das Projekt ein Git-Repository, ein Upstream konfiguriert und der Dienstbenutzer zum Lesen und Aktualisieren des Projektordners berechtigt sein.

Voreingestellte Datenquelle:

http://10.0.1.122:8087/states?pattern=mqtt.0.hame_energy.HMJ-2.device.6824997872e4.ctrl&prettyPrint

Berechnung

PV gesamt = w1 + w2
Differenz = m3 - (w1 + w2)
  • Differenz größer 0: Batterie speist
  • Differenz kleiner 0: Batterie lädt
  • Differenz gleich 0: Batterie neutral

Optionale Konfiguration

Die Voreinstellungen lassen sich über Umgebungsvariablen ändern:

Variable Standard
MARSTEK_HOST 0.0.0.0
MARSTEK_PORT 8321
IOBROKER_URL http://10.0.1.122:8087
IOBROKER_STATE_ID mqtt.0.hame_energy.HMJ-2.device.6824997872e4.ctrl
IOBROKER_TIMEOUT 5

Beispiel für PowerShell:

$env:MARSTEK_PORT = "8321"
python .\marstek_web.py

Tests

python -m unittest -v

Die Tests verwenden Beispieldaten und benötigen keine Verbindung zu ioBroker.