Neue Versionen und Support zum Modbus-Modul

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

Vorheriges Thema - Nächstes Thema

Tom_S

so, erstmal danke an alle die sich hier Gedanken gemacht haben. Das sniffen war der entscheidende Tip.

hallo Stefan,

ja genau so ist es. Das Testprogramm fragt nur Unit identifier 1 ab. So habe ich das auch gesehen. Die Zähler werden nur angezeigt wenn sie ID1 und ID2 haben. Die Software im Gateway setzt das um und setzt die Register mit einem Offset von 100 hintereinander.
Darum waren auch mit einem Zähler die Werte der Register > 100 immer 0 oder zeigten Unsinn.
Workaround:
Entweder anderes Gateway kaufen oder ein Modul auf Basis des SDM630M Moduls bauen, das beide Zähler ausgibt.
Ich werde mal zweites angehen. Das ist denke ich schnell gemacht, und ich komme an alle Daten die ich benötige ran.
Mir war wichtig ob ich mit meiner define überhaupt richtig liege. 

Danke noch mal
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

Tom_S

#256
@Wzut

möchte jetzt keinen Link posten. Schau mal in der Bucht nach "Gateway Zähler 2x SDM630 Modbus TCP"

LG
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

Wzut

OK, gefunden und gibt es sogar als 4 x für meine SDM72D-M
Was ich aber jetzt nicht verstehe warum du deines nicht nutzen kannst.
Ist denn die Registerabfrage mit dem +100 Offset nicht möglich ? 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Tom_S

Doch das funktioniert. Habe das SDM630M Modul umgeschrieben. Hat jetzt alle Register zwei mal. Erstmal o.K.
Aber warum der Entwickler dieses Gateway das so umsetzt ist mir nicht klar.
Und man kommt nicht an die Register > 100 ran da 101 dem 2. Zähler gehört. Wenn du zB U L1-L2 brauchst hast du keine Möglichkeit
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

StefanStrobel

Als Gateway käme übrigens auch ein Pi mit Fhem in Frage.
Das Modbus-Modul kann seit einer Weile auch Relay sein.
Allerdings habe ich dabei die Id bisher auch nicht ausgewertet.
Das könnte man aber erweitern.
Bisher müsste man für jeden nachgelagerten Slave ein eigens Relay Fhem-Device definieren.

Gruß
   Stefan

Guzzi-Charlie

Hallo,

ich benötige mal etwas Hilfe.

Ich habe aktuell 3 Modbus-Hutschienenzähler (XTM100A) mit einem RS485-USB Adapter über das Modbus-Modul und über Rogers SDM220M-Modul eingebunden. Das SDM220M-Modul habe ich an die Register meiner Zähler angepaßt. Das läuft auch alles wunderbar.

Jetzt möchte ich 4 weitere Zähler die sich an meiner 2. PV-Anlage im Nachbarhaus befinden auch anbinden. Da die gleiche Konfi mit RS485-USB Adapter wegen der Entfernung nicht geht soll die Anbindung hier über Ethernet erfolgen. Das Netzwerk ist dort schon vorhanden. Dafür habe ich mir einen RS485-TCP Adapter besorgt. Was ich bisher aber noch nicht verstanden habe, bzw. nicht hinbekommen habe ist die Einbindung dieses Adapters.

Muß ich den Adapter auch als I/O-Device für die eigentlichen SDM220M-Module anlegen und wie wäre die richtige Syntax, oder brauche ich das gar nicht und kann die Zähler direkt mit dem SDM220M-Modul ansprechen (Syntax?)? Was ich auch noch nicht verstanden habe ist: Muß ich das Device nun als RTU, oder als TCP definieren.

Wie gesagt: über USB funktionieren die SDM220M-Module perfekt. Was mir fehlt ist nur die Einbindung des RS485-TCP Gateways. Das bekomme ich nicht gebacken.

Wäre super wenn mich Jemand dabei unterstützen könnte.

Gruß
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

Tom_S

welches Gateway hast du denn. Kannst du da nähere Angaben machen?
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

Guzzi-Charlie

Hallo,

ja natürlich. Das ist ein USR-TCP232-304 (siehe Foto).

Ich denke die HW wird nicht das Problem sein. Mir geht es hauptsächlich um das Verständnis ob ich nun dafür ein eigenes I/O-device (mit modbus.pm) anlegen muß und wie die richtige Syntax wäre.
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

Tom_S

Ich habe nur gefragt weil es spezielle Module für die Zähler gibt. Ich habe so eins für zwei SDM630.
Bei deinem müsste doch

defmod <Name> ModbusAttr 1 180 <IP>:502 TCP

