In diesem Artikel hatte ich vor Jahren darüber geschrieben, wie ich mir einen Latitude-Ersatz zusammengeschustert hatte (und was das überhaupt sein soll: Ich tracke mich selbst auf meinem eigenen Server, so dass ich weiß, was ich letzten Sommer getan hatte 😉).

Mit dem Umstieg auf Android 10 funktionierte OwnTracks bei mir nicht mehr so wirklich: Meine Positionsdaten wurden nur spärlich an meinen Server gesendet (was aber wahrscheinlich nur daran lag, dass ich die Akku-Optimierungs-Funktion von Android 10 noch nicht gekannt hatte).

Da stieß ich auf die Android-App GPS Logger, welche wie OwnTracks die Möglichkeit bietet, die eigenen Positionsdaten hin und wieder an einen gewünschten Server zu senden.

Allerdings telefoniert GPS Logger nicht per MQTT zu mir nach Hause, sondern über das HTTP(S)-Protokoll.
Einerseits unschön, da ich den MQTT-Server sowieso am laufen hatte und mir die Daten bei MQTT für Dritte schlechter Abgreifbar erscheinen, andererseits natürlich um einiges einfacher umzusetzen, wenn man bei Null anfangen will.

Client

Auf seinem Android-Handy installiert man GPS Logger (Freeware).
In den Allgemeinen Einstellungen aktiviert man, dass die App beim Einschalten des Gerätes gestartet werden soll und dass die Protokollierung sofort beim Öffnen gestartet werden soll.
 
Unter Leistung habe ich, um hoffentlich Akku zu sparen, nur "Log network locations" aktiviert (kein GPS/GNSS) und "Aufzeichnung pausieren, wenn keine Standortänderung erfolgt".
"Aufzeichnungsintervall" habe ich auf 600 Sekunden, "Entfernung zwischen Messpunkten" auf 200 Meter, "Genauigkeit in Metern" auf 40 Meter, "Zeit, bis die Genauigkeit erreicht ist" auf 60 Sekunden gesetzt. Doch dies ist alles persönliche Präferenz. Wenn ich mich um weniger als 200 Meter bewege, will ich meine Positionsdaten nicht übermittelt haben, um nicht wegen jedem Meter Bewegung einen neuen Datebankeintrag zu haben.
 
Bei den Aufzeichnungsinformationen habe ich "In eine benutzerdefinierte URL protokollieren" aktiviert...
 
...worauf eine weitere Seite erscheint, auf welcher ich Adresse und Parameter eingeben kann, an welche die Positionsdaten gesendet werden sollen.

Die URL verweist auf ein PHP-Skript auf meinem Server, als GET-Parameter gebe ich einige Infomationen, wie etwa den Namen meines Gerätes (falls man mehrere der Familie loggen möchte und diese unterscheiden will), LAT/LONG-Position, Höhe (ALT) und Genauigkeit (ACC), mit.
Eine Liste aller Variablen, welche dann beim Senden mit Echtdaten gefüllt werden, erhält man, wenn man auf den darunterliegenden Menüpunkt "Parameter" tippt.

Als HTTP-Methode habe ich GET...aber kann natürlich auch POST gewählt werden; das PHP-Skript muss dann entsprechend angepasst sein.

Praktischerweise kann man unter dem Menüpunkt "Basic Authentification" Benutzernamen und Passwort für die ganz oben angegebene URL eintragen, sofern man diese per .htaccess-Basic-Authentification schützen möchte (empfehlenswert...immerhin eine kleine Sicherheit, dass kein Scherzbold auf die Idee kommt, das Skript mit falschen Daten vollzuspammen).
Wie man dies serverseitig einrichtet, ist in diesem Artikel zu finden.

Wichtig im Zusammenhang mit HTTPS-Zertifikaten: Sollte man als URL eine HTTPS-Adresse eingetragen haben und das HTTPS-Zertifikat auf dem Server ausgetauscht werden (muss man ja leider ab und an mal machen), so wird GPS Logger auf einmal aufhören, Daten zu senden. Da hilft auch kein Neustart...
Wenn auf dem Server das HTTPS-Zertifikat ausgetauscht wurde, muss in den oben gezeigten Einstellungen "In eine benutzerdefinierten URL protokollieren" auf dem Menüpunkt "SSL-Zertifikat auf Gültigkeit prüfen" getippt werden!

Server

Wir benötigen einen Webserver mit PHP und einer Datenbank.

Hier ein paar Zeilen Beispielcode, der nichts anderes macht, als die GET-Daten von GPS Logger entgegenzunehmen und in der Datenbank "latitudedb" einer mysql-Datenbank zu speichern.
Natürlich verwendet man heutzutage eher die mysqli-Funktionen oder eine andere Datenbank, außerdem ist der folgende Codeschnipsel nicht gegen Code-Injection geschützt!

$con = @mysql_connect("127.0.0.1:3306","mysqluser","mysqlpasswort");
@mysql_select_db("latitudedb");
$result = @mysql_query("insert into latitude (nutzer, lat, lang, alt, acc) values ('".$_GET['device']."', '".$_GET['lat']."', '".$_GET['lang']."', '".$_GET['alt']."', '".$_GET['acc']."')");
if (!$result) { die("Datenbankfehler"); }

Es empfieht sich außerdem, das Verzeichnis, in welchem dieses Skript liegt, zumindest per Basic HTTP Authentification zu schützen. Mehr Informationen dazu in diesem Artikel.

Fazit

Ich verwende GPS Logger inzwischen lieber, als Owntracks, da die Positionsdaten viel genauer ankommen (die Genauigkeit der LAT/LANG-Koordinate ist höher und die Intervalle, in welchen die Koordinaten gesendet werden, sind sinnvoller) und das Log in der App bei Fehlern und Problemen sehr hilfreich ist.