← Zurück zur Startseite

Erweiterte Register-Referenz größtenteils ungeprüft

Ergänzung zur kurzen, bei uns bestätigten Register-Tabelle auf der Startseite: eine deutlich längere Liste, zusammengetragen aus zwei Community-Repositories. Der Großteil davon haben wir selbst nicht nachgeprüft – lies zuerst den Hinweis direkt darunter, bevor du irgendetwas davon verwendest.

Wichtiger Hinweis, bitte zuerst lesen: Die Register mit dem Badge ungeprüft stammen aus einem öffentlichen Community-Scan eines Marstek Venus D (nicht unser A-Modell!) sowie aus der ViperRNMC-Integration für Home Assistant. D und A sind unterschiedliche Geräte mit teils abweichender Registerbelegung (z. B. 13 vs. 16 Zellen pro Pack, teils andere SOC-Adresse). Vieles davon scheint auch beim A-Modell zu existieren und ähnlich zu funktionieren – in den von uns bislang stichprobenartig verglichenen Fällen deckte es sich häufig, bewiesen ist das aber nicht für jedes einzelne Register. Nur Register mit dem Badge bestätigt haben wir selbst live an unserem Venus A verifiziert.

Vor jeder Nutzung: selbst mit modbus.py testen (Download und Anleitung auf der Startseite). Bei Schreibregistern (42xxx, 43xxx, 44xxx) besonders vorsichtig sein – falsche Werte in unbekannte Register können im schlimmsten Fall den Akku in einen unerwünschten Zustand bringen. Wir übernehmen keine Haftung für Schäden durch die Nutzung dieser Liste.

Quellen

Messwerte (30000er-Block)

RegisterBedeutungSkalierungStatus
30001Batterieleistung (signed): + = Laden, − = Entladenroh, Wbestätigt
30006AC-Leistungroh, Wbestätigt
30020–30023MPPT1–4 Spannung×0.1 Vbestätigt
30024–30027MPPT1–4 Strom×0.1 Abestätigt
30037–30040MPPT1–4 Leistung×0.1 Wbestätigt
30100Batteriespannung×0.01 Vbestätigt
30101Batteriestrom (signed)×0.1 Abestätigt
30200EMS-Firmware-Versionrohungeprüft
30202VMS-Firmware-Versionrohungeprüft
30204BMS-Firmware-Versionrohungeprüft
30300WLAN verbunden (0/1)rohungeprüft
30301Bluetooth-Statusrohungeprüft
30302Cloud verbunden (0/1)rohungeprüft
30303WLAN-Signalstärke×−1, dBmbestätigt
30304–30309MAC-Adresse (ASCII)–ungeprüft
30350–30355Kommunikationsmodul-Firmware (ASCII, Datum)–ungeprüft
30400–30401Geräte-IP (2×uint16, Oktett-Paare)rohungeprüft
30402–30403Gateway-IP (2×uint16, Oktett-Paare)rohungeprüft
31000–31009Gerätename (ASCII)–ungeprüft

Batterie / SOC / Energie (32000–33000er)

