Débuter avec le Broker MQTT Mosquitto (Raspberry Pi, Windows, macOS, Linux)

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Mosquitto est un serveur MQTT Open Source (Broker) que l’on peut installer sur un Raspberry Pi mais aussi sur presque toutes 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 (JeedomopenHABDomoticzHome 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).

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.

A LIRE AUSSI :
Brokers MQTT en ligne avec une offre gratuite pour tester et connecter vos objets à internet
A LIRE AUSSI :
Test de cloudMQTT, broker MQTT en ligne gratuit. Piloter Domoticz avec l'API JSON

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/.

Attention à ce que vous publié, c’est un serveur accessible pour tout le monde! Il est directement accessible sans avoir besoin de créer de compte ou d’utilisateur.

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
Attention, n’oubliez pas de relancer le broker chaque fois que le mot de passe est modifié

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"

mqtt mosquitto raspberry pi pub sub example exemple publication

Vous disposer maintenant d’un système serveur d’échange de messages domotiques très performant et facile à utiliser.

Comment publier et recevoir des messages MQTT avec Node-RED

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.

mqtt mosquitto node-red raspberry pi 3

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 ?

 

 

mqtt broker mosquito node-red subscribe

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 <topic> -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

mqtt mosquitto broker mqtt.fx

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

A LIRE AUSSI :
Brokers MQTT en ligne avec une offre gratuite pour tester et connecter vos objets à internet
A LIRE AUSSI :
Test de cloudMQTT, broker MQTT en ligne gratuit. Piloter Domoticz avec l'API JSON

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 ?
[Total: 2 Moyenne: 4.5]

Vous rencontrez un problème avec ce sujet ?

Peut-être que quelqu’un a déjà trouvé la solution, visitez le forum avant de poser votre question

Accéder directement aux forums

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

7 Commentaires
  1. Bonjour. Merci pour votre article.
    Je suis resté coincé à la phase de sécurisation. Je vois bien où indique le nom d’utilisateur, mais pas le password….
    Merci de votre aide

    • Bonjour Patrick. J’ai apporté une petite précision dans le texte. En fait la commande mosquitto_passwd génère l’empreinte du mot de passe et l’enregistre dans le fichier passwd qui se trouve dans le répertoire /etc/mosquitto. La commande va vous demander votre mot de passe de session linux (à cause de la commande sudo). Ensuite, il faut saisir une première fois le mot de passe souhaité pour sécuriser node-red (enter) puis une seconde fois pour le confirmer (re-enter). Pour voir l’empreinte du mot de passe, faites nano /etc/mosquitto/passwd. Rien de plus à faire. Prenez soin de vous.

  2. Sur cet ancien article, un besoin rejoint les nouveaux articles.
    1) RPi sur lequel fonctionne l’assistant vocal Jarvis () nécessite un MQTT Broker (tel Mosquitto) léger

    2) je viens de découvrir ce Gateway qui pourrait être le pont entre les senseurs (tels Wemos D1 avec DHT22 et autre utilisant MQTT client) : https://github.com/1technophile/OpenMQTTGateway/wiki

    3) il faut juste trouver un Dashboard qui permet alors de ne pas alourdir le RPi (puisque Jarvis tourne dessus) et juste disposer des données reçues des senseurs dans du JSON :
    http://crouton.mybluemix.net/crouton/gettingStarted
    https://github.com/edfungus/Crouton

    4) permettant alors de suivre la situation du jardin avec du 433 mHz ou du WiFi (via MQTT) suivant que l’un ou l’autre consommerait moins (voir article du “deep sleep” de ce jour 😉 ) :https://1technophile.blogspot.be/2016/08/low-cost-low-power-6ua-garden-433mhz.html

    A plus pour un nouvel article montrant alors ledit RPi broker avec son Dashboard Crouton (utilisant les données JSON reçues via MQTT des clients Wemos D1 DHT22 😉 et lui renvoyant une commande d’activation d’un relais (arrosage, ventiler la pièce trop humide, …)

    A+

  3. je n’ai pas très bien compris comment on peut utiliser MQTT avec home assistant, je l’ai pourtant installer mais voilà ce qu’il m’indique

    https://uploads.disquscdn.com/images/bfb26cc625f4e9c1bd258fa6904b7c35603a3f26405201fa9bffa80a2712a458.png

  4. 2 petites remarques :
    – Tout d’abord je ne comprend pas l’attribut “spécifique” dont sont affublés JoramMQ et ActiveMQ. JoramMQ est un broker multi-protocole qui a l’avantage d’être écrit en Java et donc de s’installer aisément sur tout type de plateforme.
    – Ensuite en complément de MQTT.FX je citerais MQTT SPY qui semble maintenant faire partie des outils Eclipse autour de MQTT.

    • Bonjour Freyssinet. Merci pour vos remarques. J’essai de rendre le plus accessible possible toutes les technos rencontrés pour développer des objets connectés à tout le monde. Java (et Eclipse) me semble plus difficile d’accès lorsqu’on débute. Si vous voulez partager votre expérience sur ces 2 brockers, vous êtes le bienvenue. A très bientôt.

    Laisser un commentaire

    Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

    Domotique et objets connectés à faire soi-même