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.
    • N
      noxx last edited by

      Hallo

      kann mir einer sagen, warum das Script nicht läuft?

      var idTemp = "rflink.0.channels.Cresta_4.TEMP"/*Cresta_ 4 Temperature*/;
      var idAktor = "hue.0.Philips_hue.Sonoff2.on"/*Philips_hue.Sonoff2.on*/;
      
      var temp = getState(idTemp).val;
      var aktor = getState(idAktor).val;
      
      function Zeitschaltung() {
         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);
      
      

      Der Aktor geht nichts an. Nur aus, wenn ich manuell anschalte.

      Starte ich das Script in einem der Zeitfenster neu, geht der Aktor

      auch an. Lasse ich ihn laufen, dann funktioniert es nicht.

      Hier ein Fehler:

      hue.0	2017-08-03 06:56:00.259	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:55:00.226	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:54:00.256	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:53:00.239	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:52:00.235	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:51:00.244	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:50:50.609	error	Cannot get result for lightStatus1
      hue.0	2017-08-03 06:50:50.608	error	Error: timeout of 10000ms exceeded
      hue.0	2017-08-03 06:50:00.252	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:49:00.329	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:48:00.238	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:47:00.247	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:46:00.240	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:45:00.239	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:44:00.249	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:43:00.244	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:42:00.252	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:41:00.249	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:40:00.240	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:39:00.285	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:38:00.275	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:37:00.279	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:36:00.299	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:35:00.255	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:34:00.234	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:33:00.229	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:32:00.224	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:31:00.226	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:30:00.242	info	final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0}
      hue.0	2017-08-03 06:29:48.226	error	Cannot get result for lightStatus1
      hue.0	2017-08-03 06:29:48.225	error	Error: timeout of 10000ms exceeded
      
      

      Nach Script Neustart gehts aber trotzdem

      Ich habe das erste Zeitfenster nun zum Test auf 5:00 - 7:30 geändert, gespeichert und dann geht der Aktor auch sofort an (ist gerade 6:59)

      hue.0	2017-08-03 06:58:00.334	info	final lightState for Philips_hue.Sonoff2:{"bri":254,"on":true,"level":100}
      
      1 Reply Last reply Reply Quote 0
      • 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

                            777
                            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