ONLINE

Anwesenheitserkennung reloaded

Dieser Beitrag schrieb ich vor 2 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

Anwesenheitserkennung - @homeVor 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 im 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 anschliessend 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 folgendermassen 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.itemsGITHUB. Darstellen lasse ich mir meine Switches über die anwesenheit.sitemapGITHUB, 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.rulesGITHUB zur Verfügung gestellt.

MarianneEs läuft stabil, es ist einfach grossartig. 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?

  1. Das mit der »plötzlichen Abwesenheit« kann ich inzwischen bestätigen; liege ich abends im Bett, ist mein Handy ausserhalb der WLAN-Reichweite und eingebucht ins LTE von Vodafone. Und das ist der Moment, in dem Owntracks mir meldet »Entering work«.

    Ich kann mir das nur so erklären, dass das an der Position der Sendemasten liegt; zwar ist meine Arbeitsstelle nicht am anderen Ende der Welt, aber lt. Google Maps sind es durchaus 3,3km. Hmmm. Das mit dem zeitgleichen Telefonieren hatten wir noch nie, danke für den Hint. Klar — in dem Moment schiesst sich das Setup ins Knie…

    Mein OpenHAB-Setup ist für mich eher experimentell momentan; Push-Benachrichtigungen kann man von der Standortbestimmung ganz gut abhängig machen, mit einer richtig lauten Alarmanlage oder so einem Blitzlicht auf dem Dach wäre ich eher vorsichtig 😀 In diese iBeacon-Sache bzw. RFID-Lösungen arbeite ich mich gerade ein — sowas wäre auch im Zusammenspiel mit einem Sonos-System durchaus charmant *sabber*…

  2. Schöne Anleitung! Genauso mache ich es auch. Meine Erfahrung zeigt jedoch, dass dies nicht immer so funktioniert wie es soll: Aus irgendwelchen Gründen werden meine Frau oder ich plötzlich „abwesend“, d. h. Owntracks hat unsere Position plötzlich gute 300 m fern von zu Hause festgestellt und so natürlich auch die entsprechenden Regeln in openHAB ausgelöst. Dabei waren alle Personen sowie die iPhones zu Hause. Der Zustand hält zum Glück dann nur ein paar Minuten an, dann „kommen wir wieder nach Hause“.

    Um das Problem zu lösen, habe ich nun weitere Faktoren in die Ortserkennung zu Hause implementiert. Via network health binding prüfe ich, ob die iPhones da sind. Das funktioniert natürlich aufgrund der bekannten iPhone-WLAN-Problematik auch nicht zuverlässig, aber irgendwann wird das iPhone zu Hause erkannt – und solange die Wohnungstür nicht aufgeht, kann keiner entwischen (Wasp in a box) und die Geoerkennung via Owntracks wird solange ignoriert.

    Ein weiteres Problem, das mir aufgefallen ist in Kombination mit Owntracks: Manchmal kommt es vor, dass je nach Netzverfügbarkeit (nehme ich an) beim Telefonieren die mobile Internetverbindung nicht vorhanden ist. In dieser Zeit schafft es Owntracks natürlich nicht, seinen Standort an den mosquitto Server zu schicken. Telefoniert also jemand auf dem Weg nach Hause, erkennt openHAB das nicht. Das ist letzte Woche passiert und hat unser Alarmprogramm ausgelöst mit Pushbenachrichtigungen, dass die Haustür geöffnet wurde, die Kamera hat Fotos gemacht und die in die Dropbox verschoben usw.

    Alles nicht schlimm, aber ich bin derzeit nicht 100%ig glücklich mit der Standortbestimmung. Es ist ok und wir nutzen es auch, aber ich kontrolliere immer noch regelmässig, ob wir richtig positioniert worden sind, ob die Kameras zu Hause scharf geschaltet worden sind, die Heizungen aus, usw. Ich glaube, richtig interessant und zuverlässiger wird es erst mit Beacons oder anderen stationäreren Lösungen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.