Anwesenheitserkennung mit Geofancy und iBeacon

Das situationsabhängige Schalten von Lichtern oder das Steuern von Heizungen nach einem Heizplan ist schon eine feine Sachen. Ein weiterer interessanter Gedanke ist neben dem situationsabhängige das ortsabhängige Schalten. So könnte man zum Beispiel alle Lichter ausschalten, sobald man das Haus verlässt. In diesem Beitrag erkläre ich euch, wie ihr eine Anwesenheitserkennung mit dem Raspberry und der App „Geofency“ (Apple App-Store) auf dem Smartphone realisiert. Für Android gibt es die App „EgiGeoZone Geofence“ (Google Play-Store). Die nachfolgende Einrichtung wurde jedoch mit der iOS-App „Geofency“ gemacht. Beim Android-Smartphone sollte es aber ähnlich sein.

Verfahren zur Anwesenheitserkennung

Um eine Anwesenheitserkennung zu realisieren gibt es mehrere Möglichkeiten. Man kann zum Beispiel mit Hilfe des FritzBox-Moduls überprüfen welche Geräte sich im eigenen WLAN befinden. Eine Weitere Möglichkeit ist der Einsatz von Bluetooth. Dank Bluetooth LE (Low-Energy) verbrauch es um einiges weniger Energie als WLAN und schont somit den Akku des Smartphones. Ein weiterer Vorteil ist der, das erst beim Verlassen bzw. Eintreten des überwachten Bereiches eine Nachricht gesendet wird. Bei einer WLAN-Überwachung muss in engen Intervallen aktiv überprüft werden, ob sich das Smartphone noch in Reichweiche befindet. Apple bietet mit iBeacon ein Protokoll, welches die Anwesenheit von Bluetooth-Geräten erkennt. Gedacht ist diese Technik zum Beispiel für das versenden von ortsabhängiger Werbung, zum Beispiel in einem Kaufhaus. Sie lässt sich jedoch auch perfekt für eine einfache Anwesenheitserkennung zu Hause verwenden.

Was ist ein iBeacon und wie funktioniert er?

Ein iBeacon ist ein kleiner Sender der auf Bluetooth-LE basiert. Er sendet in einem festen Intervall ein Signal aus. Befindet sich nun ein Empfänger (Smartphone) im Empfangsradius kann die gesendete UUID (Universally Unique Identifier) des Senders ausgewertet werden und die Empfangsstärke des Signales gemessen werden. Dadurch lässt sich der ungefähre Abstand zum Sender ermitteln. iBeacon Funktion

Sollten sich drei Sender im Empfangsbereich des Smartphones befinden, lässt sich durch Trilateration die exakte Position des Smartphones ermitteln. Bei vier Sender ist sogar die dreidimensionale Positionserkennung möglich. Die Sender senden dabei lediglich ihre UUID aus. Die App auf dem Smartphone muss dann anhand dieser UUID durch Internetabfrage etc. die Position der Sender abfragen. So lässt sich zum Beispiel in einem Kaufhaus die exakte Position des Kunden ermitteln und ihm dann positionsabhängige Angebote auf das Handy puschen – „Bananen heute im Angebot“.

In diesem Fall reicht der Einsatz eines iBeacons. Die korrespondierende App auf dem Smartphone sendet dann ein Nachricht an die FHEM-Installation, dass es sich im Empfangsbereich des iBeacons befindet. Mit Hilfe der App lassen sich auch Positionen untersuchen, welche nicht über ein iBeacon verfügen. Hier kommt dann GPS zum Einsatz. Auf dem Smartphone wird dann ein Radius festgelegt. Bei Eintritt bzw. Verlassen dieses Radius sendet die App dann eine Nachricht an FHEM.

Der nachfolgende Beitrag beschäftigt sich mit dem Erstellen eines eigene iBeacon auf dem Raspberry und die Anwesenheitserkennung mit dem Modul „Geofancy“ und der App „Geofency“ (Apple App-Store).

iBeacon auf dem Raspberry erstellen

Der iBeacon wird auf dem Raspberry mit Hilfe des Paketes Bluez realisiert.

Auf dem Raspberry Pi 2* ist der Einsatz eines USB-Bluetooth-Dongle*  erforderlich. Der Raspberry Pi 3* hat Bluetooth bereits on-Board (*Amazon Affiliate- Link)

