RS 485 / Modbus 8fach Relais ET40A08 einbinden

Begonnen von juppy_jupp, 19 April 2023, 00:43:57

Vorheriges Thema - Nächstes Thema

juppy_jupp

Hallo zusammen,

ich versuche in meiner FHEM Umgebung ein 8fach Relais vom Typ ET40A08 über Modbus einzubinden.
Das Relais hat ein Ethernet IF das man über eine Web GUI konfigurieren kann, siehe Bild im Anhang.
Leider finde ich keinerlei Doku dazu.
Aber über TCPUDPdmp kann ich mit folgenden HEX Werten einzelne Relais Kanäle schalten, dazu muss ich aber das Relaismodul von Modbus Slave auf TCP Client umstellen:

Relais 0 ein:
01 06 00 00 01 00 88 5a

Relais 0 aus:
01 06 00 00 02 00 88 aa

Relais 1 ein:
01 06 00 01 01 00 D9 9A

Relais 1 aus:
01 06 00 01 02 00 D9 6A


Ich hab ein Modbus Device angelegt und den ersten Eingang definiert mit folgender Konfig:
defmod Relais ModbusAttr 1 60 10.0.0.7:5000 RTU
attr Relais obj-h0-bswapRegs 1
attr Relais obj-h0-map 1:on, 2:off
attr Relais obj-h0-reading Relay.1
attr Relais obj-h0-set 1
attr Relais obj-h0-showGet 1
attr Relais room System
attr Relais verbose 5

Wenn ich das Device verbinde bekomme ich folgenden Logoutput:
2023.04.19 00:22:04 5: Relais: open called from ControlSet, busyOpenDev 0
2023.04.19 00:22:04 5: Relais: Open called for DevIo connection - closing first
2023.04.19 00:22:04 5: Relais: Close called from DoOpen
2023.04.19 00:22:04 4: Relais: Close connection with DevIo_CloseDev
2023.04.19 00:22:04 5: Relais: GoToState called from DoClose with disconnected
2023.04.19 00:22:04 5: Relais: SetState sets state from disconnected to disconnected
2023.04.19 00:22:04 4: Relais: open trying to open connection to 10.0.0.7:5000
2023.04.19 00:22:04 3: Opening Relais device 10.0.0.7:5000
2023.04.19 00:22:04 5: HttpUtils url=http://10.0.0.7:5000/ NonBlocking via http
2023.04.19 00:22:04 4: IP: 10.0.0.7 -> 10.0.0.7
2023.04.19 00:22:04 3: Relais device opened
2023.04.19 00:22:04 4: Relais: UpdateTimer called from OpenCB with cmd start sets timer to call update function in 23.3 sec at 00:22:28.046, interval 60
2023.04.19 00:22:28 4: Relais: GetUpdate (V4.4.14 - 30.1.2023) called from Fhem internal timer
2023.04.19 00:22:28 4: Relais: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 60.0 sec at 00:23:28.048, interval 60
2023.04.19 00:22:28 5: Relais: CreateUpdateHash full object list: h0
2023.04.19 00:22:28 4: Relais: CombineUpdateHash objHash keys before combine:
2023.04.19 00:22:28 5: Relais: CombineUpdateHash tries to combine read commands
2023.04.19 00:22:28 5: Relais: CombineUpdateHash keys are now
2023.04.19 00:22:28 4: Relais: GetUpdate will now create requests for

