XY-MOD02 mit Waveshare RS485 to ETH

Begonnen von marc2, 16 März 2023, 23:59:00

Vorheriges Thema - Nächstes Thema

marc2

Moin zusammen!

Eigentlich ist mein Ziel, meinen WR mittels Modbus auszulesen. Da Modbus für mich aber neu ist, dachte ich, ich fange mal klein an. Habe mir einen Waveshare USB TO RS485 Adpater und eine billigen Sensor YX-MOD02 besorgt. Das hat auf Anhieb und wunderbar funktioniert. Als nächstes wollte ich den USB Adapter gegen den Waveshare RS485 to ETH austauschen. Hier bin ich nun leider hängen geblieben. Die Konfiguration sieht wie folgt aus:

define MM ModbusAttr 1 15 modbus-gw-wr:502 RTU
attr MM DbLogExclude .*
attr MM dev-h-defPoll 1
attr MM dev-i-defPoll 1
attr MM obj-h257-format %s
attr MM obj-h257-len 1
attr MM obj-h257-reading DeviceAddress
attr MM obj-h257-set 1
attr MM obj-h257-unpack n
attr MM obj-h258-format %s
attr MM obj-h258-len 1
attr MM obj-h258-reading BaudRate
attr MM obj-h258-set 1
attr MM obj-h258-unpack n
attr MM obj-h259-format %d
attr MM obj-h259-len 1
attr MM obj-h259-reading TempCorr
attr MM obj-h259-set 1
attr MM obj-h259-unpack s>
attr MM obj-h260-format %d
attr MM obj-h260-len 1
attr MM obj-h260-reading HumiCorr
attr MM obj-h260-set 1
attr MM obj-h260-unpack s>
attr MM obj-i1-expr $val/10
attr MM obj-i1-format %s
attr MM obj-i1-len 1
attr MM obj-i1-reading Temperature
attr MM obj-i1-unpack s>
attr MM obj-i2-expr $val/10
attr MM obj-i2-format %s
attr MM obj-i2-len 1
attr MM obj-i2-reading Humidity
attr MM obj-i2-unpack s>
attr MM room Arbeitszimmer
attr MM verbose 5
#   DEF        1 15 modbus-gw-wr:502 RTU
#   DeviceName modbus-gw-wr:502
#   EXPECT     response
#   FD         25
#   FUUID      6408fc2c-f33f-13a0-aeb3-9cca44a23335c304
#   IODev      MM
#   Interval   15
#   LASTOPEN   1679004206.44489
#   MODBUSID   1
#   MODE       master
#   MODULEVERSION Modbus 4.4.14 - 30.1.2023
#   NAME       MM
#   NOTIFYDEV  global
#   NR         1297
#   NTFY_ORDER 50-MM
#   PARTIAL   
#   PROTOCOL   RTU
#   STATE      opened
#   TCPConn    1
#   TIMEOUTS   1130
#   TYPE       ModbusAttr
#   devioLoglevel 3
#   eventCount 9437
#   nextOpenDelay 60
#   nextQueueRun 1679007032.44576
#   nextTimeout 1679007033.44361
#   FRAME:
#   QUEUE:
#     HASH(0x5655256fa9a0)
#     HASH(0x565524035250)
#     HASH(0x5655256e66c0)
#   READ:
#   READINGS:
#     2023-03-15 22:16:23   BaudRate        9600
#     2023-03-15 22:16:23   DeviceAddress   1
#     2023-03-15 22:16:23   HumiCorr        0
#     2023-03-15 22:16:23   Humidity        28.9
#     2023-03-15 22:16:23   TempCorr        0
#     2023-03-15 22:16:23   Temperature     25.2
#     2023-03-16 23:03:27   state           opened
#   REMEMBER:
#     lid        1
#     lname      MM
#     lrecv      1678914983.77976
#     lsend      1679007031.44573
#   REQUEST:
#     ADR        259
#     DBGINFO    getUpdate for TempCorr len 1
#     FCODE      3
#     FRAME      u�
#     LEN        1
#     MODBUSID   1
#     OPERATION  read
#     QUEUED     1679007027.4404
#     READING    TempCorr
#     SENT       1679007031.44361
#     TYPE       h
#     MASTERHASH:
#   defptr:
#     MM         1
#   gotReadings:
#     Humidity   28.9
#   helper:
#     bm:
#       CODE(0x565521b3a668):
#         cnt        5
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        16.03. 22:19:42
#         max        0.0020909309387207
#         tot        0.00612616539001465
#         mAr:
#           del
#           MM
#           disable
#       CODE(0x565521b466a0):
#         cnt        2
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        15.03. 22:52:37
#         max        0.000503063201904297
#         tot        0.000867128372192383
#         mAr:
#           HASH(0x565522320480)
#           MM ModbusAttr 1 5 modbus-gw-wr:502 RTU
#       CODE(0x565521b795d8):
#         cnt        26
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        16.03. 22:19:33
#         max        1.00135803222656e-05
#         tot        0.000210046768188477
#         mAr:
#           HASH(0x565522320480)
#           MM
#           ?
#       CODE(0x565521b7a8c0):
#         cnt        9641
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        16.03. 22:37:19
#         max        0.00157999992370605
#         tot        0.213183879852295
#         mAr:
#           HASH(0x565522320480)
#           MM
#           reconnect
#       CODE(0x565521b80250):
#         cnt        28
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        16.03. 22:52:41
#         max        0.00152087211608887
#         tot        0.00226902961730957
#         mAr:
#           HASH(0x565522320480)
#           HASH(0x56551a2bc0d0)
#       CODE(0x565521b83e20):
#         cnt        2829
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        15.03. 22:57:22
#         max        0.00208711624145508
#         tot        0.249608516693115
#         mAr:
#           HASH(0x565522320480)
#       CODE(0x565521b859c0):
#         cnt        15
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        15.03. 23:05:20
#         max        0.00278806686401367
#         tot        0.0330369472503662
#         mAr:
#           HASH(0x565522320480)
#   hmccu:
#   lastRead:
#     h257       1678914983.15853
#     h258       1678914983.28184
#     h259       1678914983.40504
#     h260       1678914983.52971
#     i1         1678914983.65525
#     i2         1678914983.78055
#
setstate MM opened
setstate MM 2023-03-15 22:16:23 BaudRate 9600
setstate MM 2023-03-15 22:16:23 DeviceAddress 1
setstate MM 2023-03-15 22:16:23 HumiCorr 0
setstate MM 2023-03-15 22:16:23 Humidity 28.9
setstate MM 2023-03-15 22:16:23 TempCorr 0
setstate MM 2023-03-15 22:16:23 Temperature 25.2
setstate MM 2023-03-16 23:03:27 state opened



