Logik: Zeitsteuerung
In Skripten gibt es die Möglichkeit Automatisierungen anhand der Uhrzeit oder des Sonnenstandes zu erstellen. Zur Verfügung stehen dazu die Funktionen AtTime und AtSunset/AtSunrise.
Sehen wir uns ein einfaches Beispiel an. In folgendem Skript wird jeden Tag um 8:15 das Bit 1
an die
Gruppenadresse 0/0/1 gesendet.
Ablaufdiagramm
Folgendes Ablaufdiagramm zeigt eine grafische Darstellung der Zeitsteuerung.
Skriptcode
Der Skriptcode dazu sieht dann so aus.
1var hkknx = import("hkknx")
2var ch = hkknx.AtTime(8, 15, 0)
3for {
4 <-ch
5 hkknx.GroupWrite(true, "0/0/1")
6}
Beim Aufruf der Funktion AtTime wird die Uhrzeit angegeben – also 8 Uhr 15 Minuten 0 Sekunden.
Der Rückgabewert wird dann in die Variable ch
gespeichert. (ch steht für Channel.)
Der Rückgabewert von der Funktion ist angegeben als <- chan *time.Time
.
Somit ist ch
ein Channel, von dem Werte empfangen werden können.
Die empfangenen Werte haben den Datentyp *time.Time.
Für was verwendet man nun die Variable ch
?
In unserem Beispiel kann man also von der Variable ch
um genau 8:15 einen Wert empfangen.
Der Aufruf mit dem <-
Operator wartet solange, bis ein Wert empfangen wird.
1var hkknx = import("hkknx")
2var ch = hkknx.AtTime(8, 15, 0)
3for {
4 <-ch
5 hkknx.GroupWrite(true, "0/0/1")
6}
Sobald ein Wert empfangen wird, läuft das Skript weiter und sendet das Bit 1
an die Gruppenadresse 0/0/1
.
1var hkknx = import("hkknx")
2var ch = hkknx.AtTime(8, 15, 0)
3for {
4 <-ch
5 hkknx.GroupWrite(true, "0/0/1")
6}
Danach wird an den Anfang der For-Schleife gesprungen
1var hkknx = import("hkknx")
2var ch = hkknx.AtTime(8, 15, 0)
3for {
4 <-ch
5 hkknx.GroupWrite(true, "0/0/1")
6}
und gewartet, bis die Uhrzeit 8:15 am nächsten Tag eintritt.