FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Der_Matze am 22 Dezember 2022, 18:57:18

Titel: ModbusAttr unpack int32 Wert
Beitrag von: Der_Matze am 22 Dezember 2022, 18:57:18
Hallo !

Ich frage mittels ModbusAttr von meinem Solax WR einen int32 Wert ab. Allerdings bekomme ich diesen nicht richtig als Dezimalzahl konvertiert.

attr Solax obj-i70-reading Feedin_Power
attr Solax obj-i70-revRegs 1
attr Solax obj-i70-showGet 1
attr Solax obj-i70-unpack I


Im Log findet sich:

2022.12.22 18:05:07 5 : Solax: ParseDataString called from HandleResponse with data hex ffd1ffff, type i, adr 70, op read
2022.12.22 18:05:07 5 : Solax: SplitDataString called from ParseDataString with data hex ffd1ffff, type i, adr 70, valuesLen 2, op read
2022.12.22 18:05:07 5 : Solax: CreateDataObjects called from ParseDataString with objList i70
2022.12.22 18:05:07 5 : Solax: CreateDataObjects sortedList i70
2022.12.22 18:05:07 5 : Solax: CreateParseInfoCache called
2022.12.22 18:05:07 5 : Solax: ReverseWordOrder is reversing order of up to 2 registers
2022.12.22 18:05:07 5 : Solax: ReverseWordOrder for CreateDataObjects is transforming ffd1ffff to ffffffd1
2022.12.22 18:05:07 5 : Solax: CreateDataObjects unpacked ffffffd1 with I to 3523215359
2022.12.22 18:05:07 4 : Solax: CreateDataObjects assigns value 3523215359 to Feedin_Power

Der Wert 3523215359 ist natürlich Käse.
Wenn man vor dem unpack den Hex Wert noch durch pack schickt, dann kommt der richtige Wert raus:

$ perl -e 'printf "%d\n", unpack "l", pack "L", hex "ffffffd1"'
-47


Lässt sich die Konvertierung auch irgendwie direkt mit der ModbusAttr unpack Funktion abbilden?

Danke
Matze
Titel: Antw:ModbusAttr unpack int32 Wert
Beitrag von: Der_Matze am 23 Dezember 2022, 17:53:34
Habe es endlich herausgefunden. Durch -revRegs 1 dreht sich wohl die byte-order. Somit wird aus little-endian (laut Doku zum WR) dann big-endian. Mit -unpack l> funktioniert es nun.


attr Solax obj-i70-len 2
attr Solax obj-i70-reading Feedin_Power
attr Solax obj-i70-revRegs 1
attr Solax obj-i70-showGet 1
attr Solax obj-i70-unpack l>