Das Gateway ist soweit ich das beurteilen kann richtig konfiguriert (wobei die Anleitung unterirdisch ist). Die Register sind definitiv korrekt, denn mit dem USB Adapter hat alles geklappt. Die letzten Werte der Readings stammen auch noch vom USB Adapter. Außer timeouts bekomme ich vom Waveshare aber leider nichts zurück:


2023.03.16 23:52:46 5: MM: StartQueueTimer called from ResponseTimeout sets internal timer to process queue in 0.000 seconds
2023.03.16 23:52:46 5: MM: ProcessRequestQueue called from apptime_getTiming as queue:MM, qlen 4, request: request: id 1, read fc 3 h259, len 1, master device MM, reading TempCorr (getUpdate for TempCorr len 1), queued 4.01 secs ago
2023.03.16 23:52:46 5: MM: checkDelays commDelay, last communication with same device was 92182.676 secs ago, required delay is 0.1
2023.03.16 23:52:46 5: MM: checkDelays sendDelay, last send to same device was 2.000 secs ago, required delay is 0.1
2023.03.16 23:52:46 5: MM: checkDelays busDelayRead, last activity on bus was 92182.676 secs ago, required delay is 0
2023.03.16 23:52:46 5: MM: checkDelays clientSwitchDelay is not relevant
2023.03.16 23:52:46 4: MM: ProcessRequestQueue (V4.4.14 - 30.1.2023) qlen 4, sending 01030103000175f6 via modbus-gw-wr:502, read buffer empty,
request: id 1, read fc 3 h259, len 1, master device MM, reading TempCorr (getUpdate for TempCorr len 1), queued 4.01 secs ago
2023.03.16 23:52:46 5: MM: Send called from ProcessRequestQueue
2023.03.16 23:52:46 5: DevIo_SimpleWrite MM: 01030103000175f6
2023.03.16 23:52:46 5: MM: StartQueueTimer called from ProcessRequestQueue sets internal timer to process queue in 1.000 seconds
2023.03.16 23:52:47 5: MM: ProcessRequestQueue called from apptime_getTiming as queue:MM, qlen 3, request: request: id 1, read fc 3 h260, len 1, master device MM, reading HumiCorr (getUpdate for HumiCorr len 1), queued 5.01 secs ago
2023.03.16 23:52:47 5: MM: ProcessRequestQueue will return, Fhem is still waiting for response, read buffer empty,


Ich habe zu ähnlichen Themen zwar schon einiges gelesen. So richtig schlau bin ich allerding noch nicht daraus geworden Vielen Dank schon einmal!

VG, Marc

Aurel_B

#1
Diesen spezifischen Waveshare Adapter kenne ich leider nicht, habe die USB-RS485 Industrial Adapter ohne Probleme im Einsatz und ein Relais Board. Dieses hat eine sehr komische Registerdefinition und ja, die Anleitungen sind nicht wahnsinnig hilfreich.
Ein paar Ideen: ich nehme an, netzwerktechnisch läuft alles? Er reagiert auf ping und so? Welchen Adapter hast du denn genau? Weil beim "RS485 to Ethernet" steht, dass er TCP Modbus nicht unterstützt https://www.waveshare.com/wiki/RS485_TO_ETH. Hast du mal versucht, den Adapter mit QModMaster https://sourceforge.net/projects/qmodmaster/ anzusprechen?

Edit: ich habe 3 von diesen hier im Einsatz: https://www.waveshare.com/product/iot-communication/wired-comm-converter/usb-to-rs232-uart-fifo/usb-to-rs232-485-ttl.htm Funktionieren seit >1 Jahr ohne Probleme. Sie haben auch eine eindeutige USB Device ID und lassen sich so unabhängig vom USB Port ansprechen (/dev/serial/by-id ).

marc2

Hi!

Naja mit dem USB Adapter von Waveshare hat es ja auf Anhieb funktioniert. Den habe ich jetzt übrigens mal als passiven Listerner mit auf die RTU Strecke gehängt und war total verwundert, dass da kein einziger Frame zu sehen war. Und dann war mir auch plötzlich klar warum, der Fehler steht schon in der ersten Zeile:

define MM ModbusAttr 1 15 modbus-gw-wr:502 RTU

Da muss natürlich TCP stehen, denn die RTU Umsetzung macht ja der Waveshare. Kaum geändert, schon kommen alle Readings rein gepurzelt  ;)

Das Thema ist also geöst!

VG,Marc