[gelöst] ModbusSDM630M.pm Config für TCP

Begonnen von JO106, 05 November 2020, 11:58:55

Vorheriges Thema - Nächstes Thema

JO106

Hallo Community,
ich kämpfe mit dem Einbinden eines SDM630 Modbus V2 via TCP in FHEM.
Stand:
Zugriff über RS485 funktioniert (V1 im Auszug unten). Jetzt soll der Stromzähler aber woanders hin, wo zwar ein Raspi und LAN aber eben keine RS485 Verbindung vom FHEM-Server vorhanden ist.
Daher habe ich auf dem entfernten Raspi ein TCP/RS485 GW eingerichtet. Auch das funktioniert, d.h. ich kann es beispielsweise mit Tools wie modbuspoll abfragen, etwa:
modpoll -1 -r ${1:-73} -f -t 3:float pi4

pi4 ist dabei der DNS-Name des entfernten Raspi

In der fhem.cfg habe ich nun ein ModbusAttr (V2, V3) hierfür definiert, das auch Verbindung bekommt. Allerdings schaffe ich es nicht, dass das Modul ModbusSDM630M hierauf zugreift.


# V1 via RS485 - funktioniert prinzipiell
#define HA_Modbus_1 Modbus /dev/ttyUSB0@19200,8,E,1
#setuuid HA_Modbus_1 5f872fe2-f33f-d024-46f1-159d1b7573dc9139
#attr HA_Modbus_1 room Stromzähler

define SDM ModbusAttr 1 60 pi4:502 TCP # V2, V3
attr SDM room Stromzähler              # V2, V3

define HA_SDM630M_1 ModbusSDM630M 1 60
setuuid HA_SDM630M_1 5f872fe2-f33f-d024-dd89-26318bb2321ab1e6
# attr HA_SDM630M_1 userattr IODev # V1 und V3
# attr HA_SDM630M_1 IODev SDM # V3, der auch nicht geht
#attr HA_SDM630M_1 IODev HA_Modbus_1 # V1
attr HA_SDM630M_1 room Stromzähler


Hat irgendjemand eine Idee, was ich hier falsch mache? Oder kann ModbusSDM630 kein Modbus/TCP? Habe dazu nämlich nichts gefunden.

Nachtrag:
So sehen die Log-Einträge aus:

2020.11.05 12:00:19 3: HA_SDM630M_1: SetIODev found no usable physical modbus device
2020.11.05 12:00:19 3: HA_SDM630M_1: Notify / Init: no IODev for communication

StefanStrobel

#1
Hallo,

macht das Gateway denn eine Umsetzung von Modbus TCP auf Modbus RTU über RS485 oder macht es nur eine Umsetzung von Modbus RTU über TCP auf RTU über RS485?
Das ist ein großer Unterschied.

Gruss
    Stefan

JO106

Hallo Stefan,

ich denke ersteres:
● mbusd@ttyUSB0.service - Modbus TCP to Modbus RTU (RS-232/485) gateway.
   Loaded: loaded (/lib/systemd/system/mbusd@.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-11-05 08:31:07 CET; 8h ago

Wie gesagt, kann ich mit modpoll Werte direkt über die RS485-Schnittstelle (hängt natürlich an einem USB-RS485-Wandler) abfragen oder über das TCP-Gateway:
pi@pi4:~/bin $ modpoll -1 -r 73 -f -t 3:float /dev/ttyUSB0
modpoll 3.9 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2020 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC4
Slave configuration...: address = 1, start reference = 73, count = 1
Communication.........: /dev/ttyUSB0, 19200, 8, 1, even, t/o 1.00 s, poll rate 1000 ms
Data type.............: 32-bit float, input register table
Word swapping.........: Slave configured as big-endian float machine

-- Polling slave...
[73]: 12.136999
pi@pi4:~/bin $ modpoll -1 -r 73 -f -t 3:float pi4
modpoll 3.9 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2020 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: MODBUS/TCP, FC4
Slave configuration...: address = 1, start reference = 73, count = 1
Communication.........: pi4, port 502, t/o 1.00 s, poll rate 1000 ms
Data type.............: 32-bit float, input register table
Word swapping.........: Slave configured as big-endian float machine

-- Polling slave...
[73]: 12.136999
p

Wie geschrieben, fehlt mir irgendwie das Verständnis wie Modbus630M das Mapping auf dieses TCP-GW herstellt. Mein "HA_SDM630M_1" Device zeigt als Protokoll "RTU" an. Nicht TCP wie von mir erwartet.

StefanStrobel

Zitat
In der fhem.cfg habe ich nun ein ModbusAttr (V2, V3) hierfür definiert, das auch Verbindung bekommt. Allerdings schaffe ich es nicht, dass das Modul ModbusSDM630M hierauf zugreift.

Du benötigst kein ModbusAttr-Gerät, wenn Du das ModbusSDM630M-Modul verwendest. Beide können direkt per Modbus-TCP mit dem Gateway reden. Falls Du es über ModbusAttr machen möchtest, musst Du die einzelnen Register per Attribut definieren. Falls Du es über ein fertiges Geräte-Modul machen möchtest, dann sind darin die Register schon definiert, aber Du kannst genauso direkt per Modbus-TCP auf das Gateway zugreifen.

Die korrekte Syntax wäre so etwas wie

define Stromzaehler ModbusSDM630M 1 60 pi4:502 TCP


Gruss
   Stefan

JO106

Hallo Stefan,

Danke für das schnelle Feedback: Es kann so einfach sein. Mir fehlte da einfach die Info, dass man die TCP-Settings zum define des ModbusSDM630M hinzufügen kann.

Ohne die setuuid-, FileLog-, room-Attribut entries etc. ist damit nur eine einzige Zeile übrig geblieben, um alle zig Register des SDM630 lesen/auswerten zu können  :) :
define HA_SDM630M_1 ModbusSDM630M 1 60 pi4:502 TCP


vg
Jürgen