VOUS ÊTES ICI: Accueil » Blog » Raspberry » Guides Raspberry pi » Comment créer un serveur MQTT sur le Raspberry Pi avec Mosquitto
Guides Raspberry pi

Comment créer un serveur MQTT sur le Raspberry Pi avec Mosquitto

raspberrypi-mqtt-server-brocker-guide-tuto
MQTT est un protocole hyper léger et donc tout aussi rapide qui révolutionne le monde des objets connectés. On entend de plus en plus parler de MQTT ici et là. Pourtant le protocole n'est pas nouveau. Créé en 1999 par Andy Stanford-Clark (IBM) et Arlen Nipper (Arcom). MQTT (Message Queue Telemetry Transport) n'est donc pas un protocole tout jeune, pourtant, il est vraiment très intéressant dans la maison connecté et plus particulièrement dans les projets DIY.

Qui dit Do It Yourself dans la maison connectée, dit bien souvent Raspberry Pi. Vous le savez, au domo-lab, nous sommes friands de projets connectés autour du nano ordinateur. C’est pourquoi j’ai voulu vous parler de MQTT et démystifier un peu plus ce protocole encore trop méconnu.

Sans rentrer trop dans la technique, nous allons survoler les capacités de MQTT et surtout voir comment créer un serveur personnel sur le Raspberry Pi, puis nous verrons comment l’utiliser dans des projets domotiques par la suite.

Le fonctionnement de principe de MQTT

Le protocole MQTT est assez basique dans son fonctionnement, c’est d’ailleurs sa force, cela permet des échanges simples, rapides et fiables avec une très faible emprunte logiciel et c’est tout ce que l’on demande à des objets connectés.

Si son fonctionnement peut paraître déroutant au premier abord, il est finalement très logique. Quand on parle MQTT, on parle de connexion client-serveur avec abonnement. Concrètement les équipements connectés publient et/ou s’abonnent à un topic qui référence les messages et les communique aux abonnés.

Prenons un exemple concret, nous disposons d’un ensemble ampoule connectée et sonde de luminosité. Nous allons configurer la sonde en publication et notre ampoule en tant qu’abonnée.

mqtt-principe-fonctionnement-exemple

La sonde de luminosité va alors publier la luminosité dans un topic prédéfini « maison/LUX » et notre ampoule sera abonnée à ce topic « maison/LUX » et consultera alors tous les messages (relevés de luminosité) qui y seront publiés.

Un programme embarqué à l’ampoule lui ordonnera alors de s’éteindre si la luminosité dépasse un certain seuil et inversement de s’allumer si cette dernière dépasse un seuil minimal.

Cette même ampoule sera également capable de publier à son tour pour donner son état (allumée/éteinte) dans un autre topic. Nous disposons donc d’un retour d’état, le tout greffé à un système domotique, nous pouvons faire communiquer de nombreux objets entre eux et bénéficier d’une puissance de scénarisation sans fin.

explication-principe-fonctionnement-mqtt

La hiérarchisation MQTT

Vous l’aurez compris avec notre précédent exemple, MQTT serait un peu comme un forum avec des abonnés (lecteurs) et de rédacteurs qui eux publient des messages. Les message sont hiérarchisés de la même manière, il est donc possible de consulter uniquement les messages qui nous intéressent.

Chaque topic peut alors prendre le rôle d’une pièce ou d’une fonction de la maison et les objets connectés réagissent en fonction des messages qu’ils y lisent.

MQTT et la QoS

La QoS représente la Qualité of Service. Il existe plusieurs niveaux de qualité de service avec MQTT Allant du néant (niveau 0), un message est publié sans garantie de sa bonne réception, au niveau 2 aussi appelé le service garantie, qui lui se charge de publier le message en deux parties qui s’assure et garantit, que le message sera correctement délivré de façon unique, quelque soit le nombre de tentatives.

Bien entendu, plus vous montez en niveau de QoS, plus vous chargez les trames.

La sécurité et MQTT

Du point de vue sécurité, si MQTT est parfaitement compatible avec des échanges à travers internet, il est d’ailleurs possible de tester le protocole assez simplement sur des brokers MQTT publiques. On préférera tout de même des échanges sur un réseau privé avec un serveur isolé de l’extérieur. En effet, MQTT n’intègre pas de mécanisme de sécurité à proprement parlé. Bien qu’il soit tout de même possible de monter des connexion SSL/TLS soumises à certificat, dans le cadre d’une maison connectée, il n’est pas utile de dialoguer avec l’extérieur en MQTT. On préférera un schéma plus classique visant à faire communiquer les objets en local avec le serveur domotique, qui se chargera de relayer l’info à l’extérieur si nécessaire.

