Neue Versionen und Support zum Modbus-Modul

Begonnen von StefanStrobel, 20 August 2017, 12:11:08

Vorheriges Thema - Nächstes Thema

holle75

#660
Zitat von: Hollo am 10 Januar 2021, 21:59:41
Das stellst du doch am Device ein, oder?
Den SDM kannst du auf jeden Fall passend konfigurieren.
Ja, aber am Modbus-Device. Weiß nicht wie man es nennt. Das Übergeordnete, welches dann auf deinen USB-Adapter zugreift. Dort muß ich im Falle Xcom485i das ",8,E,1" anhängen. Für die SDM´s ergibt sich aus der Nichtdefinition glaubs ",8,N,1"

Auf das Device greifen dann die Modbusattr zu. Oder ich verstehe es falsch.

hier hatte ich versucht es deutlicher zu beschreiben

Zitat von: holle75 am 10 Januar 2021, 13:57:36
Einer eine Idee, wie ich das mit der Parity ",8,E,1" mit den SDM´s kombiniert bekomme? Eben mal im Hauptsystem mit an die Definition gehängt, also anstatt

defmod Eastron Modbus /dev/ttyUSB1@9600
mit
defmod Eastron Modbus /dev/ttyUSB1@9600,8,E,1

dann kommen von den SDM´s keine Readings mehr. Mmmmmmmh.

Später würde ich schon gerne nur einen USB-Adaper und einen Bus betreiben.



holle75

#661
Zitat von: StefanStrobel am 10 Januar 2021, 22:03:48
Da wäre ein größerer Ausschnitt aus dem Log sehr hilfreich, damit ich den Kontext sehe.
Scheinbar hat er in dieser Situation nur ein Byte (d2) als Eingabe für den unpack-Befehl. Der erwartet aber 4 Bytes ...

Gruß
   Stefan

ein Ausschnitt auf verbose 5:

2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate called from Fhem internal timer
2021.01.11 12:01:09 4: Studer485_BSP: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 5.0 sec at 12:01:14.427, interval 5
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate objects from attributes: i6 i4 i0 i58
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate full object list: i0 i4 i58 i6
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate check i0 => Volt_Batt, poll = 1, polldelay = 0.5, last = 1610362864.48518
2021.01.11 12:01:09 4: Studer485_BSP: GetUpdate will request Volt_Batt
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate check i4 => SoC, poll = 1, polldelay = 0.5, last = 1610362864.62137
2021.01.11 12:01:09 4: Studer485_BSP: GetUpdate will request SoC
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate check i58 => Temp_Batt, poll = 1, polldelay = 0.5, last = 1610362864.88605
2021.01.11 12:01:09 4: Studer485_BSP: GetUpdate will request Temp_Batt
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate check i6 => Charge_Discharge_W, poll = 1, polldelay = 0.5, last = 1610362389.51011
2021.01.11 12:01:09 4: Studer485_BSP: GetUpdate will request Charge_Discharge_W
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate tries to combine read commands
2021.01.11 12:01:09 4: Studer485_BSP: GetUpdate readList = i4 i58 i0 i6
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate cant combine request for Volt_Batt / i0 with SoC / i4, span 6 > max 1
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate cant combine request for SoC / i4 with Charge_Discharge_W / i6, span 6 > max 1
2021.01.11 12:01:09 5: Studer485_BSP: GetUpdate cant combine request for Charge_Discharge_W / i6 with Temp_Batt / i58, span 54 > max 1
2021.01.11 12:01:09 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i0, len 2, master device Studer485_BSP, reading Volt_Batt (getUpdate)
2021.01.11 12:01:09 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i4, len 2, master device Studer485_BSP, reading SoC (getUpdate)
2021.01.11 12:01:09 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i6, len 4, master device Studer485_BSP, reading Charge_Discharge_W (getUpdate)
2021.01.11 12:01:09 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i58, len 2, master device Studer485_BSP, reading Temp_Batt (getUpdate)
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 41ea000032, type i, adr 0, valuesLen 2, op read
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj unpacked 41ea000032 with f> to 29.25
2021.01.11 12:01:09 5: Studer485_BSP: FormatVal for ParseObj formats 29.25 with format %.2f, result is 29.25
2021.01.11 12:01:09 4: Studer485_BSP: ParseObj assigns value 29.25 to Volt_Batt
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj moves to next object, skip 2 to i2
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj has no information about handling i2
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj created 1 readings
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 42a6a0008b, type i, adr 4, valuesLen 2, op read
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj unpacked 42a6a0008b with f> to 83.3125
2021.01.11 12:01:09 5: Studer485_BSP: FormatVal for ParseObj formats 83.3125 with format %.1f, result is 83.3
2021.01.11 12:01:09 4: Studer485_BSP: ParseObj assigns value 83.3 to SoC
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj moves to next object, skip 2 to i6
2021.01.11 12:01:09 3: Studer485_BSP: ParseObj unpack of 8b with f> for Charge_Discharge_W resulted in undefined value
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj created 1 readings
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 40ce400042, type i, adr 58, valuesLen 2, op read
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj unpacked 40ce400042 with f> to 6.4453125
2021.01.11 12:01:09 5: Studer485_BSP: FormatVal for ParseObj formats 6.4453125 with format %.1f, result is 6.4
2021.01.11 12:01:09 4: Studer485_BSP: ParseObj assigns value 6.4 to Temp_Batt
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj moves to next object, skip 2 to i60
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj has no information about handling i60
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj created 1 readings
2021.01.11 12:01:11 5: Studer485_XTM: GetUpdate called from Fhem internal timer
2021.01.11 12:01:11 4: Studer485_XTM: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 5.0 sec at 12:01:16.281, interval 5
2021.01.11 12:01:11 5: Studer485_XTM: GetUpdate objects from attributes: i64 i62
2021.01.11 12:01:11 5: Studer485_XTM: GetUpdate full object list: i62 i64
2021.01.11 12:01:11 5: Studer485_XTM: GetUpdate check i62 => State_of_auxiliary_relay_1, poll = 1, polldelay = 0.5, last = 1610362866.33345
2021.01.11 12:01:11 4: Studer485_XTM: GetUpdate will request State_of_auxiliary_relay_1
2021.01.11 12:01:11 5: Studer485_XTM: GetUpdate check i64 => State_of_auxiliary_relay_2, poll = 1, polldelay = 0.5, last = 1610362866.46564
2021.01.11 12:01:11 4: Studer485_XTM: GetUpdate will request State_of_auxiliary_relay_2
2021.01.11 12:01:11 5: Studer485_XTM: GetUpdate tries to combine read commands
2021.01.11 12:01:11 4: Studer485_XTM: GetUpdate readList = i62 i64
2021.01.11 12:01:11 5: Studer485_XTM: GetUpdate cant combine request for State_of_auxiliary_relay_1 / i62 with State_of_auxiliary_relay_2 / i64, span 4 > max 1
2021.01.11 12:01:11 4: Studer485_XTM: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 11, read fc 4 i62, len 2, master device Studer485_XTM, reading State_of_auxiliary_relay_1 (getUpdate)
2021.01.11 12:01:11 4: Studer485_XTM: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 11, read fc 4 i64, len 2, master device Studer485_XTM, reading State_of_auxiliary_relay_2 (getUpdate)
2021.01.11 12:01:11 5: Studer485_XTM: ParseObj called from HandleResponse with data hex 3f8000005c, type i, adr 62, valuesLen 2, op read
2021.01.11 12:01:11 5: Studer485_XTM: ParseObj unpacked 3f8000005c with f> to 1
2021.01.11 12:01:11 4: Studer485_XTM: ParseObj assigns value 1 to State_of_auxiliary_relay_1
2021.01.11 12:01:11 5: Studer485_XTM: ParseObj moves to next object, skip 2 to i64
2021.01.11 12:01:11 3: Studer485_XTM: ParseObj unpack of 5c with f> for State_of_auxiliary_relay_2 resulted in undefined value
2021.01.11 12:01:11 5: Studer485_XTM: ParseObj created 1 readings
2021.01.11 12:01:11 5: Studer485_XTM: ParseObj called from HandleResponse with data hex 3f8000005c, type i, adr 64, valuesLen 2, op read
2021.01.11 12:01:11 5: Studer485_XTM: ParseObj unpacked 3f8000005c with f> to 1
2021.01.11 12:01:11 4: Studer485_XTM: ParseObj assigns value 1 to State_of_auxiliary_relay_2
2021.01.11 12:01:11 5: Studer485_XTM: ParseObj moves to next object, skip 2 to i66
2021.01.11 12:01:11 5: Studer485_XTM: ParseObj has no information about handling i66
2021.01.11 12:01:11 5: Studer485_XTM: ParseObj created 1 readings
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate called from Fhem internal timer
2021.01.11 12:01:14 4: Studer485_BSP: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 5.0 sec at 12:01:19.429, interval 5
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate objects from attributes: i6 i4 i0 i58
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate full object list: i0 i4 i58 i6
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate check i0 => Volt_Batt, poll = 1, polldelay = 0.5, last = 1610362869.48205
2021.01.11 12:01:14 4: Studer485_BSP: GetUpdate will request Volt_Batt
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate check i4 => SoC, poll = 1, polldelay = 0.5, last = 1610362869.61799
2021.01.11 12:01:14 4: Studer485_BSP: GetUpdate will request SoC
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate check i58 => Temp_Batt, poll = 1, polldelay = 0.5, last = 1610362869.88394
2021.01.11 12:01:14 4: Studer485_BSP: GetUpdate will request Temp_Batt
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate check i6 => Charge_Discharge_W, poll = 1, polldelay = 0.5, last = 1610362389.51011
2021.01.11 12:01:14 4: Studer485_BSP: GetUpdate will request Charge_Discharge_W
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate tries to combine read commands
2021.01.11 12:01:14 4: Studer485_BSP: GetUpdate readList = i4 i58 i0 i6
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate cant combine request for Volt_Batt / i0 with SoC / i4, span 6 > max 1
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate cant combine request for SoC / i4 with Charge_Discharge_W / i6, span 6 > max 1
2021.01.11 12:01:14 5: Studer485_BSP: GetUpdate cant combine request for Charge_Discharge_W / i6 with Temp_Batt / i58, span 54 > max 1
2021.01.11 12:01:14 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i0, len 2, master device Studer485_BSP, reading Volt_Batt (getUpdate)
2021.01.11 12:01:14 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i4, len 2, master device Studer485_BSP, reading SoC (getUpdate)
2021.01.11 12:01:14 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i6, len 4, master device Studer485_BSP, reading Charge_Discharge_W (getUpdate)
2021.01.11 12:01:14 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i58, len 2, master device Studer485_BSP, reading Temp_Batt (getUpdate)
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 41ea20002b, type i, adr 0, valuesLen 2, op read
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj unpacked 41ea20002b with f> to 29.265625
2021.01.11 12:01:14 5: Studer485_BSP: FormatVal for ParseObj formats 29.265625 with format %.2f, result is 29.27
2021.01.11 12:01:14 4: Studer485_BSP: ParseObj assigns value 29.27 to Volt_Batt
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj moves to next object, skip 2 to i2
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj has no information about handling i2
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj created 1 readings
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 42a6a0008b, type i, adr 4, valuesLen 2, op read
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj unpacked 42a6a0008b with f> to 83.3125
2021.01.11 12:01:14 5: Studer485_BSP: FormatVal for ParseObj formats 83.3125 with format %.1f, result is 83.3
2021.01.11 12:01:14 4: Studer485_BSP: ParseObj assigns value 83.3 to SoC
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj moves to next object, skip 2 to i6
2021.01.11 12:01:14 3: Studer485_BSP: ParseObj unpack of 8b with f> for Charge_Discharge_W resulted in undefined value
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj created 1 readings
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 40ce400042, type i, adr 58, valuesLen 2, op read
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj unpacked 40ce400042 with f> to 6.4453125
2021.01.11 12:01:14 5: Studer485_BSP: FormatVal for ParseObj formats 6.4453125 with format %.1f, result is 6.4
2021.01.11 12:01:14 4: Studer485_BSP: ParseObj assigns value 6.4 to Temp_Batt
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj moves to next object, skip 2 to i60
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj has no information about handling i60
2021.01.11 12:01:14 5: Studer485_BSP: ParseObj created 1 readings
2021.01.11 12:01:16 5: Studer485_XTM: GetUpdate called from Fhem internal timer
2021.01.11 12:01:16 4: Studer485_XTM: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 5.0 sec at 12:01:21.283, interval 5
2021.01.11 12:01:16 5: Studer485_XTM: GetUpdate objects from attributes: i64 i62
2021.01.11 12:01:16 5: Studer485_XTM: GetUpdate full object list: i62 i64
2021.01.11 12:01:16 5: Studer485_XTM: GetUpdate check i62 => State_of_auxiliary_relay_1, poll = 1, polldelay = 0.5, last = 1610362871.3374
2021.01.11 12:01:16 4: Studer485_XTM: GetUpdate will request State_of_auxiliary_relay_1
2021.01.11 12:01:16 5: Studer485_XTM: GetUpdate check i64 => State_of_auxiliary_relay_2, poll = 1, polldelay = 0.5, last = 1610362871.46565
2021.01.11 12:01:16 4: Studer485_XTM: GetUpdate will request State_of_auxiliary_relay_2
2021.01.11 12:01:16 5: Studer485_XTM: GetUpdate tries to combine read commands
2021.01.11 12:01:16 4: Studer485_XTM: GetUpdate readList = i64 i62
2021.01.11 12:01:16 5: Studer485_XTM: GetUpdate cant combine request for State_of_auxiliary_relay_1 / i62 with State_of_auxiliary_relay_2 / i64, span 4 > max 1
2021.01.11 12:01:16 4: Studer485_XTM: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 11, read fc 4 i62, len 2, master device Studer485_XTM, reading State_of_auxiliary_relay_1 (getUpdate)
2021.01.11 12:01:16 4: Studer485_XTM: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 11, read fc 4 i64, len 2, master device Studer485_XTM, reading State_of_auxiliary_relay_2 (getUpdate)
2021.01.11 12:01:16 5: Studer485_XTM: ParseObj called from HandleResponse with data hex 3f8000005c, type i, adr 62, valuesLen 2, op read
2021.01.11 12:01:16 5: Studer485_XTM: ParseObj unpacked 3f8000005c with f> to 1
2021.01.11 12:01:16 4: Studer485_XTM: ParseObj assigns value 1 to State_of_auxiliary_relay_1
2021.01.11 12:01:16 5: Studer485_XTM: ParseObj moves to next object, skip 2 to i64
2021.01.11 12:01:16 3: Studer485_XTM: ParseObj unpack of 5c with f> for State_of_auxiliary_relay_2 resulted in undefined value
2021.01.11 12:01:16 5: Studer485_XTM: ParseObj created 1 readings
2021.01.11 12:01:16 5: Studer485_XTM: ParseObj called from HandleResponse with data hex 3f8000005c, type i, adr 64, valuesLen 2, op read
2021.01.11 12:01:16 5: Studer485_XTM: ParseObj unpacked 3f8000005c with f> to 1
2021.01.11 12:01:16 4: Studer485_XTM: ParseObj assigns value 1 to State_of_auxiliary_relay_2
2021.01.11 12:01:16 5: Studer485_XTM: ParseObj moves to next object, skip 2 to i66
2021.01.11 12:01:16 5: Studer485_XTM: ParseObj has no information about handling i66
2021.01.11 12:01:16 5: Studer485_XTM: ParseObj created 1 readings
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate called from Fhem internal timer
2021.01.11 12:01:19 4: Studer485_BSP: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 5.0 sec at 12:01:24.431, interval 5
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate objects from attributes: i6 i4 i0 i58
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate full object list: i0 i4 i58 i6
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate check i0 => Volt_Batt, poll = 1, polldelay = 0.5, last = 1610362874.48505
2021.01.11 12:01:19 4: Studer485_BSP: GetUpdate will request Volt_Batt
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate check i4 => SoC, poll = 1, polldelay = 0.5, last = 1610362874.62105
2021.01.11 12:01:19 4: Studer485_BSP: GetUpdate will request SoC
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate check i58 => Temp_Batt, poll = 1, polldelay = 0.5, last = 1610362874.88452
2021.01.11 12:01:19 4: Studer485_BSP: GetUpdate will request Temp_Batt
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate check i6 => Charge_Discharge_W, poll = 1, polldelay = 0.5, last = 1610362389.51011
2021.01.11 12:01:19 4: Studer485_BSP: GetUpdate will request Charge_Discharge_W
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate tries to combine read commands
2021.01.11 12:01:19 4: Studer485_BSP: GetUpdate readList = i6 i0 i58 i4
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate cant combine request for Volt_Batt / i0 with SoC / i4, span 6 > max 1
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate cant combine request for SoC / i4 with Charge_Discharge_W / i6, span 6 > max 1
2021.01.11 12:01:19 5: Studer485_BSP: GetUpdate cant combine request for Charge_Discharge_W / i6 with Temp_Batt / i58, span 54 > max 1
2021.01.11 12:01:19 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i0, len 2, master device Studer485_BSP, reading Volt_Batt (getUpdate)
2021.01.11 12:01:19 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i4, len 2, master device Studer485_BSP, reading SoC (getUpdate)
2021.01.11 12:01:19 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i6, len 4, master device Studer485_BSP, reading Charge_Discharge_W (getUpdate)
2021.01.11 12:01:19 4: Studer485_BSP: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 61, read fc 4 i58, len 2, master device Studer485_BSP, reading Temp_Batt (getUpdate)
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 41e9e0008b, type i, adr 0, valuesLen 2, op read
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj unpacked 41e9e0008b with f> to 29.234375
2021.01.11 12:01:19 5: Studer485_BSP: FormatVal for ParseObj formats 29.234375 with format %.2f, result is 29.23
2021.01.11 12:01:19 4: Studer485_BSP: ParseObj assigns value 29.23 to Volt_Batt
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj moves to next object, skip 2 to i2
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj has no information about handling i2
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj created 1 readings
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 42a6a0008b, type i, adr 4, valuesLen 2, op read
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj unpacked 42a6a0008b with f> to 83.3125
2021.01.11 12:01:19 5: Studer485_BSP: FormatVal for ParseObj formats 83.3125 with format %.1f, result is 83.3
2021.01.11 12:01:19 4: Studer485_BSP: ParseObj assigns value 83.3 to SoC
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj moves to next object, skip 2 to i6
2021.01.11 12:01:19 3: Studer485_BSP: ParseObj unpack of 8b with f> for Charge_Discharge_W resulted in undefined value
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj created 1 readings
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 40ce400042, type i, adr 58, valuesLen 2, op read
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj unpacked 40ce400042 with f> to 6.4453125
2021.01.11 12:01:19 5: Studer485_BSP: FormatVal for ParseObj formats 6.4453125 with format %.1f, result is 6.4
2021.01.11 12:01:19 4: Studer485_BSP: ParseObj assigns value 6.4 to Temp_Batt
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj moves to next object, skip 2 to i60
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj has no information about handling i60
2021.01.11 12:01:19 5: Studer485_BSP: ParseObj created 1 readings
2021.01.11 12:01:21 5: Studer485_XTM: GetUpdate called from Fhem internal timer
2021.01.11 12:01:21 4: Studer485_XTM: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 5.0 sec at 12:01:26.285, interval 5
2021.01.11 12:01:21 5: Studer485_XTM: GetUpdate objects from attributes: i64 i62
2021.01.11 12:01:21 5: Studer485_XTM: GetUpdate full object list: i62 i64
2021.01.11 12:01:21 5: Studer485_XTM: GetUpdate check i62 => State_of_auxiliary_relay_1, poll = 1, polldelay = 0.5, last = 1610362876.355
2021.01.11 12:01:21 4: Studer485_XTM: GetUpdate will request State_of_auxiliary_relay_1
2021.01.11 12:01:21 5: Studer485_XTM: GetUpdate check i64 => State_of_auxiliary_relay_2, poll = 1, polldelay = 0.5, last = 1610362876.46781
2021.01.11 12:01:21 4: Studer485_XTM: GetUpdate will request State_of_auxiliary_relay_2
2021.01.11 12:01:21 5: Studer485_XTM: GetUpdate tries to combine read commands
2021.01.11 12:01:21 4: Studer485_XTM: GetUpdate readList = i64 i62
2021.01.11 12:01:21 5: Studer485_XTM: GetUpdate cant combine request for State_of_auxiliary_relay_1 / i62 with State_of_auxiliary_relay_2 / i64, span 4 > max 1
2021.01.11 12:01:21 4: Studer485_XTM: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 11, read fc 4 i62, len 2, master device Studer485_XTM, reading State_of_auxiliary_relay_1 (getUpdate)
2021.01.11 12:01:21 4: Studer485_XTM: DoRequest called from GetUpdate created new request, read buffer empty,
request: id 11, read fc 4 i64, len 2, master device Studer485_XTM, reading State_of_auxiliary_relay_2 (getUpdate)
2021.01.11 12:01:21 5: Studer485_XTM: ParseObj called from HandleResponse with data hex 3f8000005c, type i, adr 62, valuesLen 2, op read
2021.01.11 12:01:21 5: Studer485_XTM: ParseObj unpacked 3f8000005c with f> to 1
2021.01.11 12:01:21 4: Studer485_XTM: ParseObj assigns value 1 to State_of_auxiliary_relay_1
2021.01.11 12:01:21 5: Studer485_XTM: ParseObj moves to next object, skip 2 to i64
2021.01.11 12:01:21 3: Studer485_XTM: ParseObj unpack of 5c with f> for State_of_auxiliary_relay_2 resulted in undefined value
2021.01.11 12:01:21 5: Studer485_XTM: ParseObj created 1 readings
2021.01.11 12:01:21 5: Studer485_XTM: ParseObj called from HandleResponse with data hex 3f8000005c, type i, adr 64, valuesLen 2, op read
2021.01.11 12:01:21 5: Studer485_XTM: ParseObj unpacked 3f8000005c with f> to 1
2021.01.11 12:01:21 4: Studer485_XTM: ParseObj assigns value 1 to State_of_auxiliary_relay_2
2021.01.11 12:01:21 5: Studer485_XTM: ParseObj moves to next object, skip 2 to i66
2021.01.11 12:01:21 5: Studer485_XTM: ParseObj has no information about handling i66
2021.01.11 12:01:21 5: Studer485_XTM: ParseObj created 1 readings


list device1
Internals:
   DEF        61 5
   FUUID      5ffb1f69-f33f-c138-fbe8-92096ca34e9a6870
   IODev      ModbusLine
   Interval   5
   MODBUSID   61
   MODE       master
   MODULEVERSION Modbus 4.3.11 - 2.1.2021
   NAME       Studer485_BSP
   NOTIFYDEV  global
   NR         17
   NTFY_ORDER 50-Studer485_BSP
   PROTOCOL   RTU
   STATE      opened
   TYPE       ModbusAttr
   FRAME:
   OLDREADINGS:
   READ:
   READINGS:
     2021-01-11 11:44:31   Charge_Discharge_W -946
     2021-01-11 11:44:31   SoC             83.3
     2021-01-11 11:44:31   Temp_Batt       6.2
     2021-01-11 11:44:31   Volt_Batt       27.14
     2021-01-11 07:37:25   state           opened
   REMEMBER:
     lrecv      1610361871.54109
     lsend      1610361871.50956
   gotReadings:
     Temp_Batt  6.2
   lastRead:
     i0         1610361871.13603
     i4         1610361871.27209
     i58        1610361871.54431
     i6         1610361871.40838
Attributes:
   dev-defPoll 1
   dev-defShowGet 1
   event-min-interval .*:1800
   event-on-change-reading Charge_Discharge_W:20,Volt_Batt:0.3,SoC,Temp_Batt
   event-on-update-reading .*
   obj-i0-format %.2f
   obj-i0-len 2
   obj-i0-reading Volt_Batt
   obj-i0-unpack f>
   obj-i4-format %.1f
   obj-i4-len 2
   obj-i4-reading SoC
   obj-i4-unpack f>
   obj-i58-format %.1f
   obj-i58-len 2
   obj-i58-reading Temp_Batt
   obj-i58-unpack f>
   obj-i6-format %2d
   obj-i6-len 2
   obj-i6-reading Charge_Discharge_W
   obj-i6-unpack f>
   verbose 5


