Auslesen FINDER RS485 Energie Zweirichtungszähler

Begonnen von R1F800, 24 Oktober 2024, 12:10:25

Vorheriges Thema - Nächstes Thema

R1F800

Hallo Zusammen.

Ich stehe gerade auf dem Schlauch.
Ich möchte meinen an den PI RS485 HAT angeschlossenen FINDER Zweirichtungszähler auslesen.

Das RS485 Device ist angelegt, somit ist die Schnittstelle zum Modbus ja etabliert.

defmod ModbusRS485 Modbus /dev/ttyUSB0@9600
attr ModbusRS485 room interfaces

setstate ModbusRS485 opened
setstate ModbusRS485 2024-10-24 11:48:46 state opened

JETZT wird es schwierig, WIE bekomme ich die einzelnen Daten aus dem Finder abgefragt?

Summende Grüße
Ingo

R1F800

#1
Keiner, der mir weiterhelfen kann?

Fehlt das Device mit modbusattr ?
Die Doku zu dem Teil verstehe ich nicht wirklich.
ich müsste doch zuerst auf den Modbus zum jeweiligen register raussenden, das ich auslesen will oder?

defmod FinderEnergiezaehler ModbusAttr 3 60 RTU
attr FinderEnergiezaehler alias Finder Zweirichtungs Zähler
attr FinderEnergiezaehler comment Finder 7M.38
attr FinderEnergiezaehler dev-h-defLen 2
attr FinderEnergiezaehler dev-h-defPoll 1
attr FinderEnergiezaehler dev-h-defUnpack N
attr FinderEnergiezaehler dev-timing-commDelay 0.1
attr FinderEnergiezaehler dev-timing-timeout 2
attr FinderEnergiezaehler enableControlSet 1
attr FinderEnergiezaehler event-on-change-reading .*
attr FinderEnergiezaehler icon stromzaehler_icon@green
attr FinderEnergiezaehler obj-i32752-len 1
attr FinderEnergiezaehler obj-i32752-reading Energy Counter n1
attr FinderEnergiezaehler room interfaces
attr FinderEnergiezaehler verbose 5
attr FinderEnergiezaehler webCmd reread

1) Ist die ID aus der Deviceanlage ModbusAttr frei wählbar?
2) Jetzt die spezifischeren Fragen > die i### Variablen, sind das die Register im auszulesenden Gerät?
UND wie biege ich diese Attribute dem Device bei? Über die Weboberfläche kann ich das nicht > geht nur via edit der CFG

