Meshtastic et Owntracks pour vous débarrasser de vos habitudes sur Google

J’ai un aveu à faire. J’ai une dépendance à Google. Ce n’est pas la dépendance normale – j’ai un problème avec Google Maps et la fonction de chronologie. Je sais, je donne mes données de localisation à Google, qui en fait qui sait quoi. Mais c’est pratique d’avoir un moyen simple de partager sa position avec ma femme et très utile pour suivre mes déplacements professionnels chaque mois. Ce que nous pourrions vraiment utiliser, c’est un système open source auto-hébergé pour suivre les emplacements et afficher l’historique des emplacements. Et pour les points bonus, incluons quelques fonctionnalités supplémentaires, comme la possibilité de suivre les véhicules, les enfants et les animaux de compagnie qui ne disposent pas d’une connexion Internet dédiée.

Vous pouvez lire le titre – vous savez où nous voulons en venir. Nous mettons en place un service Owntracks, puis le lions à Meshtastic pour une utilisation hors Internet. L’épine dorsale qui fait que cela fonctionne est MQTT, un bus de messages réseau qui a vraiment trouvé sa place dans le projet Home Assistant, entre autres. Il s’agit d’un protocole simple, dans lequel les clients envoient de brefs messages classés par sujet et peuvent également s’abonner à des sujets spécifiques. Pour cette petite entreprise, nous utiliserons le courtier Mosquito MQTT.

L’un des avantages de MQTT est que les messages sont tous des chaînes de texte et prennent souvent la forme de JSON. Lorsque vous essayez de faire communiquer deux applications à l’aide d’un serveur MQTT partagé, il faudra peut-être effectuer un peu de traduction. Une application peut étiqueter un champ latitudeet l’autre le raccourcit à lat. Le code de liaison permettant de les assembler est souvent appelé traducteur MQTT, ou parfois pont MQTT. Il s’agit d’un programme qui écoute un sujet donné, ingère chaque message et le renvoie au serveur MQTT dans un format et un nom de sujet différents.

Le dernier élément est Owntracks, qui a un projet d’enregistrement, qui extrait les emplacements du serveur MQTT et les stocke localement. Ensuite, il y a Owntracks Frontend, qui est une interface utilisateur beaucoup plus agréable, avec des fonctionnalités intéressantes comme l’affichage des mouvements d’une journée à la fois.

Commencer

Alors tout d’abord, choisissez une machine pour héberger le service. Nous utiliserons Docker-compose pour créer notre mini-cluster de services. Une machine Linux est un excellent choix, même si elle devrait être possible de l’exécuter sous Windows via le bureau Docker ou WSL. Mais si vous suivez cette voie, vous êtes un peu seul. Vous aurez besoin de Docker et de docker-compose, avec le service Docker en cours d’exécution – idéalement configuré pour démarrer automatiquement via systemd. Et rappel, vous devrez probablement ajouter votre utilisateur au groupe « docker », avec sudo gpasswd -a $USER docker.

Maintenant, juste un petit mot : je vais décrire le processus de configuration à partir de zéro. À la fin de cet article, il y aura un lien vers un référentiel Github, où vous pourrez récupérer presque tout en même temps.
Cela nous aidera à lire les détails au moins une fois, pour comprendre ce que nous construisons, alors accrochez-vous.

Nous commençons par créer un dossier dans /etc, appelé owntracks-meshtastic. Dans ce dossier, nous souhaitons créer un répertoire appelé mosquitto, puis créer le fichier de configuration mosquitto. Nous souhaitons ajouter deux lignes à ce fichier, demandant à notre serveur MQTT d’écouter sur le port 1883 et d’accepter les connexions non authentifiées.

sudo mkdir /etc/owntracks-meshtastic
cd /etc/owntracks-meshtastic
sudo mkdir mosquitto
sudo touch mosquitto/mosquitto.conf
echo "allow_anonymous true" | sudo tee -a mosquitto/mosquitto.conf
echo "listener 1883" | sudo tee -a mosquitto/mosquitto.conf

Une fois le fichier de configuration en place, il est temps de démarrer notre fichier docker-compose.yml, en utilisant sudo nano /etc/owntracks-meshtastic/docker-compose.yml. Un fichier de composition Docker est vraiment assez simple une fois que vous le divisez en plusieurs parties. Nous commençons par un en-tête de services, et en dessous se trouvera un bloc pour chaque service Docker que nous souhaitons exécuter. Chaque bloc commence par un nom de service et inclut l’image Docker elle-même, les fichiers et dossiers que nous souhaitons mapper dans l’image Docker et les ports à exposer. Pour Mosquitto, nous avons juste besoin du fichier de configuration et d’une paire de ports pour envoyer des données MQTT.


