Hallo,
eigentlich wollte ich mit der Vorstellung warten, bis ich eine release-fähige Version meines Scripts fertig habe, aber ich kann nicht so lange warten.
Viele von uns hatten das Bedürfnis zu erkennen, ob jemand zu Hause ist oder nicht. Einige haben Implementierungen mit Hilfe von WLAN/Bluetooth gebaut, sind allerdings beim iPhone an die Grenzen gestoßen, da sich iOS Geräte aus Energiespar-Gründen einwenig blöd verhalten (zumindest für diesen Zweck).
Ich habe angefangen eine iOS App zu bauen, die einen etwas anderen Ansatz fährt und per API den aktuellen Standort übermittelt. Ein Arbeitskollege hat mich allerdings auf Geofency aufmerksam gemacht und ich hab meine Pläne direkt wieder verworfen.
Gefency ist eigentlich eine App für Zeiterfassung mit Hilfe von Zonen die per GPS (oder auch iBeacons!!!!) erkannt werden. Diese Zonen lassen sich sehr komfortabel konfigurieren.
Die Software bietet allerdings auch den sogenannten Webhook an: Wird eine Zone betreten oder Verlassen sendet die App per HTTP-POST Request ein JSON Objekt mit Informationen zur aktuellen Bewegung/zum aktuellen Standort an.
Weitere Besonderheit ist, dass der "Significant-Change Location Service" genutzt wird. Eine besonders stromsparende Variante zum Orten des iOS Gerätes.
Nun habe ich in Python ein kleines Script zusammengetippt, dass die Daten entgegennimmt, speichert und je nach Konfiguration hinterlegte Aufgaben ausführt. Das können Anwendungen, selbst geschriebene Bash-Scripte oder beliebige andere Shell-Commandos sein.
So lassen sich unterschiedliche Szenarien einstellen, die eigentlich nur durch die Phantasie begrenzt werden.
Außedem gibt es natürlich auch eine Prowl Integration, sodass ein Push an das iPhone gesendet wird, sobald ein Befehl gestartet worden ist.
Übersicht der aktuellen Features:
- Events: Darstellung der Events (Anzeige des Ortes, des Ereignisses [Ankunft/Verlassen], Gerät, Zeitstempel)
- Konfiguration von Tasks: Die Aufgaben können auf ein einzelnes Gerät reagieren oder auf alle vorhandenen
- Push-Notifications wenn ein Task angestoßen wird
- Ausführen der Tasks in separaten Threads
- Eingebauter Webserver (basierend auf Flask) + REST-Schnittstellen
- dynamische Single-Page-Weboberfläche basierend auf AngularJS
Zur aktuellen Version:
Das Script performt auf dem Raspberry ganz gut: Wird nicht auf die Oberfläche bzw. auf die API zugegriffen liegt die CPU Auslastung bei 0% und der RAM Verbrauch war bisher auch mit 2-3% ganz in Ordnung. Bisher läuft es seit 2 Tagen im Test und ist auch bei einem kleinen Stresstest nicht zusammengebrochen.
Geplante Features (in priorisierter Reihenfolge):
- Fehlerbehandlung und Fehlermeldungen (fehlen aktuell noch komplett)
- Dynamisches Anlegen von Konfigurations- und Datenbankdateien, falls diese noch nicht existieren
- "Passthrough" der übermittelten Daten, so dass auch andere Anwendungen auf die Geofancy API Zugriff bekommen
-
Erweiterte Konfiguration von Tasks (Beispielsweise in Abhängigkeit von der Anzahl der Anwesenden personen), Ausführen nur zu bestimmten Tageszeiten - Benachrichtigung per E-Mail
- Eigenständiges Webdesign (basiert aktuell auf dem Twitter Bootstrap Framework)
Erledigt:
Authentifizierung der GeräteWebSocket ImplementierungAnzeige der aktuell Anwesenden Nutzer (Anzeige der angemeldeten Geräte)Minification von JS+CSS für bessere LadezeitenAufrufen einer HTTP/REST-Schnittstelle als Aktion möglich
Falls Interesse bestehen sollte, werde ich, nachdem ich die ersten drei Todos abgehandelt habe, das Python Programm zur Verfügung stellen.
Fragen, Anmerkungen und Verbesserungsvorschläge nehm' ich gerne entgegen!
Gruß
Chris