Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. j privat

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    J
    • Profile
    • Following 0
    • Followers 0
    • Topics 0
    • Posts 1
    • Best 1
    • Groups 0

    j privat

    @j privat

    1
    Reputation
    3
    Profile views
    1
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    j privat Follow

    Best posts made by j privat

    • RE: Einbindung Stromzähler über RS485 Modbus

      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

      posted in Einbindung von Geräten
      J
      j privat

    Latest posts made by j privat

    • RE: Einbindung Stromzähler über RS485 Modbus

      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

      posted in Einbindung von Geräten
      J
      j privat
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo