NEWS
Einbindung Stromzähler über RS485 Modbus
-
@ining sagte in Einbindung Stromzähler über RS485 Modbus:
@wendy2702
Der USB Stick unterstützt leider kein Windows 10.Ich klinke mich mal hier kurz mit ein, da ich den Zähler leider auch nicht im Modbus Adpater zum laufen bekomme.
Die Sticks funktionieren einwandfrei unter Win 10, ich hab ihn so wie Angeschlossen vom Raspberry abgezogen, an den Laptop angesteckt und konnte mittels der Hersteller Software Daten lesen und schreiben.
Also ist auch die Verdrahtung A/B richtig. -
Hallo,
Vielleicht hilft Euch dies: Ich kämpfe auch gerade mit dem B+G Tech DRT428M (bzw. ich DRT428M-3), das Auslesen einiger Register auf dem Raspberry Pi klappt korrekt (int und float ). Mit iobroker kenne ich mich aber nicht aus.
USB Adapter (QinHeng Electronics CH340 serial converter) funktioniert problemlos
- unter MS Windows 10 am PC mit der B+G Herstellersoftware (wie oben schon verlinkt/beschrieben)
- Auf dem Paspberry Pi 4 B am USB Port mit modbus rtu über python minimalmodbus.
Codebeispiel unten.
Ich musste aber in der Initialisierung die Timings/Konfiguration anpassen, damit das stabil läuft. Aktuell so:
#!/usr/bin/env python3 # see https://minimalmodbus.readthedocs.io/en/stable/apiminimalmodbus.html#minimalmodbus.MODE_RTU import serial import minimalmodbus instrument = minimalmodbus.Instrument(port='/dev/ttyUSB0', slaveaddress=1, mode=minimalmodbus.MODE_RTU, close_port_after_each_call=True, debug=False) instrument.serial.baudrate = 9600 # Baud instrument.serial.parity = serial.PARITY_EVEN instrument.serial.bytesize = 8 instrument.serial.stopbits = 1 instrument.clear_buffers_before_each_transaction = True # False instrument.serial.timeout = 0.30 # 0.05 seconds is too fast try: ## Read value print('--- read values: ---') print('serial number: ', instrument.read_register(registeraddress=int(0x0000), number_of_decimals=0)) print('meter ID: ', instrument.read_register(registeraddress=int(0x0002), number_of_decimals=0)) print('baud rate [bps] ', instrument.read_register(registeraddress=int(0x0003), number_of_decimals=0)) print('CT Rate: ', instrument.read_register(registeraddress=int(0x0008), number_of_decimals=0)) print('Combined Code: ', instrument.read_register(registeraddress=int(0x000B), number_of_decimals=0)) print('Cycletime: [s] ', instrument.read_register(registeraddress=int(0x000D), number_of_decimals=0)) print('SW version: ', instrument.read_float( registeraddress=int(0x0004), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('HW version: ', instrument.read_float( registeraddress=int(0x0006), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('L1 Voltage [V] ', instrument.read_float( registeraddress=int(0x000E), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('L2 Voltage [V] ', instrument.read_float( registeraddress=int(0x0010), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('L3 Voltage [V] ', instrument.read_float( registeraddress=int(0x0012), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('grid frequency [Hz] ', instrument.read_float( registeraddress=int(0x0014), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('L1 Current [A] ', instrument.read_float( registeraddress=int(0x0016), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('L2 Current [A] ', instrument.read_float( registeraddress=int(0x0018), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('L3 Current [A] ', instrument.read_float( registeraddress=int(0x001A), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('TOTAL Active Power[kW] ', instrument.read_float( registeraddress=int(0x001C), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print(' L1 Active Power [kW] ', instrument.read_float( registeraddress=int(0x001E), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print(' L2 Active Power [kW] ', instrument.read_float( registeraddress=int(0x0020), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print(' L3 Active Power [kW] ', instrument.read_float( registeraddress=int(0x0022), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print('TOTAL Active Energy [kWh]', instrument.read_float( registeraddress=int(0x0100), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print(' L1 Total Active Energy[kWh]', instrument.read_float( registeraddress=int(0x0102), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print(' L2 Total Active Energy[kWh]', instrument.read_float( registeraddress=int(0x0104), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) print(' L3 Total Active Energy[kWh]', instrument.read_float( registeraddress=int(0x0106), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) ) except IOError as e: print('ERROR: Failed to read from instrument:\n',e) instrument.serial.close()
Ausgabe mit korrekten Werten:
serial number: 0
meter ID: 1
baud rate [bps] 9600
CT Rate: 0
Combined Code: 9
Cycletime: [s ] 2
SW version: 1.0199999809265137
HW version: 1.0
L1 Voltage [V] 226.3000030517578
L2 Voltage [V] 225.60000610351562
L3 Voltage [V] 227.8000030517578
grid frequency [Hz] 49.9900016784668
L1 Current [A] 0.8299999833106995
L2 Current [A] 8.329999923706055
L3 Current [A] 0.4099999964237213
TOTAL Active Power[kW] 1.972000002861023
L1 Active Power [kW] 0.0860000029206276
L2 Active Power [kW] 1.8480000495910645
L3 Active Power [kW] 0.039000000804662704
TOTAL Active Energy [kWh] 42.720001220703125
L1 Total Active Energy[kWh] 9.989999771118164
L2 Total Active Energy[kWh] 14.619999885559082
L3 Total Active Energy[kWh] 18.110000610351562 -
@j-privat sagte in Einbindung Stromzähler über RS485 Modbus:
', instrument.read_float( registeraddress=int(0x0004), number_of_registers=2, functioncode=3, byteorder=minimalmodbus.BYTEORDER_BIG) )
Basierend auf dieser Zeile könnte man im Modbus Adapter mal ein Holding Register eintragen.
Die Kommunikations Einstellungen müssen natürlich zu denen des Zählers passen.
Dann das loggen für die Instanz mal auf Debug stellen ergebnis nach Adapterstart posten.
-
Danke an @j-privat @wendy2702 Ihr habt mich, wenn auch auf ein paar Umwegen auf den richtigen Weg gebracht. Aktuell läuft der Adapter seit einer Stunde stabil.
Ich hatte vorher den Haken bei "Aliase Benutzen" drin, da ich das beim RelTech RD2D auch so gemacht habe, dann passen aber natürlich nicht die Register Adressen.
Die Register Adressen habe ich aus der Herstellerbeschreibung und die HEX einfach mit dem Windows Taschenrechner auf dezimal umgestellt.
Wichtig ist noch das der Haken bei Zyklisch schreiben bei den Registern draußen ist, sonst ließt der Adapter einmal die Werte aus und geht dann in Störung.Das einzige was mir noch Rätsel aufgibt: In der Herstellerbeschreibung ist die Länge immer mit "4" Angegeben, das passt zum einen aber ja nicht auf die Registernummer ( Beispw. L1 zu L2 und L3) und zum anderen geht es ja mit der Float Einstellung auf eine Länge von 2.
-
@exonder Cool und Danke für das Teilen der Informationen!!!
Kommen denn die Werte für die Register mit den "längen"?
Wenn ja würde ich sagen: Fehler in der Hersteller Doku
-
Hallo,
ich versuche den Zähler auch gerade einzubinden.
Tasmota - Serial to TCP BridgeAnders, als in der Doku und in dem mitglieferten Testprogramm, erwartet der Zähler in der Kommunikationseinstellung nicht 1 sondern 2 Stopbits.
Das konnte ich sogar mit einem Terminalprogramm (HTerm) reproduzieren.Gruß
Axel -
Hi,
ich habe mal eine Frage zur Slave ID und zur Geräte ID.
Da kann man doch sicherlich nicht irgendwelche Werte eintragen. Wie kommt man denn an diese Parameter ran ?Ich habe die Kommunkation soweit alles durch und kommt derzeit bis INing wie er eine Kommikation Adresse 40004 aufbaut. Das ist aber wohl nur die Kommunikation mit dem RS484 zu USB Konverter.
Den Konverter finden übrigens mein Raspberry PI. Mit lsusb bekomme ich folgenden informationen:
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 006: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter Bus 001 Device 004: ID 05e3:0727 Genesys Logic, Inc. microSD Reader/Writer Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Andreas
-
@ahermann86 said in Einbindung Stromzähler über RS485 Modbus:
Anders, als in der Doku und in dem mitglieferten Testprogramm, erwartet der Zähler in der Kommunikationseinstellung nicht 1 sondern 2 Stopbits.
Das konnte ich sogar mit einem Terminalprogramm (HTerm) reproduzieren.Bin verwirrt - in der Doku steht „11bits data (1 start bit, 8 data bit, 1 even check bit, 1 stop bit)“ https://stromzähler.eu/media/pdf/1f/d7/ae/DRT428M-Serie_manual-register.pdf
Die Einstellungen im Modbus-Adapter lassen aber ein Setzen von Startbits nicht zu, so, wie ich das sehe.
Bei zwei Stoppbits wären wir dann zwar auf 11 Bits, aber die Inhalte wären quasi um ein Bit verschoben…?Da ich daran denke, mir auch einen DRT428-M2 zuzulegen, interessiert mich die Lösung meines Rätsels sehr!
-
@xenolog sagte in Einbindung Stromzähler über RS485 Modbus:
Da ich daran denke, mir auch einen DRT428-M2 zuzulegen, interessiert mich die Lösung meines Rätsels sehr!
Warum nicht die modbus-fähigen Varianten von SDM630 oder SDM72? Die funktionieren mit dem Modbus-Adapter. Den 630 habe ich hier im Probebetrieb, der SDM72 wurde von anderen Mitgliedern bestätigt, https://forum.iobroker.net/topic/55710/sdm120-sdm72-sdm630-modbus-rs485-stromzähler-w-lan-iobroker?_=1673211582837
-
@klassisch Danke für den Hinweis. Ich war bei Amazon auf einen „SDM630 Modbus v2“ für 99€ gestossen, bei dem in der Übersicht nur was von „Drei-Phasen-Elektro-Energiezähler“ stand, und direkt darunter war dann ein „SDM630Modbus“ ohne das „v2“ für 169€ aufgelistet, bei dem „digitaler Stromzähler Zweirichtungszähler“ stand. Bei dem Preisunterschied ging ich davon aus, dass der „v2“ keine, für einen Photovoltaiker wichtige, Zweirichtungszählung beherrscht. Und mich dann nicht weiter mit den SDM630 beschäftigt.
Und beim günstigeren SDM72-V2 habe ich mich auch nicht näher in die Materie vertieft, weil bei dem außer „Import, Export und Gesamt kWh + Tageszählwerk“ nichts angegeben war, was auf ein genaueres Logging schließen lässt.
Das kommt davon, wenn man bei Amazon nur die kurzen „Titel“ auf dem Handy liest, und nicht die komplette Artikelbeschreibung.
Dann stieß ich auf den DRT428M-2: Der beste Preis, und hat neben Modbus auch eine IR-Schnittstelle. Und da ich für meine wahrscheinlich defekten Hollys zwei VZ-Köpfe da habe, wäre eine Investition in zusätzliche Hardware nicht erforderlich.m, und es müsste nicht noch weitere Hardware in den Zählerkasten.
Der Modbus war bei den Hollys für mich nur deshalb auf dem Radar aufgetaucht, weil es mir am einfachsten schien, mich da dran anzuklemmen und künftige Defekte zu umschiffen. Und da sämtliche Stromzähler, die mir bisher in Sicherungskästen begegnet sind, viel Platz wegnahmen, und mir nicht klar war, wo meine eigenen zwei Zähler hinkommen sollten, habe ich die ausgezeichnete Idee, eigene Zähler zu verbauen, die komplett unter meiner Fuchtel stehen, gar nicht gehabt. -
@xenolog Ich habe hier den amazon B08X911LWF im Probebetrieb und der schnurrt mit dem Modbus Adapter "as a charm". Hat 99 EUR gekostet. Nennt sich "SDM630 Modbus v2 Drei-Phasen-Elektro-Energiezähler, 100 Ampere kWh DIN-Schienen-Leistungsmesser, Pulsmesser, Modbus RS485 RTU LCD-Display mit Hintergrundbeleuchtung, MID-zertifiziert/kalibriert "
Soll jetzt keine Werbung sein, nur eine Info. Von diesen Dingern gibt es mehrere FW Varianten. Eine arbeitet wohl direkt mit einem Chinesischen Wechselrichter zusammen und ist deshalb anders und teurer.
SDM72 habe ich selbst nicht. Kannst aber mal bei Interesse im anderen Thread nachfragen.
Zwei SDM120 an einer Modbus Leitung habe ich schon getestet, mehrere SDM630 bzw. 72 sollten aber auch gehen.
Die SDM630 können auf Modbus max 38400 Bd Datenrate. Die SDM72 anscheinend nur 9600. Wenn man also mehrere auf einen Bus legt und viele Daten auslesen möchte, könnten die 9600 schon etwas knapp werden. -
@klassisch sagte in Einbindung Stromzähler über RS485 Modbus:
Die SDM72 anscheinend nur 9600.
der Schein trügt.
9600 ist der Auslieferungszustand. Die höchste Geschwindigkeit ist 19200. -
@homoran sagte in Einbindung Stromzähler über RS485 Modbus:
9600 ist der Auslieferungszustand. Die höchste Geschwindigkeit ist 19200.
besser als 9600. Immerhin die doppelte Datenmenge. Dann kann es bald losgehen. Sowas wie Netzfrequenz braucht man ja nicht von jedem Zähler.
-
@klassisch sagte in Einbindung Stromzähler über RS485 Modbus:
Dann kann es bald losgehen.
jepp!
Hab die Zähler bekommen und heute an einem Netzkabel einphasig angeschlossen um die Adressen zu ändern.
Auf den RS 485 to USB warte ich noch.
Mal sehen ob der noch vor dem Elektriker kommt, dann teste ich die Verbindung auch erst einmal am Brett. -
@klassisch meine Zähler sind leider seit gestern beim Elektriker. Der will den neuen Zählerschrank in der Werkstatt vorbestücken.
jetzt wollte ich die Buskabel vorbereiten un hab gar keine Ahnung wo die aus dem Zähler unter der Abdeckung herausgeführt werden können.
Ist das wirklich nur der schmale Schlitz unter dem Scharnier.
Was nehmt ihr da als Kabel/Brücken?
0.5er Litze mit Aderendhülsen gehen da ja gar nicht durch.Und bei Patchkabel Cat xxx geht es auch nicht mit AE Hülsen.
Verkegekabel hab ich nur JYSTY -
@homoran Ja, beim SDM630 ist das der durchgängige Schlitz unter dem Scharnier. Der ist aber 3mm stark, lt. Meßschieber. Da sollten schon ordentliche Leitungen durchgehen.
Edit: Beim SDM630 sind "cage clamp (R)" artige Klemmen (Fahrstuhlklemme) drin. Da braucht es keine Aderendhülsen.
Bei SDM120 habe ich für die paar Meter 2*0,5mm² H03 VV-F 2x0,5 Flach-Mantelleitung, Schlauchleitung, genommen, wie sie als Zuleitung für kleine Leuchten verwendet wird. Ist zwar nicht verdrillt, aber bei den paar Metern hatte ich im Heizraum keine Probleme.
Und Mantelleitung deshalb, weil der Zähler in einer Unterverteilung ist, wo auch 230V drin sind (klar, aber in dem kleinen Kasten nicht infrastrukturell von der Niederspannung trennbar). Und da ist der Isolationsmantel noch mal eine Isolationsschicht.