5/5 - (3 votes)
Soldes domotique
Saint Valentin générique

Le protocole MQTT, ou Message Queuing Telemetry Transport, s’impose aujourd’hui comme un standard incontournable dans le monde de l’internet des objets (IoT). Créé en 1999 par Andy Stanford-Clark d’IBM et Arlen Nipper d’Arcom, ce protocole léger et efficace est particulièrement adapté aux environnements où la bande passante et les ressources énergétiques sont limitées. Son association avec le nano-ordinateur Raspberry Pi offre une solution à la fois puissante, économique et accessible pour créer un serveur domotique personnel, capable de centraliser et de gérer les communications entre une multitude d’appareils connectés.

Comprendre le protocole MQTT

Un protocole de messagerie léger et efficace

Le principal atout du MQTT réside dans sa conception minimaliste. Contrairement au protocole HTTP, souvent utilisé pour la navigation web, le MQTT est optimisé pour la transmission de petits paquets de données avec une surcharge minimale. L’en-tête d’un message MQTT ne pèse que 2 octets, ce qui permet des communications extrêmement rapides, évaluées à près de 90 fois la vitesse du HTTP dans des conditions similaires. Cette légèreté le rend idéal pour les microcontrôleurs et les capteurs disposant de peu de puissance de calcul et fonctionnant souvent sur batterie.

Le modèle de communication : publication et abonnement

Le MQTT fonctionne sur un modèle de communication asynchrone dit de publication/abonnement (publish/subscribe). Ce système repose sur trois composants principaux :

  • Le publisher (éditeur) : Il s’agit d’un appareil (un capteur de température, par exemple) qui envoie des messages.
  • Le subscriber (abonné) : C’est un appareil ou une application (un tableau de bord, un smartphone) qui reçoit les messages.
  • Le broker (courtier) : C’est le serveur central qui reçoit tous les messages des éditeurs et les redirige vers les abonnés intéressés.

Les messages ne sont pas envoyés directement d’un appareil à un autre. L’éditeur publie un message sur un sujet (topic) spécifique, comme « maison/salon/temperature ». Le broker reçoit ce message et le transmet à tous les abonnés qui ont préalablement souscrit à ce sujet. Cette architecture découplée est extrêmement flexible : les éditeurs et les abonnés n’ont pas besoin de se connaître ni de savoir où ils se trouvent sur le réseau.

Caractéristique Protocole MQTT Protocole HTTP
Modèle de communication Publication/Abonnement Requête/Réponse
Taille de l’en-tête 2 octets Variable, souvent > 100 octets
Connexion Persistante (Stateful) Non persistante (Stateless)
Usage principal IoT, messagerie M2M Web, transfert de fichiers

Maintenant que les fondements théoriques du protocole MQTT sont établis, il est temps de passer à la pratique en rassemblant les composants physiques nécessaires à notre projet.

Préparer le matériel nécessaire

Préparer le matériel nécessaire

Le cœur du projet : le Raspberry Pi

Le choix du Raspberry Pi comme support pour notre serveur MQTT est judicieux en raison de sa faible consommation électrique, de son coût modique et de sa grande communauté d’utilisateurs. N’importe quel modèle récent fera l’affaire, mais un Raspberry Pi 3B+ ou un Raspberry Pi 4 est recommandé pour plus de confort et de performance, surtout si vous prévoyez de connecter de nombreux appareils. Ces modèles disposent d’une connectivité Wi-Fi et Ethernet intégrée, simplifiant grandement la mise en réseau.

  • Raspberry Pi 4 Modèle B (4 Go)
  • Raspberry Pi 4 Modèle B 2 Go
  • Raspberry Pi 4 4 Go Starter Kit | Alimentation Officielle 15W | Boîtier Officiel | Carte mémoire de 64 Go | Câble 4k Micro HDMI | Kit dissipateur Thermique

Les périphériques essentiels

