OwnTracks est une application de localisation open source pour Android et iOS qui peut publier la position de votre téléphone directement sur un broker MQTT. Avec votre propre broker, vous décidez qui voit les données, combien de temps elles sont conservées et quels autres systèmes (Home Assistant, Node-RED, une base de données) les consomment. La configuration demande quatre valeurs dans l'application (hôte, port, utilisateur, mot de passe), plus TLS et une ACL côté broker.
Ce guide couvre les réglages de l'application, les topics et payloads utilisés par OwnTracks, les ACL du broker pour partager avec des amis, OwnTracks Recorder, et la vérification de chaque étape depuis un terminal.
Ce qu'il vous faut
| Élément | Pourquoi | Remarques |
|---|---|---|
| Un broker MQTT accessible depuis internet | Les téléphones publient depuis les réseaux mobiles | Auto-hébergé ou managé, MQTT 3.1.1 suffit |
| TLS sur le port 8883 | Les positions sont des données personnelles | Un certificat reconnu publiquement est le plus simple |
| Un utilisateur par personne | Le topic et les ACL en dépendent | Ne partagez jamais un identifiant entre membres de la famille |
| Application OwnTracks | Publie la position | Android (Google Play / F-Droid) ou iOS |
| Optionnel : OwnTracks Recorder | Stocke l'historique, sert une carte web | Image Docker owntracks/recorder |
Un broker public de test suffit pour vérifier que l'application se connecte, mais ne laissez pas un vrai flux de positions sur un endpoint partagé : quiconque s'y abonne à owntracks/# le verrait.
Configurer l'application
Dans l'application, ouvrez Preferences → Connection (Android) ou Settings (iOS) et passez le mode de HTTP à MQTT. Les noms des champs varient légèrement selon la plateforme et la version, mais les valeurs sont les mêmes :
| Réglage | Valeur |
|---|---|
| Mode | MQTT |
| Host | broker.connectmq.com (le nom d'hôte de votre broker) |
| Port | 8883 |
| TLS | Activé |
| Username / Password | Les identifiants de cette personne sur votre broker |
| Device ID | Nom court du téléphone, par ex. pixel ou iphone |
| Tracker ID | Deux caractères affichés sur la carte, par ex. AL |
| Client ID | Gardez la valeur par défaut ; il doit être unique par appareil |
Enregistrez, puis tirez la carte vers le bas ou touchez le bouton d'envoi pour publier une position manuellement. L'écran d'état doit indiquer que la connexion est établie. Si vous n'êtes pas sûr que le broker accepte les identifiants, testez-les d'abord depuis votre ordinateur avec le client MQTT en ligne : vous séparez ainsi les problèmes de broker des problèmes d'application.
Topics et payloads
Avec l'utilisateur alice et le device ID pixel, l'application utilise :
owntracks/alice/pixel location messages (_type: location), retained by default
owntracks/alice/pixel/event region enter/leave events (_type: transition)
owntracks/alice/pixel/info card with name and avatar (_type: card)
owntracks/alice/pixel/cmd commands TO the phone (_type: cmd)Un message de position ressemble à ceci (champs abrégés ; les champs exacts dépendent de la plateforme et de la version) :
{
"_type": "location",
"tid": "AL",
"lat": 48.856613,
"lon": 2.352222,
"acc": 12,
"alt": 35,
"batt": 78,
"conn": "m",
"t": "u",
"tst": 1792236000
}tst est l'heure UTC de la position, acc la précision en mètres, batt le niveau de batterie, conn le type de connexion (w Wi-Fi, m mobile) et t le déclencheur (u utilisateur, p ping, c région, entre autres). L'application enregistre aussi un message Last Will (_type: lwt) sur le topic de base, de sorte qu'un abonné sait quand le téléphone se déconnecte brutalement.
Le mode de suivi détermine la fréquence des remontées : Significant (par défaut, économe en batterie, basé sur les changements de position significatifs), Move (mises à jour fréquentes en mouvement, plus gourmand), Manual et Quiet. Commencez par Significant.
Si vous construisez votre propre traceur matériel, publiez le même JSON avec la même organisation de topics et il apparaîtra à côté des téléphones. Le tutoriel traceur GPS en construit un avec un ESP32.
Vérifier depuis un terminal
Abonnez-vous avec les identifiants d'un utilisateur autorisé à lire les topics d'Alice :
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-u "$MQTT_USER" -P "$MQTT_PASS" -t 'owntracks/#' -vTouchez publish dans l'application ; le JSON apparaît en une ou deux secondes. Pour tester le sens inverse, demandez une position au téléphone avec une commande à distance. Les commandes à distance doivent être activées dans les réglages avancés de l'application, et sur iOS la réception en arrière-plan n'est pas garantie :
mosquitto_pub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-u "$MQTT_USER" -P "$MQTT_PASS" \
-t 'owntracks/alice/pixel/cmd' -q 1 \
-m '{"_type":"cmd","action":"reportLocation"}'Vous pouvez aussi vous faire passer pour un téléphone afin de tester le Recorder ou un dashboard sans vous déplacer :
mosquitto_pub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-u "$MQTT_USER" -P "$MQTT_PASS" -t 'owntracks/alice/pixel' -q 1 -r \
-m "{\"_type\":\"location\",\"tid\":\"AL\",\"lat\":48.8584,\"lon\":2.2945,\"acc\":10,\"tst\":$(date +%s)}"ACL : qui voit qui
L'application s'abonne par défaut à owntracks/+/+ et affiche comme ami chaque position reçue. L'ACL du broker devient donc le contrôle de confidentialité : un utilisateur voit exactement les topics qu'il a le droit de lire. En syntaxe Mosquitto :
# every user may publish and read under its own username
pattern readwrite owntracks/%u/#
# alice and bob share locations with each other
user alice
topic read owntracks/bob/#
user bob
topic read owntracks/alice/#
# the recorder reads everyone, publishes nothing
user recorder
topic read owntracks/#Sur un broker managé, vous exprimez les mêmes règles sous forme de permissions par topic pour chaque utilisateur. Deux détails à retenir :
- Le nom d'utilisateur dans l'application doit correspondre au deuxième niveau du topic, sinon chaque publication est refusée. Beaucoup de brokers ignorent une publication refusée sans déconnecter le client : le téléphone semble connecté mais rien n'arrive. Voir ACL refusée silencieusement.
- Testez les règles de l'extérieur : connectez-vous en tant que Bob et essayez de lire quelqu'un qui ne partage pas avec lui. Un court script pour cela se trouve dans tester les permissions ACL MQTT.
Conserver l'historique avec le Recorder
OwnTracks Recorder s'abonne au broker, enregistre chaque position sur disque et sert une carte web et une API HTTP. L'image Docker se configure avec des variables d'environnement :
docker run -d --name ot-recorder -p 8083:8083 \
-e OTR_HOST=broker.connectmq.com \
-e OTR_PORT=8883 \
-e OTR_USER=recorder \
-e OTR_PASS="$MQTT_PASS" \
-e OTR_CAFILE=/etc/ssl/certs/ca-certificates.crt \
-v ot-store:/store \
owntracks/recorderOuvrez http://localhost:8083 pour l'interface web du Recorder. Donnez au Recorder son propre utilisateur en lecture seule, comme dans l'ACL ci-dessus, et décidez combien de temps vous conservez l'historique. Le port 8083 est ici le port HTTP du Recorder sur votre machine, sans rapport avec le port WebSocket du broker.
Chiffrement de bout en bout (optionnel)
OwnTracks peut chiffrer les payloads avec une clé secrète partagée (libsodium). Le broker ne voit alors que {"_type":"encrypted","data":"…"} et chaque lecteur, Recorder compris, a besoin de la clé. Cela protège les données de l'opérateur du broker, mais vous perdez la possibilité d'inspecter les messages avec les outils habituels. TLS plus des ACL strictes suffit pour la plupart des installations ; voir chiffrement du payload MQTT pour les compromis.
Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
| L'application affiche une erreur juste après la connexion | Mauvais identifiant ou mot de passe, ou CONNACK "Not authorized" | Testez les mêmes identifiants dans le client en ligne ; cherchez le code avec l'outil des reason codes |
| Erreur TLS ou de certificat | Certificat auto-signé ou chaîne incomplète | Utilisez un certificat reconnu publiquement ou installez votre CA dans l'application |
Connecté, mais rien dans mosquitto_sub | L'ACL refuse la publication, ou username ≠ utilisateur du topic | Vérifiez les logs du broker et le motif de l'ACL |
| Des amis manquent sur la carte | Pas de droit de lecture sur leurs topics | Ajoutez des règles read, puis reconnectez l'application |
| Les mises à jour s'arrêtent au bout d'un moment sur Android | L'optimisation de batterie tue le service en arrière-plan | Excluez OwnTracks de l'optimisation de batterie ; voir déconnexions en arrière-plan sur Android |
OwnTracks sur votre propre broker est l'un des déploiements MQTT utiles les plus simples : un téléphone, un topic par appareil et quelques règles d'ACL. Réglez d'abord TLS et les permissions par utilisateur, vérifiez chaque sens avec mosquitto_sub et mosquitto_pub, puis seulement ensuite ajoutez le Recorder ou les intégrations domotiques.
Questions fréquentes
Sur quel topic OwnTracks publie-t-il ?
Par défaut, l'application publie les positions sur owntracks/<username>/<deviceID>, où username est l'utilisateur MQTT et deviceID est défini dans l'application. Les événements, cartes d'information et commandes utilisent des sous-topics comme /event, /info et /cmd.
OwnTracks accepte-t-il un certificat auto-signé ?
Oui, mais le téléphone doit lui faire confiance : installez votre certificat de CA dans les réglages TLS de l'application (Android) ou sur l'appareil (iOS). Un certificat d'une CA publique comme Let's Encrypt évite cette étape et fonctionne directement sur le port 8883.
Comment les amis se voient-ils dans OwnTracks ?
L'application s'abonne par défaut à owntracks/+/+ et affiche toutes les positions reçues. Ce sont donc les ACL du broker qui décident quels amis apparaissent : n'accordez à chaque utilisateur qu'un droit de lecture sur les personnes qui doivent le voir.


