FHEM Forum

FHEM - Entwicklung => FHEM Development => Perl Ecke => Thema gestartet von: beejayf am 15 November 2020, 13:16:03

Titel: Komplexe Unpack Abfolge in Modul integrieren
Beitrag von: beejayf am 15 November 2020, 13:16:03
Hallo zusammen,

ich habe eine PERL-Frage: Im Modul "SolarEdge" von pejonp funktioniert das Auslesen der Batterie-Daten noch nicht richtig.

Auszug aus dem Modul z.B. Zeile 568 - 572 (https://github.com/pejonp/FHEM---SolarEdge/blob/master/FHEM/98_SolarEdge.pm#L568 (https://github.com/pejonp/FHEM---SolarEdge/blob/master/FHEM/98_SolarEdge.pm#L568))
    "h57668" => {    # E144 (F544) 2R Battery 1 Max Charge Continues Power Float32 W
        'len'     => '2',                                                           
        'reading' => 'Battery_1_Max_Charge_Continues_Power_W',
        'unpack'  => 'L>',
    },


sollte für meine Batterie 5000 als float32 zurückgeben - leider funktioniert auch unpack 'f>' nicht, weil in dem Fall die Daten offenbar in einer unüblichen Form im Register abgelegt sind.

die Operation unpack "f<", pack "vv", unpack "nn", $s sollte die einzelnen bytes in die richtige Reihenfolge bringen. wenn ich im Code oben unpack auf 'unpack' => 'unpack "f<", pack "vv", unpack "nn"', ändere läuft das Modul nicht mehr. Ich habe es auch mit 'expr' => 'unpack("f<", pack("vv",unpack("nn")))', versucht - da bekomme ich eine Zahl - allerdings ist das Ergebnis 1.18347818256831e+33.

Vielleicht bin ich mit der Abfolge unten schon auf dem Holzweg.
unpack("f<", pack("vv",unpack("nn")))

Bin für jeden Hinweis dankbar, wie der Code geändert werden muss um den Wert (und andere float32, die nach dem gleichen Muster abgelegt sind) richtig aus dem Register zu lesen und an FHEM zu übergeben.