In diesem Blogbeitrag möchte ich euch ein kleines Skript von mir vorstellen, mit dem auf einem Android Smartphone per SMS-Anfrage automatisch eine SMS mit GPS-Positionsdaten gesendet wird. Bei dem Skript handelt es sich um ein Automate-Skript. Automate ist eine App die es ermöglicht bestimmte Aufgaben am Android Smartphone zu automatisieren. Die Skripterstellung erfolgt grafisch in Form eines Flussdiagramms und man benötigt keine großartigen Programmiererfahrungen.
Motivation für das Skript und alternative Apps
Die Motivation für das Skript bestand darin, dass meine Eltern eine Möglichkeit benötigten, wenn mein Vater auf längeren Radtouren unterwegs ist, meine Mutter die Möglichkeit hat, seine Position ohne eine Interaktion seinerseits zu erhalten. Zunächst machten meinen Bruder und mich auf die Websuche, ob wir für diesen Anwendungsfall auf bestehende Apps zurückgreifen können. Dabei stießen wir schnell auf Testberichte und Sammlungen von Tracking Apps für Freunde und Familien, wie diese hier. Dabei gibt es kostenpflichtige und freierhältliche Apps. Die meisten Apps verwenden Cloud-Dienste. Da wir beide nicht so die Fans von Cloud-Services sind und gerne Wissen, was mit den versendeten Daten passiert, sind diese für uns ausgeschieden. Aus meiner lokalen OpenstreetMap Community habe ich von hauk oder Nextcloud-Apps erfahren. Da ich allerdings über keinen eigenen Server verfüge, sind auch diese Anwendungen ausgeschieden. Da mein Bruder und ich in der Vergangenheit schon diverse Aufgaben via Tasker-App automatisiert haben, kam die Idee dies über diese Schiene zu probieren. Ich habe mich für die Automate-App entschieden, weil diese kostenlos ist und ich in den letzten Jahren auf diese App umgestiegen bin. Anfangs dachten wir, dass wir mit dieser Methode scheitern werden, weil meine Eltern die Signal-App auch als SMS-App verwenden. Allerdings haben erste Versuche gezeigt, dass die SMS von der Automate-App gelesen werden können.
Voraussetzungen
- Automate muss am Android Gerät installiert sein
- Für den SMS-Versand muss eine SIM-Karte im Gerät eingelegt sein
- (optional) OSMAnd-App zur Anzeige der GPS-Position. Die generierten GPS-Daten lassen sich allerdings auch in einem Web-Browser (Chrome, Firefox, …) darstellen.
Das Skript
Um den oben beschriebenen Anwendungsfall abzudecken, benötige ich zwei Skripte. Ein Skript fragt nach der GPS-Position nach, das andere Skript antwortet aufgrund der SMS mit den GPS-Positionsdaten.
Skript zur Anfrage der GPS-Position
Dieses Skript ist sehr einfach aufgebaut. Es besteht im Grunde nur aus der Funktion, eine SMS mit einem bestimmten Text an eine definierte Nummer zu senden. Die Nummer wird dabei in einem eigenen Variablen Block gesetzt. Dabei ist es wichtig, dass die Telefonnummer zwischen zwei Hochkomma gesetzt wird, damit sie als Text erkannt wird, vor allem wenn man wie ich die Ländervorwahl verwendet.
Bei dem Funktions-Block für die ausgehende SMS ist bei der Telefonnummer die zuvor definierte Variable zu verwenden. Die Option "Hide from messaging app" hatte bei mir keine Auswirkung, die SMS werden in Signal trotzdem angezeigt.
Das fertige Skript schaut wie folgt im Ablauf aus.
Das Skript hab ich hier als flo-Datei bereitgestellt. Diese Datei muss nur mehr in die Automate-App importiert und Telefonnummer angepasst werden.
Um das Skript auszuführen, habe ich es meinen Eltern als App-Starter auf den Homescreen gelegt.
Skript zur Sendung der GPS-Position
Das zweite Skript beschäftigt sich mit dem Empfang der SMS aus Skript 1 und dem Versand der GPS-Position.
Auch hier wurde zuvor die Telefonnummer als Variable definiert, um sie im Weiteren Verlauf nicht ständig eingeben zu müssen und so Tippfehler vermeidet. Des Weiteren wurde der Nachrichtentext ebenfalls als Variable definiert, da die Position nur aufgrund eines bestimmten Textes versendet werden soll.
Danach hab ich einen Zwischenblock eingebaut, der überprüft, ob GPS überhaupt aktiv läuft. Wenn nicht, dann wird keine SMS versendet und es wird erneut auf eine neue SMS gewartet. Sicherlich wäre es praktisch, wenn das Skript die GPS-Funktion selbstständig aktiviert, dies wird allerdings von Android aufgrund von Sicherheitsrichtlinien nicht erlaubt. Ist GPS aktiv, erfolgt die Ermittlung der GPS-Position. Für die beiden Koordinaten setze ich je eine Variable, die im weiteren Verlauf zur Anwendung kommen.
Die zuvor erstellten Variablen für die beiden Koordinaten kommen nun zum Einsatz. Um dem SMS-Empfänger eine komfortable Möglichkeit der Anzeige der GPS-Position zu bieten, habe ich mich für die Verwendung eines OSMAnd-Links entschieden. In der OSMAnd-App ist es nämlich möglich Positionen per Weblink zu teilen. Der Link hat die Form von https://osmand.net-go?lat="wert"&lon="wertLAT"&z="wertLONG" . In Automate müssen daher nur mehr die zuvor erstellten Variablen in die URL eingesetzt werden. Der Link wird in einer eigenen Variable gespeichert, um beim Versenden der SMS auf diese zugreifen zu können.
Beim Versender der SMS kann wieder auf die Variable der Telefonnummer, die bereits beim Empfang zum Einsatz kam, verwendet werden. Unter "Message" wird die vorher erstelle Variable "varMessage", die den OSMAnd-Link enthält, eingefügt.
Der komplette Ablauf des Skriptes ist in der nachfolgenden Grafik ersichtlich. Wie beim vorherigen Skript stelle ich es als flo-Datei via github zur Verfügung.
Bei diesem Skript hab ich mich dazu entschieden, dass es ständig im Hintergrund laufen darf. Das es nach einem Smartphone Neustart ebenfalls wieder läuft, habe ich die entsprechende Option in der Automate-App aktiviert.
Finaler Test
Für den Test hier habe ich die beiden Skript nur auf meinem Smartphone ausgeführt. Wie in der folgenden Abbildung zu sehen ist, wird sowohl die Anfrage-SMS als auch die SMS mit dem OSMAnd-Link angezeigt.
Wird der OSMAnd-Link in der SMS angeklickt, kann dieser entweder in der OSMAnd-App oder einem Webbrowser angezeigt werden. Nachfolgende Abbildung zeigt die Anzeige in der OSMAnd-App.
Sicherlich lässt sich das Skript um weitere Überprüfungen erweitern. Des Weiteren wird sich zeigen, wie sich das ständig aktive Skript auf den Akku-Verbrauch auswirkt. Hier kann dann eine Option eingebaut werden, dass nur bei Bedarf das Skript gestartet wird.