owntracks

13/05/2024

Permet de tracker sa position géographique.

Avant on utilisait OwnTracks en mode HTTP (recorder exposé en /pub
avec htaccess). Maintenant tout passe par le broker MQTT (mosquitto)
exposé par Traefik en TCP + TLS. Le recorder ne reçoit plus rien en
HTTP : il subscribe au broker.

installation serveur

broker MQTT (mosquitto exposé en TLS via Traefik)

Dans le docker-compose.yml (en plus de l'entrypoint mqtts sur 8883
côté Traefik) :

mqtt:
    image: eclipse-mosquitto:2.0
    container_name: mqtt
    restart: always
    volumes:
        - /root/docker/mqtt/config:/mosquitto/config
        - /root/docker/mqtt/data:/mosquitto/data
        - /root/docker/mqtt/log:/mosquitto/log
    labels:
        - traefik.enable=true
        - traefik.tcp.routers.mqtts.rule=HostSNI(`mqtt.${DOMAIN}`)
        - traefik.tcp.routers.mqtts.entrypoints=mqtts
        - traefik.tcp.routers.mqtts.tls=true
        - traefik.tcp.services.mqtts.loadbalancer.server.port=1883

Côté Traefik il faut un entrypoint TCP mqtts :

- --entrypoints.mqtts.address=:8883

et publier le port 8883 sur le host. Traefik termine le TLS (avec le
cert wildcard letsencrypt) et forwarde en clair vers mosquitto:1883
en interne.

Config mosquitto (/root/docker/mqtt/config/mosquitto.conf) :

listener 1883
allow_anonymous false
password_file /mosquitto/config/mosquitto.passwd
persistence true
persistence_location /mosquitto/data/

Créer le user :

docker exec -ti mqtt mosquitto_passwd -c /mosquitto/config/mosquitto.passwd admin

owntracks recorder

owntracks:
    image: owntracks/recorder
    environment:
        - OTR_HOST=mqtt.${DOMAIN}
        - OTR_PORT=8883
        - OTR_USER=admin
        - OTR_PASS=${PASSWORD}
        - OTR_CAFILE=/etc/ssl/certs/ca-certificates.crt
    volumes:
        - /etc/localtime:/etc/localtime:ro
        - /root/docker/owntracks/config:/config
        - /root/dockerdata/owntracks:/store
    labels:
        - traefik.enable=true
        - traefik.http.routers.owntracks.rule=Host(`owntracks.${DOMAIN}`)
        - traefik.http.services.owntracks.loadbalancer.server.port=8083
        - traefik.http.routers.owntracks.entrypoints=websecure
        - traefik.http.routers.owntracks.middlewares=compressor,securityheaders,admin

Le recorder subscribe au broker en TLS (OTR_CAFILE lui suffit pour
valider le cert letsencrypt). L'UI reste exposée sur
https://owntracks.${DOMAIN} derrière l'auth Traefik admin.

installation app

Mode MQTT (et plus HTTP) :

  • Host : mqtt.${DOMAIN} (ex: mqtt.data.raphaelpiccolo.com)
  • Port : 8883
  • TLS : activé (le cert est letsencrypt, pas besoin de fournir un CA custom)
  • WebSocket : désactivé (c'est du MQTT pur sur TCP)
  • Username / Password : ceux du fichier mosquitto.passwd
  • ClientId : libre (un par appareil)
  • DeviceId : libre, identifie un appareil
  • TrackerId : libre, 2 caractères, affiché sur la carte pour les amis

Liens :

économie de batterie
android :

Paramètres → Applications → OwnTracks → Batterie : Autoriser activité en arrière-plan
Paramètres → Applications → OwnTracks → Autorisations → Localisation : Autoriser tout le temps + Position précise
Paramètres → Applications → OwnTracks → Données mobiles : Autoriser données en arrière-plan