<?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é - vm</title>
    <link>https://chez.jcdenis.fr/</link>
    <atom:link href="https://chez.jcdenis.fr/feed/tag/vm/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 X : Teleinfo</title>
        <link>https://chez.jcdenis.fr/post/2024/04/26/Ma-domotique-X-%3A-Teleinfo</link>
        <guid isPermaLink="false">urn:md5:a2a294039c591693a0103274e8b5c66f</guid>
        <pubDate>Fri, 26 Apr 2024 10:44:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>NRDomV2</category>
                          <category>docker</category>
                  <category>proxmox</category>
                  <category>teleinfo</category>
                  <category>VM</category>
                <description>&lt;p&gt;Ah la téléinfo, la première donnée que j'ai voulu suivre dans ma maison !&lt;/p&gt; &lt;p&gt;La téléinfo est la remonté d'informations du compteur EDF, elle transmet des données tels que la consommation instantanée, le tarif en cours ou encore le total des heures pleines. La consommation électrique d'un foyer est une des pierres angulaires de la domotique et la téléinfo en est la base. Couplé à des outils comme Grafana, elle permet un suivi et une analyse dans le temps de la consommation global du foyer, c'est un outil très important dans la recherche d'efficacité énergétique.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/grafana_linky_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/.grafana_linky_01_m.png&quot; alt=&quot;Grafana Conso 01&quot;&gt;&lt;figcaption&gt;Exemple de graphique du Linky sous Grafana, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Aillant déjà un câble telefino arrivant du compteur vers le tableau électrique qui servait au contact jour/nuit, j'ai pris comme coordinateur &lt;a href=&quot;https://www.cartelectronic.fr/teleinfo-compteur-enedis/17-193-teleinfo-1-compteur-usb-rail-din-3760313520028.html#/80-longueur-18m/82-connecteur-verticale&quot; hreflang=&quot;en&quot; title=&quot;module TIC DIN USB&quot;&gt;un module de tableau électrique avec sortie USB&lt;/a&gt; mais il existe plein de modèles différents. (Le plus simple aujourd'hui serait &lt;a href=&quot;https://www.domadoo.fr/fr/box-domotique/5914-lixee-module-tic-vers-zigbee-30-pour-compteur-linky-lixee-zlinky-3770014375148.html?domid=39&quot; hreflang=&quot;fr&quot; title=&quot;module TIC Zigbee Lixee&quot;&gt;un module zigbee&lt;/a&gt; directement sur le compteur.) Et j'utilise la passerelle &lt;strong&gt;telefino2mqtt&lt;/strong&gt; de fmartinou.&lt;br&gt;
Certaines fonctions de ma domotique exploitent directement ses valeurs comme le changement de tarif qui coupe ou met en marche certains appareils gros consommateur d'énergie (chauffe eau) ou encore pour le délestage qui coupe le chauffage si on consomme trop.&lt;br&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Reportez vous aux billet précédents (&lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/02/Ma-domotique-III-%3A-Virtualisation&quot;&gt;ici&lt;/a&gt; et &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/03/Ma-domotique-IV-%3A-MQTT&quot;&gt;là&lt;/a&gt; ) pour en savoir plus sur ma configuration Proxmox et Docker.&lt;/em&gt;&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 116 --name telefino
qm set 116 --ipconfig0 ip=10.1.4.116/23,gw=10.1.4.1&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Dans Proxmox, on va aller dans la configuration &lt;strong&gt;Hardware&lt;/strong&gt; de la VM et lui ajouter le module USB teleinfo, il est bien reconnu par proxmox, pas de soucis de ce coté:&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zwave_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/.zwave_install_01_m.png&quot; alt=&quot;Protocole Zwave install 01&quot;&gt;&lt;figcaption&gt;Installation Zwave bouton Add, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/teleinfo_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/.teleinfo_install_02_m.png&quot; alt=&quot;Protocole teleinfo install 02&quot;&gt;&lt;figcaption&gt;Ajout du module USB teleinfo, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&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, on lie notre VM, et on ajoute Stack qui ressemble à ça :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-docker&quot;&gt;version: &amp;#039;3&amp;#039;

services:
  teleinfo2mqtt:
    image: fmartinou/teleinfo2mqtt
    container_name: teleinfo2mqtt
    restart: always
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
    environment:
      - EMIT_INTERVAL=0
      - TIC_MODE=history
      - TZ=Europe/Paris
      - MQTT_URL=mqtt://10.1.44.111:1883
      - MQTT_USER=jeanjean
      - MQTT_PASSWORD=jeanjean&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Le stack configure tout ce qu'il faut pour fonctionner, comme le serveur MQTT. Les trames devraient directement atterrir dans MQTT.&lt;br&gt;
Exemple de données décodées :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &amp;quot;ADCO&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;062061429523&amp;quot;,
    &amp;quot;value&amp;quot;: 62061429523
  },
  &amp;quot;OPTARIF&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;HC..&amp;quot;,
    &amp;quot;value&amp;quot;: &amp;quot;HC&amp;quot;
  },
  &amp;quot;ISOUSC&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;45&amp;quot;,
    &amp;quot;value&amp;quot;: 45
  },
  &amp;quot;HCHC&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;019581292&amp;quot;,
    &amp;quot;value&amp;quot;: 19581292
  },
  &amp;quot;HCHP&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;029104904&amp;quot;,
    &amp;quot;value&amp;quot;: 29104904
  },
  &amp;quot;PTEC&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;HP..&amp;quot;,
    &amp;quot;value&amp;quot;: &amp;quot;HP&amp;quot;
  },
  &amp;quot;IINST&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;005&amp;quot;,
    &amp;quot;value&amp;quot;: 5
  },
  &amp;quot;IMAX&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;090&amp;quot;,
    &amp;quot;value&amp;quot;: 90
  },
  &amp;quot;PAPP&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;01220&amp;quot;,
    &amp;quot;value&amp;quot;: 1220
  },
  &amp;quot;HHPHC&amp;quot;: {
    &amp;quot;raw&amp;quot;: &amp;quot;A&amp;quot;,
    &amp;quot;value&amp;quot;: &amp;quot;A&amp;quot;
  }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Il y a plus qu'à exploiter ces valeurs !
