ModbusAttr Device (Marstek Venus E) reduziert FHEM Performance

Begonnen von Dracolein, 06 April 2026, 18:13:42

Vorheriges Thema - Nächstes Thema

Dracolein

Hallo zusammen,

ich habe mich in den letzten Tagen in die Modbus Thematik reingenerdet. Mein Ziel war es, den neuen Marstek Venus E 3.0 für FHEM lesbar und steuerbar zu machen. Technisch habe ich es inzwischen störungsfrei am laufen. Während 3 Hilfs-Devices nur zur aktiven Steuerung dienen und hier ignoriert werden können, liegt mein Fokus auf dem Main-Device vom Typ ModbusAttr.

Der Grund für diesen Thread bzw. mein "Problem": Meine FHEM Instanz ist nun spürbar deutlich weniger performant, als ich es seit Jahren gewöhnt bin. Einfachste Steuerbefehle (Licht an) haben plötzlich Delays von 1-3 Sekunden, was ich so nicht hinnehmen möchte. Im Folgenden gebe ich das Device als Raw-Code hier mit und hoffe auf Eure Expertise speziell mit Fokus, ob ich irgendwelche Attribute doof / falsch / Suboptimal / whatever definiert habe und dadurch Performance leidet?

Was ich schon getan habe:
- Polling auf 30 Sekunden raufgesetzt
- Register rausgelöscht, die ich nicht unbedingt benötige
- polldelay für diverse Register definiert

Sonstiges:
- FHEM (auf Raspberry Pi) via LAN im Netzwerk
- Batteriespeicher via LAN im Netzwerk
- feste IP-Adressen
- Schnittstelle am Batteriespeicher: Modbus-TCP
- Geräte-Pings im niedrigsten ms-Bereich (also eig. top)

Ich frage mehrere Register gleichzeitig in einem Block ab, die nicht zusammenhängen und Abfragelücken haben. Kann das ein Problem sein?

defmod MarstekVenus01 ModbusAttr 1 30 192.168.178.112:502 TCP
attr MarstekVenus01 comment !!! ACHTUNG: STEUERUNG ÜBER DEVICE dummy_MarstekBefehl !!!\
ACPower        - AC-Leistung in Watt. Positiv = Bezug aus Netz, Negativ = Einspeisung ins Netz\
BattPower      - Batterieleistung in Watt. Positiv = Laden, Negativ = Entladen\
BattVoltage    - Batteriespannung in Volt\
SoC            - State of Charge, Ladestand in Prozent\
TempInternal   - Innentemperatur des Wechselrichters in Grad Celsius\
InverterState  - Aktueller Betriebszustand: Standby/Bereit/Laden/Entladen/USV/Update\
ControlMode    - Externe Steuerung freischalten: 21930=Ein, 21947=Aus. (Muss einmalig auf 21930 gesetzt werden bevor Steuerbefehle wirken)\
Betriebsmodus  - Grundlegende Strategie: Eigenverbrauch / KI-Optimierung / Manuell\
ForceMode      - Aktiver Ladebefehl im Manuell-Modus: Aus / Laden / Entladen\
SetChargePower    - Ladeleistung in Watt (0-2500W), wirkt wenn ForceMode=Laden\
SetDischargePower - Entladeleistung in Watt (0-2500W), wirkt wenn ForceMode=Entladen\
ChargeToSoC    - Ziel-Ladestand in Prozent, Laden/Entladen stoppt automatisch bei diesem Wert
attr MarstekVenus01 dev-h-combine 20
attr MarstekVenus01 dev-h-defPoll 1
attr MarstekVenus01 dev-timing-commDelay 1
attr MarstekVenus01 dev-timing-sendDelay 0.5
attr MarstekVenus01 dev-timing-timeout 4
attr MarstekVenus01 dev-type-i16-len 1
attr MarstekVenus01 dev-type-i16-unpack s>
attr MarstekVenus01 dev-type-u16-len 1
attr MarstekVenus01 dev-type-u16-unpack n
attr MarstekVenus01 group Marstek
attr MarstekVenus01 icon battery_100
attr MarstekVenus01 obj-h30001-format %.0f
attr MarstekVenus01 obj-h30001-reading BattPower
attr MarstekVenus01 obj-h30001-type i16
attr MarstekVenus01 obj-h30006-format %.0f
attr MarstekVenus01 obj-h30006-reading ACPower
attr MarstekVenus01 obj-h30006-type i16
attr MarstekVenus01 obj-h30100-expr $val * 0.01
attr MarstekVenus01 obj-h30100-format %.2f
attr MarstekVenus01 obj-h30100-reading BattVoltage
attr MarstekVenus01 obj-h30100-type u16
attr MarstekVenus01 obj-h35000-expr $val * 0.1
attr MarstekVenus01 obj-h35000-format %.1f
attr MarstekVenus01 obj-h35000-polldelay x10
attr MarstekVenus01 obj-h35000-reading TempInternal
attr MarstekVenus01 obj-h35000-type i16
attr MarstekVenus01 obj-h35100-map 0:Standby,1:Bereit,2:Laden,3:Entladen,4:USV,5:Update
attr MarstekVenus01 obj-h35100-reading InverterState
attr MarstekVenus01 obj-h35100-type u16
attr MarstekVenus01 obj-h37005-format %.0f
attr MarstekVenus01 obj-h37005-polldelay x10
attr MarstekVenus01 obj-h37005-reading SoC
attr MarstekVenus01 obj-h37005-type u16
attr MarstekVenus01 obj-h42000-poll 0
attr MarstekVenus01 obj-h42000-reading ControlMode
attr MarstekVenus01 obj-h42000-set 1
attr MarstekVenus01 obj-h42000-type u16
attr MarstekVenus01 obj-h42010-map 0:Aus,1:Laden,2:Entladen
attr MarstekVenus01 obj-h42010-poll 1
attr MarstekVenus01 obj-h42010-reading ForceMode
attr MarstekVenus01 obj-h42010-set 1
attr MarstekVenus01 obj-h42010-type u16
attr MarstekVenus01 obj-h42011-max 100
attr MarstekVenus01 obj-h42011-min 10
attr MarstekVenus01 obj-h42011-poll 1
attr MarstekVenus01 obj-h42011-reading ChargeToSoC
attr MarstekVenus01 obj-h42011-set 1
attr MarstekVenus01 obj-h42011-type u16
attr MarstekVenus01 obj-h42020-max 2500
attr MarstekVenus01 obj-h42020-min 0
attr MarstekVenus01 obj-h42020-poll 1
attr MarstekVenus01 obj-h42020-reading SetChargePower
attr MarstekVenus01 obj-h42020-set 1
attr MarstekVenus01 obj-h42020-type u16
attr MarstekVenus01 obj-h42021-max 2500
attr MarstekVenus01 obj-h42021-min 0
attr MarstekVenus01 obj-h42021-poll 1
attr MarstekVenus01 obj-h42021-reading SetDischargePower
attr MarstekVenus01 obj-h42021-set 1
attr MarstekVenus01 obj-h42021-type u16
attr MarstekVenus01 obj-h43000-map 0:Manuell,1:Eigenverbrauch,2:KI-Optimierung
attr MarstekVenus01 obj-h43000-poll 1
attr MarstekVenus01 obj-h43000-reading Betriebsmodus
attr MarstekVenus01 obj-h43000-set 1
attr MarstekVenus01 obj-h43000-type u16
attr MarstekVenus01 stateFormat {ReadingsVal($name,"SoC","?") . "% | " . ReadingsVal($name,"InverterState","?") . " | " . ReadingsVal($name,"BattPower","?") . "W"}
attr MarstekVenus01 userReadings ACPower_log {\
    my $last_age = ReadingsAge("MarstekVenus01", "ACPower_log", 9999);;;;\
    my $last_val = ReadingsNum("MarstekVenus01", "ACPower_log", 0);;;;\
    my $current  = ReadingsNum("MarstekVenus01", "ACPower", 0);;;;\
    return ($last_age >= 900 || abs($current - $last_val) >= 100) ? $current : undef;;;;\
},\
  SoC_log {\
    my $last = ReadingsAge("MarstekVenus01", "SoC_log", 9999);;;;\
    return $last >= 900 ? ReadingsNum("MarstekVenus01", "SoC", 0) : undef;;;;\
  }