C’est donc tout l’intérêt de disposer d’un broker MQTT sur son réseau local à l’aide d’un Raspberry Pi.

Dernière mise à jour du tarif le  2020-09-20 at 09:54

Comment installer un broker Mosquitto sur le Raspberry Pi

Avant de démarrer, il vous faut posséder un Raspberry Pi. Nous l’avons dit en avant propos, MQTT est un protocole très léger, il n’est donc pas nécessaire de disposer de la dernière version du Raspbery Pi. Une version 2 ou 1 voire même nano est parfaitement suffisante pour ce rôle.

De même, si vous avez déjà un Raspberry Pi en fonctionnement à la maison pour une autre tâche, vous pouvez aussi lui attribuer cette tâche en plus.

Une fois le matériel sous la main, il vous faudra procéder à l’installation de Raspbian sur la carte SD du Raspberry Pi. Pour cela je vous invite à suivre notre guide Windows ou Mac OS suivant votre système d’exploitation de prédilection.

Maintenant, notre Rasperry Pi est prêt à accueillir son broker MQTT. Pour ce faire, connectez vous à ce dernier en SSH et jouez la commande d’installation de Mosquitto.

sudo apt-get install mosquitto

mostquitto-install-mqtt-raspberrypi-verification

Puis vérifiez que tout est opérationnel avec la commande suivante.

systemctl status mosquitto

C’est terminé, votre serveur MQTT local est en place et prêt à collecter les messages ! Simple et rapide ! Je vous avais dit que MQTT était complexe dans l’approche mais très simple dans l’utilisation.

Maintenant, testons notre broker. Pour ce faire, il nous faut un client qui sera capable de lire et publier dans les différents topics. Il existe plusieurs client MQTT, pour ma part j’utilise MQTTBox sous Mac OS, un client simple d’utilisation et multiplateforme.

Créez simplement les setings de votre client (nom, adresse IP port…) et sauvegardez.

mqtt-client-mac-creation

Une fois connecté à votre broker, selectionnez le topic à suivre. sur la partie de droite puis abonnez vous et sur la partie de gauche, indiquer le nom du topic ou publier (ici test).

mqtt-client-publish

Publiez le message à gauche pour simuler l’envoi d’une donnée par un capteur. Vous voyez alors instantanément le resultat à droite, similant alors un device qui serait abonné au topic et attendrait une valeur precise pour s’actionner.

mqtt-client-reader-subscribe

Pratique pour tester le bon fonctionnement du serveur, mais aussi pour tester le bon fonctionnement de vos objets connectés fonctionnants sous MQTT.

Conclusion

Vous en savez à present plus sur MQTT, ses capacités et surtout comment le mettre en oeuvre chez vous, très simplement avec un Raspberry Pi. Enfin, pour aller plus loin, de nombreuses options complementaires sont possible. Nous avons par exemple evoqué le fait que MQTT n’etait pas un protocole très securisé. Si dans une utilisation domestique, l’accès anonyme n’est pas un probleme, il est toutefois possible de securiser un peu et créer des utilisateurs pour un accès restreint.

Dernière mise à jour du tarif le  2020-09-20 at 09:54

Ajouter une authentification au broker MQTT Raspberry Pi

Dans une utilisation basique, on peut en rester là. L’utilisation n’en sera que plus simple. Toutefois il est possible d’apporter un peu plus de securité à notre broker avec la definition d’un mot de passe pour y acceder. Pour cela exécutez la commande :

sudo mosquitto_passwd -c /etc/mosquitto/passwd user

L’identifiant sera alors stocké sous la forme user/password dans le fichier passwd

Enfin interdisez l’accès au broker par des comptes anonymes en ajoutant les lignes suivantes au fichier /etc/mosquitto/mosquitto.conf

allow_anonymous false
password_file /etc/mosquitto/passwd

Terminez par un redemarrage du serveur pour prise en compte des parametres.

systemctl restart mosquitto

Restez connecté aux nouveautés domotiques, inscrivez-vous à notre newsletter

A propos de cet auteur

Aurélien Brunet

Aurélien Brunet

Chef de projet informatique, anciennement informaticien spécialisé dans l'IT industrielle, le réseau et les bases de données, un peu geek à mes heures perdues, je me suis mis à la domotique en 2012 pour sécuriser mon domicile.
Depuis, je test, j’installe, je code, j’améliore mon installation et surtout, je partage avec vous mon expertise via ce blog pour améliorer votre quotidien dans la maison connectée !

Choix box domotique
promos domotique
promos domotique