Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Abfrage ORNO OR-WE-516/ 517 Modbus, evtl. Script vorhanden?

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    Abfrage ORNO OR-WE-516/ 517 Modbus, evtl. Script vorhanden?

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      charakterkopf last edited by charakterkopf

      Hallo IOBroker Forum,

      hat zufällig jemand die oben genannten Zähler bereits per Modbus angeschlossen? Habe über die Suche nichts gefunden.

      Mein Plan ist per Raspberry und mqtt die Daten an Iobroker zusenden. Gibt es hierfür bereits Erfahrungen bzw. fertige Python Scripts? Möchte vermeiden Stundenlang an der Modbus Abfrage zu Basteln. Die Herstellerdoku scheint auch Fehler zu behalten.

      Das fertige Script für MQTT poste ich dann anschliessend hier.

      Danke und Gruß
      charakterkopf

      TbsJah 1 Reply Last reply Reply Quote 1
      • C
        charakterkopf last edited by charakterkopf

        Habe mich durch den Modbus gewühlt und selbst einen Ersten Versuch unternommen:

        Ihr benötigt neben dem Zähler ca 60€ nur einen USB RS485 Konverter von Ebay. Der Bus ist eigentlich noch mit 2 x 120 Ohm Widerständen abzuschliessen, klappt bei mir auch ohne.

        Bitte die Importe im Script beachten:

        import minimalmodbus
        import serial
        import time
        import struct
        import binascii
        import paho.mqtt.client as paho
        

        Ziel ist das Script regelmässig die Daten auslesen und per MQTT Bereitstellen zu lassen.

        Die Registernummer sind in Hexadezimal aus der ORNO Software ersichtlich (s. Herstellerseite).

        1 Reply Last reply Reply Quote 0
        • C
          charakterkopf last edited by charakterkopf

          So nachdem der Zähler installiert ist (Fachmann!!), hier das Finale Script.IMG_0321.JPG

          Die Sendefrequenz kann eingestellt werden über die Sleep Funktion am Ende (Hier alle 15 Sekunden)

          #!/usr/bin/env python3
          
          import minimalmodbus
          import serial
          import time
          import struct
          import binascii
          import paho.mqtt.client as paho
          from time import gmtime, strftime
          
          def umwandeln_ieee(Wert):  #Umwandlung Array of int ( 4 byte) in float nach IEEE 754
              Wert2=str(hex(Wert))
              Wert2=Wert2.replace('0x', '')
              if Wert2=='0':
                 Wert2='00000000'
              Wert3=struct.unpack('>f', binascii.unhexlify(Wert2))[0]
             #Wert3= round(Wert3,3)
              return (Wert3)
          
          #Hilfvariable im bei Auslesefehler nicht zu senden
          go=True
          
          #mqtt  Config Daten hier Eintragen
          mqtt_username=""
          mqtt_password=""
          mqtt_server="192.168.0.2"
          mqtt_port=1885
          mqtt_subscribe="/Zaehler"
          
          def on_subscribe(client, userdata, mid, granted_qos):
             print("Gesendet!")
          
          def on_message(client, userdata, msg):
             print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
          
          client = paho.Client(client_id="Zaehler", clean_session=True, userdata=None, protocol=paho.MQTTv31)
          client.on_subscribe = on_subscribe
          client.on_message = on_message
          client.username_pw_set(mqtt_username, mqtt_password)
          client.connect(mqtt_server, mqtt_port,60)
          client.subscribe(mqtt_subscribe, qos=1)
          
          #Adapter für Modbus Anlegen 
          smartmeter = minimalmodbus.Instrument('/dev/ttyUSB0', 1,) # port name, slave address (in decimal)
          smartmeter.serial.baudrate = 9600         # Baud
          smartmeter.serial.bytesize = 8
          smartmeter.serial.parity   = serial.PARITY_EVEN # vendor default is EVEN
          smartmeter.serial.stopbits = 1
          smartmeter.serial.timeout  = 0.6          # seconds
          smartmeter.mode = minimalmodbus.MODE_RTU   # rtu or ascii mode
          smartmeter.clear_buffers_before_each_transaction = False
          smartmeter.debug = False # set to "True" for debug mode
          
          #Debug Werte für L1 ausgeben
          werteausgeben= True
          
          
          while True:
          
              client.loop_start()
          
           #Werte Abfragen
              try:
                  #Adresse = smartmeter.read_register(2, 0, 3, False)  # registeraddress, number_of_decimals=0, functioncode=3, signed=False
                  L1Spannung= umwandeln_ieee(smartmeter.read_long(14, 3, False, 0)) #registeraddress, functioncode=3, signed=False, byteorder=0)
                  L2Spannung= umwandeln_ieee(smartmeter.read_long(16, 3, False, 0))
                  L3Spannung= umwandeln_ieee(smartmeter.read_long(18, 3, False, 0))
                  Frequency= umwandeln_ieee(smartmeter.read_long(20, 3, False, 0))
                  L1Strom= umwandeln_ieee(smartmeter.read_long(22, 3, False, 0))
                  L2Strom= umwandeln_ieee(smartmeter.read_long(24, 3, False, 0))
                  L3Strom= umwandeln_ieee(smartmeter.read_long(26, 3, False, 0))
                  Strom_gesamt=L1Strom+L2Strom+L3Strom
                  Leistung_gesamt= umwandeln_ieee(smartmeter.read_long(28, 3, False, 0))
                  L1Leistung= umwandeln_ieee(smartmeter.read_long(30, 3, False, 0))
                  L2Leistung= umwandeln_ieee(smartmeter.read_long(32, 3, False, 0))
                  L3Leistung= umwandeln_ieee(smartmeter.read_long(34, 3, False, 0))
                  L1PowerFactor=umwandeln_ieee(smartmeter.read_long(54, 3, False, 0))
                  L2PowerFactor=umwandeln_ieee(smartmeter.read_long(56, 3, False, 0))
                  L3PowerFactor=umwandeln_ieee(smartmeter.read_long(58, 3, False, 0))
                  Verbrauch_gesamt=umwandeln_ieee(smartmeter.read_long(256, 3, False, 0))
                  #L1Verbrauch=umwandeln_ieee(smartmeter.read_long(258, 3, False, 0))
                  #L2Verbrauch=umwandeln_ieee(smartmeter.read_long(260, 3, False, 0))
                  #L3Verbrauch=umwandeln_ieee(smartmeter.read_long(262, 3, False, 0))
                  go=True;
              except:
                  print ("\nEinlesen nicht geklappt, versuche es erneut in 15 Sekunden")
                  go=False;
          
              if go:
          
               #Werte Ausgeben falls gewünscht
                  if werteausgeben:
                      print(strftime("\n%Y-%m-%d %H:%M:%S", gmtime()))
                      print ("Aktuelle Werte:")
                      #AdresseTxt = "Die Slave Adresse ist: %s" % Adresse
                      #print (AdresseTxt)
                      L1Spannungtxt = "L1Spannung ist: %f V" % L1Spannung
                      print (L1Spannungtxt)
                      L1Stromtxt = "L1Strom ist: %f A" % L1Strom
                      print (L1Stromtxt)
                      Frequencytxt = "Frequenz ist: %f hz" % Frequency
                      print (Frequencytxt)
                      L1Leistungtxt = "L1Leistung ist: %f KW/h" % L1Leistung
                      print (L1Leistungtxt)
                      L1PowerFactortxt = "L1Power Faktor ist: %f" % L1PowerFactor
                      print (L1PowerFactortxt)
                      Leistung_gesamttxt = "Leistung Gesamt ist: %f KW" % Leistung_gesamt
                      print (Leistung_gesamttxt)
          
               # Werte Senden
                  #client.publish("/Zaehler/Adresse",str(Adresse), qos=1)
                  client.publish("/Zaehler/L1/L1Spannung",str(L1Spannung), qos=0)
                  client.publish("/Zaehler/L2/L2Spannung",str(L2Spannung), qos=0)
                  client.publish("/Zaehler/L3/L3Spannung",str(L3Spannung), qos=0)
                  client.publish("/Zaehler/Gesamt/Frequency",str(Frequency), qos=0)
                  client.publish("/Zaehler/L1/L1Strom",str(L1Strom), qos=0)
                  client.publish("/Zaehler/L2/L2Strom",str(L2Strom), qos=0)
                  client.publish("/Zaehler/L3/L3Strom",str(L3Strom), qos=0)
                  client.publish("/Zaehler/Gesamt/Leistung_gesamt",str(Leistung_gesamt*1000), qos=0)
                  client.publish("/Zaehler/L1/L1Leistung",str(L1Leistung*1000), qos=0)
                  client.publish("/Zaehler/L2/L2Leistung",str(L2Leistung*1000), qos=0)
                  client.publish("/Zaehler/L3/L3Leistung",str(L3Leistung*1000), qos=0)
                  client.publish("/Zaehler/L1/L1PowerFactor",str(L1PowerFactor), qos=0)
                  client.publish("/Zaehler/L2/L2PowerFactor",str(L2PowerFactor), qos=0)
                  client.publish("/Zaehler/L3/L3PowerFactor",str(L3PowerFactor), qos=0)
                  client.publish("/Zaehler/Gesamt/Verbrauch_gesamt",str(Verbrauch_gesamt), qos=0)
                  client.publish("/Zaehler/Gesamt/Strom_gesamt",str(Strom_gesamt), qos=0)
                  #client.publish("/Zaehler/L1/L1Verbrauch",str(L1Verbrauch), qos=1)
                  #client.publish("/Zaehler/L2/L2Verbrauch",str(L2Verbrauch), qos=1)
                  #client.publish("/Zaehler/L3/L3Verbrauch",str(L3Verbrauch), qos=1)
              time.sleep(15)
          

          Getestet werden kann das Script mit: python3 Scriptname.py
          Zum dauerhaften ausführen habe ich eine Service eingerichtet, der beim Booten automatisch gestartet wird:

          1. Service Datei erstellen: sudo nano /etc/systemd/system/smartmeter.service
          2. Inhalt der Datei, Pfade oder Dateinamen sind anzupassen:
          [Unit]
          Description=smartmeter
          After=network.target
          
          [Service]
          ExecStart=/usr/bin/python3 -u smart.py
          WorkingDirectory=/home/pi/smartmeter
          StandardOutput=inherit
          StandardError=inherit
          Restart=always
          User=root
          
          [Install]
          WantedBy=multi-user.target
          
          1. Dienst Starten und Status ausgeben:
            sudo systemctl start smartmeter
            sudo systemctl status smartmeter.service
            sudo systemctl stop smartmeter
          2. Dienst anschalten um bei einem Boot automatisch gestartet zu werden:
            sudo systemctl enable smartmeter.service

          Die Daten sollten dann in IObroker regelmässig eintreffen:

          test.png

          H 1 Reply Last reply Reply Quote 0
          • R
            rf600r last edited by

            Hallo charakterkopf,

            Wollte mich bedanken für deine Arbeit.
            Läuft spitze bei mir.

            1 Reply Last reply Reply Quote 0
            • C
              charakterkopf last edited by

              Danke 🙂

              1 Reply Last reply Reply Quote 0
              • I
                isexglei last edited by

                Tolle Arbeit!

                Ich habe gelesen, dass es beim 516er und 517er nicht erkennbar ist, ob gerade ins Netz eingespeist wird, oder ob vom Netz bezogen wird. Kann das hier wer widerlegen?

                F 1 Reply Last reply Reply Quote 0
                • F
                  fbruckm @isexglei last edited by

                  @isexglei Ich kann es leider nur bestätigen 😞

                  Ich versuche es jetzt mit einem Lovato DMED301, der sollte das können.

                  1 Reply Last reply Reply Quote 0
                  • H
                    herrniffler @charakterkopf last edited by

                    @charakterkopf Hi, erstmal danke, dass du deine Arbeit mit uns teilst. Ich bin absoluter Neuling auf dem Gebiet und wollte dich daher fragen wie du den Zähler und den PI verbunden hast....beziehungsweise, ist der PI in deinem Zählerkasten eingebaut oder wohin geht das Kabel samt USB-Adapter?

                    C 1 Reply Last reply Reply Quote 0
                    • C
                      charakterkopf @herrniffler last edited by

                      @herrniffler Servus, ich habe das Kabel (Netzwerkleitung) durch den Hausflur bis zum Raspberry Pi verlegt ca. 5m.

                      Der Raspberry wird über die Fritzbox mit Strom versorgt und hat noch mehr Funktionen (Anwensenheit / LED Leiste) deswegen war eine Montage im Schrank nicht möglich.

                      Gruß Martin

                      1 Reply Last reply Reply Quote 0
                      • TbsJah
                        TbsJah @charakterkopf last edited by

                        @charakterkopf Ich habe einen Orno 516 und einen Orno 517 jeweils über die den RS485 S0 Anschluss direkt per USB mit dem Raspi verbunden
                        Zum Auslesen nutze ich den Modbus Adapter

                        ff34ca7a-4ffb-4ebe-9328-ad8cd8dfd374-image.png

                        a30f122a-e4f4-48e0-97fe-058b3f4ec209-image.png

                        deviceId	address	name	description	unit	type	len	factor	offset	role	room	poll	wp
                        1	40015		L1 Voltage	V	floatbe	2	1	0	value		true	false	
                        1	40017		L2 Voltage	V	floatbe	2	1	0	value		true	false	
                        1	40019		L3 Voltage	V	floatbe	2	1	0	value		true	false	
                        1	40021		Grid Frequency	Hz	floatbe	2	1	0	value		true	false	
                        1	40023		L1 Current	A	floatbe	2	1	0	value		true	false	
                        1	40025		L2 Current	A	floatbe	2	1	0	value		true	false	
                        1	40027		L3 Current	A	floatbe	2	1	0	value		true	false	
                        1	40029		Total Active Power	kWh	floatbe	2	1	0	value		true	false	
                        1	40031		L1 Active Power	kWh	floatbe	2	1	0	value		true	false	
                        1	40033		L2 Active Power	kWh	floatbe	2	1	0	value		true	false	
                        1	40035		L3 Active Power	kWh	floatbe	2	1	0	value		true	false	
                        1	40037		Total Reactive Power	kVAR	floatbe	2	1	0	value		true	false	
                        1	40039		L1 Reactive Power	kVAR	floatbe	2	1	0	value		true	false	
                        1	40041		L2 Reactive Power	kVAR	floatbe	2	1	0	value		true	false	
                        1	40043		L3 Reactive Power	kVAR	floatbe	2	1	0	value		true	false	
                        1	40045		Total Apparent Power	kVA	floatbe	2	1	0	value		true	false	
                        1	40047		L1 Apparent Power	kVA	floatbe	2	1	0	value		true	false	
                        1	40049		L2 Apparent Power	kVA	floatbe	2	1	0	value		true	false	
                        1	40051		L3 Apparent Power	kVA	floatbe	2	1	0	value		true	false	
                        1	40053		Total Power Factor	PF	floatbe	2	1	0	value		true	false	
                        1	40055		L1 Power Factor	PF	floatbe	2	1	0	value		true	false	
                        1	40057		L2 Power Factor	PF	floatbe	2	1	0	value		true	false	
                        1	40059		L3 Power Factor	PF	floatbe	2	1	0	value		true	false	
                        1	40067		Total Active Energy	kWh	floatbe	2	1	0	value		true	false	
                        1	40069		L1 Active Energy	kWh	floatbe	2	1	0	value		true	false	
                        1	40071		L2 Active Energy	kWh	floatbe	2	1	0	value		true	false	
                        1	40073		L3 Active Energy	kWh	floatbe	2	1	0	value		true	false	
                        1	40075		Forwarded Active Energy	kWh	floatbe	2	1	0	value		true	false	
                        1	40077		L1 Forwarded Active Energy	kWh	floatbe	2	1	0	value		true	false	
                        1	40079		L2 Forwarded Active Energy	kWh	floatbe	2	1	0	value		true	false	
                        1	40081		L3 Forwarded Active Energy	kWh	floatbe	2	1	0	value		true	false	
                        
                        

                        Ergebnis

                        0cf4a82e-c7fb-46c0-a7b3-223306d3e994-image.png

                        D 1 Reply Last reply Reply Quote 0
                        • D
                          derdominik @TbsJah last edited by

                          @tbsjah said in Abfrage ORNO OR-WE-516/ 517 Modbus, evtl. Script vorhanden?:

                          @charakterkopf Ich habe einen Orno 516 und einen Orno 517 jeweils über die den RS485 S0 Anschluss direkt per USB mit dem Raspi verbunden

                          Hallo, Danke für die Idee und das Script!

                          Noch eine Frage zu der Verbindung, da ich alles vorbereiten möchte, bevor der Fachmann kommt.

                          Die USB RS485 Konverter von ebay haben alle erstmal nur Schraubklemmen.

                          • Vom USB-Stick muss ich dann lediglich einen 2-adrigen Klingeldraht bis zum Zählerkasten bekommen, mehr nicht, richtig?
                          • Am ORNO selbst wird der Draht direkt angeklemmt, d.h. kein Stecker?
                          • Habt ihr die Schraubklemmen am UBS-Stick noch irgendwie geschützt oder ist diese offene Verschraubung unkritisch?

                          Grüße

                          TbsJah E 2 Replies Last reply Reply Quote 0
                          • TbsJah
                            TbsJah @derdominik last edited by

                            @derdominik

                            • richtig
                            • richtig
                            • Schrumpfschlauch
                            D 1 Reply Last reply Reply Quote 0
                            • D
                              derdominik @TbsJah last edited by

                              @tbsjah Danke!

                              1 Reply Last reply Reply Quote 0
                              • E
                                easymeter @derdominik last edited by

                                @derdominik Hallo zusammen, welchen Adapter habt Ihr verwendet um den Zähler an den USB des Raspi zu bringen?

                                TbsJah 1 Reply Last reply Reply Quote 0
                                • TbsJah
                                  TbsJah @easymeter last edited by

                                  @easymeter
                                  WINGONEER CH340E USB zu TTL USB zu RS485 Konverter Adapter Windows 7/8 XP Linux Vista https://www.amazon.de/dp/B016IG6X7I/ref=cm_sw_r_apan_i_YGFPE5GW06WD0FXAQXHX

                                  1 Reply Last reply Reply Quote 0
                                  • E
                                    easymeter last edited by

                                    Danke für die Antwort. Nachdem ich mein System auf einen NUC umgezogen habe funktioniert das Auslesen mit dem Modbus Adapter mit den oben genannten Einstellungen fast auf Anhieb.
                                    Mit der schon installierten Modbus Instanz, die ich im Backup schon hatte, hatte ich aber noch Probleme. Damit wollte es nicht rennen.
                                    Nachdem ich die Instanz aber gelöscht und neu Installiert habe ging es wie gesagt auf Anhieb, wo auch immer das Problem lag. Die Versionen waren die gleichen....
                                    Jetzt kommt aber bei mir die nächste Ausbaustufe:
                                    Ich habe mehrere Zweige, die ich gerne erfassen möchte. Hat jemand schon mehrere Zähler an dem Modbus? Wie habt Ihr das dann gemacht? Wie kann die Modbus ID im Zähler angepasst werden?
                                    Würde mich freuen, wenn jemand seine Erfahrungen teilen könnte.

                                    TbsJah 1 Reply Last reply Reply Quote 0
                                    • TbsJah
                                      TbsJah @easymeter last edited by

                                      @easymeter Verbaut habe ich einen Orno 516 und einen Orno 517
                                      Läuft über 2 separate Modbus Instanzen.

                                      Das wichtige ist dass du immer den richtigen USB Port ansprichst.
                                      Bei jedem Neustart des Raspberry erhältst du neue Zuordnungen.

                                      Ganz gut erklär hier link

                                      ec1133b3-1e35-4397-81de-f31f4691dc12-image.png

                                      E 1 Reply Last reply Reply Quote 0
                                      • E
                                        easymeter @TbsJah last edited by

                                        @tbsjah Danke für den Link. So ein ähnliches Vorgehen kenne ich. Mein Gedanke wäre es, da es ja ein "Bus" ist, die weiteren Zähler hintereinander am Modbus anzuschließen und mit deren ID dann auszulesen Auslieferungszustand ist bei mir "1" gewesen). Dazu muss man aber die Modbus ID anpassen, und da bin ich noch nicht weiter gekommen. Irgendwie muss man da dann ja schreibend an das Gerät, keine Ahnung, ob der Modbusadapter das bewerkstelligen kann.
                                        Naja, mit weiteren Adaptern an anderen USB Ports wäre vielleicht auch ein Ansatz, die Dinger kosten ja auch nicht die Welt.....da muss ich nur mal schauen, wie sich der NUC dann mit USB Hubs verhält, langsam gehen mir die Ports aus ,-)

                                        TbsJah 1 Reply Last reply Reply Quote 0
                                        • TbsJah
                                          TbsJah @easymeter last edited by

                                          @easymeter Ich haben einen simplen USB Verteiler angesteckt
                                          Wichtig ist dann halt das du immer den richtigen Port ansprichst nach einem Neustart

                                          1 Reply Last reply Reply Quote 0
                                          • E
                                            easymeter last edited by

                                            @tbsjah Bin heute auch etwas weiter gekommen.
                                            Ich habe einen weiteren Zähler mit einem USB Adapter direkt am PC angeschlossen und dort mit der Software von ORNO (Gibts auf der HP von ORNO beim Zähler WE517 zum Download) die Zähler ID verändert.
                                            Danach habe ich den Zähler hinter meinen bestehenden Zähler gehangen.
                                            Im Modbus Adapter dann in den "Allgemeinen" Einstellungen den Haken bei "mehrere Geräte IDs" gesetzt und in den Holdingregister die weiteren Messpunkte angelegt. Dort knn in der zweiten Spalte "Slave-ID" die ID des Zählers eingetragen werden.
                                            Damit klappt es auch mit min. zwei Zählern bei mir ohne weitere Probleme, die gewünschten Werte trudeln zuverlässig ein.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            472
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            orno or-we-516 modbus
                                            10
                                            59
                                            8524
                                            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