Sommaire
Les box TV Android sont relativement puissantes, ont assez de RAM et d'espace de stockage pour des fonctions multi-media, et sont à des prix très compétitifs.
Alors, à l'heure où les raspberry PI et autres serveurs ont vu leurs prix flamber, pourquoi ne pas détourner l'usage des Android TV pour installer Home Assistant ? En rajoutant une petite carte zigbee, vous obtiendrez alors un serveur domotique complet et opérationnel pour moins de... 40 euros ! C'est la proposition de cet article.
Prérequis
Tout d'abord il vous faut une TV box Android. Les essais ont été faits avec 2 modèles de Box TV Android TV : une X96 Mini et une X96Max+, disponible chez AliExpress.
Voici la liste des SOC compatibles.
Si vous le pouvez, nous vous conseillons la box TV X96Max+, plus puissante, disponible sur AliExpress.
Elle est également disponible sur Amazon (X96Max+), un peu plus chère mais en 32Gb.
Une RAM de 2GB et un espace de stockage eMMC de 16GB peuvent être suffisants, mais vous pouvez prendre une configuration plus musclée.
Il vous faudra également rajouter une carte zigbee ZYZBP008, disponible également chez Aliexpress (avec ou sans antenne extérieure).
Avant de commencer, vous devez installer ces logiciels :
- BalenaEtcher 60 pour créer la clé de boot.
- WinSCP 46 pour éditer les fichiers à modifier.
- Putty 31 pour faire du copier/coller des commandes.
Installation d'Armbian
L’installation d’Armbian sur une box Tv va se dérouler en trois étapes :
- Création de la clé USB ou de la SD.
- Installation d’Armbian sur la clé USB, SD.
- Installation d’Armbian sur l’eMMC de la box.
La clé crée à l’étape 2 et pleinement fonctionnelle et autonome. Elle se comporte comme un "live USB" Armbian.
Étape 1 : création de la clé
Pour la création de la clé rien de plus simple.
Télécharger une image de Armbian bulleye sur le github de ophub. Il y a un tableau sur le site github précédent qui montre la compatibilité des Soc et des versions.
- Copier l’image sur la clé avec BalenaEtcher.
Étape 2 : installation de Armbian sur la clé
L’installation de Armbian sur la clé est un peu plus complexe. Il y a deux partitions sur la clé fraichement crée une en Fat32, en Ext4. La première « BOOT » est éditable sous Windows.
Donc sous Windows on ouvre la partition « BOOT », on édite le fichier uEnv.txt et on le modifie comme ceci.
LINUX=/zImage
INITRD=/uInitrd
FDT=/dtb/amlogic/XXXXXX.XXXXXX.XXXXXXX.dtb
APPEND=root=UUID=e0c0e133-a72b-462c-9602-c616d46ef74b rootflags=data=writeback rw rootfstype=ext4 console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 max_loop=128 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
Remplacer les XXXX par le nom du .dtb de la box. Les .dbt se trouvent dans le répertoire BOOT/dtb/amlogic.
C’est pratique pour effectuer les étapes suivantes de son PC.
Ensuite, on branche la clé, l’écran, le clavier, le câble réseau sur la box.
Avec un « cure-dent » inséré dans le port AV, on branche l’alimentation. On peut retirer le « cure-dent » une fois l’image de boot affichée.
Si l’image est reconnue, après quelques secondes, on voit Armbian booter. Sinon il faut soit éditer le fichier uEnv.txt et mettre un autre .dtb et on recommence.
On suit les instructions login, mdp, etc.
À ce stade le plus dur est fait et la box n’a pas été modifiée. .
Cette clé est un super outil. Elle permet :
- de faire une image de la rom contenu dans la box.
- de monter les partitions de l’Emmc.
- de dépanner une installation qui a mal tourné.
- etc...
En gros tout ce que permet un live CD.
On récupère l’adresse IP de la box et on se connecte à l’aide de WinSCP et on ouvre Putty.
Étape 3 : Installation sur l’Emmc
Cette étape est simple, il y a juste à taper ou copier/coller avec Putty.
armbian-install
Pour la mini
armbian-install -m yes
Pour les autres
La différence est le u-boot choisi pour l’installation. Le second est bien plus rapide, mais il est incompatible avec la mini.
On répond aux questions :
110 s905w X96-Mini meson-gxl-s905w-x96-mini.dtb
--------------------------------------------------------------------------------------
111 s905x TX9 meson-gxl-s905x-tx9.dtb
112 s905l3b M302A,M304A,CM211-1,CM311-1 meson-gxl-s905l3b-m302a.dtb
113 s905l2 MGV2000,MGV3000,M301A meson-gxl-s905l2-x7-5g.dtb
114 s905l2 Wojia-TV-IPBS9505 meson-gxl-s905l2-ipbs9505.dtb
115 s905lb Q96-mini meson-gxl-s905x-p212.dtb
116 s905l3 CM311-1,HG680-LC,M401A meson-gxl-s905l2-x7-5g.dtb
117 s905l3b E900V22E meson-gxl-s905l3b-e900v22e.dtb
118 s905lb BesTV-R3300L,SumaVision-Q7 meson-gxl-s905x-p212.dtb
119 s905w X96W,FunTV,MXQ-Pro-4K meson-gxl-s905w-x96w.dtb
120 s905l3b E900V22D meson-gxl-s905l2-x7-5g.dtb
--------------------------------------------------------------------------------------
121 s905l3 UNT400G1 meson-gxl-s905l2-x7-5g.dtb
122 s905l2 E900v21E meson-gxl-s905l2-x7-5g.dtb
123 s905l3b IP103H,TY1608 meson-gxl-s905l3b-m302a.dtb
124 s905l3 CM211-1 meson-gxl-s905l3b-m302a.dtb
0 Other Customize Enter-custom-dtb-name
Taper le numéro correspondant à la box.
[ OPTIONS ] Please Input ID: 110
[ INFO ] Input Box ID: [ 110 ]
[ INFO ] FDTFILE: [ meson-gxl-s905w-x96-mini.dtb ]
[ INFO ] MAINLINE_UBOOT: [ ]
[ INFO ] BOOTLOADER_IMG: [ ]
[ INFO ] UBOOT_OVERLOAD: [ u-boot-s905x-s912.bin ]
[ INFO ] NEED_OVERLOAD: [ no ]
[ STEPS ] Start selecting file system type...
-----------------------------------------------
ID TYPE
-----------------------------------------------
1 ext4
2 btrfs
-----------------------------------------------
[ OPTIONS ] Please Input ID (1/2):
=> Taper 1
On laisse faire, une fois fini la box va s’éteindre, ou bien il y aura un message qui dira de la débrancher.
On retire la clé USB et on rebranche l’alim.
À ce stade, c'est soit 😊 ou ça 😔.
Si ça n’a pas fonctionné on reboot sur la clé usb et on réessaye.
Voila, vous avez une box tv sous Armbian (... ou pas).
L’IP de la box a changé au reboot !
Améliorations ("tweaks")
=> Désactiver le bash custom d’ophub dans etc/rc.local
#bash /etc/custom_service/start_service.sh
exit 0
=> Régler le pb netplan
Dans etc/netplan/armbian-default.yaml
network:
version: 2
renderer: NetworkManager
=> Régler le problème systemd-networkd.socket
systemctl disable systemd-networkd.socket
=> Supprimer le service inutile plymouth
apt-get autoremove plymouth
=> Nettoyer sa Debian
Repérez les fichiers de configuration « orphelins »
aptitude search ~c
Supprimer tous les Fichiers de configuration orphelins
dpkg -l | awk '$1~/^rc$/{print $2}' | xargs echo
Supprimer les dépendances devenues non nécessaires :
aptitude purge ~c
Désactiver la carte son, le module IR, etc… en les blacklistant. Le bash suivant est pour une x96max+ à adapter suivant votre box.
echo "blacklist meson_ir" > /etc/modprobe.d/meson_ir.conf ;\
echo "blacklist touch snd_soc_meson_axg_tdm_interface" > /etc/modprobe.d/snd_soc_meson_axg_tdm_interface.conf ;\
echo "blacklist snd_soc_meson_axg_tdm_formatter" > /etc/modprobe.d/snd_soc_meson_axg_tdm_formatter.conf ;\
echo "blacklist snd_soc_meson_axg_sound_card" > /etc/modprobe.d/snd_soc_meson_axg_sound_card.conf ;\
echo "blacklist blacklist snd_soc_meson_card_utils" > /etc/modprobe.d/snd_soc_meson_card_utils.conf ;\
echo "blacklist ir_nec_decoder" > /etc/modprobe.d/ir_nec_decoder.conf
Armbian possède aussi une mini interface graphique dans une cli, pour l’afficher, taper. (Je vous laisse l’explorer).
armbian-config
La commande armbian-ddbr permet de cloner l’eMMCà partir de la clé crée précédemment.
armbian-ddbr
La commande armbian-sync permet de mettre à jour les scripts.
armbian-sync
Le github de d’ophub est une vraie mine d’or pour ces box.
Installation de HA
1- Mise à jour et installation des dépendances
On commence par faire un update et installer les dépendances nécessaires.
apt-get update && apt-get upgrade -y
reboot
apt-get install \
python3-dev python3-pip \
rauc-service \
apparmor \
jq \
wget \
curl \
udisks2 \
libglib2.0-bin \
network-manager \
dbus \
lsb-release \
systemd-journal-remote -y
apt --fix-broken install
apt-get update && apt-get upgrade -y
reboot
2- Modification le boot
On modifie ensuite le fichier /boot/uEnv.txt.
Dans la dernière ligne, on supprime tous les paramètres après « net.ifnames=0 »
Et enfin, on ajoute cela à la place.
apparmor=1 security=apparmor systemd.unified_cgroup_hierarchy=false systemd.legacy_systemd_cgroup_controller=false
Le fichier Uenv.txt doit ressembler à ça :
LINUX=/zImage
INITRD=/uInitrd
FDT=/dtb/amlogic/le_nom_de_la_box.dtb
APPEND=root=UUID=le_numéro_de_votre_uuid rootflags=data=writeback rw rootfstype=ext4 console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 apparmor=1 security=apparmor systemd.unified_cgroup_hierarchy=false systemd.legacy_systemd_cgroup_controller=false
On peut voir si les arguments passent bien au kernel avec un dmesg (au début du log) s’il y a des unknown il faut adapter les arguments.
dmesg
Tu vas pouvoir voir ton boot au ralenti 🤐
3- Installation de Docker
Avant d’installer docker, on peut créer un fichier /boot/firmware/cmdline.txt. le batch d’install est fait pour un raspi. Cela évitera une erreur et on peut l’éditer après l’install, pour voir ce que le batch à ajouter à la config du raspi.
À ce stade, on peut installer docker de deux façons différentes : la méthode officielle qui nous donnera un beau « OS unsupported » ou le methode « manuelle » qui corrige ce problème.
Les deux fonctionnent parfaitement.
a. La méthode officielle
curl -fsSL get.docker.com | sh
b. Méthode « manuelle »
service openvpn stop
apt-get remove docker docker-engine docker.io containerd runc
apt-get install ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
4- Installation de Home Assistant
wget https://github.com/home-assistant/os-agent/releases/download/1.5.1/os-agent_1.5.1_linux_aarch64.deb
dpkg -i os-agent_1.5.1_linux_aarch64.deb
wget https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
dpkg -i homeassistant-supervised.deb
Choisir qemuarm-64 quand c’est demandé.
reboot
Il faut être patient à la première connexion.
En cas de problème
Si l’installation de docker ou HA s'est mal passée. Il est plus simple de repartir de zéro plutôt que de bricoler.
Pour supprimer docker, HA et tous les fichiers de configuration.
apt-get remove --purge docker* ;\
rm -rf /var/lib/docker ;\
rm -rf /etc/docker ;\
rm /etc/systemd/system/docker.service ;\
rm -f /etc/init.d/docker ;\
rm -r /usr/share/hassio ;\
apt-get autoremove && apt-get autoclean
Et on refait l’installation
Installation du module Zigbee
Le module est un ZYZBO08 de chez easyiot.tech avec ou sans antenne extérieure (IPEX ou PCB).
C’est le même module que le dongle sonoff -E, a base d’un EFR32, mais sans l’interface usb/serie. De plus il est préprogrammé avec le firmware EZSP-V8 (coordinateur).
Installation
Il va falloir le raccorder au port série sur la carte mère de la Box TV.
Sur une X96max+ (Testé : entièrement fonctionnel)
Sur la photo les antennes de wifi de la CM ont été enlevées.
Sur une X96mini (Testé : entièrement fonctionnel)
Attention au câblage, il manque des shunts entre les pistes et les pastilles (vois la photo)
On câble le 3.3v, le TX, le RX et le GND sur l’UART de la CM.
Puis il faut supprimer dans le fichier boot/uenv.txt « console=serial0,115200 » (c’est le port de débogage).
Configuration dans HA
On paramètre le port, normalement /dev/ttyAML0
Log de zigbee2mqtt avec le module reconnu.
Si il n’y pas de dialogue avec le module, il faut checker que le service Serial-getty n’a pas prit la main sur le port série.
Si c’est le cas, on le désactive.
systemctl disable serial-getty@ttyAML0.service
Conclusion
Voilà, félicitation, vous êtes au bout du tuto et vous avez réussi, tout fonctionne (enfin on espère).
Pour une quarantaine d’euros, vous vous retrouvez donc en possession d’un serveur domotique Home Assistant très complet avec sa gateway Zigbee, très compact et prêt à être utilisé.