&lt;br&gt;
Voila pour le protocole teleinfo.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Ma domotique IX : Rfxcom</title>
        <link>https://chez.jcdenis.fr/post/2024/04/26/Ma-domotique-IX-%3A-Rfxcom</link>
        <guid isPermaLink="false">urn:md5:38cb7ede8760b966d212ccf2ed930022</guid>
        <pubDate>Fri, 26 Apr 2024 09:40:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>NRDomV2</category>
                          <category>docker</category>
                  <category>proxmox</category>
                  <category>rfxcom</category>
                  <category>VM</category>
                <description>&lt;p&gt;Le Rfxcom est un des plus anciens protocoles domotique que je connaisse.&lt;/p&gt; &lt;p&gt;Le Rfxcom est généralement utilisé pour du matériel simple, le plus souvent sur pile. Par exemple, chez moi je l'utilise pour les capteurs d'humidité et de température avec une durée de vie des piles de plus de 3 ans ! Mais il peut être utilisé sur des interrupteurs, des contacts ou encore des équipements d'alarme avec un code tournant. L'inconvénient est que vous recevez les trames de tous les appareils à proximité, même ceux des voisins (et donc l'inverse est vrai), sympa pour savoir la température chez lui.&lt;br&gt;
J'utilise la clé USB RFXtrx433XL comme coordinateur. La version XL embarque plus de sous-protocoles matériels. (marques) Il est possible de la mettre à jour et d'activer ou désactiver des sous protocoles mais je ne l'ai jamais fait, aillant tout ce qu'il me faut de base. Le bridge &lt;strong&gt;rfxcom2mqtt&lt;/strong&gt; se charge de décoder les trames en quelque chose de lisible à traves la librairie &lt;strong&gt;MQTT.js&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Reportez vous aux billet précédents (&lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/02/Ma-domotique-III-%3A-Virtualisation&quot;&gt;ici&lt;/a&gt; et &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/03/Ma-domotique-IV-%3A-MQTT&quot;&gt;là&lt;/a&gt; ) pour en savoir plus sur ma configuration Proxmox et Docker.&lt;/em&gt;&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 120 --name rfxcom
qm set 120 --ipconfig0 ip=10.1.4.120/23,gw=10.1.4.1&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Dans Proxmox, on va aller dans la configuration &lt;strong&gt;Hardware&lt;/strong&gt; de la VM et lui ajouter la clé USB Rxfcom, la clé est bien reconnu par proxmox, pas de soucis de ce coté:&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zwave_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/.zwave_install_01_m.png&quot; alt=&quot;Protocole Zwave install 01&quot;&gt;&lt;figcaption&gt;Installation Zwave bouton Add, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/rfxcom_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/.rfxcom_install_02_m.png&quot; alt=&quot;Protocole Rfxcom install 02&quot;&gt;&lt;figcaption&gt;Ajout de la clé USB RFXtrx433XL, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&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, on lie notre VM, et on ajoute Stack qui ressemble à ça :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-docker&quot;&gt;version: &amp;#039;3.8&amp;#039;
services:
  rfxcom2mqtt:
    container_name: rfxcom2mqtt
    image: rfxcom2mqtt/rfxcom2mqtt
    restart: unless-stopped
    volumes:
      - data:/app/data
    environment:
      - TZ=Europe/Paris
      - MQTT_SERVER=mqtt://10.1.4.111:1883
      - MQTT_USER=bobby
      - MQTT_PASSWORD=youpin
      - RFXCOM_USB_DEVICE=/dev/ttyUSB0
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
volumes:
  data:&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Le stack configure tout ce qu'il faut pour fonctionner, comme le serveur MQTT. Les trames devraient directement atterrir dans MQTT.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/rfxcom_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/.rfxcom_install_03_m.png&quot; alt=&quot;Protocole Rfxcom install 03&quot;&gt;&lt;figcaption&gt;Trames Rfxcom dans MQTT Explorer, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Maintenant il va falloir reconnaitre l'identifiant des appareils pour les utiliser dans Nodered…&lt;br&gt;
&lt;br&gt;
Voila pour le protocole Rfxcom, dans le prochain billet on ajoutera &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/26/Ma-domotique-X-%3A-Teleinfo&quot;&gt;la VM teleinfo&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Ma domotique VIII : Zigbee</title>
        <link>https://chez.jcdenis.fr/post/2024/04/25/Ma-domotique-VIII-%3A-Zigbee</link>
        <guid isPermaLink="false">urn:md5:d115ad77afcf1bb5ab2b0891d65163f2</guid>
        <pubDate>Thu, 25 Apr 2024 10:02:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>NRDomV2</category>
                          <category>docker</category>
                  <category>proxmox</category>
                  <category>vm</category>
                  <category>zigbee</category>
                <description>&lt;p&gt;Le protocole Zigbee a bien évolué et est en train de devenir prépondérant dans ma domotique.&lt;/p&gt; &lt;p&gt;Le Zigbee est un protocole très répandu ces temps dans le monde de la domotique pour tous, il est sans fil, faible consommation, faible bande passante et utilise le maillage réseau pour étendre sa portée. &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/07/Ma-domotique-VII-%3A-Zwave&quot;&gt;Par rapport au Zwave&lt;/a&gt;, il est moins onéreux, plus simple à configurer et plus simple à appairer. En contrepartie les appareils ne sont pas certifiés, il y a de très bonnes marques comme Schneider Electric et de moins bonnes &lt;em&gt;chinoiseries&lt;/em&gt;. Je rappelle qu'on parle de notre maison et qu'en matière d'électricité il ne faut pas faire n'importe quoi, comme piloter un chauffe eau avec un appareil sous dimensionner ou pas aux normes. Pour la petite histoire, j'ai eu un module Zwave qui a explosé, il était dans une poche d'encastrement murale aux normes, le module étant lui aussi aux normes, et bien tout s'est bien passé il n'a pas pris feu et la maison est toujours entière. Ne négligez pas la sécurité de vos appareils, jamais.&lt;br&gt;
La passerelle, communément appelé coordinateur, entre les appareils Zigbee et ma domotique est une clé USB de 3ème génération de la marque SONOFF et j'utilisais précédemment une clé Conbee II. Bien que tout fonctionnait avec la seconde génération, la 3ème me parait plus stable et moins consommatrice. J'ai mis en place des répéteurs qui ont bien participé à la stabilité de l'ensemble, je n'ai pas eu de perte d'éléments depuis leurs mise en place. Coté passerelle informatique, j'utilise un conteneur Docker avec le logiciel Zigbee2mqtt, il est pour l'instant suivi et régulièrement mise à jour car beaucoup de logiciel de domotique passe par lui. Attention, tous les matériels ne sont pas reconnus dans Zigbee2mqtt, une liste plus ou moins à jour est &lt;a href=&quot;https://www.zigbee2mqtt.io/supported-devices/&quot; hreflang=&quot;en&quot; title=&quot;matériels compatible zigbee2mqtt&quot;&gt;disponible sur le site&lt;/a&gt;.&lt;br&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Reportez vous aux billet précédents (&lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/02/Ma-domotique-III-%3A-Virtualisation&quot;&gt;ici&lt;/a&gt; et &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/03/Ma-domotique-IV-%3A-MQTT&quot;&gt;là&lt;/a&gt; ) pour en savoir plus sur ma configuration Proxmox et Docker.&lt;/em&gt;&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 114 --name zigbee
qm set 114 --ipconfig0 ip=10.1.4.114/23,gw=10.1.4.1&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Dans Proxmox, on va aller dans la configuration &lt;strong&gt;Hardware&lt;/strong&gt; de la VM et lui ajouter la clé USB Zigbee, la clé est bien reconnu par proxmox, pas de soucis de ce coté:&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zwave_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/.zwave_install_01_m.png&quot; alt=&quot;Protocole Zwave install 01&quot;&gt;&lt;figcaption&gt;Installation Zwave bouton Add, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zigbee_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/.zigbee_install_02_m.png&quot; alt=&quot;Protocole Zigbee install 02&quot;&gt;&lt;figcaption&gt;Ajout de clé Zigbee à Proxmox, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&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, on lie notre VM, et on ajoute Stack qui ressemble à ça :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-docker&quot;&gt;version: &amp;#039;3.8&amp;#039;
services:
  zigbee:
    container_name: zigbee
    image: koenkk/zigbee2mqtt:latest
    restart: unless-stopped
    volumes:
      - data:/app/data
      - /run/udev:/run/udev:ro
    ports:
      - 80:8080
    environment:
      - TZ=Europe/Paris
    devices:
      - /dev/ttyUSB0
volumes:
  data:&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Maintenant on se rend dans l'interface web du serveur Zigbee, dans l'exemple ce sera http://10.1.4.114. Dans l'onglet &lt;strong&gt;Paramètres&lt;/strong&gt;, on va ajouter la clé USB :&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zigbee_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/.zigbee_install_04_m.png&quot; alt=&quot;Protocole Zigbee install 04&quot;&gt;&lt;figcaption&gt;Configuration de la clé USB, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Et on va configurer le serveur MQTT :&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zigbee_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/.zigbee_install_03_m.png&quot; alt=&quot;Protocole Zigbee install 03&quot;&gt;&lt;figcaption&gt;Configuration du server MQTT, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On redémarre directement depuis l'interface de zigbee2mqtt et on peut vérifier dans MQTT Explorer par exemple que le topic &lt;strong&gt;zigbee&lt;/strong&gt; a bien été créé..&lt;br&gt;
&lt;br&gt;
Pour ajouter un appareil, il faut &lt;strong&gt;activer l'appairage&lt;/strong&gt; en haut de la fenêtre et suivre les instructions de la notice de l'appareil. (Tous ne s'incluent pas de la même manière.)&lt;br&gt;
&lt;br&gt;
Voila pour le protocole Zigbee, dans le prochain billet on ajoutera &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/26/Ma-domotique-IX-%3A-Rfxcom&quot;&gt;la VM RFXCom&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Ma domotique VII : Zwave</title>
        <link>https://chez.jcdenis.fr/post/2024/04/07/Ma-domotique-VII-%3A-Zwave</link>
        <guid isPermaLink="false">urn:md5:79a1348cbadf2ed168dfdfae3b450496</guid>
        <pubDate>Sun, 07 Apr 2024 09:44:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>NRDomV2</category>
                          <category>docker</category>
                  <category>proxmox</category>
                  <category>vm</category>
                  <category>zwave</category>
                <description>&lt;p&gt;Aujourd'hui on va parler du protocole Zwave qui était (au passé) un de mes préférés.&lt;/p&gt; &lt;p&gt;Le Zwave est un protocole sans fil, faible consommation, faible bande passante qui utilise le maillage réseau pour étendre sa portée. Financièrement les matériels Zwave sont un peu plus cher que leurs homologues Zigbee. Mais il permet une plus grande configuration du matériel.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/protocol_config_zigbee.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/.protocol_config_zigbee_m.png&quot; alt=&quot;Protocole config Zigbee&quot;&gt;&lt;figcaption&gt;Configuration d&amp;#039;un appareil Zigbee, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/protocol_config_zwave.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/.protocol_config_zwave_m.png&quot; alt=&quot;Protocole config Zwave&quot;&gt;&lt;figcaption&gt;Configuration appareil Zwave, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Les appareils peuvent être appairés sans passerelle, par exemple directement relié un interrupteur Zwave à une ampoule Zwave., un appareil peut gérer sa propre scène et piloter un autre appareil. Je n'utilise pas du tout cette fonctionnalité, je passe par une passerelle qui est une clé USB branché sur le serveur Promox. Le plus pénible avec le Zwave et qui fait qu'aujourd'hui je le délaisse un peu dans mes choix est qu'il faut que l'appareil soit contre la clé lors de la  phase d'appairage, super pas pratique. Le jour ou la clé rend l'âme ça va être sympa d'aller chercher les 80 appareils disséminés dans les murs…&lt;br&gt;
A noter que la technologie Zwave n'est pas libre, tous les appareils Zwave utilisent la même puce de chez Sigma Designs et sont certifiés.&lt;br&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Reportez vous aux billet précédents (&lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/02/Ma-domotique-III-%3A-Virtualisation&quot;&gt;ici&lt;/a&gt; et &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/03/Ma-domotique-IV-%3A-MQTT&quot;&gt;là&lt;/a&gt; ) pour en savoir plus sur ma configuration Proxmox et Docker.&lt;/em&gt;&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 123 --name zwave
qm set 123 --ipconfig0 ip=10.1.4.123/23,gw=10.1.4.1&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Dans Proxmox, on va aller dans la configuration &lt;strong&gt;Hardware&lt;/strong&gt; de la VM et lui ajouter la clé USB Zwave, comme on peut le voir elle n'est pas complètement reconnu, on va l'ajouter par &lt;strong&gt;Vendor/ID&lt;/strong&gt; :&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zwave_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/.zwave_install_01_m.png&quot; alt=&quot;Protocole Zwave install 01&quot;&gt;&lt;figcaption&gt;Installation Zwave bouton Add, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zwave_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/.zwave_install_02_m.png&quot; alt=&quot;Protocole Zwave install 02&quot;&gt;&lt;figcaption&gt;Installation Zwave choix clé USB, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&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, on lie notre VM, et on ajoute Stack qui ressemble à ça :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-docker&quot;&gt;version: &amp;#039;3.7&amp;#039;
services:
    zwave-js-ui:
        container_name: zwave-js-ui
        image: zwavejs/zwave-js-ui:latest
        restart: always
        tty: true
        stop_signal: SIGINT
        environment:
            - ZWAVEJS_EXTERNAL_CONFIG=/usr/src/app/store/.config-db
        networks:
            - zwave
        devices:
            - &amp;#039;/dev/ttyACM0&amp;#039;
        volumes:
            - zwave:/usr/src/app/store
        ports:
            - &amp;#039;80:8091&amp;#039;
            - &amp;#039;3000:3000&amp;#039;
networks:
    zwave:
volumes:
    zwave:
        name: zwave&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Maintenant on se rend dans l'interface web du serveur Zwave, dans l'exemple ce sera http://10.1.4.123. Dans l'onglet &lt;strong&gt;Settings&lt;/strong&gt;, on va ajouter la clé USB :&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zwave_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/.zwave_install_03_m.png&quot; alt=&quot;Protocole Zwave install 03&quot;&gt;&lt;figcaption&gt;Ajout de la clé USB Zwave, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Et on va configurer le serveur MQTT : &lt;br&gt;
&lt;em&gt;(Attention, la configuration dans la capture d'écran ne correspond pas au serveur MQTT de nos tutos.)&lt;/em&gt;&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zwave_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/.zwave_install_04_m.png&quot; alt=&quot;Protocole Zwave install 04&quot;&gt;&lt;figcaption&gt;Configuration du serveur MQTT, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Pour le réglage de la &lt;strong&gt;Gateway&lt;/strong&gt; (cf capture ci dessus) j'ai choisie &lt;code&gt;ValueID topics&lt;/code&gt; et &lt;code&gt;Payload Just value&lt;/code&gt;, plus pratique mais incompatible avec Home assistant.&lt;br&gt;
On relance le conteneur Docker et on retourne dans l'interface web Zwave pour voir qu'il a bien trouvé la clé USB et le serveur MQTT.&lt;br&gt;
&lt;br&gt;
Pour ajouter un appareil, il faut suivre l'icone &lt;strong&gt;Manage nodes&lt;/strong&gt; depuis l'icone en bas à droite puis sélectionner &lt;strong&gt;Inclusion&lt;/strong&gt; et suivre les instruction de la notice de l'appareil. (Tous ne s'incluent pas de la même manière.)&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/zwave_install_05.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/.zwave_install_05_m.png&quot; alt=&quot;Protocole Zwave install 05&quot;&gt;&lt;figcaption&gt;Inclusion d&amp;#039;un matériel, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
&lt;br&gt;
Voila pour le protocole Zwave, dans le prochain billet on ajoutera &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/25/Ma-domotique-VIII-%3A-Zigbee&quot;&gt;la VM Zigbee&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Ma domotique V : Node-RED</title>
        <link>https://chez.jcdenis.fr/post/2024/04/06/Ma-domotique-V-%3A-Node-RED</link>
        <guid isPermaLink="false">urn:md5:e533780ec0ac8a840b247347055050b7</guid>
        <pubDate>Sat, 06 Apr 2024 09:02:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>NRDomV2</category>
                          <category>docker</category>
                  <category>nodered</category>
                  <category>noeud</category>
                  <category>portainer</category>
                  <category>proxmox</category>
                  <category>vm</category>
                <description>&lt;p&gt;J'ai par le passé testé diffèrents logiciels de domotique comme par exemple Jeedom ou Home-Assistant pour ne citer qu'eux et un jour je me suis dit : ce n'est pas compliqué la domotique, c'est marche/arrêt, jour/nuit, on/off, je suis sure de pouvoir le faire.&lt;/p&gt; &lt;p&gt;Et je l'ai fait… et refait !&lt;br&gt;
&lt;br&gt;
J'aurai pu choisir n'importe qu'elle langage de programmation pour le faire, mais je suis fainéant et le temps me manque pour apprendre un nouveau langage, du coup je me suis rabattu sur Nore-RED, parfait pour moi, prendre des nœuds et les déplacer dans une fenêtre c'est à mon niveau. Je vous laisse &lt;a href=&quot;https://nodered.org/&quot; hreflang=&quot;en&quot; title=&quot;Node-RED&quot;&gt;visiter le site officiel&lt;/a&gt; pour savoir ce qu'est Node-RED. Parmi les avantages, une large palette de modules complémentaires, d'exemples, une facilité de bricolage, de débogage, la connexion native à MQTT et à bien d'autres outils utiles à ma domotique, etc...&lt;br&gt;
L'écriture de la première version du cœur de ma domotique en Node-RED m'a pris 1 an, la seconde version 4 mois. (Je ne l'ai pas encore terminé mais ça tourne en &lt;em&gt;prod&lt;/em&gt;.) donc même si c'est simple, ça prend du temps. Et encore je suis très loin de ce que je voudrais notamment un système d'ajout automatique de matériel, ça sera pour la prochaine version peut-être.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/nodered_admin_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/.nodered_admin_01_m.png&quot; alt=&quot;Node-Red admin 01&quot;&gt;&lt;figcaption&gt;Exemple d&amp;#039;interface d&amp;#039;administration Node-RED, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;

&lt;h3&gt;Fonctionnement de ma domotique&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Lorsque dans le suite du billet ou même des prochains articles je parle du cœur (ou kernel) de ma domotique, ça sera le partie centrale du code, le flow sous Node-RED qui gère ma domotique.&lt;/em&gt;&lt;br&gt;
&lt;br&gt;
Comme rapidement évoqué dans le billets précédents, ma domotique est basée sur la transmission de messages à 4 niveaux. Le message est composé d'un chemin appelé &lt;strong&gt;topic&lt;/strong&gt; ou &lt;strong&gt;path&lt;/strong&gt; dans le cœur de ma domotique et ce topic propage une valeur correspondante. Par exemple, pour l'information d'une lampe en court de traitement dans le coeur, ce sera :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;iotnode/douche/lumiere/plafonnier = true&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Le premier niveau n'est pas spécialement important (ou que rarement) il correspond à l'outil que génère ce topic, sa &lt;code&gt;source&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Le seconde niveau est la pièce de ma maison dans laquelle se situe l'élément, dans le cœur on l'appel &lt;code&gt;bucket&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Le troisième niveau est le type d'élement, dans le coeur on l'appel &lt;code&gt;measurement&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Le quatrième niveau est l'élement, dans le coeur on l'appel &lt;code&gt;field&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce qui donne :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source / bucket / measurement / field = value&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A y regarder de plus près, ça ressemble à ce qu'on retrouve dans des outils comme &lt;strong&gt;InfluxDB&lt;/strong&gt; et &lt;strong&gt;Grafana&lt;/strong&gt;, et qu'on appelle des &lt;strong&gt;metric&lt;/strong&gt;, ce n'est pas par hasard car 100% des valeurs générées par ma domotique sont stockées dans une base de données InfluxDB de laquelle j'extrais de jolis graphiques grâce à Grafana. On en reparlera dans de prochains billets&lt;br&gt;
&lt;br&gt;
Le cœur de ma domotique va simplement faire une boucle avec ce topic et chaque élément relié au cœur va pouvoir lire ce message est l'utiliser si besoin. Par exemple, lorsque la lampe s'allume un nouveau minuteur va se lancer et tenter de l'éteindre dans xx minutes. Mais là ou cela devient fou c'est que ce même minuteur génère un message qui va être lu par un scenario qui à son tour dira de ne pas l'éteindre mais de prolonger le minuteur car il y a eu un mouvement dans la pièce, etc... Mais du coup, les boucles peuvent s'empiler et devenir difficile à gérer, par exemple pour la gestion du chauffage ou des volets avec de nombreux éléments à prendre en compte comme les ouvertures, la présence, l'heure, la température, la lumière etc... Du coup il faut quand même mettre des garde-fou en place pour éviter des boucles infinies. Finalement une idée simple fini en casse tête. Voila pour le préambule à la gestion de ma domotique, il faut simplement retenir qu'on fait une boucle avec un message.&lt;br&gt;
&lt;br&gt;
Un élément (ou metric) à l'entrée du cœur doit également suivre des règles bien précises. Il doit être enregistré dans le cœur avant de pouvoir être utilisé correctement. En effet un lampe peut-être simplement en tout ou rien, mais elle peut également être &lt;em&gt;dimmable&lt;/em&gt; (valeur entre 0 et 99 par exemple) il faut donc l'expliquer au cœur. Lorsqu'on enregistre un nouvel élément il doit donc renseigner :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sa pièce : &lt;code&gt;bucket&lt;/code&gt; (douche)&lt;/li&gt;
&lt;li&gt;son type : &lt;code&gt;measurement&lt;/code&gt; (lumiere)&lt;/li&gt;
&lt;li&gt;son nom : &lt;code&gt;field&lt;/code&gt; (plafonnier)&lt;/li&gt;
&lt;li&gt;son type de valeur : &lt;code&gt;format&lt;/code&gt; (boolean)&lt;/li&gt;
&lt;li&gt;sa valeur par défaut : &lt;code&gt;default&lt;/code&gt; (true)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avec ça le cœur saura comment nettoyer et retransmettre une représentation propre de l'élément. Par exemple si un élément tiers demande d'allumer la lampe avec un ordre &lt;code&gt;true&lt;/code&gt; mais que ma lampe est dimmable, le cœur saura transformer cette valeur en &lt;code&gt;99&lt;/code&gt; et la retransmettre.&lt;br&gt;
Dans la seconde version du cœur de ma domotique j'ai ajouté un début de gestion commune de certains appareils, en effet j'ai par exemple des interrupteurs connectés de même modèle un peu partout, donc au lieu répéter du code dans chaque pièce, j'utilise une base commune, pour cela j'ai ajouté dans l'enregistrement d'un élément la possibilité de renseigner un modèle :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;protocol&lt;/code&gt; : le protocole utilisé par l'élément (ex: zigbee)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;model&lt;/code&gt; : le model de l'élément (ex: snbz-02 pour un capteur zigbee)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; : l'identifiant dans le protocole  (zwave c'est un nombre, zigbee c'est arbitraire dans zigbee2mqtt, etc)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;option&lt;/code&gt; : une option entre 1 et 3, utile si un élément à deux fonctions identiques (ex double interrupteur) ou un changement de comportement (capteur d'ouverture sur un interrupteur Qubino)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avec ça on est quasi paré à toutes éventualités.&lt;br&gt;
&lt;br&gt;
On continue de s'éloigner du cœur et on va aller voir comment fonctionne un élément de ma domotique dans Node-RED.&lt;br&gt;
On vient de voir la première fonction de l'élement qui est d'enregistrer dans le cœur sa définition.&lt;br&gt;
La seconde fonction est de transmettre les informations du matériel vers le cœur. Pour cela j'ai simplifié la tache en ajoutant des portes de/vers chaque protocole de ma domotique dans Node-RED. En effet tous mes protocoles domotiques atterrissent dans MQTT il est donc simple de les lire dans Node-RED. Si je reprend l'exemple de ma lampe, son élément va se relier à l'entrée Zwave du cœur et lire les informations dont elle a besoin dans son topic dédié, comme l'état de la lampe dans &lt;code&gt;/zwave/10/37/0/currenValue&lt;/code&gt; qu'il va retransmettre au cœur dans &lt;code&gt;/device/douche/lumiere/plafonnier = true&lt;/code&gt;.&lt;br&gt;
La troisième fonction, vous l'aurez sans doute devinez, est transmettre les ordres du cœur vers le matériel. Ici on fait le travail inverse de la seconde fonction, on écoute le cœur pour attraper l'ordre d'allumer la lumière qui sera le message &lt;code&gt;/ionode/douche/lumiere/plafonnier = true&lt;/code&gt; et on le transmet à la sortie Zwave du cœur dans le message &lt;code&gt;/zwave/10/37/0/targetValue/set = true&lt;/code&gt;. La théorie est très simple.&lt;br&gt;
J'ai ajouté une quatrième fonction qui permet d'afficher dans une interface web ces informations. Pour ma lampe un bouton pour l'allumer ou l'éteindre. Node-RED a une extension dashboard qui est une interface web, encore une fois le travail est ici facilité. A noter que je n'ai pas poussé la mise en page de cette interface car pour moi la domotique doit fonctionner toute seule et être transparente au quotidien et de plus je n'ai pas assez de temps pour jouer avec cette partie design.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/nodered_dashboard_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/.nodered_dashboard_01_m.png&quot; alt=&quot;Node-RED dashboard2 exemple 01&quot;&gt;&lt;figcaption&gt;Exemple de dashboard Node-RED, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/nodered_dashboard_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/.nodered_dashboard_02_m.png&quot; alt=&quot;Node-RED dashboard2 exemple 02&quot;&gt;&lt;figcaption&gt;Exemple de dashboard Node-RED, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Voila avec tout ça, un élément représentant un matériel physique (ou une partie de matériel) est géré dans le cœur de ma domotique.&lt;br&gt;
&lt;br&gt;
Maintenant commence le vrai rôle de la domotique, animer tout ça. Pour cela j'utilise des nœuds de scénario, que ce soit l'ouverture des volets, la gestion du chauffage, l'éclairage des escaliers, ou le rappel pour sortir les poubelles, le principe reste le même. Un scénario écoute les messages transmis en boucle par le cœur et va attraper ceux qui l'intéressent. Par exemple pour le volet du salon, je vais écouter les messages de mode Jour/Nuit, ceux des ouvertures de la baie vitrée, ceux de mouvement et même ceux du capteur de luminosité, ben oui si le soleil tape trop fort j'ajoure le volet ! Je ferais des billets plus précis plus tard avec des exemples concrets et complets, ici je présente juste le principe.&lt;br&gt;
&lt;br&gt;
Ce fût long et pourtant je n'ai quasi rien montré de concret du code. Je vais m'arrêter là pour ces premières explications, mais il y a bien d'autres choses dans ce cœur. Il y a les agendas, les assistants vocaux, les graphiques, un peu de configuration, etc. On verra si j'arrive à avancer dans mes billets de présentation pour pousser plus loin les explications…&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;Installation du server Node-RED&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Reportez vous aux billet précédents (&lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/02/Ma-domotique-III-%3A-Virtualisation&quot;&gt;ici&lt;/a&gt; et &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/03/Ma-domotique-IV-%3A-MQTT&quot;&gt;là&lt;/a&gt; ) pour en savoir plus sur ma configuration Proxmox et Docker.&lt;/em&gt;&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 122 --name nodered
qm set 122 --ipconfig0 ip=10.1.4.122/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, on lie notre VM, et on ajoute Stack qui ressemble à ça :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-docker&quot;&gt;version: &amp;quot;3.8&amp;quot;
services:
  nodered:
    container_name: nodered
    image: nodered/node-red:latest
    restart: always
    environment:
      - TZ=Europe/Paris
    ports:
      - &amp;quot;80:1880&amp;quot;
      - &amp;quot;3456:3456&amp;quot;
    networks:
      - net
    volumes:
      - data:/data
networks:
  net:
volumes:
  data:&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
On va modifier le mot de passe de Node-RED , comme pour MQTT cela se fait dans  le Docker. Pour cela on va dans la console Proxmox de la VM, et on ouvre une session docker :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker exec -it nodered /bin/bash&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;On demande de hacher notre mot de passe avec :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;node-red admin hash-pw le_mot_de_passe&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;On obtient en retour notre mot de passe crypté qu'il va falloir mettre dans le ficher de configuration de Node-Red. On retourne dans la console Proxmox (ou en SSH) de la VM et on va modifier la configuration de node-RED :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo nano /var/lib/docker/volumes/nodered_data/_data/settings.js&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;le fichier doit ressembler à ça :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;module.exports = {
    flowFile: &amp;#039;flows.json&amp;#039;,
    credentialSecret: false,
    flowFilePretty: true,
    adminAuth: {
        type: &amp;quot;credentials&amp;quot;,
        users: [{
            username: &amp;quot;bob&amp;quot;,
            password: &amp;quot;le_mot_de_passe_crypté&amp;quot;,
            permissions: &amp;quot;*&amp;quot;
        }]
    },
    httpAdminRoot: &amp;#039;/admin&amp;#039;,
    httpNodeRoot: &amp;#039;/&amp;#039;,
    diagnostics: {
        enabled: true,
        ui: true,
    },
    runtimeState: {
        enabled: false,
        ui: false,
    },
    logging: {
        console: {
            level: &amp;quot;info&amp;quot;,
            metrics: false,
            audit: false
        }
    },
    contextStorage: {
        default: {
            module: &amp;quot;localfilesystem&amp;quot;
        },
        memoryOnly: {
            module: &amp;quot;memory&amp;quot;
        },
    },
    exportGlobalContextKeys: false,
    externalModules: {
    },
    editorTheme: {
        palette: {
        },
        projects: {
            enabled: false,
            workflow: {
                mode: &amp;quot;manual&amp;quot;
            }
        },
        codeEditor: {
            lib: &amp;quot;monaco&amp;quot;,
            options: {
            }
        },
        markdownEditor: {
            mermaid: {
                enabled: true
            }
        },
    },
    functionExternalModules: true,
    functionTimeout: 0,
    functionGlobalContext: {
    },
    ui: { path: &amp;quot;&amp;quot; },
    debugMaxLength: 1000,
    mqttReconnectTime: 15000,
    serialReconnectTime: 15000,
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Par rapport au fichier d'origine, on a ajouté le login, modifié les URI qui finiront par /admin pour la partie administration (la fenêtre de développement de Node-RED) et à la racine pour l'interface web. On indique également d'utiliser deux sortes de mémoire : une vive et une en fichier. (Qui va permettre de garder certaines valeurs lors d'un redémarrage, ou coupure de courant.)&lt;br&gt;
On relance le conteneur et notre instance Node-Red est accessible sur http://10.1.4.122/admin.&lt;br&gt;
&lt;br&gt;
Dans le prochain billet, on va faire une petite pause et &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/06/Ma-domotique-VI-%3A-Pause&quot;&gt;parler plus généralement de la domotique&lt;/a&gt; et de ce qu'on peut en tirer.&lt;/p&gt;</description>
        
              </item>
          <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>
          <item>
        <title>Ma domotique III : Virtualisation</title>
        <link>https://chez.jcdenis.fr/post/2024/04/02/Ma-domotique-III-%3A-Virtualisation</link>
        <guid isPermaLink="false">urn:md5:5537a2dbcda7ad1aac8a753e407c201d</guid>
        <pubDate>Tue, 02 Apr 2024 21:57:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>NRDomV2</category>
                          <category>conteneur</category>
                  <category>debian</category>
                  <category>docker</category>
                  <category>protainer</category>
                  <category>proxmox</category>
                  <category>vm</category>
                <description>&lt;p&gt;Au début de ma domotique j'étais réfractaire à tout ce qui était virtuel, installant une distribution sur une machine pour chaque besoin, mais ça c'était avant !&lt;/p&gt; &lt;p&gt;Lorsque j'ai commencé la domotique, j'utilisais des Raspberry Pi (W, 2 ou 3), j'installais la distribution Linux qui allait avec et je me tapais des lignes et des lignes de commande pour tenter d'installer le moindre truc et je recommençais du début à chaque plantage. J'étais borné, ne voulant pas entendre parler de machine virtuelle ou de conteneur, croyant que tout serait plus solide si j'installais tout moi même sur une base solide. Bon, ben j'avais tord, quelques années plus tard je ne jure que par des VM et des conteneurs. Bigre.&lt;br&gt;
&lt;br&gt;
La virtualisation a pleins d'avantages, facile de sauvegarder, supprimer, restaurer, modifier. Aujourd'hui un petit bout de config, 2 clics et une ligne de commande suffisent à lancer tout ce qu'il faut pour gérer un protocole. Alors dans l'absolue il a fallu préparer en amont des templates et avoir un gestionnaire de container fonctionnel, mais j'ai pris le temps et aujourd'hui je gagne du temps.&lt;br&gt;
&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.logo_proxmox_s.png&quot; alt=&quot;&quot; class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.logo_debian_s.png&quot; alt=&quot;&quot; class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.logo_portainer_s.jpg&quot; alt=&quot;&quot; class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/domotique/.logo_docker_s.png&quot; alt=&quot;&quot; class=&quot;media-center&quot;&gt;&lt;br&gt;
Mes choix se sont portés sur la distribution de gestion de VM nommé Proxmox VE dans sa version public, la construction de template de VM à base de Debian, le système de container Docker et le gestionnaire Portainer. J'empile même les deux en mettant un Docker dans un VM. Simple et efficace pour compartimenter les protocoles domotique et pour sauvegarder tout ça. Ces deux gestionnaires ont une interface web plutôt bien réussi ce qui facilite encore plus leurs utilisations.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/interface_proxmox_ve.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/.interface_proxmox_ve_m.png&quot; alt=&quot;Interface Proxmox VE&quot;&gt;&lt;figcaption&gt;Exemple d&amp;#039;interface web de la distribution Proxmox VE, mars 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/interface_portainer.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/.interface_portainer_m.png&quot; alt=&quot;Interface de Portainer&quot;&gt;&lt;figcaption&gt;Exemple d&amp;#039;interface web du gestionnaire Portainer, mars 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Aujourd'hui pour faire tourner ma domotique j'ai 12 machines virtuelles embarquant chacune un ou plusieurs Docker, et avec tout ça le processeur de mon serveur n'atteint même pas les 1% d'utilisation. (bon il a 28 cœurs mais quand même) C'est juste hallucinant. L'accumulation de tous ces avantages fait que je ne reviendrais jamais en arrière et que je ne peux que vous conseiller de prendre ce chemin dès le départ.&lt;br&gt;
&lt;br&gt;
Avant de commencer les screenshots et les lignes de commande pour préparer tout ça, je vais faire un mini rappel sur certains termes utiliser précédemment :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Proxmox&lt;/strong&gt; : Gestionnaire de machines virtuelles (VM)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debian&lt;/strong&gt; : Distribution Linux, composée presque exclusivement de logiciels libres&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt; : Outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portainer&lt;/strong&gt; : Gestionnaire de conteneur Docker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vous êtes prêt pour un bon gros pavé ? C'est partie, avec à la fin de ce billet un premier exemple d'utilisation en 3 lignes de commande.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;Installation de Proxmox&lt;/h3&gt;

&lt;p&gt;Proxmox est fait pour travailler en cluster, c'est à dire que vous avez plusieurs machines physiques sur lesquels chaque machine virtuelle est dupliquée. On ne va pas utiliser cette fonctionnalité car on n'en a pas besoin et surtout nous avons besoin des ports USB pour les clefs Zigbee, Zwave et autres, ce qui rend la duplication impossible.&lt;br&gt;
Il existe des centaines du tuto se ressemblant les uns les autres expliquant l'installation de Proxmox. Je vais quand même m'y coller juste pour le plaisir de faire les captures d'écran depuis l'installation de Proxmox sur un VM Proxmox !&lt;br&gt;
Il faut commencer par télécharger l'ISO de Proxmox VE sur le site de Proxmox et la graver sur une clef USB, pour cela j'utilise le logiciel BalenaEtcher. Ensuite insérer la clef USB dans un port du serveur et démarrer le serveur. La procédure d'installation commence.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_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/.pve_install_01_m.png&quot; alt=&quot;Promox VE install 01&quot;&gt;&lt;figcaption&gt;Promox VE install 01, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On accepte les termes et on choisie le disque. La seule difficulté que j'avais lors de l'installation et d'avoir choisi un raid matériel depuis le bios de ma carte mère et ensuite le faire reconnaitre lors de l'installation de Proxmox. Il a fallu que je choisisse dans les options le Raid 1 zfs en sélectionnant mes deux disques. Rien de bien méchant.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_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/.pve_install_02_m.png&quot; alt=&quot;Promox VE install 02&quot;&gt;&lt;figcaption&gt;Promox VE install 02, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On choisi la zone horaire.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_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/.pve_install_03_m.png&quot; alt=&quot;Promox VE install 03&quot;&gt;&lt;figcaption&gt;Promox VE install 03, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On indique le mot de passe root et un email.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_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/.pve_install_04_m.png&quot; alt=&quot;Promox VE install 04&quot;&gt;&lt;figcaption&gt;Promox VE install 04, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On sélectionne l'interface réseau, le nom de la machine et les IPs. Sur les captures je suis dans un VM de mon réseau de test donc à adapter selon votre configuration.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_install_05.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/.pve_install_05_m.png&quot; alt=&quot;Promox VE install 05&quot;&gt;&lt;figcaption&gt;Promox VE install 05, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On vérifie les informations et on procède à l'installation.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_install_06.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/.pve_install_06_m.png&quot; alt=&quot;Promox VE install 06&quot;&gt;&lt;figcaption&gt;Promox VE install 06, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Une fois l'installation terminé, le serveur reboot. On en a fini avec le serveur. On peut se connecter à l'interface web depuis notre PC. L'IP du serveur est celle vu pendant l'installation auquel il faut ajouté le port 8006. Une alerte nous informe que la connexion n'est pas sécurise, pas grave la machine n'est pas accessible hors de la maison. On entre nos identifiant root et voila.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_install_07.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/.pve_install_07_m.png&quot; alt=&quot;Promox VE install 07&quot;&gt;&lt;figcaption&gt;Promox VE install 07, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Une alerte indique que nous avons pas de licence valide, normal on utilise la version libre. On va tout de suite modifier les sources pour les mises à jour pour ajouter le dépôt No-Subscription et enlever le dépôt Entreprise. Ces réglages sont dans Datacentre -&amp;gt; notre machine -&amp;gt; Updates -&amp;gt; Repositories -&amp;gt; Add.&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_install_08.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/.pve_install_08_m.png&quot; alt=&quot;Promox VE install 08&quot;&gt;&lt;figcaption&gt;Promox VE install 08, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_install_09.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/.pve_install_09_m.png&quot; alt=&quot;Promox VE install 09&quot;&gt;&lt;figcaption&gt;Promox VE install 09, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Une fois les dépôts configurer, on remonte dans Updates on clique sur Refresh puis sur Upgrade. Notre machine est à jour. Si le noyau est modifié il faudra surement redémarrer le serveur.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_install_10.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/.pve_install_10_m.png&quot; alt=&quot;Promox VE install 10&quot;&gt;&lt;figcaption&gt;Promox VE install 10, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Voila pour la partie serveur. Il faudra ajouter la gestion des backups. Je ferais peut-être un billet sur l'utilisation de Proxmox Backup Server tel que je l'utilise. C'est bien pratique.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;Création du template Debian&lt;/h3&gt;

&lt;p&gt;Pour ma domotique, j'utilise un template de VM qui me permet de créer des VM en 2 minutes, la base est toujours la même, seuls l'IP et le conteneur Docker changent. Je vais faire dans un premier temps un template uniquement de la distribution puis je le dupliquerais pour faire un second template avec ce qu'il faut pour Docker.&lt;br&gt;
Dans l'interface web de Proxmox, On va dans &lt;strong&gt;Datacentre -&amp;gt; notre machine&lt;/strong&gt;, on clic droit dessus pour ouvrir son menu et on fait &lt;code&gt;Create VM&lt;/code&gt;.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_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/.pve_template_install_02_m.png&quot; alt=&quot;PVE Template Install 02&quot;&gt;&lt;figcaption&gt;PVE Template, bouton de création VM, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On paramètre maintenant notre machine virtuelle. Dans l'onglet &lt;strong&gt;General&lt;/strong&gt;, on change le &lt;strong&gt;VM ID&lt;/strong&gt;, on va en mettre un assez élevé pour ne pas le mélanger aux autres, je prend&lt;code&gt; 900&lt;/code&gt; pour ce template et on va la nommé, ici ce sera &lt;code&gt;template-debian&lt;/code&gt;.&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_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/.pve_template_install_03_m.png&quot; alt=&quot;PVE Template Install 03&quot;&gt;&lt;figcaption&gt;PVE Template, Onglet général, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Ensuite dans l'onglet &lt;strong&gt;OS&lt;/strong&gt;, on lui indique de ne pas utiliser de média (on va le faire de manière spéciale un peu plus tard), le reste ne change pas.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_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/.pve_template_install_04_m.png&quot; alt=&quot;PVE Tempalte Install 04&quot;&gt;&lt;figcaption&gt;PVE Template, Onglet OS, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Ensuite dans l'onglet &lt;strong&gt;System&lt;/strong&gt;, on garde tout par défaut, on va juste cocher la case &lt;code&gt;Qemu Agent&lt;/code&gt;.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_05.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/.pve_template_install_05_m.png&quot; alt=&quot;PVE Template Install 05&quot;&gt;&lt;figcaption&gt;PVE Template, Onglet System, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Ensuite dans l'onglet &lt;strong&gt;Disks&lt;/strong&gt;, on va supprimer le disque par défaut. (on va l'ajouter de manière spéciale un peu plus tard)&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_06.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/.pve_template_install_06_m.png&quot; alt=&quot;PVE Template Install 06&quot;&gt;&lt;figcaption&gt;PVE Template, Onglet Disks, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On ne touche pas aux onglet &lt;strong&gt;CPU&lt;/strong&gt; et &lt;strong&gt;Memory&lt;/strong&gt;, on pourra les modifier lors de la création de nos VM. Dans l'onglet &lt;strong&gt;Network&lt;/strong&gt; on choisie le &lt;strong&gt;Brigde&lt;/strong&gt; réseau à utiliser et on décoche la case &lt;code&gt;Firewall&lt;/code&gt;.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_07.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/.pve_template_install_07_m.png&quot; alt=&quot;PVE Template Install 07&quot;&gt;&lt;figcaption&gt;PVE Template, Onglet Network, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On vérifie que tout est bon et on clic sur &lt;strong&gt;Finish&lt;/strong&gt;.&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_08.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/.pve_template_install_08_m.png&quot; alt=&quot;PVE Template Install 08&quot;&gt;&lt;figcaption&gt;PVE Template, Onglet Confirm, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On passe à la seconde phase de la création du template, il va falloir lui ajouter un disque Cloud-init. Pour cela on se rend dans &lt;strong&gt;Datacentre -&amp;gt; notre machine -&amp;gt; norte VM (900) -&amp;gt; Hardware&lt;/strong&gt;, on déroule le menu &lt;strong&gt;Add&lt;/strong&gt; et on sélectionne &lt;code&gt;CloudInit Drive&lt;/code&gt;, on utilise le &lt;strong&gt;Bus&lt;/strong&gt; &lt;code&gt;IDE 0&lt;/code&gt; et le &lt;strong&gt;Storage&lt;/strong&gt; &lt;code&gt;local-lvm&lt;/code&gt;.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_09.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/.pve_template_install_09_m.png&quot; alt=&quot;PVE Template Install 09&quot;&gt;&lt;figcaption&gt;PVE Template, menu Add hardware, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Toujours sur notre VM 900 on se rend dans la partie &lt;strong&gt;Cloud-init&lt;/strong&gt; et on va modifier le &lt;strong&gt;User&lt;/strong&gt; et son &lt;strong&gt;Password&lt;/strong&gt;. Ces identifiant serviront à se connecter à la machine en SSH par exemple, cette utilisateur aura les droits sudo.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_10.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/.pve_template_install_10_m.png&quot; alt=&quot;PVE Template Install 10&quot;&gt;&lt;figcaption&gt;PVE Template, paramètres Cloud-init, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Dans cette partie on va également configurer le réseau pour utiliser DHCP, même si on le verra par la suite on va assigner une IP à chaque machine virtuelle avant de la démarrer.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_11.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/.pve_template_install_11_m.png&quot; alt=&quot;PVE Template Install 11&quot;&gt;&lt;figcaption&gt;PVE Template, config DHCP, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Maintenant on va ajouter le disque. On utilise le shell de norte interface web Proxmox mais on pourrait utiliser un client SSH.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_12.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/.pve_template_install_12_m.png&quot; alt=&quot;PVE Template Install 12&quot;&gt;&lt;figcaption&gt;PVE Template, node shell, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Et on va enchainer quelques commandes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tout d'abord on télécharge l'image de l'OS Debian pour KVM&lt;/li&gt;
&lt;li&gt;On redimensionne l'image (je mets 16G par defaut, on pourra ensuite changer pour chaque machine)&lt;/li&gt;
&lt;li&gt;On autorise la console (le 900 est le numero de notre template)&lt;/li&gt;
&lt;li&gt;On importe le disque dans la VM template&lt;/li&gt;
&lt;li&gt;On scanne les volumes pour les prendre en compte&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce qui donne dans le shell :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2
qemu-img resize debian-12-generic-amd64.qcow2 16G
qm set 900 --serial0 socket --vga serial0
qm importdisk 900 debian-12-generic-amd64.qcow2 local-lvm
qm rescan&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
On retourne dans la partie dédiée à notre template, dans &lt;strong&gt;Hardware&lt;/strong&gt; il faut ajouter le disque qu'on vient de créer en cliquant dessus puis &lt;strong&gt;Add&lt;/strong&gt;.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_14.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/.pve_template_install_14_m.png&quot; alt=&quot;PVE Template Install 14&quot;&gt;&lt;figcaption&gt;PVE Template, Add unused disk, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Le disque apparait maintenant normalement. &lt;strong&gt;Hard Disk (scsi0)&lt;/strong&gt;.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_15.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/.pve_template_install_15_m.png&quot; alt=&quot;PVE Template Install 15&quot;&gt;&lt;figcaption&gt;PVE Template, hardware with disk, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On se déplace dans le menu &lt;strong&gt;Options&lt;/strong&gt; et on va modifier l'ordre de boot en passant le disque &lt;strong&gt;scsi0&lt;/strong&gt; en second et en cocher sa case &lt;code&gt;Enabled&lt;/code&gt;.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_16.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/.pve_template_install_16_m.png&quot; alt=&quot;PVE Template Install 16&quot;&gt;&lt;figcaption&gt;PVE Template, Boot order, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Tout est prêt pour un premier démarrage du template, on se rend dans la console de la VM 900 et on démarre la machine. Ca mouline un moment puis plus rien, il suffit de taper &lt;em&gt;entrer&lt;/em&gt; et l'invite de commande apparait.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_install_17.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/.pve_template_install_17_m.png&quot; alt=&quot;PVE Template Install 17&quot;&gt;&lt;figcaption&gt;PVE Template, console, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
Le login et le mot de passe sont ceux indiqués dans la configuration de Cloud-init. On va :&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mettre à jour l'OS&lt;/li&gt;
&lt;li&gt;Installer Qemu&lt;/li&gt;
&lt;li&gt;L'ajouter au boot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce qui donne dans la console :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y
sudo apt install qemu-guest-agent
sudo systemctl enable qemu-guest-agent&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Sur les dernières versions de Debian, le service SSH n'est pas activé, je l'utilise, donc je vais l'activer de suite :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl enable ssh
sudo systemctl start ssh&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Maintenant on va faire un reset de l'ID du template et nettoyer les informations d'initialisation.&lt;br&gt;
&lt;strong&gt;A chaque démarrage de la VM de template pour y apporter des modifications, il sera obligatoire de refaire ces lignes de commandes !&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo su -
cat /dev/null &amp;gt; /etc/900
cat /dev/null &amp;gt; /var/lib/dbus/900
cloud-init clean&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Il ne reste plus qu'à arrêter notre template avec un joli :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;shutdown -h now&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Voila la VM de template Debian est prête à être cloné.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;Création du template contenant Docker&lt;/h3&gt;

