Accueil / Objets Connectés / Node-RED / MQTT Mosquitto: communiquer avec des objets connectés

MQTT Mosquitto: communiquer avec des objets connectés

Mosquitto est un serveur MQTT Open Source (Broker) que l’on peut installer sur un Raspberry Pi (mais également sur d’autres plateformes) pour faciliter la communication entre objets connectés (M2M). Mosquitto est un outil idéal pour intégrer des objets connectés à un serveur domotique tel que JeedomopenHAB, Domoticz ou Home Assistant.

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

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 Mac OS X

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 Mac OS X, vous devrez déjà installer  http://brew.sh/ puis executer la commande suivante dans le Terminal

brew install mosquitto

 

Envoyer/recevoir vos premiers messages

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

 

Effacer un topic et son contenu (attention 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