Mitteilung: "Fenster zu lange offen"


In diesem Beispiel wird eine Mitteilung versendet, wenn ein Fenster bereits 1 Stunde offen steht und die Außentemperatur weniger als 10°C beträgt.

Küchenfenster
Jetzt
Das Küchenfenster in seit 1 Stunde offen und es hat nur 2°C draußen!

Programmiert wurde dieses Beispiel mit folgendem Skript.

 1hkknx, time, fmt, maps = import("hkknx"), import("time"), import("fmt"), import("maps")
 2
 3// Speichere die Gruppenaddresse und den Namen
 4// des dazugehörigen Fensters.
 5windows = map[string]string{}
 6windows["0/0/1"] = "Küchenfenster"
 7windows["0/0/2"] = "Schlafzimmerfenster"
 8windows["0/0/3"] = "Kinderzimmerfenster"
 9keys = maps.Keys(windows)
10
11// Überwache alle Gruppenadressen und setze als Bedingung,
12// dass eines der Fenster länger als 1 Stunde offen ist.
13ch = hkknx.ObserveValues(keys...).Any().EqualTo(1).Duration(1 * time.Hour).Notify()
14
15for {
16	// Warte bis die Bedingungen erfüllt sind.
17	telegram = <-ch
18
19	// Frage die Wetterdaten ab und überprüfe,
20	// ob die Temperatur kleiner als 10°C ist.
21    weather, err = hkknx.GetCurrentWeather()
22	if err != nil {
23		println(err)
24		continue
25	}
26    
27	if weather.Temp < 10 {
28		// Setze die Gruppenadressen in einen Fenstername um.
29		name = windows[telegram.Addr]
30
31		// Erstelle den Text für die Mitteilung.
32		msg = fmt.Sprintf("Das %s in seit 1 Stunde offen und es hat nur %.0f°C draußen!", name,weather.Temp)
33
34		// Sende die Mitteilung
35		hkknx.SendNotification(name, msg)	
36	}
37}

In der Variable windows werden die Gruppenadressen gespeichert, die den Status der Fensterkontakte angeben.

Mit der Funktion ObserveValues(…) werden alle Gruppenadressen überwacht. Die Bedingungen Any().EqualTo(1).Duration(1 * time.Hour) legen fest, dass der Wert 1 von einer der Gruppenadresse für eine Dauer von einer Stunde bestehen muss. Die Funktion Notify() gibt als Rückgabewert einen Channel zurück, welcher das letzte empfagene Telegram enthält, welches alle Bedingungen erfüllt hat.

Bleibt das Fenster länger als eine Stunde geöffnet, wird mit der Funktion GetCurrentWeather die Außentemperatur aus dem Internet geladen. Falls die Außentemperatur weniger 10°C beträgt, wird mit SendNotification eine Mitteilung versendet.


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