list Device2
Internals:
   DEF        11 5
   FUUID      5ffc29b8-f33f-c138-f855-14efee2f996de15b
   IODev      ModbusLine
   Interval   5
   MODBUSID   11
   MODE       master
   MODULEVERSION Modbus 4.3.11 - 2.1.2021
   NAME       Studer485_XTM
   NOTIFYDEV  global
   NR         18
   NTFY_ORDER 50-Studer485_XTM
   PROTOCOL   RTU
   STATE      opened
   TYPE       ModbusAttr
   FRAME:
   OLDREADINGS:
   READ:
   READINGS:
     2021-01-11 12:02:46   State_of_auxiliary_relay_1 1
     2021-01-11 12:02:46   State_of_auxiliary_relay_2 1
     2021-01-11 11:58:06   state           opened
   REMEMBER:
     lrecv      1610362966.51022
     lsend      1610362966.47834
   gotReadings:
     State_of_auxiliary_relay_2 1
   lastRead:
     i62        1610362966.38218
     i64        1610362966.51496
Attributes:
   dev-defPoll 1
   dev-defShowGet 1
   event-min-interval .*:1800
   event-on-change-reading .*
   event-on-update-reading .*
   obj-i62-len 2
   obj-i62-reading State_of_auxiliary_relay_1
   obj-i62-unpack f>
   obj-i64-len 2
   obj-i64-reading State_of_auxiliary_relay_2
   obj-i64-unpack f>
   verbose    5