&lt;p&gt;Pour la création du second template Docker contenant les outils pour Portainer on va cloner le template Debian qu'on vient de créer et lui apporter les modifications nécessaires.&lt;br&gt;
&lt;br&gt;
Pour cela on clic droit sur le template Debian pour afficher le menu et on choisi &lt;code&gt;Clone&lt;/code&gt;.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_docker_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/.pve_template_docker_install_01_m.png&quot; alt=&quot;PVE Template Docker Install 01&quot;&gt;&lt;figcaption&gt;PVE Template, Docker clone, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On choisi un numéro ID de Vm, comme précédement on en prend un élevé ici &lt;code&gt;910&lt;/code&gt; puis on lui donne un nom, ici &lt;code&gt;template-docker&lt;/code&gt;. On valide. Le clonage prend un peu de temps puis on lance la console de notre nouvelle VM, l'utilisateur et le mot de passe sont ceux donner dans le template Debian.&lt;br&gt;&lt;/p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/domotique/pve_template_docker_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/.pve_template_docker_install_02_m.png&quot; alt=&quot;PVE Template Docker Install 02&quot;&gt;&lt;figcaption&gt;PVE Template, Docker console, avr. 2024&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br&gt;
On va ensuite enchainer les commandes pour ajouter Docker :&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ajout du répertoire de clés pgp&lt;/li&gt;
&lt;li&gt;Ajout du logiciel pgp&lt;/li&gt;
&lt;li&gt;Téléchargement de la clé&lt;/li&gt;
&lt;li&gt;Ajout de la clé&lt;/li&gt;
&lt;li&gt;Mise à jour des dépôts&lt;/li&gt;
&lt;li&gt;Installation de Docker et de tout ce qu'on aura besoin pour nos VM&lt;/li&gt;
&lt;li&gt;Ajout des droits de l'utilisateur sur Docker&lt;/li&gt;
&lt;li&gt;On se délogue pour prendre en compte les droits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce qui donne dans la console :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \
  sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