setstate MarstekVenus01 100% | Bereit | 0W
setstate MarstekVenus01 2026-04-06 17:58:47 ACPower 0
setstate MarstekVenus01 2026-04-06 17:48:13 ACPower_log 0
setstate MarstekVenus01 2026-04-06 17:58:47 BattPower 0
setstate MarstekVenus01 2026-04-06 17:58:48 BattVoltage 53.52
setstate MarstekVenus01 2026-04-06 17:58:51 Betriebsmodus Eigenverbrauch
setstate MarstekVenus01 2026-04-05 20:48:12 ChargeToSoC 100
setstate MarstekVenus01 2026-04-05 20:43:52 ControlMode 21947
setstate MarstekVenus01 2026-04-05 20:43:50 ForceMode Aus
setstate MarstekVenus01 2026-04-06 17:58:49 InverterState Bereit
setstate MarstekVenus01 2026-04-05 20:19:47 SetChargePower 200
setstate MarstekVenus01 2026-04-05 19:34:35 SetDischargePower 300
setstate MarstekVenus01 2026-04-06 17:55:53 SoC 100
setstate MarstekVenus01 2026-04-06 17:45:42 SoC_log 100
setstate MarstekVenus01 2026-04-06 17:56:16 TempInternal 22.6
setstate MarstekVenus01 2026-04-06 12:14:22 state opened

Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

SuMiHe

Hi Dracolein,

hab grad Dein post gefunden, da ich auch seit ein paar Tagen am gleichen Thema bastele. Ich kann Deinen Ansatz super gebrauchen :-). Ich hab Deine Version mal 1:1 auf einem Testsystem installiert (auf einem RasPi 4) und kann keinen nennenswerten Performancenachteil spüren bzw messen. Bei mir läuft es auch auf meinem Realen System IntelCeleron unter pve im container, 2 Kerne, 1GB Ram top.

Gruß Mirko
Gruß Mirko

Dracolein

Habe folgende Attribute editiert, seither sind die "Lags" (blocking?) weitgehend verschwunden

attr MarstekVenus01 dev-h-combine 10
attr MarstekVenus01 dev-h-defPoll 1
attr MarstekVenus01 dev-timing-commDelay 0.2
attr MarstekVenus01 dev-timing-sendDelay 0.2
attr MarstekVenus01 dev-timing-timeout 3
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

SuMiHe

Also ich hatte dein Dev jetzt durchgehend am laufen, keine Probleme.

Bei mir: Fhem Server per LAN im Netz, Speicher per RS485->Wlan da Router direkt daneben und Ports alle belegt.
Gruß Mirko

Dracolein

#4
Ich teile informativ, wie ich den Marstek aus FHEM heraus steuere:

1.) scheint es ein Keepalive-Signal zu benötigen, um die Karre im Eingriffsmodus zu halten, wenn man längere Zeit manuell steuern will, dazu gibts pauschal ein at-Device:

defmod at_MarstekKeepAlive at +*00:00:25 {\
  if (ReadingsVal("MarstekVenus01","ForceMode","Aus") ne "Aus") {\
    fhem("set MarstekVenus01 ControlMode 21930")\
  }\
}
attr at_MarstekKeepAlive comment Alle 25 Sekunden wird geprüft ob der Marstek gerade per ForceMode gesteuert wird. \
Nur wenn ja, wird ControlMode erneuert. Das verhindert dass der Marstek die externe Steuerung nach ~15 Sekunden selbst abschaltet \
ohne dass im Normalbetrieb unnötig Register geschrieben werden.
attr at_MarstekKeepAlive group Marstek
attr at_MarstekKeepAlive room Befehle,Photovoltaik

Ein Dummy-Device dient zum Erzeugen von steuerbaren Readings:
defmod dummy_MarstekBefehl dummy
attr dummy_MarstekBefehl comment Erst die Leistung setzen, dann den Befehl, Beispiel:\
set dummy_MarstekBefehlLeistung 300\
set dummy_MarstekBefehl Befehl Laden\
\
Befehle:\
Laden    - Lädt mit eingestellter Leistung (ForceMode)\
Entladen - Entlädt mit eingestellter Leistung (ForceMode)\
Standby  - Manueller Modus ohne Zeitfenster, weder laden noch entladen\
Stop     - Beendet externe Steuerung, Marstek kehrt in Eigenverbrauch zurück
attr dummy_MarstekBefehl group Marstek
attr dummy_MarstekBefehl readingList Befehl Leistung
attr dummy_MarstekBefehl room Photovoltaik
attr dummy_MarstekBefehl setList Befehl:Laden,Entladen,Standby,Stop Leistung:50,100,200,300,500,800,1000,1500,2000,2500
attr dummy_MarstekBefehl stateFormat Befehl

Das DOIF-Device übernimmt Steuerbefehle und führt sie aus:
defmod MarstekDOIF DOIF ([dummy_MarstekBefehl:Befehl] eq "Laden")\
  (set MarstekVenus01 ControlMode 21930)\
  (set MarstekVenus01 SetChargePower [MarstekBefehl:Leistung])\
  (set MarstekVenus01 ForceMode Laden)\
DOELSEIF ([dummy_MarstekBefehl:Befehl] eq "Entladen")\
  (set MarstekVenus01 ControlMode 21930)\
  (set MarstekVenus01 SetDischargePower [MarstekBefehl:Leistung])\
  (set MarstekVenus01 ForceMode Entladen)\
DOELSEIF ([dummy_MarstekBefehl:Befehl] eq "Standby")\
  (set MarstekVenus01 ControlMode 21930)\
  (set MarstekVenus01 ForceMode Aus)\
  (set MarstekVenus01 Betriebsmodus Manuell)\
DOELSE\
  (set MarstekVenus01 ForceMode Aus)\
  (set MarstekVenus01 Betriebsmodus Eigenverbrauch)\
  (set MarstekVenus01 ControlMode 21947)
attr MarstekDOIF do always
attr MarstekDOIF group Marstek
attr MarstekDOIF room Photovoltaik
attr MarstekDOIF wait 0,2,1:0,2,1:0,1,1:0,1,1

Somit braucht es dann nur noch beispielsweise:
Zitatset dummy_MarstekBefehlLeistung 375

gefolgt von
Zitatset dummy_MarstekBefehl Befehl Laden

und die Batterie versetzt sich in den Modus "Manuell" und beginnt mit 375 Watt zu laden, bis ein anderer Befehl gesendet wird. Wie oben im Device als Kommentar hinterlegt:
Befehle:
Laden    - Lädt mit eingestellter Leistung (ForceMode)
Entladen - Entlädt mit eingestellter Leistung (ForceMode)
Standby  - Manueller Modus ohne Zeitfenster, weder laden noch entladen
Stop     - Beendet externe Steuerung, Marstek kehrt in Eigenverbrauch zurüc

Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

Dracolein

Nachtrag: Anbei zwei Codeschnipsel zur Verwendung als userReadings, um die tägliche Batterie-Ladung und -Entladung mitzuloggen (um sie abends vor Tagesablauf anderweitig wegspeichern zu können)

BattChargeDay_kWh {
  my $power = ReadingsNum("MarstekVenus01","BattPower",0);;
  return undef if $power <= 0;;
  my $last_ts = ReadingsVal("MarstekVenus01","BattEnergyDay_lastTS","0");;
  my $now     = time();;
  my $age     = $now - $last_ts;;
  return undef if $age <= 0 || $age > 60;;
  my $prev    = ReadingsNum("MarstekVenus01","BattChargeDay_kWh",0);;
  return sprintf("%.2f", $prev + ($power * $age / 3600000));;
},
BattDischargeDay_kWh {
  my $power = ReadingsNum("MarstekVenus01","BattPower",0);;
  return undef if $power >= 0;;
  my $last_ts = ReadingsVal("MarstekVenus01","BattEnergyDay_lastTS","0");;
  my $now     = time();;
  my $age     = $now - $last_ts;;
  return undef if $age <= 0 || $age > 60;;
  my $prev    = ReadingsNum("MarstekVenus01","BattDischargeDay_kWh",0);;
  return sprintf("%.2f", $prev + (abs($power) * $age / 3600000));;
},
BattEnergyDay_lastTS {
  return time();;
}
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

BKutte

#6
Hallo Dracolein,

vielen Dank fürs posten deiner Lösung. Ich habe mit noch schnell einen Marstek Venus E 3.0 gesichert und deine Lösung soweit wie möglich nachvollzogen doch bei diesen beiden Codes steige ich leider nicht mehr durch:

