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 (Message Queuing Telemetry Transport) et démystifier un peu plus ce protocole encore trop méconnu et pourtant si puissant !
Sans rentrer trop dans la technique, nous allons survoler les capacités de MQTT et surtout voir comment créer un serveur MQTT personnel Mosquito sur le Raspberry Pi 4, puis nous verrons comment l’utiliser dans des projets domotiques par la suite au coeur de la maison connectée.
Le fonctionnement de principe de MQTT
Le protocole MQTT est assez basique dans son fonctionnement, c’est d’ailleurs sa force. Il s’agit d’un protocole de messagerie machine to machine. 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.
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.
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 connectée 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.
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 Mosquiti. Pour ce faire, connectez vous à ce dernier en SSH et jouez la commande d’installation de Mosquitto.
sudo apt-get install mosquitto
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.
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).
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.
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.
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
Add Comment