Abstract violet and amber illustration representing Mosquitto, an open-source MQTT message broker distributing messages between connected clients

Mosquitto

Mosquitto

Mosquitto est l’implémentation de référence d’un broker MQTT : le logiciel qui se place au centre d’un réseau publish/subscribe et garantit qu’un message publié par un appareil arrive bien à chaque service qui y est abonné. Si vous faites tourner Zigbee2MQTT, si vous utilisez l’intégration MQTT de Home Assistant, ou si vous construisez quelque chose avec ESPHome qui parle MQTT plutôt que l’API native de Home Assistant, il y a de fortes chances que le broker mosquitto soit celui qui route réellement vos messages en coulisses.

Il n’automatise rien par lui-même. Pas de tableau de bord, pas de moteur de règles, aucune notion d’ »appareil ». Il se contente de déplacer de petites charges utiles, texte ou binaire, entre des topics comme home/livingroom/temperature ou zigbee2mqtt/frontdoor/state, aussi vite que possible, vers autant d’abonnés qu’il y en a à l’écoute. Ce rôle étroit explique pourquoi on le retrouve dans presque toutes les piles domotiques auto-hébergées. C’est le système nerveux, pas le cerveau.

Pourquoi un broker plutôt que des connexions directes

Sans broker, chaque appareil qui veut parler à chaque service a besoin de sa propre connexion point à point et de son propre protocole. MQTT renverse ce modèle : les appareils et les services ne parlent qu’au broker, en publiant sur les topics qui les concernent et en s’abonnant à ceux qu’ils veulent suivre. Ajoutez un nouveau consommateur, un service de journalisation, une deuxième plateforme d’automatisation, un tableau de bord, et il s’abonne simplement aux topics existants. Rien d’autre dans la pile n’a besoin de savoir qu’il existe. Ce découplage est toute la valeur du système, et c’est pour ça que les brokers MQTT restent pertinents même dans des installations construites autour d’un seul hub comme Home Assistant.

La licence de Mosquitto : deux options, pas une

Mosquitto est un projet de la fondation Eclipse, et son fichier LICENSE.txt est explicite sur les termes : il est double-licencié sous Eclipse Public License 2.0 (EPL-2.0) ou Eclipse Distribution License 1.0 (EDL-1.0), confirmé directement dans le dépôt GitHub eclipse-mosquitto/mosquitto. C’est plus permissif que ça n’en a l’air au premier abord. D’après l’identifiant SPDX du projet lui-même, l’option EDL-1.0 est fonctionnellement équivalente à la licence BSD-3-Clause. En pratique, vous pouvez choisir la licence qui convient le mieux à votre usage ou à votre redistribution : EPL-2.0 pour la compatibilité avec d’autres codes sous licence Eclipse, ou l’EDL-1.0, quasi-BSD, pour l’option la plus permissive avec le moins de conditions.

Mosquitto partage cet héritage Eclipse avec openHAB, lui aussi sous licence EPL-2.0. C’est une concentration assez inhabituelle d’une seule fondation dans l’espace domotique auto-hébergé, où la plupart des outils partent plutôt sur MIT, Apache-2.0 ou GPL.

Installer le broker Mosquitto avec Docker

L’image officielle eclipse-mosquitto est la manière la plus simple de le faire tourner. Une configuration minimale monte un répertoire de configuration, un répertoire de données pour la persistance des messages, et un répertoire de logs, puis expose le port 1883 pour le MQTT standard et le port 9001 pour le MQTT sur WebSockets :

docker run -d --name mosquitto \
  -p 1883:1883 -p 9001:9001 \
  -v /path/to/mosquitto/config:/mosquitto/config \
  -v /path/to/mosquitto/data:/mosquitto/data \
  -v /path/to/mosquitto/log:/mosquitto/log \
  eclipse-mosquitto

Sans aucun fichier de configuration, Mosquitto démarre par défaut en accès anonyme, sans authentification. C’est suffisant pour un test local de cinq minutes, mais ce n’est pas quelque chose à laisser tourner sur un réseau où plus d’un appareil est connecté.

Sécuriser le broker

Un mosquitto.conf destiné à la production doit, au minimum, désactiver l’accès anonyme et exiger un nom d’utilisateur et un mot de passe, générés avec l’utilitaire fourni mosquitto_passwd. Au-delà de ça, Mosquitto prend en charge des listes de contrôle d’accès (ACL) pour restreindre quels clients peuvent publier ou s’abonner à quels topics, ainsi que le TLS pour chiffrer le trafic si votre broker est accessible depuis l’extérieur de votre réseau local. Rien de tout ça n’est activé par défaut. C’est un choix délibéré, Mosquitto ne devine pas vos besoins de sécurité à votre place, mais c’est aussi la mauvaise configuration la plus répandue dans les installations MQTT auto-hébergées.

Mosquitto et Home Assistant

L’intégration MQTT de Home Assistant se connecte à n’importe quel broker conforme aux standards, Mosquitto y compris, et prend en charge la découverte MQTT : les appareils et services qui publient un message de découverte au bon format apparaissent automatiquement dans Home Assistant, sans définition manuelle d’entité en YAML. C’est ainsi que les appareils Zigbee2MQTT apparaissent dans Home Assistant avec quasiment aucune configuration supplémentaire, une fois que les deux conteneurs pointent vers le même broker : Zigbee2MQTT publie les messages de découverte, Mosquitto les route, Home Assistant les écoute. Les appareils ESPHome utilisent par défaut l’API native de Home Assistant, mais peuvent être basculés pour publier via MQTT quand vous voulez les rendre visibles à une pile construite autour d’un broker plutôt que liés directement à un seul hub.

Les alternatives au broker Mosquitto

Mosquitto reste le choix auto-hébergé le plus courant parce qu’il est léger et sert de broker de référence depuis plus d’une décennie, mais ce n’est pas la seule option. EMQX, HiveMQ Community Edition et VerneMQ sont tous des brokers open source pensés pour un débit plus élevé et le clustering. Largement surdimensionné pour un homelab, mais utile à connaître si vous faites tourner du MQTT à une échelle qui dépasse une seule maison un jour.

Pour la vue d’ensemble de la place de Mosquitto à côté de Zigbee2MQTT, Home Assistant et le reste d’une pile domotique auto-hébergée, notre guide de la pile domotique auto-hébergée détaille le reste.