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@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 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

      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
                                          • E
                                            easymeter last edited by

                                            Hallo zusammen,

                                            ich muss mich heute nochmal melden.
                                            Ich möchte jetzt in einer weiteren Verfeinerung die Zählerstände auch mit auslesen. (Bisher hatte ich nur die aktuellen Leistungen benötigt).
                                            Welches Register habt Ihr für den Zählerstand genommen? Ich habe im Holdingregister die 40067 bzw. die 40075 eingetragen. Bekomme da aber keine Werte und, noch viel schlimmer, im Log einen Fehler und der Adapter bleibt dann auf gelb.(Runtime Fehler).
                                            Habe ich da einen Knoten im Kopf und das falsche Register eingetragen, oder klemmt da was im Adapter?
                                            Freue mich auf Eure Antworten.
                                            Gruß
                                            Markus

                                            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

                                            1.0k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            orno or-we-516 modbus
                                            11
                                            60
                                            8958
                                            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