edit: sichergestellt, dass das Reading in Device1 auch gerade negativ war. Wobei der Fehler bei jedem Durchlauf, auch wenn positiv, kommt.
edit2: eben noch ein zweites Device erstellt. Auch hier kommen Fehler. Interessant, dass es jeweils dass letztdefinierte Reading ist.
edit3: Im zweiten Device Studer485_XTM soll laut Studer der Wert im Register als "ENUM" vorliegen. Mal gesucht und nicht wirklich Hilfreiches bzgl unpack dazu gefunden.
Auch wird ja das erste Reading, obwohl identisch, korrekt ausgelesen.

Frank_Huber

#662
Hallo,

Ich habe ein kleines Problemchen mit negativen Werten die von meiner Heizung per Modbus IP kommen.

positive Werte entpacke ich mit "N", bei negativen kommt da aber nur murks.
Beispiel, Aussentemperatur -3.2 Grad.
unpack mit N: 429496726.3
unpack mit s>: -0.1
unpack mit s<: -0.1

EDIT: positive Werte werden nur mit "N" richtig entpackt und dargestellt.

Hier das List:
Internals:
   DEF        1 60 192.168.12.207:502 TCP
   DeviceName 192.168.12.207:502
   EXPECT     idle
   FUUID      5ffb04b9-f33f-5ef8-03a5-5c6c0fbebffc5dbe
   FVERSION   98_ModbusAttr.pm:0.234840/2021-01-07
   IODev      ETA_PU11_Modbus
   Interval   60
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.3.11 - 2.1.2021
   NAME       ETA_PU11_Modbus
   NOTIFYDEV  global
   NR         84
   NTFY_ORDER 50-ETA_PU11_Modbus
   PROTOCOL   TCP
   STATE      disabled
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   READ:
     BUFFER     
   READINGS:
     2021-01-11 10:04:48   Aussentemperatur -0.1
     2021-01-11 10:04:56   state           disabled
   REMEMBER:
     lid        1
     lname      ETA_PU11_Modbus
     lrecv      1610355888.20987
     lsend      1610355888.16397
   defptr:
     ETA_PU11_Modbus 1
   gotReadings:
     Aussentemperatur -0.1
   lastRead:
     h1010      1610355888.21235
