NEWS
Timer mit Input / Zeitsteuerung Blockly
-
Hallo
ich stehe auf dem Schlauch und habe mein Problem schon mit diesem Beitrag hier zu lösen versucht, leider gelingt mir dies nicht
Ich habe das widget ctrl-input datetime verwendet um eine Eingabe der Zeit zu realisieren.
Des weiteren hab ich zusätzliche Datenpunkte unter 0_userdata.0 erzeugtim Blockly habe ich folgendes script erstellt
leider funktioniert das aber nicht wie gewollt ... bzw. funktioniert es einmal, nämlich dann wenn ich erst die Zeit im Widget eintrage und erst danach das blockly script starte !
Wenn ich jetzt erneut eine Start und Endzeit eintrage bekomme ich diese zwar korrekt unter objects->Timer_Input angezeigt aber im Blockly script kommt es zu Fehlermeldungenzum testen hängt da am ende erstmal ein esp8266 mini ...
was mache ich falsch ? wo liegt mein Denkfehler ?
-
@snupy sagte: bzw. funktioniert es einmal
Wenn die Start- und Stoppzeit im Format "YYYY-MM-DD hh:mm:ss" vorliegt, sollte es so funktionieren (Beispiel für Startzeit):
Man muss auf die Änderung der Startzeit triggern und dabei den laufenden Zeitplan stoppen.
Für Monatsdatum und Monat kann man auch den Stern stehen lassen, wenn nur die Uhrzeit gebraucht wird. Dann funktioniert es auch mit dem Format "hh:mm:ss". -
@paul53 funktioniert leider nicht ...
so ich habe es jetzt so gelöst und das scheint gut zu funktionieren, das ganze soll meine 4 Sprenkler Ventile im Garten steueren die aktuell noch mit Blynk laufen.
Ich habe das schon eingangs bezeichnete widget für den Input der Zeit genutzt.
Gleichzeitig habe ich jetzt noch einen Schalter mit eingebaut um den Timer ein oder auszuschalten bzw. um zu verhindern das der esp mini über den timer geschalten werden kann.Dazu habe ich die Datenpunkte wie im Bild ersichtlich erstellt
Das Blockly sieht jetzt so aus
Ich lade das Blockly dafür als .txt mit hoch ... Blockly_Timer_mit_Input_und_On_Off.txt
-
gelöscht
-
ich habe dein blockly heute nochmal probiert komme da aber auf keinen grünen zweig ...
hast du das mal getestet ? ich bekomme jede mange rote errorsvielleicht kannst du mir ja nochmal auf die Sprünge helfen !
-
@snupy sagte: hast du das mal getestet ?
Ja, gerade: Habe Startzeit auf "2021-04-15 17:03:00" gesetzt und dann das Skript gestartet, gleich nach 17:03:00 bei laufendem Skript die Startzeit auf 17:04:00 geändert.
EDIT: Später auf Zeiten "17:21:00" und "17:23:00" (ohne Datum) geändert: Funktioniert.
-
-
@snupy sagte: irgendwo muß ich da ja was falsch machen
Poste mal den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
Welche zusätzlichen Informationen liefert der Tab "Log"?@snupy sagte in Timer mit Input / Zeitsteuerung Blockly:
habe extra nochmal nen neuen Datenpunkt unter 0_userdata.0.Timer_Input.Timer_Input_Startzeit angelegt
Weshalb? Der von mir angelegte DP entsprach genau Deiner Struktur (Nur der Name war anders).
-
habe zwischenzeitlich mal die Endzeit mit eingefügt ...
wo finde ich den Tab "Log" der zusätzliche Informationen liefert ?.... du meinst den hier ....
var startzeit, endzeit, schedule1, schedule2; // Beschreibe diese Funktion … function start() { startzeit = getDateObject(getState("0_userdata.0.Timer_Input.Timer_Input_Startzeit").val).getTime(); schedule1 = schedule((getDateObject(startzeit).getMinutes()).trim() + ' ' + getDateObject(startzeit).getHours().trim() + ' ' + '*'.trim() + ' ' + '*'.trim() + ' ' + '*'.trim(), function () { console.log('Aktion zur Startzeit'); setState("sonoff.0.DVES_D3CA1E.POWER"/*DVES_D3CA1E POWER*/, true); }); } // Beschreibe diese Funktion … function start2() { endzeit = getDateObject(getState("0_userdata.0.Timer_Input.Timer_Input_Endzeit").val).getTime(); schedule2 = schedule((getDateObject(endzeit).getMinutes()).trim() + ' ' + getDateObject(endzeit).getHours().trim() + ' ' + '*'.trim() + ' ' + '*'.trim() + ' ' + '*'.trim(), function () { console.log('Aktion zur Endzeit'); setState("sonoff.0.DVES_D3CA1E.POWER"/*DVES_D3CA1E POWER*/, false); }); } start(); on({id: '0_userdata.0.Timer_Input.Timer_Input_Startzeit', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; (function () {if (schedule1) {clearSchedule(schedule1); schedule1 = null;}})(); start(); }); start2(); on({id: '0_userdata.0.Timer_Input.Timer_Input_Endzeit', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; (function () {if (schedule2) {clearSchedule(schedule2); schedule2 = null;}})(); start2(); });
-
@snupy
Bei mir enthält die angemeckerte Zeile 6 vor .trim() noch ein .toString()schedule1 = schedule((getDateObject(startzeit).getMinutes()).toString().trim() + ' ' + getDateObject(startzeit).getHours().toString().trim() + ' ' + '*'.toString().trim() + ' ' + '*'.toString().trim() + ' ' + '*'.toString().trim(), async function () {
Welche Version des javascript-Adapters? Meine: 5.0.5
-
habe zwei raspis einen 3+ als Backup und einen 4'er ... auf beiden läuft / lief js 4.8.4
auf dem 4'er habe ich gerade js geupdatet auf 5.0.14 ... ergebniss ... nüscht ... geht nicht -
so extra zurück auf 5.0.5 ... raspi neustart ... nüscht
javascript.0 2021-04-15 23:17:38.889 error (2508) at Script.runInContext (vm.js:131:20)
javascript.0 2021-04-15 23:17:38.888 error (2508) at script.js.Timer_Test:39:3
javascript.0 2021-04-15 23:17:38.888 error (2508) at script.js.Timer_Test:22:1
javascript.0 2021-04-15 23:17:38.888 error (2508) at start (script.js.Timer_Test:6:64)
javascript.0 2021-04-15 23:17:38.887 error (2508) script.js.Timer_Test: TypeError: getDateObject(...).getMinutes(...).trim is not a functionvar startzeit, endzeit, schedule1, schedule2; // Beschreibe diese Funktion … function start() { startzeit = getDateObject(getState("0_userdata.0.Timer_Input.Timer_Input_Startzeit").val).getTime(); schedule1 = schedule((getDateObject(startzeit).getMinutes()).trim() + ' ' + getDateObject(startzeit).getHours().trim() + ' ' + '*'.trim() + ' ' + '*'.trim() + ' ' + '*'.trim(), function () { console.log('Aktion zur Startzeit'); setState("sonoff.0.DVES_D3CA1E.POWER"/*DVES_D3CA1E POWER*/, true); }); } // Beschreibe diese Funktion … function start2() { endzeit = getDateObject(getState("0_userdata.0.Timer_Input.Timer_Input_Endzeit").val).getTime(); schedule2 = schedule((getDateObject(endzeit).getMinutes()).trim() + ' ' + getDateObject(endzeit).getHours().trim() + ' ' + '*'.trim() + ' ' + '*'.trim() + ' ' + '*'.trim(), function () { console.log('Aktion zur Endzeit'); setState("sonoff.0.DVES_D3CA1E.POWER"/*DVES_D3CA1E POWER*/, false); }); } start(); on({id: '0_userdata.0.Timer_Input.Timer_Input_Startzeit', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; (function () {if (schedule1) {clearSchedule(schedule1); schedule1 = null;}})(); start(); }); start2(); on({id: '0_userdata.0.Timer_Input.Timer_Input_Endzeit', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; (function () {if (schedule2) {clearSchedule(schedule2); schedule2 = null;}})(); start2(); });
-
@snupy
Vielleicht muss der Block "CRON" gelöscht und neu eingefügt werden? -