exit&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;On se relogue sur la console et on ajoute l'agent Portainer qui nous servira sur les futurs VM :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:2.19.4&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Comme on a modifié le template il faut à nouveau le nettoyer :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo su -
cat /dev/null &amp;gt; /etc/900
cat /dev/null &amp;gt; /var/lib/dbus/900
cloud-init clean
shutdown -h now&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Et voila notre seconde template dédié à docker prêt.&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;Création de la machine virtuelle Portainer&lt;/h3&gt;

&lt;p&gt;Ca va aller vite grâce à nos templates !&lt;br&gt;
&lt;br&gt;
On va cloner le Template Docker et ensuite lui assigner une IP fixe dans notre réseau. Pour ma part quand c'est possible, l'ID de ma VM sera également l'IP de la machine virtuelle. Pour cela on se rend dans le shell de notre serveur Proxmox (ou en SSH) et on enchaine les deux commandes suivantes :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qm clone 910 120 --name portainer
qm set 120 --ipconfig0 ip=10.1.4.120/23,gw=10.1.4.1&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Je clone mon template d'ID &lt;strong&gt;910&lt;/strong&gt; vers le VM d'ID &lt;strong&gt;120&lt;/strong&gt; que je nomme &lt;strong&gt;portainer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;J'assigne à la VM &lt;strong&gt;120&lt;/strong&gt; l'IP &lt;strong&gt;10.1.4.120&lt;/strong&gt; dans mon réseau&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je ne touche ni à la taille du disque, ni à la taille de la mémoire, ni au nombre de processeur de ma futur VM, les valeurs par défaut du template iront très bien. Maintenant on démarre la VM et on se connecte à la console (ou en SSH vers l'IP qu'on vient d'assigner) le login et le mot de passe sont ceux indiqués lors de la création du tout premier template.&lt;br&gt;
Et on exécute un docker de Portainer :&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run -d -p 80:8000 -p 443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Et voila, le gestionnaire de Docker de notre domotique est fonctionnel et est accessible par interface web à l'adresse http://10.4.1.120. (sur le port 80)&lt;br&gt;
&lt;br&gt;
Magique.&lt;br&gt;
&lt;br&gt;
Dans le prochain billet je &lt;a href=&quot;https://chez.jcdenis.fr/post/2024/04/03/Ma-domotique-IV-%3A-MQTT&quot;&gt;présente la VM MQTT&lt;/a&gt; qui est le centre d'échange d'informations de ma domotique et l'utilisation de Portainer pour ce premier cas.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Upcrack</title>
        <link>https://chez.jcdenis.fr/post/2023/10/24/Upcrack</link>
        <guid isPermaLink="false">urn:md5:2cf843b40a15961918f4a6e80077bdf3</guid>
        <pubDate>Tue, 24 Oct 2023 20:00:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>Domotique</category>
                          <category>domotique</category>
                  <category>màj</category>
                  <category>vm</category>
                <description>&lt;p&gt;Comme chaque année avant le début de l'hiver, enfin de ce qui devrait l'être, je fais un petit tour de mon installation domotique.&lt;/p&gt; &lt;a href=&quot;https://chez.jcdenis.fr/public/photos/20230909-02.jpg&quot; title=&quot;20230909-02.jpg, oct. 2023&quot;&gt;&lt;figure class=&quot;media-center&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/photos/.20230909-02_m.jpg&quot; alt=&quot;20230909-02.jpg, oct. 2023&quot; title=&quot;20230909-02.jpg, oct. 2023&quot; /&gt;&lt;figcaption&gt;L&amp;#039;eau - Le ciel - 09/2023&lt;/figcaption&gt;&lt;/figure&gt;&lt;/a&gt;&lt;p&gt;&lt;br /&gt;
Ma domotique gérant le chauffage de la maison, les premiers froids me poussent chaque année à faire une vérification de l'ensemble de l'installation, histoire que madame ne me mette pas à l'amende en cas de panne impromptue. Comme chaque année cela se traduit par un changement de pile des capteurs en limite, une mise à jour des machines virtuelles et un contrôle visuel des chauffages et capteur de portes. Jusque là tout semble se dérouler parfaitement, je suis toujours agréablement surpris que mon installation et programmation perso de tout ça ronronne aussi bien. (Proxmox, Nodered, MQTT, c'est tellement génial.)&lt;br /&gt;
Du coup j'ai voulu enchainer sur la mise à jour de mon PC Windows qui en réalité est une VM distante dont je me sers partout. Paf, le drame, mise à jour planté, même après 10 tentatives, même après nombre de lectures et tuto sur cette erreur connue. Il m'a fallu la moitié de l'après-midi pour trouver la parade, et donc pour une simple mise à jour, il a fallu que je change de processeur virtuel, que j'augment la taille du disque virtuel et que j'écrase la version courante par une installation... (Qui heureusement a gardé mes programmes fonctionnels.)&lt;br /&gt;
&lt;br /&gt;
Rendez-vous l'année prochaine pour une mise à jour.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>En boucle</title>
        <link>https://chez.jcdenis.fr/post/2023/01/16/En-boucle</link>
        <guid isPermaLink="false">urn:md5:b27c7cd233fd056ef97c18327c92b115</guid>
        <pubDate>Mon, 16 Jan 2023 22:47:00 +0100</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>Bref</category>
                          <category>lan</category>
                  <category>nas</category>
                  <category>routeur</category>
                  <category>vm</category>
                <description> &lt;p&gt;Bon, ça y est, je crois que je viens de me calmer sur le bricolage de mon réseau maison. Après un excès de folie vendredi soir à vouloir passer tous mes liens de 10Gb vers 2x10Gbs entre routeur, LAN, VM, NAS, etc... J'ai mis 3 jours à revenir en arrière. Ouais, ça calme. Surtout pour un exercice de style qui ne sert absolument à rien à part épater la galerie. Même pas. Aux vues de mes stats IPv6, je n'ai pas manqué à grand monde !&lt;br /&gt;