Outre le nano-ordinateur lui-même, quelques éléments sont indispensables pour démarrer. Voici une liste du matériel requis :

  • Une carte microSD : Une carte d’au moins 16 Go de classe 10 est conseillée pour installer le système d’exploitation et stocker les données.
    • Verbatim Carte mémoire microSDHC Premium 16 Go noire - Carte SD pour capture vidéo en full HD - résiste à l'eau & aux chocs - carte mémoire SD pour appareil photo smartphone tablette
    • PNY Elite Carte Mémoire microSDHC 16 Go + Adaptateur SD, Vitesse de Lecture 100 Mo/s, Classe 10 UHS-I, U1 pour vidéo Full HD, 16GB
    • QUMOX 2pcs Pack 16GB Micro SD Memory Card Class 10 UHS-I 16 GB 16Go Go Carte memoire HighSpeed Write Speed 12MB/S Read Speed Upto 70MB/S
  • Une alimentation électrique : Il est crucial d’utiliser l’alimentation officielle ou une alimentation de qualité équivalente (5V, 3A via USB-C pour le Pi 4) pour garantir la stabilité du système.
  • Un boîtier (optionnel mais recommandé) : Pour protéger le Raspberry Pi de la poussière et des chocs.
    • Raspberry Pi Boite pour Raspberry Boite pour Raspberry Officiel PI 4, Rouge/Blanc (1876751)
    • Geekworm Boîtier en Aluminium pour Raspberry Pi 4 modèle B - Résistant - Dissipation Thermique Passive - pour Raspberry Pi 4B Uniquement
    • Miuzei Boîtier pour Raspberry Pi 4 avec Ventilateur 35mm et Grand Dissipateur 15mm - Alimentation USB-C 5V 3A avec Interrupteur Marche/Arrêt - Compatible avec Pi 4 Modèle B 8 Go/4 Go/2 Go
  • Un ordinateur : Nécessaire pour préparer la carte microSD avec le système d’exploitation.

Une fois tout le matériel réuni, l’étape suivante consiste à donner vie à notre Raspberry Pi en installant le système d’exploitation et le logiciel qui servira de cœur à notre serveur MQTT.

Installation de Raspberry Pi OS et de Mosquitto

Installation de raspberry pi os et de mosquitto

Préparation du système d’exploitation

La première étape logicielle est l’installation de Raspberry Pi OS (anciennement Raspbian), la distribution Linux officielle. L’outil Raspberry Pi Imager simplifie grandement ce processus. Il suffit de le télécharger sur votre ordinateur, de sélectionner la version de l’OS souhaitée, de choisir votre carte microSD comme cible et de lancer l’écriture. Il est également possible de préconfigurer le Wi-Fi et d’activer l’accès SSH directement depuis cet outil, ce qui permet un démarrage sans écran ni clavier connectés au Pi (headless).

Installation du broker Mosquitto

Mosquitto est une implémentation open source très populaire du protocole MQTT. Son installation sur Raspberry Pi OS est très simple. Une fois votre Raspberry Pi démarré et connecté au réseau, ouvrez un terminal (ou connectez-vous via SSH) et entrez les commandes suivantes :

sudo apt update

Cette première commande met à jour la liste des paquets disponibles. Ensuite, pour installer le broker et les clients (outils de test) :

sudo apt install -y mosquitto mosquitto-clients

Une fois l’installation terminée, le service Mosquitto démarre automatiquement. Vous pouvez vérifier son statut avec la commande sudo systemctl status mosquitto. Si tout s’est bien passé, le service devrait être indiqué comme « actif (en cours d’exécution) ».

Le serveur est maintenant installé et fonctionnel, mais sa configuration par défaut reste basique. Il est donc essentiel de l’ajuster pour répondre à nos besoins spécifiques et commencer à explorer ses fonctionnalités.

Configurer le serveur Mosquitto

Ajuster la configuration initiale

Le fichier de configuration principal de Mosquitto se trouve dans /etc/mosquitto/mosquitto.conf. Par défaut, ce fichier est presque vide. Pour une première utilisation en réseau local, il est utile d’autoriser les connexions anonymes. Pour ce faire, éditez le fichier :

sudo nano /etc/mosquitto/mosquitto.conf

Puis ajoutez les lignes suivantes :

listener 1883 allow_anonymous true

La première ligne indique explicitement au broker d’écouter sur le port standard MQTT 1883. La seconde autorise les clients à se connecter sans fournir de nom d’utilisateur ni de mot de passe. Après avoir sauvegardé le fichier (Ctrl+O, Entrée, puis Ctrl+X), il est nécessaire de redémarrer le service pour que les changements prennent effet : sudo systemctl restart mosquitto.

Effectuer un premier test de communication

Avec les clients Mosquitto installés précédemment, il est facile de tester le bon fonctionnement du serveur. Vous aurez besoin de deux terminaux ou de deux sessions SSH connectées à votre Raspberry Pi. Dans le premier, nous allons abonner un client à un sujet de test :

mosquitto_sub -h localhost -t « test/topic »

Ce terminal va maintenant attendre de recevoir des messages sur le sujet « test/topic ». Dans le second terminal, nous allons publier un message sur ce même sujet :

mosquitto_pub -h localhost -t « test/topic » -m « Bonjour MQTT ! »

Instantanément, le message « Bonjour MQTT ! » devrait apparaître dans le premier terminal. Ce test simple confirme que le broker reçoit et relaie correctement les messages.

