Beispiel: Lichtsteuerung
In diesem Beispiel wird eine Lichtsteuerung realisiert, welche das Licht 1 Minute nach dem Einschalten wieder ausschaltet.
Um ein Licht einzuschalten, wird eine 1 and 0/0/1 gesendet. Ändert sich der Status des Lichts, so wird das über die Status-Gruppenadresse 0/0/2 mitgeteilt.
Das Skript fängt Schreib-Telegramme an die 0/0/2 ab und überprüft ob das Licht eingeschaltet wurde. Dann wird ein Timer von 1 Minute gestartet. Nach Ablauf des Timers wird das Licht, durch Senden von 0 an 0/0/1 wieder ausgeschaltet.
1// This script turns off a light 1 minute after it was turned on.
2hkknx, time = import("hkknx"), import("time")
3
4// Use a channel which delivers *true* if light is turned on.
5ch = hkknx.GroupWriteBoolNotify("0/0/2")
6
7for {
8 on = <-ch
9 if on {
10 println("light is turned on → start timer")
11 // Use a channel which returns the time 1 minute from now.
12 walltime = time.After(1 * time.Minute)
13
14 for {
15 // Wait until
16 // - walltime is reached
17 // - or light is turned off again
18 select {
19 case on = <-ch:
20 if !on {
21 println("light is turned off → stop timer")
22 break // break out of the loop
23 }
24 case <-walltime:
25 println("turning off light")
26 hkknx.GroupWrite(false, "0/0/1")
27 break // break out of the loop
28 }
29 }
30 }
31}