<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://chez.jcdenis.fr/feed/rss2/xslt" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jean-Christian Paul Denis - Mot-clé - mosquitto</title>
    <link>https://chez.jcdenis.fr/</link>
    <atom:link href="https://chez.jcdenis.fr/feed/tag/mosquitto/rss2" rel="self" type="application/rss+xml" />
    <description>Moment de vie d'un homme invisible.</description>
    <language>fr</language>
    <pubDate>Sun, 09 Nov 2025 09:31:14 +0100</pubDate>
    <copyright>Tous droits réservés © Jean-Christian Denis</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Dotclear</generator>
          <item>
        <title>Ma domotique IV : MQTT</title>
        <link>https://chez.jcdenis.fr/post/2024/04/03/Ma-domotique-IV-%3A-MQTT</link>
        <guid isPermaLink="false">urn:md5:5fa13e9fe14197f23baac0c3b0d28c60</guid>
        <pubDate>Wed, 03 Apr 2024 21:24:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>NRDomV2</category>
                          <category>docker</category>
                  <category>mosquitto</category>
                  <category>mqtt</category>
                  <category>portainer</category>
                  <category>proxmox</category>
                  <category>VM</category>
                <description>&lt;p&gt;Le protocole MQTT est un des piliers de ma domotique, toutes les informations relatives la gestion de ma maison passent par lui.&lt;/p&gt; &lt;p&gt;MQTT signifie Message Queuing Telemetry Transport, c'est un protocole de messagerie publish-subscribe basé sur le protocole TCP/IP. Ses avantages sont sa rapidité, sa légèreté, la possibilité de gérer de multiple sessions, ou encore de retenir ou non les messages. Bref il est parfait pour la domotique.&lt;br&gt;
Chacun de mes protocoles domotique va publier ses messages vers un topic dédié du serveur MQTT central :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zigbee avec &lt;strong&gt;zigbee2mqtt&lt;/strong&gt; vers le topic /zigbee&lt;/li&gt;
&lt;li&gt;Zwave avec &lt;strong&gt;zwave-js-ui&lt;/strong&gt; vers le topic /zwave&lt;/li&gt;
&lt;li&gt;RfxCOM avec &lt;strong&gt;rfxcom2mqtt&lt;/strong&gt; vers le topic /rfxcom2mqtt&lt;/li&gt;
&lt;li&gt;TiC avec &lt;strong&gt;teleinfo2mqtt&lt;/strong&gt; vers le topic /telefinfo&lt;/li&gt;
&lt;li&gt;Bluetooth avec &lt;strong&gt;theengsgateway&lt;/strong&gt; vers le topic /ble&lt;/li&gt;
&lt;li&gt;Monitoring avec des scripts perso vers le topic /monitoring&lt;/li&gt;
&lt;li&gt;Noyau domotique Node-RED vers le topic /iotnode&lt;/li&gt;
&lt;li&gt;Assistant vocal local avec Rhasspy vers les topic /hermes et /rhasspy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et oui MQTT transporte même les échantillons audio !&lt;br&gt;
Chacun de ces protocoles domotiques est géré par un conteneur docker sur un VM dédié, cela permet de bien cloisonner les choses et de mettre en place, sauvegarder ou modifier uniquement la partie souhaiter sans casser le reste. Avec le temps je me suis rendu compte que de multiplier les VM ne surchargeait pas plus que ça le serveur Proxmox, couplé à des templates de VM, la mise en œuvre est ultra rapide.&lt;br&gt;
Un logiciel tel MQTT Explorer va permettre de facilement voir tout ce qu'il s'y passe.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/mqttexplorer_topic.png&quot; title=&quot;Ouvrir le média&quot;&gt;&lt;figure class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.mqttexplorer_topic_m.jpg&quot; alt=&quot;MQTT Explorer - topic&quot;&gt;&lt;figcaption&gt;Exemple de topic dans le logiciel MQTT Explorer, mars 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Le noyau domotique (que j'ai nommé iotnode) va écouter tous ces topics et en récupérer les informations utiles, les traiter et les republier en version propre sur le topic MQTT /ionode, j'ai ainsi une vue simple de l'état de ma domotique. Le noyau va également se charger de publier les ordres vers chacun de ces protocoles.&lt;br&gt;
Par exemple, le noyau va publier la valeur &lt;code&gt;true&lt;/code&gt; vers le topic  &lt;code&gt;/zwave/10/37/0/targetValue/set&lt;/code&gt; pour allumer une lampe. Et il va écouter le topic &lt;code&gt;/zwave/10/37/0/currentValue&lt;/code&gt; pour savoir si la lampe est allumée. Il va également reporter cette information dans le topic &lt;code&gt;/iotnode/douche/lumiere/plafonnier&lt;/code&gt; ce qui est plus lisible pour le commun des mortels :)&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/mqttexplorer_message.png&quot; title=&quot;Ouvrir le média&quot;&gt;&lt;figure class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.mqttexplorer_message_m.jpg&quot; alt=&quot;MQTT Explorer - message&quot;&gt;&lt;figcaption&gt;Exemple de valeur dans le logiciel MQTT Explorer, mars 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;Installation du serveur MQTT&lt;/h3&gt;