Wenn ich versuche den Eingan zu schalten bekomme ich folgende Logeinträge:
Für set on
2023.04.19 00:25:58 4: Relais: set called with Relay.1 (h0) setVal = on
2023.04.19 00:25:58 5: Relais: GetSetChecks with force
2023.04.19 00:25:58 5: Relais: GetSetChecks returns success
2023.04.19 00:25:58 5: Relais: MapConvert called from FormatSetVal converted on (on) to 1 with reversed map on:1, off:2,
2023.04.19 00:25:58 5: Relais: set packed hex 31 with n to hex 0001
2023.04.19 00:25:58 5: Relais: SwapByteOrder is reversing byte order of up to 1 registers
2023.04.19 00:25:58 5: Relais: SwapByteOrder for FormatSetVal is transforming 0001 to 0100
2023.04.19 00:25:58 4: Relais: DoRequest called from SetLDFn created new request, read buffer empty,
request: id 1, write fc 6 h0, len 1, value 0100, master device Relais, reading Relay.1 (set Relay.1),
response: no id, no fcode
2023.04.19 00:25:58 5: Relais: QueueRequest called from DoRequest with h0, qlen 0 from master Relais through io device Relais
2023.04.19 00:25:58 5: Relais: ProcessRequestQueue called from QueueRequest as direct:Relais, qlen 1, force, request: request: id 1, write fc 6 h0, len 1, value 0100, master device Relais, reading Relay.1 (set Relay.1), queued 0.00 secs ago
2023.04.19 00:25:58 5: Relais: checkDelays commDelay, last communication with same device was 31.803 secs ago, required delay is 0.1
2023.04.19 00:25:58 5: Relais: checkDelays sendDelay, last send to same device was 31.810 secs ago, required delay is 0.1
2023.04.19 00:25:58 5: Relais: checkDelays clientSwitchDelay is not relevant
2023.04.19 00:25:58 5: Relais: checkDelays busDelayRead, last activity on bus was 31.803 secs ago, required delay is 0
2023.04.19 00:25:58 4: Relais: ProcessRequestQueue (V4.4.14 - 30.1.2023) qlen 1, sending 010600000100885a via 10.0.0.7:5000, read buffer empty,
request: id 1, write fc 6 h0, len 1, value 0100, master device Relais, reading Relay.1 (set Relay.1), queued 0.00 secs ago,
response: no id, no fcode
2023.04.19 00:25:58 5: Relais: Send called from ProcessRequestQueue
2023.04.19 00:25:58 5: DevIo_SimpleWrite Relais: 010600000100885a
2023.04.19 00:25:58 5: Relais: ReadAnswer called from SetLDFn
2023.04.19 00:25:58 5: Relais: ReadAnswer remaining timeout is 1.99114584922791
2023.04.19 00:25:58 5: Relais: ReadAnswer got: 01060000000388da01
2023.04.19 00:25:58 5: Relais: ParseFrameStart called from ReadAnswer protocol RTU expecting id 1
2023.04.19 00:25:58 4: Relais: ParseFrameStart (RTU, master) extracted id 1, fCode 6 and potential data 0000000388
2023.04.19 00:25:58 5: Relais: HandleResponse called from ReadAnswer
2023.04.19 00:25:58 5: Relais: ParseResponse called from HandleResponse
2023.04.19 00:25:58 4: Relais: HandleResponse error, current frame / read buffer: 01060000000388da01, id 1, fCode 6,
request: id 1, write fc 6 h0, len 1, value 0100, master device Relais, reading Relay.1 (set Relay.1), queued 0.01 secs ago, sent 0.01 secs ago,
response: id 1, fc 6, len 1, values 000388, error: Invalid checksum 88da received. Calculated c9cb
2023.04.19 00:25:58 5: Relais: ResetExpect for HandleResponse from response to idle
2023.04.19 00:25:58 5: Relais: DropFrame called from ReadAnswer - drop 01060000000388da01

für Set off
2023.04.19 00:26:41 4: Relais: set called with Relay.1 (h0) setVal = off
2023.04.19 00:26:41 5: Relais: GetSetChecks with force
2023.04.19 00:26:41 5: Relais: GetSetChecks returns success
2023.04.19 00:26:41 5: Relais: MapConvert called from FormatSetVal converted off (off) to 2 with reversed map on:1, off:2,
2023.04.19 00:26:41 5: Relais: set packed hex 32 with n to hex 0002
2023.04.19 00:26:41 5: Relais: SwapByteOrder is reversing byte order of up to 1 registers
2023.04.19 00:26:41 5: Relais: SwapByteOrder for FormatSetVal is transforming 0002 to 0200
2023.04.19 00:26:41 4: Relais: DoRequest called from SetLDFn created new request, read buffer empty,
request: id 1, write fc 6 h0, len 1, value 0200, master device Relais, reading Relay.1 (set Relay.1),
response: no id, no fcode
2023.04.19 00:26:41 5: Relais: QueueRequest called from DoRequest with h0, qlen 0 from master Relais through io device Relais
2023.04.19 00:26:41 5: Relais: ProcessRequestQueue called from QueueRequest as direct:Relais, qlen 1, force, request: request: id 1, write fc 6 h0, len 1, value 0200, master device Relais, reading Relay.1 (set Relay.1), queued 0.00 secs ago
2023.04.19 00:26:41 5: Relais: checkDelays busDelayRead, last activity on bus was 43.446 secs ago, required delay is 0
2023.04.19 00:26:41 5: Relais: checkDelays clientSwitchDelay is not relevant
2023.04.19 00:26:41 5: Relais: checkDelays sendDelay, last send to same device was 43.451 secs ago, required delay is 0.1
2023.04.19 00:26:41 5: Relais: checkDelays commDelay, last communication with same device was 43.446 secs ago, required delay is 0.1
2023.04.19 00:26:41 4: Relais: ProcessRequestQueue (V4.4.14 - 30.1.2023) qlen 1, sending 01060000020088aa via 10.0.0.7:5000, read buffer empty,
request: id 1, write fc 6 h0, len 1, value 0200, master device Relais, reading Relay.1 (set Relay.1), queued 0.01 secs ago,
response: no id, no fcode
2023.04.19 00:26:41 5: Relais: Send called from ProcessRequestQueue
2023.04.19 00:26:41 5: DevIo_SimpleWrite Relais: 01060000020088aa
2023.04.19 00:26:41 5: Relais: ReadAnswer called from SetLDFn
2023.04.19 00:26:41 5: Relais: ReadAnswer remaining timeout is 1.98928594589233
2023.04.19 00:26:41 5: Relais: ReadAnswer got: 01060000000388aa01
2023.04.19 00:26:41 5: Relais: ParseFrameStart called from ReadAnswer protocol RTU expecting id 1
2023.04.19 00:26:41 4: Relais: ParseFrameStart (RTU, master) extracted id 1, fCode 6 and potential data 0000000388
2023.04.19 00:26:41 5: Relais: HandleResponse called from ReadAnswer
2023.04.19 00:26:41 5: Relais: ParseResponse called from HandleResponse
2023.04.19 00:26:41 4: Relais: HandleResponse error, current frame / read buffer: 01060000000388aa01, id 1, fCode 6,
request: id 1, write fc 6 h0, len 1, value 0200, master device Relais, reading Relay.1 (set Relay.1), queued 0.02 secs ago, sent 0.02 secs ago,
response: id 1, fc 6, len 1, values 000388, error: Invalid checksum 88aa received. Calculated c9cb
2023.04.19 00:26:41 5: Relais: ResetExpect for HandleResponse from response to idle
2023.04.19 00:26:41 5: Relais: DropFrame called from ReadAnswer - drop 01060000000388aa01