Zitatattr MarstekVenus01 userReadings ACPower_log {\
    my $last_age = ReadingsAge("MarstekVenus01", "ACPower_log", 9999);;;;\
    my $last_val = ReadingsNum("MarstekVenus01", "ACPower_log", 0);;;;\
    my $current  = ReadingsNum("MarstekVenus01", "ACPower", 0);;;;\
    return ($last_age >= 900 || abs($current - $last_val) >= 100) ? $current : undef;;;;\
},\
  SoC_log {\
    my $last = ReadingsAge("MarstekVenus01", "SoC_log", 9999);;;;\
    return $last >= 900 ? ReadingsNum("MarstekVenus01", "SoC", 0) : undef;;;;\
  }

Hier hab ich unter Readings folgende Fehlermeldung die ich irgendwie nicht mehr los werde:
"ACPower_log   Error evaluating MarstekVenus01 userReading ACPower_log: Experimental aliasing via reference not enabled at (eval 419) line 1.   2026-04-20 12:22:07"


Auch beim folgenden Code kriege ich eine Fehlermeldung wenn ich diesen in FHEM eingebe:
Zitatdefmod at_MarstekKeepAlive at +*00:00:25 {\
  if (ReadingsVal("MarstekVenus01","ForceMode","Aus") ne "Aus") {\
    fhem("set MarstekVenus01 ControlMode 21930")\
  }\
}

syntax error at (eval 1851) line 1, near "\   if"
syntax error at (eval 1851) line 1, at EOF
syntax error at (eval 1851) line 1, near "}}"

