NEWS
[Frage] Schedule mit Zeit aus einem Datenpunk
-
HI,
ist es möglich folgenden schedule Befehl mit Zeiten aus einem Datenpunkt / Objekt zu bedienen?
schedule("30 22 * * 0-6", function () {
der Inhalt des Datenpunktes ist bspw. 22:30
nun habe ich folgendes leider erfolglos versucht:
var zu_stunden = parseFloat(getState("javascript.0.Jalousien.Konfig.Zeit_Schliessen").val.substring(0,2)); var zu_minuten = parseFloat(getState("javascript.0.Jalousien.Konfig.Zeit_Schliessen").val.substring(3,5)); schedule(zu_minuten +" "+ zu_stunden +" * * 0-6", function () {
Aber leider funktioniert das nicht. Gibt es hier eine Möglichkeit das zu realisieren?
Gruß
Steffen
-
wenn du nach "Wecker" suchst, findest du einige Interessante Ansätze.
Hier noch ein Beispiel wie ich das für die Rolladensteuerung einsetze
wobei in der Variable idt1 ein Text steht: z. B. 08:30
// #################### Auslöser ########## // ########## Zeit/Wecker ########## var idt1 = "javascript.0.Settings.TagesstartArbeitstag"; var timer1; function getTimeObject(state) { var t = state.val.split(":"); var h = parseInt(t[0]); var m = parseInt(t[1]); return {hour: h, minute: m}; } on(idt1, function(dp) { var t = getTimeObject(dp.newState); log("Beginn Tagesart Arbeitstag wird eingestellt " + JSON.stringify(t),'warn'); if (timer1) clearSchedule(timer1); timer1 = on({time: t}, function () { RolladenFahren('Wecker'); }); }); var state = getState(idt1); var t = getTimeObject(state); if (timer1) clearSchedule(timer1); timer1 = on({time: t}, function () { RolladenFahren('Wecker'); });
-
Versuche es mal so:
var zu = getState("javascript.0.Jalousien.Konfig.Zeit_Schliessen").val.split(':'); schedule(zu[1] + ' ' + zu[0] + ' * * 0-6', function() {
-
Versuche es mal so:
var zu = getState("javascript.0.Jalousien.Konfig.Zeit_Schliessen").val.split(':'); schedule(zu[1] + ' ' + zu[0] + ' * * 0-6', function() { ```` `
Klappt perfekt Danke.
Warum meines nicht funktioniert verstehe ich trotzdem nicht
Gruß
Steffen
-
Warum meines nicht funktioniert verstehe ich trotzdem nicht `
var zu_stunden = getState("javascript.0.Jalousien.Konfig.Zeit_Schliessen").val.substring(0,1); var zu_minuten = getState("javascript.0.Jalousien.Konfig.Zeit_Schliessen").val.substring(3,4);
Wozu parseFloat() ? Das Ergebnis soll ein (Teil-)string sein. Außerdem sind führende Nullen erforderlich (z.B. 08:15), bei der Version mit split(':') nicht.
-
funktioniert der Code auch dann wenn die Datenpunkte geändert werden?
Oder muss dann das Script neu gestartet werden?
-
funktioniert der Code auch dann wenn die Datenpunkte geändert werden? `
Nein, dazu muss man auf Änderung triggern.var zu = getState("javascript.0.Jalousien.Konfig.Zeit_Schliessen").val.split(':'); function meineFunktion() { ... } var timer = schedule(zu[1] + ' ' + zu[0] + ' * * 0-6', meineFunktion); on("javascript.0.Jalousien.Konfig.Zeit_Schliessen", function(dp) { // Trigern bei Änderung zu = dp.state.val.split(':'); clearSchedule(timer); // altes Schedule löschen timer = schedule(zu[1] + ' ' + zu[0] + ' * * 0-6', meineFunktion); });
-
Verstehe ich das richtig,
wenn ich den Datenpunkt ändern würde und den Trigger nicht nutze, würde die gänderte Zeit nie (bzw. erst nach einem Script - Neustart) gültig werden?
Gruß
Steffen
-
wenn ich den Datenpunkt ändern würde und den Trigger nicht nutze, würde die gänderte Zeit nie (bzw. erst nach einem Script - Neustart) gültig werden? `
Genau so ist es.