Hier mal das LOG
024.10.27 16:59:03 1: FinderEnergiezaehler: Can't connect to 33:502: connect to http://33:502 timed out
2024.10.27 17:00:38 5: FinderEnergiezaehler: UpdateSetList: setList=reconnect:noArg saveAsModule createAttrsFromParseInfo interval reread:noArg stop:noArg start:noArg close:noArg scanStop:noArg scanModbusObjects sendRaw scanModbusId inactive active
2024.10.27 17:00:38 5: FinderEnergiezaehler: UpdateSetList: getList=
2024.10.27 17:01:07 4: FinderEnergiezaehler: GetUpdate (V4.5.6 - 7.11.2023) called from Fhem internal timer
2024.10.27 17:01:07 4: FinderEnergiezaehler: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 300.0 sec at 17:06:07.454, interval 300
2024.10.27 17:01:07 5: FinderEnergiezaehler: CreateUpdateHash full object list: i32752 i32754 i32756
2024.10.27 17:01:07 4: FinderEnergiezaehler: CombineUpdateHash objHash keys before combine:
2024.10.27 17:01:07 5: FinderEnergiezaehler: CombineUpdateHash tries to combine read commands
2024.10.27 17:01:07 5: FinderEnergiezaehler: CombineUpdateHash keys are now
2024.10.27 17:01:07 4: FinderEnergiezaehler: GetUpdate will now create requests for
2024.10.27 17:06:07 4: FinderEnergiezaehler: GetUpdate (V4.5.6 - 7.11.2023) called from Fhem internal timer
2024.10.27 17:06:07 4: FinderEnergiezaehler: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 300.0 sec at 17:11:07.481, interval 300
2024.10.27 17:06:07 5: FinderEnergiezaehler: CreateUpdateHash full object list: i32752 i32754 i32756
2024.10.27 17:06:07 4: FinderEnergiezaehler: CombineUpdateHash objHash keys before combine:
2024.10.27 17:06:07 5: FinderEnergiezaehler: CombineUpdateHash tries to combine read commands
2024.10.27 17:06:07 5: FinderEnergiezaehler: CombineUpdateHash keys are now
2024.10.27 17:06:07 4: FinderEnergiezaehler: GetUpdate will now create requests for
2024.10.27 17:11:07 4: FinderEnergiezaehler: GetUpdate (V4.5.6 - 7.11.2023) called from Fhem internal timer
2024.10.27 17:11:07 4: FinderEnergiezaehler: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 300.0 sec at 17:16:07.483, interval 300
2024.10.27 17:11:07 5: FinderEnergiezaehler: CreateUpdateHash full object list: i32752 i32754 i32756
2024.10.27 17:11:07 4: FinderEnergiezaehler: CombineUpdateHash objHash keys before combine:
2024.10.27 17:11:07 5: FinderEnergiezaehler: CombineUpdateHash tries to combine read commands
2024.10.27 17:11:07 5: FinderEnergiezaehler: CombineUpdateHash keys are now
2024.10.27 17:11:07 4: FinderEnergiezaehler: GetUpdate will now create requests for

2024.10.27 19:38:40 5: FinderEnergiezaehler: UpdateSetList: setList=reconnect:noArg saveAsModule createAttrsFromParseInfo interval reread:noArg stop:noArg start:noArg close:noArg scanStop:noArg scanModbusObjects sendRaw scanModbusId inactive active
2024.10.27 19:38:40 5: FinderEnergiezaehler: UpdateSetList: getList=
Summende Grüße
Ingo

Prof. Dr. Peter Henning

Bitte verschieben ins Unterforum "Verbrauchsmessung"

pah

StefanStrobel

Hallo R1F800,

Mit
define ModbusRS485 Modbus /dev/ttyUSB0@9600

Legst Du das IO-Device fest. Das muss zur Schnittstelle und zu den Kommunikationseinstellungen passen. Wenn Dein Zähler nicht mit 9600, 8, N, 1 kommuniziert, dann wird es nicht klappen. Die korrekten Angaben sollten im Handbuch Deines Zählers stehen.

Dann brauchst Du ein logisches Device, in dem die Modbus-Id, die Register Deines Zählers mit der Art der Kodierung, Länge etc. angegeben werden. Auch diese Werte sollten im Handbuch des Zählers stehen. Wenn Die Modbus-Id nicht stimmt, antwortet der Zähler nicht. Ebenso kommt nichts sinnvolles wenn die Register-Adressen etc. nicht stimmen.

Define FinderEnergiezaehler ModbusAttr 3 60 RTU

Sieht nicht falsch aus, sofern Dein Zähler wirklich Id 3 verwendet und das Modbus-RTU-Protokoll spricht.

Dein Log-Auszug beginnt aber gleich mit einer Fehlermeldung, die nicht zu der geposteten Konfiguration passt.

FinderEnergiezaehler: Can't connect to 33:502: connect to http://33:502 timed out

sieht so aus als ob Du mit Modbus-TCP ein Gerät mit Namen 33 auf Port 502 ansprechen wolltest und eben nicht über die serielle Schnittstelle und Modbus-RTU.

Gruß
   Stefan



R1F800

#4
Hm. OK direkt mehrere Probleme auf ein Mal.

der Finder 7M.38 hat als Datenblattangabe  "Frame" 8,N,2; "Adresse" 33 und RTU Modbus.
defmod ModbusRS485 Modbus /dev/ttyUSB0@19200,8,N,2  << der RS485 ist zwar nicht via USB sonder via HAT über UART angeklemmt, aber das sollte ja kein Problem sein.

