NEWS
Problem variable Zeitsteuerung skript, schedule
-
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
-
-
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() {
-
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
-
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. -
ich denke, ich könnte den script noch etwas einkürzen. `
Meine Art der Programmierung istconst 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(); });
-
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
-
soweit ich weiß, ist der erste Tag der Woche immer der Sonntag [1] und der letzte Tag der Samstag [7]
-
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