Installation benötigter Treiber:

Um die aktuelle Version von Bluez installieren zu können, muss man sich diese manuell komplementieren. Die standardmäßig in der Paketquelle vorhandene Version ist meist veraltet. Welche Version aktuell ist, lässt sich auf der Homepage herausfinden.

Zuerst wird ein Ordner für die Installation erstellt und in diesen gewechselt.

Hierhin können nun die Installationsdateien heruntergeladen werden.

Folgende Befehle starten nun das Komplementieren und das Installieren von Bluez.

Nachdem alles Installiert wurde, kann man überprüfen ob alles funktioniert.

iBeacon Bluez

Es wurden keine Errors festgestellt. Die Bluetooth-Verbindung funktioniert.

iBeacon-Protokoll erstellen

Für das einfache Starten und Stoppen des iBeacons ist es sinnvoll sich ein Skript zu erstellen.
Das Startskript wird wie folgt erstellt:

Es öffnet sich der Editor. Das Skript mit folgendem Inhalt füllen:

Wichtig ist hier die letzte Zeile. Sie legt die UUID des iBeacons fest. Der Syntax ist wie folgt aufgebaut:

0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 [UUID] [Major] [Minor] [Power]

Der erstellte iBeacon hat also folgende Daten:

UUID: B25F73BA-54DE-43F2-B416-D0513E6279E0
Major: 0
Minor: 0
Power: C8

Werden mehrere iBeacons verwendet, muss darauf geachtet werden, dass jeder iBeacon seine eigene, eindeutige und einmalige UUID bekommt.

Da das Startskript später in den Autostart kommt, sollten die Recht entsprechend angepasst werden. Bearbeiten darf nur der Eigentümer (root) und ausführen dürfen alle. Es ist also nicht möglich, das Angreifer das Skript bearbeiten, welches dann durch den Autostart unerwünschte Folgen haben kann.

Neben dem Startskript wird auch ein Stopskript erstellt:

Mit folgendem Inhalt:

Auch hier wieder die Recht anpassen.

Nun wird das Startskript noch in den Autostart geschrieben, damit der iBeacon auch nach einem Systemneustart automatisch aktiviert wird.

Es öffnet sich der Editor. Vor der Zeile „exit 0“ wird nun der Pfad zum Startskript hinterlegt.

Zum erstmaligen Starten kann das Skript manuell ausgeführt werden:

Die Ausgabe zeigt nun die Daten des iBeacons an. Ab sofort läuft der iBeacon und sendet fröhlich seine UUID hinaus.

iBeacon Start

Mit der App „Locate“ (Apple App-Store) lässt sich der iBeacon nun testen.

Locate - Locate iBeacons

Über Locate iBeacons lassen sich alle iBeacons in der Umgebung anzeigen. Damit ein iBeacon angezeigt wird, muss dessen UUID sich in der Liste der überwachten UUIDs befinden.

no UUIDs - Locate

Dazu einfach auf den ersten Listen-Eintrag tippen. Es öffnet sich die Liste mit den überwachten UUIDs. Über das Plus oben rechts lässt sich nun der eigene iBeacon eintragen.

Locate - iBeacon eintragen

Anschließend sollte sich auch der eigene iBeacon in der Übersicht der gefundenen iBeacons befinden.

Locate - iBeacon gefunden

Tippt man nun auf diesen, lässt sich der Abstand zwischen Smartphone und iBeacon kalibrieren. Anschließend erhält man über Distanz relativ genau den Abstand zum iBeacon angezeigt.

Locate - iBeacon Distance

Der iBeacon funktioniert also tadellos.

Einrichtung unter FHEM und der App Geofency

Die Verbindung zwischen FHEM, iBeacon und der Geofency App (Apple App-Store) stellt das FHEM-Modul Geofancy her. Über ein definiertes Devices lassen sich mehrere Smartphones „überwachen“. In diesem Fall habe erstmal nur mein eigenes Smartphone über ein Geofancy-Devices definiert:

