Seite 1 von 2
Modbus Energiezähler (Victron EM24)
Verfasst: 8. Aug 2024 08:32
von spirit
Hallo zusammen,
ich verzweifle momentan an der Integration meines Victron EM24 (Carlo Gavazzi) in Openhab.
Bisher habe ich die Daten über einen Lesekopf direkt auf meinem Zähler exportiert, durch einen Umstieg auf Tibber und deren schlechter Umsetzung (Cloud und Anfälligkeit Tibber Pulse), kann ich diesen aber leider nicht mehr verwenden. Auch ein Lesekopfumbau auf Lese- und Sendekopf konnte dieses Problem nicht umgehen.
Da ich in Zukunft so oder so gern einen Speicher installieren möchte, habe ich mir also ein Energiezähler von Victron gekauft und direkt hinter dem Zähler montiert.
Ich würde diesen nun gern via Modbus auslesen. Dabei komme ich aber leider an meine Grenzen.
Aktuell lese ich bereits meine Wärmepumpe (Nibe S1155-6PC) und einen SolarEdge Wechselrichter mit Modbus aus, aber dort war die Integration irgendwie einfacher.
Für unsere EAutos verwende ich als Ladesteuerung EVCC. Dort war die Integration des EM24 recht einfach.
Es gibt vom Hersteller ein Verzeichnis über die einzelnen Register und im HomeAssistant Forum gibt es auch einen Beitrag.
Carlo Gavazzi Register EM24 Ethernet:
https://www.enika.eu/data/files/produkt ... t%20cp.pdf
HomeAssistant Forum EM24:
https://community.home-assistant.io/t/m ... /353336/16
Hat jemand eine Idee wie ich das ganze integriert bekomme? Meine PV Übersicht würde sich über neue Daten vom Zähler freuen
OpenhabPV.JPG
Re: Modbus Energiezähler (Victron EM24)
Verfasst: 8. Aug 2024 09:53
von rbeudel
Hallo,
ich kann nur mein Beispiel(auch nicht selbst erfunden) für ein SMA Gerät zeigen. Mal die Parameter mit dem EM24 vergleichen und ersetzen.
Code: Alles auswählen
Bridge modbus:tcp:sma "SMA Inverter" @ "Modbus" [ host="192.168.1.68", port=502, id=3, connectMaxTries=3] {
// SMA Inverter Device Type
Bridge poller DevType [ start=30053, length=4, refresh=5000, type="input" ] {
Thing data type [ readStart="30053", readValueType="uint32" ]
}
// SMA Inverter Status
Bridge poller SMA_Status [ start=30201, length=36, refresh=6000, type="input" ] {
Thing data status [ readStart="30201", readValueType="int32" ]
Thing data Grid_Contactor [ readStart="30217", readValueType="int32" ]
Thing data Max_Power [ readStart="30231", readValueType="int32" ]
Thing data Set_Max_Power [ readStart="30233", readValueType="int32" ]
}
// SMA Inverter Temperatur
Bridge poller SMA_Temp_Innen [ start=34113, length=2, refresh=6000, type="input" ] {
Thing data Temp1 [ readStart="34113", readValueType="uint32", readTransform="JS(smalimit10A.js)" ]
}
// SMA Inverter Yield
Bridge poller Yield [ start=30517, length=16, refresh=5000, type="input" ] {
Thing data Day_Yield [ readStart="30517", readValueType="int64", readTransform="JS(divide1000.js)" ]
Thing data Total_Yield [ readStart="30529", readValueType="int32", readTransform="JS(divide1000000.js)" ]
}
// SMA Inverter Power Section A
Bridge poller power_a [ start=30769, length=20, refresh=5000, type="input" ] {
Thing data current_input [ readStart="30769", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
Thing data voltage_input [ readStart="30771", readValueType="uint32", readTransform="JS(smalimit100A.js)" ]
Thing data power_west [ readStart="30773", readValueType="int32", readTransform="JS(smalimit1000.js)"]
Thing data active_powerWatt [ readStart="30775", readValueType="int32", readTransform="JS(smalimit.js)" ]
//Thing data power_L1 [ readStart="30777", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
Thing data volt_G1 [ readStart="30783", readValueType="uint32", readTransform="JS(smalimit100A.js)" ]
}
Bridge poller grid [ start=30803, length=4, refresh=5000, type="holding" ] {
Thing data GridMs_Hz [ readStart="30803", readValueType="uint32", readTransform="JS(smalimit100A.js)"]
}
// SMA Inverter Operation
Bridge poller SMA_Betriebszeit [ start=30521, length=8, refresh=5000, type="input" ] {
Thing data Betriebszeit [ readStart="30521", readValueType="uint64" ]
Thing data Einspeisezeit [ readStart="30525", readValueType="uint64" ]
}
}
und die Items
Code: Alles auswählen
// Inverter SB 2.5
Group SMA "Wechselrichter" <solarplant> (boilerroom) ["Inverter"]
Number Sma_DevType "Gerätetyp [MAP(SMA.map):%s]" <softener> (SMA) ["Status"] {channel="modbus:data:sma:DevType:type:number"}
Number Sma_Status "Gerätestatus [MAP(SMA.map):%s]" <switch> (SMA) ["Status"] {channel="modbus:data:sma:SMA_Status:status:number"}
Contact Sma_GridContactor "Netzrelais/-schütz [MAP(SMA.map):%s]" <switch> (SMA) ["Status"] {channel="modbus:data:sma:SMA_Status:Grid_Contactor:contact"}
Number Sma_MaxPower "Nennwirkleistung [%s W]" <Energy> (SMA) ["Measurement","Power"] {channel="modbus:data:sma:SMA_Status:Max_Power:number"}
Number Sma_SetMaxPower "max. Einspeiseleistung [%s W]" <Energy> (SMA) ["Measurement","Power"] {channel="modbus:data:sma:SMA_Status:Set_Max_Power:number"}
Number Sma_Temp "Temp Gehäuse [%.1f °C]" <temperature> (SMA) ["Measurement","Temperature"] {channel="modbus:data:sma:SMA_Temp_Innen:Temp1:number"}
Number Sma_DaylyYield "Tagesertrag [%s kWh]" <line> (SMA) ["Measurement","Energy"] {channel="modbus:data:sma:Yield:Day_Yield:number"}
Number Sma_TotalYield "Gesamtertrag [%.2f MWh]" <line> (SMA) ["Measurement","Energy"] {channel="modbus:data:sma:Yield:Total_Yield:number"}
Number Sma_DC1Cur_input "DC Strom [%s A]" <solarplant> (SMA) ["Measurement","Current"] {channel="modbus:data:sma:power_a:current_input:number"}
Number Sma_DC1Volt_input "DC Spannung [%s V]" <solarplant> (SMA) ["Measurement","Voltage"] {channel="modbus:data:sma:power_a:voltage_input:number"}
Number Sma_PowerA "DC Leistung [%s kW]" <solarplant> (SMA) ["Measurement","Power"] {channel="modbus:data:sma:power_a:power_west:number"}
Number GridMs_Hz "Grid Frequenz [%s Hz]" <poweroutlet_eu> (SMA) ["Measurement","Frequency"] {channel="modbus:data:sma:grid:GridMs_Hz:number"}
Number:Power Sma_ActivePowerWatt "AC Leistung [%.0f W]" <poweroutlet_eu> (SMA) ["Measurement","Power"] {channel="modbus:data:sma:power_a:active_powerWatt:number"}
Number Sma_voltG1 "Netzspannung L1 [%s V]" <poweroutlet_eu> (SMA) ["Measurement","Voltage"] {channel="modbus:data:sma:power_a:volt_G1:number"}
Number Sma_Betriebszeit "Betriebszeit [JS(sectohms.js):%s]" <time> (SMA) ["Measurement","Duration"] {channel="modbus:data:sma:SMA_Betriebszeit:Betriebszeit:number"}
Number Sma_Einspeisezeit "Einspeisezeit [JS(sectohms.js):%s]" <time> (SMA) ["Measurement","Duration"] {channel="modbus:data:sma:SMA_Betriebszeit:Einspeisezeit:number"}
Re: Modbus Energiezähler (Victron EM24)
Verfasst: 8. Aug 2024 11:11
von spirit
Leider hilft mir das nicht weiter, ich bekomme immer eine Fehlermeldung zurück.
Habe schon einige Kombinationen versucht. Modbus ist echt der letzte Mist!
Code: Alles auswählen
2024-08-08 11:06:38.378 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Try 1 out of 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=2, functionCode=READ_MULTIPLE_REGISTERS, start=300001, length=2, maxTries=3]). Will try again soon. Error was: net.wimpi.modbus.ModbusSlaveException Error Code = 2 [operation ID 826b5630-cf52-4d86-b475-e0db366cac4b]
2024-08-08 11:06:38.460 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Try 2 out of 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=2, functionCode=READ_MULTIPLE_REGISTERS, start=300001, length=2, maxTries=3]). Will try again soon. Error was: net.wimpi.modbus.ModbusSlaveException Error Code = 2 [operation ID 826b5630-cf52-4d86-b475-e0db366cac4b]
2024-08-08 11:06:38.542 [ERROR] [rt.modbus.internal.ModbusManagerImpl] - Last try 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=2, functionCode=READ_MULTIPLE_REGISTERS, start=300001, length=2, maxTries=3]). Aborting. Error was: net.wimpi.modbus.ModbusSlaveException Error Code = 2 [operation ID 826b5630-cf52-4d86-b475-e0db366cac4b]
Hier mal meine Modbus.things:
Code: Alles auswählen
Bridge modbus:tcp:VictronEM24 "Modbus Victron EM24" [ host="192.168.1.220", port=502, id=2, connectMaxTries=3] {
Bridge poller Registers "Register" [ start=300001, length=2, refresh=5000, type="holding" ] {
Thing data Vl1 "V L1-N" [ readStart="300001", readValueType="int32" ]
}
}
Re: Modbus Energiezähler (Victron EM24)
Verfasst: 8. Aug 2024 12:11
von rbeudel
Mal versucht die "300001" in "400001" zu ändern?
Re: Modbus Energiezähler (Victron EM24)
Verfasst: 8. Aug 2024 13:43
von spirit
Hatte ich ebenfalls schon mal versucht.
Ich bekomme egal was ich eintippe diese Fehlermeldungen:
Code: Alles auswählen
2024-08-08 13:38:06.332 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:VictronEM24:Registers:Vl1' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Error (ModbusSlaveErrorResponseExceptionImpl) with read. Request: ModbusReadRequestBlueprint [slaveId=1, functionCode=READ_INPUT_REGISTERS, start=30001, length=2, maxTries=3]. Description: ModbusSlaveErrorResponseException(error=2). Message: Slave responded with error=2 (ILLEGAL_DATA_ACCESS)
2024-08-08 13:38:06.333 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:poller:VictronEM24:Registers' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Error with read: org.openhab.core.io.transport.modbus.internal.ModbusSlaveErrorResponseExceptionImpl: Slave responded with error=2 (ILLEGAL_DATA_ACCESS)
2024-08-08 13:38:06.333 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:VictronEM24:Registers:Vl1' changed from OFFLINE (COMMUNICATION_ERROR): Error (ModbusSlaveErrorResponseExceptionImpl) with read. Request: ModbusReadRequestBlueprint [slaveId=1, functionCode=READ_INPUT_REGISTERS, start=30001, length=2, maxTries=3]. Description: ModbusSlaveErrorResponseException(error=2). Message: Slave responded with error=2 (ILLEGAL_DATA_ACCESS) to OFFLINE (BRIDGE_OFFLINE): No online bridge
Was mich wundert, ist das hier im Forum ganz andere Adressen genommen werden:
https://forum.iobroker.net/topic/47991/ ... m24-lan/52
Re: Modbus Energiezähler (Victron EM24)
Verfasst: 9. Aug 2024 08:43
von rbeudel
Das einzige was ich dazu sagen kann ist das der Code 2 darauf hinweist das ein nicht vorhandenes Register abgefragt wurde. Mehr kann ich dazu leider nicht sagen.
Re: Modbus Energiezähler (Victron EM24)
Verfasst: 10. Aug 2024 16:48
von mad-mike
Moin,
auf der zum Ziel habe ich folgende Hilfe genommen:
eine App (Android) (Modbus Viewer) wo man direkt suchen und Ansprechen kann...
Die App zeigte mir sehr schnell was an, wo ich stundenlang im openHAB versucht habe...
Zwischen Holding und input wechseln und auch die read addr. mal schnell umgetippt...
Dann weiter habe ich über die Konsole mit mbpoll weiter nach werten gesucht: (diente mehr zur kontrolle des 485 gateways)
beispiel von mir:
erst dann habe ich mich in mühevoller Kleinarbeit bei gemacht, das ganze ich Thing und Item datein zu schreiben.
Eventuell solltest du mal versuchen von "holding" auf "input" zu wechseln...
Re: Modbus Energiezähler (Victron EM24)
Verfasst: 11. Aug 2024 07:39
von Tokamak
Wenn ich Posts in anderen Foren richtig verstehe, sind die Register ab 3... Holding Register, die gleichen Zahlen mit einer 4... Input Register.
Daher dürfte 300001 und "holding" grundsätzlich stimmen.
Was ich merkwürdig finde, ist, dass ich keine Info über die modbus id gefunden habe. Ich würde es daher mit id=1 oder id=0 versuchen, wobei ich eine id 0 noch nie gesehen habe.
Solltest du erfolgreich lesen können, aber merkwürdige Werte rausbekommen, tausche die endianness des Typs in int32_swap.
Re: Modbus Energiezähler (Victron EM24)
Verfasst: 12. Aug 2024 14:24
von spirit
mad-mike hat geschrieben: ↑10. Aug 2024 16:48
Moin,
auf der zum Ziel habe ich folgende Hilfe genommen:
eine App (Android) (Modbus Viewer) wo man direkt suchen und Ansprechen kann...
Die App zeigte mir sehr schnell was an, wo ich stundenlang im openHAB versucht habe...
Zwischen Holding und input wechseln und auch die read addr. mal schnell umgetippt...
Dann weiter habe ich über die Konsole mit mbpoll weiter nach werten gesucht: (diente mehr zur kontrolle des 485 gateways)
beispiel von mir:
erst dann habe ich mich in mühevoller Kleinarbeit bei gemacht, das ganze ich Thing und Item datein zu schreiben.
Eventuell solltest du mal versuchen von "holding" auf "input" zu wechseln...
Ich hatte mir schon ein Windows Programm zum auslesen der Modbusadressen runtergeladen.
Dabei kommt auch das raus was in der PDF von Carlo Gavazzi steht.
Habe schon diverse Konstellationen probiert. Dabei natürlich auch zwischen Input/Holding, Slave ID 0/1/2/3/4 und diversen Registern gewechselt.
Es scheint an der Abfragemethode von Openhab zu liegen.. Hat jemand eine Idee?
Things:
Code: Alles auswählen
Bridge modbus:tcp:VictronEM24 "Modbus Victron EM24" [ host="192.168.1.220", port=502, id=3] {
Bridge poller Registers "Register" [ start=30001, length=4, refresh=5000, type="holding" ] {
Thing data test01 "V L1-N" [ readStart="30001", readValueType="int32" ]
Thing data test02 "V L1-N" [ readStart="30002", readValueType="int32" ]
Thing data test03 "V L1-N" [ readStart="30003", readValueType="int32" ]
Thing data test03 "V L1-N" [ readStart="30004", readValueType="int32" ]
}
}
Code: Alles auswählen
2024-08-12 14:13:40.309 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Try 1 out of 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=30001, length=4, maxTries=3]). Will try again soon. Error was: net.wimpi.modbus.ModbusSlaveException Error Code = 2 [operation ID 27dbf959-1d35-4823-b9a9-32f1e1c77689]
2024-08-12 14:13:40.391 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Try 2 out of 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=30001, length=4, maxTries=3]). Will try again soon. Error was: net.wimpi.modbus.ModbusSlaveException Error Code = 2 [operation ID 27dbf959-1d35-4823-b9a9-32f1e1c77689]
2024-08-12 14:13:40.473 [ERROR] [rt.modbus.internal.ModbusManagerImpl] - Last try 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=30001, length=4, maxTries=3]). Aborting. Error was: net.wimpi.modbus.ModbusSlaveException Error Code = 2 [operation ID 27dbf959-1d35-4823-b9a9-32f1e1c77689]
==> /var/log/openhab/events.log <==
2024-08-12 14:13:40.474 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:VictronEM24:Registers:test01' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Error (ModbusSlaveErrorResponseExceptionImpl) with read. Request: ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=30001, length=4, maxTries=3]. Description: ModbusSlaveErrorResponseException(error=2). Message: Slave responded with error=2 (ILLEGAL_DATA_ACCESS)
2024-08-12 14:13:40.475 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:VictronEM24:Registers:test02' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Error (ModbusSlaveErrorResponseExceptionImpl) with read. Request: ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=30001, length=4, maxTries=3]. Description: ModbusSlaveErrorResponseException(error=2). Message: Slave responded with error=2 (ILLEGAL_DATA_ACCESS)
2024-08-12 14:13:40.475 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:VictronEM24:Registers:test03' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Error (ModbusSlaveErrorResponseExceptionImpl) with read. Request: ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=30001, length=4, maxTries=3]. Description: ModbusSlaveErrorResponseException(error=2). Message: Slave responded with error=2 (ILLEGAL_DATA_ACCESS)
2024-08-12 14:13:40.475 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:poller:VictronEM24:Registers' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Error with read: org.openhab.core.io.transport.modbus.internal.ModbusSlaveErrorResponseExceptionImpl: Slave responded with error=2 (ILLEGAL_DATA_ACCESS)
2024-08-12 14:13:40.475 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:VictronEM24:Registers:test03' changed from OFFLINE (COMMUNICATION_ERROR): Error (ModbusSlaveErrorResponseExceptionImpl) with read. Request: ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=30001, length=4, maxTries=3]. Description: ModbusSlaveErrorResponseException(error=2). Message: Slave responded with error=2 (ILLEGAL_DATA_ACCESS) to OFFLINE (BRIDGE_OFFLINE): No online bridge
2024-08-12 14:13:40.475 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:VictronEM24:Registers:test02' changed from OFFLINE (COMMUNICATION_ERROR): Error (ModbusSlaveErrorResponseExceptionImpl) with read. Request: ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=30001, length=4, maxTries=3]. Description: ModbusSlaveErrorResponseException(error=2). Message: Slave responded with error=2 (ILLEGAL_DATA_ACCESS) to OFFLINE (BRIDGE_OFFLINE): No online bridge
2024-08-12 14:13:40.475 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:VictronEM24:Registers:test01' changed from OFFLINE (COMMUNICATION_ERROR): Error (ModbusSlaveErrorResponseExceptionImpl) with read. Request: ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=30001, length=4, maxTries=3]. Description: ModbusSlaveErrorResponseException(error=2). Message: Slave responded with error=2 (ILLEGAL_DATA_ACCESS) to OFFLINE (BRIDGE_OFFLINE): No online bridge
Re: Modbus Energiezähler (Victron EM24)
Verfasst: 12. Aug 2024 15:31
von Tokamak
In der Version der .things fehlt eine 0. Es sollte 300001 sein, nicht 30001.
Am Rande: An einen Fehler glaube ich nicht. Ich lese einige Devices mit modbus aus, insgesamt vier verschiedene. Ab und an steigt mal ein Gerät für kurze Zeit aus, aber das Binding hat noch keinen Fehler gezeigt.