NEWS
[Gelöst] Zeitbereich als Trigger für On()
-
Hallo Zusammen,
erstmal muss ich sagen dass das ein super Forum ist. Ich versuche gerade in die Javascript-Programmierung einzusteigen und mir fehlt an der ein oder anderen Stelle noch etwas das Verständnis.
Ich wollte mittels Blockly ein Skript erstellen das nur getriggert wird wenn die Zeit zwischen zwei Zeiten liegt.
Bei der Code-Prüfung ist alles ok und wenn ich das Skript starte bekomme ich folgende Meldungen wenn die Zeit außerhalb des Zeitraumes ist
javascript.0 2017-04-13 21:15:08.605 info script.js.ontest_Blockly: registered 1 subscription and 0 schedules javascript.0 2017-04-13 21:15:08.605 error Error by subscription: empty ID defined. All states matched. javascript.0 2017-04-13 21:15:08.602 info Start javascript script.js.ontest_Blockly javascript.0 2017-04-13 21:15:08.578 error unsubscribe: invalid type of id - boolean
Wenn sie innerhalb liegt hätte ich die Ausgabe von "Test" im Log erwartet, aber es passiert nichts.
Kann das überhaupt funktionieren oder setzt On() zwingend eine Id voraus.
Gruß
Dolomiti
-
Na ja,
dein 'Falls Object' verlangt eine ID und AktuelleZeit ist kein ID sondern eine Abfrage die nur bei einem 'normalen' falls funktioniert.
-
Hallo
nimm den Zeitplan aus Trigger damit habe ich das auch hinbekommen.
-
@fsjoke: Also war meine Vermutung mit der Id richtig.
@nobse: Aber der Zeitplan wird doch nur zu einem bestimmten wiederkehrend Zeitpunkt ausgeführt.
Vielleicht zur Erklärung folgendes:
Ziel des Ganzen soll sein dass in meinem Arbeitszimmer die Rollade runterfährt wenn ein Spiel gestartet wird. Dieses Skript funktioniert über Aufruf von Schedule() jede Minute auch soweit. Das ganze ist aber nur nötig wenn es hell draussen ist. Also wollte ich den Skriptteil innerhalb von Schedule() nur tagsüber ausführen lassen und jetzt hänge ich.
!
+ '%" '; if (x < Spieleliste.length-1) { Abfrage += 'or '; } } ! /* Prozesse vom PC abfragen und auswerten */ schedule("*/1 * * * *", function(){ exec("wmic -Uxxx%xxx //10.20.30.40 \'SELECT Name FROM win32_process WHERE " + Abfrage + "\'", function (error, stdout, stderr) { var Prozessliste = stdout.split('\n'); var status = false; var laufendesSpiel = "Keins"; for (x = 2; x < Prozessliste.length-1; x++) { for (y=0; y < Spieleliste.length; y++) { status = (Prozessliste[x].includes(Spieleliste[y])); if (status && getState("hm-rpc.0.xxxx.LEVEL").val >= '60') { setState("hm-rpc.0.xxx.LEVEL",30); laufendesSpiel = Spieleliste[y]; //log('laufendes Spiel: ' + laufendesSpiel); break; } } } }); }); ! -
Ich habe das so gelöst
-
D.h. es wird alle 5 Minuten geprüft ob es nach 20:00 Uhr ist und dann "SetAllCamOn" ausgeführt? Bis wann wird die Schleife denn dann durchlaufen? Bis Mitternacht?
-
genau
-
Könntest du mir evtl. noch die Codeansicht von deinem Blockly-Schnipsel zur Verfügung stellen. Ich glaube ich muss das in Javascript machen. Ich weiß nicht ob ich mein oben erwähntes Skript in Blockly realisieren kann.
-
Der Code bringt dich nicht weiter.
Ziehe bitte dann noch aus Funktionen das Javascript_Funktion rein und hier kannst du dann dein script einstellen.
function setAllCamOn() { var request = require("request"); var url_ein = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; request(url_ein); log("20.00 Uhr CAM alle Eingeschaltet"); } schedule("*/5 * * * *", function () { if (compareTime('20:00', null, ">", null)) { setAllCamOn(); } });
So jetzt ist Ostern. Muss mich ab morgen um die Enkelkinder kümmern.
Gruß Norbert
-
Super. Vielen Dank und schöne Ostern.
Mir ging es auch nur um den Schedule-Part. Dann werde ich mich jetzt mal ans ausprobieren begeben.