Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Differenz zwischen zwei Tagen / Werten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Differenz zwischen zwei Tagen / Werten

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

      Hallo,
      ich habe einen Datenpunkt: 0_userdata.0.aktueller-zaehlerstand

      Dieser Datenpunkt wird mehrmals täglich aktualisiert und und der Zählerstand steigt. Wie kann ich jetzt mit js die Differenz zwischen heute und dem Vortag anzeigen lassen und einen neuen Datenpunkt mit der Differenz erstellen?

      Beispiel:
      Datenpunkt war gestern: 0_userdata.0.aktueller-zaehlerstand 11000
      Datenpunkt: ist heute heute: 0_userdata.0.aktueller-zaehlerstand 11020
      Differenz = 20

      Kann mir da jemand helfen, vielleicht sogar mit einem Skript?

      paul53 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @hagst last edited by

        @hagst sagte: Differenz zwischen heute und dem Vortag anzeigen lassen und einen neuen Datenpunkt mit der Differenz erstellen?

        Um 23:59 Uhr den aktuellen Zählerstand in einen eigenen Datenpunkt schreiben und diesen Wert vom aktuellen Zählerstand subtrahieren.

        H 1 Reply Last reply Reply Quote 0
        • H
          hagst @paul53 last edited by

          @paul53 sagte in Differenz zwischen zwei Tagen / Werten:

          Um 23:59 Uhr den aktuellen Zählerstand in einen eigenen Datenpunkt schreiben

          Kannst Du mir dabei helfen? Wenn ich den Wert habe, sollte ich den Rest schon schaffen.

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @hagst last edited by paul53

            @hagst sagte: Kannst Du mir dabei helfen?

            const idZaehler = '0_userdata.0.aktueller-zaehlerstand'; // vorhanden
            const idGestern = '0_userdata.0.zaehlerstand-gestern'; // zu erstellen
            const idHeute = '0_userdata.0.verbrauch-heute'; // zu erstellen
            
            var gestern = getState(idGestern).val;
            
            on(idZaehler, function(dp) {
                setState(idHeute, dp.state.val - gestern, true);
            });
            
            schedule('59 59 23 * * *', function() {
                gestern = getState(idZaehler).val;
                setState(idGestern, gestern, true);
            });
            
            1 Reply Last reply Reply Quote 0
            • H
              hagst last edited by hagst

              @paul53
              Danke für die Hilfe, wenn ich jetzt die beiden Datenpunkte habe, sollte das doch klappen, oder?

              const idD2 = '0_userdata.0.zaehlerstand-gestern';
              const idD1 = '0_userdata.0.verbrauch-heute';
              const idSumme = '0_userdata.0.zaehlerstand-differenz'; 
               
              var D1 = getState(idD1).val;
              var D2 = getState(idD2).val;
               
              if(!existsState(idSumme)) createState(idSumme, D1 - D2, {type: 'number', unit: 'Az'}); 
               
              function summe() {
                  setState(idSumme, D1 - D2, true);
              }
               
              on(idD1, function(dp) {
                 D1 = dp.state.val;
                 summe();
              });
              on(idD2, function(dp) {
                 D2 = dp.state.val;
                 summe();
              });
              
              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @hagst last edited by paul53

                @hagst sagte: sollte das doch klappen, oder?

                Ich verstehen nicht, was Verbrauch-heute - Zählerstand-gestern ergeben soll?
                Was ist die Einheit "Az"?

                Der heutige Verbrauch ist aktueller_Zählerstand - Zählerstand-gestern. Der aktuelle Zählerstand muss um Mitternacht in den Zählerstand-gestern geschrieben werden.

                H 2 Replies Last reply Reply Quote 0
                • H
                  hagst @paul53 last edited by

                  @paul53
                  Ähhhhhh, ich habe da wirklich ganz großen Mist geschrieben 😞 Ich vestehe es im Moment auch nicht, was ich da gemacht habe. Ich trinke mir jetzt einen Kaffee, gehe danach unter die Dusche und versuche es nochmal.

                  1 Reply Last reply Reply Quote 0
                  • H
                    hagst @paul53 last edited by

                    @paul53
                    So, der nächste Versuch 🙂

                    const idD1 = '0_userdata.0.zaehlerstand-gestern'; // Zählerstand gestern
                    const idD2 = ' 0_userdata.0.aktueller-zaehlerstand'; // Zählerstand aktuell
                    const idSumme = '0_userdata.0.zaehlerstand-differenz'; // Differenz 
                     
                    var D1 = getState(idD1).val;
                    var D2 = getState(idD2).val;
                     
                    if(!existsState(idSumme)) createState(idSumme, D2 - D1, {type: 'number'}); 
                     
                    function summe() {
                        setState(idSumme, D2 - D1, true);
                    }
                     
                    on(idD1, function(dp) {
                       D1 = dp.state.val;
                       summe();
                    });
                    on(idD2, function(dp) {
                       D2 = dp.state.val;
                       summe();
                    });
                    

                    Was ich auch nicht verstehe in Deinem Script, was ist "0_userdata.0.verbrauch-heute", ich bin etwas verwirrt.

                    Ich habe einen Datenpunkt der mehrmals täglich steigt und fortlaufend ist "0_userdata.0.aktueller-zaehlerstand". Jetzt möchte ich einen Datenpunkt haben, der mir anzeigt, um wieviel der Zählerstand heute gestiegen ist.

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @hagst last edited by paul53

                      @hagst sagte: was ist "0_userdata.0.verbrauch-heute"

                      Bei dir: "0_userdata.0.zaehlerstand-differenz".
                      In welcher Maßeinheit wird gezählt?
                      Wo wird bei dir "0_userdata.0.zaehlerstand-gestern" aktualisiert? Der Wert muss sich einmal täglich ändern. Anstelle von Zeilen 14 bis 17:

                      schedule('59 59 23 * * *', function() {
                          D1 = D2;
                          setState(idD1, D1, true);
                      });
                      
                      H 1 Reply Last reply Reply Quote 0
                      • H
                        hagst @paul53 last edited by

                        @paul53
                        Gezählt wird die Unterbrechnung einer Lichtschranke, leider nur fortlaufend und nicht täglich "0_userdata.0.aktueller-zaehlerstand". Die Werte der Lichtschranke werden täglich mehrmals aktualisiert und in "0_userdata.0.aktueller-zaehlerstand" geschrieben. An einem Tag in der Woche ändert sich der Wert nicht, weil die Lichtschranke aus ist.

                        Jetzt würde ich ganz gerne sehen, um wieviele Unterbrechungen der Wert pro Tag steigt.

                        Jetzt muss praktisch der Wert von gestern um 23:59:59 als Datenpunkt unter "0_userdata.0.zaehlerstand-gestern" gespeichert werden. Danach kann ich von "0_userdata.0.aktueller-zaehlerstand" den Wert "0_userdata.0.zaehlerstand-gestern" subtrahieren und habe als Ergebnis die Differenz zwischen gestern und heute.

                        Btw. Mir raucht der Kopf und langsam verstehe ich nur noch Bahnhof 😕

                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @hagst last edited by paul53

                          @hagst sagte: wieviele Unterbrechungen der Wert pro Tag steigt.

                          Also die Zahl der Unterbrechungen seit Mitternacht? Das macht das Skript mit dem Schedule um Mitternacht.
                          Wenn es sich um eine Lichtschranke handelt, ist der Begriff "Verbrauch" natürlich nicht passend.

                          H 1 Reply Last reply Reply Quote 0
                          • H
                            hagst @paul53 last edited by hagst

                            @paul53 sagte in Differenz zwischen zwei Tagen / Werten:

                            Also die Zahl der Unterbrechungen seit Mitternacht?

                            Genau. Bis gestern wurde ide Lichtschranke z.B. 65000 mal unterbochen und in den Datenpunkt "0_userdata.0.aktueller-zaehlerstand" als Wert geschrieben. Heute wird die Lichtschranke erneut zu unterschiedlichen Zeiten unterbrochen und der Datenpunkt "0_userdata.0.aktueller-zaehlerstand" geändert. Jetzt würde ich gerne sehen, wie oft seit 00:00:00 Uhr am heutigen Tag die Lichtschranke schon unterbrochen wurde.

                            paul53 1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @hagst last edited by paul53

                              @hagst
                              Dann passt das mit dem Schedule kurz vor Mitternacht.
                              Wenn noch ein Datenpunkt zum Historisieren benötigt wird, um die Unterbrechungen pro Tag zu erfassen, kann man die Schedule-Funktion noch erweitern:

                              schedule('59 59 23 * * *', function() {
                                  setState('0_userdata.0.zaehlerdifferenz-gestern', D2 - D1, true);
                                  D1 = D2;
                                  setState(idD1, D1, true);
                              });
                              

                              Damit im Diagramm der historisierten Werte das Datum stimmt, macht man es kurz vor Mitternacht.

                              H 1 Reply Last reply Reply Quote 0
                              • H
                                hagst @paul53 last edited by

                                @paul53
                                Vielen Dank Paul, ich glaube jetzt verstehe ich es so langsam. Um 00:00:01 werde ich sehen, ob es geklappt hat 🙂

                                1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @hagst last edited by paul53

                                  @hagst sagte: ich habe einen Datenpunkt: 0_userdata.0.aktueller-zaehlerstand

                                  Anmerkung: Hättest Du die ID strukturiert, z.B. "0_userdata.0.lichtschranke.zaehlerstand_aktuell", wäre ich nicht auf die Idee gekommen, die Differenz zu gestern "Verbrauch" zu nennen.

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  654
                                  Online

                                  31.8k
                                  Users

                                  80.0k
                                  Topics

                                  1.3m
                                  Posts

                                  2
                                  15
                                  488
                                  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