Marstek Modbus Suite 3.0: Wenn die Firmware recht hat
Seit dem 30. September gibt es mit 3.0.0 die erste stabile Version der Marstek Modbus Suite seit 2.2.0. Dazwischen liegen eine 2.3-Beta, dreizehn 3.0-Betas und drei Release-Kandidaten. Das ist viel für eine Integration, die eigentlich „nur“ Register ausliest. Der Grund ist schnell erzählt: Ich habe die Registerkarten für die Venus D und die Venus A nicht mehr nur mit dem verglichen, was die Geräte im Betrieb melden, sondern mit dem, was ihre Steuerungsfirmware tatsächlich tut.
Dabei kam heraus, dass einige Sensoren seit Version 1 etwas anderes gemessen haben, als ihr Name versprach. Nicht dramatisch falsch, aber falsch genug, dass man sich darauf nicht verlassen sollte. Die Regel für 3.0 war deshalb einfach: Wo die Karte und die Firmware nicht zusammenpassen, gewinnt die Firmware.
Kurz zur Einordnung
Die Suite ist eine Home-Assistant-Integration für Marstek-Venus-Speicher, die ausschließlich lokal über Modbus TCP arbeitet: kein Marstek-Konto, keine Cloud, kein MQTT-Broker, kein YAML. Sie liest nicht nur, sie schreibt auch – Leistung, Grenzwerte, Betriebsmodi und bis zu sechs Zeitpläne. Dazu kommt ein eigenes Panel in der Seitenleiste mit sieben Reitern, für das keine zusätzlichen Karten installiert werden müssen. Bei voll bestückten Geräten zeigt es unter anderem 112 Zellspannungen auf einer gemeinsamen Achse.
Was sich ändert, wenn man aktualisiert
Ich fange mit den unangenehmen Teilen an, weil sie vor dem Update gelesen werden sollten.
Drei Entitäten fallen bei Venus A und D weg
battery_voltage, battery_current und bms_version lasen exakt dieselben Firmware-Wörter wie battery_1_voltage, battery_1_current und battery_1_bms_version. Es waren also die Werte von Pack 1 unter einem Namen, der nach dem ganzen Speicher klingt. Wie irreführend das sein kann, zeigte eine aufgezeichnete Entladung: battery_current stand bei 0,0 A, während Pack 2 gleichzeitig −45,9 A lieferte.
Wer diese Entitäten in Automationen nutzt, stellt auf die battery_1_-Varianten um – die Werte sind identisch. Für den Strom über alle Packs ist bms_power die richtige Quelle. Bei der Venus E (v3 und v1/v2) bleiben die drei Entitäten erhalten, weil sie dort tatsächlich den ganzen Speicher beschreiben.
battery_power misst jetzt, was der Name sagt
Register 30001 ist ein einzelner DC-Messpunkt, über den auch die PV-Strings laufen. Eine Venus A zeigte dort −1557 W, während ihre Packs 870 W abgaben. Das Register heißt jetzt dc_sample_power. battery_power behält seinen Schlüssel, wird aber aus dem DC-Punkt und den vier Strings berechnet – also das, was die Packs wirklich leisten. Bestehende Automationen laufen weiter und bekommen ab sofort den richtigen Wert.
Ähnlich bei den Energiezählern: Sie messen am Netzanschluss, nicht an den Akkus. Aus total_charging_energy wird deshalb total_ac_input_energy, aus dem Entladezähler total_ac_output_energy, und dasselbe für die Tages- und Monatswerte. Die sechs alten Schlüssel bleiben in bestehenden Installationen als Durchreichung mit derselben Unique-ID erhalten, damit Verlauf und Statistiken nicht abreißen. Neue Installationen bekommen nur noch die neuen Namen.
Zyklen aus dem BMS statt aus einer Division
battery_health und remaining_cycles haben bisher den Energiezähler durch die Kapazität geteilt. Das ergab bei einem Gerät 1211 Zyklen, während das BMS selbst 153 meldete. Beide lesen jetzt den Zykluszähler des BMS. battery_cycle_count war außerdem nur der Wert von Pack 1 – auf einer Venus D mit sieben Packs 6, obwohl die einzelnen Packs zwischen 6 und 73 zählten. Jetzt ist es der Mittelwert über alle bestückten Packs, auf diesem Gerät also 37. Im Verlauf gibt es dadurch einen Sprung; der Einzelwert von Pack 1 bleibt als battery_1_cycle_count erhalten.
Kleinere Bedeutungsänderungen
- Zustand 6 von
inverter_stateheißt jetzt Backup Passthrough statt Bypass – die Backup-Steckdose versorgt dann eine Last aus dem Netz. - Software-, BMS- und EMS-Version erscheinen als Versionsstring, also
117.7statt1177. - Zeitpläne mit mehreren Tagen zeigen
custom, die Tage stehen in den Attributen. - Zykluszähler sind vorzeichenbehaftet, wie die Firmware sie typisiert. Ein BMS-Platzhalter erscheint dadurch als negative Zahl statt als Wert knapp unter 65535.
- Register 30212 galt als Pack-Anzahl, ist aber das Ergebnis des Selbsttests beim Einschalten. Es heißt jetzt
selftest_statusund ist standardmäßig aus.
Neue Modbus-Bibliothek
Unter der Haube spricht die Integration jetzt über tmodbus statt pymodbus mit dem Speicher. Home Assistant installiert die Bibliothek beim Neustart nach dem Update. Ein Grund für den Wechsel: Die Firmware schickt bei manchen Fehlern falsch aufgebaute Exception-Antworten. Die Suite fängt diese Antworten jetzt selbst ab und korrigiert sie, statt die Verbindung zu verlieren.
Wer einen Modbus-Proxy einsetzt – etwa weil ein zweiter Client wie evcc auf denselben Speicher zugreift –, sollte das gepatchte Add-on verwenden. Ein ungepatchter Proxy stolpert über dieselben fehlerhaften Antworten und trennt die Verbindung.
Was neu dazukommt
Der Speicher wird gefunden. Eine Venus meldet sich selbst im Netz. Beim Hinzufügen der Integration wird vier Sekunden lang zugehört, danach sind Modell, Adresse und Registerkarte ausgefüllt. Die MAC-Adresse dient als eindeutige Kennung, derselbe Speicher lässt sich also nicht zweimal einrichten.
Abfrage pausieren. Pro Speicher gibt es jetzt drei Zustände: aktiv, pausiert mit nicht verfügbaren Entitäten oder pausiert mit eingefrorenen Werten. Gedacht ist das für einen Speicher, der über den Winter abgeschaltet wird. Die Einstellung übersteht Neustarts, ein pausierter Eintrag lädt ohne Verbindungsversuch, und Steuerelemente sind gesperrt. Ein ausgeschalteter Speicher sieht außerdem endlich auch so aus: Die Statusanzeige wechselt zwischen grün, gelb, rot mit dem Zeitpunkt der letzten Antwort und grau für pausiert. Im Log steht eine Zeile beim Abschalten und eine beim Wiederkommen, nicht jede Minute ein ganzer Block.
Abfragegruppen nach Messung. Am Gerät gemessen dauert eine Anfrage etwa 65 ms, ein kompletter Durchlauf 5,5 Sekunden. Daraus sind die Abfragegruppen neu entstanden, darunter eine neue, sehr langsame Gruppe mit fünf Minuten Standardintervall für 55 Werte, die sich nur ändern, wenn jemand sie ändert. Die MPPT-Werte sind dafür wieder in der schnellen Gruppe. Welcher Wert in welcher Gruppe landet, steht in der Dokumentation der Abfragegruppen.
Zeitpläne. Wochentage lassen sich beliebig kombinieren und im Panel als Chips bearbeiten. Ein aktiver Zeitplan bleibt beim Bearbeiten aktiv – die Firmware schaltet ihn bei jedem Schreibzugriff ab, die Integration schaltet ihn wieder ein. Zeitpläne, die die Firmware nie ausführen würde, werden abgelehnt: überlappende aktive Slots, leere Fenster und Fenster über Mitternacht.
Außerdem: Die Venus A unterstützt ein siebtes Pack mit 13 Zellen, Fehlertexte für Venus A und E v3 stammen direkt aus deren Firmware, und die zweite Hälfte des 32-Bit-Alarmworts wird als alarm_status_low nicht mehr verworfen. Der Reparaturhinweis zum RS485-Steuermodus erscheint nur noch, wenn die Integration den Modus selbst eingeschaltet hat – ein zweiter Client wie evcc löst ihn nicht mehr aus.
Behobene Fehler
- Die Restlaufzeiten bis voll und bis leer blieben leer, sobald ein einzelner PV-String fehlte.
- Der berechnete Zykluszähler konnte bei einem nicht gelesenen Kapazitätsregister in die Zehntausende laufen – und weil der Sensor
total_increasingist, blieb so ein Ausreißer dauerhaft in der Statistik. battery_cycle_countundbattery_power_bmsblieben bei Stapeln mit weniger als sieben Packs leer.- „PV-Durchleitung“ erscheint im Panel nur noch bei tatsächlich produzierenden Strings und damit nicht mehr auf einer Venus E.
- Ein Register wurde in jedem Durchlauf doppelt abgefragt.
Nach dem Update
Home Assistant bitte komplett neu starten, nicht nur die Integration neu laden – sonst fehlt die neue Bibliothek. Und jeden offenen Panel-Tab neu laden: Ein offener Tab läuft sonst mit dem alten Panel weiter. Ab dieser Version merkt das Panel selbst, wenn eine neuere Fassung bereitsteht, und bietet das Neuladen an.
Ein Hinweis, der immer wieder für Verwirrung sorgt: Modbus TCP läuft bei der Venus nur über den LAN-Anschluss. Port 502 ist über WLAN nicht erreichbar. Wer den Speicher nur per WLAN angebunden hat, kommt mit dieser Integration nicht weiter.
Zum Projekt
-
Marstek Modbus Suite
Home-Assistant-Integration für Marstek-Venus-Speicher über lokales Modbus TCP: ohne Cloud, mit eigenem Panel, Steuerung, Zeitplänen und Pack- und Zellansicht.
Unterstützen
Diese Tools entstehen in meiner Freizeit und bleiben kostenlos, offen und cloud-frei. Wenn dir eins davon einen Nachmittag gespart hat, freue ich mich über einen Kaffee oder ein Stück Pizza.
Kaffee oder PizzaWeitere Beiträge
- Rollladen-Steuerung pro Raum: Taster, Fenster, Kälte und Regen Eine Automation pro Raum, die Taster, Fensterkontakt, Kälte, Regen und die Zeit vor Sonnenaufgang zusammenführt. Zwei Merker-Helfer verhindern, dass sich die Auslöser gegenseitig überfahren.
- Stromausfall erkennen und Geräte wiederherstellen in Home Assistant Nach einem Stromausfall booten Lampen und Steckdosen in zufälligen Zuständen. Drei Erkennungswege, ein gemeinsames Script und ein Wiederherstellungsfenster bringen alles wieder in den gewünschten Zustand.
- Rauchmelder löst aus: Alle Rollläden fahren hoch (Home Assistant) Bei Rauchalarm sollen die Rollläden im ganzen Haus hochfahren, damit Fenster als Fluchtweg frei sind. Die Automation ist kurz – aber ein fehlendes „from“ im Trigger entscheidet darüber, ob sie im Ernstfall überhaupt feuert.