Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] 1. Schritte mit Javascript: Prob mit setInterval?

    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

    [gelöst] 1. Schritte mit Javascript: Prob mit setInterval?

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

      Guten Tag, bin nun dabei, meinen ioBroker für mein zukünftiges SmartHome anzupassen und probiere 1. Schritte mit Javascript:

      Dies ist mein allererstes Script, was ich mir aus einem iobroker-Javascript-Tutorial zusammengezimmert habe:

      // Datenpunkt-ID
      var idStromverbrauch = '0_userdata.0.Zuhause.Stromverbrauch';
      var idSolarprod = 'fritzdect.0.DECT_116570452148.power';
      var idStromsaldo = 'sonoff.0.Hichi-SGM-1._Verbrauch_Aktuell';
       
      // Variablendeklaration
      var nStrSal = getState(idStromsaldo).val;
      var nSolProd = getState(idSolarprod).val;
       
      // Berechnung des eigentlichen Stromverbrauchs im Haus ohne BKW
      function Stromverbrauch() {
          var nStrVer = nStrSal + nSolProd;
      		
      	setState(idStromverbrauch, nStrVer, true);
      }
      
      setInterval(Stromverbrauch, 5000);
      

      Mit einem Node Red Tutorial gibt es jetzt auch schon eine grafisch langweilige Übersicht der 3 verwendeten Werte:

      8ddf8016-5bad-432c-a4cb-5f568a679c11-image.png

      Wie man sieht, haut der Saldo aber nicht hin. Und wenn ich es richtig sehe, wird mein eigenes Objekt "Stromverbrauch" eben nicht alle 5000 Millisekunden aktualisiert.

      Aber ist setInterval nicht genau dafür da?

      PS: Alle Werte als Ganzzahl zu formatieren, ist der nächste Schritt. ^^

      T 1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @Shai0Hulud last edited by ticaki

        @shai0hulud
        Du rechnest alle 5 Sekunden mit den selben Zahlen 🙂

        // Datenpunkt-ID
        var idStromverbrauch = '0_userdata.0.Zuhause.Stromverbrauch';
        var idSolarprod = 'fritzdect.0.DECT_116570452148.power';
        var idStromsaldo = 'sonoff.0.Hichi-SGM-1._Verbrauch_Aktuell';
        
         
        // Berechnung des eigentlichen Stromverbrauchs im Haus ohne BKW
        function Stromverbrauch() {
               var nStrVer = getState(idStromsaldo).val + getState(idSolarprod).val;
        		
        	setState(idStromverbrauch, nStrVer, true);
        }
         
        setInterval(Stromverbrauch, 5000);
        
        // alternativ geht auch schedule('*/5 * * * * *',  Stromverbrauch) // jede Sekunde die durch 5 ohne Rest teilbar ist
        

        PS: Alle Werte als Ganzzahl zu formatieren, ist der nächste Schritt. ^^

        nStrVer = Math.round(nStrVer)
        

        Ich würde sie aber vorm rechnen ganzzahlig machen sonst stimmt das Ergebnis wieder nicht.

        S 1 Reply Last reply Reply Quote 1
        • S
          Shai0Hulud @ticaki last edited by

          @ticaki said in 1. Schritte mit Javascript: Prob mit setInterval?:

          @shai0hulud
          Du rechnest alle 5 Sekunden mit den selben Zahlen 🙂

          Oops, stimmt ja. Wenn die definierten Variablen außerhalb der Funktion gefüttert werden ^^

          // Datenpunkt-ID
          var idStromsaldo = 'sonoff.0.Hichi-SGM-1._Verbrauch_Aktuell';
          var idSolarprod = '0_userdata.0.Zuhause.SolarproduktionGZ';
          var idStromverbrauch = '0_userdata.0.Zuhause.Stromverbrauch';
           
          // Variablendeklaration
           
          // Berechnung des eigentlichen Stromverbrauchs im Haus ohne BKW
          function Stromverbrauch() {
              var nStrSal = getState(idStromsaldo).val;
              var nSolProd = getState(idSolarprod).val;
              var nStrVer = nStrSal + nSolProd;
          
          	setState(idStromverbrauch, nStrVer, true);
          }
          
          setInterval(Stromverbrauch, 5000);
          

          So passt es jetzt, muss nur die Solarproduktion vorher ganzzahlig machen, da der Hichi Lesekopf den Stromverbrauch bereits als Ganzzahl ausgibt.

          58daa850-aa49-4e96-98fc-ecfc20b4c6a9-image.png

          Merci!

          T 1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer @Shai0Hulud last edited by ticaki

            @shai0hulud
            Noch eine kleinigkeit die mich vor Jahren nerven gekostet hat.

            function eins(){ 
              var a = 'test'
              let b = 'test'
             }
            
            function zwei() {
              log(a) // test
              log(b) // error
            }
            eins()
            zwei()
            

            Daher benutze let wenns nicht global sein soll 🙂

            S paul53 2 Replies Last reply Reply Quote 1
            • S
              Shai0Hulud @ticaki last edited by

              @ticaki said in 1. Schritte mit Javascript: Prob mit setInterval?:

              @shai0hulud
              Noch eine kleinigkeit die mich vor Jahren nerven gekostet hat.

              function eins(){ 
                var a = 'test'
                let b = 'test'
               }
              
              function zwei() {
                log(a) // test
                log(b) // error
              }
              eins()
              zwei()
              

              Daher benutze let wenns nicht global sein soll 🙂

              Ich bin ja JS Noob, aber wenn ich die Googleergebnisse richtig interpretiere, ist var "global" gültig, let nur innerhalb des Funktions-Blocks.

              Und das die Meinungen da sehr auseinandergehen, was man standardmäßig nutzen sollte ^^

              Danke nochmal!

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

                @ticaki sagte: Daher benutze let wenns nicht global sein soll

                Wenn eine Variable innerhalb einer Funktion deklariert wird - egal, ob mit var oder let - ist sie lokal. log(a) in Funktion zwei() liefert

                ReferenceError: a is not defined
                
                T paul53 2 Replies Last reply Reply Quote 0
                • T
                  ticaki Developer @paul53 last edited by

                  @paul53
                  Recht hast du... und wann hat sich das geändert? Das war mal anders

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

                    @ticaki sagte: Das war mal anders

                    Daran kann ich mich nicht erinnern.

                    1 Reply Last reply Reply Quote 0
                    • T
                      ticaki Developer last edited by

                      Dann sorry für die falsche Info und Danke für die Berichtigung.

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

                        @paul53 sagte: Daher benutze let wenns nicht global sein soll

                        Das trifft auf Verbundanweisungen zu - nicht auf Funktionen:

                        var a = 1;
                        let b = 2;
                        if(true) {
                            var a = 3;
                            let b = 4;
                        }
                        log(a); // 3
                        log(b); // 2
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        875
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        319
                        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