services:
  mosquitto:
    image: eclipse-mosquitto
    volumes:
      - /etc/owntracks-meshtastic/mosquitto:/mosquitto/config
    ports:
      - 1883:1883
      - 9001:9001

Une fois ce fichier enregistré, nous démarrons un test en exécutant un simple docker-compose up. Cela devrait télécharger l’image du docker Mosquitto et la démarrer. Ensuite, nous pouvons utiliser un client simple comme MQTT Explorer pour nous assurer que nous sommes réellement en cours d’exécution. Si votre système d’exploitation dispose de pare-feu, c’est le moment d’ajouter une exception MQTT au pare-feu. Une fois que vous êtes prêt à recommencer à travailler sur la configuration, utilisez Ctrl+c et exécutez docker-compose down

Premières données réelles

Nous avons suffisamment de système en place pour commencer à envoyer des données réelles. Pour cela, nous avons besoin d’un nœud Meshtastic qui fonctionne comme une station de base. Il devra s’agir d’un appareil capable de se connecter au réseau, probablement via Wi-Fi. Il existe plusieurs excellentes options, comme un Heltec LoRa32 v3, le Lilygo T-Beam (idéalement celui avec la puce SX1262 LoRa) ou le Station G1 pour une puissance de transmission accrue. Quel que soit l’appareil que nous choisissons, nous devons le connecter au wifi pour permettre la communication avec notre nouveau service MQTT.

Cela se fait plus facilement via l’application Android ou iOS, via la configuration radio, le réseau et le réglage du SSID et du PSK WiFi. Ensuite, passez à MQTT Config, pour activer « MQTT Enabled ». Définissez « l’adresse du serveur MQTT » sur la machine exécutant Mosquitto, effacez « Nom d’utilisateur MQTT » et « Mot de passe MQTT » et enfin activez « Sortie JSON activée ». L’appareil redémarrera et devrait commencer à envoyer des données au serveur MQTT. Dans MQTT Explorer, nous recherchons le sujet « msh ».

Une fois que tout est fluide, il est temps d’ajouter l’étape suivante, Meshtastic-bridge. Nous allons commencer par créer le fichier de configuration, sudo nano /etc/owntracks-meshtastic/config.yaml. Nous devons informer Meshtastic-bridge du serveur à utiliser, puis configurer un pipeline pour convertir les données Meshtastic au format MQTT attendu par Owntracks. Vous devrez mettre à jour l’adresse IP du serveur et remplir la table tid_table avec vos identifiants de nœud Meshtastic, qui peuvent être trouvés en utilisant meshtastic --nodes.


mqtt_servers:
  - name: external
    server: YOURSERVERIP
    port: 1883
    topic: msh/2/json/#
    pipelines:
      owntrack:
      - owntracks_plugin:
          log_level: debug
          server_name: external
          tid_table:
            "!a56f7c45": ["Meshenger", "MS"]

Ensuite, nous allons cloner le référentiel meshtastic-bridge directement dans ce dossier, en utilisant sudo git clone https://github.com/jp-bennett/meshtastic-bridge. À partir de là, nous ajoutons un autre service à notre fichier docker-compose.yml pour créer une image Docker à partir de ce référentiel. Nous transmettons également notre fichier de configuration en tant que volume Docker. Utilisez à nouveau sudo nano /etc/owntracks-meshtastic/docker-compose.yml:


services:
  mosquitto:
    image: eclipse-mosquitto
    volumes:
      - /etc/owntracks-meshtastic/mosquitto:/mosquitto/config
    ports:
      - 1883:1883
      - 9001:9001
  meshtastic-bridge:
    build:
      context: /etc/owntracks-meshtastic/meshtastic-bridge
      dockerfile: Dockerfile
    volumes:
      - /etc/owntracks-meshtastic/config.yaml:/code/config.yaml

Cartographiez-le !

Croyez-le ou non, nous avons presque terminé. La prochaine étape consiste à ajouter l’image Docker de l’enregistreur Owntracks à notre fichier de composition. Tout d’abord, nous devons créer un répertoire de données, en utilisant sudo mkdir store. Ensuite, il suffit d’ajouter le service owntracks-recorder à notre docker-compose.yml et de mettre à jour à nouveau l’adresse IP avec l’adresse IP de notre serveur. Encore une fois, utilisez sudo nano /etc/owntracks-meshtastic/docker-compose.yml