&lt;p&gt;Dans &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/02/Ma-domotique-III-%3A-Virtualisation&quot;&gt;le précédent billet sur la virtualisation&lt;/a&gt;, on a vu comment j'utilise mes machines virtuelles ainsi que l'installation du gestionnaire de Docker nommé Portainer. On va ici cloner un template de VM et utiliser Portainer pour installer notre Docker contenant le serveur MQTT.&lt;br&gt;
&lt;br&gt;
On se rend dans le shell de notre serveur Proxmox et on créer notre machine virtuelle à partir du template docker et on lui adresse une IP fixe :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qm clone 910 121 --name mqtt
qm set 121 --ipconfig0 ip=10.1.4.121/23,gw=10.1.4.1&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
On peut démarrer notre VM.&lt;br&gt;
Maintenant on se rend dans l'interface web de Portainer (cf billet précédent). Dans le menu de gauche &lt;strong&gt;Environements&lt;/strong&gt; ou clique en haut à droite sur &lt;strong&gt;Add environement&lt;/strong&gt;,.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/docker_mqtt_install_01.png&quot; title=&quot;Ouvrir le média&quot;&gt;&lt;figure class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.docker_mqtt_install_01_m.png&quot; alt=&quot;Docker MQTT Install 01&quot;&gt;&lt;figcaption&gt;Portainer, menu ajout d&amp;#039;environnement, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On choisie le type &lt;strong&gt;Docker Standalone&lt;/strong&gt; puis &lt;strong&gt;Start wizard&lt;/strong&gt;.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/docker_mqtt_install_02.png&quot; title=&quot;Ouvrir le média&quot;&gt;&lt;figure class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.docker_mqtt_install_02_m.png&quot; alt=&quot;Docker MQTT Install 02&quot;&gt;&lt;figcaption&gt;Portainer, sélection nouvel environnement, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Et on indique un nom et l'adresse de liaison qui sera l'IP de la VM sur le port 9001 et on clique sur &lt;strong&gt;Connect&lt;/strong&gt;. Rien besoin de faire sur la VM puisque notre template est déjà prêt.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/docker_mqtt_install_03.png&quot; title=&quot;Ouvrir le média&quot;&gt;&lt;figure class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.docker_mqtt_install_03_m.png&quot; alt=&quot;Docker MQTT Install 03&quot;&gt;&lt;figcaption&gt;Portainer, configuration agent, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Notre VM Docker est désormais liée à Portainer d'où on gèrera le conteneur.&lt;br&gt;
Maintenant on va créer notre conteneur MQTT toujours depuis Portainer. Pour cela on se rend dans le menu &lt;strong&gt;Stacks&lt;/strong&gt; de notre environnement fraichement créé, et on clique sur &lt;strong&gt;Add stack&lt;/strong&gt;, on lui donne un nom et on va remplir la fenêtre d'édition avec la configuration nécessaire à notre Docker MQTT :&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/docker_mqtt_install_04.png&quot; title=&quot;Ouvrir le média&quot;&gt;&lt;figure class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.docker_mqtt_install_04_m.png&quot; alt=&quot;Docker MQTT Install 04&quot;&gt;&lt;figcaption&gt;Portainer, ajout de stack, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Le configuration sera celle ci-dessous. Puis on clique sur &lt;strong&gt;Update the stack&lt;/strong&gt;. Notre serveur est en fonction.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-docker&quot;&gt;version: &amp;quot;3.8&amp;quot;
services:
  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: mqtt
    restart: always
    volumes:
      - config:/mosquitto/config
      - data:/mosquitto/data
      - log:/mosquitto/log
    ports:
      - 1883:1883
      - 8883:9001
