Tutoriels

OwnTracks avec votre propre broker MQTT : configuration, TLS et ACL

Connectez l'application OwnTracks à votre propre broker MQTT : réglages, TLS sur le port 8883, topics, ACL par utilisateur pour les amis, le Recorder et les tests.

Mis à jour · 9 min de lecture

OwnTracks avec votre propre broker MQTT : configuration, TLS et ACL

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émentPourquoiRemarques
Un broker MQTT accessible depuis internetLes téléphones publient depuis les réseaux mobilesAuto-hébergé ou managé, MQTT 3.1.1 suffit
TLS sur le port 8883Les positions sont des données personnellesUn certificat reconnu publiquement est le plus simple
Un utilisateur par personneLe topic et les ACL en dépendentNe partagez jamais un identifiant entre membres de la famille
Application OwnTracksPublie la positionAndroid (Google Play / F-Droid) ou iOS
Optionnel : OwnTracks RecorderStocke l'historique, sert une carte webImage 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églageValeur
ModeMQTT
Hostbroker.connectmq.com (le nom d'hôte de votre broker)
Port8883
TLSActivé
Username / PasswordLes identifiants de cette personne sur votre broker
Device IDNom court du téléphone, par ex. pixel ou iphone
Tracker IDDeux caractères affichés sur la carte, par ex. AL
Client IDGardez 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 :

Topics OwnTracks
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) :

owntracks/alice/pixel
{
  "_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 :

Observer le trafic OwnTracks
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -u "$MQTT_USER" -P "$MQTT_PASS" -t 'owntracks/#' -v

Touchez 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 :

Demander au téléphone de remonter sa position
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 :

Simuler une position en ligne de commande
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 :

acl_file (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 :

Lancer OwnTracks Recorder
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/recorder

Ouvrez 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ômeCause probableSolution
L'application affiche une erreur juste après la connexionMauvais 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 certificatCertificat auto-signé ou chaîne incomplèteUtilisez un certificat reconnu publiquement ou installez votre CA dans l'application
Connecté, mais rien dans mosquitto_subL'ACL refuse la publication, ou username ≠ utilisateur du topicVérifiez les logs du broker et le motif de l'ACL
Des amis manquent sur la cartePas de droit de lecture sur leurs topicsAjoutez des règles read, puis reconnectez l'application
Les mises à jour s'arrêtent au bout d'un moment sur AndroidL'optimisation de batterie tue le service en arrière-planExcluez 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.