Das Device hat den Namen „Daniel“ (vorderes Daniel). Das hintere „Daniel“ dient für den Nachrichtenempfang von sogenannten Webhook-Nachrichten. Webhook-Nachrichten sind Nachrichten zwischen zwei Servern. In diesem Fall zwischen dem Smartphone und FHEM. Das oben definierte Device „Daniel“ reagiert also auf Nachrichten die an

gesendet werden (IP-Adresse entsprechend anders).

Als Gegenstück zu FHEM dient die App „Geofancy“. Die App protokolliert an welchen Orten man wie lange sich aufgehalten hat. Zusätzlich lassen sich über diese App bestimmt Orte fest überwachen und beim Eintritt oder Verlassen sogenannte Webhook-Nachrichten senden. Über ein Plus oben links lassen über unterschiedliche Arten Orten hinzufügen.

Geofance - Ort hinzufügen

Für das eigene Zuhause kommt nun der erstellte iBeacon zum Einsatz. Die App fragt nun nach den Daten des iBeacons. Diese wie oben erstellt eintragen:

Geofance - iBeacon konfig

„Update der Geo-Position“ kann optional aktiviert werden. Ist aber eher bei portablen iBeacons sinnvoll. Mit Fertig wird die Einrichtung abgeschlossen.

Die Liste der überwachten Positionen enthält nun auch den eigenen iBeacon. Die App sollte auch direkt erkennen, dass man sich in dessen Reichweite befindet (blau hinterlegt).

Geofancy - iBeacon

Über die drei Punkte lässt sich der iBeacon umbenennen. Des Weiteren lassen sich hier auch die Webhook-Nachrichten einstellen.

Geofancy - Settings

Über Event–>URL Einstellungen lässt sich die Verbindung zur FHEM-Installation herstellen. Neben dem Aktivieren der Mitteilungen muss auch die URL des korrespondieren FHEM-Devices angegeben werden. Ich meinem Fall habe ich meine öffentlich Adresse angegeben, welche ich durch MyFritz erhalten habe. Der Vorteil ist der, dass die App auch beim Verlassen des iBeacon-Bereiches eine Mitteilung an FHEM senden kann, wenn eventuell das WLAN-Signal bereits abgebrochen ist.

Webhook Settings

Die URL sollte folgenden Aufbau haben:

oder

Das Daniel bezieht sich dabei nicht auf den Namen des definierten Devices, sondern auf die URL auf welche das Devices hört, siehe oben.

ACHTUNG: Auf Sicherheit achten –> SSL-Verbindung und Passwort-Schutz.

Sollen mehrere Smartphones „überwacht“ werden, lassen sich diese Einstellungen natürlich auch auf mehrere Smartphones eintragen. Je Smartphone werden dann beim FHEM-Device unterschiedliche Readings angelegt.

Eine Menü-Ebene zurück lässt sich zudem die Authentifizierung einstellen. Solltet ihr eure FHEM Installation mit einem Benutzernamen und Passwort abgesichert haben, solltet hier die entsprechenden Daten eingetragen werden. Das POST-Format kann auf Default bleiben.

Mit dem Verbindungstest lassen sich die Einstellungen nun überprüfen. Ein erfolgreicher Test wird mit einem OK quittiert. Gleichzeitig ändern sich die Reading (state) im definierten FHEM-Devices.

FHEM geofancy Reading

Man erhält nun als „state“ die UUID eines imaginären iBeacons und noch ein paar weiter Zahlen und Ziffern. Wichtig ist hier die dev-ID. Sie hat 32 Ziffern und hat folgenden Aufbau. 27xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Damit in diesem Devices noch zusätzliche Readings eingelesen werden, muss ein devAlias eingerichtet werden.

Bei Mehreren Smartphones lassen sich die devAlias durch ein Leerzeichen trennen:

Nach einer kurzer Zeit aktualisiert sich das Devices und es erscheinen eine Menge zusätzlicher Infos.

Geofancy - devAlias

Diese Readings könnte man nun weiter verarbeiten um zum Beispiel Geräte an- oder abzuschalten. Wie immer sind die Möglichkeiten keine Grenzen gesetzt.

Ich hoffe ich konnte euch die Technik hinter iBeacons und die Zusammenarbeit mit FHEM etwas näher bringen und wünsche ich euch wie immer ein erfolgreiches Nachmachen.

Schreibe einen Kommentar

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

*