volumes:
  config:
  data:
  log:&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Quelques explications, on lui donne l'image docker du serveur mqtt qu'on désire &lt;code&gt;eclipse-mosquitto:latest&lt;/code&gt;, le conteneur se nommera &lt;code&gt;mqtt&lt;/code&gt;, il redémarrera dans tous les cas, et il écoutera sur les ports &lt;code&gt;1883&lt;/code&gt; et &lt;code&gt;8883&lt;/code&gt; (le port 9001 étant déjà utilisé par l'agent Portainer), ensuite on lui indique les différents volumes à utiliser, ici &lt;code&gt;config&lt;/code&gt;, &lt;code&gt;data&lt;/code&gt; et &lt;code&gt;log&lt;/code&gt;. Ces volumes seront accessible dans la VM dans &lt;strong&gt;/var/lib/docker/volumes/mqtt_config/_data/xxx&lt;/strong&gt;. A noter qu'on va faire en sorte à chaque création de configuration que ce chemin d'accès soit identique pour toutes les VMs cela évite de chercher on se trouve les fichiers de config d'une installation à une autre. ET cela peut-être utile pour des sauvegardes, mais personnellement je sauvegarde la VM entière.&lt;br&gt;
On va aller modifier le fichier de configuration du serveur MQTT pour coller au besoin de notre domotique. Pour cela on se rend dans la console Proxmox de notre VM (ou par ssh) et on édite le fichier de configuration :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo nano /var/lib/docker/volumes/mqtt_config/_data/mosquitto.conf&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Il doit contenir cela :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;listener 1883
listener 9001
protocol websockets
persistence true
persistence_location /mosquitto/data
allow_anonymous false
password_file mosquitto/config/mqtt_passwd&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Pour faire simple, on écoute sur les port 1883 et 9001, ici on est dans le conteneur donc le port d'écoute est bien le 9001 à l'intèrieur de conteneur alors qu'à l'extèrieur on écoute le port 8883. On autorise les websockets. on interdit les connexions anonymes et on utilise un fichier pour les mots de passe de connexions. Ce fichier de mot de passe est encrypté par le serveur MQTT il faut donc passer par lui pour le créer, pour cela toujours depuis notre console VM, on lance une session docker :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker exec -it mqtt sh&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Pour ajouter un login/mot de passe, on exécute la commande :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mosquitto_passwd mosquitto/config/mqtt_passwd un_login&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Il va nous demander un mot de passe pour ce login. Ensuite on sort de la session en tapant &lt;code&gt;exit&lt;/code&gt;.&lt;br&gt;
Pour prendre en compte ces changement on relance le conteneur MQTT depuis Portainer depuis le menu de notre environement &lt;strong&gt;Containers -&amp;gt; mqtt -&amp;gt; Restar&lt;/strong&gt;t.&lt;br&gt;
Voila notre serveur MQTT domotique prêt. Et vous incollable sur Portainer.&lt;br&gt;
Ne pas hésiter à se promener dans les menus de Portainer et voir tout ce qu'il est possible de faire comme mettre à jour le stack, une image ou modifier un conteneur.&lt;br&gt;
&lt;br&gt;
Dans le prochaine billet on va voir l'installation et le début de programmation du &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/06/Ma-domotique-V-%3A-Node-RED&quot;&gt;cœur de ma domotique sous Node-RED&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
      </channel>
</rss>