die ID habe ich dann mal an die Adresse angepasst. Das hatte ich so nicht aus der Doku verstanden.
defmod FinderEnergiezaehler ModbusAttr 33 60 RTU
Immerhin kommt die Kommunikation jetzt schon mal weiter:
2024.10.28 16:37:49 4: FinderEnergiezaehler: GetIOHash (called from NotifyFn) did not find valid IODev hash key, calling SetIODev now
2024.10.28 16:37:49 5: FinderEnergiezaehler: SetIODev called from GetIOHash
2024.10.28 16:37:49 4: FinderEnergiezaehler: RegisterAtIODev called from SetIODev registers FinderEnergiezaehler at ModbusRS485 with id 33, MODE master, PROTOCOL RTU
2024.10.28 16:37:49 4: FinderEnergiezaehler: Notify / Init: using ModbusRS485 for communication
2024.10.28 16:37:49 4: FinderEnergiezaehler: UpdateTimer called from NotifyFn with cmd start sets timer to call update function in 0.0 sec at 16:37:49.851, interval 60
2024.10.28 16:37:50 4: FinderEnergiezaehler: GetUpdate (V4.5.6 - 7.11.2023) called from Fhem internal timer
2024.10.28 16:37:50 4: FinderEnergiezaehler: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 60.0 sec at 16:38:50.304, interval 60
2024.10.28 16:37:50 5: FinderEnergiezaehler: CreateUpdateHash full object list: i30406 i32752
2024.10.28 16:37:50 4: FinderEnergiezaehler: CombineUpdateHash objHash keys before combine:
2024.10.28 16:37:50 5: FinderEnergiezaehler: CombineUpdateHash tries to combine read commands
2024.10.28 16:37:50 5: FinderEnergiezaehler: CombineUpdateHash keys are now
2024.10.28 16:37:50 4: FinderEnergiezaehler: GetUpdate will now create requests for
2024.10.28 16:37:50 5: FinderEnergiezaehler: UpdateSetList: setList=reconnect:noArg saveAsModule createAttrsFromParseInfo interval reread:noArg stop:noArg start:noArg close:noArg scanStop:noArg scanModbusObjects sendRaw scanModbusId inactive active
2024.10.28 16:37:50 5: FinderEnergiezaehler: UpdateSetList: getList=
2024.10.28 16:38:50 4: FinderEnergiezaehler: GetUpdate (V4.5.6 - 7.11.2023) called from Fhem internal timer
2024.10.28 16:38:50 4: FinderEnergiezaehler: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 60.0 sec at 16:39:50.306, interval 60
2024.10.28 16:38:50 5: FinderEnergiezaehler: CreateUpdateHash full object list: i30406 i32752
2024.10.28 16:38:50 4: FinderEnergiezaehler: CombineUpdateHash objHash keys before combine:
2024.10.28 16:38:50 5: FinderEnergiezaehler: CombineUpdateHash tries to combine read commands
2024.10.28 16:38:50 5: FinderEnergiezaehler: CombineUpdateHash keys are now
2024.10.28 16:38:50 4: FinderEnergiezaehler: GetUpdate will now create requests for
2024.10.28 16:39:50 4: FinderEnergiezaehler: GetUpdate (V4.5.6 - 7.11.2023) called from Fhem internal timer
 

die beiden I Register sind eigentlich :

i30406 & i30407  (32bit floating point single precision)
i32752 & i32753  (signed long value 32 bit)

die müssten ja eigentlich dann konkatiniert werden ?
attr PWP obj-i30406-unpack f>
Summende Grüße
Ingo

StefanStrobel

Jetzt musst Du die Input-Register auch noch abfragen. Bisher hast Du mit dev-h-defPoll zwar alle Holding-Register zur Abfrage festgelegt, nicht aber die Input-Register. Das wäre dev-i-defPoll.

Gruß
  Stefan

