Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Frage zu einem Script und dem genutzten Datenpunkt

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

Frage zu einem Script und dem genutzten Datenpunkt

Geplant Angeheftet Gesperrt Verschoben JavaScript
37 Beiträge 5 Kommentatoren 3.2k Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • O opöl

    @tt-tom ,
    habe ich gemacht. Ist aber m.E. nicht zwingend nötig.
    Die Daten sind bisher zuverlässig angekommen und auf den unbenamsten Ordner hat das bisher auch keinen Einfluss.
    Trotzdem Danke für den Hinweis.

    Gruß

    T Nicht stören
    T Nicht stören
    ticaki
    schrieb am zuletzt editiert von
    #27

    @opöl sagte in Frage zu einem Script und dem genutzten Datenpunkt:

    @tt-tom ,
    habe ich gemacht. Ist aber m.E. nicht zwingend nötig.
    Die Daten sind bisher zuverlässig angekommen und auf den unbenamsten Ordner hat das bisher auch keinen Einfluss.
    Trotzdem Danke für den Hinweis.

    Gruß

    Das macht keine Probleme bis es dann welche macht :)

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    O 1 Antwort Letzte Antwort
    1
    • T ticaki

      @opöl sagte in Frage zu einem Script und dem genutzten Datenpunkt:

      @tt-tom ,
      habe ich gemacht. Ist aber m.E. nicht zwingend nötig.
      Die Daten sind bisher zuverlässig angekommen und auf den unbenamsten Ordner hat das bisher auch keinen Einfluss.
      Trotzdem Danke für den Hinweis.

      Gruß

      Das macht keine Probleme bis es dann welche macht :)

      O Offline
      O Offline
      opöl
      schrieb am zuletzt editiert von
      #28

      @ticaki ,
      da hast Du sicher mehr Erfahrung als ich. Ich bin ja quasi noch Lehrling und nehme solche Tipps gerne an.

      Da wir gerade davon sprechen:
      Wenn die Namen der Datenpunkte, oder die Ordnerstruktur geändert werden, sind die gesammelten Daten doch sicher weg? Oder kann man den Zugang zu den historischen Daten über den Alias im iobroker sicherstellen?

      Ich mache es mal konkret:
      Angenommen, ich habe einen Datenpunkt „Diäten?pünkt“ mit dem Alias „Strom“ im iobroker und benenne den in „Datenpunkt“ mit gleichem Alias „Strom“ um, komme ich mit Grafana noch an die alten Daten und kann die Grafen lückenlos fortschreiben?

      Gruß

      T 1 Antwort Letzte Antwort
      0
      • O opöl

        @ticaki ,
        da hast Du sicher mehr Erfahrung als ich. Ich bin ja quasi noch Lehrling und nehme solche Tipps gerne an.

        Da wir gerade davon sprechen:
        Wenn die Namen der Datenpunkte, oder die Ordnerstruktur geändert werden, sind die gesammelten Daten doch sicher weg? Oder kann man den Zugang zu den historischen Daten über den Alias im iobroker sicherstellen?

        Ich mache es mal konkret:
        Angenommen, ich habe einen Datenpunkt „Diäten?pünkt“ mit dem Alias „Strom“ im iobroker und benenne den in „Datenpunkt“ mit gleichem Alias „Strom“ um, komme ich mit Grafana noch an die alten Daten und kann die Grafen lückenlos fortschreiben?

        Gruß

        T Nicht stören
        T Nicht stören
        ticaki
        schrieb am zuletzt editiert von ticaki
        #29

        @opöl

        Verstehe die Frage nicht wirklich. Datenpunkte dürfen A-Za-z0-9_- enthalten der . ist als Pfadtrennzeichen reserviert. Alles andere kann in speziellen Fällen zu Problemen führen.

        Der influxDB Adapter löscht keine Daten, wenn du also Datenpunkte umgenennst, bleiben die alten Daten erhalten.

        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

        Spenden

        O 1 Antwort Letzte Antwort
        0
        • T ticaki

          @opöl

          Verstehe die Frage nicht wirklich. Datenpunkte dürfen A-Za-z0-9_- enthalten der . ist als Pfadtrennzeichen reserviert. Alles andere kann in speziellen Fällen zu Problemen führen.

          Der influxDB Adapter löscht keine Daten, wenn du also Datenpunkte umgenennst, bleiben die alten Daten erhalten.

          O Offline
          O Offline
          opöl
          schrieb am zuletzt editiert von
          #30

          @ticaki , @all,

          Eure Tipps und Anregungen habe ich soweit umgesetzt, das Script habe ich noch ein bisschen erweitert um Zählerstände für Einspeisung und Eigenverbrauch.
          Läuft soweit, vielen Dank für die Unterstützung.

          Und jetzt die Auflösung für das erste Phänomen, wegen dem ich den Beitrag eingestellt hatte.

          Ein typischer Anfängerfehler:

          In den benutzerdefinierten Einstellungen des Datenpunkts war noch der Haken „Nur Änderungen aufzeichnen“ gesetzt. Ich hatte die Auswirkung dieses Hakens nicht auf dem Schirm. Ist mir ein bisschen peinlich, andererseits habe ich viel gelernt.

          Insofern: Vielen Dank nochmal. Ihr seid ein klasse Forum.

          Gruß

          O 1 Antwort Letzte Antwort
          2
          • O opöl

            @ticaki , @all,

            Eure Tipps und Anregungen habe ich soweit umgesetzt, das Script habe ich noch ein bisschen erweitert um Zählerstände für Einspeisung und Eigenverbrauch.
            Läuft soweit, vielen Dank für die Unterstützung.

            Und jetzt die Auflösung für das erste Phänomen, wegen dem ich den Beitrag eingestellt hatte.

            Ein typischer Anfängerfehler:

            In den benutzerdefinierten Einstellungen des Datenpunkts war noch der Haken „Nur Änderungen aufzeichnen“ gesetzt. Ich hatte die Auswirkung dieses Hakens nicht auf dem Schirm. Ist mir ein bisschen peinlich, andererseits habe ich viel gelernt.

            Insofern: Vielen Dank nochmal. Ihr seid ein klasse Forum.

            Gruß

            O Offline
            O Offline
            opöl
            schrieb am zuletzt editiert von
            #31

            Hallo zusammen,

            erst einmal mit ein wenig Verspätung frohe Weihnachten.

            Mein Script habe ich noch einmal umgebaut. Es wird jetzt per Cron jede Minute gestartet.
            Vorher war der Trigger ja der Stromzähler, was aber nicht zielführend war, da es vorkommen konnte, dass sich der Messwert zwischen den Messungen mal nicht verändert hat und somit der Trigger nicht ausgelöst hat.

            Mit dem Cron läuft es zuverlässig und stabil, bis auf eine Kleinigkeit, die ich leider noch nicht in den Griff bekommen habe:

            Das Script von Achim Bäcker aus diesem Forum, das den Bosswerk WR ausliest wird ebenfalls per Cron jede Minute gestartet. Das führt dazu, dass meine errechneten Werte immer eine Minute hinterherhinken (grün = Erzeugung vom WR, violett = errechneter Eigenverbrauch).
            Ich führe das darauf zurück, dass die Bosswerk Messwerte noch nicht geschrieben wurden, wenn ich sie für meine Berechnung schon wieder auslese. Ich rechne also mit dem veralteten Wert.

            Mein Script möchte ich daher mit ein paar Sekunden Verzögerung nach der vollen Minute starten lassen, kriege das aber mit dem "setTimeout" und "clearTimeout" nicht hin. Die errechneten Werte werden immer noch ein paar ms nach der vollen Minute in die DB geschrieben.

            Wenn ich statt "setTimeout" "setInterval" verwende, werden die Werte permanent alle 10 Sekunden neu geschrieben.

            Kann mir jemand zeigen, wie ich mein Script mit einer Verzögerung von 10 Sekunden nach der vollen Minute starten kann?

            (grün = Erzeugung des WR, violett = errechneter Eigenverbrauch)
            ccaa4c5a-5e67-401c-bf33-8c405a31d96c-image.png

            Mein Script auf "Cron" umgebaut.

            // Berechnung von erzeugter Energie, Eigenverbrauch und Einspeisung 
            // aus den Bosswerk- und Sonoff Werten.
            //Zeitsteuerung mit CRON
            schedule('* * * * *', GetData); // Jede Minute ausführen
            setTimeout(GetData, 10000); // Mit 10 Sek. Verzögerung, damit die Deye Werte geschrieben werden können
            
            function GetData(){
            // Datenpunkt, der die Gesamtleistung am Stromzähler misst
            const idgesamtleistung = 'sonoff.0.Stromzaehler.SENSOR.Strom_Counter';
                //log(obj.state.from);  //Schreibt ins Log zur Fehleranalyse
                var gesamtleistung = getState(idgesamtleistung).val; // Aktuelle Gesamtleistung (W) am Zähler
                var einspeisung = 0; // Standardwert für die Einspeisung ist 0
                // Wenn die Gesamtleistung (W) negativ ist, wird ins Netz eingespeist
                if (gesamtleistung < 0) {
                einspeisung = Math.abs(gesamtleistung); // Einspeisung ist der Betrag der negativen Gesamtleistung
               }
            // Schreibe die eingespeiste Leistung (W) in den neuen Datenpunkt "Einspeisung"
                setState('0_userdata.0.Einspeisung.PV-Einspeisung', einspeisung, true);
            
            // Errechne den Zählerstand der eingespeisten Energie (Wm)
            // Hole alten Zählerstand (Wm)
              const idenergie = '0_userdata.0.Einspeisung.PV-Einspeisung-Counter';
              var energie = getState(idenergie).val;
            // Addiere aktuelle Leistung (W * 1 Minute) zur alten eingespeisten Energie (Wm) 
              var energie_neu = energie + einspeisung;
              setState('0_userdata.0.Einspeisung.PV-Einspeisung-Counter', energie_neu, true);
            
             // Berechnung des Eigenverbrauchs (W)  // Erzeugung - Einspeisung = Eigenverbrauch
              const idpvleistung = '0_userdata.0.Solar.webdata_now_p'; // Aktuelle PV Leistung (W)
              var pvleistung = getState(idpvleistung).val;
              var pveigenverbrauch = pvleistung - einspeisung; // Eigenverbrauch (W) errechnen und schreiben
              setState('0_userdata.0.Einspeisung.PV-Eigenverbrauch', pveigenverbrauch, true);
            
            // Zähler für den Eigenverbrauch (Wm)
            // Hole alten Zählerstand für Eigenverbrauch (Wm)
              const idpveigenverbrauchz = '0_userdata.0.Einspeisung.PV-Eigenverbrauch-Counter';
              var pveigenverbrauchz = getState(idpveigenverbrauchz).val;
              var pveigenverbrauchz_neu = pveigenverbrauchz + pveigenverbrauch;
              setState('0_userdata.0.Einspeisung.PV-Eigenverbrauch-Counter', pveigenverbrauchz_neu, true);
                
            // Zähler für erzeugte Leistung selber bauen. 
            // Achim Bäcker holt den ungenauen Zählerstand vom Deye. Auflösung = 100Wh
            // Die Lösung: Aufintegrieren der Leistung im Minutentakt wie beim Eigenverbrauch
            // Zähler für PV Erzeugung (Wm)
            // Hole alten Zählerstand für Eigenverbrauch (Wm)
              const idpverzeugungz = '0_userdata.0.Einspeisung.PV-Erzeugung-Counter';
              var pverzeugungz = getState(idpverzeugungz).val;
              var pverzeugungz_neu = pverzeugungz + pvleistung;
              setState('0_userdata.0.Einspeisung.PV-Erzeugung-Counter', pverzeugungz_neu, true);
            
            }; 
            
            var myTimeout = setTimeout(GetData, 10000);
            clearTimeout(myTimeout);
            

            Gruß

            T 1 Antwort Letzte Antwort
            0
            • O opöl

              Hallo zusammen,

              erst einmal mit ein wenig Verspätung frohe Weihnachten.

              Mein Script habe ich noch einmal umgebaut. Es wird jetzt per Cron jede Minute gestartet.
              Vorher war der Trigger ja der Stromzähler, was aber nicht zielführend war, da es vorkommen konnte, dass sich der Messwert zwischen den Messungen mal nicht verändert hat und somit der Trigger nicht ausgelöst hat.

              Mit dem Cron läuft es zuverlässig und stabil, bis auf eine Kleinigkeit, die ich leider noch nicht in den Griff bekommen habe:

              Das Script von Achim Bäcker aus diesem Forum, das den Bosswerk WR ausliest wird ebenfalls per Cron jede Minute gestartet. Das führt dazu, dass meine errechneten Werte immer eine Minute hinterherhinken (grün = Erzeugung vom WR, violett = errechneter Eigenverbrauch).
              Ich führe das darauf zurück, dass die Bosswerk Messwerte noch nicht geschrieben wurden, wenn ich sie für meine Berechnung schon wieder auslese. Ich rechne also mit dem veralteten Wert.

              Mein Script möchte ich daher mit ein paar Sekunden Verzögerung nach der vollen Minute starten lassen, kriege das aber mit dem "setTimeout" und "clearTimeout" nicht hin. Die errechneten Werte werden immer noch ein paar ms nach der vollen Minute in die DB geschrieben.

              Wenn ich statt "setTimeout" "setInterval" verwende, werden die Werte permanent alle 10 Sekunden neu geschrieben.

              Kann mir jemand zeigen, wie ich mein Script mit einer Verzögerung von 10 Sekunden nach der vollen Minute starten kann?

              (grün = Erzeugung des WR, violett = errechneter Eigenverbrauch)
              ccaa4c5a-5e67-401c-bf33-8c405a31d96c-image.png

              Mein Script auf "Cron" umgebaut.

              // Berechnung von erzeugter Energie, Eigenverbrauch und Einspeisung 
              // aus den Bosswerk- und Sonoff Werten.
              //Zeitsteuerung mit CRON
              schedule('* * * * *', GetData); // Jede Minute ausführen
              setTimeout(GetData, 10000); // Mit 10 Sek. Verzögerung, damit die Deye Werte geschrieben werden können
              
              function GetData(){
              // Datenpunkt, der die Gesamtleistung am Stromzähler misst
              const idgesamtleistung = 'sonoff.0.Stromzaehler.SENSOR.Strom_Counter';
                  //log(obj.state.from);  //Schreibt ins Log zur Fehleranalyse
                  var gesamtleistung = getState(idgesamtleistung).val; // Aktuelle Gesamtleistung (W) am Zähler
                  var einspeisung = 0; // Standardwert für die Einspeisung ist 0
                  // Wenn die Gesamtleistung (W) negativ ist, wird ins Netz eingespeist
                  if (gesamtleistung < 0) {
                  einspeisung = Math.abs(gesamtleistung); // Einspeisung ist der Betrag der negativen Gesamtleistung
                 }
              // Schreibe die eingespeiste Leistung (W) in den neuen Datenpunkt "Einspeisung"
                  setState('0_userdata.0.Einspeisung.PV-Einspeisung', einspeisung, true);
              
              // Errechne den Zählerstand der eingespeisten Energie (Wm)
              // Hole alten Zählerstand (Wm)
                const idenergie = '0_userdata.0.Einspeisung.PV-Einspeisung-Counter';
                var energie = getState(idenergie).val;
              // Addiere aktuelle Leistung (W * 1 Minute) zur alten eingespeisten Energie (Wm) 
                var energie_neu = energie + einspeisung;
                setState('0_userdata.0.Einspeisung.PV-Einspeisung-Counter', energie_neu, true);
              
               // Berechnung des Eigenverbrauchs (W)  // Erzeugung - Einspeisung = Eigenverbrauch
                const idpvleistung = '0_userdata.0.Solar.webdata_now_p'; // Aktuelle PV Leistung (W)
                var pvleistung = getState(idpvleistung).val;
                var pveigenverbrauch = pvleistung - einspeisung; // Eigenverbrauch (W) errechnen und schreiben
                setState('0_userdata.0.Einspeisung.PV-Eigenverbrauch', pveigenverbrauch, true);
              
              // Zähler für den Eigenverbrauch (Wm)
              // Hole alten Zählerstand für Eigenverbrauch (Wm)
                const idpveigenverbrauchz = '0_userdata.0.Einspeisung.PV-Eigenverbrauch-Counter';
                var pveigenverbrauchz = getState(idpveigenverbrauchz).val;
                var pveigenverbrauchz_neu = pveigenverbrauchz + pveigenverbrauch;
                setState('0_userdata.0.Einspeisung.PV-Eigenverbrauch-Counter', pveigenverbrauchz_neu, true);
                  
              // Zähler für erzeugte Leistung selber bauen. 
              // Achim Bäcker holt den ungenauen Zählerstand vom Deye. Auflösung = 100Wh
              // Die Lösung: Aufintegrieren der Leistung im Minutentakt wie beim Eigenverbrauch
              // Zähler für PV Erzeugung (Wm)
              // Hole alten Zählerstand für Eigenverbrauch (Wm)
                const idpverzeugungz = '0_userdata.0.Einspeisung.PV-Erzeugung-Counter';
                var pverzeugungz = getState(idpverzeugungz).val;
                var pverzeugungz_neu = pverzeugungz + pvleistung;
                setState('0_userdata.0.Einspeisung.PV-Erzeugung-Counter', pverzeugungz_neu, true);
              
              }; 
              
              var myTimeout = setTimeout(GetData, 10000);
              clearTimeout(myTimeout);
              

              Gruß

              T Nicht stören
              T Nicht stören
              ticaki
              schrieb am zuletzt editiert von
              #32

              @opöl

              schedule('* * * * *', GetData)
              

              ersetzen durch:

              schedule('8 * * * * *', GetData)
              

              https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#schedule

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              O 1 Antwort Letzte Antwort
              0
              • T ticaki

                @opöl

                schedule('* * * * *', GetData)
                

                ersetzen durch:

                schedule('8 * * * * *', GetData)
                

                https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#schedule

                O Offline
                O Offline
                opöl
                schrieb am zuletzt editiert von
                #33

                @ticaki ,

                das war es.
                Man kann ja so schön auf der eigenen Leitung stehen…
                Ich war wohl zu sehr fixiert auf den Timeout.

                Dir und allen anderen, die geholfen haben, vielen Dank und einen guten Rutsch ins Jahr 2024.

                Gruß
                Horst

                O 1 Antwort Letzte Antwort
                0
                • O opöl

                  @ticaki ,

                  das war es.
                  Man kann ja so schön auf der eigenen Leitung stehen…
                  Ich war wohl zu sehr fixiert auf den Timeout.

                  Dir und allen anderen, die geholfen haben, vielen Dank und einen guten Rutsch ins Jahr 2024.

                  Gruß
                  Horst

                  O Offline
                  O Offline
                  opöl
                  schrieb am zuletzt editiert von
                  #34

                  Hallo zusammen,

                  leider ist inzwischen noch ein kleiner Schönheitsfehler aufgefallen:
                  c19f1d59-ccd4-456c-a0bd-3de753494cdf-image.png

                  Hin und wieder antwortet der WR nicht, hier z.B. um 14:50 und 14:53 Uhr:
                  01695d9e-eb89-494e-bcd8-a233f27817bc-image.png

                  Das erzeugt die falschen Nullwerte im Eigenverbrauch (violett), weil hier 0-0 = 0 ergibt:

                  // Berechnung des Eigenverbrauchs (W)  // Erzeugung - Einspeisung = Eigenverbrauch
                    const idpvleistung = '0_userdata.0.Solar.webdata_now_p'; // Aktuelle PV Leistung (W)
                    var pvleistung = getState(idpvleistung).val;
                    var pveigenverbrauch = pvleistung - einspeisung; // Eigenverbrauch (W) errechnen und schreiben
                    setState('0_userdata.0.Einspeisung.PV-Eigenverbrauch', pveigenverbrauch, true);
                  

                  Gibt es eine Möglichkeit, den Wert der "pvleistung" der letzten Messung (Letzter Lauf des Scripts) zu sichern und mit dem zu rechnen?

                  Es ist sicherlich eine Krücke, aber es handelt sich um Ausreißer, wie sie 1-3 mal am Tag vorkommen, daher könnte ich damit leben.

                  Vielleicht hat jemand eine bessere Idee?

                  Gruß

                  T 1 Antwort Letzte Antwort
                  0
                  • O opöl

                    Hallo zusammen,

                    leider ist inzwischen noch ein kleiner Schönheitsfehler aufgefallen:
                    c19f1d59-ccd4-456c-a0bd-3de753494cdf-image.png

                    Hin und wieder antwortet der WR nicht, hier z.B. um 14:50 und 14:53 Uhr:
                    01695d9e-eb89-494e-bcd8-a233f27817bc-image.png

                    Das erzeugt die falschen Nullwerte im Eigenverbrauch (violett), weil hier 0-0 = 0 ergibt:

                    // Berechnung des Eigenverbrauchs (W)  // Erzeugung - Einspeisung = Eigenverbrauch
                      const idpvleistung = '0_userdata.0.Solar.webdata_now_p'; // Aktuelle PV Leistung (W)
                      var pvleistung = getState(idpvleistung).val;
                      var pveigenverbrauch = pvleistung - einspeisung; // Eigenverbrauch (W) errechnen und schreiben
                      setState('0_userdata.0.Einspeisung.PV-Eigenverbrauch', pveigenverbrauch, true);
                    

                    Gibt es eine Möglichkeit, den Wert der "pvleistung" der letzten Messung (Letzter Lauf des Scripts) zu sichern und mit dem zu rechnen?

                    Es ist sicherlich eine Krücke, aber es handelt sich um Ausreißer, wie sie 1-3 mal am Tag vorkommen, daher könnte ich damit leben.

                    Vielleicht hat jemand eine bessere Idee?

                    Gruß

                    T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von ticaki
                    #35

                    @opöl

                    Die Frage ist zu einfach :)

                    var lastValue=0
                    
                    ... // und da wo es passt.
                    
                    lastValue = currentValue > 0 ?  currentValue : lastValue
                    currentValue = lastValue;
                    

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    O 1 Antwort Letzte Antwort
                    0
                    • T ticaki

                      @opöl

                      Die Frage ist zu einfach :)

                      var lastValue=0
                      
                      ... // und da wo es passt.
                      
                      lastValue = currentValue > 0 ?  currentValue : lastValue
                      currentValue = lastValue;
                      
                      O Offline
                      O Offline
                      opöl
                      schrieb am zuletzt editiert von
                      #36

                      @ticaki ,

                      ich habe versucht das umzusetzen, mache da aber noch etwas falsch.

                      var lastValue=0
                      
                      ... // und da wo es passt.
                      
                      lastValue = currentValue > 0 ?  currentValue : lastValue
                      currentValue = lastValue;
                      

                      Kannst Du bitte noch einmal schauen, wo es hakt?

                      Der Graf, PV Erzeugung = grün, der errechnete Eigenverbrauch in violett sollte identisch sein.
                      03d18fb6-0770-4c0a-a012-f9f2583c1f95-image.png

                      Die Werte des Wechselrichters, hier mit 2 Aussetzern:
                      af4f243c-c98b-4536-bf9e-fd6462ec1308-image.png

                      Und hier die Werte des errechneten Eigenverbrauchs sind da, werden aber auf "0" gesetzt, sollten aber jeweils den vorherigen Wert zu zeigen.
                      deed4c19-a38f-4892-8b01-6154bdd56b7d-image.png

                      Und hier das komplette Script. Die Variablen werden in Zeile 8 + 9 definiert, in Zeile 36 und 39 stehen der Vergleich und die Zuweisung.

                      // Berechnung von erzeugter Energie, Eigenverbrauch und Einspeisung 
                      // aus den Bosswerk- und Sonoff Werten.
                      //Zeitsteuerung mit CRON, Script läuft 10 Sekunden nach dem Bosswerk Script
                      schedule('10 * * * * *', GetData); // Jede Minute ausführen
                      
                      // Hilfsvariable um den letzten PV Leistungswert zu nehmen, falls der WR mal keinen Wert liefert
                      // var lastpvleistung = 0
                         var lastValue = 0
                         var currentValue = 0
                      
                      function GetData(){
                      // Datenpunkt, der die Gesamtleistung am Stromzähler misst
                          const idgesamtleistung = 'sonoff.0.Stromzaehler.SENSOR.Strom_Counter';
                          //log(obj.state.from);  //Schreibt ins Log zur Fehleranalyse
                          var gesamtleistung = getState(idgesamtleistung).val; // Aktuelle Gesamtleistung (W) am Zähler
                          var einspeisung = 0; // Standardwert für die Einspeisung ist 0
                          // Wenn die Gesamtleistung (W) negativ ist, wird ins Netz eingespeist
                          if (gesamtleistung < 0) {
                          einspeisung = Math.abs(gesamtleistung); // Einspeisung ist der Betrag der negativen Gesamtleistung
                         }
                      // Schreibe die eingespeiste Leistung (W) in den neuen Datenpunkt "Einspeisung"
                          setState('0_userdata.0.Einspeisung.PV-Einspeisung', einspeisung, true);
                      
                      // Errechne den Zählerstand der eingespeisten Energie (Wm)
                      // Hole alten Zählerstand (Wm)
                         const idenergie = '0_userdata.0.Einspeisung.PV-Einspeisung-Counter';
                         var energie = getState(idenergie).val;
                      // Addiere aktuelle Leistung (W * 1 Minute) zur alten eingespeisten Energie (Wm) 
                         var energie_neu = energie + einspeisung;
                         setState('0_userdata.0.Einspeisung.PV-Einspeisung-Counter', energie_neu, true);
                      
                      // Berechnung des Eigenverbrauchs (W)  // Erzeugung - Einspeisung = Eigenverbrauch 
                         const idpvleistung = '0_userdata.0.Solar.webdata_now_p'; // Aktuelle PV Leistung (W)
                         var pvleistung = getState(idpvleistung).val;
                      
                         lastValue = currentValue > 0 ?  currentValue : lastValue; //Wenn pvleistung =0, und der vorherige Wert >0,
                      // lastpvleistung = pvleistung > 0 ? pvleistung : lastpvleistung; 
                         
                         currentValue = lastValue;  //dann nimm den vorherigen Wert lastpvleistung
                       //  pvleistung = lastpvleistung; 
                         var pveigenverbrauch = pvleistung - einspeisung; // Eigenverbrauch (W) errechnen und schreiben
                         setState('0_userdata.0.Einspeisung.PV-Eigenverbrauch', pveigenverbrauch, true);
                      
                      // Zähler für den Eigenverbrauch (Wm)
                      // Hole alten Zählerstand für Eigenverbrauch (Wm)
                         const idpveigenverbrauchz = '0_userdata.0.Einspeisung.PV-Eigenverbrauch-Counter';
                         var pveigenverbrauchz = getState(idpveigenverbrauchz).val;
                         var pveigenverbrauchz_neu = pveigenverbrauchz + pveigenverbrauch;
                         setState('0_userdata.0.Einspeisung.PV-Eigenverbrauch-Counter', pveigenverbrauchz_neu, true);
                          
                      // Zähler für erzeugte Leistung selber bauen. 
                      // Achim Bäcker holt den ungenauen Zählerstand vom Deye. Auflösung = 100Wh
                      // Die Lösung: Aufintegrieren der Leistung im Minutentakt wie beim Eigenverbrauch
                      // Zähler für PV Erzeugung (Wm)
                      // Hole alten Zählerstand für Eigenverbrauch (Wm)
                         const idpverzeugungz = '0_userdata.0.Einspeisung.PV-Erzeugung-Counter';
                         var pverzeugungz = getState(idpverzeugungz).val;
                         var pverzeugungz_neu = pverzeugungz + pvleistung;
                         setState('0_userdata.0.Einspeisung.PV-Erzeugung-Counter', pverzeugungz_neu, true);
                      }; 
                      

                      Gruß

                      1 Antwort Letzte Antwort
                      0
                      • T Nicht stören
                        T Nicht stören
                        ticaki
                        schrieb am zuletzt editiert von
                        #37

                        @opöl Zeile 8 wenn du alle 10 Minuten lastvalue auf 0 setzt kann das ja nicht gehen

                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                        Spenden

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        793

                        Online

                        32.5k

                        Benutzer

                        81.7k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe