Bien débuter avec le Broker MQTT Mosquitto sur Raspberry Pi, Windows, macOS et Linux [Màj]

Mosquitto est un serveur MQTT Open Source (aussi appelé 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’à ce qu’il ait été réceptionné 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 ?

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 (Raspbian) 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

Comment envoyer et recevoir des 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

mosquitto_pub -h localhost -t sensor/temperature -m 22.5

Dans un autre Terminal, exécutez la commande

mosquitto_sub -h localhost -t "sensor/temperature"

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

mosquitto_sub -h localhost -t "#" -v

On peut également souscrire à une branche. Par exemple souscrire à tous les capteurs de température. Dans ce cas, on utilisera le plus (+) pour souscrire à tous les sous-topics à partir du point indiqué.

mosquitto_sub -h localhost -t "/capteurs/temperature/+" -v

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

mosquitto_pub -t "topic" -r -n

Sécuriser Mosquitto avec un mot de passe

Par défaut, n’importe quel client peut se connecter au broker Mosquitto. Ce n’est pas très gênant s’il n’y a que des informations basiques qui sont publiées (mesure de température, taux de CO2, indique IAQ…) mais si vous voulez commander des appareils, des lampes ou votre portail électrique, il faut sécuriser un minimum Mosquito.

Placez vous dans le dossier de configuration de Mosquitto. Sur Linux (ou Raspbian)

cd /etc/mosquitto/

Sur Windows, il se trouve à la racine du disque dur (c:\mosquitto ) par défaut.

Mosquot créé un fichier qui contient le nom de l’utilisateur et son mot de passe (crypté). Pour ajouter un nouvel utilisateur exécutez la commande mosquitto_passwd -c nomfichier nomutilisateur . Remplacez nomfichier par le nom de fichier qui contiendra les identifiants et nomutilisateur, le nom de l’utilisateur à ajouter

Mosquitto demande la saisie du mot de passe (2 fois). La commande sudo est obligatoire sur Linux lorsqu’on se trouve dans le répertoire /etc.

sudo mosquitto_passwd -c users projetsdiy

Ouvrez le fichier de configuration de Mosquitto avec nano (sudo obligatoire sur Linux)

sudo nano mosquitto.conf

Ajoutez la commande allow_anonymous false et indiquez le chemin vers le fichier des mots de passe (sur Windows c:\mosquitto\user)

allow_anonymous false
password_file /etc/mosquitto/users

Maintenant il ne reste plus qu’à redémarrer Mosquitto pour prend en compte les modifications

sudo service mosquitto restart

Pour ajouter un autre utilisateur, on utilisera l’option -b de la commande mosquitto_passwd en indiquant :

  • le nom du fichier de mot de passe
  • le nom de nouvel utilisateur
  • le mot de passe

Ce qui donne par exemple

sudo mosquitto_passwd -b users nouveauutilisateur motdepasse

Utilisez la commande Linux cat pour vérifier que le nouvel utilisateur à bien été ajouté au fichier de configuration

Maintenant, il faudra s’authentifier pour pouvoir publier ou souscrire à un Topic. En ligne de commande, on dispose de l’option -u pour spécifier l’utilisateur et -P pour le mot de passe. Ce qui donne pour publier un message

mosquitto_pub -h localhost -t test -m demo -u nomutilisateur -P motdepasse

Et pour souscrire

mosquitto_sub -h localhost -t "test" -v -u nomutilisateur -P motdepasse

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

Print Friendly, PDF & Email

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous désinscrire à tout moment.

Comparateur de prix

Bons plans

Les offres suivantes se terminent bientôt. Utilisez le coupon indiqué pour profiter du prix promo

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