In einem vergangenen Beitrag hast Du bereits die Ereignissteuerungen kennengelernt. Hier geht es nun um die zeitgesteuerten Ereignisse in JavaScript. Zeitgesteuerte Ereignisse sind die, die nicht von einem Gerät, sondern von einem Zeitpunkt oder Zeitintervall ausgelöst werden.
Zeitgesteuerte Schaltung
Damit nun auch, wie eingangs erwähnt, der Zeitpunkt der Auslöser ist kann man natürlich eine Zeitsteuerung in HomeMatic nutzen. Was aber, wenn das Gerät nicht zu HomeMatic gehört oder vielleicht keine eigene Zeitsteuerung hat? Hier lässt sich mit wenig Aufwand eine Zeitsteuerung in JavaScript realisieren.
schedule({hour: 20, minute: 00}, TV_taeglich_an ); function TV_taeglich_an() { setState("hm-rpc.2.00085A499BF6D2.4.STATE", true); }
Über den Parameter schedule wurde nun die Zeitsteuerung für hour und minute aktiviert. Hier wird zeitgesteuert das TV täglich um 20 Uhr eingeschaltet.
Zeitgesteuerte Schaltung nur an einem bestimmten Tag
Möchte man nun, dass das Skript nur an einem bestimmten Tag ausgeführt wird, so bedient man sich dem Parameter dayOfWeek. Dieser erwartet eine oder mehrere Zahlen.
schedule({hour: 20, minute: 00, dayOfWeek: 0}, TV_nur_Sonntag_an ); function TV_nur_Sonntag_an() { setState("hm-rpc.2.00085A499BF6D2.4.STATE", true); }
In der Programmierung fangen die Zahlen oder Indizes mit 0 an – somit ist auch hier die erste Zahl eine 0 – aber ein Sonntag.
Zahl | Wochentag |
---|---|
0 | Sonntag |
1 | Montag |
2 | Dienstag |
3 | Mittwoch |
4 | Donnerstag |
5 | Freitag |
6 | Samstag |
Zeitgesteuerte Schaltung an bestimmten Tagen
Mit diesem leicht modifizierten Skript, lässt sich die Schaltung auf die Tage 1-5 (Montag bis Freitag) eingrenzen. Dazu wird jeder Tag durch Komma getrennt in eckige Klammern eingegeben.
schedule({hour: 20, minute: 00, dayOfWeek: [1,2,3,4,5]}, TV_nur_Mo_Fr_an ); function TV_nur_Mo_Fr_an() { setState("hm-rpc.2.00085A499BF6D2.4.STATE", true); }
Intervallschaltungen
Minütliche Intervallschaltungen
In diesem Skript lassen wir ein Skript jede Minute ausführen. Dazu benutzen wir den Parameter second und geben ihm den Wert 00.
schedule({second: [00]}, Jede_Minute ); function Jede_Minute() { log("Skript wird jede Minute ausgeführt!"); }
Zeitsteuerung alle 30 Minuten
Hier bedienen wir uns des Parameters minute und geben ihm die Werte 00 und 30. Dies wäre dann jede halbe Stunde. 15:00 und 15:30.
schedule({minute: [00,30]}, Alle_30_Minuten ); function Alle_30_Minuten() { log("Skript wird alle 30 Minuten ausgeführt!"); }
Zeisteuerung jede Stunde
Um ein Skript jede Stunde ausführen zu lassen, kann man dies auch wieder über den minute Parameter einrichten. Man gibt ihm den Wert 00.
schedule({minute: [00]}, Jede_Stunde ); function Jede_Stunde() { log("Skript wird jede Stunde ausgeführt!"); }
Schaltung mit Sonnenaufgang und -untergang
Normale Schaltung
Es lassen sich mit JavaScript auch Schaltungen zu astronomischen Ereignissen ausführen. Diese Schaltung schaltet täglich das TV zum astronomischen Sonnenaufgang ein.
schedule({astro: "sunrise"}, TV_bei_Sonnenaufgang_ein ); function TV_bei_Sonnenaufgang_ein() { setState("hm-rpc.2.00085A499BF6D2.4.STATE", true); }
… und dieses schaltet das TV zum astronomischen Sonnenuntergang wieder aus.
schedule({astro: "sunset"}, TV_bei_Sonnenuntergang_aus ); function TV_bei_Sonnenuntergang_aus() { setState("hm-rpc.2.00085A499BF6D2.4.STATE", false); }
Für astro stehen folgende Werte zur Verfügung:
Wert | Beschreibung |
---|---|
sunrise | Sonnenaufgang (Oberkante der Sonne erscheint am Horizont) |
sunriseEnd | Sonnenaufgang endet (unterer Rand der Sonne berührt den Horizont) |
goldenHourEnd | Die goldene Morgenstunde (weiches Licht, beste Zeit für Fotografie) endet |
solarNoon | Sonnenmittag (Sonne steht am höchsten) |
goldenHour | Die goldene Abendstunde beginnt |
sunsetStart | Sonnenuntergang beginnt (unterer Sonnenrand berührt den Horizont) |
sunset | Sonnenuntergang (Sonne verschwindet unter dem Horizont, abendliche zivile Dämmerung beginnt) |
dusk | Abenddämmerung (abendliche nautische Dämmerung beginnt) |
nauticalDusk | nautische Dämmerung (abendliche astronomische Dämmerung beginnt) |
night | Nacht beginnt (dunkel genug für astronomische Beobachtungen) |
nightEnd | Die Nacht endet (die astronomische Dämmerung am Morgen beginnt) |
nauticalDawn | nautische Morgendämmerung (morgendliche nautische Dämmerung beginnt) |
dawn | Morgendämmerung (die nautische Dämmerung am Morgen endet, die zivile Dämmerung am Morgen beginnt) |
nadir | dunkelster Moment der Nacht, Sonne steht am niedrigsten |
Schaltung mit Verzögerung/vorzeitigem Eintritt bei Sonnenaufgang und -untergang
Wenn der genaue Zeitpunkt für Sonnenaufgang oder -untergang zu früh oder zu spät eintritt, so lässt sich mit dieser Modifikation eine Verzögerung oder ein vorzeitiger Eintritt der Ausführung einrichten.
Dieses Skript schaltet das TV 10 Minuten nach dem Sonnenaufgang ein.
schedule({astro: "sunrise", shift: 10}, TV_bei_Sonnenaufgang_ein ); function TV_bei_Sonnenaufgang_ein() { setState("hm-rpc.2.00085A499BF6D2.4.STATE", true); }
… und dieses schaltet das TV 10 Minuten vor dem Sonnenuntergang aus.
schedule({astro: "sunset", shift: -10}, TV_bei_Sonnenaufgang_ein ); function TV_bei_Sonnenaufgang_ein() { setState("hm-rpc.2.00085A499BF6D2.4.STATE", false); }
Schaltung mit Verzögerung an einem bestimmten Tag
Schaltungen mit der Astrofunktion lassen sich auch nur an bestimmten Wochentagen ausführen. Hier wird das Licht 10 Minuten nach Sonnenaufgang an einem Samstag eingeschaltet.
schedule({astro: "sunrise", shift: 10, dayOfWeek:6}, TV_bei_Sonnenaufgang_ein_nur_Samstag ); function TV_bei_Sonnenaufgang_ein_nur_Samstag() { setState("hm-rpc.2.00085A499BF6D2.4.STATE", true); }
Schaltung mit Verzögerung an bestimmten Tagen
Schaltungen mit der Astrofunktion lassen sich auch nur an mehreren Wochentagen ausführen. Hier wird das Licht an Samstag und Sonntag 10 Minuten nach dem Sonnenaufgang eingeschaltet.
schedule({astro: "sunrise", shift: 10, dayOfWeek:[0,6]}, TV_bei_Sonnenaufgang_ein_nur_Wochenende ); function TV_bei_Sonnenaufgang_ein_nur_Wochenende() { setState("hm-rpc.2.00085A499BF6D2.4.STATE", true); }
Pingback: ioBroker Ereignisse mit JavaScript überwachen | Kreyenborg.koeln