Geo-Taskmanager: Aufgaben bei Ankunft/Verlassen ausführen

  • 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. :D

    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. :daumendreh2:

    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. :angel:

    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


    geotask.jpg

    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. :bravo2:

    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äte
    • WebSocket Implementierung
    • Anzeige der aktuell Anwesenden Nutzer (Anzeige der angemeldeten Geräte)
    • Minification von JS+CSS für bessere Ladezeiten
    • Aufrufen 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

    Einmal editiert, zuletzt von Chris1705 (8. April 2014 um 10:33)

  • Geo-Taskmanager: Aufgaben bei Ankunft/Verlassen ausführen? Schau mal ob du hier fündig wirst!

  • Moin..
    ich habe geanu das von die beschriebene Problem: iOS, Bluetooth und W-Lan taugt nicht...
    Geofany habe ich auch schon gefunden, allerdings bin ich mir noch nicht sicher ob ich dieses auch verwenden will. Man weiss ja nie wo die die Daten noch hinschickt ;)
    Aber ich werde deinen Ansatz sicherlich weiter verfolgen, weiter so...


  • Ein sehr schöner Ansatz. ich bin auf das Script gespannt ;)

    Vielen Dank. :)


    Moin..
    ich habe geanu das von die beschriebene Problem: iOS, Bluetooth und W-Lan taugt nicht...
    Geofany habe ich auch schon gefunden, allerdings bin ich mir noch nicht sicher ob ich dieses auch verwenden will. Man weiss ja nie wo die die Daten noch hinschickt ;)
    Aber ich werde deinen Ansatz sicherlich weiter verfolgen, weiter so...

    Geofency übermittelt die Daten nur an die Konfigurierte API, dem vertrau ich auch halbwegs. Aber das muss natürlich jeder für sich selbst entscheiden. :)


  • Klingt echt interessant. Fallen mir direkt einige Anwendungsmöglichkeiten ein. Bin auf das Script gespannt.

    Vielen Dank! :)

    Heute sind Authentifizierung und WebSockets hinzugekommen. Das heißt es kann nicht mehr jeder einfach so die Weboberfläche nutzen/Events auslösen und die Event-Liste wird nun automatisch aktualisiert.

    Im Laufe der Woche folgen noch ein paar Fehlerbehandlungen (bzw. wenigstens sinnvolle Fehlermeldungen, damit man weiß, was Sache ist) und dann lass ich das Script auf euch los. :)

    //Edit: Und eine Installationsanweisung gibt's dann natürlich auch

    Einmal editiert, zuletzt von Chris1705 (16. März 2014 um 21:03)

  • Hallo ihr Beiden,

    Ich bin Vollzeitstudent und arbeite zusätzlich in Teilzeit, daher kann ich keinen genauen Termin nennen.

    Meinen bisherigen Ansatz hab ich verworfen und habe mit einer erneuten Umsetzung begonnen. Statt dem normalen SQLite Treiber benutz ich jetzt sqlobject und habe noch ein paar Methoden generisch gestaltet, weil es einfach der sauberere Weg ist. Ich werde aber einen GitHub Link posten, sobald die Grundfunktionen implementiert sind. :)

  • Ich betreibe bisher einen Präsens-Check via Bluetooth und bin jetzt aber auch über Geofency gestolpert. Mir geht es hauptsächlich darum, etwas auszulösen, wenn ich nachmittags die Arbeit verlasse oder für ähnliche Situationen (also das Triggern von Scripts, abhängig von Raum und Zeit (klingt cool)).

    Die von Chris1705 angesprochene Lösung scheint in die richtige Richtung zu gehen. Das Drumherum ist bei mir schon eingerichtet und basierend auf diesem Ansatz habe ich auch schon eine funktionierende ähnliche Grundlage.

    Die Diskussion scheint schon älter zu sein. Hat das Thema jemand weiterverfolgt?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!