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

      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

                        825
                        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