Mosquitto est un serveur MQTT Open Source (Broker) que l’on peut installer sur un Raspberry Pi mais aussi sur presque tous les systèmes d’exploitation (macOS, Windows, Linux…). MQTT est un protocole de communication très rapide et léger particulièrement bien adapté à la domotique et aux objets connectés. Il facilite la communication entre objets connectés (M2M) tout en économisant la batterie.
Dernière mise à jour : 24 avril 2020
Parmi tous les brokers MQTT existants, Mosquitto développé par la fondation Eclipse est le plus utilisé. Il existe un connecteur sur la plupart des serveurs domotiques (Jeedom, openHAB, Domoticz, Home Assistant) rendant très facile l’intégration de projets DIY. Dans ce tutoriel, nous allons installer Mosquitto sur Raspberry Pi et découvrir comment l’utiliser directement depuis le Terminal, Node-RED et MQTT.fx (un utilitaire pour Windows).
Sommaire
- 1 C’est quoi un broker MQTT ?
- 2 Quel Broker MQTT open-source choisir ?
- 3 Installer Mosquitto sur Raspberry Pi ou Linux
- 4 Installer Mosquitto sur Windows ou macOS
- 5 Vérifier l’installation
- 6 Sécuriser l’accès à Mosquitto par un mot de passe (optionnel)
- 7 Publier (envoyer) un message MQTT depuis le terminal
- 8 Recevoir (souscrire) des messages
- 9 Quelques commandes utiles
- 10 MQTT.FX : publier/souscrire facilement des messages
- 11 Et maintenant, quoi faire avec MQTT ?
- 12 Mises à jour
C’est quoi un broker MQTT ?
MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie qui fonctionne sur le principe de souscription / publication qui a été développé à la base pour simplifier la communication entre les machines. Pour fonctionner il faut installer un serveur, qui est désigné par Broker. Vous pouvez installer votre propre Broker, ce que nous allons faire dans cet article. Vous pouvez l’installer sur quasiment toutes les plateformes dont les plus communes (Windows, Linux, Mac OS X….) mais aussi sur un Raspberry Pi (qui fonctionne sous Linux après tout).
Depuis novembre 2014, la version 3.1.1 de MQTT est devenue un standard international pour la communication entre machines (M2M) et les objets (IoT). Il est soutenu par la fondation OASIS qui regroupent de grands entreprises de l’industrie informatique et télécom (BlackBerry, Cisco, IBM, Kaazing, LogMeIn, M2Mi, MachineShop, PTC, Red Hat, Software AG, TIBCO…).
En plus de simplifier la communication, MQTT a été conçu pour économiser au maximum la batterie des appareils mobiles. MQTT consomme 11 fois moins d’énergie pour envoyer des messages et 170 fois moins pour en recevoir que le protocole HTTP. MQTT est également 93 fois plus rapide que le protocole HTTP.
Avec MQTT, vous avez la possibilité de régler le QoS (Quality Of Service – Qualité de Service), c’est à dire que pour chaque message envoyé vous pouvez choisir comment le broker doit le gérer.
La notion de QoS dans les messages qui transitent via MQTT.
- QoS0. Le message envoyé n’est pas stocké par le Broker. Il n’y a pas d’accusé de réception. Le message sera perdu en cas d’arrêt du serveur ou du client. C’est le mode par défaut
- QoS1. Le message sera livré au moins une fois. Le client renvoie le message jusqu’à ce que le broker envoi en retour un accusé de réception.
- QoS2. Le broker sauvegarde le message et le transmettra jusqu’à ce qu’il soit reçu par tous les souscripteurs connectés.
D’autres fonctions utiles
- Persistance des messages sur un Topic. Les messages sont conservés sur le Broker.
- Il est possible de gérer les droits de souscription/publication pour chaque Topic.
- Il est possible de sécuriser le transport des messages en SSL/TLS ainsi que par identification de l’utilisateur (identifiant et mot de passe)
- Les topics et l’arborescence sont créés à la volée. Il n’y a rien à configurer sur le Broker. C’est le “publieur” qui créé l’arborescence des Topics (au moment de la publication).
Quel Broker MQTT open-source choisir ?
Voici les principaux projets de brokers Open Source
- ActiveMQ qui permet d’ajouter MQTT à un serveur Web Apache (Développé par la fondation Apache)
- JoramMQ pour l’intégration de MQTT en Java
- Mosquitto, le broker open-source le plus utilisé dans les projets DIY soutenu par la fondation eclipse.org
- RabbitMQ, un projet open source disponible également avec un support commercial
- EMQTT, un projet développé en Erlang/OTP disponible pour Windows, Mac Os X et Linux conçu pour recevoir de très nombreuses connexions (jusqu’à 1 million par serveur). Il est possible de créer un cluster (réseau de serveur) pour accroitre le nombres de connexions simultanées.
ActiveMQ et JoramMQ sont des brokers assez spécifiques. RabbitMQ est plus orienté entreprise avec son offre commerciale.
Mosquitto est un très bon choix. Il est disponible sur toutes les plateformes et s’installe en quelques minutes. Comme MQTT est un standard, quelque soit votre choix, vous pourrez communiquer avec vos objets connectés de la même façon.
Installer Mosquitto sur Raspberry Pi ou Linux
Avant d’installer Mosquitto, il est toujours bon de mettre à jour le système
sudo apt-get update
L’installation du Broker Mosquitto est très simple.
sudo apt-get install mosquitto
Si vous voulez faire des tests sur votre Raspberry, vous pouvez installer les clients mosquitto_sub (pour souscrire), mosquitto_pub (pour publier des messages) et mosquitto_passw (pour configurer des utilisateurs et les mots de passe).
sudo apt-get install mosquitto-clients
Si vous voulez faire des développements en python, installez python-mosquitto. Vous pouvez aussi tout installer en une seule commande
sudo apt-get install mosquitto mosquitto-clients python-mosquitto
Pour faire vos premiers essais, vous pouvez utiliser le serveur d’essai http://test.mosquitto.org/.
Installer Mosquitto sur Windows ou macOS
Vous ne possédez pas encore de Raspberry Pi, aucun problème, vous pouvez installer le Broker Mosquitto sur presque toutes les plateformes (lien vers la page de téléchargement).
Il y a deux versions disponibles en fonction de la version de votre Windows
Sur macOS, vous devrez déjà installer http://brew.sh/ puis executer la commande suivante depuis le Terminal
brew install mosquitto
Vérifier l’installation
Mosquitto fonctionne comme un service, exécutez la commande suivante pour vérifier que l’installation s’est déroulée correctement
systemctl status mosquitto
Vous devez obtenir cette réponse
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker Loaded: loaded (/etc/init.d/mosquitto; generated; vendor preset: enabled) Active: active (running) since Mon 2020-03-23 18:39:14 CET; 15h ago Docs: man:systemd-sysv-generator(8) Process: 369 ExecStart=/etc/init.d/mosquitto start (code=exited, status=0/SUCCESS) Tasks: 1 (limit: 4915) CGroup: /system.slice/mosquitto.service └─400 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
Dans le cas où cela ne fonctionne pas (même après un reboot) exécuter cette commande pour démarrer le service
sudo systemctl enable mosquitto.service
Sécuriser l’accès à Mosquitto par un mot de passe (optionnel)
Par défaut, il est possible de souscrire (recevoir des messages) sans avoir besoin d’aucune identification. Très pratique pour la mise au point, cela peut vite poser une faille de sécurité si pilotez vos appareils (chauffage, climatisation, motorisation de volets roulants…) à l’aide d’un système domotique DIY. Dans ce cas, voici comment protéger à minima votre installation et activant l’authentification par un mot de passe.
Créer un mot de passe et remplaçant NOM_UTILISATEUR
sudo mosquitto_passwd -c /etc/mosquitto/passwd NOM_UTILISATEUR
La commande mosquitto_passwd génère l’empreinte du mot de passe et l’enregistre dans le fichier passwd dans le répertoire /etc/mosquitto.
Ouvrez le fichier de configuration avec sudo nano /etc/mosquitto/mosquitto.conf
, puis ajouter les lignes
>allow_anonymous false
password_file /etc/mosquitto/passwd
Crtl + X puis O (ou N) pour enregistrer
Enfin redémarrer le service en faisant
systemctl restart mosquitto
Publier (envoyer) un message MQTT depuis le terminal
La commande mosquitto_pub permet de publier simplement un message MQTT.
Exécuter mosquitto_pub –help pour obtenir la liste de toutes les options disponibles. Voici quelques options utiles à connaître :
- h nom du broker (ou IP) sur lequel lequel se connecter
- p port, par défaut 1883
- u nom d’utilisateur (optionnel)
- P mot de passe (optionnel)
- t topic sur lequel publié le message
- m message (payload) à envoyer. Le payload peut être une valeur ou un JSON.
- r indique au broker de retenir (ou pas) le message
Par exemple, on se connecte au serveur -h localhost sur le Topic -t sensor/temperature et on publie le message -m 22.5
mosquitto_pub -h localhost -t sensor/temperature -m 22.5
Recevoir (souscrire) des messages
La commande mosquitto_sub permet de souscrire, c’est à dire de recevoir des messages publiés sur un broker MQTT. Les options sont presque identiques à mosquitto_pub. Ouvrez un second Terminal et exécutez la commande suivant.
mosquitto_sub -h localhost -t "sensor/temperature"
Vous disposer maintenant d’un système serveur d’échange de messages domotiques très performant et facile à utiliser.
Si vous ne connaissez pas encore Node-RED, je vous conseille de prendre le temps de lire ce tutoriel. Nous allons voir comment il est super simple de communiquer avec MQTT en utilisant Node-RED.
Aucun plugin supplémentaire n’est nécessaire, Node-RED gère par défaut MQTT. Ajoutez un node mqtt (celui-ci se trouve dans la section input). Double cliquez sur le node pour ouvrir la boîte de configuration. et appuyez sur le crayon pour ajouter une nouvelle connexion. Si Node-RED fonctionne sur la même machine que le broker Mosquitto, saisissez localhost dans le champ serveur et 1883 dans le port. Validez.
Dans le champ Topic saisissez le topic auquel vous voulez souscrire. Dans notre exemple sensor/temperature. Ajoutez un node debug et déployez. Retournez dans le Terminal et publiez une nouvelle valeur sur le topic. Un nouveau message vient de s’ajouter dans la fenêtre debug. Communiquer avec vos objets connectés devient un vrai jeu d’enfant non ?
Quelques commandes utiles
Symbole #. Il permet de souscrire à tous les niveaux se trouvant en dessous du wildcard. Par exemple avec la commande suivante vous allez souscrire à tous les Topics (-t) sur serveur (-h) localhost. Tous les topics (“#”). Le Topic sera affiché avant sa valeur (-v).
mosquitto_sub -h localhost -t "#" -v
Effacer un topic et son contenu
Attention, il est impossible de revenir en arrière
mosquitto_pub -t -r -n
MQTT.FX : publier/souscrire facilement des messages
A la place de Node-RED, vous pouvez également utiliser MQTT.fx, un logiciel open source multiplateforme qui vous pouvez télécharger ici. MQTT.fx est un outil assez complet qui va vous permettre :
- De souscrire ou de publier des messages en ajustant le QoS
- De connaître le statut de votre Broker (nombre de clients connectés, messages reçus, envoyés, stockés, trafic réseau…)
- D’avoir accès au log du Broker
- De créer des scripts en Javascript
Et maintenant, quoi faire avec MQTT ?
Le protocole MQTT est particulièrement bien adapté au développement d’objets connectés. Ultra rapide et léger, c’est un standard très utilisé en domotique.
Voici une sélection d’autres articles qui pourraient vous donner des idées
Retrouvez tous les projets et tutoriels dans la catégorie Objets Connectés
Mises à jour
24/03/2020 correction du lien vers MQTT.fx, sécuriser l’accès à Mosquitto par un mot de passe
Avez-vous aimé cet article ?