Bref, c'est bon je vais pouvoir retourner à mon bricolage de Dotclear.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Haproxy</title>
        <link>https://chez.jcdenis.fr/post/2022/07/28/Haproxy</link>
        <guid isPermaLink="false">urn:md5:c63395a17514b7b04f84dd02591e1a84</guid>
        <pubDate>Thu, 28 Jul 2022 20:40:00 +0100</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>Domotique</category>
                          <category>haproxy</category>
                  <category>ssl</category>
                  <category>vm</category>
                  <category>vpn</category>
                <description>&lt;p&gt;L'ami &lt;a href=&quot;https://open-time.net/post/2021/09/02/Contre-toute-attente&quot; hreflang=&quot;fr&quot; title=&quot;Contre toute attente&quot;&gt;Franckpaul&lt;/a&gt; m'avait donné l'envie d'utiliser un proxy pour rendre accessible mes serveurs locaux depuis les internets. Comme d'habitude je suis partie de son exemple pour le transformer en usine à gaz.&lt;/p&gt; &lt;p&gt;Je vais essayer de poser les bases de manière simple, ce n'est pas gagné !&lt;br /&gt;
Tout d'abord petit rappel de ce qu'est haproxy: C'est un logiciel open source qui gère le &lt;em&gt;load balancing&lt;/em&gt; et le &lt;em&gt;reverse proxy&lt;/em&gt;. Pour ma part je n'utilise que la partie reverse proxy. Depuis une seule adresse IP je vais redistribuer des noms de domaines vers mes serveurs internes. Enfin, deux adresses IP, une IPv4 et une IPv6.&lt;br /&gt;
J'ai au préalable configurer chez mon hébergeur (qui n'héberge plus rien) plusieurs noms de domaine ou sous-domaine, soit en DynHost pour les Ipv4, soit en champs AAAA pour les IPv6, avec en plus un champs CAA pour Let's Encrypt:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plain&quot;&gt;chez IN CAA 128 issue &amp;quot;letsencrypt.org&amp;quot;
chez IN AAAA xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Ensuite mon routeur-firewall redirige les ports 80 et 443 vers mon serveur haproxy. En réalité c'est un peu plus compliqué que cela, aillant viré la Livebox au profit d'une VM sous Mikrotik Cloud Hosted Router qui sert de passerelle à la fois vers quelques VM et vers mon routeur domotique qui fait lui aussi passerelle vers quelques VM ! Bref, je m'y retrouve c'est l'important. Je parle de ça car par exemple pour la VM OpenVpn les port 80 et 443 passe par la VM haproxy mais les ports 993 et 1194 passe par le routeur domotique. Pour faire simple tout ce qui est port 80 et 443 est dirigé vers haproxy, peut-importe le nom de domaine devant.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plain&quot;&gt;;;; exemple simpliste en Nat qui permet de tester rapidement

