Au sommaire :
Le protocole MQTT
Dans la conception de Meshtastic, le protocole MQTT est utilisé pour relier les réseaux locaux créés avec LoRa. MQTT permet alors d’échanger des messages entre ces différents réseaux.
MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie léger basé sur un modèle de publication/abonnement, conçu à l’origine spécifiquement pour les applications IoT (Internet des Objets) dans des environnements à faible bande passante et réseaux instables. Il permet des services de messagerie en temps réel fiables pour les dispositifs connectés au réseau avec un minimum de code.
Principe de fonctionnement de MQTT
MQTT repose sur TCP/IP . Il comprend des clients et des brokers (courtiers). Il fonctionne en push (les clients envoient les données au broker) / subscribe (les clients qui veulent recevoir certaines données doivent s’abonner). On voit ci-dessus que le broker reçoit les données qui arrivent des clients et les renvoie à d’autres clients qui sont abonnés à ces données. Les clients ne communiquent pas directement entre eux, mais passent toujours par le broker. Un client peut être soit éditeur, soit abonné, soit les deux.
Dans le cas de Meshtastic, on pourrait dire qu’un client envoie sa position GPS toutes les heures au serveur MQTT, et que celui-ci renvoie ces informations aux cartes qui se sont abonnées à ces données, à charge pour la carte d’afficher la position et le status du client. Ce pourraient également être des messages texte que s’échangent des personnes… La transmission se fait « à la demande » et pas de façon continue ni à intervalles définis. Un client envoie des données uniquement quand c’est nécessaire, et le broker les retransmets uniquement aux abonnés, ceci pour minimiser le nombre de transmissions.
MQTT et vie privée
Meshtastic fournit un chiffrage AES256-CTR pour la charge utile de chaque paquet lors de l’envoi via LoRa, avec une clé différente pour chaque canal. Par défaut, vous disposez d’un canal primaire qui est chiffré* avec une simple clé connue ( AQ== ), donc si vous voulez protéger le contenu, vous devez d’abord changer cette clé, ou créer un nouveau canal et le partager avec ceux avec lesquels vous voulez communiquer.
Toutes les diffusions périodiques (position, télémétrie, etc.) que l’appareil envoie lui-même sont envoyées sur le canal primaire et donc chiffrées avec cette clé.
L’appareil déchiffrera la charge utile avant de l’envoyer à une application cliente via Bluetooth BLE, série, Wi-Fi/Ethernet. Cela signifie que pour l’envoi via MQTT les données sont transmises en clair ! Vous pouvez spécifier si vous voulez envoyer une charge utile chiffrée ou non grâce au paramètre « Encryption enabled« .
Ce paramètre n’est pris en compte que si vous avez également défini le serveur (le serveur officiel par défaut mqtt.meshtastic.org peut gérer les paquets chiffrés). Les paquets non chiffrés peuvent être utiles pour les systèmes externes qui veulent consommer des paquets meshtastic.
A retenir : Tous les messages sont envoyés au broker MQTT en clair si cette option n’est pas activée, même si vos canaux de liaison montante ont des clés de chiffrage définies.
* Chiffrage/Cryptage : Dans la documentation Meshtastic en anglais on trouve le mot encryption qui se traduit en français par chiffrement et pas par cryptage. Déchiffrer un message consiste à le décoder avec une clé (c’est le cas ici) tandis que décrypter un message revient à décoder sans clé. On ne peut donc pas crypter ou encrypter un fichier, on le chiffre. (source primx.eu). Les deux mots sont souvent utilisés l’un pour l’autre (à tort).
Utilisation de MQTT dans Meshtastic
Bridger (relier) des Réseaux :
- Connexion des Réseaux Maillés : MQTT permet de connecter des réseaux Meshtastic situés à des distances trop importantes pour que la liaison radio soit possible. Cette liaison au-delà de la portée de LoRa, utilise un broker MQTT. Cela permet de créer un réseau global en reliant plusieurs réseaux locaux.
- Serveur Public ou Privé : Les utilisateurs peuvent se connecter au serveur MQTT public de Meshtastic ou configurer leur propre serveur MQTT privé pour une sécurité et un contrôle accrus.
Communication avec Internet :
- Transmission des Paquets : Les dispositifs Meshtastic peuvent transmettre des paquets via MQTT lorsqu’ils sont connectés à Internet par Wi-Fi ou Ethernet. Cela permet aux utilisateurs du réseau local de communiquer avec des utilisateurs sur Internet.
- Intégration avec des Logiciels de Maison Intelligente : Les paquets peuvent être émis ou reçus directement dans des logiciels de contrôle de maison intelligente comme Home Assistant, en utilisant des messages JSON.
Surveillance et Gestion :
- Rapports de Position sur Carte : Les nœuds peuvent envoyer des rapports de position périodiques au serveur MQTT pour être affichés sur des cartes en ligne.
- Statut des Dispositifs : Chaque dispositif connecté à MQTT publie son état (en ligne/hors ligne) et d’autres informations pertinentes.
Il est possible de créer son propre serveur de MQTT ou d’utiliser le serveur communautaire. Le fait de transmettre les messages par Internet repose à nouveau sur le fait que le réseau Internet fonctionne encore.
Exemple de message MQTT
Les messages MQTT sont envoyés au format JSON (JavaScript Object Notation est un format de données textuel dérivé de la notation des objets du langage JavaScript. Il concurrence XML pour la représentation et la transmission d’information structurée – Source Wikipedia)
Un message envoyé pour donner la position d’un noeud Meshtastic pourrait être (ce n’est qu’un exemple pour montrer la structure des données dans un message) :
1 2 3 4 5 6 7 8 9 10 |
{ "type": "position", "payload": { "latitude": 46.8078, "longitude": 4.416, "altitude": 390, "time": "2024-08-26T10:52:22Z", "device_id": "Meshtastic_ce_01" } } |
Explication des Champs
- type : Indique le type de message, ici “position”.
- payload : Contient les données spécifiques au message.latitude : Latitude de la position GPS (ici, 46.8078 pour Le Creusot).
- longitude : Longitude de la position GPS (ici, 4.416 pour Le Creusot).
- altitude : Altitude en mètres (ici, 390 mètres).
- time : Horodatage du message en format ISO 8601.
- device_id : Identifiant du dispositif Meshtastic.
Ce message serait publié sur un topic MQTT spécifique, par exemple meshtastic/position, et pourrait être reçu par tout client abonné à ce topic comme par exemple la carte qui affichera alors la position de l’appareil.
Chiffrage des données JSON
Dans la configuration MQTT de votre appareil vous pouvez autoriser l’envoi en JSON (JSON output enabled) et activer la sécurisation de la transmission (TLS enabled)
Maintenant qu’on a fait le tour des termes utilisés (n’hésitez pas à poser des questions si ce n’est pas clair !), je vous propose de passer à une revue du matériel disponible actuellement. Je vous mettrai des liens (affiliés) vers ces produits disponibles en général sur Amazon et Aliexpress, mais on peut aussi les trouver dans de nombreuses autres boutiques en ligne.