Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Script zur Berechnung des Eigenverbrauchs

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Script zur Berechnung des Eigenverbrauchs

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

      Hallo,

      vielleicht kann mir einer leicht auf die Sprünge helfen. Ich versuche aus den Angaben von aktueller PV-Leistung, Netzeinspeisung und Netzbezug den Eigenverbrauch zu berechnen.

      vorhandene Objekte:
      721_unbenannt.jpg

      sowie ein globales Objekt = Eigenverbrauch
      721_unbenannt2.jpg

      Die Formel müsste lauten: Wenn PV-Leistung größer 0 dann Eigenverbrauch = PV-Leistung - Netzeinspeisung

      Leider haperts an meinen Javascript-Kenntnissen. 😢 (VB.net wäre kein Problem <- bitte nicht prügeln)

      Viele Grüße

      Marco

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo Marco, kann ich dir heute oder morgen machen. Sind die werte Zahlen oder Strings?

        Welche Ordnerstruktur soll herauskommen?

        /PVAnlage/Eigenverbrauch

        Und für die Schönheit: welche Einheit?

        Gruß

        Pix

        Gesendet von meinem iPhone mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • M
          Marcolotti last edited by

          Hallo Pix,

          die Zahlen sind Werte, die Ordnerstruktur wäre okay. Mir würde aber schon einfach ein kleiner Anfang genügen. Möchte hier niemand in Arbeit stürzen. 😮

          Einheit würde ich weglassen, so kann ich mit den Werten später noch kalkulieren.

          Vielen Dank und viele Grüße

          Marco

          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo Marco,
            @Marcolotti:

            Zahlen sind Werte ` das war mir eh klar! :lol:

            Da ich den Adapter mit den entsprechenden Werten nicht habe, konnte ich das Skript nicht testen. Ich bin einfach davon ausgegangen, dass alle Werte reine Zahlen sind und ich keine Strings umwandeln musste.

            /*  PV Eigenverbrauch
            Skript errechnet den Eigenverbrauch aus den Daten des modbus Adapters
            
            erstellt: 09.11.2015 von Pix
            */
            
            // Objekt erstellen
            createState('PV_Anlage.Eigenverbrauch',0, {
                name: 'PV-Anlage: Eigenverbrauch',
                desc: 'Eigenverbrauch = PV-Leistung - Einspeisung',
                read: true,
                write: true,
                type: 'number',
                unit: 'kWh'
            });
            
            var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung',
                idPVLeistung = 'modbus.0.inputRegisters.30775_PVLeistung',
                idEigenverbrauch = 'PV_Anlage.Eigenverbrauch';
            
            // Berechnung mit aktuellen Daten, wenn Leistung >0
            on({
                id: idPVLeistung,
                change: 'ne',
                valGt: 0
            }, function (data) {
                var einspeisung = getState(idEinspeisung).val,
                    eigenverbrauch;          // zu errechnen
                eigenverbrauch = data.newState.val - einspeisung;
                log('PV-Anlage - Eigenverbrauch: ' + eigenverbrauch + 'kWh');
                setState(idEigenverbrauch, eigenverbrauch);
            });
            

            Ein neues Objekt wird erstellt und konfiguriert (Einheit kWh - ist das richtig?),

            die komplizierten Objektnamen mit der Adapterinstanz vorneweg werden in "leichtere" Variablen id*** gespeichert,

            der Datenpunkt PV_Leistung wird überwacht (wenn Änderung und neuer Wert > 0, dann Berechnung mit aktuellen Zahlen ausführen und in State schreiben).

            Drittletzte Zeile (log****) kannst du später auskommentieren oder löschen, sonst müllt sie dir bei jeder Änderung der PV-Leistung das log zu.

            Die Einheit kWh ist nicht als Text im Objekt gespeichert. Du kannst also trotzdem weiter mit dem Wert rechnen.

            Gib mir bescheid, ob es läuft.

            Gruß

            Pix

            1 Reply Last reply Reply Quote 0
            • M
              Marcolotti last edited by

              Hallo Pix,

              habe das Script eben eingebaut und es funktioniert hervorragend. 😄

              An dich ein großes Dankeschön!

              Gruß Marco
              2858_blue.jpg
              2858_view_multiroom.txt

              1 Reply Last reply Reply Quote 0
              • S
                starfish last edited by

                interessant wäre auch der tägliche Verbrauch bzw. Produktion. Dazu müsste 1x pro Tag der Zählerstand abgespeichert werden und am nächsten Tag zur selben Zeit die DIfferenz gebildet werden. @ Pix : wie würdest Du dies lösen? (ggf. in Anlehnung an obiges Skript)

                Gruss

                Beat

                1 Reply Last reply Reply Quote 0
                • M
                  Marcolotti last edited by

                  Bei mir wird das schon aus dem energymeter ausgelesen. Um Mitternacht startet ein Programm in der ccu und setzt den aktuellen Gesamtverbrauch in die Variable "Verbrauchgestern".

                  Gesendet von meinem HTC One_M8 mit Tapatalk

                  1 Reply Last reply Reply Quote 0
                  • S
                    starfish last edited by

                    @Marcolotti mein Energiemessgerät akkumuliert den Verbrauch fortlaufend. Eine CCU läuft hier auch nicht (mehr). Deshalb würde sich ein script in iobroker gut eignen.

                    1 Reply Last reply Reply Quote 0
                    • P
                      pix last edited by

                      Hallo starfish,

                      ich bin selbst noch in der Entwicklung eines solchen Skripts. Zur Zeit läuft die Testphase und es hat sich ein Problem ergeben. Ich nutze neben EM1000 Zwischensteckern (sehr solide) noch die HM-Zwischenstecker mit Leistungsmessung. Leider verlieren die ihren Zählerstand bei Stromausfall oder beim Ausstecken. Deshalb brauche ich noch eine Funktion, die in solch einem Fall (z.B. aktueller Zähler < Zähler Mitternacht) die Berechnung umstellt. Leider ist es nicht möglich, den Datenpunkt im Gerät wieder auf den alten Zustand zu setzen.

                      Sonst kannst du eine Variable anlegen für den Tageszähler und täglich um 0Uhr mit dem aktuellen Zählerstand füllen. Dann zur Anzeigen einfach gespeicherten Tageszählerstand vom aktuellen Zählerstand abziehen, ohne das in eine Variable zu schreiben (Berechnung mit VIS-bindings direkt in VIS). Natürlich kann das Javascript-Skript diesen Wert auch wieder in eine weitere Variable schreiben (Tagesverbrauch) und auf Wunsch mit dem Preis multiplizieren (Tageskosten/Ertrag bei Verkauf). Geht auch für die Woche, den Monat, das Quartal, das Jahr. Ich habe das alles bei 6 verschiedenen Strommessgeräten gemacht und es ist recht kompliziert geworden. Und wie gesagt, jetzt stehe ich vor einem Problem: Die Daten sind Futsch, da die HM-Stromzähler ihren internen Zähler genullt haben.

                      Die beste Lösung wäre es, wenn ich die History-Daten direkt einlesen könnte. Das geht aber noch nicht. Vielleicht klappt das noch vor dem Jahreswechsel. Bis dahin heißt es warten.

                      Gruß

                      Pix

                      1 Reply Last reply Reply Quote 0
                      • wendy2702
                        wendy2702 last edited by

                        @pix:

                        Hallo Marco,
                        @Marcolotti:

                        Zahlen sind Werte ` das war mir eh klar! :lol:

                        Da ich den Adapter mit den entsprechenden Werten nicht habe, konnte ich das Skript nicht testen. Ich bin einfach davon ausgegangen, dass alle Werte reine Zahlen sind und ich keine Strings umwandeln musste.

                        /*  PV Eigenverbrauch
                        Skript errechnet den Eigenverbrauch aus den Daten des modbus Adapters
                        
                        erstellt: 09.11.2015 von Pix
                        */
                        
                        // Objekt erstellen
                        createState('PV_Anlage.Eigenverbrauch',0, {
                            name: 'PV-Anlage: Eigenverbrauch',
                            desc: 'Eigenverbrauch = PV-Leistung - Einspeisung',
                            read: true,
                            write: true,
                            type: 'number',
                            unit: 'kWh'
                        });
                        
                            var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung',
                            idPVLeistung = 'modbus.0.inputRegisters.30775_PVLeistung',
                            idEigenverbrauch = 'PV_Anlage.Eigenverbrauch';
                        
                        // Berechnung mit aktuellen Daten, wenn Leistung >0
                        on({
                            id: idPVLeistung,
                            change: 'ne',
                            valGt: 0
                        }, function (data) {
                            var einspeisung = getState(idEinspeisung).val,
                                eigenverbrauch;          // zu errechnen
                            eigenverbrauch = data.newState.val - einspeisung;
                            log('PV-Anlage - Eigenverbrauch: ' + eigenverbrauch + 'kWh');
                            setState(idEigenverbrauch, eigenverbrauch);
                        });
                        

                        Ein neues Objekt wird erstellt und konfiguriert (Einheit kWh - ist das richtig?),

                        die komplizierten Objektnamen mit der Adapterinstanz vorneweg werden in "leichtere" Variablen id*** gespeichert,

                        der Datenpunkt PV_Leistung wird überwacht (wenn Änderung und neuer Wert > 0, dann Berechnung mit aktuellen Zahlen ausführen und in State schreiben).

                        Drittletzte Zeile (log****) kannst du später auskommentieren oder löschen, sonst müllt sie dir bei jeder Änderung der PV-Leistung das log zu.

                        Die Einheit kWh ist nicht als Text im Objekt gespeichert. Du kannst also trotzdem weiter mit dem Wert rechnen.

                        Gib mir bescheid, ob es läuft.

                        Gruß

                        Pix `

                        Hi,

                        ich würde auch gerne meinen Eigenverbrauch berechnen. Habe aber das Problem das ich keinen Datenpunkt````
                        modbus.0.inputRegisters.30867_Einspeisung

                        
                        Ob ich Energie Einspeise oder Beziehe kann ich nur am "Vorzeichen" meiner Wirkleistung erkennen.
                        
                        Bei Bezug ist der Wert "positiv" und bei Einspeisung "negativ" (- als Vorzeichen).
                        
                        Wenn ich das Script jetzt so übernehme und nur den Punkt:
                        
                        

                        var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung',

                        
                        gegen meinen Datenpunkt Wirkleistung ersetze:
                        
                        

                        modbus.3.holdingRegisters.20498_Wirkenergie_Total

                        
                        Bleibt der neu angelegte Datenpunkt "Eigenverbrauch" auf "0" stehen obwohl ich ja aktuell Bezug/Verbrauch habe.
                        
                        Kann mir bitte jemand helfen das Script entsprechend zu ändern?
                        
                        Ich kann leider kein Javascript und habe aktuell keinen Schimmer warum bei Eigenverbrauch nichts angezeigt wird.
                        
                        Vielen Dank
                        
                        Mirko
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        469
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        4
                        10
                        4874
                        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