Accueil | Niveau de difficulté | Avancé | Bien débuter avec le Broker MQTT Mosquitto sur Raspberry Pi, Windows, macOS et Linux

Bien débuter avec le Broker MQTT Mosquitto sur Raspberry Pi, Windows, macOS et Linux

Mosquitto est un serveur MQTT Open Source (Broker) que l’on peut installer sur un Raspberry Pi mais aussi sur presque toutes les plateformes (macOS, Windows, Linux…). MQTT facilite la communication entre objets connectés (M2M). Dans les projets DIY, Mosquitto est un outil idéal pour intégrer des objets connectés à un serveur domotique tel que JeedomopenHAB, Domoticz ou Home Assistant. 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 (sous 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 sur lequel il est employé. En est 11 fois moins consommateur d’énergie pour envoyer des messages et 170 fois moins pour en recevoir que l’HTTP. MQTT est également 93 fois plus rapide que le HTTP.

Avec MQTT vous avez la possibilité de régler le QoS (Qualité de Service), c’est à dire comment 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’a ce que les souscripteurs connectés le reçoive

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 ?

Il existe plusieurs 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 très employé dans les projets à base d’esp8266, Arduino et Raspberry. C’est celui que je vous conseille d’utiliser.

Installer Mosquitto sur Raspberry Pi ou Linux

Avant d’installer Mosquitto, il est toujours bon de mettre votre système à jour

L’installation du Broker Mosquitto est très simple.

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

Si vous voulez faire des développements en python, installez python-mosquitto Vous pouvez aussi tout installer en une seule commande

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

Envoyer/recevoir vos premiers messages MQTT

Maintenant que le broker est prêt, publions notre premier message. On se connecte au serveur (-h) localhost sur le Topic (-t) sensor/temperature et on publie le message (-m) 22.5

Dans un autre Terminal, exécutez la commande

mqtt mosquitto raspberry pi pub sub example exemple publication

C’est aussi simple que ça!

Utiliser MQTT avec Node-RED

Dans cet article précédent, je vous ai présenté rapidement Node-RED, voyons comme il est simple de communiquer avec MQTT en utilisant Node-RED.

Ajoutez un node mqtt (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).

Effacer un topic et son contenu (attention impossible de revenir en arrière)

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

  • Freyssinet

    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.

  • Ferhat MAMECHE

    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