Attributes:
   DbLogExclude .*
   disable    1
   group      ETA_Modbus
   obj-h1010-expr $val/10
   obj-h1010-len 2
   obj-h1010-poll 1
   obj-h1010-reading Aussentemperatur
   obj-h1010-unpack s<
   room       Heizung
   sortUpdate 1
   verbose    5


Im Anhang noch die verbose 5 Logs von "N", "s>" und "s<" sowie Screenshots vom Kessel.

weiß jemand Rat?

Danke & Grüße
Frank

holle75

Hallo Frank, meinen Beitrag über dir habe ich gerade nochmal editiert.
Ist es bei dir auch das letzte Reading im Device?

Frank_Huber

Zitat von: holle75 am 11 Januar 2021, 12:06:51
Hallo Frank, meinen Beitrag über dir habe ich gerade nochmal editiert.
Ist es bei dir auch das letzte Reading im Device?
Nein, mein Problem kommt durch negative Werte.
Das list oben ist von meinem Test System. Dort rufe ich nur einen Wert ab.
Am produktiven System rufe ich so ca 20 Werte ab.

holle75

Bei mir ist seltsam, dass im neu definierten Device zwei Werte und Register identisch abgefragt werden, aber nur das zweite und letzte Reading den Fehler wirft.
Auch im Device 1 ist es das letzte Reading.

