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}

Auf dieser Seite
Ähnliche Beiträge
© Matthias Hochgatterer – MastodonGithubRésumé