;;; vers haproxy en http
/ip firewall nat chain=dstnat action=dst-nat to-addresses=10.1.5.111 to-ports=80 protocol=tcp in-interface=WAN dst-port=80 log=no log-prefix=&amp;quot;&amp;quot;
;;; vers haproxy en https
/ip firewall nat chain=dstnat action=dst-nat to-addresses=10.1.5.111 to-ports=443 protocol=tcp in-interface=WAN dst-port=443 log=no log-prefix=&amp;quot;&amp;quot;
;;; vers openvpn
/ip firewall nat chain=dstnat action=dst-nat to-addresses=10.1.10.111 to-ports=1194 protocol=udp in-interface=WAN dst-port=1194 log=no log-prefix=&amp;quot;&amp;quot;&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Ensuite haproxy gère donc la distribution des sites web en fonction du nom de domaine appelé. Il gère aussi tout les certificats SSL de ces machines, c'est très pratique et ça simplifie la création de Virtual Host ensuite. J'ai dit tous les certificat SSL ? Non. Tous sauf un, celui de OpenVpn qui est géré par la VM OpenVpn elle même car elle l'enregistre en dur dans sa base de donnée… C'est là que tout se complique dans la configuration de haproxy: &lt;strong&gt;Savoir gérer les certificats SSL de certains sites mais d'en laisser d'autres être gérés par leurs VM&lt;/strong&gt;.&lt;br /&gt;
Pour les certificats utilisés par haproxy je suis passé par Cerbot, Let's Encrypt et un petit script Bash de renouvellement et compactage.&lt;br /&gt;
Je ne vais pas expliquer comment installer une VM, haproxy, configurer un nom de domaine, etc, ce n'est pas le sujet ici qui est uniquement de me faire un mémo sur le fichier de configuration &lt;code&gt;/etc/haproxy/haproxy.cfg&lt;/code&gt;. Let's go !&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plain&quot;&gt;# Configuration valable pour haproxy 2.2.x

