La domotique grand public (Google Home, Alexa) pose un problème majeur : vos données partent dans le Cloud. Si Internet coupe, plus rien ne marche. Home Assistant est la réponse souveraine. Il tourne en local, unifie toutes les marques (Philips Hue, Xiaomi, Sonoff) et permet des automatisations complexes. Voici comment le déployer proprement sous Docker.
[Image of home assistant dashboard]1. Le défi du Matériel (Clé Zigbee)
Pour piloter des objets, il vous faut une antenne. Le protocole roi est le Zigbee (utilisé par Philips, IKEA, Xiaomi). Vous aurez besoin d'une clé USB (type Sonoff Dongle-P ou ConBee II).
Le problème du nommage USB
Sous Linux, votre clé s'appelle souvent /dev/ttyUSB0. Mais si vous branchez une autre clé, au redémarrage, elle peut devenir /dev/ttyUSB1. Si cela arrive, toute votre domotique plante.
Tapez :
ls -l /dev/serial/by-id/
Vous obtiendrez un chemin unique du type :
/dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0...-if00-port0
C'est ce chemin que nous utiliserons dans Docker.
2. L'Architecture BDD (Recorder)
Par défaut, Home Assistant utilise SQLite. C'est bien pour tester, mais dès que vous aurez 20 capteurs enregistrant la température toutes les minutes, la base va gonfler et ralentir le système (voire tuer la carte SD d'un Raspberry Pi).
Nous allons connecter Home Assistant à une base MariaDB externe (dans un autre conteneur).
3. Le Docker Compose
Créez un dossier hass et votre fichier docker-compose.yml. Nous supposons ici que vous avez déjà un réseau proxy (Traefik) et une base MariaDB (voir tutos précédents).
version: '3.8'
services:
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
restart: unless-stopped
privileged: true # Nécessaire pour accéder au hardware USB
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
devices:
# Mappage de la clé Zigbee (Hôte : Conteneur)
- /dev/serial/by-id/usb-ITead_Sonoff_Zigbee...:/dev/ttyUSB0
environment:
- TZ=Europe/Paris
networks:
- default
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.hass.rule=Host(`domotique.mondomaine.fr`)"
- "traefik.http.routers.hass.entrypoints=websecure"
- "traefik.http.routers.hass.tls.certresolver=myresolver"
- "traefik.http.services.hass.loadbalancer.server.port=8123"
networks:
proxy:
external: true
4. Configuration Post-Installation
Une fois lancé (docker compose up -d), créez votre compte administrateur.
A. Connecter la Base de Données
Pour quitter SQLite, éditez le fichier config/configuration.yaml qui a été créé dans votre dossier :
# Connexion à MariaDB
recorder:
db_url: mysql://user:password@mariadb_host/homeassistant_db
purge_keep_days: 30 # Garder 30 jours d'historique
Redémarrez Home Assistant (Outils de développement > Redémarrer).
B. Reverse Proxy et Websockets
Si vous passez par Traefik, vous devez autoriser les proxies dans la configuration de Home Assistant, sinon vous aurez une erreur "400 Bad Request". Ajoutez ceci à configuration.yaml :
http:
use_x_forwarded_for: true
trusted_proxies:
- 172.0.0.0/8 # Plage IP Docker
5. L'automatisation (Le cœur du système)
C'est ici que le SysAdmin s'amuse. Home Assistant utilise le YAML pour ses scénarios. Exemple : "Si le soleil se couche ET que je suis à la maison, allumer le salon."
alias: "Allumage Salon Soir"
trigger:
- platform: sun
event: sunset
offset: "-00:30:00" # 30 min avant le coucher
condition:
- condition: state
entity_id: device_tracker.mon_iphone
state: "home"
action:
- service: light.turn_on
target:
entity_id: light.salon_principal
data:
brightness_pct: 50
transition: 5 # Allumage progressif sur 5 secondes
Conclusion
Home Assistant sous Docker est la méthode la plus robuste. Vous perdez la facilité des "Add-ons" (réservés à la version Home Assistant OS), mais vous gagnez un contrôle total sur votre infrastructure, vos sauvegardes et vos ressources système.