HM-ES-TX-WM mit ES-IEC und ISKRA MT175

Begonnen von HOMIE1975, 11 November 2020, 14:24:08

Vorheriges Thema - Nächstes Thema

HOMIE1975

Hallo Zusammen.

Ich habe bei der Auslesung meines Zweirichtungszählers über HM-ES-TX-WM im Kombination ES-IEC folgendes Problem festgestellt:

- zunächst Software  HM-ES-TX-WM auf 2.5 aktualisiert
- es werden zwei Channels angelegt... bei mir "Stromverbrauch" = Channel 1 und "Einspeisung" = Channel 2
  die Zählerstände dazu werden alle 3 Minuten übermittelt...
  Channel 1 Reading energyIEC = 1.8.0 = Zählerstand Verbrauch ( in 1/10 Wh ... Teilen durch 10.000 ergibt Zählerstand in kWh )
  Channel 1 Reading powerIEC = 16.7 = akt. Leistung Verbrauch/Einspeisung ( in 1/100 W ... Teilen durch 100.000 ergibt die Leistung in kW )
  Channel 2 Reading energyIEC = 2.8.0 = Zählerstand Einspeisung ( in 1/10 Wh ... Teilen durch 10.000 ergibt Zählerstand in kWh )

Jetzt zum Problem... wenn die Leistungsanzeige am Zäler negativ wird..., sprich die Photovoltaikanlage erzeugt mehr Strom als aktuell verbraucht wird
dann zeigt powerIEC nicht den korrekten Wert an. Es werden abstrus hohe Leistungswerte angezeigt. ( powerIEC = 4294967295 )
Meiner Meinung nach wird der übermittelte Wert nicht als "singed integer() (-2.147.4483.648 ... 2.147.483.647)" sondern als "unsigned integer()
oder DWORD ( 0... 4294967295 )" interpretiert und damit dann falsch angezeigt.

Als Workaround habe ich mir ein userReading angelegt und darin mit if / else und Berechnung die Werte korrekt umgerechnet.

Zaehlerstand1.8.0kWh {sprintf("%.2f",ReadingsVal("Stromverbrauch","energyIEC","???")/10000)},
LeistungkW {if(ReadingsVal("Stromverbrauch","powerIEC","???") < 1000000) {sprintf("%.2f",ReadingsVal("Stromverbrauch","powerIEC","???")/100000)} else{ sprintf("%.2f",(ReadingsVal("Stromverbrauch","powerIEC","???")-4294967295)/100000)}}




 


kpwg

Gleiches Problem, anderer Lösungsansatz: Mit readingsChange ist es nur ein kurzer Einzeiler, das Reading powerIEC passend zu manipulieren.
define rc_Zaehler_neg readingsChange HM_3BD456_IEC_01 powerIEC (\d+) { $1 > 400000000 ? $1-4294967295 : $1}
Danke für die gute Erklärung und die mathematische Vorarbeit.

renardfm

Also bei meinem mt631 hat es geholfen beide Kompatibilitätsmodi auszuprobieren. Der eine von beiden hat funktioniert.
Außerdem habe ich noch eingestellt, dass sofort Werte gesendet werden, sobald sich die Leistung um 100w ändert.

Gruß Flo

Beta-User

Moin zusammen,

im Modul (aktuelle svn-Fassung) sollte die Berechnung ab Zeile 3121 zu finden sein. Vielleicht bekommen wir das allgemein so gefixt, dass man keine zusätzlichen Konvertierungen anflanschen muss?

Leider kenne ich mich mit der pack/unpack-Syntax auch nicht aus, würde aber vermuten, dass DWORD dem letzten "A8" im "unpack" entspräche und es ggf. reichen würde, da ein "c" hinzuschreiben?
https://perldoc.perl.org/functions/pack
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files