Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Zähleränderungen pro Tag berechnen?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Zähleränderungen pro Tag berechnen?

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

      Hallo,
      ich habe hier Zugriff auf einen jeweils aktuellen Stromzählerstand, also z.B. jetzt gerade 100. Der wird laufend aktualisiert und steht morgen z.B. bei 115.
      Ich würde jetzt gerne die Zählerstandsänderungen innerhalb von 24h festhalten als Tagesverbräuche und die in der History speichern, also z.B. 15 für heute.

      Das ist doch bestimmt keine neue Idee hier.

      Hat jemand einen Tip, wie man das einfach lösen könnte?

      Homoran haus-automatisierung R 3 Replies Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @BertDerKleine last edited by

        @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

        Das ist doch bestimmt keine neue Idee hier.

        so ist es!

        @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

        Hat jemand einen Tip, wie man das einfach lösen könnte?

        DP "alter Zählerstand" anlegen.

        abends um 23:59:45
        Zählerstand-alterZähletstand berechnen und danach den DP mit aktuellem Zählerstand befüllen.

        BertDerKleine 2 Replies Last reply Reply Quote 0
        • haus-automatisierung
          haus-automatisierung Developer Most Active @BertDerKleine last edited by haus-automatisierung

          @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

          Hat jemand einen Tip, wie man das einfach lösen könnte?

          z.B. mit dem Statistics-Adapter. Delta auf dem Datenpunkt aktivieren und fertig. Dann noch History-Logging auf dem Statistics-Datenpunkt und Du hast deine Historie mit Tages-Verbräuchen.

          BertDerKleine 1 Reply Last reply Reply Quote 1
          • BertDerKleine
            BertDerKleine @Homoran last edited by

            @homoran
            Danke, probiere ich auch mal aus.

            1 Reply Last reply Reply Quote 0
            • BertDerKleine
              BertDerKleine @haus-automatisierung last edited by

              @haus-automatisierung
              Ah, an einen solchen Adapter hätte ich nicht gedacht. Schaue ich mir an. Danke.

              1 Reply Last reply Reply Quote 0
              • R
                Rushmed Most Active @BertDerKleine last edited by Rushmed

                @bertderkleine Wenns wie bei dir um den Stromzähler geht vll. mal den Sourceanalytix Adapter ansehen. Der kann dir auch gleich die Kosten, sogar unter Berücksichtgung des Grunpreises mit ausgeben.

                BertDerKleine 1 Reply Last reply Reply Quote 0
                • BertDerKleine
                  BertDerKleine @Rushmed last edited by

                  @rushmed
                  Danke, schaue ich mir dann auch mal an.

                  1 Reply Last reply Reply Quote 0
                  • BertDerKleine
                    BertDerKleine @Homoran last edited by

                    @homoran sagte in Zähleränderungen pro Tag berechnen?:

                    DP "alter Zählerstand" anlegen.
                    abends um 23:59:45
                    Zählerstand-alterZähletstand berechnen und danach den DP mit aktuellem Zählerstand befüllen.

                    Ich habe das jetzt gerade mal versucht mit:

                    // Tages-Stromverbrauch messen
                    on({id: [].concat(compareTime("23:50", "null", "==")), val: true}, async function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      ZaehlerVerbrauchGestern = getState("0_userdata.0.AlterVerbauchsZaehlerStand").val;
                      ZaehlerVerbrauchHeute = getState("0_userdata.0.Verbrauchszaehler_SHM").val;
                      DeltaTagesVerbrauch = parseFloat(ZaehlerVerbrauchHeute) - ZaehlerVerbrauchGestern;
                      setState("0_userdata.0.TagesStromVerbrauch"/*TagesStromVerbrauch*/, DeltaTagesVerbrauch, true);
                      setState("0_userdata.0.AlterVerbauchsZaehlerStand"/*AlterVerbauchsZaehlerStand*/, ZaehlerVerbrauchHeute, true);
                      console.log(('TagesStromverbrauch: ' + String(('' + getState("0_userdata.0.TagesStromVerbrauch").val))));
                    });
                    

                    Leider bekomme ich da einen Fehler, den ich nicht verstehe:

                    script.js.Verbrauchszählung Error by subscription: empty ID defined. All states matched.
                    

                    Mir ist nicht klar, was da eine "empty ID" ist.

                    Homoran 2 Replies Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @BertDerKleine last edited by

                      @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

                      mal versucht mit:

                      ist das ein Blockly, dann bitte zeigen!

                      BertDerKleine 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @BertDerKleine last edited by

                        @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

                        String(('' + getState("0

                        fehlt da etwas zwischen '..'

                        1 Reply Last reply Reply Quote 0
                        • BertDerKleine
                          BertDerKleine @Homoran last edited by

                          @homoran sagte in Zähleränderungen pro Tag berechnen?:

                          @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

                          mal versucht mit:

                          ist das ein Blockly, dann bitte zeigen!

                          So sieht es aus:
                          delta.jpg

                          Homoran 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @BertDerKleine last edited by Homoran

                            @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

                            So sieht es aus:

                            dann ist klar!
                            der Trigger triggert auf keine ID

                            Das ist für deine Aufgabe auch der falsche Triggerblock.
                            Du brauchst den CRON Trigger

                            BertDerKleine 1 Reply Last reply Reply Quote 0
                            • BertDerKleine
                              BertDerKleine @Homoran last edited by BertDerKleine

                              @homoran sagte in Zähleränderungen pro Tag berechnen?:

                              @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

                              So sieht es aus:

                              dann ist klar!
                              der Trigger triggert auf keine ID

                              Kannst Du das für Aussenstehende übersetzen?
                              "Falls aktuelle zeit = x ist wahr" klingt für mich erstmal schlüssig als Auslöser und die Blöcke docken problemlos aneinander. Keine Ahnung was mit "ID" hier gemeint ist.

                              Das ist für deine Aufgabe auch der falsche Triggerblock.
                              Du brauchst den CRON Trigger

                              Ich habe jetzt mal nach anderem gesucht. Ist dieser "Zeitplan"-Baustein das, was Du meinst?

                              zeitplan.jpg
                              Damit gibts jedenfalls keinen sofortigen Fehler.

                              Da gibts auch andere Bausteine, die "CRON" drinhaben.

                              Homoran 1 Reply Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @BertDerKleine last edited by

                                @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

                                Falls aktuelle zeit = x ist wahr" klingt für mich erstmal schlüssig

                                istces auch, aber es ist keine ID (Datenpunkt)
                                und nur diese dürfen dahin

                                @bertderkleine sagte in Zähleränderungen pro Tag berechnen?:

                                Da gibts auch andere Bausteine, die "CRON" drinhaben.

                                dann nimm die anderen
                                der von dir gewählte kann buggy sein!
                                nimm einen eifachen CRON

                                BertDerKleine 1 Reply Last reply Reply Quote 1
                                • BertDerKleine
                                  BertDerKleine @Homoran last edited by BertDerKleine

                                  @homoran sagte in Zähleränderungen pro Tag berechnen?:

                                  dann nimm die anderen
                                  der von dir gewählte kann buggy sein!
                                  nimm einen eifachen CRON

                                  Der reine "CRON" ist aber so ein Puzzlestück. Wo stopfe ich den denn rein?
                                  M.a.W. welchen Trigger benutze ich als Klammer?

                                  Homoran 1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @BertDerKleine last edited by

                                    @bertderkleine
                                    Screenshot_20221218-133028_Firefox.jpg

                                    Screenshot_20221218-132953_Firefox.jpg

                                    BertDerKleine 1 Reply Last reply Reply Quote 1
                                    • BertDerKleine
                                      BertDerKleine @Homoran last edited by

                                      @homoran
                                      Genau den Zeitplan benutze ich jetzt. Morgen weiss ich ob's geklappt hat. 🙂

                                      1 Reply Last reply Reply Quote 0
                                      • P
                                        Pe Bo last edited by

                                        Hi Leute, darf ich mich hier mal anschließen?

                                        Meine Umsetzung hilft vielleicht auch dem TE. Sie ist leider noch nicht perfekt, dazu am Ende mehr. Sie ist für Gas, kann aber neben dem Verbrauch auch gleich die Kosten mitberechnen und lässt sich einfach auf Strom anpassen.

                                        Ich lese mit Aqara die Gaszählerimpulse und habe einen DP Gaszählerstand, der auch zuverlässig in Schritten von 0,1m³ aktualsisiert wird. So weit so gut. Mit dem Blockly zur Verbrauchsberechnung hängt es aber noch ein wenig und ich weiß nicht, warum. Folgende User-Datenpunkte gibt es...

                                        Präfixe:
                                        h_ / d_ / w_ als Präfix für Stunde, Tag und Woche

                                        zu jedem Präfix dann die Werte:
                                        VerbrauchVolumen, VerbrauchEnergie, VerbrauchKosten, letzterZählerstand

                                        und die allgemeinen DP:
                                        Gaszählerstand, aktErdgasArbeitspreis, aktErdgasBrennwert, aktErdgasZustandszahl

                                        Das Blockly läuft stündlich und aktualisiert die Stundenwerte, prüft ob Mitternach ist und aktualisiert die Tageswerte, prüft dabei ob Montag ist und aktualisiert die Wochenwerte.

                                        Hier das Blockly als Quellcode:

                                        schedule("0 * * * *", async function () {
                                          // Aufruf stündlich, immer vorherige Stunde berechnen
                                          setState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchVolumen"/*h_VerbrauchVolumen*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Gaszählerstand").val) - getState("0_userdata.0.Gaszähler.Stunde.h_letzter_Zählerstand").val)*10)/10, true);
                                          setState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchEnergie"/*h_VerbrauchEnergie*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchVolumen").val) * parseFloat(getState("0_userdata.0.Gaszähler.aktErdgasZustandszahl").val) * getState("0_userdata.0.Gaszähler.aktErdgasBrennwert").val)*100)/100, true);
                                          setState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchKosten"/*h_VerbrauchKosten*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchEnergie").val) * getState("0_userdata.0.Gaszähler.aktErdgasArbeitspreis").val)*100)/100, true);
                                          setState("0_userdata.0.Gaszähler.Stunde.h_letzter_Zählerstand"/*h_letzter Zählerstand*/, getState("0_userdata.0.Gaszähler.Gaszählerstand").val, true);
                                          // Wenn Stunde gleich 0 dann Vortag berechnen
                                          if ((new Date().getHours()) == 0) {
                                            setState("0_userdata.0.Gaszähler.Tag.d_VerbrauchVolumen"/*d_VerbrauchVolumen*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Gaszählerstand").val) - getState("0_userdata.0.Gaszähler.Tag.d_letzterZählerstand").val)*10)/10, true);
                                            setState("0_userdata.0.Gaszähler.Tag.d_VerbrauchEnergie"/*d_VerbrauchEnergie*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Tag.d_VerbrauchVolumen").val) * parseFloat(getState("0_userdata.0.Gaszähler.aktErdgasZustandszahl").val) * getState("0_userdata.0.Gaszähler.aktErdgasBrennwert").val)*100)/100, true);
                                            setState("0_userdata.0.Gaszähler.Tag.d_VerbrauchKosten"/*d_VerbrauchKosten*/, Math.round((parseFloat((parseFloat(getState("0_userdata.0.Gaszähler.Tag.d_VerbrauchEnergie").val) * getState("0_userdata.0.Gaszähler.aktErdgasArbeitspreis").val)) / 100)*100)/100, true);
                                            setState("0_userdata.0.Gaszähler.Tag.d_letzterZählerstand"/*d_letzterZählerstand*/, getState("0_userdata.0.Gaszähler.Gaszählerstand").val, true);
                                            // Wenn Wochentag gleich 1 (Montag) dann Vorwoche berechnen
                                            if ((new Date().getDay() === 0 ? 7 : new Date().getDay()) == 1) {
                                              setState("0_userdata.0.Gaszähler.Woche.w_VerbrauchVolumen"/*w_VerbrauchVolumen*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Gaszählerstand").val) - getState("0_userdata.0.Gaszähler.Woche.w_letzterZählerstand").val)*10)/10, true);
                                              setState("0_userdata.0.Gaszähler.Woche.w_VerbrauchEnergie"/*w_VerbrauchEnergie*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Woche.w_VerbrauchVolumen").val) * parseFloat(getState("0_userdata.0.Gaszähler.aktErdgasZustandszahl").val) * getState("0_userdata.0.Gaszähler.aktErdgasBrennwert").val)*100)/100, true);
                                              setState("0_userdata.0.Gaszähler.Woche.w_VerbrauchKosten"/*w_VerbrauchKosten*/, Math.round((parseFloat((parseFloat(getState("0_userdata.0.Gaszähler.Woche.w_VerbrauchEnergie").val) * getState("0_userdata.0.Gaszähler.aktErdgasArbeitspreis").val)) / 100)*100)/100, true);
                                              setState("0_userdata.0.Gaszähler.Woche.w_letzterZählerstand"/*w_letzterZählerstand*/, getState("0_userdata.0.Gaszähler.Gaszählerstand").val, true);
                                            }
                                          }
                                        });
                                        

                                        und hier in der Grafik:
                                        38bf1f3f-52b6-44f6-82da-cfa385f9121f-image.png

                                        In den allermeisten Fällen läuft es zuverlässig jede Stunde und aktualisiert alle Werte die zu dem jeweiligen Zeitpunkt fällig sind. Manchmal jedoch wird je Sektion nur der letzte Punkt ausgeführt, also nur der letzte Zählerstand von Stunde, Tag oder Woche mit dem aktuellen Zählerstand aktualisiert. Die Berechnungen werden in den seltenen Fällen nicht ausgeführt oder nicht geschrieben.

                                        Hat jemand eine Idee, warum das manchmal passieren könnte? Oder was ich zum Debuggen unternehmen kann? In der Console unter dem Script erscheinen keine Fehler, im Protokoll auch nicht. Da bin ich ein wenig ratlos.

                                        Viele Grüße,
                                        Peter

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

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        857
                                        Online

                                        32.0k
                                        Users

                                        80.5k
                                        Topics

                                        1.3m
                                        Posts

                                        5
                                        18
                                        505
                                        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