Le prix des Raspberry Pi ayant trop augmenté pour ma bourse et leur disponibilité étant toujours incertaine, j’ai cherché des alternatives pour fabriquer des passerelles domotiques à offrir à des proches.
Aujourd’hui, je vous expose le résultat de mes recherches, qui m’ont permis d’installer des
Passerelle Zigbee inclus
En espérant que ça pourra servir à d’autres et montrer qu’il n’est pas besoin de se ruiner pour se lancer dans la domotique (moyennant tout de même quelques beaux efforts).
Ce ne sont bien sûr pas les machines les plus puissantes, mais elles sont complètement opérationnelles et stables. Elles intègrent un coordinateur Zigbee. Il vaudra tout de mieux se passer d’y installer InfluxDB et Grafana (bien que je l’aie fait « for educational purpose »).
Dans le principe, j’ai choisi de partir sur une distribution Armbian Bullseye installée sur une box TV Android chinoise qu’on trouve souvent autour de 25€, et d’y connecter un dongle Zigbee USB.
L’élément important à prendre en considération dans le choix de la box TV est le SoC (System on a Chip) qu’elle intègre.
Celui-ci doit disposer d’une version d’ Armbian adaptée, et pour des raisons évidentes de performances et de maintenabilité, d’un processeur 64 bits.
Les SoC que j’ai pu utiliser et que je peux donc conseiller sont les suivants :
- Amlogic s905w, s905l
- Rockchip rk3318 / rk3328
Il existe bien entendu des versions plus puissantes de ces SoC, mais plus chères… Ça sera à vous de décider en fonction de votre budget. L’essentiel est de bien vérifier la disponibilité d’une version d’Armbian bullseye (~debian 11) 64 bits avec un support actif au moins assuré par la communauté.
2 GB de RAM me semble également un minimum.
En ce qui concerne le coordinateur Zigbee, j’ai simplement cherché la solution la moins chère et qui avait des chances de fonctionner.
En guise de suggestion, voici un exemple de configuration matérielle qui a bien marché pour moi :
- Boîtier Android TV X96 mini 2GB RAM / 16GB emmc
- Aubess-Dongle USB sans fil Zigequation 3.0. Fonctionne avec ZHA « out of the box » (mais je préfère Zigbee2MQTT…)
A l’heure où j’écris ces lignes, l’ensemble reviendrait donc à : 26.05 + 8.66 = 34.71€ et rien de plus ! Pas d’alimentation, de dissipateur de chaleur, de boîtier, de carte SD à ajouter.
Dans les grandes lignes, voici les étapes d’installation que j’ai utilisées :
- Installation de Armbian en version bullseye arm64 (la procédure et l’image à utiliser dépendront du modèle de box TV, mais largement documenté sur le forum d’Armbian.com)
- Configuration du système (hostname, IP, Avahi, TimeZone, clavier) via l’outil
armbian-config
- Mise à jour du système :
apt update && apt full-upgrade -y
- Installation de docker-ce :
curl -fsSL https://get.docker.com/ | sh
- Installation de Portainer pour une gestion simplifiée des containers docker :
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
- Depuis Portainer, création d’un Stack pour l’installation de HA Container, Mosquitto Broker, Zigbee2MQTT, Mariadb, …etc.
Ce à quoi ressemble mon stack principal :
version: '3'
services:
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
hostname: home-assistant
volumes:
- config:/config
- ssl:/ssl
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro # ça, c'est pour un test d'intégration bluetooth à venir
restart: unless-stopped
network_mode: "host"
environment:
- TZ=Europe/Paris
depends_on:
- mariadb
mariadb:
container_name: mariadb
image: mariadb
restart: unless-stopped
ports:
- "3306:3306/tcp"
environment:
- TZ=Europe/Paris
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_HA_DATABASE}
- MYSQL_USER=${MYSQL_HA_USER}
- MYSQL_PASSWORD=${MYSQL_HA_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
- mysql_conf:/etc/mysql/conf.d
mosquitto:
image: eclipse-mosquitto
container_name: mosquitto
hostname: mosquitto
restart: unless-stopped
ports:
- 1883:1883
- 8883:8883
- 9001:9001
volumes:
- mqtt_config:/mosquitto/config
- mqtt_data:/mosquitto/data
- mqtt_log:/mosquitto/log
zigbee2mqtt:
image: koenkk/zigbee2mqtt
container_name: zigbee2mqtt
restart: unless-stopped
hostname: zigbee2mqtt
ports:
- 8088:8080
environment:
- TZ=Europe/Paris
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
volumes:
- z2m_data:/app/data
- /run/udev:/run/udev:ro
hass-configurator: # File editor à intégrer à HA sous forme de panel_iframe
container_name: hassconf
image: causticlab/hass-configurator-docker
restart: unless-stopped
ports:
- "3218:3218/tcp"
volumes:
- hassconf:/config
- config:/hass-config
depends_on:
- homeassistant
volumes:
config:
name: ha_config
ssl:
name: ha_ssl
mysql_data:
name: mysql_data
mysql_conf:
name: mysql_conf
mqtt_config:
name: mqtt_config
mqtt_data:
name: mqtt_data
mqtt_log:
name: mqtt_log
z2m_data:
name: z2m_data
hassconf:
name: hassconf
Pour l’accès depuis l’extérieur, j’ai ajouté un stack avec swag (qui intègre le reverse proxy NGinx, et certbot) et authelia pour sécuriser les accès à mes différentes interfaces de gestion avec du 2FA (TOTP) et bientôt OpenID Connect.
Bon, en espérant ne rien avoir oublié… mais je pense que le post est déjà assez long comme ça
Notes supplémentaires : L’installation de la version Supervised de HA est tout à fait possible. Je l’ai testé et tout fonctionne, mais l’installation demande une rigueur beaucoup plus grande et quelques tweaks. J’ai également pu recyclé de vieilles box TV qui traînaient dans des tiroirs avec des SoC Rockchip rk3218/rk3228/rk3228a (MXQ Pro 4k), mais les images ne sont plus maintenues et l’architecture est en 32 bits. A moins que vous en ayez déjà sous la main, privilégiez les SoC arm64 plus récents.
[Edit 10/04/2023] : En faisant des recherches sur le forum, je me suis rendu compte que le sujet avait déjà été discuté ici :