Im Device 1 dachte ich auch, es hat was mit dem ab und zu negativen Wert zu tun.

Scheinen zwei unabhängige Probleme zu sein.

Frank_Huber

Ja, das denke ich auch.
Die gleiche Definition funktioniert mit unpack N prima wenn der Wert positiv ist.

holle75

#667
Zitat von: Hollo am 10 Januar 2021, 21:59:41
Das stellst du doch am Device ein, oder?
Den SDM kannst du auf jeden Fall passend konfigurieren.

Aah, jetzt habe ich dich verstanden. Eben nochmals die Anleitung der SDM´s gelesen und DA kann man ebenfalls parity einstellen.
Top. Dann stell ich da auf E statt N und dann sind die SDM´s mit dem Xcom485 auf dem Modbus-Device/Bus mit der Erweiterung ",8,E,1" kompatibel.
Den Xcom485 kann man leider nicht auf N stellen.

StefanStrobel

Hallo Holle75,

in deinem Log sind leider nur die logischen Devices mit verbose 5 drin. Das physische IO-Device (ModbusLine) fehlt. Das bräuchte ich aber auch.
Aus irgendeinem Grund kommt ein Byte zu viel von Deinem Gateway:

Zitat
2021.01.11 12:01:09 5: Studer485_BSP: ParseObj called from HandleResponse with data hex 41ea000032, type i, adr 0, valuesLen 2, op read

