Logik: Gartenbewässerung
In diesem Beispiel wird eine automatische Gartenbewässerung realisiert. Die Gartenbewässerung wird morgens um 5:00 gestartet und um 6:00 wieder beendet. Zum Starten wird das Bit 1 an die Gruppenadresse 0/0/1 gesendet – zum Beenden das Bit 0.
Die Bewässerung wird nicht gestartet, wenn für die nächsten 24 Stunden eine Regenmenge von mehr als 1 m3 vorausgesagt wird. Für die Berechnung der prognostizierten Regenmenge wird die Funktion GetHourlyWeather verwendet. Die stündliche Regenmenge für die nächsten 24 Stunden wird dann aufsummiert.
1var hkknx, time = import("hkknx"), import("time")
2
3var fiveAM = hkknx.AtTime(5,0,0)
4var sixAM = hkknx.AtTime(6,0,0)
5
6for {
7 // Wait until 5 AM
8 <- fiveAM
9
10 hourly, err = hkknx.GetHourlyWeather()
11 if err != nil {
12 println(err)
13 continue
14 }
15
16 var until = time.Now().Add(24 * time.Hour)
17 var rainVolume = 0
18 for weather in hourly {
19 if weather.Rain != nil && weather.Date.Before(until) {
20 rainVolume += weather.Rain.Volume
21 }
22 }
23
24 if rainVolume > 1 {
25 // Do not irrigate today
26 continue
27 }
28
29 // Start irrigation
30 hkknx.GroupWrite(true, "0/0/1")
31
32 // Wait until 6 AM
33 <- sixAM
34
35 // Stop irrigation
36 hkknx.GroupWrite(false, "0/0/1")
37}