StefanStrobel

Und wenn zwei Input-Register zusammen einen 32-Bit-Float-Wert enthalten, dann musst Du die kleinere Adresse mit Len 2 angeben.

R1F800

#7
Den Zusammenhang hatte ich so noch nicht in der Doku gesehen.

Zitat von: StefanStrobel am 29 Oktober 2024, 15:14:29Und wenn zwei Input-Register zusammen einen 32-Bit-Float-Wert enthalten, dann musst Du die kleinere Adresse mit Len 2 angeben.


heisst
attr FinderEnergiezaehler dev-i-defLen 2
attr FinderEnergiezaehler dev-i-defPoll 1

und dann die Länge bei den abzufragenden OBJ?

Ich brauch eine Kreissäge für das Brett vorm Kopf ...
Summende Grüße
Ingo

StefanStrobel

def-i-def... bzw. def-h-def... legen Defaults für Objektarten fest. Angaben bei den Objekten können das überschreiben.
Alternativ kannst Du auch Datentypen angeben. Hinter einem Datentyp steckt dann schon die Länge und der Unpack-Code.
Das steht in der commandref für ModbusAttr unter "Handling Data Types"

Gruß
   Stefan

R1F800

OK, dann hab ich das ja schon drin:

attr FinderEnergiezaehler dev-h-defLen 2
attr FinderEnergiezaehler dev-h-defPoll 1
attr FinderEnergiezaehler dev-i-defLen 2
attr FinderEnergiezaehler dev-i-defPoll 1
attr FinderEnergiezaehler dev-timing-commDelay 0.1
attr FinderEnergiezaehler dev-timing-timeout 2
attr FinderEnergiezaehler disable 0
attr FinderEnergiezaehler enableControlSet 1
attr FinderEnergiezaehler event-on-change-reading .*
attr FinderEnergiezaehler icon stromzaehler_icon@green
### Temperaturregister
attr FinderEnergiezaehler obj-i30181-len 1
attr FinderEnergiezaehler obj-i30181-reading FinderGeraetetemperatur:temperature
attr FinderEnergiezaehler obj-i30181-showGet 1
attr FinderEnergiezaehler obj-i30181-type signed short little
#### Register 752 und 753
attr FinderEnergiezaehler obj-i32752-len 2
attr FinderEnergiezaehler obj-i32752-reading EnergieBezug
attr FinderEnergiezaehler obj-i32752-showGet 1
attr FinderEnergiezaehler obj-i32752-type unsigned long little
attr FinderEnergiezaehler obj-i32752-unpack f>
#### Register 754 und 755
attr FinderEnergiezaehler obj-i32754-len 2
attr FinderEnergiezaehler obj-i32754-reading EnergieEinspeisung
attr FinderEnergiezaehler obj-i32754-showGet 1
attr FinderEnergiezaehler obj-i32754-type unsigned long little
attr FinderEnergiezaehler obj-i32754-unpack f>

Jetzt komme ich zumindest schon mal weiter, nachdem ich die timeouts hochgesetzt hab. Die waren zu klein dimensioniert ... ob das besser ist :
2024.10.29 18:17:56 4: FinderEnergiezaehler: get called with EnergieBezug (i32752)
2024.10.29 18:17:56 5: FinderEnergiezaehler: GetSetChecks with force
2024.10.29 18:17:56 5: FinderEnergiezaehler: GetSetChecks returns success
2024.10.29 18:17:56 4: FinderEnergiezaehler: DoRequest called from GetLDFn created new request, read buffer empty,
request: id 33, read fc 4 i32752, len 2, master device FinderEnergiezaehler, reading EnergieBezug (get EnergieBezug)

Summende Grüße
Ingo

StefanStrobel

In dem Ausschnitt des Logs sieht man nur dass eine Anfrage vorbereitet wurde.
Der interessante Teil müsste danach kommen.

R1F800

