Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Einbindung von Geräten
    5. Einbindung Stromzähler über RS485 Modbus

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Einbindung Stromzähler über RS485 Modbus

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      j privat @Exonder last edited by j privat

      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

      1. unter MS Windows 10 am PC mit der B+G Herstellersoftware (wie oben schon verlinkt/beschrieben)
      2. 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

      wendy2702 1 Reply Last reply Reply Quote 1
      • wendy2702
        wendy2702 @j privat last edited by

        @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.

        9645605d-ce3b-47f4-ad81-46325b01c9c4-grafik.png

        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.

        E 1 Reply Last reply Reply Quote 1
        • E
          Exonder @wendy2702 last edited by

          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.

          Modbus Eisntellungen.png Modbus Register.png

          wendy2702 R 2 Replies Last reply Reply Quote 0
          • wendy2702
            wendy2702 @Exonder last edited by

            @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

            1 Reply Last reply Reply Quote 0
            • A
              ahermann86 last edited by

              Hallo,

              ich versuche den Zähler auch gerade einzubinden.
              Tasmota - Serial to TCP Bridge

              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.

              Gruß
              Axel

              Xenolog 1 Reply Last reply Reply Quote 1
              • R
                RandyAndy @Exonder last edited by RandyAndy

                @exonder

                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

                1 Reply Last reply Reply Quote 0
                • Xenolog
                  Xenolog @ahermann86 last edited by

                  @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!

                  K 1 Reply Last reply Reply Quote 0
                  • K
                    klassisch Most Active @Xenolog last edited by

                    @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

                    Xenolog 1 Reply Last reply Reply Quote 0
                    • Xenolog
                      Xenolog @klassisch last edited by Xenolog

                      @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.

                      K 1 Reply Last reply Reply Quote 0
                      • K
                        klassisch Most Active @Xenolog last edited by

                        @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.

                        Homoran 1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators @klassisch last edited by

                          @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.

                          K 1 Reply Last reply Reply Quote 2
                          • K
                            klassisch Most Active @Homoran last edited by

                            @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.

                            Homoran 2 Replies Last reply Reply Quote 1
                            • Homoran
                              Homoran Global Moderator Administrators @klassisch last edited by

                              @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.

                              1 Reply Last reply Reply Quote 1
                              • Homoran
                                Homoran Global Moderator Administrators @klassisch last edited by

                                @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

                                K 1 Reply Last reply Reply Quote -1
                                • K
                                  klassisch Most Active @Homoran last edited by klassisch

                                  @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.

                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  926
                                  Online

                                  31.7k
                                  Users

                                  79.7k
                                  Topics

                                  1.3m
                                  Posts

                                  10
                                  39
                                  6054
                                  Loading More Posts
                                  • Oldest to Newest
                                  • Newest to Oldest
                                  • Most Votes
                                  Reply
                                  • Reply as topic
                                  Log in to reply
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                  The ioBroker Community 2014-2023
                                  logo