Anwesenheitserkennung reloaded

Diesen Beitrag schrieb ich 6 Jahre und 7 Monate zuvor; die nachfolgenden Ausführungen müssen heute nicht unbedingt noch genau so funktionieren. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

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?