Problem
Für das Lifetracking bei den Brevets habe ich in den letzten Jahren die Lifetracking-Funktion von Oruxmaps verwendet: Oruxmaps hat die Daten direkt an meine Homepage geschickt, wo sie von einer Zusatzsoftware (WordPress-Plugin Trackserver) empfangen und angezeigt werden. Leider hat sich das als nicht sehr zuverlässig herausgestellt, was wohl vor allem an der Handy-Seite liegt:
- Gerade bei längeren Funklöchern kam es zu oft vor, dass das Tracking nie wieder startete.
- Bei langen Strecken sprang die GPS-Zeit um 24 Stunden in die Vergangenheit. Ob das ein Fehler von Oruxmaps oder von Android ist, weiß ich noch nicht – es passiert jedenfalls auch, wenn ich das in einer Emulation mache. Es kann also nicht an Hardware oder Firmware liegen.
- Nach Funklöchern schickt Oruxmaps nur etwa 50 Positionen für die gesamte noch unübertragene Strecke (die dadurch ungenau werden kann)
- Manchmal schickt Oruxmaps die Meldungen in der falschen Reihenfolge. Es kommt z.B. oft vor, dass die letzte Positionsmeldung erst nach Beenden vom Lifetracking geschickt wird. Siehe Oruxmaps-Forum
Lösung
Darum habe ich nun selber eine Android-App geschrieben, die auf dem Handy diese Funktion übernimmt. Sie kann die Positionen selber bestimmen, muss sie aber nicht unbedingt: Wenn irgendeine andere App eine GPS-Position bestimmt, erfährt GPS Forwarder das und schickt sie weiter zum Server (zum Beispiel Trackserver). Beides gleichzeitig geht aber nicht – entweder bestimmt GPS Forwarder die Positionen selber, oder es ist im Mithörmodus.
GPS Forwarder zeigt dabei Logmeldungen, die sehr genau zeigen, woran es liegen könnte, wenn es nicht funktioniert – und dafür gibt es viele Gründe! Es wird immer schwieriger, eine Android-App so zu schreiben, dass sie auch im Hintergrund vernünftig funktioniert – Google zieht beim Stromsparen immer mehr die Daumenschrauben an.
GPS Forwarder verwendet dabei das von MapMyTracks definierte Übertragungsprotokoll mit einer kleinen Erweiterung, damit es auch bei einem Problem auf dem Server zu keinen Unterbrechungen kommt – man kann sogar den Server neu starten, es wird abgesehen von der Zeitunterbrechung nachträglich alles korrekt übertragen, es werden nie Daten verloren gehen.
Installation
- Voraussetzung ist Android 6.0 „Marshmallow“ oder höher.
- Hier kann das APK heruntergeladen werden. Ich möchte das in Zukunft gerne mit F-Droid installierbar machen.
- Im GPS Forwarder folgende Einstellungen vornehmen:
- Url: Die Adresse vom Server. Wenn sie mit https:// beginnt, wird die Übertragung verschlüsselt. Wenn man einen besonderen Port verwenden will, gibt man ihn nach einem Doppelpunkt an, z.B. https:/meinehomepage.de:3456
- Benutzername auf dem Server
- das dazugehörige Passwort
- Alle weiteren möglichen Einstellungen können später vorgenommen werden, die vorgegebenen Werte sollten schon ganz gut passen.
Benutzung
Das Programm soll ja möglichst keinen Strom verbrauchen. Wenn auf dem Handy schon eine andere App läuft, die Positionen bestimmt, ist der zusätzliche Stromverbrauch minimal – meine hört dann einfach mit, statt selber die Position zu bestimmen. Ansonsten müsste man das auf dem jeweiligen Handy testen. Lässt sich aber auch weitgehend konfigurieren, z.B. Positionsbestimmung nur alle 5 Minuten und Senden zum Server nur alle 30 Minuten. Bei mir sind das zwei Sekunden respektive 10 Sekunden.
Wenn man mit dem Smartphone auch navigiert, wird der Verbrauch durch das Display so viel größer sein, dass der von GPS Forwarder gar nicht bemerkbar ist.
Auf Wunsch kann ich auch für andere (nur mir persönlich Bekannte) einen Lifetracker auf dieser Basis einrichten – das wäre dann auf meiner Homepage eine eigene Seite, auf Wunsch passwortgeschützt.
Integration in eine beliebige WordPress-Homepage
Dazu kann man diesen WordPress-Plugin installieren: https://wordpress.org/plugins/trackserver/
Um einen zuverlässigen Betrieb zu bekommen, muss aber meine eigene Server-Software zwischengeschaltet werden. Die kann, wenn man mit einer Shell umgehen kann, auf demselben Rechner laufen wie die WordPress-Homepage. Eine entsprechende Installationsanleitung müsste ich noch schreiben. Alternativ kann ich diese Server-Software auch auf meinem Rechner für andere einrichten – die Daten fließen dann vom Handy auf meinen Server, der sie an die richtige WordPress-Homepage weiterleitet.
Support
Wenn Sie einen Fehler finden oder einen Verbesserungswunsch haben, tragen Sie das bitte hier ein.
Entwicklung
GPS Forwarder steht unter der Open-Source-Lizenz Apache 2.0.
Der Quelltext ist auf gitlab.
Server-Software
Normalerweise wird das z.B. der erwähnte WordPress-Plugin „Trackserver“ oder mapmytracks.com sein. Ich habe aber auch hier selber etwas programmiert: Gpxity. Das enthält auch ein Serverprogramm. Untenstehendes Beispiel empfängt die Daten und leitet sie an zwei Ziele weiter: Ein lokales Verzeichnis /var/lib/gpxity_server und die Datenbank vom WordPress-Plugin „Trackserver“. In einer separaten Datei stehen die Zugangsdaten und anzuwendende Fences (Positionen in definierten Bereichen werden nicht an das jeweilige Ziel weitergegeben). Es können beliebig viele verschiedene Ziele definiert werden, z.B. auch Mailen des gesamten Tracks alle X Minuten.
Damit muss das Handy die Daten nur einmal versenden, auch wenn man sie automatisch an mehrere Ziele schicken muss – die Weiterverteilung macht Gpxity.
gpxity_server --certfile=/var/lib/gpxity_server/cert.pem --keyfile=/var/lib/gpxity_server/key.pem --timeout=5 --servername rohdewald.de --loglevel debug /var/lib/gpxity_server wptrackserver:wolfgang