perl unpack code für int16 auf Dezimal mit Vorzeichen

Begonnen von ThomasFh, 13 Mai 2022, 17:16:41

Vorheriges Thema - Nächstes Thema

ThomasFh

Hallo,

ich lese gerade die GridPower aus dem VenusOS per Modbus TCP ein.
Die Werte werden laut Doku von Victron als int16 (-32768 to 32767) geliefert.
Ich bekomme Sie in fhem aber leider nur als uint16 angezeigt.
D.h., positive Power Werte sind OK, Von den negativen müsste ich immer 0xFFFF abziehen.


define VictronT1 ModbusAttr 100 1 192.168.0.50:502 TCP
attr VictronT1 obj-h820-reading GridPowerL1
attr VictronT1 obj-h821-reading GridPowerL2
attr VictronT1 obj-h822-reading GridPowerL3

attr VictronT1 dev-h-defPoll 1
attr VictronT1 dev-h-defUnpack n



Ich habe leider $Null Ahnung (bin auch sonst ein ziemlicher FHEM DAU) von Perl und nur diesen unpack-Code gefunden:
https://www.tutorialspoint.com/perl/perl_unpack.htm


diese Zeile klappt nicht: A signed integer  i
attr VictronT1 dev-h-defUnpack i


Falls jemand eine Idee hat, wo mein Denkfehler ist ...


Ich behelfe mich momentan mit dieser Krücke:
attr VictronT1 obj-h822-expr $val - 65535
..

EM1010PC, EM1000WZ, WS300PC, S300TH, Fritz Dect 200, Victron MPII, Cerbo GX, US3000C