Komplexe Unpack Abfolge in Modul integrieren

Begonnen von beejayf, 15 November 2020, 13:16:03

Vorheriges Thema - Nächstes Thema

beejayf

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)
    "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.