Tutoriel : installer Gladys Assistant sur un Home Assistant Yellow (Zigbee interne)
Nov 7, 2026 · @XDECO
Introduction
Ce tutoriel explique comment remplacer Home Assistant OS par Gladys Assistant (sous Docker) sur un Home Assistant Yellow, en conservant la radio Zigbee intégrée à la carte. La procédure a été réalisée une fois, sur un seul Yellow : elle n’est ni officielle côté Gladys, ni côté Nabu Casa.
À lire avant de commencer :
- L’installation efface Home Assistant OS et tout le contenu du SSD. Sauvegardez ce que vous voulez garder.
- La radio Zigbee doit recevoir un firmware adapté à Zigbee2MQTT (étape 1). Faites-le depuis Home Assistant OS, avant de l’effacer.
- Dans notre test, le Wi-Fi ne fonctionne pas (firmware manquant) : branchez le Yellow en Ethernet.
- Seuls le Zigbee, l’Ethernet et le SSD NVMe ont été vérifiés. Les autres fonctions de la carte (Wi-Fi, Bluetooth, horloge, LED, bouton) n’ont pas été testées.
- Les commandes de préparation du SSD sont données pour macOS ; sous Linux ou Windows, la logique est la même.
Matériel et logiciels utilisés
Voici la configuration exacte sur laquelle la procédure a été testée.
Matériel
| Élément | Détail |
|---|---|
| Carte | Home Assistant Yellow |
| Module de calcul | Raspberry Pi CM4 Lite (sans eMMC), 8 Go de RAM, avec Wi-Fi |
| Stockage | SSD NVMe Samsung 970 EVO Plus 500 Go, dans le port M.2 du Yellow |
| Réseau | Ethernet (le Wi-Fi ne fonctionne pas dans ce montage) |
| Radio Zigbee | Radio interne Silicon Labs du Yellow, reliée au port série /dev/ttyAMA1 |
Logiciels
| Élément | Détail |
|---|---|
| Système | Raspberry Pi OS Lite 64 bits (Debian Trixie), noyau 6.18.50+rpt-rpi-v8 |
| Conteneurs | Docker et Docker Compose |
| Gladys Assistant | image gladysassistant/gladys:v5 |
| Mises à jour automatiques | Watchtower (nickfedor/watchtower) |
| Courtier MQTT | Mosquitto (eclipse-mosquitto:2) |
| Zigbee | Zigbee2MQTT (koenkk/zigbee2mqtt), adaptateur ember |
| Firmware de la radio | yellow_zigbee_ncp_7.4.4.0, installé avec le module Silicon Labs Flasher |
| Fichier de configuration matérielle | bcm2711-rpi-cm4-ha-yellow.dtb, extrait de l’image Home Assistant OS 18.4 pour Yellow |
Si votre Yellow est un CM4 avec eMMC, les étapes d’installation sur le SSD diffèrent : cette procédure ne le couvre pas.
Étape 1 : mettre le firmware Zigbee adapté sur la radio (depuis Home Assistant OS)
Zigbee2MQTT a besoin d’un firmware Zigbee “NCP” sur la radio du Yellow. Faites cette étape tant que Home Assistant OS fonctionne encore : elle repose sur un module complémentaire (add-on) qui n’existera plus après l’effacement.
- Dans Home Assistant, arrêtez tout ce qui utilise la radio (ZHA, Zigbee2MQTT, module multiprotocole), pour libérer le port série.
- Installez le module Silicon Labs Flasher depuis la boutique de modules complémentaires.
- Dans sa configuration, réglez : périphérique
/dev/ttyAMA1, débit (baudrate)115200, contrôle de flux matériel activé. Choisissez le firmware Zigbee du Yellow (yellow_zigbee_ncp_7.4.4.0). Les libellés peuvent varier selon la version du module. - Démarrez le module et lisez ses journaux. Dans notre cas il a détecté la radio, puis le flash s’est terminé avec succès.
Le firmware n’est écrit qu’une fois : il reste en place après l’effacement du SSD.
Étape 2 : récupérer le fichier de configuration matérielle du Yellow
Raspberry Pi OS ne connaît pas la carte Yellow : il faut lui fournir le fichier bcm2711-rpi-cm4-ha-yellow.dtb (device tree), qui décrit les ports série reliés à la radio. On le prend dans l’image officielle de Home Assistant OS pour Yellow.
- Téléchargez l’image
haos_yellow-<version>.img.xzsur la page des versions de Home Assistant Operating System (nous avons utilisé la 18.4), puis décompressez-la. - Montez la première partition de l’image (la partition de démarrage, au format FAT) et copiez-en le fichier
.dtb. Gardez aussi, pour référence, ses fichiersconfig.txtetcmdline.txt.
Sous macOS :
xz -d haos_yellow-18.4.img.xz
hdiutil attach -nomount haos_yellow-18.4.img
diskutil list # repérez le disque de l'image, par exemple disk4
diskutil mount readOnly /dev/disk4s1
mkdir -p ~/yellow-gladys
cp /Volumes/*/bcm2711-rpi-cm4-ha-yellow.dtb ~/yellow-gladys/
cp /Volumes/*/config.txt /Volumes/*/cmdline.txt ~/yellow-gladys/
hdiutil detach /dev/disk4
Copiez le fichier avant de détacher l’image. Adaptez le numéro de disque (disk4) à votre machine, et vérifiez avec ls /Volumes que le bon volume est monté : le caractère générique * peut en désigner plusieurs.
Sous Linux : sudo losetup -fP --show haos_yellow-18.4.img, puis montez la partition p1 du périphérique obtenu et copiez les mêmes fichiers.
Étape 3 : écrire Raspberry Pi OS Lite sur le SSD NVMe
Sortez le SSD du Yellow et branchez-le à votre ordinateur avec un boîtier ou un adaptateur USB pour NVMe. Si votre Yellow démarrait déjà sur ce SSD sous Home Assistant OS, l’ordre de démarrage du CM4 est déjà réglé pour le NVMe.
- Lancez Raspberry Pi Imager.
- Modèle de carte : Raspberry Pi 4 (le CM4 en est proche).
- Système : dans Raspberry Pi OS (other), choisissez Raspberry Pi OS Lite (64-bit). Il n’apparaît pas dans la liste principale.
- Stockage : choisissez le SSD, en vérifiant bien que c’est lui et pas un autre disque, car il sera effacé.
- Personnalisation : nom d’hôte
gladys, utilisateurpiavec un mot de passe que vous retiendrez, SSH activé, fuseau horaire et clavier à votre convenance. Désactivez Raspberry Pi Connect si l’assistant le propose. - Écrivez l’image et attendez la fin de la vérification.
Ne remettez pas encore le SSD dans le Yellow : l’étape suivante modifie sa partition de démarrage.
Étape 4 : adapter la partition de démarrage au Yellow
Après l’écriture, la partition bootfs du SSD (au format FAT) est visible sur votre ordinateur. Trois modifications suffisent. Faites d’abord une copie des fichiers d’origine.
cd /Volumes/bootfs # adaptez le chemin sous Linux ou Windows
cp config.txt config.txt.orig
cp cmdline.txt cmdline.txt.orig
cp ~/yellow-gladys/bcm2711-rpi-cm4-ha-yellow.dtb .
1. config.txt : ajoutez ces lignes à la fin du fichier.
[cm4]
device_tree=bcm2711-rpi-cm4-ha-yellow.dtb
enable_uart=1
arm_64bit=1
gpu_mem=32
2. cmdline.txt : ce fichier ne contient qu’une seule ligne. Remplacez la console série par défaut (console=serial0,115200) par console=ttyAMA2,115200n8 et ne touchez à rien d’autre, en particulier à root=PARTUUID=.... Le fichier doit rester sur une seule ligne, sans retour à la ligne au milieu.
3. Le fichier .dtb est celui copié ci-dessus : il doit se trouver à la racine de bootfs, à côté de config.txt.
Éjectez proprement le SSD, remettez-le dans le Yellow et branchez le câble Ethernet. Si le Yellow ne démarre pas, les fichiers .orig permettent de revenir à l’état d’origine pour comparer.
Étape 5 : premier démarrage, ports série et Docker
Le premier démarrage prend une à deux minutes. Connectez-vous ensuite en SSH, depuis votre ordinateur :
ssh pi@gladys.local
Si le nom gladys.local ne se résout pas, utilisez l’adresse IP du Yellow indiquée par votre box internet.
Vérifier que le fichier de configuration matérielle est bien pris en compte
ls /dev | grep -E 'tty(AMA|S|USB|ACM)'
Les ports ttyAMA0, ttyAMA1 et ttyAMA2 doivent apparaître. ttyAMA1 est celui de la radio Zigbee. S’ils sont absents, le .dtb n’est pas chargé : relisez l’étape 4.
Installer Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker pi
exit
Reconnectez-vous en SSH pour que l’appartenance au groupe docker soit prise en compte, puis testez :
docker run --rm hello-world
docker compose version
Étape 6 : installer Gladys Assistant et Watchtower
C’est l’installation Docker habituelle de Gladys, écrite sous forme de fichier Docker Compose. Créez le dossier et le fichier :
mkdir -p ~/gladys && cd ~/gladys
nano gladys-compose.yml
Contenu du fichier gladys-compose.yml :
services:
gladys:
image: gladysassistant/gladys:v5
container_name: gladys
restart: always
privileged: true
network_mode: host
cgroup: host
environment:
NODE_ENV: production
SQLITE_FILE_PATH: /var/lib/gladysassistant/gladys-production.db
SERVER_PORT: 80
TZ: Europe/Paris
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/gladysassistant:/var/lib/gladysassistant
- /dev:/dev
- /run/udev:/run/udev:ro
- /run/dbus:/run/dbus:ro
watchtower:
image: nickfedor/watchtower
container_name: watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --cleanup --include-restarting
Adaptez le fuseau horaire (TZ). Watchtower met à jour Gladys automatiquement ; nous avons utilisé l’image nickfedor/watchtower, mais une autre image Watchtower convient aussi.
Lancez le tout :
docker compose -f gladys-compose.yml up -d
docker logs --tail 20 gladys
Ouvrez ensuite http://gladys.local dans un navigateur. Si vous partez de zéro, créez votre compte. Si vous migrez une instance existante (étape 9), ne créez pas de compte ici : l’import apporte les comptes de l’ancienne instance.
Étape 7 : Mosquitto et Zigbee2MQTT sur la radio interne
Le mode “Installation depuis Gladys” de l’intégration Zigbee2MQTT est prévu pour un dongle USB, que Gladys cherche sur les ports USB. La radio du Yellow est un port série interne (/dev/ttyAMA1) : on lance donc Mosquitto et Zigbee2MQTT soi-même, puis on connecte Gladys à cette installation existante (étape 8).
mkdir -p ~/zigbee/mosquitto/config ~/zigbee/mosquitto/data ~/zigbee/z2m-data
cd ~/zigbee
~/zigbee/mosquitto/config/mosquitto.conf
listener 1883
allow_anonymous true
persistence true
persistence_location /mosquitto/data/
Cette configuration accepte les connexions sans identifiant : à réserver à un réseau local de confiance.
~/zigbee/docker-compose.yml
services:
mosquitto:
image: eclipse-mosquitto:2
container_name: mosquitto
restart: always
ports:
- "1883:1883"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
zigbee2mqtt:
image: koenkk/zigbee2mqtt
container_name: zigbee2mqtt
restart: always
depends_on:
- mosquitto
ports:
- "8080:8080"
volumes:
- ./z2m-data:/app/data
devices:
- /dev/ttyAMA1:/dev/ttyAMA1
environment:
- TZ=Europe/Paris
~/zigbee/z2m-data/configuration.yaml
version: 5
mqtt:
base_topic: zigbee2mqtt
server: mqtt://mosquitto:1883
serial:
port: /dev/ttyAMA1
adapter: ember
baudrate: 115200
rtscts: true
frontend:
enabled: true
port: 8080
advanced:
channel: 20
pan_id: GENERATE
ext_pan_id: GENERATE
network_key: GENERATE
Les points importants : l’adaptateur est ember, le débit 115200 et le contrôle de flux matériel (rtscts: true) doit être activé, comme au flash du firmware. Les valeurs GENERATE font créer à Zigbee2MQTT un identifiant et une clé réseau aléatoires au premier démarrage.
Lancez et vérifiez :
docker compose up -d
docker logs --tail 30 zigbee2mqtt
Le message RESET_WATCHDOG au démarrage de la radio est sans gravité. L’interface web de Zigbee2MQTT est ensuite sur http://gladys.local:8080.
Clé réseau : le fichier configuration.yaml contient la clé réseau Zigbee générée. Ne la publiez jamais (forum, capture, copie du fichier) : quiconque la connaît peut écouter votre réseau Zigbee. Si elle a fuité, régénérez-la avant d’associer le moindre appareil.
Étape 8 : connecter Gladys à Zigbee2MQTT et associer les appareils
Connexion
- Dans Gladys, ouvrez Intégrations, puis Zigbee2MQTT, onglet Configuration.
- Deux cartes sont proposées. Cliquez sur Choisir dans celle de droite, “Connexion à une installation existante”. Ne choisissez pas “Installation depuis Gladys” : Gladys lancerait ses propres conteneurs, qui se disputeraient la radio et le port 8080 avec les vôtres.
- Indiquez l’adresse du courtier MQTT :
mqtt://localhost:1883(Gladys étant en réseau hôte,localhostatteint Mosquitto). Sinon utilisezmqtt://<adresse IP du Yellow>:1883. Laissez l’identifiant et le mot de passe vides avec la configuration Mosquitto ci-dessus. - Si l’URL de l’interface Zigbee2MQTT est demandée :
http://<adresse IP du Yellow>:8080. - Enregistrez et vérifiez que l’intégration indique une connexion.
Associer un appareil
- Un appareil déjà associé à un autre coordinateur doit d’abord être réinitialisé (reset d’usine), sinon il ne cherche pas de nouveau réseau. Retirez-le aussi de l’ancien réseau si possible.
- Activez l’association : onglet Découverte Zigbee de Gladys, ou bouton Permit join de l’interface Zigbee2MQTT. La fenêtre dure environ quatre minutes.
- Mettez l’appareil en mode association, à un ou deux mètres du Yellow, un appareil à la fois.
- Associez d’abord les appareils alimentés sur secteur (prises, ampoules), qui renforcent le réseau, puis ceux sur pile.
- Donnez à chaque appareil un nom clair. Gladys identifie un appareil Zigbee2MQTT par son nom : en migrant, reprenez les anciens noms pour retrouver les appareils déjà présents.
Pour afficher la disponibilité et la dernière réception, dans l’interface Zigbee2MQTT : Paramètres, onglet Availability, activez Enabled ; onglet Advanced, réglez last_seen sur ISO_8601.
Compteur Linky (ZLinky_TIC), le cas échéant : dans les paramètres spécifiques de l’appareil, le mode du Linky doit correspondre à celui du compteur (historique ou standard, ou auto). Dans notre cas, le compteur est en mode historique avec un contrat Tempo, et linky_mode est réglé sur historique. Le tarif est réglé sur « Historique - BBR ». Le mode historique est compatible avec Tempo.
Étape 9 (optionnelle) : migrer une instance Gladys existante avec son historique
Cette étape reprend les données d’un Gladys installé ailleurs (ici sur un NAS Synology). Le dossier de données contient la base SQLite, la base d’historique DuckDB et les fichiers des intégrations.
Gardez l’ancienne instance arrêtée pendant et après la migration, pour que deux Gladys ne pilotent pas les mêmes appareils.
Sur l’ancien serveur
docker inspect gladys --format '{{range .Mounts}}{{.Source}} -> {{.Destination}}{{"\n"}}{{end}}'
docker stop gladys
La première commande indique le dossier de données de l’hôte (celui monté sur /var/lib/gladysassistant). Faites une copie de sauvegarde de ce dossier, puis archivez-le :
tar czf /tmp/gladys-data.tgz -C <dossier parent> gladysassistant
Sur un Synology, docker demande sudo.
Sur le Yellow
Récupérez l’archive (l’option -O de scp est nécessaire si le SFTP est désactivé sur le NAS) :
scp -O <utilisateur>@<adresse du NAS>:/tmp/gladys-data.tgz /tmp/
Puis remplacez les données vides de la nouvelle installation :
cd ~/gladys
docker compose -f gladys-compose.yml stop gladys
sudo mv /var/lib/gladysassistant /var/lib/gladysassistant.vide
sudo mkdir /var/lib/gladysassistant
sudo tar xzf /tmp/gladys-data.tgz -C /var/lib/gladysassistant --strip-components=1
sudo chmod -R u+rwX /var/lib/gladysassistant
docker compose -f gladys-compose.yml start gladys
Connectez-vous ensuite avec le compte de l’ancienne instance.
Ce qu’il reste à faire après l’import
- Les extensions (intégrations externes) tournent dans des conteneurs
gladys-ext-*qui ne sont pas recréés tous seuls : dans notre cas, il a fallu forcer la mise à jour de toutes les extensions installées, une par une : Intégrations, l’extension concernée, onglet Supervision, bouton Forcer la mise à jour. Gladys recrée alors son conteneur et elle refonctionne. Contrôlez avecdocker ps. - Les appareils Zigbee sont à réassocier au nouveau coordinateur (étape 8), avec leurs anciens noms. Gladys a bien appliqué les renommages à des appareils existants ; vérifiez sur un appareil que son historique est conservé avant de tous les refaire.
- La configuration de l’intégration Zigbee2MQTT importée pointe vers l’ancienne installation : refaites l’étape 8 après l’import.
- Arrêtez les conteneurs d’extension de l’ancien serveur et gardez sa sauvegarde plusieurs jours.
Limites connues, dépannage et sauvegarde
Limites constatées
- Wi-Fi : il ne fonctionne pas dans notre montage, le firmware de la puce Wi-Fi n’étant pas fourni pour ce device tree. Utilisez l’Ethernet.
- Autres fonctions de la carte (Bluetooth, horloge temps réel, LED, bouton) : non testées.
- Procédure testée une seule fois, sur un CM4 Lite 8 Go avec SSD NVMe.
Dépannage
| Symptôme | Piste |
|---|---|
| Le Yellow ne répond pas après le démarrage | Vérifiez le câble Ethernet et l’adresse IP dans votre box. Contrôlez le contenu de config.txt et de cmdline.txt (une seule ligne). |
Pas de ttyAMA1 |
Le .dtb n’est pas chargé : bloc [cm4] de config.txt et présence du fichier à la racine de bootfs. |
| Zigbee2MQTT ne démarre pas | Lisez docker logs zigbee2mqtt. Vérifiez adapter: ember, baudrate: 115200, rtscts: true et que le firmware NCP est bien flashé. |
| Un appareil ne s’associe pas | Réinitialisez-le, gardez “Permit join” actif, rapprochez-le du Yellow, suivez docker logs -f zigbee2mqtt. |
| Une extension Gladys n’est pas connectée | docker ps pour voir si son conteneur tourne, puis docker logs <nom du conteneur>. Testez l’accès à l’appareil depuis le conteneur (docker exec <conteneur> ping <adresse>). |
Un appareil répond au ping mais pas dans l’application |
Redémarrez-le complètement (alimentation débranchée 30 secondes) : c’est ce qui a rétabli notre boîtier AirSend. |
Contrôles après installation
docker inspect -f '{{.Name}} {{.HostConfig.RestartPolicy.Name}}' gladys zigbee2mqtt mosquitto watchtower
sudo reboot
Les quatre conteneurs doivent afficher always, et tous les conteneurs doivent être “Up” après le redémarrage (docker ps).
Sauvegarde : copiez régulièrement /var/lib/gladysassistant et ~/zigbee/z2m-data sur un autre appareil. Le second contient la clé réseau Zigbee et la liste des appareils : sans lui, il faudrait tout réassocier.
sudo tar czf ~/gladys-sauvegarde-$(date +%F).tgz /var/lib/gladysassistant zigbee/z2m-data
sudo chown $USER:$USER ~/gladys-sauvegarde-*.tgz && chmod 600 ~/gladys-sauvegarde-*.tgz
Lancez cette commande depuis votre dossier personnel et gardez l’archive en lieu sûr, car elle contient la clé réseau.
Vers un Gladys OS pour le Yellow ? Sources
Cette procédure démontre qu’un Yellow peut faire tourner Gladys sur Raspberry Pi OS, avec le Zigbee interne. Une image prête à flasher serait possible en intégrant le fichier bcm2711-rpi-cm4-ha-yellow.dtb, les trois modifications de config.txt et cmdline.txt, Docker, Gladys, Mosquitto et Zigbee2MQTT. Reste à vérifier, pour une image propre : le Wi-Fi, le Bluetooth, l’horloge temps réel et la gestion du firmware de la radio. Les retours d’autres utilisateurs de Yellow, avec un CM4 à eMMC notamment, seraient précieux.
Sources :