Navigation

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

    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

    Script zum hochrechnen des Stromverbrauchs

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

      Ich habe mir vorgestellt das ich meinen voraussichtlichen Jahresverbrauch hochrechnen und den dann in einen Datenpunkt schreiben möchte.
      Also nach dem aktuellen Zählerstand bzw. bisherigen Verbrauch möchte ich den simpel auf das volle Jahr hochrechnen. Das allerdings möglichst Taggenau.
      Mir ist klar dass das nie ein genaues Ergebnis ergeben wird, weil ja im Herbst und Winter länger Licht usw. an ist und deshalb das nur ein grober Schätzwert werden wird.
      Dazu suche ich jetzt also nach einer Formel bzw. einem Skript mit dem ich das umsetzen kann.
      So in etwa:
      Aktueller Verbrauch / Tage bisher * 365

      Hat jemand eine Idee wie man das in ein Skript packen kann? Vor allem die Abfrage "Tage bisher" bereitet mir da Kopfzerbrechen.

      Chaot 1 Reply Last reply Reply Quote 0
      • Chaot
        Chaot @Chaot last edited by

        Kann sowas funktionieren oder ist da ein Denkfehler drin?

        schedule('{"time":{"exactTime":true,"start":"00:01"},"period":{"days":1}}', async function () {
          setState("0_userdata.0.Strom.Hochrechnung"/*Hochrechnung*/, (parseFloat((parseFloat(getState("0_userdata.0.Stromverbrauch.Verbrauch_Abrechnungsjahr").val) / formatDate(new Date(), "j"))) * 365));
        });
        

        Soweit ich das gelesen habe müsste ich mit dem Befehl
        date +%j
        ja den aktuellen Tag des Jahres ausggeben bekommen. Aber ich habe keine Ahnung ob das unter Javascript so umsetzbar ist.

        1 Reply Last reply Reply Quote 0
        • arteck
          arteck Developer Most Active last edited by

          @chaot gesehen

          https://forum.iobroker.net/topic/13600/erledigt-aktuellen-tag-des-jahres-errechnen

          Chaot 1 Reply Last reply Reply Quote 0
          • Chaot
            Chaot @arteck last edited by

            @arteck
            Danke für den Link. Den habe ich gestern gesehen und ausprobiert.
            Mit der Konsolenausgabe kam irgendwie nichts und wenn ich es versucht habe in einen Datenpunkt zu schreiben kam eine Fehlermeldung:

            
            javascript.0 2022-06-27 08:38:00.048	error	at processTimers (node:internal/timers:502:7)
            javascript.0 2022-06-27 08:38:00.048	error	at listOnTimeout (node:internal/timers:559:17)
            javascript.0 2022-06-27 08:38:00.048	error	at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7)
            javascript.0 2022-06-27 08:38:00.047	error	at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28
            javascript.0 2022-06-27 08:38:00.047	error	at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15)
            javascript.0 2022-06-27 08:38:00.046	error	at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1408:34)
            javascript.0 2022-06-27 08:38:00.046	error	at Object.<anonymous> (script.js.Strom.TagDesJahres:9:58)
            javascript.0 2022-06-27 08:38:00.040	error	Error in callback: TypeError: tag is not a function
            
            schedule("* * * * *", function () {
            // Tag des Jahres
               var jetzt = new Date();
               var Jahr = jetzt.getFullYear();
               var heutestart = new Date(jetzt.setHours(0,0,0,0));
               var neujahr = new Date(Jahr,0,1);
               var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1;
               var tag = Math.ceil(difftage);
               setState("0_userdata.0.TagDesJahres"/*TagDesJahres*/, tag(tag));
            });
            
            
            arteck 1 Reply Last reply Reply Quote 0
            • mickym
              mickym Most Active last edited by mickym

              Gelöscht

              1 Reply Last reply Reply Quote 0
              • arteck
                arteck Developer Most Active @Chaot last edited by arteck

                @chaot sagte in Script zum hochrechnen des Stromverbrauchs:

                setState("0_userdata.0.TagDesJahres"/TagDesJahres/, tag(tag));

                mach doch nicht so kopliziert

                hier ist der Fehler, so muss es sein

                setState("0_userdata.0.TagDesJahres"/*TagDesJahres*/, tag);
                

                aber schau erst obs geht.. ohne den schedule geraffel

                // Tag des Jahres
                   var jetzt = new Date();
                   var Jahr = jetzt.getFullYear();
                   var heutestart = new Date(jetzt.setHours(0,0,0,0));
                   var neujahr = new Date(Jahr,0,1);
                   var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1;
                   var tag = Math.ceil(difftage);
                   log.console("tag ----------> " + tag);
                
                Chaot 1 Reply Last reply Reply Quote 0
                • Chaot
                  Chaot @arteck last edited by

                  @arteck sagte in Script zum hochrechnen des Stromverbrauchs:

                  log.console("tag ----------> " + tag);

                  Mag mich nicht 😠
                  Ich hatte noch eine Fehlermeldung in der Rechenzeile (6) die ich mit .getTime wegbekommen habe.
                  log.console gibt eine Fehlermeldung und unter console.log kommt keine Ausgabe.

                  // Tag des Jahres
                     var jetzt = new Date();
                     var Jahr = jetzt.getFullYear();
                     var heutestart = new Date(jetzt.setHours(0,0,0,0)).getTime();
                     var neujahr = new Date(Jahr,0,1).getTime();
                     var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1;
                     var tag = Math.ceil(difftage);
                     console.log("tag ----------> " + tag);
                  
                  arteck 1 Reply Last reply Reply Quote 0
                  • arteck
                    arteck Developer Most Active @Chaot last edited by arteck

                    @chaot dann andersrum.. verwechsel ich immrt

                    log.console("tag ----------> " + tag);
                    
                    Chaot 1 Reply Last reply Reply Quote 0
                    • Chaot
                      Chaot @arteck last edited by

                      @arteck
                      Kommt zwar auch nichts in der Konsole, aber das Teil läuft!!!!!!

                      // Hochrechnung
                         var jetzt = new Date();
                         var Jahr = jetzt.getFullYear();
                         var heutestart = new Date(jetzt.setHours(0,0,0,0)).getTime();
                         var neujahr = new Date(Jahr,0,1).getTime();
                         var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1;
                         var tag = Math.ceil(difftage);
                          setState("0_userdata.0.Strom.Hochrechnung"/*Hochrechnung*/, ((getState("0_userdata.0.Stromverbrauch.Verbrauch_Abrechnungsjahr").val) / tag) * 365);
                      
                      
                      Chaot 1 Reply Last reply Reply Quote 0
                      • Chaot
                        Chaot @Chaot last edited by

                        @chaot
                        Jetzt noch die Kommastellen wegbekommen und ich bin zufrieden 😊

                        Chaot 1 Reply Last reply Reply Quote 0
                        • Chaot
                          Chaot @Chaot last edited by

                          Das Script funktioniert so wie ich das will.
                          Danke @arteck für die Tips und Hinweise in die richtige Richtung.

                          // Hochrechnung Jahresverbrauch
                          schedule("0,1 0 * * *", async function () {
                             var jetzt = new Date();
                             var Jahr = jetzt.getFullYear();
                             var heutestart = new Date(jetzt.setHours(0,0,0,0)).getTime();
                             var neujahr = new Date(Jahr,0,1).getTime();
                             var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1;
                             var tag = Math.ceil(difftage);
                             setState("0_userdata.0.Strom.Hochrechnung"/*Hochrechnung*/, (((getState("0_userdata.0.Stromverbrauch.Verbrauch_Abrechnungsjahr").val) / tag) * 365).toFixed(0));
                          });
                          
                          1 Reply Last reply Reply Quote 1
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          888
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          javascript
                          3
                          11
                          578
                          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