TL;DR: Use OwnTracks! Yes, even if it
is unmaintained and has anti-features! It works flawlessly with
Apple UnifiedNIP backend and
Nominatim Geocoder backend (for reverse
I recently moved to Lineage OS + microg (it’s
very cool btw, it mostly works out of the box with the whole
on my smartphone. In parallel, I was working on
infotuyo (think self-hosted
IFTTT) and home automation using
Home-Assistant, and at some point I realized it
would be awesome if I could have an estimate of my position stored online
(where I am, with a few tens of meters precision and a few minutes resolution).
I know Google is offering it out of the box if you have an Android account on your phone, but I don’t. And I don’t want anything this sensitive to be stored on Google’s servers. So my ultimate goal is to have a selfhosted system I control which could store my location and eventually pipe it to Home-Assistant or infotuyo to send me reminders when I should leave for an appointment, with itinerary, or shut power plugs at home when I leave.
It’s dumb simple (too simple sometimes) but also easy to extend. It is compatible with most clients out there and it simply does the job, so I did not look any further.
Here comes the difficult part, looking for a client to run on my Android. This was an incredibly difficult part, in part due to limitations in Android system.
First, you have to choose and setup a
UnifiedNIP provider in your
settings. I initially chose to use
Mozilla UnifiedNIP backend to get a
network position (much faster and battery-efficient solution than GPS, with
good enough accuracy in Paris for this use case) and
backend for reverse geolocation (getting address from names).
When I got into troubles finding an app to keep track of my position, I heard
that Mozilla might be throttling calls from
Mozilla UnifiedNIP backend, as
it can get quite heavy on their infrastructure. In the end, I decided to go
Apple UnifiedNIP backend which should not be affected by this and
tends to give better results.
My first try was using uLogger (from F-Droid). The app had a few major issues:
- Sometimes it was crashing without reason (I guess it was when it could not fetch the position, for some reason).
- There was a setting in the app to choose which location mode one wanted to
use (GPS / network / balanced). The same settings is also available in the
system settings, and they had to match! That means I could not set
uLogger, hoping that it would use the best option available, as enabled in system settings (so that if system settings is “power saving”, it would use network and if it is “high power” it would use the GPS).
- The app was logging quite erratically, throttling updates some time. I was expecting to have a point every 5 mins but it could be one hour between two successive points sometimes.
I tried to investigate it a bit, but could not find anything to fix these throttling issues (disabled “battery optimization” for the app without success, etc) and did not get feedback from the Github issues.
Traccar was really
interesting as it was a free software, available on F-Droid. Additionally, it
relies on LOST, a replacement for Google
FusedLocationProvider (the Android API to fetch user
position), written by Mapzen. It should be the perfect candidate.
However, same thing once again, the updates of positions were throttled and
sometimes I did not get a single point for a couple of hours. I could not find
any reason for this (not sure whether this is coming from
traccar). Moving to the next solution…
In the end, I came across OwnTracks which is free but not available on F-Droid as it depends on proprietary stuff (Google Play Services and other similar libs).
Best way to get it is to clone the Git repository and then build the app locally in Android Studio. I had never touched Android development before, and it’s actually super simple to build an app from source code in Android Studio (open the project and click “Build APKs” basically). Then, you can upload it through “USB debugging” directly to your phone.
I followed closely the instructions in their booklet to maximize performance of position tracking (basically, it boils down to disabling “battery optimization”) and so far, for the last week, I got a point every 5 minutes or so (my update frequency) except when I could not obtain a location for obvious reasons (subway, airplane mode). The app seems to take great care of tracking position and is very resilient to loss of network or location. Plus, their doc is really well written.
The only downside is that I have a permanent notification on my phone now,
otherwise the app would be closed by the system. Good point is that
OwnTracks does not simply a dummy notification but uses it to show my
current position with reverse geolocation through Nominatim. Completely
useless, so it’s obviously a need! :)
So far, I sticked with
UnifiedNIP backends and
OwnTracks disabled from
battery optimization and a position logged every 5 mins (without any minimal
displacement) and battery usage as displayed by Android is:
- Around 5% for the
- Around 2% for the
- Usage for
OwnTracksis not displayed.
To compare, my screen battery usage is almost the same as the one from
Unified NIP and
Nominatim is less than “sleep mode” (3%) or Whatsapp (4%).
Additionally, I mentioned that
OwnTracks requires Google Play Services,
but actually it works perfectly fine with
microg. The only downside is that
the map in the main view, showing your current position, is using Google Maps
and does not work (this panel is empty). As I only use it to log in the
background, I don’t care (and when I’m lost, I can always open
would fetch position faster as
OwnTracks almost certainly requested it recently).
It would be super cool to see
OwnTracks on F-Droid, but it uses non-free
firebase-jobdispatcher and Google Play Services and embed some
precompiled libraries) :/ So it’s quite a job to make it publishable on
F-Droid and sadly I don’t know enough about Android development to handle it :/
Hope this helps!