die Werte des ersten Zähler bringen. Die IP stellst du am Gateway ein und den Zähler auf die ModbusID 1.
Wenn das funktioniert dann kannst du die weiteren Zähler genauso einbinden. Mit anderer ModbusID natürlich. So habe ich das verstanden. Wenn es geht bitte hier mitteilen.

Gruß Tom S.
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

Guzzi-Charlie

Leider funktioniert das so einfach eben nicht. Damit kann ich keine Verbindung herstellen.

Wie kommst Du auf den Port "502"? ist das nur ein Beispiel? in meinem Gateway steht als

  • Remote Port Number:8234 (diesen Port)
  • Local Port Number:8233

Das habe ich auch beim Anlegen eingetragen.

Was ich auch immer noch nicht verstehe ist "TCP" oder "RTU". Die Schnittstelle meiner Zähler ist definitv Modbus RTU und nicht Modbus TCP. Was ich hier machen will ist doch Modbus RTU über TCP.

Und nochmal zu meiner Eingangsfrage:

  • Benötige ich das "Modbus.pm"-Modul als I/O-Device, oder
  • kann ich mich mit dem "ModbusAttr" direkt mit den Modbuszählern (über das TCP-Gateway) verbinden?


Gruß
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

Tom_S

Das ModbusTCP greift auf das Modbus.pm Modul zu. Der Port 502 ist in meinem Gateway und auch im Wechselrichter für ModbusTCP eingestellt. Er ist als Standard für ModbusTCP unter den know well Ports reserviert. In deinem Fall sollte aber auch der 8233 gehen.
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

StefanStrobel

Hallo,

man kann auch RTU über TCP machen. Dann gibt man beim Define nach der Adresse und dem Port statt TCP einfach RTU ein. Trotzdem benötigt man kein zusätzliches IO-Device vom Typ "Modbus" wie bei seriellen Verbindungen.

Wenn es gar nicht klappt, kann man auch einen weiteren Pi mit Fhem als Modbus-TCP zu RTU Gateway nehmen.

Gruss
   Stefan

Guzzi-Charlie

Hallo Stefan,

vielen Dank für die Info.

Ich bin inzwischen auch etwas weiter gekommen. Ich hatte erstmal mit Windows experimentiert. Mit dem Tool "Modbus Master" habe ich dann letztlich eine Verbindung zum Zähler (über den TCP-RS485 Adapter) per "RTU over TCP-Protokoll" herstellen können. Das Tool sagt "Modbus_Device_Ok" und ich erhalte Werte, obwohl die Werte selbst mir suspekt sind.

Auf Basis der experimentell ermittelten Einstellungen habe ich dann in FHEM das ModbusAttr Gerät angelegt.
defmod XTM100A_21a ModbusAttr 48 30 192.168.178.126:502 RTU
attr XTM100A_21a userattr obj-h0-reading obj-h18-reading obj-h256-reading obj-h8-reading
attr XTM100A_21a obj-h0-reading voltage
attr XTM100A_21a obj-h18-reading power
attr XTM100A_21a obj-h256-reading total_power
attr XTM100A_21a obj-h8-reading current
attr XTM100A_21a room Test

setstate XTM100A_21a opened
setstate XTM100A_21a 2019-03-15 18:26:01 state opened


Das Gerät geht in den state "opened". Allerdings erhalte ich keine readings.

Wie ist das denn mit der Definition der holding Register? Setzt das Modul das "h" automatisch in den richtigen Funktionscode "04" um?

Woran könnte es liegen das ich keine readings erhalte?
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

StefanStrobel

Hallo,

Function Code 4 liest Input Register, keine Holding Register.
Warum nimmst Du nicht das SDM220 Modul? Da sind dann die Register, Datentypen etc. schon richtig hinterlegt.

Wenn etwas nicht klappt, sollte man verbose für das betroffene Gerät auf 5 setzen und das Log verfolgen.

Gruß
    Stefan

Guzzi-Charlie

Oh Mann, da hast Du natürlich Recht. Ich weiß nicht wieso ich das "h" benutzt habe. War mir eigentlich klar, daß es um Input-Register geht. Vielleicht weil in den Beispielen auch überall nur das "h" verwendet wird.

Das SDM220M-Modul kann ich ja nicht nehmen, da das doch nur für die serielle Anbindung funktioniert, oder hab ich da was falsch verstanden? Ich brauche ja RTU over TCP.

Ich habe ja 3 Zähler mit serieller Anbindung (über RS485-USB Adapter) in Betrieb. Das funktioniert einwandfrei. Ich habe allerdings nicht das Original-SSDM220M sondern habe es auf meine Zähler angepaßt (z.B. Register-Adressen), bzw. alles rausgeschmissen was meine Zähler nicht an Daten zur Verfügung stellen.

Ich versuche es Morgen nochmal mit der Definition als Input-Register. Das Decode-Attribut muß ich aber nicht benutzen, oder?
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2