Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Problem variable Zeitsteuerung skript, schedule

    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

    Problem variable Zeitsteuerung skript, schedule

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

      Hallo Zusammen,

      Ich versuche grad ein Skript zu erstellen, in dem ich, zeitabhängig eine Aktion durchführen kann.

      Allerdings so, dass ich beim ändern nicht jedes Mal das Skript anpassen muss, sondern die Parameter

      über Datenpunkte übermittel.

      Als Beispiel Rollladen Morgens Auf 07:30 Abends runter 19:00….

      Ich bin jetzt mehrere Tage am testen und leider bleibt es erfolglos, entweder läuft es minütlich oder doppelt oder garnicht.

      Vielleicht habe ich aber auch irgendwas nicht verstanden.

      von der Logik, wenn die beiden Datenpunkte sich ändern, soll er den schedule anpassen und dann ganz normal

      abfahren wenn der Zeitpunkt gekommen ist.

      var idZeit = ["javascript.0.TestZeitHour", "javascript.0.TestZeitMinute"];
      var g_times;
      
      log("gestartet");
      on({id: idZeit }, function (obj) {
        g_times = getState("javascript.0.TestZeitMinute").val.trim() + ' ' + getState("javascript.0.TestZeitHour").val.trim() + ' ' + '*'.trim() + ' ' + '*'.trim() + ' ' + '*'.trim();
        log("g_times");
        log(g_times);
        clearSchedule;
        schedule(g_times, function() {
      //schedule("46 11 * * *", function() {
       //   setState("sonoff.0.Steckdose1.POWER"/*Steckdose1 POWER*/, false);
          log("Lampe an");
      });
        });
      
      

      Resultat:

      Skript2	0	
      Name
      	Debug Hilfe-Ausgaben
      Enginetyp
      	Zeilenumbruch 						
      Log
      09:29:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:30:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:30:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:31:00.838	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:31:00.992	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:32:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:32:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:33:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:33:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:34:00.841	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:34:00.995	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:35:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:35:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:36:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:36:00.995	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:37:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:37:00.995	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:38:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:38:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:39:00.838	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:39:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:40:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:40:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:41:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:41:00.992	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:42:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:42:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:43:00.838	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:43:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:44:00.838	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:44:00.996	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:45:00.842	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:45:00.995	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:46:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:46:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:47:00.841	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:47:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:48:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:48:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:49:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:49:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:50:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:50:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:51:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:51:00.995	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:52:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:52:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:53:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:53:00.994	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:54:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:54:00.995	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:55:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:55:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:56:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:56:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:57:00.840	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:57:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:58:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:58:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:59:00.839	[info]	javascript.0 script.js.TestZeit2: Lampe an
      09:59:00.993	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:08:19.321	[info]	javascript.0 Stop script script.js.TestZeit2
      10:08:19.348	[info]	javascript.0 Start javascript script.js.TestZeit2
      10:08:19.349	[info]	javascript.0 script.js.TestZeit2: gestartet
      10:08:19.349	[info]	javascript.0 script.js.TestZeit2: registered 2 subscriptions and 0 schedules
      10:09:31.908	[info]	javascript.0 script.js.TestZeit2: g_times
      10:09:31.909	[info]	javascript.0 script.js.TestZeit2: 29 10 * * *
      10:09:33.197	[info]	javascript.0 script.js.TestZeit2: g_times
      10:09:33.198	[info]	javascript.0 script.js.TestZeit2: 10 10 * * *
      10:10:00.199	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:11:12.951	[info]	javascript.0 script.js.TestZeit2: g_times
      10:11:12.952	[info]	javascript.0 script.js.TestZeit2: * 10 * * *
      10:12:00.945	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:13:00.945	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:14:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:15:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:15:49.580	[info]	javascript.0 script.js.TestZeit2: g_times
      10:15:49.581	[info]	javascript.0 script.js.TestZeit2: * 9 * * *
      10:16:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:17:00.946	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:18:00.951	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:18:43.468	[info]	javascript.0 script.js.TestZeit2: g_times
      10:18:43.469	[info]	javascript.0 script.js.TestZeit2: */1 9 * * *
      10:19:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:20:00.953	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:21:00.945	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:22:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:23:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:24:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:25:00.946	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:26:00.949	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:27:00.948	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:28:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:28:52.741	[info]	javascript.0 script.js.TestZeit2: g_times
      10:28:52.742	[info]	javascript.0 script.js.TestZeit2: */1 9 * * *
      10:29:00.911	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:29:00.951	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:30:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:31:00.945	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:32:00.946	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:33:00.950	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:34:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:35:00.951	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:36:00.946	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:37:00.946	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:38:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:39:00.947	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:39:41.146	[info]	javascript.0 script.js.TestZeit2: g_times
      10:39:41.147	[info]	javascript.0 script.js.TestZeit2: */1 9 * * *
      10:39:44.869	[info]	javascript.0 script.js.TestZeit2: g_times
      10:39:44.871	[info]	javascript.0 script.js.TestZeit2: */1 10 * * *
      10:39:47.170	[info]	javascript.0 script.js.TestZeit2: g_times
      10:39:47.171	[info]	javascript.0 script.js.TestZeit2: 40 10 * * *
      10:40:00.172	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:40:00.870	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:40:00.945	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:41:00.871	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:41:00.945	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:42:00.870	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:42:00.945	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:43:00.870	[info]	javascript.0 script.js.TestZeit2: Lampe an
      10:43:00.945	[info]	javascript.0 script.js.TestZeit2: Lampe an
      
      

      Da frage ich mich, warum führt er den schedule nun teilweise mehrfach aus und trotz fixer Zeit dann doch noch später?

      Die ganzen zwischenversuche habe ich leider nicht protokoliert,

      Könnte mir bitte jemand helfen?

      Mich wundert, dass es da keinen Adapter etc. gibt, es wird doch sehr viel in der Hausautomation mit zeitlichen abläufen gemacht….

      Wie macht Ihr das?

      Danke

      Gruß Jens

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

        https://forum.iobroker.net/viewtopic.php?f=30&t=12168&p=128604#p128604.

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

          @AingTii:

             clearSchedule; 
             schedule(g_times, function() {
          ```` `  
          

          clearSchedule(sched) benötigt eine globale (außerhalb einer Funktion deklarierte) Skriptvariable (Schedule-Objekt) zum Stoppen.

             if(sched) clearSchedule(sched);
             sched = schedule(g_times, function() {
          
          
          1 Reply Last reply Reply Quote 0
          • A
            AingTii last edited by

            Danke für die schnelle Antwort!

            funktioniert soweit, obwohl ich denke, ich könnte den script noch etwas einkürzen.

            var idZeitRolBueroZu = ["javascript.0.TestZeitHour", "javascript.0.TestZeitMinute"];
            var g_times;
            var g_rolBueroZu = null;
            
            log("Timer Rollladen Buero gestartet");
            on({id: idZeitRolBueroZu}, function (obj) {
              g_times = getState("javascript.0.TestZeitMinute").val.trim() + ' ' + getState("javascript.0.TestZeitHour").val.trim() + ' ' + '*'.trim() + ' ' + '*'.trim() + ' ' + '*'.trim();
              log("g_rolBueroZu Zeit neu gesetzt:");
              log(g_times);
              clearSchedule (g_rolBueroZu);
              g_rolBueroZu = schedule(g_times, function() {
            //   setState("sonoff.0.Steckdose1.POWER"/*Steckdose1 POWER*/, false);
                log("Rollladen Buero runter");
              });
            });
            
            

            OK

            Um es besser zu verstehen, noch mal nachgefragt.

            1. Ich lege global einen Namen für den Schedule fest

            2. mit on schauen ob sich etwas geändert hat

            3. hat sich was geändert schreibe die Änderung in eine Variable

            4. kopiere Inhalt der Variable in ein "Dummy"-Schedule

            5. lösche den mit clearSchedule (globaler Name) benannten Schedule

            6. übergebe vom die Daten vom "Dummy"-Schedule auf den Schedule mit globalem Namen

            7. ist die Zeit gekommen, führe die Aktion aus

            Also läuft der Schedule zum einen, obwohl er in der {} der Änderungsabfrage steht, unabängig

            weiter oder sollte man den dort rausnehmen und dahinter setzten?

            Und ich kann somit in dem einen Script alle Timer entsprechend benennen und laufen lassen?

            Danke

            Gruß Jens

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

              @AingTii:

              Also läuft der Schedule zum einen, obwohl er in der {} der Änderungsabfrage steht, unabängig

              weiter oder sollte man den dort rausnehmen und dahinter setzten? `
              Wie bekommst Du die neue Zeit in den Schedule, wenn er außerhalb der Funktion deklariert wird ?
              @AingTii:

              Und ich kann somit in dem einen Script alle Timer entsprechend benennen und laufen lassen? `
              Ja, und das Stoppen mit clearSchedule(), clearTimeout() bzw. clearInterval() nicht vergessen, denn sonst werden zusätzliche Timer erzeugt und die alten Timer laufen weiter.

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

                @AingTii:

                ich denke, ich könnte den script noch etwas einkürzen. `
                Meine Art der Programmierung ist

                const idHour = "javascript.0.TestZeitHour";
                const idMinute = "javascript.0.TestZeitMinute";
                
                var g_rolBueroZu = null;
                var hour = getState(idHour).val;
                var min = getState(idMinute).val;
                
                function zeitrunter () {
                   if(g_rolBueroZu) clearSchedule(g_rolBueroZu);
                   g_rolBueroZu = schedule(min + ' ' + hour + ' * * *', function() {
                //     setState("sonoff.0.Steckdose1.POWER"/*Steckdose1 POWER*/, false);
                      log("Rollladen Buero runter");
                   });
                }
                
                zeitrunter(); // Scriptstart
                
                on(idHour, function(dp) {
                   hour = dp.state.val;
                   zeitrunter();
                }); 
                on(idMinute, function(dp) {
                   min = dp.state.val;
                   zeitrunter();
                }); 
                
                
                1 Reply Last reply Reply Quote 0
                • A
                  AingTii last edited by

                  Hallo,

                  ich habe das ganze noch mal etwas angepasst, allerdings verstehe ich nicht, warum es täglich

                  funktioniert. bezogen auf Tag der Woche allerdings nicht.

                  Funktionieren tut dies: mit "variableMinute variableStunde * * *"

                  on(idWeckzeitTimerRollladenUntenZuSATSUN, function(dp) {
                     zeitTimerRollladenUntenZuSATSUN = getState(".Meine_Geraete.P.5_Set.Timer_Rollladen_Unten_Zu_SAT-SUN"/*Timer_Rollladen_Unten_Zu_SAT-SUN_*/).val;  
                     log("Geänderte Zeit RollladenUntenZuSATSUN: " + zeitTimerRollladenUntenZuSATSUN);
                     var tTimerRollladenUntenZuSATSUN = dp.state.val.split(':');
                     clearSchedule(timerTimerRollladenUntenZuSATSUN);
                     timerTimerRollladenUntenZuSATSUN = schedule(tTimerRollladenUntenZuSATSUN[1] + ' ' + tTimerRollladenUntenZuSATSUN[0] + ' * * *', function() {
                         if (getState(".Meine_Geraete.P.5_Set.Timer_Rollladen_Unten_Zu_SAT-SUN_Aktiv"/*Timer_Rollladen_Unten_Zu_SAT-SUN_Aktiv_*/).val === true){
                         log(tTimerRollladenUntenZuSATSUN + " Rollladen UntenAlle 0");
                         setState(".Meine_Geraete.P.2_EG.2_WZ.Rollladen_2er"/*Rollladen_2er*/, 0);
                         setState(".Meine_Geraete.P.2_EG.2_WZ.Rollladen_3er"/*Rollladen_3er*/, 0);
                         setState(".Meine_Geraete.P.2_EG.3_KU.Rollladen_1"/*Terassentuer*/, 0);
                         setState(".Meine_Geraete.P.2_EG.3_KU.Rollladen_2"/*Fenster_Garten*/, 0);
                         setState(".Meine_Geraete.P.2_EG.3_KU.Rollladen_3"/*Fenster_Strasse*/, 0);
                         setState(".Meine_Geraete.P.2_EG.4_WC.Rollladen_1"/*Rollladen_1_*/, 0);
                         setState(".Meine_Geraete.P.2_EG.5_AZ.Rollladen_1"/*Rollladen_1_*/, 0);
                         }
                     });
                  });
                  
                  

                  dies aber nicht mit

                  "variableMinute variableStunde * * 6,7"

                  oder

                  "variableMinute variableStunde * * SAT,SUN"

                  on(idWeckzeitTimerRollladenUntenZuSATSUN, function(dp) {
                     zeitTimerRollladenUntenZuSATSUN = getState(".Meine_Geraete.P.5_Set.Timer_Rollladen_Unten_Zu_SAT-SUN"/*Timer_Rollladen_Unten_Zu_SAT-SUN_*/).val;  
                     log("Geänderte Zeit RollladenUntenZuSATSUN: " + zeitTimerRollladenUntenZuSATSUN);
                     var tTimerRollladenUntenZuSATSUN = dp.state.val.split(':');
                     clearSchedule(timerTimerRollladenUntenZuSATSUN);
                     timerTimerRollladenUntenZuSATSUN = schedule(tTimerRollladenUntenZuSATSUN[1] + ' ' + tTimerRollladenUntenZuSATSUN[0] + ' * * 6,7', function() {
                         if (getState(".Meine_Geraete.P.5_Set.Timer_Rollladen_Unten_Zu_SAT-SUN_Aktiv"/*Timer_Rollladen_Unten_Zu_SAT-SUN_Aktiv_*/).val === true){
                         log(tTimerRollladenUntenZuSATSUN + " Rollladen UntenAlle 0");
                         setState(".Meine_Geraete.P.2_EG.2_WZ.Rollladen_2er"/*Rollladen_2er*/, 0);
                         setState(".Meine_Geraete.P.2_EG.2_WZ.Rollladen_3er"/*Rollladen_3er*/, 0);
                         setState(".Meine_Geraete.P.2_EG.3_KU.Rollladen_1"/*Terassentuer*/, 0);
                         setState(".Meine_Geraete.P.2_EG.3_KU.Rollladen_2"/*Fenster_Garten*/, 0);
                         setState(".Meine_Geraete.P.2_EG.3_KU.Rollladen_3"/*Fenster_Strasse*/, 0);
                         setState(".Meine_Geraete.P.2_EG.4_WC.Rollladen_1"/*Rollladen_1_*/, 0);
                         setState(".Meine_Geraete.P.2_EG.5_AZ.Rollladen_1"/*Rollladen_1_*/, 0);
                         }
                     });
                  });
                  
                  

                  für mein Verständnis ist doch heute Tag der Woche 7.

                  jemand ne Idee woran es liegen kann?

                  Danke

                  Gruß Jens

                  1 Reply Last reply Reply Quote 0
                  • htrecksler
                    htrecksler Forum Testing last edited by

                    soweit ich weiß, ist der erste Tag der Woche immer der Sonntag [1] und der letzte Tag der Samstag [7]

                    1 Reply Last reply Reply Quote 0
                    • A
                      AingTii last edited by

                      Hallo,

                      hmmmmm, hat in der Tat funktioniert als ich 0,6 eingegeben habe :?

                      https://github.com/ioBroker/ioBroker.ja … d-schedule

                      sagt irgendwie aus, dass 7 ebenfalls Sonntag ist….

                       ┌───────────── min (0 - 59)
                       │ ┌────────────── hour (0 - 23)
                       │ │ ┌─────────────── day of month (1 - 31)
                       │ │ │ ┌──────────────── month (1 - 12)
                       │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to Saturday; 7 is also Sunday)
                       │ │ │ │ │
                       │ │ │ │ │
                       │ │ │ │ │
                       * * * * *  schedule
                      
                      

                      Aber gut zu wissen, dann braucht man ja nur 0=Sonntag bis 6=Samstag zu nehmen.

                      Manchmal ist die Ursache klein, Auswirkung groß.

                      Danke

                      Gruß Jens

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      547
                      Online

                      31.7k
                      Users

                      79.8k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      2008
                      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