Avec un serveur configuré et testé, une préoccupation majeure émerge : la sécurité. Laisser un serveur ouvert à tous sur un réseau est une faille qu’il convient de combler sans tarder.

Sécuriser et tester votre installation MQTT

Mettre en place une authentification

Laisser un accès anonyme est pratique pour les tests, mais représente un risque de sécurité important en production. La première étape consiste à désactiver cet accès. Retournez dans le fichier /etc/mosquitto/mosquitto.conf et modifiez la ligne `allow_anonymous true` en :

allow_anonymous false

Ensuite, il faut indiquer à Mosquitto où trouver le fichier contenant les informations des utilisateurs autorisés. Ajoutez cette ligne :

password_file /etc/mosquitto/passwd

Créer des utilisateurs et des mots de passe

Nous devons maintenant créer ce fichier de mots de passe. L’utilitaire mosquitto_passwd est là pour ça. Pour créer le fichier et y ajouter un premier utilisateur (par exemple, « user1 »), exécutez la commande suivante. Elle vous demandera de saisir un mot de passe pour cet utilisateur.

sudo mosquitto_passwd -c /etc/mosquitto/passwd user1

Pour ajouter d’autres utilisateurs par la suite, il suffit d’omettre l’option -c (qui signifie créer). N’oubliez pas de redémarrer le service Mosquitto pour appliquer toutes ces modifications.

Tester la connexion sécurisée

Reprenons nos deux terminaux pour un nouveau test. Cette fois, la tentative de s’abonner sans identifiants échouera. Il faut maintenant les spécifier avec les options -u (utilisateur) et -P (mot de passe).

Dans le premier terminal (abonné) :

mosquitto_sub -h localhost -t « test/topic » -u « user1 » -P « votre_mot_de_passe »

Dans le second terminal (éditeur) :

mosquitto_pub -h localhost -t « test/topic » -m « Message sécurisé » -u « user1 » -P « votre_mot_de_passe »

Le message doit de nouveau être transmis avec succès, confirmant que votre système d’authentification est fonctionnel.

Notre serveur MQTT est désormais robuste et sécurisé. Il est prêt à remplir sa fonction première : servir de plaque tournante pour les communications entre divers appareils connectés.

Intégration de périphériques avec MQTT

Intégration de périphériques avec mqtt

Connecter des capteurs et des actionneurs

La véritable puissance d’un serveur MQTT se révèle lorsqu’on y connecte des appareils. Des microcontrôleurs comme l’ESP8266 ou l’ESP32 sont parfaits pour cela. Programmables via l’environnement Arduino ou MicroPython, ils peuvent lire des données de capteurs (température, humidité, luminosité) et les publier sur le broker MQTT. Inversement, ils peuvent s’abonner à des sujets pour recevoir des commandes, par exemple pour allumer une LED, actionner un relais ou contrôler une prise connectée.

  • ELEGOO 2PCS ESP32 Carte de développement Type-C, 2,4 GHz WiFi + Bluetooth Dual Core Microcontrôleur pour Arduino, Support MicroPython, NodeMCU, AP/STA/AP+STA, Puce CP2102
  • ELEGOO 3PCS Carte de Développement ESP32 Type-C, 2,4 GHz WiFi + Bluetooth Dual Core Carte de Contrôle pour Arduino, Support MicroPython, NodeMCU, AP/STA/AP+STA, Puce CP2102
  • Lot de 4 Carte Développement ESP32-C3, Module ESP32-C3 Mini, WiFi 2,4GHz et Bluetooth 5.0 Le, Processeur RISC-V 32 Bits 160MHz, pour Arduino MicroPython, IoT Maison Intelligente Réseau de Capteurs

Centraliser et visualiser les données

Une fois les données collectées sur le broker, l’étape suivante est de les exploiter. Des plateformes de domotique comme Home Assistant ou Jeedom peuvent se connecter à votre serveur Mosquitto pour intégrer tous vos appareils dans une interface unifiée. Pour une visualisation plus poussée, des outils comme Node-RED permettent de créer des flux de données logiques, tandis que des logiciels comme Grafana, couplés à une base de données (InfluxDB par exemple), peuvent générer des graphiques et des tableaux de bord sophistiqués à partir des informations transitant par MQTT.

La mise en place d’un serveur MQTT sur un Raspberry Pi transforme ce simple nano-ordinateur en un puissant hub pour l’internet des objets. En suivant les étapes d’installation, de configuration et de sécurisation de Mosquitto, on obtient une base solide et fiable pour tout projet de domotique. Cette solution centralisée permet de faire communiquer de manière fluide et efficace une grande variété de capteurs et d’actionneurs, ouvrant la voie à une maison véritablement intelligente et réactive, entièrement maîtrisée localement.