CLOSED: [2021-07-17 Sa 20:36] :LOGBOOK: - State "DONE" from "" [2021-07-17 Sa 20:36] :END: :PROPERTIES: :CREATED: [2021-07-17 Sa 20:36] :ID: 2021-07-17-automateGPSSMS :END: 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 [[https://play.google.com/store/apps/details?id=com.llamalab.automate&hl=de&gl=US][Automate]]-Skript. [[https://play.google.com/store/apps/details?id=com.llamalab.automate&hl=de&gl=US][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 [[https://www.reviewgeek.com/2241/use-these-7-great-apps-to-share-your-location-with-friends-and-family/][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 [[https://play.google.com/store/apps/details?id=info.varden.hauk&hl=de_AT&gl=US][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 [[https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm&hl=de&gl=US][Tasker-App]] automatisiert haben, kam die Idee dies über diese Schiene zu probieren. Ich habe mich für die [[https://play.google.com/store/apps/details?id=com.llamalab.automate&hl=de&gl=US][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 [[https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms&hl=de&gl=US][Signal-App]] auch als SMS-App verwenden. Allerdings haben erste Versuche gezeigt, dass die SMS von der [[https://play.google.com/store/apps/details?id=com.llamalab.automate&hl=de&gl=US][Automate-App]] gelesen werden können. ** Voraussetzungen - [[https://play.google.com/store/apps/details?id=com.llamalab.automate&hl=de&gl=US][Automate]] muss am Android Gerät installiert sein - Für den SMS-Versand muss eine SIM-Karte im Gerät eingelegt sein - (optional) [[https://play.google.com/store/apps/details?id=net.osmand&hl=de&gl=US][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. #+CAPTION: Die Telefonnummer als Variable speichern #+ATTR_HTML: :alt Die Telefonnummer als Variable speichern #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-TelephoneNumSet.jpg]] 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. #+CAPTION: Funktionsblock zum Versenden der Anfrage-SMS #+ATTR_HTML: :alt Funktionsblock zum Versenden der Anfrage-SMS #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-SMS_Send_Request.jpg]] Das fertige Skript schaut wie folgt im Ablauf aus. #+CAPTION: Aufbau des Skripts zur Anfrage der GPS-Position per SMS #+ATTR_HTML: :alt Aufbau des Skripts zur Anfrage der GPS-Position per SMS #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:SendPositionRequestSMS.png]] Das Skript hab ich [[https://github.com/diovon/Automate_Script-SMS_Send_Request][hier]] als flo-Datei bereitgestellt. Diese Datei muss nur mehr in die [[https://play.google.com/store/apps/details?id=com.llamalab.automate&hl=de&gl=US][Automate-App]] importiert und Telefonnummer angepasst werden. Um das Skript auszuführen, habe ich es meinen Eltern als App-Starter auf den Homescreen gelegt. #+CAPTION: Install Home Screen Shortcut für das direkte Ausführen des Skripts über den Homescreen #+ATTR_HTML: :alt Install Home Screen Shortcut für das direkte Ausführen des Skripts über den Homescreen #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-Install_Home_Screen.jpg]] *** 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. #+CAPTION: Warten auf den Empfang der SMS zur Positionsanfrage #+ATTR_HTML: :alt Warten auf den Empfang der SMS zur Positionsanfrage #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-SMS_Get.jpg]] 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. #+CAPTION: Automate Block zur Ermittlung der GPS-Position #+ATTR_HTML: :alt Automate Block zur Ermittlung der GPS-Position #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-Location_get.jpg]] 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 [[https://play.google.com/store/apps/details?id=net.osmand&hl=de&gl=US][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. #+CAPTION: Generierung des SMS Textes mit den Koorindaten als OSMAnd Link #+ATTR_HTML: :alt Generierung des SMS Textes mit den Koorindaten als OSMAnd Link #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-Generate_Osmand_url.jpg]] 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. #+CAPTION: Funktionsblock zum Versenden der SMS mit den OSMAnd-Link #+ATTR_HTML: :alt Funktionsblock zum Versenden der SMS mit den OSMAnd-Link #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-SMS_Send_GPS.jpg]] Der komplette Ablauf des Skriptes ist in der nachfolgenden Grafik ersichtlich. Wie beim vorherigen Skript stelle ich es als [[https://github.com/diovon/Automate_Script-SMS_Send_Position_SMS][flo-Datei]] via github zur Verfügung. #+CAPTION: Aufbau des Skripts zum Senden der GPS-Position per SMS #+ATTR_HTML: :alt Aufbau des Skripts zum Senden der GPS-Position per SMS #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:SendPositionSMS.png]] 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 [[https://play.google.com/store/apps/details?id=com.llamalab.automate&hl=de&gl=US][Automate-App]] aktiviert. #+CAPTION: Aktivierung der Option, dass Skript nach Smartphone Neustart automatisch gestartet wird #+ATTR_HTML: :alt Aktivierung der Option, dass Skript nach Smartphone Neustart automatisch gestartet wird #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-Run_on_startup.jpg]] *** 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. #+CAPTION: Anzeige der SMS in Signal im Zuge eines Funktionstests #+ATTR_HTML: :alt Anzeige der SMS in Signal im Zuge eines Funktionstests #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-SMS_Test.jpg]] Wird der OSMAnd-Link in der SMS angeklickt, kann dieser entweder in der [[https://play.google.com/store/apps/details?id=net.osmand&hl=de&gl=US][OSMAnd-App]] oder einem Webbrowser angezeigt werden. Nachfolgende Abbildung zeigt die Anzeige in der [[https://play.google.com/store/apps/details?id=net.osmand&hl=de&gl=US][OSMAnd-App]]. #+CAPTION: Anzeige der Position in OSMAnd #+ATTR_HTML: :alt Anzeige der Position in OSMAnd #+ATTR_HTML: :align center :width 560 :linked-image-width 1500 [[tsfile:20210717-OSMAnd_View.jpg]] 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.