Si vous avez suivi nos nombreux tutoriels domotiques DIY, il est fort probable que vous ayez déjà entendu parler du protocole MQTT. Mais késako?
C’est ce que nous allons voir aujourd’hui avant de vous expliquer comme mettre en œuvre seul, en quelques minutes seulement et pour pas très cher, un serveur utilisant ce protocole très intéressant pour tous ceux qui utilisent une box domotique telle que la nouvelle Jeedom Atlas, la peu onéreuse Home Assistant sur Raspberry Pi ou encore la très efficace Homey Pro.
MQTT, c’est quoi?
Définition
MQTT, ou Message Queuing Telemetry Transport, est un protocole de communication conçu pour les applications M2M (Machine To Machine) et IoT (Internet of Things). Créé en 1999 par Andy Stanford-Clark (IBM) et Arlen Nipper (Arcom), on ne peut pas dire qu’il soit bien nouveau, mais il reste toujours très apprécié en domotique de par sa fiabilité et sa sobriété.
MQTT permet en effet des échanges rapides avec très peu de données – économie de bande passante – sans avoir à interroger un serveur – moins de la latence. Il est en donc précieux dans nos maisons connectées car il est 90 fois plus rapide que le protocole HTTP. Par ailleurs, il nécessite 10 fois moins d’énergie pour envoyer des messages et 170 fois moins pour en recevoir.
Concrètement, chaque message MQTT se compose d’une en-tête fixe de seulement 2 octets, d’une en-tête variable facultative, d’une charge utile de message limitée à 256 Mo et d’un niveau de qualité de service…
Qualité de service (QoS)
MQTT offre une Qualité de service (QoS) à 3 niveaux :
- QoS 0 : transmission de message sans accusé de réception
- QoS 1 : transmission de message avec accusé de réception
- QoS 2 : transmission de message avec accusé de réception et vérification du message transmis afin d’éviter qu’un même message ne soit transmis de plusieurs fois.
Comment ça marche ?
MQTT est un protocole dit « publish / suscribe » permettant aux appareils « edge of network » de publier vers un « broker ».
Bon, OK, ça n’est pas très clair. En français, cela signifie que le serveur appelé broker va publier des topics auxquels des clients vont pouvoir s’abonner. Chaque client peut souscrire à différents topics, et s’agissant d’un protocole bidirectionnel, le broker MQTT va avertir tous les clients abonnés au topic lorsque l’un d’eux y publiera un message.
Au fond, ça n’est pas bien compliqué, n’est-ce pas?
Le matériel nécessaire
Maintenant que nous savons tout, nous allons passer à la pratique et utiliser du matériel que nous avions en stock : un kit Raspberry Pi 3B+. Vous pouvez évidemment opter pour un Raspberry Pi 4, mais il est bien plus onéreux et son surplus de puissance ne nous sera d’aucune utilité…
Si vous possédez un NAS Synology, vous serez probablement plus intéressé par l’installation sur ce dernier :
Installer un broker Mosquitto MQTT sur Raspberry Pi
Nous allons partir du principe que vous avez déjà procédé à l’installation de Raspberry Pi OS sur votre nano-ordinateur du même nom. Si cela n’est pas déjà le cas, nous vous invitons à consulter notre tutoriel. N’ayez crainte, c’est désormais d’une facilité déconcertante !
Installation MQTT sur Raspberry Pi OS
Nous allons utiliser PuTTY, un petit programme permettant de très facilement se connecter à distance à notre Raspberry Pi en SSH.
Installez-le, lancez-le et entrez l’adresse IP de votre Raspberry PI sur le port 22.
Cliquez ensuite sur Open et une nouvelle fenêtre s’ouvre. C’est le terminal dans lequel vous allez saisir vos identifiants d’accès au système Raspberry Pi OS.
Tapez la ligne suivant et sélectionnez ‘Change User Password‘ :
sudo raspi-config
Autre point important, il nous faut vérifier que notre Raspberry Pi est bien à jour… Même si vous venez de l’installer !
sudo apt-get update
Faîtes les mises à jour nécessaires et passons maintenant à l’installation de notre broker MQTT.
sudo apt-get install mosquitto
Si vous êtes familier de Linux, vous ne serez pas surpris que nous vérifions ensuite la bonne exécution en tapant :
systemctl status mosquitto
Tout est ok? Votre écran doit ressembler à ça :
Mais nous n’avons pas terminé pour autant… Comme nous allons vraiment utiliser Mosquitto au quotidien, et pas simplement pour faire un tuto, il nous faut le forcer à se lancer à chaque démarrage de notre Raspberry Pi.
Saisissez cette commande :
sudo systemctl enable mosquitto.service
Sécuriser son broker Mosquitto MQTT
Il est également très important de sécuriser notre service en créant un identifiant Mosquitto et un mot de passe associé (remplacez ID par l’identifiant de votre choix) :
sudo mosquitto_passwd -c /etc/mosquitto/passwd ID
Nous allons ensuite ajouter deux lignes au fichier de configuration de Mosquitto via l’éditeur de texte :
sudo nano /etc/mosquitto/mosquitto.conf allow_anonymous false password_file /etc/mosquitto/passwd
Utiliser un client MQTT
Nous allons relancer notre broker Mosquitto MQTT avec :
sudo systemctl restart mosquitto
Et nous tourner vers un client MQTT gratuit afin de lire et publier très facilement des topics.
Notre préférence va à MQTT Explorer, mais vous en trouverez d’autres si vous préférez. Disponible pour PC et Mac, ce programme va nous être très utile dans le futur en nous permettant de visualiser les topics et leur activité, de les manipuler, et bien entendu de publier des topics MQTT.
- Installez le client MQTT Explorer
- Renseignez l’adresse IP de votre Raspberry Pi dans « Host »,
- Laissez le port 1883
- Saisissez vos identifiants dans ‘Username’ et ‘Password’ (ceux choisis pour Mosquitto, pas ceux de Raspberry Pi OS, bien entendu).
Pour les plus curieux, vous comprendrez mieux où nous allons avec cette liste d’applications compatibles Mosquitto MQTT :
Répondre