# Section global
global
        # Configuration des logs, de l&amp;#039;utilisateur system, des statistiques.
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket :9999 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Configuration des niveaux de certificats acceptés pour SSL.
        # Ces niveaux sont ceux de la certification A+ à juillet 2022.
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA&amp;gt;
        ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
        ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-R&amp;gt;
        ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets

# Section defaults
defaults
        # Par default on travail en layer 7 (http)
        mode    http
        option  httplog
        log     global
        option  dontlognull

        # Par default on transmet l&amp;#039;IP cliente
        option forwardfor

        # On configure divers options de timeout et d&amp;#039;erreurs
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

# Section stats
# On peut complètement enlevé les stats ce n&amp;#039;est pas nécessaire au fonctionnement du proxy.
# On écoute sur http://mon_ip:22222/haproxy?stats
listen stats
        mode http
        bind :22222
        stats enable
        stats uri            /haproxy?stats
        stats realm          Haproxy\ Statistics
        stats auth           un_utilisatuer:un_mot_de_passe
        stats refresh        30s

# Frontend HTTP
frontend frontend_http
        # On écoute sur le port 80 en IPv4 et IPv6
        bind :::80 v4v6

        # On regarde si c&amp;#039;est une vérification pour un renouvèlement de certificat dédié à OpenVpn
        acl acl_domain_openvpn hdr_end(host) -i openvpn.mondomaine.fr

        # On regarde si c&amp;#039;est une vérification pour un renouvèlement de certificat haproxy
        acl acl_letsencrypt_ha path_beg /.well-known/acme-challenge/

        # On utilise le backend spécial OpenVpn
        use_backend backend_openvpn_http if acl_domain_openvpn

        # On utilise le backend spécial Let&amp;#039;s Encrypt
        use_backend backend_letsencrypt_ha if acl_letsencrypt_ha !acl_domain_openvpn

        # On redirige tout les reste vers HTTPS
        redirect scheme https code 301 if !acl_letsencrypt_ha !acl_domain_openvpn

# Frontend HTTPS
frontend frontend_https_all
        # On écoute sur le port 443 en IPv4 et IPv6
        bind    :::443 v4v6

        # On travail en layer 4 (tcp) pour outrepasser les certificats non géré par haproxy
        mode    tcp
        tcp-request     inspect-delay 5s
        tcp-request     content accept if { req_ssl_hello_type 1 }

        # On utilise un bakcend pour OpenVpn
        use_backend     backend_proxy_https_openvpn if { req_ssl_sni -i openvpn.mondomaine.fr }

        # Sinon on utilise un backend pour haproxy
        default_backend backend_proxy_https_ha

# Backend proxy pour OpenVpn en HTTPS
backend backend_proxy_https_openvpn
        mode    tcp

        # On utilise haproxy lui-même comme serveur
        server  loopback-for-tls abns@haproxy_openvpn send-proxy-v2

# Backend proxy pour tout le reste en HTTPS
backend backend_proxy_https_ha
        mode    tcp

        # On utilise haproxy lui-même comme serveur
        server  loopback-for-tls abns@haproxy_ha send-proxy-v2

# Frontend proxy OpenVpn en HTTPS
frontend frontend_https_openvpn
        # On dit a haproxy que ça vient de lui-même
        bind    abns@haproxy_openvpn accept-proxy
        mode    tcp
        option  tcplog
        log     global
        tcp-request inspect-delay 5s
        tcp-request content accept if { req.ssl_hello_type 1 }

        # On redirige vers le backend OpenVpn sans vérifier de certificat
        use_backend backend_openvpn_https if { req.ssl_sni -i openvpn.mondomaine.fr }

frontend frontend_https_others
	# On écoute en provenence du proxy et on utilise les certificat haproxy
        bind    abns@haproxy_ha accept-proxy ssl crt /etc/haproxy/certs/ alpn h2,http/1.1

        # On nettoie et ajoute quelques entête à signaler à nos serveurs web
        http-request del-header X-Forwarded-For
        http-request add-header X-Forwarded-Proto https
        http-response set-header Strict-Transport-Security &amp;quot;max-age=16000000; includeSubDomains; preload;&amp;quot;

        # Petite astuce pour CalDav de nextcloud
        acl     acl_nextcloud_url_discovery path /.well-known/caldav /.well-known/carddav
        http-request redirect location /remote.php/dav/ code 301 if acl_nextcloud_url_discovery

        # On distribue nos noms de domaines
        use_backend backend_openvpn_https	if { hdr_end(host) -i openvpn.mondomaine.fr }
        use_backend backend_a_mondomaine_fr	if { hdr_end(host) -i a.mondomaine.fr }
        use_backend backend_b_mondomaine_fr	if { hdr_end(host) -i b.mondomaine.fr }
        use_backend backend_mondomaine_com	if { hdr_end(host) -i z.mondomaine.com }
        use_backend backend_multidom		if { hdr_reg(host) ^xyz.tld|a.xyz.tld|c.mondomaine.fr$ }

        default_backend backend_mondomain_com

# Backends
# Pour les domaines certifiés par haproxy on utilise que le port 80

# server a
backend backend_a_mondomaine_fr
    description Blablabla a.domaine.fr
    server server_a_domaine_fr 10.1.5.120:80 check

# server b
backend backend_b_mondomaine_fr
    description Blablabla b.domaine.fr
    server server_b_domaine_fr 10.1.5.121:80 check

# server c
backend backend_mondomaine_com
    description Blablabla domaine principal
    server server_b_domaine_fr 10.1.5.122:80 check

# server d
backend backend_multidom
    description Multi domaines
    server server_multidom 10.1.5.123:80 check

# Cas particuliers

# renouvelement letsencrypt certbot
backend backend_letsencrypt
        description Cerbot renew
	# On utilise le server certbot qu&amp;#039;on a crée sur le même serveur que haproxy
        server server_letsencrypt 127.0.0.1:8888

