Anwesenheitserkennung reloaded
Vor einiger Zeit hatte ich zum Thema Anwesenheitserkennung und openHAB ja schon einige Artikel geschrieben: wie man mosquitto installiert, wie man Owntracks aufs iPhone bringt und konfiguriert, wie man openHAB an mosquitto anbindet. Ich begann, das Setup zu testen.
Es gibt zwei grundsätzliche Herangehensweisen in Bezug auf die Konfiguration: im Manual Mode wird die home
-Geofence fest in der openhab.cfg
hinterlegt. Wird von Owntracks ein Update geschickt, berechnet das openHAB-Binding die Entfernung zu home und entscheidet, ob das Item auf ON
oder OFF
geschaltet werden muss. (Das ist genau das, was ich mit meinen ersten Artikeln zum Thema umsetzte.) Der Vorteil ist, dass man in Owntracks nichts weiter konfigurieren muss.
Allerdings ist das Setup relativ starr; flexibler und attraktiver fand ich den Region Mode, für den in der openhab.cfg
überhaupt keine Anpassungen erforderlich sind: in Owntracks legt man sich die markanten Wegpunkte an – eindeutig benamt (zum Beispiel arbeit, zuhause, schwimmbad), shared und mit einem Radius - und Owntracks ermittelt den Standpunkt in Relation zu den Wegpunkten. Erreiche ich den Radius eines meiner Wegpunkte, übermittelt die App ein enter
-Event, verlasse ich ihn, übermittelt sie ein leave
-Event. So kann ich beispielsweise nicht nur steuern, dass die Heizkörper von ECO
auf NORMAL
schalten sollen, sobald ich die home
-Geofence betrete (enter), sondern schon dann, wenn ich schwimmbad verlasse (leave).
Meine ersten Anläufe schlugen auch hier fehl, allerdings lag das nicht an fehlerhafter Konfiguration meinerseits, sondern vielmehr an einem Bug in OwnTracks. Schon mit der Beta-Version, die ich aufs iPhone bekam, lief alles fehlerfrei – und inzwischen ist Version 7.5.1 auch offiziell im App-Store verfügbar. Auf meinem mosquitto
-Server habe ich mich eingeklinkt und beobachtet, was so passiert; ich lasse mir jeglichen Output in das File output
schreiben, um ihn anschließend genauer betrachten zu können.
$ mosquitto_sub -d -v -t owntracks/# -u USERNAME -P PASSWORT > output &
Lege ich einen neuen Waypoint an mit dem Namen zuhause, einem Radius von 100m und setze ihn auf shared
, dann stellt sich das folgendermaßen dar:
Client mosqsub/10175-vps135057 sending PINGREQ
Client mosqsub/10175-vps135057 received PINGRESP
Client mosqsub/10175-vps135057 received PUBLISH (d0, q0, r0, m0, 'owntracks/mane/iphone6/waypoints', ... (142 bytes))
owntracks/mane/iphone6/waypoints {"rad":"100","tst":"1426503538","vel":0,"_type":"waypoint","alt":0,"lon":"7.xxxxx","vac":0,"cog":0,"lat":"42.yyy","tid":"E6","desc":"zuhause"}
Client mosqsub/10175-vps135057 sending PINGREQ
Client mosqsub/10175-vps135057 received PINGRESP
Funktionierende enter/leave
-Events stellen sich im Output dar wie folgt:
Client mosqsub/15197-vps135057 received PUBLISH (d0, q0, r0, m0, 'owntracks/mane/iphone6', ... (183 bytes))
owntracks/mane/iphone6 {"cog":-1,"batt":"57","lon":"7.xxxxx","acc":"198","vel":-1,"event":"leave","desc":"zuhause","vac":10,"lat":"42.yyy","t":"c","tst":"1426528074","a lt":231,"_type":"location","tid":"E6"}
Client mosqsub/15197-vps135057 received PUBLISH (d0, q0, r0, m0, 'owntracks/mane/iphone6', ... (183 bytes))
owntracks/mane/iphone6 {"cog":-1,"batt":"57","lon":"7.xxxxx","acc":"198","vel":-1,"event":"enter","desc":"zuhause","vac":10,"lat":"42.yyy","t":"c","tst":"1426528074","a lt":231,"_type":"location","tid":"E6"}
Analog zu den waypoints, die ich mir in Owntracks definiere, erstelle ich in openHAB nun Items, die den Zustand meiner Waypoints widerspiegeln: ich erfasse sie in anwesenheit.items. Darstellen lasse ich mir meine Switches über die anwesenheit.sitemap, aber nur dann, wenn sie auf ON stehen – ein sehr nützliches Feature der Sitemaps. Aufrufbar ist die Seite dann über http://localhost:8080/openhab.app?sitemap=anwesenheit
. Im events.log
von openHAB stellt sich mein Nachhausekommen so dar:
13375 2015-04-26 15:43:09 - mane state updated to {"cog":-1,"batt":"97","lon":"7.xxxxx","acc":"198","vel":-1,"event":"enter","desc":"zuhause","vac":10,"lat":"42.yyy","t":"c","tst":"1426528074","alt":231,"_type":"location","tid":"E6"}
13376 2015-04-26 15:43:09 - ManeHome state updated to ON
Was dann kommt, ist keine Magie, sondern der übliche Ablauf innerhalb von openHAB: in Abhängigkeit der Zustände der Items lassen sich Regeln definieren, Heizungen, Lichter, Alarmanlagen schalten, Rechner aus dem Sleep erwachen, … Ich regle es so, dass, die Variable CCU2_mqtt
auf der CCU2 entsprechend gesetzt wird, damit ich auch innerhalb der CCU2 Dinge von An- und Abwesenheit abhängig machen kann. Ein beispielhaftes Regelwerk habe ich unter anwesenheit.rules zur Verfügung gestellt.
Es läuft stabil, es ist einfach großartig. Für mich sehe ich keinen Bedarf, nun weiter an meiner Anwesenheitserkennung zu schrauben – ich habe ein Setup gefunden, das mir richitig gut gefällt. Wie sind eure Erfahrungswerte, wie löst ihr diese Anforderung?
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten