La prise NOUS A7Z fait trois choses à la fois : elle mesure la consommation de l’appareil branché, permet de l’allumer ou l’éteindre à distance, et étend la portée de ton réseau Zigbee en servant de répéteur. Voici comment l’intégrer dans Zigbee2MQTT et Home Assistant.
Préparation et branchement
La prise fonctionne sur secteur, aucune pile n’est nécessaire.
Branche-la sur une prise murale, idéalement à mi-chemin entre ton dongle Zigbee et tes capteurs les plus éloignés pour optimiser son rôle de répéteur. Une fois alimentée, la LED intégrée au bouton clignote lentement : la prise est prête à être appairée.
Appairage dans Zigbee2MQTT
Ouvre l’interface web de Zigbee2MQTT.
Clique sur Permit join (en haut à droite).
Si la LED ne clignote pas déjà rapidement, maintiens le bouton physique enfoncé environ 5 secondes jusqu’à ce qu’elle le fasse, puis relâche.
Zigbee2MQTT détecte la prise automatiquement – elle apparaît sous la marque Nous ou Tuya selon la version du firmware.
Renomme-la de façon explicite (ex : Prise Machine à Laver ou Répéteur Salon) et coche la case pour synchroniser le nom avec Home Assistant.
Rôle de répéteur dans le maillage Zigbee
Dès l’appairage effectué, la prise commence automatiquement à router le trafic Zigbee. Les capteurs à proximité peuvent s’y connecter plutôt que de joindre directement le dongle, ce qui améliore la stabilité de l’ensemble du réseau.
Laisse le réseau entre 24 et 48 heures pour se stabiliser. Tu peux ensuite visualiser les connexions dans l’onglet Schéma (Map) de Zigbee2MQTT.
Entités disponibles dans Home Assistant
La NOUS A7Z expose plusieurs entités dans Home Assistant :
switch.prise_votre_nom – allume ou éteint l’appareil branché
sensor.power – puissance instantanée en Watts (W)
sensor.energy – consommation cumulée en kWh, à ajouter dans le panneau Énergie de Home Assistant pour le suivi des coûts
sensor.current – intensité en Ampères (A)
sensor.voltage – tension en Volts (V)
Exemple : notification de fin de cycle machine
L’entité sensor.power permet de détecter automatiquement la fin d’un cycle de lave-linge ou lave-vaisselle. L’automatisation ci-dessous envoie une notification quand la puissance passe sous 3 W pendant 5 minutes consécutives – ce qui correspond à la fin du cycle.
alias: "Machine à laver : Notification fin de cycle"
trigger:
- platform: numeric_state
entity_id: sensor.prise_machine_a_laver_power
below: 3
for:
minutes: 5
condition:
- condition: state
entity_id: switch.prise_machine_a_laver
state: "on"
action:
- service: notify.mobile_app_votre_telephone
data:
title: "Domotique"
message: "La machine à laver a terminé, tu peux étendre le linge !"
Remplace sensor.prise_machine_a_laver_power et switch.prise_machine_a_laver par les noms exacts de tes entités dans Home Assistant, et mobile_app_votre_telephone par le nom de ton application mobile.
Article de la série « Mon ordinateur Ubuntu » Actions et articles créés avec l’aide de Claude.ai et 100% testé et ajusté par moi.
Tu veux piloter une ampoule, une télécommande ou un capteur Zigbee depuis Home Assistant ? Ce tutoriel te guide pas à pas pour mettre en place la chaîne complète : Mosquitto comme broker MQTT, Zigbee2MQTT comme passerelle, et Home Assistant comme cerveau de ta domotique.
Ce que tu vas mettre en place
Les appareils Zigbee ne parlent pas directement à Home Assistant. Il faut une chaîne de traduction :
Le dongle Zigbee reçoit les messages de tes appareils Zigbee
Zigbee2MQTT traduit ces messages en MQTT
Mosquitto joue le rôle de boîte aux lettres : il reçoit et redistribue les messages MQTT
Home Assistant lit ces messages et crée automatiquement les entités correspondantes
Chaque composant est installé comme un container Docker, selon le même protocole que les autres services de ta stack.
allow_anonymous true permet la connexion sans authentification. Ce n’est pas un problème car le port 1883 n’est pas exposé vers l’extérieur – il reste confiné au réseau local.
Créer la stack dans Portainer
Dans Portainer, crée une stack « mosquitto » avec ce YAML :
Dans Portainer, crée une stack « zigbee2mqtt » avec ce YAML. Remplace IDENTIFIANT_DU_DONGLE par le nom exact récupéré à l’étape 1, et PORT_EXTERNE par le port disponible identifié à l’étape 2 (8080 ou 8081) :
Point critique : la ligne devices: doit contenir le chemin exact du dongle. C’est le point le plus sensible de l’installation.
Sauvegarder le YAML
sudo nano /home/USER/docker/zigbee2mqtt/docker-compose.yml
# coller le YAML
sudo chown USER:USER/home/ald/docker/zigbee2mqtt/docker-compose.yml
Après démarrage, Zigbee2MQTT est accessible via http://IP_DU_PC:PORT_EXTERNE. Une page d’onboarding s’affiche – c’est normal, c’est le premier démarrage.
Compléter l’onboarding
Sur la page d’onboarding, sélectionne ton dongle dans la liste « Devices found » et clique sur Submit sans modifier les autres valeurs. Zigbee2MQTT génère alors automatiquement sa configuration.
Modifier le fichier de configuration
Après l’onboarding, modifie le fichier de configuration généré :
Apporte ces modifications, sans toucher au reste (network_key, pan_id, channel…) :
Ligne à trouver
Remplacer par
server: mqtt://localhost:1883
server: mqtt://IP_DU_PC:1883
serial: {}
serial: port: /dev/ttyACM0
frontend: enabled: false
frontend: enabled: true
homeassistant: enabled: false
homeassistant: enabled: true
onboarding: true
onboarding: false
Redémarre le container depuis Portainer. Vérifie les logs :
sudo docker logs zigbee2mqtt
Tu dois voir Zigbee2MQTT started! et Connected to MQTT server.
Étape 5 – Connecter Home Assistant à MQTT
Dans Home Assistant : Paramètres > Appareils et services > Ajouter une intégration > MQTT
Remplis les champs :
Broker : IP_DU_PC
Port : 1883
Nom d’utilisateur et mot de passe : laisser vides
Clique sur Valider. Si la connexion réussit, l’intégration MQTT apparaît dans ta liste de services.
Zigbee2MQTT et Home Assistant se découvrent alors automatiquement via MQTT Discovery.
Étape 6 – Appairer un premier appareil pour vérifier
C’est le test de tout ce qui précède ! Dans l’interface Zigbee2MQTT (http://IP_DU_PC:PORT_EXTERNE) :
Clique sur Autoriser l’appairage – le mode appairage est actif pendant 3 minutes
Mets ton appareil en mode appairage selon la procédure du fabricant (pour une ampoule Lidl : allumer et éteindre rapidement 3 fois)
L’appareil apparaît dans Zigbee2MQTT
Va ensuite dans Home Assistant : Paramètres > Appareils et services > MQTT. Ton appareil doit être visible et contrôlable.
Note sur les ampoules Zigbee : une ampoule Zigbee doit rester alimentée en permanence pour rester joignable sur le réseau. Si tu coupes le courant via l’interrupteur mural, elle disparaît du réseau. La bonne pratique est de ne plus utiliser l’interrupteur physique et de contrôler l’ampoule uniquement via Home Assistant ou une télécommande Zigbee.
Ce que tu as maintenant
Un broker MQTT (Mosquitto) qui tourne en container Docker
Une passerelle Zigbee (Zigbee2MQTT) connectée à ton dongle et à Mosquitto
Home Assistant qui découvre automatiquement tous tes appareils Zigbee
Une base solide pour ajouter d’autres appareils : capteurs de température, détecteurs d’ouverture, interrupteurs Zigbee…
La prochaine étape : créer des automatisations pour que tes appareils Zigbee travaillent ensemble.
Il y avait une promo dans ma grande surface locale et La caméra Avidsen HomeCam 3PTZ (réf. 127165) était à 29.90 €. Je me suis dit que c’était l’occasion de tester l’utilisation d’une caméra de surveillance chez moi. Cette caméra est compatible avec l’écosystème Tuya. En passant par l’application Smart Life plutôt que l’app Avidsen native, tu peux l’intégrer directement dans Home Assistant et centraliser sa gestion avec le reste de ta domotique.
Ce qu’il te faut
La caméra Avidsen HomeCam 3PTZ
Une prise de courant à proximité et un réseau Wi-Fi 2,4 GHz
Un smartphone avec l’application Smart Life (Tuya)
Un ordinateur pour créer le compte développeur Tuya
Une instance Home Assistant fonctionnelle
Optionnel : une carte microSD classe 10 (ou U3), de préférence certifiée « Endurance », pour l’enregistrement local. Les caméras de sécurité réécrivent en boucle et usent rapidement les cartes standard.
1. Installer Smart Life et connecter la caméra
Télécharge l’application Tuya Smart Life sur ton smartphone. Crée un compte, puis ajoute la caméra en suivant les instructions de l’app : elle te demandera le mot de passe de ton Wi-Fi 2,4 GHz. Une fois connectée, tu peux piloter la caméra depuis n’importe où via l’application.
Utilise Smart Life plutôt que l’application Avidsen : elle offre plus de fonctionnalités et surtout elle est compatible avec Home Assistant.
2. Créer un compte développeur Tuya IoT
Depuis les dernières versions de Home Assistant, l’intégration Tuya officielle nécessite un compte développeur gratuit.
Crée un compte – utilise le même pays que celui configuré dans Smart Life.
Une fois connecté, va dans Cloud > Cloud Project > Cloud Project Management, puis clique sur Next.
Remplis le formulaire :
Project Name : Home Assistant
Industry : Smart Home
Development Method : Smart Home
Data Center : Central Europe Data Center (pour la France)
Clique sur Create, puis sur la page suivante laisse les API par défaut et clique sur Authorize.
3. Récupérer tes identifiants et lier Smart Life au projet
Sur la page de ton projet (onglet Overview), note ces deux informations – tu en auras besoin plus tard :
Access ID / Client ID
Access Secret / Client Secret
Ensuite, lie ton application Smart Life au projet :
Dans ton projet, clique sur l’onglet Devices, puis sur Link Tuya App Account.
Clique sur Add App Account – un QR code s’affiche.
Sur ton smartphone, ouvre Smart Life, tape sur le « + » en haut à droite, puis sur Scanner.
Scanne le QR code affiché sur ton ordinateur et valide sur le téléphone. Pour faire ça, il faut que tu ouvres l’application Smart Life dans ton téléphone. Tu te mets sur l’onglet Accueil (l’icône de maison en bas à gauche). Clique sur le petit bouton « + » tout en haut à droite de l’écran : un petit menu déroulant va s’ouvrir. clique sur l’icône de Scanner de QR Code.
Ta caméra apparaît maintenant dans la liste des appareils de la plateforme Tuya.
4. Activer l’intégration dans Home Assistant
Dans Home Assistant, va dans Paramètres > Appareils et services.
Clique sur Ajouter l’intégration et cherche Tuya.
Remplis le formulaire avec ton Access ID, ton Access Secret, et ton code utilisateur Smart Life.
Le code utilisateur se trouve dans l’app Smart Life : icône hexagone en haut à droite > Compte et Sécurité > Code Utilisateur. C’est un code court, respecte bien la casse.
Valide, scanne le QR code qui s’affiche, et confirme à nouveau.
Home Assistant importe automatiquement ta caméra. Tu peux accéder au flux vidéo et aux réglages directement depuis ton tableau de bord.
Pour aller plus loin
Contrôle PTZ depuis Home Assistant L’intégration Tuya affiche le flux vidéo mais ne crée pas toujours les contrôles de rotation. Tu peux y remédier avec des scripts YAML ou en installant la carte WebRTC Camera via HACS.
Alertes et notifications Avec l’application Home Assistant Companion sur ton téléphone, tu peux créer une automatisation YAML qui se déclenche sur détection de mouvement ou de son – et envoie une notification actionnable directement sur ton mobile.
Enregistrement vidéo La carte microSD gérée par Smart Life reste la solution la plus fiable pour l’enregistrement continu ou sur détection, en haute définition. Home Assistant gère les alertes ; Smart Life gère l’historique vidéo.
Ubuntu propose un outil officiel pour passer d’une version à la suivante sans tout effacer. Ce guide te montre comment faire, étape par étape, depuis le terminal.
Étape 1 : Sauvegarder tes données (recommandé)
Avant toute mise à niveau majeure du système, sauvegarde tes fichiers importants – documents, photos, fichiers de configuration – sur un disque externe ou dans le cloud.
Étape 2 : Mettre à jour le système actuel
Ta version actuelle d’Ubuntu doit être totalement à jour avant de lancer la mise à niveau.
Ouvre ton terminal (Ctrl + Alt + T) et lance cette commande :
apt update : actualise la liste des paquets disponibles (un « paquet », c’est l’équivalent d’une application ou d’un composant système sous Linux).
dist-upgrade : installe les mises à jour en gérant intelligemment les changements de dépendances (les dépendances, ce sont les composants dont un logiciel a besoin pour fonctionner).
autoremove : supprime les anciens paquets devenus inutiles.
Une fois terminé, redémarre ton ordinateur pour appliquer les changements – notamment si le noyau Linux (le coeur du système) a été mis à jour :
sudo reboot
Étape 3 : Configurer le type de mise à niveau souhaité
Ubuntu doit savoir quel type de version tu recherches. Ouvre le fichier de configuration avec cette commande :
sudo nano /etc/update-manager/release-upgrades
Repère la ligne qui commence par Prompt=. Tu as deux options :
Prompt=lts – recommandé
Te met à jour uniquement vers la prochaine version LTS (Long Term Support, support à long terme). Par exemple, de la 22.04 LTS à la 24.04 LTS, soit un changement tous les 2 ans environ.
Sécurité : maximale, tu reçois toutes les mises à jour de sécurité pour ta version actuelle.
Stabilité : maximale, tu changes de version du système rarement, ce qui réduit le risque de casser tes logiciels ou ta configuration.
Prompt=normal
Te propose toutes les versions stables, y compris les versions intermédiaires sorties tous les 6 mois.
Tu seras obligé de faire une mise à niveau majeure tous les 6 mois, car ces versions intermédiaires ne sont maintenues que pendant 9 mois. Passé ce délai, tu te retrouves avec un système obsolète et non sécurisé.
Changer de version deux fois par an augmente le risque de rencontrer des bugs ou des incompatibilités matérielles.
Modifie si nécessaire, puis sauvegarde avec Ctrl + O (puis Entrée) et quitte avec Ctrl + X.
Étape 4 : Lancer la mise à niveau
Maintenant que tout est prêt, lance l’outil officiel de mise à niveau d’Ubuntu :
sudo do-release-upgrade
Si aucune mise à niveau n’est détectée
Les versions LTS ne proposent parfois la mise à jour automatique qu’après la sortie de leur première version corrective (par exemple, la 24.04.1 plutôt que la 24.04). Dans ce cas, tu peux forcer la recherche avec l’option -d :
sudo do-release-upgrade -d
⚠️ Attention : l’option -d donne accès aux versions en accès anticipé, pas encore totalement stabilisées. À n’utiliser que si tu sais ce que tu fais et que tu as bien sauvegardé tes données au préalable.
Étape 5 : Suivre le processus et patienter
Le terminal t’affiche un résumé des changements prévus – paquets à installer, paquets à supprimer, taille du téléchargement – et te demande de confirmer avec o (pour Oui).
Pendant tout le processus :
Ne ferme pas le terminal.
Ne coupe pas ta connexion internet.
Si le système te demande si tu veux conserver tes fichiers de configuration modifiés ou installer les versions des nouveaux paquets, appuie sur Entrée pour garder le choix par défaut – c’est généralement la bonne option.
Cas particulier : connexion à distance via SSH
Si tu gères l’ordinateur à distance via SSH, do-release-upgrade ouvre automatiquement un port de secours (généralement le port 1022) en cas de coupure de connexion. Suis simplement les instructions affichées à l’écran.
Une fois le processus terminé, le terminal t’invite à redémarrer. Tu peux ensuite vérifier ta nouvelle version avec :
bash
lsb_release -a
Félicitations, tu es sur la nouvelle version stable d’Ubuntu !
Environnement cible : un ordinateur Ubuntu sur lequel sont installés Nginx Reverse Proxy (NPM), Portainer, Home Assistant et Stirling PDF. Tout est déployé sous forme de containers Docker avec des chemins absolus (Bind Mounts), sans volumes nommés. Stirling PDF et Home Assistant sont accessibles via des URL externes, ce qui impose une sécurisation rigoureuse.
L’objectif est d’ajouter Fail2Ban pour passer d’une sécurité passive (certificats Let’s Encrypt) à une sécurité active.
Qu’est-ce que Fail2Ban ?
Les certificats Let’s Encrypt garantissent que la connexion est chiffrée (personne ne peut lire ce qui transite). Fail2Ban agit comme un videur à l’entrée.
Contre les attaques par brute force – sa mission principale. Si quelqu’un tente de deviner un mot de passe sur une page d’authentification, Fail2Ban détecte les échecs répétés dans les logs et bannit l’IP au niveau du pare-feu (iptables).
Contre les bots de scan (DoS léger) – il bloque les robots qui scannent le serveur trop rapidement à la recherche de vulnérabilités.
Contre la recherche de fichiers sensibles – il bannit les IPs qui tentent d’accéder à des dossiers inexistants mais critiques (.env, wp-config.php, /admin).
Résumé : HTTPS garantit que le tuyau est sécurisé, mais pas que la personne au bout du tuyau est autorisée à entrer. Le HTTPS empêche l’espionnage sur le Wi-Fi public. Fail2Ban empêche l’attaquant de frapper 10 000 fois à la porte.
Vérifier le format des logs NPM (étape préalable)
Avant toute configuration, il faut s’assurer que NPM enregistre les vraies IPs publiques des visiteurs dans ses logs, et non l’IP interne du réseau Docker.
Commande de vérification – ouvre un terminal sur Ubuntu et inspecte un fichier de log :
cat /home/USER/docker/nginx-proxy-manager/data/logs/proxy-host-1_access.log | head -20
Cherche le champ [Client X.X.X.X] dans chaque ligne de log.
✓ Si tu vois des IPs publiques (ex: 205.210.x.x, 45.84.x.x) dans [Client …] : NPM transmet déjà les bonnes IPs, aucune configuration supplémentaire n’est nécessaire.
⚠ Si tu vois des IPs internes Docker (ex: 172.18.x.x) dans [Client …] : Fail2Ban sera inefficace et risque de bannir ta passerelle Docker. Ajoute les proxy_set_header dans l’onglet Advanced de chaque Proxy Host dans NPM (voir ci-dessous).
Note importante sur les IPs dans les logs NPM – le champ [Sent-to X.X.X.X] contient l’IP interne de ta machine Linux (destination du trafic) : c’est normal. Le champ [Client X.X.X.X] est la seule IP qui compte pour Fail2Ban (source du trafic entrant).
Si les IPs internes sont présentes – configuration dans NPM – dans l’interface NPM, pour chaque Proxy Host (Stirling PDF, Home Assistant…), onglet Advanced, zone Custom Nginx Configuration, ajoute :
Pourquoi network_mode: host ? En mode host, Fail2Ban partage la pile réseau de la machine Ubuntu. C’est indispensable pour qu’il voie les vraies IPs sources et puisse agir sur iptables.
Pourquoi monter les logs dans /data/nginx/logs ? L’image crazymax/fail2ban a un système de fichiers en lecture seule dans certains répertoires comme /var/log/nginx. Monter les logs dans /data/nginx/logs (qui est le volume /data accessible en écriture) évite cette erreur au démarrage.
Structure des dossiers de configuration
L’image crazymax/fail2ban attend ses fichiers de configuration dans /data/ (dans le conteneur), ce qui correspond à /home/USER/docker/fail2ban/ sur Ubuntu.
Avant de déployer, crée la structure manuellement :
⚠ Ne crée pas de sous-dossier ‘config/’ ou ‘data/’ supplémentaire. Les dossiers action.d, filter.d et jail.d doivent être directement dans /home/USER/docker/fail2ban/.
Note sur les permissions – si les dossiers ont été créés par Docker (au premier démarrage du conteneur), ils appartiennent à root. Utilise sudo pour créer les fichiers, ou reprends la propriété du dossier :
[DEFAULT]
# Temps de bannissement (1h)
bantime = 1h
# Fenetre d'observation (10 min)
findtime = 10m
# Nombre d'erreurs avant bannissement
maxretry = 5
# Action : utilise le fichier docker-action.conf
action = docker-action
# --- JAIL POUR AUTHENTIFICATION NGINX ---
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
# Surveille les logs d'erreur de NPM
logpath = /data/nginx/logs/proxy-host-*_error.log
# --- JAIL ANTI-BOTS (erreurs 404/401/403) ---
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /data/nginx/logs/proxy-host-*_access.log
# Plus severe : 30 erreurs en 1 minute = banni 24h
maxretry = 30
findtime = 1m
bantime = 24h
Fichier filter.d/nginx-404.conf
Ce filtre indique à Fail2Ban quoi chercher dans les logs d’accès. Le format des logs NPM est différent du format Nginx standard – le regex doit en tenir compte.
[Definition]
# Regex adapte au format de log NPM (champ [Client X.X.X.X])
failregex = ^\[.*\] - \d+ \d+ - \w+ https? \S+ "\S+" \[Client <HOST>\] .*(404|401|403)
ignoreregex =
Le marqueur <HOST> est la variable Fail2Ban qui capture l’adresse IP – elle correspond au contenu du champ [Client …] dans les logs NPM.
ignoreregex = avec rien après le signe égal signifie « aucune ligne à ignorer ». Cette ligne doit être présente même vide, sinon Fail2Ban peut générer une erreur au démarrage.
Déploiement dans Portainer
Dans Portainer, clique sur ton environnement « local », puis va dans l’onglet « Stacks » à gauche.
Clique sur le bouton « + Add stack ».
Donne-lui un nom : fail2ban.
Dans la zone « Web editor », copie et colle le contenu du docker-compose.yml.
Clique sur « Deploy the stack ». Docker télécharge l’image (1 à 2 minutes selon la connexion).
Une fois la stack déployée, vérifie que le fichier fail2ban.log a bien été créé dans /home/USER/docker/fail2ban/. S’il n’apparaît pas, c’est souvent une question de permissions (le conteneur doit avoir le droit d’écrire dans ce dossier).
Vérification
Étape 1 – Vérifier que les logs sont accessibles
Ouvre un terminal sur Ubuntu et tape :
docker exec -it fail2ban ls /data/nginx/logs
✓ Si tu vois la liste de tes fichiers .log (en particulier proxy-host-*_access.log et proxy-host-*_error.log), le pont entre Fail2Ban et les logs NPM fonctionne.
Étape 2 – Vérifier les jails actives
Dans Portainer, ouvre la console (Exec) du conteneur fail2ban et tape :
fail2ban-client status
✓ Tu dois voir apparaître deux jails : nginx-http-auth et nginx-404. C’est bien le cas pour moi :
Résumé des sources de logs
Type de log
Chemin dans logpath
Ce qu’il contient
Erreurs d’authentification
/data/nginx/logs/proxy-host-*_error.log
Tentatives de mots de passe ratés
Visites (404/401/403)
/data/nginx/logs/proxy-host-*_access.log
Bots cherchant des fichiers inexistants
Log Fail2Ban
/data/fail2ban.log
Correspond au volume /home/USER/docker/fail2ban:/data
Commandes utiles
Supervision
Status général des jails :
docker exec -t fail2ban fail2ban-client status
Status détaillé d’une jail (ex: nginx-404) :
docker exec -t fail2ban fail2ban-client status nginx-404
Commentaires récents