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 latitude
et 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.yml
ce 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.