# renouvelement letsencrypt openvpn sur sa machine dédié
backend backend_openvpn_http
        description Openvpn certbot renew
        server server_openvpn_http 10.1.10.222

# server openvpn (web GUI) qui gère son propre certificat SSL
backend backend_openvpn_https
        description Openvpn web UI
        mode tcp
        option ssl-hello-chk
        server server_openvpn_https 10.1.10.222:443&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;C'est une version très simplifié de mon fichier de configuration il y a surement quelques erreurs que vous ne manquerez pas de me signaler. Et j'essayerais de mettre à jour en fonction de mes avancement en connaissance sur haproxy.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Roule ma poule</title>
        <link>https://chez.jcdenis.fr/post/2022/04/28/Roule-ma-poule</link>
        <guid isPermaLink="false">urn:md5:5e7a218a44ea539ca7b4ed0fab7a7750</guid>
        <pubDate>Thu, 28 Apr 2022 09:19:00 +0100</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>Domotique</category>
                          <category>domotique</category>
                  <category>proxmox</category>
                  <category>reboot</category>
                  <category>serveur</category>
                  <category>vm</category>
                <description>&lt;p&gt;Hier j'ai voulu changer le disque dur de mon serveur, ce qui impliquait de le réinstaller complètement. Sachant que ce serveur est utilisé comme box internet, serveur domotique, serveur de blogs, etc... Il ne fallait pas que ça foire.&lt;/p&gt; &lt;p&gt;C'est donc un peu dans le stress et profitant que la foule soit dehors, au soleil, que j'ai entrepris de changer le disque système de mon serveur (un nvme) par deux disques (ssd) configuré en raid1 (miroir) dans le bios. Sauvegarde de toutes les machines virtuelles, sauvegarde de la config du serveur (presque), ouverture du châssis 1U contenant tout le bazar, démontage du disque nvme, mise en place (jeté entre les câbles) des deux disques ssd, reboot, config bios du raid1, reboot installation de Proxmox, reboot, renommage de l'instance (node, machine, peu importe comment ça s'appelle), et de la config, reboot, récupération des sauvegardes de VMs sur le NAS, reboot, échec.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chez.jcdenis.fr/public/photos/20220416-03.jpg&quot; title=&quot;20220416-03.jpg, avr. 2022&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/photos/.20220416-03_m.jpg&quot; alt=&quot;20220416-03.jpg, avr. 2022&quot; title=&quot;20220416-03.jpg, avr. 2022&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Raa, c'était presque parfait. Juste oublié que dans la config sauvegardée il n'y avait pas les éléments de réseaux, ici 2 fibres + 2 RJ45 + LAN virtuel…&amp;nbsp; On repart pour un tour, remontage du nvme, reboot, récupération des informations oubliées, démontage du nvme, redémarrage, renseignement à la mano des interfaces réseaux, reboot et tadaaaa TOUT FONCTIONNE. Je suis épaté. J'avais même noté quelques commandes par hasard qui m'ont bien servi ! Et j'en ai également profité pour mettre à jour quelques machines virtuelles et mettre en place un backup automatiques des VMs.&lt;/p&gt;
&lt;p&gt;J'adore quand ça se passe comme ça. Entre les coupures de courant, la réinstallation du serveur, les mises à jours, ma domotique fonctionne et repart à chaque fois à merveille. Je dois avouer que le monde des machines virtuelles est vraiment pratique.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Non partagé</title>
        <link>https://chez.jcdenis.fr/post/2021/03/25/Non-partag%C3%A9</link>
        <guid isPermaLink="false">urn:md5:7d7bbc9c31da2d6dd358f8a0b3af8932</guid>
        <pubDate>Thu, 25 Mar 2021 09:42:00 +0000</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>Domotique</category>
                          <category>fibre</category>
                  <category>GPON</category>
                  <category>HSGMII</category>
                  <category>Livebox</category>
                  <category>Mikrotik</category>
                  <category>orange</category>
                  <category>routeur</category>
                  <category>SFP</category>
                  <category>vm</category>
                <description>&lt;p&gt;Dans un &lt;a href=&quot;https://chez.jcdenis.fr/post/2020/12/27/Partag%C3%A9&quot;&gt;précédent billet&lt;/a&gt; j'expliquais que mon fournisseur d'accès internet proposait une offre à 2Gpbs partagé, jouant sur les mots, en réalité 99% des gens n'avait au final que 1Gpbs, ce qui en soit est largement suffisant, mais comme toujours quand on nous propose quelque chose même inutile, on aime le vérifier.&lt;/p&gt; &lt;p&gt;Pour en revenir à l'offre Open Up elle même, Orange propose 2Gpbs en réception mais partagé, c'est à dire que si vous avez une Livebox inferieur à la 5, vous n'avez que 1Gps point barre, et oui on peut prendre l'offre Open Up sans prendre la dernière Livebox, on y reviendra. Pour la plupart de gens cela est largement suffisant pour regarder la TV, des vidéos, du surf et un peu de téléchargement, tout ça en même temps… Et de toute façon les équipements de votre maison ne savent surement pas encore dépasser cette vitesse, les switch et autres wifi grand public aillant des ports 1Gps...&lt;br /&gt;
Ensuite si vous avez la dernière Livebox, Orange à coup de bricolage à réussi à intégrer un switch permettant de partager plus de 1Gps entre chaque port de la Livebox. Chaque port Ethernet de leur boite est limité à 1Gpbs mais l'arrivé fibre elle délivre 2,5Gpbs. Le problème est que Orange a tellement intégré les composants et bridé sa box qu'il n'est quasi rien possible de faire en dehors du très basique de monsieur toutlemonde...&lt;br /&gt;
Du coup certains curieux ont eu envie de pousser un peu leur connexion et également de profiter de routage plus technique sur leur réseau interne. Je suis curieux. J'ai voulu savoir. J'ai donc commencé à chercher sur la toile si des moyens existaient, je suis d'abords tombé sur des forums étrangers ou les utilisateurs avaient la même problématique avec leur fournisseur (chose marrante le matériel avait la même provenance, historiquement, Orange) On y parlait d'arbre GPON, de SFP, de norme HSGMII, de contrôleur Broadcom, etc... Des heures de lectures, ne comprenant qu'un mots sur 10, puis je suis tombé sur un &lt;a href=&quot;https://lafibre.info/remplacer-livebox/guide-de-connexion-fibre-directement-sur-un-routeur-voire-meme-en-2gbps/&quot; hreflang=&quot;fr&quot; title=&quot;LaFibre.info&quot;&gt;sujet du forum lafibre.info&lt;/a&gt;, une mine d'or. J'ai lu, j'ai participé, j'ai appris, j'ai vaincu.&lt;br /&gt;
La solution n'est pas évidente, &lt;em&gt;quoi que facilité chez moi aillant gardé ma vieille Livebox avec ONT externe&lt;/em&gt;, et peu de gens auront envie de se lancer. Si vous n'avez pas déjà un peu de matériel cela peu couter cher, sans compter qu'il n'y a d'intérêt que si votre réseau local dépassent le gigabit.&lt;br /&gt;
&lt;a href=&quot;https://chez.jcdenis.fr/public/divers/8a58eaf8-68a0-46c5-b2ed-094dd456c555.png&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/divers/.8a58eaf8-68a0-46c5-b2ed-094dd456c555_m.png&quot; alt=&quot;&quot; style=&quot;display:table; margin:0 auto;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Bref, aujourd'hui j'ai un connexion supérieur à 2Gpbs, passant par un SFP tiers, un routeur logiciel installé sur une VM, et répartie comme bon me semble sur mon réseau interne à 10Gpbs, en IPv4 et IPv6. Sans Livebox. Orange aime compliquer la tache.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Houra</title>
        <link>https://chez.jcdenis.fr/post/2020/12/05/Houra</link>
        <guid isPermaLink="false">urn:md5:dafefefbe497eeb9ee3fc9acfb6af97e</guid>
        <pubDate>Sat, 05 Dec 2020 09:49:00 +0000</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>Portrait</category>
                          <category>apache</category>
                  <category>local</category>
                  <category>oriane</category>
                  <category>ssl</category>
                  <category>vm</category>
                  <category>web</category>
                <description>&lt;p&gt;Dois-je crier victoire ?&lt;/p&gt; &lt;p&gt;Après de multiples tentatives, de fausses victoires, de ratés et de déceptions, une fois de plus je constate que je ne suis pas un spécialiste de l'hébergement web. Je viens de passer une semaine, à coup de 5 minutes par-ci par-là, à tenter de passer mon hébergement web local en ssl et je crois que j'ai enfin réussi, en tout cas mes tentatives ont abouties sans que mes navigateurs ne couinent, c'est déjà bon signe.&lt;br /&gt;
&lt;a href=&quot;https://chez.jcdenis.fr/public/photos/20201114-10.jpg&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/photos/.20201114-10_m.jpg&quot; alt=&quot;&quot; style=&quot;display:table; margin:0 auto;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Reste à voir si il en est de même pour vous.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Local</title>
        <link>https://chez.jcdenis.fr/post/2020/11/27/Local</link>
        <guid isPermaLink="false">urn:md5:5b48646ecb936c3c4894b56b4fa93348</guid>
        <pubDate>Fri, 27 Nov 2020 21:51:00 +0000</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>Portrait</category>
                          <category>blog</category>
                  <category>jc</category>
                  <category>perso</category>
                  <category>vm</category>
                <description>&lt;p&gt;En cette période de pandémie, il faut faire travailler le commerce local... Ben je vais plutôt faire travailler personne !&lt;/p&gt; &lt;p&gt;Autrement dit, ça va être local mais tellement local que ça va rester chez moi. Mais de quoi parle-je ?&lt;br /&gt;
&lt;a href=&quot;https://chez.jcdenis.fr/public/photos/20200614-03.jpg&quot;&gt;&lt;img src=&quot;https://chez.jcdenis.fr/public/photos/.20200614-03_m.jpg&quot; alt=&quot;&quot; style=&quot;display:table; margin:0 auto;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Tout simplement de l'hébergement de ce blog. Au lieu de le faire disparaitre une fois de plus de manière volontaire, je me dis qu'en l'hébergeant chez moi il disparaitra au détour d'un bricolage hasardeux. Bref tout ça pour dire que vu qu'il me restait une pièce de libre dans mon serveur perso, je l'ai aménagé pour ce blog. &lt;br /&gt;
Si ça ne répond pas c'est que c'est tout cassé !&lt;/p&gt;</description>
        
              </item>
      </channel>
</rss>