Ohne bswapRegs waren die beiden Register Bytes noch vertauscht.
Jetzt bekomme ich aber im "Send" exakt den erwarten HEX Wert wenn ich ein set Relay.1 on/off absetze.
Nur am Relais tut sich nix, der entspr. Eingang wird nicht geschaltet.

An dem Punkt komme ich nicht mehr weiter und benötige eure Hilfe.

Gruss Jupp

juppy_jupp

Hallo,

es geht !

Ich hab auf FHEM Seite auf TCP umgestellt und irgendwie ist auch die Konfiguration des Relais nicht ganz einfach. Zum Wirksamwerden muss man es nach jeder Änderung kurz von der Stromversorgung trennen.

Hier die nun laufende FHEM Konfig. Ich hab bis dato zum Testen erstmal nur 4 Relaisausgänge definiert.
Die Readings werden auch automatisch nach der ersten Aktivität angelegt. Die Konfig auf dem Relais ist unverändert wie im Screenshot vom ersten Thread.

defmod Relais ModbusAttr 1 60 10.0.0.7:5000 TCP
attr Relais obj-h0-bswapRegs 1
attr Relais obj-h0-map 1:on, 2:off, 3:toggle, 4:excl, 5:1s
attr Relais obj-h0-reading Relay.1
attr Relais obj-h0-set 1
attr Relais obj-h0-showGet 1
attr Relais obj-h1-bswapRegs 1
attr Relais obj-h1-map 1:on, 2:off, 3:toggle
attr Relais obj-h1-reading Relay.2
attr Relais obj-h1-set 1
attr Relais obj-h1-showGet 1
attr Relais obj-h2-bswapRegs 1
attr Relais obj-h2-map 1:on, 2:off, 3:toggle
attr Relais obj-h2-reading Relay.3
attr Relais obj-h2-set 1
attr Relais obj-h2-showGet 1
attr Relais obj-h3-bswapRegs 1
attr Relais obj-h3-map 1:on, 2:off, 3:toggle
attr Relais obj-h3-reading Relay.4
attr Relais obj-h3-set 1
attr Relais obj-h3-showGet 1
attr Relais room System

Die veschiedenen map Werte des ersten Relais bedeuten folgendes:
1:on      Relais an
2:off     Relais aus
3:toggle  Relais umschalten
4:excl    Diese Relais an, alle anderen aus
5:1s      Relais für 1 sec. an

Im Netz hab ich dazu weitere Infos gefunden:
01 06 00 01  01 XX  XX XX - Relais1 EIN
01 06 00 01  02 XX  XX XX - Relais1 AUS
01 06 00 01  03 XX  XX XX - Relais1 TOGGLE
01 06 00 01  04 XX  XX XX - Relais1 EIN und alle anderen AUS
01 06 00 01  05 XX  XX XX - Relais1 1s IMPULS und alle anderen AUS
01 06 00 01  06 00  DB AA - Relais1 sehr kurzer IMPULS und alle anderen AUS
01 06 00 01  06 01  1A 6A - Relais1 1s  IMPULS und alle anderen AUS
01 06 00 01  06 0A  5B AD - Relais1 10s IMPULS und alle anderen AUS

Wie ich die drei verbleibenen möglichen Stati noch definieren kann, muss ich noch rausfinden.

Gruss Jupp