Smarthome-Update

Über das Thema „Smarthome“ muss ich demnächst mal einen längeren Beitrag verfassen und hier posten. Kurz gesagt, im letzten Jahr hat sich an der Stelle sehr viel bei uns im Haus getan. Angefangen hat es ja damals, abgesehen von der RWE-Smarthome-Lösung die nicht wirklich SMART ist, mit ein paar 1-Wire-Sensoren und FHEM.

Mittlerweile ist die Migration nach openHAB beendet und alle möglichen Sensoren, Aktoren, usw. sind miteinander über openHAB und die entsprechenden Bindings vernetzt und verbunden.

Aktuell, und weil ich danach gefragt worden bin, möchte ich an der Stelle mal unsere Anwesenheitserkennung auf Basis von openHAB vorstellen.
Das Projekt selbst, ist hier zu finden: https://github.com/jschanz/openhab-presence

Vorab sei vielleicht folgendes noch gesagt. Ich habe bei der Recherche zum Thema Anwesenheitsprüfung mit openHAB oder presence detection mit openHAB unzählige Anleitungen, Vorschläge, etc gefunden. Leider hat keine der vorgeschlagenen Lösungen bei mir fehlerfrei funktioniert. Von daher habe ich mir die Mühe gemacht und auf Basis von unseren Anforderungen eine Lösung gebastelt.
Die vorgestellte Lösung nutzt das networkhealth-binding von openHAB. Es werden keine gesonderten Hacks für Fritz!Box, TP-Link, Netgear, etc. verwendet. Alles basiert auf ICMP, wenn openHAB mit Root-Rechten läuft. Wenn nicht, wird ein TCP-Connect auf Port 7 durchgeführt. Das führt manchmal zu manch seltsamem Verhalten, da nicht jeder Netzwerkstack dies so implemetiert.

In diesem Beispiel werden zwei Mobiltelefone (Dave und Alice) erstellt. IP-Adressen bitte entsprechend anpassen. Die Datei hier kommt als presence.items in das configuration/items/-Verzeichnis.

Im nächsten Schritt werden die erstellten Items in der Sitemap sichtbar gemacht. Dazu entweder eine eigene presence.sitemap anlegen oder den Code entsprechend in die eigene Sitemap einbauen.

Wenn nach dem automatischen Reload der openHAB-Konfiguration (Logfile anschauen) alles funktioniert hat, kann der erste Test beginnen. Dazu einfach das WLAN an einem der Mobiltelefone deaktivieren und im events.log den Statuswechsel überprüfen. Der Schalter auf der Sitemap sollte danach ebenfalls den Status wechseln.

Komplizierter und mit etwas Logik versehen ist die dazugehörige Regel. Dieses Rule-Set steuert die Anwesenheit. Dazu werden pro Person zwei Schalter verwendet. Dies stellt sicher, dass es zu keinem „Flapping“ kommt, wenn das Mobiltelefon kurzzeitig die Verbindung zum WLAN verliert. Ist das Mobiltelefon länger als 5 Minuten abwesend, wird der Abwesenheitsstatus der Person auf OFF gesetzt. An der Stelle kann auch mit kürzeren Werten experimentiert werden, 5 Minuten sollten aber auf jeden Fall sicher sein.

Diese Art der Regel ist etwas aufwändig, da sich der Code an vielen Stellen wiederholt und für jede neue Person ein weiteres Mal dupliziert werden muss. Leider ist es mir nicht gelungen in openHAB dies auf eine bessere Version zu lösen. Ob es wirklich nur an mir lag, mag ich nicht ganz ausschließen. Allerdings verhält sich auch openHAB an vielen Stelle nicht ganz konsistent. So hat bei mir z.B. die vorgeschlagene Variante mit „changed from OFF to ON“ nicht zuverlässig funktioniert, da das Item stellenweise im Status undefiniert war, obwohl eine Sekunde zuvor der Wechsel von ON auf OFF problemlos funktioniert hat.

Dank der passenden Android-App, lässt sich der Status ebenfalls überprüfen.

Screenshot_2016-01-11-22-38-36

Wa lässt sich nun damit machen? Ein paar Beispiele, welche wir realisiert haben, möchte ich kurz zeigen:

  • Coming-Home-Funktion: Licht in der Einfahrt, Diele und Küche einschalten, wenn jemand nach Hause kommt (Telefon bucht sich ins WLAN ein).
  • Lüftungsanlage auf Stufe 1 stellen, wenn niemand Zuhause ist und die Luftfeuchtigkeit in Ordnung ist. Kommt jemand nach Hause, wird die Lüftungsanlage wieder auf Stufe 2 gestellt.
  • Diverse Geräte (Fernseh, Receiver, Radios, etc.) ausschalten, wenn niemand Zuhause ist.
  • Rolläden automatisch hochfahren, wenn morgens der letzte das Haus verlässt.
  • Licht in der Diele ausschalten, wenn ein Gerät die Verbindung zum WLAN verliert.