RegisterBedeutungSkalierungStatus
32104SOC (%) – auf unserem Gerät gültigrohbestätigt (A)
32105Nennkapazität („Battery Total Energy", nicht der aktuelle Ladezustand!)×0.001 kWhbestätigt
34002SOC (%) – laut D-Scan anderes Register als bei uns, evtl. nur beim D gültig×0.1 %ungeprüft, ggf. nur D
32200AC-Spannung×0.1 Vbestätigt
32204AC-Frequenz×0.1 Hzbestätigt
32300AC-Offgrid-Spannung×0.1 Vungeprüft
32301AC-Offgrid-Strom×0.01 Aungeprüft
32302–32303AC-Offgrid-Leistung (int32)roh, Wungeprüft
33000–33001Kumulierte Akku-Entladung (32-Bit) – Vendor-Label nennt es „Charging", ist bei uns aber Entladung×0.01 kWhbestätigt, Label invertiert
33002–33003Kumulierte Akku-Ladung (32-Bit) – Vendor-Label nennt es „Discharging", ist bei uns aber Ladung×0.01 kWhbestätigt, Label invertiert
33004–33005Tages-Ladeenergie (32-Bit)×0.01 kWhungeprüft
33006–33007Tages-Entladeenergie (32-Bit)×0.01 kWhungeprüft
33008–33009Monats-Ladeenergie (32-Bit)×0.01 kWhungeprüft
33010–33011Monats-Entladeenergie (32-Bit)×0.01 kWh33010 bestätigt

Zellen / Pack-Details (34000er)

Unser eigener battery_collector.py (siehe Battery-Stats) liest bereits einen Teil dieses Blocks produktiv aus, entsprechend als bestätigt markiert. Bestätigt: Der Marstek Venus A hat 13 Zellen (nicht 16 wie der Venus D) – die Register für Zelle 14–16 liefern bei uns folglich keinen sinnvollen Wert.

RegisterBedeutungSkalierungStatus
34000Pack-1-Gesamtspannung×0.01 Vungeprüft
34003Zyklenanzahl Pack 1rohbestätigt
34005Pack-1 Max-Zellspannung×0.001 Vungeprüft (bei uns über 37007 abgedeckt)
34006Pack-1 Min-Zellspannung×0.001 Vungeprüft (bei uns über 37008 abgedeckt)
34010Pack-1-Temperatur×0.1 °Cungeprüft (bei uns über 35010 abgedeckt)
34011Pack-1 Max-Zelltemperatur×0.1 °Cungeprüft
34012–34016Pack-1-Temperatursensoren 1–5×0.1 °Cungeprüft
34018–34030Pack-1-Einzelzellspannungen, Zelle 1–13×0.001 Vbestätigt
34031–34033Einzelzellspannungen Zelle 14–16 (nur Venus D, 16 Zellen)×0.001 Vbei uns nicht vorhanden – A hat nur 13 Zellen
34100–34133Pack-2-Register (Spiegel von Pack 1, Offset +100) – nur relevant bei 2 verbauten Packswie Pack 1ungeprüft, bei uns vermutlich nicht relevant (1 Pack)
35011Min. Zelltemperatur (global)×0.1 °Cbestätigt

Temperatur / Wechselrichter-Status (35000er)

RegisterBedeutungSkalierungStatus
35000Geräte-Innentemperatur×0.1 °Cbestätigt
35001MOS1-Temperatur (Leistungstransistor)×0.1 °Cbestätigt
35002MOS2-Temperatur (Leistungstransistor)×0.1 °Cbestätigt
35010Max. Zelltemperatur (global)×0.1 °Cbestätigt
35100Wechselrichter-Statusrohbestätigt

Alarme / Diagnose (36000–37000er)

RegisterBedeutungSkalierungStatus
36000–36001Alarm-Status (32-Bit Bitmask, Bedeutung der einzelnen Bits unbekannt)rohungeprüft
36100–36103Fault-Status (64-Bit Bitmask, Bedeutung der einzelnen Bits unbekannt)rohungeprüft
37004AC-Strom (negativ = Einspeisung)×0.01 A laut Community-Quelle, bei uns im Script mit ×0.004 hinterlegt – Widerspruch, Skalierung noch nicht abschließend geklärtRegister bestätigt, Skalierung unklar
37007Max. Zellspannung, aggregiert (Alternative zu Einzelabfrage 34018ff.)×0.001 Vbestätigt
37008Min. Zellspannung, aggregiert×0.001 Vbestätigt

Steuerregister (40000er-Block, schreibbar)

Dieser Block enthält Schreibregister, die das Geräteverhalten direkt beeinflussen (erzwungenes Laden/Entladen, Leistungslimits, Reset). Bei den ungeprüften Einträgen unbedingt zuerst nur lesen, nicht schreiben, bis der Wert und seine Wirkung am eigenen Gerät nachvollzogen sind.

RegisterFunktionWerteStatus
41000Gerät zurücksetzen (BMS-Reset)Schreiben löst Reset ausungeprüft
41100Modbus Unit-/Slave-IDrohungeprüft
41200Backup-/USV-Funktion0/1ungeprüft
41500–41509WLAN-SSID des Kommunikationsmoduls (Klartext-ASCII im D-Scan)ASCIIsensibel – nicht auslesen/loggen
41510–41515evtl. WLAN-Passwort/Verschlüsselungsparameter (teils binär, teils ASCII)–sensibel – nicht auslesen/loggen
42000RS485-Kontrolle aktivieren21930 (0x55AA) = ein, 21947 (0x55BB) = ausbestätigt
42010Force Mode0 = Stop/Idle, 1 = Laden, 2 = Entladenbestätigt
42011Ziel-SOC für Force Mode – Gerät soll Laden/Entladen bei Erreichen selbst stoppen0–100 %ungeprüft, vielversprechend
42020Ladeleistung (Force Mode)0–2500 Wbestätigt
42021Entladeleistung (Force Mode)0–2500 Wbestätigt
43000Work Mode0 = Manual, 1 = Anti-Feed, 2 = Trade Modebestätigt
43100–43104Zeitplan 1 (Tage-Bitmask, Start HHMM, Ende HHMM, Modus in W, Enabled)siehe Beschreibungungeprüft
43105–43109Zeitplan 2 (gleiche Struktur wie Zeitplan 1)siehe obenungeprüft
43110–43114Zeitplan 3siehe obenungeprüft
43115–43119Zeitplan 4siehe obenungeprüft
43120–43124Zeitplan 5siehe obenungeprüft
43125–43129Zeitplan 6siehe obenungeprüft
44002Max. Ladeleistung800–2500 Wbestätigt
44003Max. Entladeleistung800–2500 W (D-Scan zeigte 2200 W statt 2500 W – Wert am eigenen Gerät prüfen)Register bestätigt, Wertebereich abweichend geprüft
47400evtl. Magic-Number/Testpattern (0xAABB) – reine Vermutung, niedrige Prioritätrohsehr unsicher

Was nachweislich nicht existiert

So testest du selbst

Mit dem modbus.py-Script von der Startseite lässt sich jedes einzelne Register unkompliziert lesen:

python3 modbus.py <IP-deines-Akkus> <REGISTER>

Vorgehen für ungeprüfte Register: erst lesen und den Wert mit einer bekannten Größe plausibilisieren (z. B. Temperatur mit Umgebungstemperatur vergleichen, Spannung mit der Multimeter-Messung), bevor du dich im eigenen Code darauf verlässt. Bei Schreibregistern zusätzlich: erst mit einem unkritischen Wert testen (z. B. sehr niedrige Lade-/Entladeleistung) und die Reaktion des Akkus beobachten, bevor du produktiv damit arbeitest.

Und wie immer: nicht zu häufig abfragen (siehe Fallstricke auf der Startseite) – ein Poll-Intervall von einigen Sekunden pro Register reicht, mehr sollte man dem Gerät nicht zumuten.

Bestätigt sich bei dir eines der ungeprüften Register – oder stellt sich ein Wert als falsch heraus? Diese Liste lebt von genau solchem Abgleich zwischen A- und D-Modell.

Häufig gestellte Fragen (FAQ)

Gibt es beim Marstek Venus A ein Register für die aktuell gespeicherte Energie in Wh?

Nein, ein solches Register existiert nicht. Weder in unserer eigenen, live getesteten Registerliste noch in den ausgewerteten Community-Quellen (ViperRNMC-Integration, Venus-D-Vollscan) taucht ein Register auf, das direkt die aktuell im Akku gespeicherte Energiemenge in Wh oder kWh liefert. Der Wert lässt sich nur indirekt berechnen: SOC in % (Register 32104) multipliziert mit der Nennkapazität in kWh (Register 32105, „Battery Total Energy"). Genau das macht z. B. auch die Berechnung in unserem battery_collector.py.

Gibt es beim Marstek Venus A ein Register für die kumulierte PV-Gesamterzeugung?

Nein. Es gibt nur Register für die aktuelle Momentanleistung je MPPT-String (30037–30040, vier Strings, ×0.1 W) sowie die zugehörigen Spannungen (30020–30023) und Ströme (30024–30027) – alle vier bei uns bestätigt. Eine über die Zeit aufsummierte PV-Gesamterzeugung in kWh liefert der Akku selbst nicht. Wer diesen Wert braucht, muss die Momentanleistung selbst zeitlich integrieren (z. B. per Cron-Collector wie unserem battery_collector.py oder einer Home-Assistant-Integration-Platform).

Wie viele Zellen hat der Marstek Venus A pro Batteriepack?

13 Zellen in Serie (13S), bei uns live über die Register 34018–34030 bestätigt. Der größere Venus D hat dagegen 16 Zellen pro Pack (Register bis 34033) – Register für Zelle 14–16 liefern beim Venus A folglich keinen sinnvollen Wert.