Zitat von: StefanStrobel am 30 Oktober 2024, 15:11:33In dem Ausschnitt des Logs sieht man nur dass eine Anfrage vorbereitet wurde.
Der interessante Teil müsste danach kommen.
Da kam aber nichts mehr ... das wundert mich auch.
Summende Grüße
Ingo

R1F800

So, habe auch einnal die RS485 auf Verbose 5 gestellt.
bei einem GET reuqest ist das hier das LOG:

request: id 33, read fc 4 i30181, len 1, master device FinderEnergiezaehler, reading FinderGeraetetemperatur (get FinderGeraetetemperatur), queued 5.01 secs ago, sent 5.01 secs ago
2024.10.31 14:39:17 4: FinderEnergiezaehler: get called with FinderGeraetetemperatur (i30181)
2024.10.31 14:39:17 5: FinderEnergiezaehler: GetSetChecks with force
2024.10.31 14:39:17 5: FinderEnergiezaehler: GetSetChecks returns success
2024.10.31 14:39:17 4: FinderEnergiezaehler: DoRequest called from GetLDFn created new request, read buffer empty,
request: id 33, read fc 4 i30181, len 1, master device FinderEnergiezaehler, reading FinderGeraetetemperatur (get FinderGeraetetemperatur)
2024.10.31 14:39:17 5: ModbusRS485: QueueRequest called from DoRequest with i30181, qlen 0 from master FinderEnergiezaehler through io device ModbusRS485
2024.10.31 14:39:17 5: ModbusRS485: ProcessRequestQueue called from QueueRequest as direct:ModbusRS485, qlen 1, force, request: request: id 33, read fc 4 i30181, len 1, master device FinderEnergiezaehler, reading FinderGeraetetemperatur (get FinderGeraetetemperatur), queued 0.00 secs ago
2024.10.31 14:39:17 5: ModbusRS485: checkDelays commDelay, last communication with same device was never, required delay is 0.5
2024.10.31 14:39:17 5: ModbusRS485: checkDelays busDelayRead is not required
2024.10.31 14:39:17 5: ModbusRS485: checkDelays sendDelay, last send to same device was 75.477 secs ago, required delay is 0.1
2024.10.31 14:39:17 5: ModbusRS485: checkDelays clientSwitchDelay is not relevant
2024.10.31 14:39:17 4: ModbusRS485: ProcessRequestQueue (V4.5.6 - 7.11.2023) qlen 1, sending 210475e500013d51 via /dev/ttyUSB0@19200,8,N,2, read buffer empty,
request: id 33, read fc 4 i30181, len 1, master device FinderEnergiezaehler, reading FinderGeraetetemperatur (get FinderGeraetetemperatur), queued 0.01 secs ago
2024.10.31 14:39:17 5: ModbusRS485: Send called from ProcessRequestQueue
2024.10.31 14:39:17 5: DevIo_SimpleWrite ModbusRS485: 210475e500013d51
2024.10.31 14:39:17 5: ModbusRS485: ReadAnswer called from GetLDFn
2024.10.31 14:39:17 5: ModbusRS485: ReadAnswer remaining timeout is 4.99415111541748
2024.10.31 14:39:22 3: ModbusRS485: Timeout in Readanswer, read buffer empty,
request: id 33, read fc 4 i30181, len 1, master device FinderEnergiezaehler, reading FinderGeraetetemperatur (get FinderGeraetetemperatur), queued 5.01 secs ago, sent 5.01 secs ago
Summende Grüße
Ingo

StefanStrobel

Dein Zähler antwortet nicht. Bist Du sicher dass die 19200,8,N,2 stimmen?

Gruß
  Stefan

R1F800

Zitat von: StefanStrobel am 31 Oktober 2024, 21:36:40Dein Zähler antwortet nicht. Bist Du sicher dass die 19200,8,N,2 stimmen?

Gruß
  Stefan


Ehm es steht so im Datenblatt
Speed 1200 - 115200   Default 19200
Frame 8 N 2

vielleicht packt die Leitung die Geschwindigkeit nicht?
Summende Grüße
Ingo