L’idée de ce tutoriel est de regrouper un peu toutes les infos que j’ai pu trouver pour l’installation de HAOS, Z2M et MQTT sur des VM séparés au sein de Proxmox et le tout en full SSL/TLS (Lets encrypt) sur ce type de machine :
https://www.backmarket.fr/fr-fr/p/hp-prodesk-600-g3-mini-core-i5-25-ghz-ssd-256-go-ram-16-go/6d624d2f-519a-4eee-b8be-0a8787ce95dc
La séparation des différents rôles ici est que j’aime bien avoir un serveur par rôle et aussi que je souhaite pouvoir connecter à l’avenir un HAOS de test sur le serveur MQTT. Je n’ai pas encore étudié la chose par contre
-
Les sous-domaines *.xxx.local.srv-home.fr sont géré via un Adguard Home pour ma part, mais vous devrez utiliser un DNS interne afin de les gérer en local.
-
Uniquement le domaine pour se connecter à HAOS est à mettre sur le DNS Externe : toto.srv-home.fr
-
J’ai également essayé de respecter les bonnes pratiques que j’ai pu trouver sur différents sites et le forum HACF nottament pour le zigbee avec ceci :
Pour le choix du matériel :
Choix du matériel pour HA - #12 par Neuvidor
Pour les interférences (Passer sur le canal 25 et mettre son Wifi 2.4Ghz sur le canal 1 ou 6) :
[TUTO] Installation de Zigbee2mqtt et Broker Mosquitto
Improve network range and stability | Zigbee2MQTT
Pour faire Apparaitre le last seen sur HAOS :
Zigbee2MQTT : bien gérer les disponibilités de ses devices
Pour sécuriser le réseau Zigbee :
Secure your Zigbee network | Zigbee2MQTT
Ce tuto pour l’installation d’HAOS sur Proxmox
Installer Home Assistant OS avec Proxmox (VM)
Pensez également à appairer vos équipements à l’emplacement final et non juste à côté de votre émetteur.
J’utilise cette version pour la clé Zigbee :
https://www.amazon.fr/dp/B09KXTCMSC
J’étais partie sur le modèle ci dessous mais j’ai rencontré quelques petits soucis (Perte de communication au bout d’un certains temps avec les modules par exemple (Je l’utiliserai lorsqu’elle ne sera plus en experimental dans Zigbee2mqtt :
Passons aux choses sérieuses
Installation proxmox
L’installation de proxmox reste simple, il suffit d’installer la dernière version de proxmox via une clé usb ou un lecteur DVD en USB en ayant bien sur pris le soin d’y mettre l’ISO de proxmox
Concernant la partie accès en HTTPS, il faut :
- Avoir un nom de domaine (Exemple chez moi : proxmox.xxx.local.srv-home.fr)
Dans la partie ACME cliquez sur Add :
Remplir tout les champs et cliquez sur Register
Sur la partie Challenge Plugins cliquez sur Add
Vue que proxmox n’est pas censé avoir de ports ouvert depuis l’extérieur, privilégiez plutôt une méthode via DNS, voici un exemple avec infomaniak. Une fois remplie, cliquez sur OK
Ne pas oublier de modifier le mot de passe du compte root et d’activer le MFA sur ce compte.
Pour ceci, tout ce passe dans la partie permission. Ici rien de compliqué, je ne vais pas détailler
Exécutez ensuite le script Proxmox VE 7 Post Install et répondez Yes à toutes les questions.
Configuration SMTP Proxmox
Afin de pouvoir recevoir les emails de notre serveur proxmox, il est nécessaire de configurer un serveur SMTP, au moins pour les emails de backups.
Procéder en tapant les commandes suivantes : (Exemple avec Infomaniak), n’oubliez pas de modifier le serveur, le nom d’utilisateur et le mot de passe
apt install libsasl2-modules
nano /etc/postfix/sasl_passwd
mail.infomaniak.com youremail@gmail.com:votremotdepasse
postmap hash:/etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
nano /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
compatibility_level = 2
myhostname=proxmox.xxx.local.srv-home.fr
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8
inet_interfaces = loopback-only
recipient_delimiter = +
# Adding gmail compatibility
relayhost = mail.infomaniak.com:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/Entrust_Root_Certification_Authority.pem
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache
smtp_tls_session_cache_timeout = 3600s
postfix reload
apt install postfix-pcre
nano /etc/postfix/smtp_header_checks
/^From:.*/ REPLACE From: Proxmox <monemail@srv-home.fr>
postmap /etc/postfix/smtp_header_checks
nano /etc/postfix/main.cf
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = regexp:/etc/postfix/sender_canonical_maps
nano /etc/postfix/sender_canonical_maps
postmap /etc/postfix/sender_canonical_maps
Permet de faire partir tout les emails avec ce compte
/.+/ monemailemettrice@srv-home.fr
systemctl restart postfix.service
Test envoi email
echo "Email à partir de Postfix du PVE" | mail -s "Test par Postfix" monemailreceptrice@srv-home.fr
Installation HAOS en VM
Exécutez le script Home Assistant OS VM
Indiquez les paramètres que vous souhaitez mettre à la VM, personnellement j’ai laissé les paramètres par défaut
J’ai juste modifié le CPU en le passant à host et modifié le nom de la VM en haos
Redirigez les ports 80 et 443 vers votre VM depuis votre routeur/box afin d’y accéder depuis l’extérieur et permettre à Let’s Encrypt de générer/renouveler le certificat (Je ne traite pas ici la manière de faire avec les DNS car mon installation est accessible de l’extérieur).
Faites pointer un nom de domaine externe exemple toto.srv-home.fr vers l’IP de votre box/routeur au niveau des DNS public.
Suivre les étapes du 1er démarrage de HAOS et prenant bien soin d’activer également le MFA sur le compte que vous venez de créer
Installez ensuite NGINX Home Assistant SSL proxy et Let’s Encrypt depuis les modules complémentaires d’HAOS et configurer les avec le domaine toto.srv-home.fr en suivant la doc officiel
Installation Mosquitto (Mqtt)
Installer une VM sous ubuntu 22.04, mettez la complétement à jour et lancez les commandes suivantes :
***sudo apt install -y mosquitto mosquitto-clients**
**sudo systemctl enable mosquitto.service**
**sudo nano /etc/mosquitto/mosquitto.conf**
sudo mosquitto_passwd -c /etc/mosquitto/passwd z2m
**nano /etc/mosquitto/mosquitto.conf**
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
port 1883 localhost
allow_anonymous false
password_file /etc/mosquitto/passwd
tls_version tlsv1.3
listener 8883
certfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/cert.pem
cafile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/chain.pem
keyfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/privkey.pem
listener 8083
protocol websockets
certfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/cert.pem
cafile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/chain.pem
keyfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/privkey.pem
include_dir /etc/mosquitto/conf.d
Activez le SSL : (A adapter en fonction du plugin que vous utilisez pour récupérer le certificat de votre nom de domaine) Ici il s’agit d’un exemple avec infomaniak
apt install certbot
apt install python3-pip
pip install certbot-dns-infomaniak
export INFOMANIAK_API_TOKEN=xxx
certbot certonly \
--authenticator dns-infomaniak \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos \
--rsa-key-size 4096 \
-d 'mqtt.xxx.local.srv-home.fr'
Par défaut, certbot installe un service qui renouvelle périodiquement ses certificats automatiquement. Pour ce faire, la commande doit connaître la clé API, sinon elle échouera silencieusement.
Afin d’activer le renouvellement automatique de vos certificats génériques, vous devrez modifier /lib/systemd/system/certbot.service
. Ajoutez-y la ligne suivante dans Service
, en remplaçant <YOUR_API_TOKEN> par votre jeton :
Environment="INFOMANIAK_API_TOKEN=<YOUR_API_TOKEN>"
Ensuite ouvrez le fichier de config
nano /etc/letsencrypt/renewal/xxx.conf
Ajouter
renew_hook = systemctl reload mosquitto
chmod -R 755 /etc/letsencrypt/live
chmod -R 755 /etc/letsencrypt/archive
sudo systemctl restart mosquitto
Installation Zigbee2mqtt
Installer une VM sous ubuntu 22.04, mettez la complétement à jour et suivre la procédure suivante :
Voici mon fichier /opt/zigbee2mqtt/data/configuration.yaml à titre d’exemple, il faut modifier le auth_token qui vous permettra de vous connecter à l’interface web ainsi que le mot de passe de l’utilisateur z2m que l’on a mis précédemment lors de l’installation de MQTT
homeassistant: true
permit_join: true
mqtt:
base_topic: zigbee2mqtt
server: mqtts://mqtt.xxx.local.srv-home.fr:8883
user: z2m
password: achanger
keepalive: 60
reject_unauthorized: true
version: 4
include_device_information: true
serial:
port: >-
/dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0
advanced:
pan_id: GENERATE
network_key: GENERATE
channel: 25
homeassistant_legacy_entity_attributes: false
legacy_api: false
legacy_availability_payload: false
log_level: info
log_syslog:
app_name: Zigbee2MQTT
eol: /n
host: localhost
localhost: localhost
path: /dev/log
pid: process.pid
port: 514
protocol: udp4
type: '5424'
last_seen: ISO_8601
frontend:
port: 443
host: 0.0.0.0
url: https://z2m.xxx.local.srv-home.fr
ssl_cert: /etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/fullchain.pem
ssl_key: /etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/privkey.pem
auth_token: amodifier
device_options:
legacy: false
availability:
active:
timeout: 20
passive:
timeout: 360
Lorsque vous avez intégré tout vos équipements, pensez a bien passer permit_join: true à permit_join: false et à redémarrer Zigbee2mqtt
Activer le SSL : (A adapter en fonction du plugin que vous utilisez pour récupérer le certificat de votre nom de domaine) Ici il s’agit d’un exemple avec infomaniak
apt install certbot
apt install python3-pip
pip install certbot-dns-infomaniak
export INFOMANIAK_API_TOKEN=xxx
certbot certonly \
--authenticator dns-infomaniak \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos \
--rsa-key-size 4096 \
-d 'z2m.xxx.local.srv-home.fr'
Par défaut, certbot installe un service qui renouvelle périodiquement ses certificats automatiquement. Pour ce faire, la commande doit connaître la clé API, sinon elle échouera silencieusement.
Afin d’activer le renouvellement automatique de vos certificats génériques, vous devrez modifier /lib/systemd/system/certbot.service
. Ajoutez-y la ligne suivante dans Service
, en remplaçant <YOUR_API_TOKEN> par votre jeton :
Environment="INFOMANIAK_API_TOKEN=<YOUR_API_TOKEN>"
nano /etc/letsencrypt/renewal/z2m.oullins.local.srv-home.fr
Ajouter (Si vous avez une astuce pour intégrer un reload je suis preneur
renew_hook = systemctl restart zigbee2mqtt
chmod -R 755 /etc/letsencrypt/live
chmod -R 755 /etc/letsencrypt/archive
Dans le fichier /etc/systemd/system/zigbee2mqtt.service j’ai du remplacer User=pi par User=root. J’e n’ai pas trouvé de moyen de faire autrement pour le moment mais si vous avez une idée pour le faire tourner avec un utilisateur avec moins de droits, je suis preneur également
sudo systemctl restart zigbee2mqtt
Zigbee2mqtt doit être maintenant disponible à l’adresse https://z2m.xxx.local.srv-home.fr en indiquant bien le mot de passe que vous avez mis dans auth_token
Faire communiquer MQTT et HAOS
Il faut configurer l’intégration MQTT comme ceci :
Il ne vous reste plus qu’a intégrer des équipements auprès de Zigbee2Mqtt et ils devraient remonter automatiquement :
Voilà, j’espère ne rien avoir oublié car j’ai construis ce tutoriel sur les différentes notes que j’ai pu prendre tout au long de mon installation.
N’hésitez pas à me faire remonter vos remarques/suggestions/idées/problèmes afin d’améliorer ce tutoriel si vous êtes amener à vous en servir ou pas d’ailleurs
Edit 04/06/2023 : Bien configurer les disques des VM installé avec l’option Write through pour le cache
CF : Installing Home Assistant OS using Proxmox 8 - #968 by nickrout - Community Guides - Home Assistant Community
Edit 14/08/2023 : Lors de mon second jour de vacance (J’étais loin de chez moi ), j’ai eu un problème de coupures réseaux avec proxmox avec ce type d’erreur :
e1000e 0000:00:1f.6 eno1: Reset adapter unexpectedly
Application du correctif trouvé ici : e1000e:reset adapter unexpectedly | Proxmox Support Forum
apt install ethtool
ethtool -K eno1 tso off gso off gro off
Pour l’appliquer au prochain reboot
nano /etc/network/interfaces
iface eno1 inet manual
# ... existing lines
post-up /sbin/ethtool -K $IFACE tso off gso off gro off