Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Zeitsteuerung geht nicht

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    Zeitsteuerung geht nicht

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

      Hallo,

      Du musst in deiner Zeitfunktion wo die if abfragen stafinden immer mit````
      getState(aktor).val

      1 Reply Last reply Reply Quote 0
      • N
        noxx last edited by

        Wird doch

        var aktor = getState(idAktor).val;
        

        Und in der if

        if(!aktor) setState(idAktor, true);
        

        Die Zeitfenster sind ja zb wir folgt definiert:

         var morgen = compareTime('05:00', '07:30', 'between');
        

        um 5:00 springt der Aktor aber nicht an. Mache ich einen Script Neustart um 5:01,

        geht der Aktor an.

        Als würde das Script gehen, aber der Cron nicht

        schedule('* * * * *', Zeitschaltung);
        
        1 Reply Last reply Reply Quote 0
        • N
          noxx last edited by

          Hier mal eingebautem Log.

          Sollte nicht das LOG 3 angezeigt werden, wenn man ausserhalb des

          Zeitfensters ist?

          ! ````
          var idAktor = "hue.0.Philips_hue.Sonoff2.on"/Philips_hue.Sonoff2.on/;
          ! //var minOn = false;
          var temp = getState(idTemp).val;
          var aktor = getState(idAktor).val;
          ! function Zeitschaltung() {
          log("LOG 1: " + idAktor + ": " + aktor);
          var morgen = compareTime('05:00', '06:30', 'between');
          var mittag = compareTime('10:00', '11:30', 'between');
          var nachmittag = compareTime('14:00', '16:30', 'between');
          var abend = compareTime('20:00', '22:00', 'between');
          if(morgen || mittag || nachmittag || abend)
          {
          log("LOG 2: " + idAktor + ": " + aktor);
          if(!aktor) setState(idAktor, true);
          }
          else if(aktor)
          {
          setState(idAktor, false);
          log("LOG 3: " + idAktor + ": " + aktor);
          }
          }
          ! schedule('* * * * *', Zeitschaltung);

          
          

          09:19:26.046 [info] javascript.0 Stop script script.js.common.PoolPumpe
          09:19:26.405 [info] javascript.0 Start javascript script.js.common.PoolPumpe
          09:19:26.406 [info] javascript.0 script.js.common.PoolPumpe: registered 0 subscriptions and 1 schedule
          09:20:00.406 [info] javascript.0 script.js.common.PoolPumpe: LOG 1: hue.0.Philips_hue.Sonoff2.on: false
          09:21:00.398 [info] javascript.0 script.js.common.PoolPumpe: LOG 1: hue.0.Philips_hue.Sonoff2.on: false

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

            @noxx:

            kann mir einer sagen, warum das Script nicht läuft? `
            Die Variablen temp und aktor werden nur beim Start des Skriptes gesetzt und dann nicht mehr aktualisiert. Es fehlt

            on({id: idAktor, ack: true}, function(dp) {
                aktor = dp.state.val;
            });
            
            on(idTemp, function(dp) {
                temp = dp.state.val;
            });
            
            1 Reply Last reply Reply Quote 0
            • N
              noxx last edited by

              Danke, wo muss das hin, an den Anfang?

              Gesendet von meinem GT-I9195 mit Tapatalk

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

                @noxx:

                wo muss das hin, an den Anfang? `
                Das ist völlig egal. Ich bevorzuge es am Ende.

                1 Reply Last reply Reply Quote 0
                • blauholsten
                  blauholsten Developer last edited by

                  @paul53:

                  @noxx:

                  kann mir einer sagen, warum das Script nicht läuft? `
                  Die Variablen temp und aktor werden nur beim Start des Skriptes gesetzt und dann nicht mehr aktualisiert. Es fehlt

                  on({id: idAktor, ack: true}, function(dp) {
                      aktor = dp.state.val;
                  });
                  
                  on(idTemp, function(dp) {
                      temp = dp.state.val;
                  });
                  ```` `  
                  

                  Ich schätze deine Skriptkünste sehr, aber ich glaube hier hast du dich vermacht, oder?

                  Er lässt ja per schedule triggern.

                  Ich hatte ja heute morgen schon geschrieben, das getState der variablen in der Zeitschaltung() nochmal per getState().val abgefragt werden müssen. (Leider nur Handy zur hand gehabt)

                  Aus meiner Sicht müsste folgender Code gehen:

                  var idTemp = "rflink.0.channels.Cresta_4.TEMP"/*Cresta_ 4 Temperature*/;
                  var idAktor = "hue.0.Philips_hue.Sonoff2.on"/*Philips_hue.Sonoff2.on*/;
                  
                  function Zeitschaltung() {
                  
                     var temp = getState(idTemp).val;
                     var aktor = getState(idAktor).val;
                  
                     var morgen = compareTime('05:00', '06:30', 'between');
                     var mittag = compareTime('10:00', '11:30', 'between');
                     var nachmittag = compareTime('14:00', '16:30', 'between');
                     var abend = compareTime('20:00', '22:00', 'between');
                     if(morgen || mittag || nachmittag || abend) {
                        if(!aktor) setState(idAktor, true);
                     } else if(aktor) setState(idAktor, false);
                  }
                  
                  schedule('* * * * *', Zeitschaltung);
                  
                  1 Reply Last reply Reply Quote 0
                  • blauholsten
                    blauholsten Developer last edited by

                    doppelt

                    1 Reply Last reply Reply Quote 0
                    • N
                      noxx last edited by

                      seit mir beide was vorraus, ihr versteht was der andere meint 🙂

                      bisher scheint das von paul53 zu gehen, teste aber nun auch deins.

                      danke

                      gruß

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

                        @blauholsten:

                        aber ich glaube hier hast du dich vermacht, oder? `
                        Das glaube ich nicht.
                        @blauholsten:

                        Ich hatte ja heute morgen schon geschrieben, das getState der variablen in der Zeitschaltung() nochmal per getState().val abgefragt werden müssen. `
                        Das müssen sie nicht, wenn die globalen Skriptvariablen (aktor, temp) bei jeder Wertänderung des zugehörigen Datenpunktes aktualisiert werden.

                        Deine Version funktioniert ebenfalls, belastet aber die CPU stärker, da jede Minute 2 getState(id)-Operationen ausgeführt werden.

                        1 Reply Last reply Reply Quote 0
                        • blauholsten
                          blauholsten Developer last edited by

                          @paul53:

                          @blauholsten:

                          aber ich glaube hier hast du dich vermacht, oder? `
                          Das glaube ich nicht.
                          @blauholsten:

                          Ich hatte ja heute morgen schon geschrieben, das getState der variablen in der Zeitschaltung() nochmal per getState().val abgefragt werden müssen. `
                          Das müssen sie nicht, wenn die globalen Skriptvariablen (aktor, temp) bei jeder Wertänderung des zugehörigen Datenpunktes aktualisiert werden.

                          Deine Version funktioniert ebenfalls, belastet aber die CPU stärker, da jede Minute 2 getState(id)-Operationen ausgeführt werden. `

                          Als ich den Rechner aus gemacht habe, ist mir deine Logik auch klar geworden….. :shock:

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          822
                          Online

                          32.1k
                          Users

                          80.7k
                          Topics

                          1.3m
                          Posts

                          3
                          12
                          1400
                          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