Ich bin gerade dabei ein bestehendes Modul (98_ModbusSDM630M.pm) für einen SDM230M umzuarbeiten (98_ModbusSDM230MV2.pm)
Grundsätzlich habe ich den Großteil schon fertig für einen SDM230M.
Nun stehe ich mit meinen bescheidenen Kenntnissen leider an, das ich die Register für das Datenformat unsigned int32 (Länge: 4 byte), das Register für das Datenformat Hex (Länge:2 byte und für das Register für das Datenformat BCD(Länge:4 byte im neuem Modul korrekt zu definieren.
Die Register für das Datenformat:float(Länge:4 byte) ist aus dem Modul 98_ModbusSDM630M.pm bekannt.
Kann mir dabei jemand ein wenig behilflich sein?
Wenn ich das geschafft habe, würde ich das für die Energiezähler SDM120M und SDM72DM auch gleich als separates Modul vorbereiten.
Zitat von: Burny4600 am 14 Januar 2025, 18:49:41Wenn ich das geschafft habe, würde ich das für die Energiezähler SDM120M und SDM72DM auch gleich als separates Modul vorbereiten.
Da gibt es schon Module:
https://forum.fhem.de/index.php?topic=75638.msg1217182#msg1217182 (https://forum.fhem.de/index.php?topic=75638.msg1217182#msg1217182)
Danke für den Hinweis.
Das werde ich mir gleich ansehen.
Das Problem mit dem Datenformat Hex (Länge:2 byte) habe ich aber dennoch noch nicht lösen können.
Die Grundkonfiguration laut Registerauszug stimmt grundsätzlich.
"h63776" => { # holding register 0xF920
# Measurement Mode Meter.
name => "Measurement Mode", # internal name of this register in the hardware doc
reading => "Measurement_Mode", # name of the reading for this value
map => "0001:Total_Import, 0002:Total_Import_plus_Export, 0003:Total_Import_minus_Export", # map to convert visible values to internal numbers (for reading and writing)
hint => "0001,0002,0003", # string for fhemweb to create a selection or slider
unpack => "H*", # hex pack / unpack code to convert raw values
format => '%s', # format string for sprintf
poll => "once", # only poll once after define (or after a set)
# set => 1, # this value can be set
},
Mir fehlt bei den zwei Readings noch die Lösung wie ich die letzten 4 Nullen entfernen.
Stellen nach dem Komma kürzen mit %.4f ist keine Thema. Auch die Nullen vor der Zahl ist kein Problem.
Ich habe eine Lösung gefunden.
"h63760" => { # holding register 0xF910
# Relay 1 Pulse Constant:
# 00000000=0.001_kWh_or_kVArh/Imp, 00010000=0.01_kWh_or_kVArh/Imp, 00020000=0.1_kWh_or_kVArh/Imp, 00030000=1_kWh_or_kVArh/Imp
name => "Relay1_Pulse Constant", # internal name of this register in the hardware doc
reading => "Relay1_Pulse_Constant_Imp", # name of the reading for this value
map => "00000000:0.001, 00010000:0.01, 00020000:0.1, 00030000:1", # map to convert visible values to internal numbers (for reading and writing)
hint => "0.001,0.01,0.1,1", # string for fhemweb to create a selection or slider
unpack => "H*", # hex pack / unpack code to convert raw values
format => '%s', # format string for sprintf
poll => "once", # only poll once after define (or after a set)
# set => 1, # this value can be set
},
"h63776" => { # holding register 0xF920
# Measurement Mode Meter.
name => "Measurement Mode", # internal name of this register in the hardware doc
reading => "Measurement_Mode", # name of the reading for this value
map => "00010000:Total_Import, 00020000:Total_Import_plus_Export, 00030000:Total_Import_minus_Export", # map to convert visible values to internal numbers (for reading and writing)
hint => "Total_Import,Total_Import_plus_Export,Total_Import_minus_Export", # string for fhemweb to create a selection or slider
unpack => "H*", # hex pack / unpack code to convert raw values
format => '%s', # format string for sprintf
poll => "once", # only poll once after define (or after a set)
set => 1, # this value can be set
},