41ea00003 wäre als 32Bit Float ok, aber das 32 danach ist zu viel. Angefragt waren ja nur zwei Register, also 32 Bit.
Das Modul versucht das zusätzliche Byte dann für das nächste Objekt zu verwenden. Dafür ist es aber zu wenig.

Um es besser zu verstehen bräuchte ich das Log sowohl für die logischen Geräte als auch das physische IO-Device mit verbose 5.

Gruss / Thanx
   Stefan

StefanStrobel

Hallo Frank,

dier Lösung findest Du hier:
https://perldoc.perl.org/functions/pack

N steht für "An unsigned long (32-bit) in "network" (big-endian) order."
Das verarbeitet 32 Bit (2 Register), kann aber mit negativen Zahlen nichts anfangen.

s steht für "A signed short (16-bit) value."
Das kann weder als s> noch s> etwas mit 32-Bit-Werten anfangen.

Wenn Deine Werte tatsächlich als 32-Bit signed integers aus zwei Registern geliefert werden, dann müsste der Unpack-Code l> für big endian long integer lauten.

Gruss
   Stefan

Frank_Huber

Danke Stefan,

wenn man weis wo man suchen muss ist das einfach. ;-)
Dachte es gibt nicht mehr als in der CREF steht.

Wir haben gerade 0,8 Grad Plus. Das klappt mit "l>" schonmal.
Mal schauen wann wir wieder in den Frost rutschen. ich geb Bescheid!

holle75


holle75

#672
... und noch die passende Seite zum Auslesen von Infos als Extrakt von Studer.
Studer schmuggelt da noch ein Byte "Byte Count" in die Antwort??

StefanStrobel

Hallo Holle75,

Dein Gateway hängt an die gültigen Modbus-Response-Frames noch ein zusätzliches 00 an.
Das bringt das Modbus-Modul etwas durcheinander.
Ich passe das Modul entsprechend an, dass es auch ohne Warning mit solchen Abarten klar kommt.
Bisher hatte ich so einen Fall noch nicht.

Gruss
   Stefan

holle75

Nice! Danke

... kann  das was mit dem "ByteCount" zu tun haben? s.o.