services:
  mosquitto:
    image: eclipse-mosquitto
    volumes:
      - /etc/owntracks-meshtastic/mosquitto:/mosquitto/config
    ports:
      - 1883:1883
      - 9001:9001
  meshtastic-bridge:
    build:
      context: /etc/owntracks-meshtastic/meshtastic-bridge
      dockerfile: Dockerfile
    volumes:
      - /etc/owntracks-meshtastic/config.yaml:/code/config.yaml
  owntracks-recorder:
    image: owntracks/recorder
    volumes:
      - /etc/owntracks-meshtastic/store:/store
    ports:
      - 8083:8083
    environment:
      - OTR_HOST=YOURSEVERIP

À partir de là, vous devriez pouvoir récupérer votre instance owntracks à l’adresse http://YOURSERVERADDRESS:8083. Une fois que votre nœud Meshtastic diffuse un emplacement, il devrait apparaître dans le tableau des nœuds connus et être visible sur la carte. Aussi cool que cela puisse paraître, vous remarquerez peut-être que c’est un peu simple.

Il y a encore un élément à connecter, et c’est l’interface frontale Owntracks. Il s’agit d’un site sophistiqué d’une seule page qui affiche l’historique des positions, les cartes thermiques et bien plus encore. Et c’est assez facile à ajouter à notre configuration. Ajoutez-le simplement au bas de votre docker-compose.yml en utilisant sudo nano /etc/owntracks-meshtastic/docker-compose.ymlce qui fait que le fichier final ressemble à ceci :


services:
  mosquitto:
    image: eclipse-mosquitto
    volumes:
      - /etc/owntracks-meshtastic/mosquitto:/mosquitto/config
    ports:
      - 1883:1883
      - 9001:9001
  meshtastic-bridge:
    build:
      context: /etc/owntracks-meshtastic/meshtastic-bridge
      dockerfile: Dockerfile
    volumes:
      - /etc/owntracks-meshtastic/config.yaml:/code/config.yaml
  owntracks-recorder:
    image: owntracks/recorder
    volumes:
      - /etc/owntracks-meshtastic/store:/store
    ports:
      - 8083:8083
    environment:
      - OTR_HOST=YOURSEVERIP
  owntracks-frontend:
    image: owntracks/frontend
    ports:
      - 80:80
    environment:
      - SERVER_HOST=YOURSEVERIP
      - SERVER_PORT=8083

Et c’est tout! Courir docker-compose up -d pour démarrer votre essaim miniature d’instances Docker et regardez vos appareils Meshtastic remplir la carte avec des données en direct ! Pas de dépendance à Internet, pas d’envoi de vos données de localisation à Google, c’est juste la bonté de la collecte de données open source. Et si vous souhaitez des fonctionnalités supplémentaires, il existe une application mobile Owntracks qui peut se connecter directement à votre propre backend. Cette application transmet et extrait des données de localisation en direct, idéalement via un VPN pour des raisons de sécurité.

Maintenant, vous souhaiterez peut-être configurer cela pour qu’il s’exécute automatiquement, et il existe un service systemd pour cela. Il vous suffira de sauvegarder ce qui suit avec sudo nano /etc/systemd/system/docker-compose-owntracks.service:


# /etc/systemd/system/docker-compose-owntracks.service
# https://stackoverflow.com/questions/43671482/how-to-run-docker-compose-up-d-at-system-start-up

[Unit]
Description=Docker Compose Owntracks Service
Requires=docker.service
After=docker.service
StartLimitIntervalSec=60

[Service]
WorkingDirectory=/etc/owntracks-meshtastic
ExecStart=/docker-compose up
ExecStop=docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Avec cela en place, vous pouvez utiliser sudo systemctl enable docker-compose-owntracks --now pour démarrer et activer l’ensemble du service.

Cela représente beaucoup de travail. Comme promis, nous disposons d’un moyen plus rapide de le faire. Le tout est disponible dans un référentiel unique. Tout ce qui doit être fait après avoir exécuté la commande suivante est de modifier l’adresse IP du serveur, de remplir la table tid et de déployer le systemd fichier de services.

sudo git clone https://github.com/jp-bennett/owntracks-meshtastic --recurse-submodules /etc/owntracks-meshtastic/

Il s’agit de Meshtastic, MQTT et Owntracks, tous regroupés dans votre propre service de suivi de localisation. Faites-nous savoir si vous suivez les instructions et configurez-le vous-même. Et attendez avec impatience la troisième partie de cette série, comment utiliser Meshtastic pour étendre vos projets avec une connexion série sans fil et cryptée.

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.