Leider blicke ich da nicht mehr durch und kann nicht nachvollziehen wo der Fehler liegt :-(

rudolfkoenig

#7
Die Zeilen mit \ (und evtl ;; ) verwendet man, wenn man fhem.cfg aendert, oder die Daten in Raw Definition (unten in der ... Menue) eingibt.
Ansonsten bitte alle \ entfernen, und statt ;; nur ; schreiben (Letzteres ist in diesem Beispiel nicht vorhanden).

Dracolein

Zitat von: BKutte am 20 April 2026, 12:23:09Hallo Dracolein,

vielen Dank fürs posten deiner Lösung. Ich habe mit noch schnell einen Marstek Venus E 3.0 gesichert und deine Lösung soweit wie möglich nachvollzogen doch bei diesen beiden Codes steige ich leider nicht mehr durch:

Zitatattr MarstekVenus01 userReadings ACPower_log {\
    my $last_age = ReadingsAge("MarstekVenus01", "ACPower_log", 9999);;;;\
    my $last_val = ReadingsNum("MarstekVenus01", "ACPower_log", 0);;;;\
    my $current  = ReadingsNum("MarstekVenus01", "ACPower", 0);;;;\
    return ($last_age >= 900 || abs($current - $last_val) >= 100) ? $current : undef;;;;\
},\
  SoC_log {\
    my $last = ReadingsAge("MarstekVenus01", "SoC_log", 9999);;;;\
    return $last >= 900 ? ReadingsNum("MarstekVenus01", "SoC", 0) : undef;;;;\
  }

Hier hab ich unter Readings folgende Fehlermeldung die ich irgendwie nicht mehr los werde:
"ACPower_log   Error evaluating MarstekVenus01 userReading ACPower_log: Experimental aliasing via reference not enabled at (eval 419) line 1.   2026-04-20 12:22:07"


Auch beim folgenden Code kriege ich eine Fehlermeldung wenn ich diesen in FHEM eingebe:
Zitatdefmod at_MarstekKeepAlive at +*00:00:25 {\
  if (ReadingsVal("MarstekVenus01","ForceMode","Aus") ne "Aus") {\
    fhem("set MarstekVenus01 ControlMode 21930")\
  }\
}

syntax error at (eval 1851) line 1, near "\   if"
syntax error at (eval 1851) line 1, at EOF
syntax error at (eval 1851) line 1, near "}}"

Leider blicke ich da nicht mehr durch und kann nicht nachvollziehen wo der Fehler liegt :-(

Meld Dich mal, ob Du es hinbekommen hast.
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

BKutte

#9
Hallo Dracolein,
danke der Nachfrage und nochmal danke fürs Posten deines Ansatz hier.

Ich bin noch in der Testphase aber soweit scheint es zu laufen!

Ich habe deine Lösung bis auf den Dummy-Device zur Steuerung (brauche ich für meine Lösung nicht) und die zwei userReadings zum loggen (muss ich noch machen, ist aber nicht so straight forward) nachvollzogen und mit meinen eigenen DOIFs zur Steuerung über meine in FHEM integrierte SolarEdge Anlage ergänzt:

defmod MarstekLADEN DOIF ([SolarEdgePV:status-pv_power] > 2.6 and [SolarEdgePV:status-grid_power] < -2.2 or [SolarEdgePV:status-grid_power] + [MarstekVenus01:ACPower]/1000 < -2.2 )
 (set MarstekVenus01 ControlMode 21930)
 (set MarstekVenus01 SetChargePower 2000)
 (set MarstekVenus01 ForceMode Laden)
DOELSEIF ([SolarEdgePV:status-pv_power] > 1.6 and [SolarEdgePV:status-grid_power] < -1.2 or [SolarEdgePV:status-grid_power] + [MarstekVenus01:ACPower]/1000 < -1.2 )
 (set MarstekVenus01 ControlMode 21930)
 (set MarstekVenus01 SetChargePower 1000)
 (set MarstekVenus01 ForceMode Laden)
DOELSEIF ([SolarEdgePV:status-pv_power] > 1.1 and [SolarEdgePV:status-grid_power] < -0.9 or [SolarEdgePV:status-grid_power] + [MarstekVenus01:ACPower]/1000 < -0.9 )
 (set MarstekVenus01 ControlMode 21930)
 (set MarstekVenus01 SetChargePower 500)
 (set MarstekVenus01 ForceMode Laden)
DOELSE
 (set MarstekVenus01 ControlMode 21947)
 (set MarstekVenus01 ForceMode Aus)
 (set MarstekVenus01 SetChargePower 0)
 (set MarstekVenus01 SetDischargePower 0)

attr MarstekLADEN group Marstek
attr MarstekLADEN room PV
attr MarstekLADEN wait 300,2,1:300,2,1:300,2,1:300,2,1,1

defmod MarstekENTLADEN DOIF ([SolarEdgePV:status-pv_power] < 0.4 )
  (set MarstekVenus01 ControlMode 21930)
  (set MarstekVenus01 SetDischargePower 300)
  (set MarstekVenus01 ForceMode Entladen)
DOELSE
  (set MarstekVenus01 ControlMode 21947)
  (set MarstekVenus01 ForceMode Aus)
  (set MarstekVenus01 SetChargePower 0)
  (set MarstekVenus01 SetDischargePower 0)

attr MarstekENTLADEN group Marstek
attr MarstekENTLADEN room PV
attr MarstekENTLADEN wait 300,2,1:300,2,1,1

Die Regelung ist absichtlich langsam/träge da ich schon einen AC-Speicher habe der per CT Messung fix die Lastspitzen ausgleicht.

Edit: Ich verstehe gerade langsam wie der WAIT Timer hier funtkioniert und feile dran ;-)

columbine

Ich brauche mal eure Hilfe, ich habe allerdings den Venus A, aber die Register sind gleich, bei mir werden die Register 33000, 33004, 33008 immer mit 0 ausgegeben obwohl in der App werte drin sind ich weiß nicht weiter zusätzlich bekomme ich diese Fehlermeldung LAST_ERROR slave replied with error code 83 / 02, illegal data address. Vielen Dank für eure Hilfe!

defmod Marstek_Venus_A ModbusAttr 1 30 192.168.1.174:502 TCP
attr Marstek_Venus_A alias Marstek Venus A
attr Marstek_Venus_A dev-h-combine 1
attr Marstek_Venus_A dev-h-defPoll 1
attr Marstek_Venus_A dev-i-combine 10
attr Marstek_Venus_A dev-timing-commDelay 0.5
attr Marstek_Venus_A dev-timing-sendDelay 0.2
attr Marstek_Venus_A dev-timing-timeout 4
attr Marstek_Venus_A event-on-change-reading .*
attr Marstek_Venus_A group Akku
attr Marstek_Venus_A icon battery_50
attr Marstek_Venus_A obj-h30001-reading battery_power
attr Marstek_Venus_A obj-h30001-unpack s>
attr Marstek_Venus_A obj-h30006-reading ac_power
attr Marstek_Venus_A obj-h30006-unpack s>
attr Marstek_Venus_A obj-h30020-expr $val / 10
attr Marstek_Venus_A obj-h30020-reading mppt1_voltage
attr Marstek_Venus_A obj-h30020-unpack n
attr Marstek_Venus_A obj-h30021-expr $val / 10
attr Marstek_Venus_A obj-h30021-reading mppt2_voltage
attr Marstek_Venus_A obj-h30021-unpack n
attr Marstek_Venus_A obj-h30022-expr $val / 10
attr Marstek_Venus_A obj-h30022-reading mppt3_voltage
attr Marstek_Venus_A obj-h30022-unpack n
attr Marstek_Venus_A obj-h30023-expr $val / 10
attr Marstek_Venus_A obj-h30023-reading mppt4_voltage
attr Marstek_Venus_A obj-h30023-unpack n
attr Marstek_Venus_A obj-h30024-expr $val / 10
attr Marstek_Venus_A obj-h30024-reading mppt1_current
attr Marstek_Venus_A obj-h30024-unpack n
attr Marstek_Venus_A obj-h30025-expr $val / 10
attr Marstek_Venus_A obj-h30025-reading mppt2_current
attr Marstek_Venus_A obj-h30025-unpack n
attr Marstek_Venus_A obj-h30026-expr $val / 10
attr Marstek_Venus_A obj-h30026-reading mppt3_current
attr Marstek_Venus_A obj-h30026-unpack n
attr Marstek_Venus_A obj-h30027-expr $val / 10
attr Marstek_Venus_A obj-h30027-reading mppt4_current
attr Marstek_Venus_A obj-h30027-unpack n
attr Marstek_Venus_A obj-h30037-expr $val / 10
attr Marstek_Venus_A obj-h30037-reading mppt1_power
attr Marstek_Venus_A obj-h30037-unpack n
attr Marstek_Venus_A obj-h30038-expr $val / 10
attr Marstek_Venus_A obj-h30038-reading mppt2_power
attr Marstek_Venus_A obj-h30038-unpack n
attr Marstek_Venus_A obj-h30039-expr $val / 10
attr Marstek_Venus_A obj-h30039-reading mppt3_power
attr Marstek_Venus_A obj-h30039-unpack n
attr Marstek_Venus_A obj-h30040-expr $val / 10
attr Marstek_Venus_A obj-h30040-reading mppt4_power
attr Marstek_Venus_A obj-h30040-unpack n
attr Marstek_Venus_A obj-h30100-expr $val / 100
attr Marstek_Venus_A obj-h30100-reading battery_voltage
attr Marstek_Venus_A obj-h30100-unpack n
attr Marstek_Venus_A obj-h30101-expr $val / 10
attr Marstek_Venus_A obj-h30101-reading battery_current
attr Marstek_Venus_A obj-h30101-unpack s>
attr Marstek_Venus_A obj-h30200-reading ems_version
attr Marstek_Venus_A obj-h30200-unpack n
attr Marstek_Venus_A obj-h30202-reading vms_version
attr Marstek_Venus_A obj-h30202-unpack n
attr Marstek_Venus_A obj-h30204-reading bms_version
attr Marstek_Venus_A obj-h30204-unpack n
attr Marstek_Venus_A obj-h30300-reading wifi_status
attr Marstek_Venus_A obj-h30300-unpack n
attr Marstek_Venus_A obj-h30301-reading bluetooth_status
attr Marstek_Venus_A obj-h30301-unpack n
attr Marstek_Venus_A obj-h30302-reading cloud_status
attr Marstek_Venus_A obj-h30302-unpack n
attr Marstek_Venus_A obj-h30303-reading wifi_signal_dbm
attr Marstek_Venus_A obj-h30303-unpack s>
attr Marstek_Venus_A obj-h30304-len 6
attr Marstek_Venus_A obj-h30304-poll 1
attr Marstek_Venus_A obj-h30304-polldelay x30
attr Marstek_Venus_A obj-h30304-reading mac_address
attr Marstek_Venus_A obj-h30304-unpack a12
attr Marstek_Venus_A obj-h30350-reading comm_module_firmware
attr Marstek_Venus_A obj-h30350-unpack a12
attr Marstek_Venus_A obj-h31000-polldelay x30
attr Marstek_Venus_A obj-h31000-reading device_name
attr Marstek_Venus_A obj-h31000-unpack a20
attr Marstek_Venus_A obj-h32104-poll 1
attr Marstek_Venus_A obj-h32104-reading soc_total
attr Marstek_Venus_A obj-h32104-unpack n
attr Marstek_Venus_A obj-h32105-expr $val / 1000
attr Marstek_Venus_A obj-h32105-reading battery_total_energy_kwh
attr Marstek_Venus_A obj-h32105-unpack n
attr Marstek_Venus_A obj-h32200-expr $val / 10
attr Marstek_Venus_A obj-h32200-reading ac_voltage
attr Marstek_Venus_A obj-h32200-unpack n
attr Marstek_Venus_A obj-h32204-expr $val / 10
attr Marstek_Venus_A obj-h32204-reading ac_frequency
attr Marstek_Venus_A obj-h32204-unpack n
attr Marstek_Venus_A obj-h32300-expr $val / 10
attr Marstek_Venus_A obj-h32300-reading ac_offgrid_voltage
attr Marstek_Venus_A obj-h32300-unpack n
attr Marstek_Venus_A obj-h32301-expr $val / 100
attr Marstek_Venus_A obj-h32301-reading ac_offgrid_current
attr Marstek_Venus_A obj-h32301-unpack n
attr Marstek_Venus_A obj-h32302-reading ac_offgrid_power
attr Marstek_Venus_A obj-h32302-unpack s>
attr Marstek_Venus_A obj-h33000-expr $val / 100
attr Marstek_Venus_A obj-h33000-len 2
attr Marstek_Venus_A obj-h33000-reading total_charging_energy
attr Marstek_Venus_A obj-h33000-unpack N
attr Marstek_Venus_A obj-h33002-expr $val / 100
attr Marstek_Venus_A obj-h33002-len 2
attr Marstek_Venus_A obj-h33002-reading total_discharging_energy
attr Marstek_Venus_A obj-h33002-unpack N
attr Marstek_Venus_A obj-h33004-expr $val * 10
attr Marstek_Venus_A obj-h33004-len 2
attr Marstek_Venus_A obj-h33004-polldelay x1
attr Marstek_Venus_A obj-h33004-reading daily_charging_energy_wh
attr Marstek_Venus_A obj-h33004-unpack N
attr Marstek_Venus_A obj-h33006-expr $val * 10
attr Marstek_Venus_A obj-h33006-len 2
attr Marstek_Venus_A obj-h33006-reading daily_discharging_energy_wh
attr Marstek_Venus_A obj-h33006-unpack N
attr Marstek_Venus_A obj-h33008-expr $val * 10
attr Marstek_Venus_A obj-h33008-len 2
attr Marstek_Venus_A obj-h33008-reading monthly_charging_energy_wh
attr Marstek_Venus_A obj-h33008-unpack N
attr Marstek_Venus_A obj-h33010-expr $val * 10
attr Marstek_Venus_A obj-h33010-len 2
attr Marstek_Venus_A obj-h33010-reading monthly_discharging_energy_wh
attr Marstek_Venus_A obj-h33010-unpack N
attr Marstek_Venus_A obj-h34002-expr $val / 10
attr Marstek_Venus_A obj-h34002-poll 1
attr Marstek_Venus_A obj-h34002-reading soc_pack1
attr Marstek_Venus_A obj-h34002-unpack n
attr Marstek_Venus_A obj-h34003-reading battery_cycle_count_P1
attr Marstek_Venus_A obj-h34003-unpack n
attr Marstek_Venus_A obj-h34018-expr $val / 1000
attr Marstek_Venus_A obj-h34018-reading Cell_01_Volt_P1
attr Marstek_Venus_A obj-h34018-unpack s>
attr Marstek_Venus_A obj-h34019-expr $val / 1000
attr Marstek_Venus_A obj-h34019-reading Cell_02_Volt_P1
attr Marstek_Venus_A obj-h34019-unpack s>
attr Marstek_Venus_A obj-h34020-expr $val / 1000
attr Marstek_Venus_A obj-h34020-reading Cell_03_Volt_P1
attr Marstek_Venus_A obj-h34020-unpack s>
attr Marstek_Venus_A obj-h34021-expr $val / 1000
attr Marstek_Venus_A obj-h34021-reading Cell_04_Volt_P1
attr Marstek_Venus_A obj-h34021-unpack s>
attr Marstek_Venus_A obj-h34022-expr $val / 1000
attr Marstek_Venus_A obj-h34022-reading Cell_05_Volt_P1
attr Marstek_Venus_A obj-h34022-unpack s>
attr Marstek_Venus_A obj-h34023-expr $val / 1000
attr Marstek_Venus_A obj-h34023-reading Cell_06_Volt_P1
attr Marstek_Venus_A obj-h34023-unpack s>
attr Marstek_Venus_A obj-h34024-expr $val / 1000
attr Marstek_Venus_A obj-h34024-reading Cell_07_Volt_P1
attr Marstek_Venus_A obj-h34024-unpack s>
attr Marstek_Venus_A obj-h34025-expr $val / 1000
attr Marstek_Venus_A obj-h34025-reading Cell_08_Volt_P1
attr Marstek_Venus_A obj-h34025-unpack s>
attr Marstek_Venus_A obj-h34026-expr $val / 1000
attr Marstek_Venus_A obj-h34026-reading Cell_09_Volt_P1
attr Marstek_Venus_A obj-h34026-unpack s>
attr Marstek_Venus_A obj-h34027-expr $val / 1000
attr Marstek_Venus_A obj-h34027-reading Cell_10_Volt_P1
attr Marstek_Venus_A obj-h34027-unpack s>
attr Marstek_Venus_A obj-h34028-expr $val / 1000
attr Marstek_Venus_A obj-h34028-reading Cell_11_Volt_P1
attr Marstek_Venus_A obj-h34028-unpack s>
attr Marstek_Venus_A obj-h34029-expr $val / 1000
attr Marstek_Venus_A obj-h34029-reading Cell_12_Volt_P1
attr Marstek_Venus_A obj-h34029-unpack s>
attr Marstek_Venus_A obj-h34030-expr $val / 1000
attr Marstek_Venus_A obj-h34030-reading Cell_13_Volt_P1
attr Marstek_Venus_A obj-h34030-unpack s>
attr Marstek_Venus_A obj-h34102-expr $val / 10
attr Marstek_Venus_A obj-h34102-poll 1
attr Marstek_Venus_A obj-h34102-reading soc_pack2
attr Marstek_Venus_A obj-h34102-unpack n
attr Marstek_Venus_A obj-h34103-poll 1
attr Marstek_Venus_A obj-h34103-reading battery_cycle_count_P2
attr Marstek_Venus_A obj-h34103-unpack n
attr Marstek_Venus_A obj-h34118-expr $val / 1000
attr Marstek_Venus_A obj-h34118-reading Cell_01_Volt_P2
attr Marstek_Venus_A obj-h34118-unpack s>
attr Marstek_Venus_A obj-h34119-expr $val / 1000
attr Marstek_Venus_A obj-h34119-reading Cell_02_Volt_P2
attr Marstek_Venus_A obj-h34119-unpack s>
attr Marstek_Venus_A obj-h34120-expr $val / 1000
attr Marstek_Venus_A obj-h34120-reading Cell_03_Volt_P2
attr Marstek_Venus_A obj-h34120-unpack s>
attr Marstek_Venus_A obj-h34121-expr $val / 1000
attr Marstek_Venus_A obj-h34121-reading Cell_04_Volt_P2
attr Marstek_Venus_A obj-h34121-unpack s>
attr Marstek_Venus_A obj-h34122-expr $val / 1000
attr Marstek_Venus_A obj-h34122-reading Cell_05_Volt_P2
attr Marstek_Venus_A obj-h34122-unpack s>
attr Marstek_Venus_A obj-h34123-expr $val / 1000
attr Marstek_Venus_A obj-h34123-reading Cell_06_Volt_P2
attr Marstek_Venus_A obj-h34123-unpack s>
attr Marstek_Venus_A obj-h34124-expr $val / 1000
attr Marstek_Venus_A obj-h34124-reading Cell_07_Volt_P2
attr Marstek_Venus_A obj-h34124-unpack s>
attr Marstek_Venus_A obj-h34125-expr $val / 1000
attr Marstek_Venus_A obj-h34125-reading Cell_08_Volt_P2
attr Marstek_Venus_A obj-h34125-unpack s>
attr Marstek_Venus_A obj-h34126-expr $val / 1000
attr Marstek_Venus_A obj-h34126-reading Cell_09_Volt_P2
attr Marstek_Venus_A obj-h34126-unpack s>
attr Marstek_Venus_A obj-h34127-expr $val / 1000
attr Marstek_Venus_A obj-h34127-reading Cell_10_Volt_P2
attr Marstek_Venus_A obj-h34127-unpack s>
attr Marstek_Venus_A obj-h34128-expr $val / 1000
attr Marstek_Venus_A obj-h34128-reading Cell_11_Volt_P2
attr Marstek_Venus_A obj-h34128-unpack s>
attr Marstek_Venus_A obj-h34129-expr $val / 1000
attr Marstek_Venus_A obj-h34129-reading Cell_12_Volt_P2
attr Marstek_Venus_A obj-h34129-unpack s>
attr Marstek_Venus_A obj-h34130-expr $val / 1000
attr Marstek_Venus_A obj-h34130-reading Cell_13_Volt_P2
attr Marstek_Venus_A obj-h34130-unpack s>
attr Marstek_Venus_A obj-h35000-expr $val / 10
attr Marstek_Venus_A obj-h35000-polldelay x10
attr Marstek_Venus_A obj-h35000-reading battery_temp
attr Marstek_Venus_A obj-h35000-unpack s>
attr Marstek_Venus_A obj-h35001-expr $val / 10
attr Marstek_Venus_A obj-h35001-reading temp_mos1
attr Marstek_Venus_A obj-h35001-unpack s>
attr Marstek_Venus_A obj-h35002-expr $val / 10
attr Marstek_Venus_A obj-h35002-reading temp_mos2
attr Marstek_Venus_A obj-h35002-unpack s>
attr Marstek_Venus_A obj-h35010-expr $val / 10
attr Marstek_Venus_A obj-h35010-polldelay x3
attr Marstek_Venus_A obj-h35010-reading cell_temp_max
attr Marstek_Venus_A obj-h35010-unpack s>
attr Marstek_Venus_A obj-h35011-expr $val / 10
attr Marstek_Venus_A obj-h35011-polldelay x3
attr Marstek_Venus_A obj-h35011-reading cell_temp_min
attr Marstek_Venus_A obj-h35011-unpack s>
attr Marstek_Venus_A obj-h35100-reading inverter_state_code
attr Marstek_Venus_A obj-h35100-unpack n
attr Marstek_Venus_A obj-h36000-reading alarm_status_bits
attr Marstek_Venus_A obj-h36000-unpack n
attr Marstek_Venus_A obj-h36100-reading fault_status_bits
attr Marstek_Venus_A obj-h36100-unpack n
attr Marstek_Venus_A obj-h37004-expr $val / 100
attr Marstek_Venus_A obj-h37004-reading ac_current
attr Marstek_Venus_A obj-h37004-unpack s>
attr Marstek_Venus_A obj-h37007-expr $val / 1000
attr Marstek_Venus_A obj-h37007-reading cell_voltage_max
attr Marstek_Venus_A obj-h37007-unpack n
attr Marstek_Venus_A obj-h37008-expr $val / 1000
attr Marstek_Venus_A obj-h37008-reading cell_voltage_min
attr Marstek_Venus_A obj-h37008-unpack n
attr Marstek_Venus_A obj-h41001-reading factory_reset
attr Marstek_Venus_A obj-h41001-set 1
attr Marstek_Venus_A obj-h41200-map 0:On, 1:Off
attr Marstek_Venus_A obj-h41200-reading backup_function
attr Marstek_Venus_A obj-h41200-set 1
attr Marstek_Venus_A obj-h41200-unpack n
attr Marstek_Venus_A obj-h42000-map 21930:On, 21947:Off
attr Marstek_Venus_A obj-h42000-reading RS485_Control
attr Marstek_Venus_A obj-h42000-set 1
attr Marstek_Venus_A obj-h42000-unpack n
attr Marstek_Venus_A obj-h42010-map 0:None, 1:Force_Charge, 2:Force_Discharge
attr Marstek_Venus_A obj-h42010-reading force_action
attr Marstek_Venus_A obj-h42010-set 1
attr Marstek_Venus_A obj-h42010-unpack n
attr Marstek_Venus_A obj-h42020-max 1500
attr Marstek_Venus_A obj-h42020-min 0
attr Marstek_Venus_A obj-h42020-reading target_charge_power
attr Marstek_Venus_A obj-h42020-set 1
attr Marstek_Venus_A obj-h42020-unpack n
attr Marstek_Venus_A obj-h42021-max 1500
attr Marstek_Venus_A obj-h42021-min 0
attr Marstek_Venus_A obj-h42021-reading target_discharge_power
attr Marstek_Venus_A obj-h42021-set 1
attr Marstek_Venus_A obj-h42021-unpack n
attr Marstek_Venus_A obj-h43000-map 0:manual, 1:anti_feed, 2:trade_mode
attr Marstek_Venus_A obj-h43000-reading user_work_mode
attr Marstek_Venus_A obj-h43000-set 1
attr Marstek_Venus_A obj-h43000-unpack n
attr Marstek_Venus_A obj-h43100-reading schedule_1_days
attr Marstek_Venus_A obj-h43100-set 1
attr Marstek_Venus_A obj-h43100-unpack n
attr Marstek_Venus_A obj-h43101-reading schedule_1_start
attr Marstek_Venus_A obj-h43101-set 1
attr Marstek_Venus_A obj-h43101-unpack n
attr Marstek_Venus_A obj-h43102-reading schedule_1_end
attr Marstek_Venus_A obj-h43102-set 1
attr Marstek_Venus_A obj-h43102-unpack n
attr Marstek_Venus_A obj-h43103-reading schedule_1_mode
attr Marstek_Venus_A obj-h43103-set 1
attr Marstek_Venus_A obj-h43103-unpack s>
attr Marstek_Venus_A obj-h43104-reading schedule_1_enabled
attr Marstek_Venus_A obj-h43104-set 1
attr Marstek_Venus_A obj-h43104-unpack n
attr Marstek_Venus_A obj-h43105-reading schedule_2_days
attr Marstek_Venus_A obj-h43105-set 1
attr Marstek_Venus_A obj-h43105-unpack n
attr Marstek_Venus_A obj-h43106-reading schedule_2_start
attr Marstek_Venus_A obj-h43106-set 1
attr Marstek_Venus_A obj-h43106-unpack n
attr Marstek_Venus_A obj-h43107-reading schedule_2_end
attr Marstek_Venus_A obj-h43107-set 1
attr Marstek_Venus_A obj-h43107-unpack n
attr Marstek_Venus_A obj-h43108-reading schedule_2_mode
attr Marstek_Venus_A obj-h43108-set 1
attr Marstek_Venus_A obj-h43108-unpack s>
attr Marstek_Venus_A obj-h43109-reading schedule_2_enabled
attr Marstek_Venus_A obj-h43109-set 1
attr Marstek_Venus_A obj-h43109-unpack n
attr Marstek_Venus_A obj-h43110-reading schedule_3_days
attr Marstek_Venus_A obj-h43110-set 1
attr Marstek_Venus_A obj-h43110-unpack n
attr Marstek_Venus_A obj-h43111-reading schedule_3_start
attr Marstek_Venus_A obj-h43111-set 1
attr Marstek_Venus_A obj-h43111-unpack n
attr Marstek_Venus_A obj-h43112-reading schedule_3_end
attr Marstek_Venus_A obj-h43112-set 1
attr Marstek_Venus_A obj-h43112-unpack n
attr Marstek_Venus_A obj-h43113-reading schedule_3_mode
attr Marstek_Venus_A obj-h43113-set 1
attr Marstek_Venus_A obj-h43113-unpack s>
attr Marstek_Venus_A obj-h43114-reading schedule_3_enabled
attr Marstek_Venus_A obj-h43114-set 1
attr Marstek_Venus_A obj-h43114-unpack n
attr Marstek_Venus_A obj-h43115-reading schedule_4_days
attr Marstek_Venus_A obj-h43115-set 1
attr Marstek_Venus_A obj-h43115-unpack n
attr Marstek_Venus_A obj-h43116-reading schedule_4_start
attr Marstek_Venus_A obj-h43116-set 1
attr Marstek_Venus_A obj-h43116-unpack n
attr Marstek_Venus_A obj-h43117-reading schedule_4_end
attr Marstek_Venus_A obj-h43117-set 1
attr Marstek_Venus_A obj-h43117-unpack n
attr Marstek_Venus_A obj-h43118-reading schedule_4_mode
attr Marstek_Venus_A obj-h43118-set 1
attr Marstek_Venus_A obj-h43118-unpack s>
attr Marstek_Venus_A obj-h43119-reading schedule_4_enabled
attr Marstek_Venus_A obj-h43119-set 1
attr Marstek_Venus_A obj-h43119-unpack n
attr Marstek_Venus_A obj-h43120-reading schedule_5_days
attr Marstek_Venus_A obj-h43120-set 1
attr Marstek_Venus_A obj-h43120-unpack n
attr Marstek_Venus_A obj-h43121-reading schedule_5_start
attr Marstek_Venus_A obj-h43121-set 1
attr Marstek_Venus_A obj-h43121-unpack n
attr Marstek_Venus_A obj-h43122-reading schedule_5_end
attr Marstek_Venus_A obj-h43122-set 1
attr Marstek_Venus_A obj-h43122-unpack n
attr Marstek_Venus_A obj-h43123-reading schedule_5_mode
attr Marstek_Venus_A obj-h43123-set 1
attr Marstek_Venus_A obj-h43123-unpack s>
attr Marstek_Venus_A obj-h43124-reading schedule_5_enabled
attr Marstek_Venus_A obj-h43124-set 1
attr Marstek_Venus_A obj-h43124-unpack n
attr Marstek_Venus_A obj-h43125-reading schedule_6_days
attr Marstek_Venus_A obj-h43125-set 1
attr Marstek_Venus_A obj-h43125-unpack n
attr Marstek_Venus_A obj-h43126-reading schedule_6_start
attr Marstek_Venus_A obj-h43126-set 1
attr Marstek_Venus_A obj-h43126-unpack n
attr Marstek_Venus_A obj-h43127-reading schedule_6_end
attr Marstek_Venus_A obj-h43127-set 1
attr Marstek_Venus_A obj-h43127-unpack n
attr Marstek_Venus_A obj-h43128-reading schedule_6_mode
attr Marstek_Venus_A obj-h43128-set 1
attr Marstek_Venus_A obj-h43128-unpack s>
attr Marstek_Venus_A obj-h43129-reading schedule_6_enabled
attr Marstek_Venus_A obj-h43129-set 1
attr Marstek_Venus_A obj-h43129-unpack n
attr Marstek_Venus_A obj-h44000-expr $val / 10
attr Marstek_Venus_A obj-h44000-reading charging_cutoff_soc
attr Marstek_Venus_A obj-h44000-set 1
attr Marstek_Venus_A obj-h44000-unpack n
attr Marstek_Venus_A obj-h44001-expr $val / 10
attr Marstek_Venus_A obj-h44001-reading discharging_cutoff_soc
attr Marstek_Venus_A obj-h44001-set 1
attr Marstek_Venus_A obj-h44001-unpack n
attr Marstek_Venus_A obj-h44002-reading max_charge_power_limit
attr Marstek_Venus_A obj-h44002-set 1
attr Marstek_Venus_A obj-h44002-unpack n
attr Marstek_Venus_A obj-h44003-reading max_discharge_power_limit
attr Marstek_Venus_A obj-h44003-set 1
attr Marstek_Venus_A obj-h44003-unpack n
attr Marstek_Venus_A room 96_Energy
attr Marstek_Venus_A showError 1
attr Marstek_Venus_A stateFormat {\
\
  my $socT = ReadingsVal($name,"soc_total",0);;;;\
\
  my $soc1 = ReadingsVal($name,"soc_pack1",0);;;;\
\
  my $soc2 = ReadingsVal($name,"soc_pack2",0);;;;\
\
  my $batP = ReadingsVal($name,"battery_power",0);;;;\
\
  my $p1   = ReadingsVal($name,"mppt1_power",0);;;;\
\
  my $p2   = ReadingsVal($name,"mppt2_power",0);;;;\
\
  my $p3   = ReadingsVal($name,"mppt3_power",0);;;;\
\
  my $p4   = ReadingsVal($name,"mppt4_power",0);;;;\
\
  my $pSum = $p1 + $p2 + $p3 + $p4;;;;\
\
  my $out  = ReadingsVal($name,"ac_power",0);;;;\
\
  my $temp = ReadingsVal($name,"battery_temp",0);;;;\
\
\
  my $icon =\
\
    $socT < 25 ? 'measure_battery_25@red' :\
\
    $socT < 50 ? 'measure_battery_50@orange' :\
\
    $socT < 75 ? 'measure_battery_75@green' : 'measure_battery_100@green';;;;\
\
\
  return sprintf('<html><img src="/fhem/icons/%s" width="24" height="24" style="vertical-align:middle"> <span>SOC: %.0f%%</span> <span style="font-size:0.8em">(P1:%.1f%% P2:%.1f%%)</span> (%s W) | ☀️ Σ: %.0f W <span style="font-size:0.8em">(P1:%.0fW P2:%.0fW P3:%.0fW P4:%.0fW)</span> | ⚡ Ausgang: %.0f W | 🌡�: %.1f°C</html>',\
\
    $icon, $socT, $soc1, $soc2, $batP, $pSum, $p1, $p2, $p3, $p4, $out, $temp);;;;\
\
}
attr Marstek_Venus_A userReadings inverter_state_text:inverter_state_code.* { \
  my @states = ('Sleep', 'Standby', 'Charge', 'Discharge', 'Backup Mode', 'OTA Upgrade', 'Bypass');;\
  my $val = ReadingsNum($name,"inverter_state_code",0);;\
  return $states[$val] // "Unknown ($val)";;\
}\
battery_cell_drift { sprintf("%.3f", ReadingsNum($name,"cell_voltage_max",0) - ReadingsNum($name,"cell_voltage_min",0)) }, \
stored_energy_kwh { sprintf("%.2f kWh", (ReadingsNum($name,"soc_total",0) * 4.26) / 100) }, \
mppt_total_power:(mppt1_power|mppt2_power|mppt3_power|mppt4_power).* { ReadingsNum($name,"mppt1_power",0) + ReadingsNum($name,"mppt2_power",0) + ReadingsNum($name,"mppt3_power",0) + ReadingsNum($name,"mppt4_power",0) }, \
alarm_text:alarm_status_bits.* { \
  my $val = ReadingsNum($name,"alarm_status_bits",0);; \
  return "OK" if $val == 0;; \
  \
  my %alarmMap = (\
    0  => "PLL Abnormal Restart",\
    1  => "Overtemperature Limit",\
    2  => "Low Temperature Limit",\
    3  => "Fan Abnormal Warning",\
    4  => "Low Battery SOC Warning",\
    5  => "Output Overcurrent Warning",\
    6  => "Abnormal Line Sequence Detection",\
    16 => "WiFi Abnormal",\
    17 => "BLE Abnormal",\
    18 => "Network Abnormal",\
    19 => "CT Connection Abnormal"\
  );;\
  \
  my @a;;\
  for my $bit (sort { $a <=> $b } keys %alarmMap) {\
    if ($val & (1 << $bit)) {\
      push @a, $alarmMap{$bit};;\
    }\
  }\
  \
  return @a ? join(", ", @a) : "Unknown Alarm (Code: $val)";;\
},\
fault_text:fault_status_bits.* {\
  my $val = ReadingsNum($name,"fault_status_bits",0);;\
  return "OK" if $val == 0;;\
  \
  my %errors = (\
    0  => "Grid Overvoltage",\
    1  => "Grid Undervoltage",\
    2  => "Grid Overfrequency",\
    3  => "Grid Underfrequency",\
    16 => "BAT Overvoltage",\
    17 => "BAT Undervoltage",\
    18 => "BAT Overcurrent",\
    19 => "BAT low SOC",\
    20 => "BAT communication failure",\
    21 => "BMS protect",\
    35 => "other system failure",\
    58 => "Overtemperature Protection"\
  );;\
\
  my @found;;\
  # Wir prüfen die Bits 0 bis 63\
  for my $bit (keys %errors) {\
    if ($val & (1 << $bit)) {\
      push @found, $errors{$bit};;\
    }\
  }\
  \
  return @found ? join(", ", @found) : "Unknown Error ($val)";;\
},\
battery_flow:ac_power.* {\
  my $pv = ReadingsNum($name,"mppt_total_power",0);;\
  my $out = ReadingsNum($name,"ac_power",0);;\
  \
  # Wir rechnen mit ca. 5% Wandlungsverlusten im System\
  my $flow = $pv - ($out);;\
  \
  return sprintf("%.1f", $flow);;\
}
attr Marstek_Venus_A verbose 5
attr Marstek_Venus_A webCmd user_work_mode:target_charge_power:target_discharge_power:force_action:RS485_Control:backup_function
attr Marstek_Venus_A widgetOverride user_work_mode:select,manual,anti_feed,trade_mode target_charge_power:slider,0,50,1500 target_discharge_power:slider,0,50,1500 backup_function:select,On,Off force_action:select,None,Force_Charge,Force_Discharge RS485_Control:select,On,Off

setstate Marstek_Venus_A <html><img src="/fhem/icons/measure_battery_25@red" width="24" height="24" style="vertical-align:middle"> <span>SOC: 17%</span> <span style="font-size:0.8em">(P1:14.7% P2:19.9%)</span> (-246 W) | ☀️ Σ: 411 W <span style="font-size:0.8em">(P1:301W P2:110W P3:0W P4:0W)</span> | ⚡ Ausgang: 228 W | 🌡�: 30.5°C</html>
setstate Marstek_Venus_A 2026-04-22 11:09:30 Cell_01_Volt_P1 3.25
setstate Marstek_Venus_A 2026-04-22 11:09:33 Cell_01_Volt_P2 3.244
setstate Marstek_Venus_A 2026-04-22 11:07:00 Cell_02_Volt_P1 3.246
setstate Marstek_Venus_A 2026-04-22 11:07:03 Cell_02_Volt_P2 3.245
setstate Marstek_Venus_A 2026-04-22 11:06:00 Cell_03_Volt_P1 3.243
setstate Marstek_Venus_A 2026-04-22 11:06:03 Cell_03_Volt_P2 3.245
setstate Marstek_Venus_A 2026-04-22 11:09:31 Cell_04_Volt_P1 3.247
setstate Marstek_Venus_A 2026-04-22 11:09:34 Cell_04_Volt_P2 3.242
setstate Marstek_Venus_A 2026-04-22 11:07:01 Cell_05_Volt_P1 3.243
setstate Marstek_Venus_A 2026-04-22 11:07:03 Cell_05_Volt_P2 3.244
setstate Marstek_Venus_A 2026-04-22 11:06:01 Cell_06_Volt_P1 3.244
setstate Marstek_Venus_A 2026-04-22 11:06:04 Cell_06_Volt_P2 3.244
setstate Marstek_Venus_A 2026-04-22 11:09:31 Cell_07_Volt_P1 3.249
setstate Marstek_Venus_A 2026-04-22 11:09:34 Cell_07_Volt_P2 3.243
setstate Marstek_Venus_A 2026-04-22 11:07:01 Cell_08_Volt_P1 3.246
setstate Marstek_Venus_A 2026-04-22 11:07:04 Cell_08_Volt_P2 3.243
setstate Marstek_Venus_A 2026-04-22 11:06:02 Cell_09_Volt_P1 3.245
setstate Marstek_Venus_A 2026-04-22 11:06:04 Cell_09_Volt_P2 3.244
setstate Marstek_Venus_A 2026-04-22 11:09:32 Cell_10_Volt_P1 3.245
setstate Marstek_Venus_A 2026-04-22 11:09:35 Cell_10_Volt_P2 3.244
setstate Marstek_Venus_A 2026-04-22 11:07:02 Cell_11_Volt_P1 3.244
setstate Marstek_Venus_A 2026-04-22 11:07:05 Cell_11_Volt_P2 3.244
setstate Marstek_Venus_A 2026-04-22 11:06:02 Cell_12_Volt_P1 3.244
setstate Marstek_Venus_A 2026-04-22 11:06:05 Cell_12_Volt_P2 3.244
setstate Marstek_Venus_A 2026-04-22 11:09:32 Cell_13_Volt_P1 3.248
setstate Marstek_Venus_A 2026-04-22 11:09:35 Cell_13_Volt_P2 3.244
setstate Marstek_Venus_A 2026-04-22 11:08:36 LAST_ERROR slave replied with error code 83 / 02, illegal data address
setstate Marstek_Venus_A 2026-04-22 11:09:07 RS485_Control Off
setstate Marstek_Venus_A 2026-04-22 11:08:36 ac_current 2.63
setstate Marstek_Venus_A 2026-04-22 11:09:24 ac_frequency 50.2
setstate Marstek_Venus_A 2026-04-22 11:09:25 ac_offgrid_current 0.29
setstate Marstek_Venus_A 2026-04-22 11:09:26 ac_offgrid_power 0
setstate Marstek_Venus_A 2026-04-22 11:09:25 ac_offgrid_voltage 2.9
setstate Marstek_Venus_A 2026-04-22 11:09:11 ac_power 228
setstate Marstek_Venus_A 2026-04-22 11:09:24 ac_voltage 238.5
setstate Marstek_Venus_A 2026-04-22 11:07:06 alarm_status_bits 0
setstate Marstek_Venus_A 2026-04-19 15:31:26 alarm_text OK
setstate Marstek_Venus_A 2026-04-22 11:07:07 backup_function Off
setstate Marstek_Venus_A 2026-04-20 13:20:31 battery_cell_drift 0.003
setstate Marstek_Venus_A 2026-04-22 11:09:18 battery_current 2.9
setstate Marstek_Venus_A 2026-04-22 11:09:30 battery_cycle_count_P1 4
setstate Marstek_Venus_A 2026-04-22 11:06:03 battery_cycle_count_P2 4
setstate Marstek_Venus_A 2026-04-22 11:09:11 battery_flow 177.2
setstate Marstek_Venus_A 2026-04-22 11:09:10 battery_power -246
setstate Marstek_Venus_A 2026-04-22 11:07:05 battery_temp 30.5
setstate Marstek_Venus_A 2026-04-22 11:09:23 battery_total_energy_kwh 4.16
setstate Marstek_Venus_A 2026-04-22 11:09:18 battery_voltage 42.16
setstate Marstek_Venus_A 2026-04-22 11:09:21 bluetooth_status 1
setstate Marstek_Venus_A 2026-04-22 11:09:20 bms_version 109
setstate Marstek_Venus_A 2026-04-22 11:09:05 cell_temp_max 15.2
setstate Marstek_Venus_A 2026-04-22 11:09:36 cell_temp_min 14.4
setstate Marstek_Venus_A 2026-04-22 11:07:07 cell_voltage_max 3.248
setstate Marstek_Venus_A 2026-04-22 11:09:37 cell_voltage_min 3.245
setstate Marstek_Venus_A 2026-04-22 11:09:21 cloud_status 0
setstate Marstek_Venus_A 2026-04-22 11:09:22 comm_module_firmware 20
setstate Marstek_Venus_A 2026-04-22 11:09:27 daily_charging_energy_wh 0
setstate Marstek_Venus_A 2026-04-22 11:09:28 daily_discharging_energy_wh 420
setstate Marstek_Venus_A 2026-04-22 11:05:53 device_name VN
setstate Marstek_Venus_A 2026-04-22 11:09:19 ems_version 148
setstate Marstek_Venus_A 2026-04-22 11:09:36 fault_status_bits 0
setstate Marstek_Venus_A 2026-04-19 15:31:26 fault_text OK
setstate Marstek_Venus_A 2026-04-22 11:08:37 force_action None
setstate Marstek_Venus_A 2026-04-22 11:08:35 inverter_state_code 3
setstate Marstek_Venus_A 2026-04-22 09:46:44 inverter_state_text Discharge
setstate Marstek_Venus_A 2026-04-22 11:05:22 mac_address 682499EEFC02
setstate Marstek_Venus_A 2026-04-22 10:58:33 max_discharge_power_limit 0
setstate Marstek_Venus_A 2026-04-22 11:09:28 monthly_charging_energy_wh 0
setstate Marstek_Venus_A 2026-04-22 11:09:29 monthly_discharging_energy_wh 420
setstate Marstek_Venus_A 2026-04-22 11:09:13 mppt1_current 7.4
setstate Marstek_Venus_A 2026-04-22 11:09:15 mppt1_power 301.4
setstate Marstek_Venus_A 2026-04-22 11:09:11 mppt1_voltage 40.6
setstate Marstek_Venus_A 2026-04-22 11:09:14 mppt2_current 2.2
setstate Marstek_Venus_A 2026-04-22 11:09:16 mppt2_power 110
setstate Marstek_Venus_A 2026-04-22 11:09:12 mppt2_voltage 47.8
setstate Marstek_Venus_A 2026-04-22 11:09:14 mppt3_current 0
setstate Marstek_Venus_A 2026-04-22 11:09:17 mppt3_power 0
setstate Marstek_Venus_A 2026-04-22 11:09:12 mppt3_voltage 0.1
setstate Marstek_Venus_A 2026-04-22 11:09:15 mppt4_current 0
setstate Marstek_Venus_A 2026-04-22 11:09:17 mppt4_power 0
setstate Marstek_Venus_A 2026-04-22 11:09:13 mppt4_voltage 0.2
setstate Marstek_Venus_A 2026-04-22 11:09:16 mppt_total_power 411.4
setstate Marstek_Venus_A 2026-04-21 13:07:30 reset_device 0
setstate Marstek_Venus_A 2026-04-22 11:07:08 schedule_1_days 0
setstate Marstek_Venus_A 2026-04-22 11:09:08 schedule_1_enabled 0
setstate Marstek_Venus_A 2026-04-22 11:08:38 schedule_1_end 0
setstate Marstek_Venus_A 2026-04-22 11:07:09 schedule_1_mode 0
setstate Marstek_Venus_A 2026-04-22 11:09:08 schedule_1_start 0
setstate Marstek_Venus_A 2026-04-22 11:08:39 schedule_2_days 0
setstate Marstek_Venus_A 2026-04-22 11:06:40 schedule_2_enabled 0
setstate Marstek_Venus_A 2026-04-22 11:09:09 schedule_2_end 0
setstate Marstek_Venus_A 2026-04-22 11:08:39 schedule_2_mode 0
setstate Marstek_Venus_A 2026-04-22 11:07:09 schedule_2_start 0
setstate Marstek_Venus_A 2026-04-22 11:09:09 schedule_3_days 0
setstate Marstek_Venus_A 2026-04-22 11:09:10 schedule_3_enabled 0
setstate Marstek_Venus_A 2026-04-22 11:08:09 schedule_3_end 0
setstate Marstek_Venus_A 2026-04-22 11:05:40 schedule_3_mode 0
setstate Marstek_Venus_A 2026-04-22 11:08:40 schedule_3_start 0
setstate Marstek_Venus_A 2026-04-22 11:08:10 schedule_4_days 0
setstate Marstek_Venus_A 2026-04-22 11:08:41 schedule_4_enabled 0
setstate Marstek_Venus_A 2026-04-22 11:06:41 schedule_4_end 0
setstate Marstek_Venus_A 2026-04-22 11:07:41 schedule_4_mode 0
setstate Marstek_Venus_A 2026-04-22 11:08:40 schedule_4_start 0
setstate Marstek_Venus_A 2026-04-22 11:00:02 schedule_5_days 0
setstate Marstek_Venus_A 2026-04-22 10:58:33 schedule_5_enabled 0
setstate Marstek_Venus_A 2026-04-22 10:56:02 schedule_5_end 0
setstate Marstek_Venus_A 2026-04-22 10:56:02 schedule_5_mode 0
setstate Marstek_Venus_A 2026-04-22 10:56:02 schedule_5_start 0
setstate Marstek_Venus_A 2026-04-22 10:58:33 schedule_6_days 0
setstate Marstek_Venus_A 2026-04-22 11:00:03 schedule_6_enabled 0
setstate Marstek_Venus_A 2026-04-22 11:00:03 schedule_6_end 0
setstate Marstek_Venus_A 2026-04-22 11:00:03 schedule_6_mode 0
setstate Marstek_Venus_A 2026-04-22 10:58:33 schedule_6_start 0
setstate Marstek_Venus_A 2026-04-22 11:09:29 soc_pack1 14.7
setstate Marstek_Venus_A 2026-04-22 11:07:02 soc_pack2 19.9
setstate Marstek_Venus_A 2026-04-22 11:09:23 soc_total 17
setstate Marstek_Venus_A 2026-04-21 19:48:44 state opened
setstate Marstek_Venus_A 2026-04-22 11:09:37 stored_energy_kwh 0.72 kWh
setstate Marstek_Venus_A 2026-04-22 11:07:08 target_charge_power 0
setstate Marstek_Venus_A 2026-04-22 11:09:07 target_discharge_power 0
setstate Marstek_Venus_A 2026-04-22 11:06:05 temp_mos1 33.9
setstate Marstek_Venus_A 2026-04-22 11:06:35 temp_mos2 34
setstate Marstek_Venus_A 2026-04-22 11:09:26 total_charging_energy 0
setstate Marstek_Venus_A 2026-04-22 11:09:27 total_discharging_energy 0.42
setstate Marstek_Venus_A 2026-04-22 11:08:38 user_work_mode anti_feed
setstate Marstek_Venus_A 2026-04-22 11:09:19 vms_version 119
setstate Marstek_Venus_A 2026-04-22 11:09:22 wifi_signal_dbm 0
setstate Marstek_Venus_A 2026-04-22 11:09:20 wifi_status 0