Home Assistant sur Box TV Android pour moins de 40 euros

Faire une installation de Home Assistant sur une smart TV assez puissante, avec assez de RAM, du stockage eMMC, le protocole zigbee, un joli boitier avec afficheur et le tout pour moins de 40 euros, tel est le pari relevé par cet article.
Home Assistant sur Box TV Android pour moins de 40 euros

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.

⚠️
Attention, la X96Max Ultra avec un soc s905x4 n'est pas pris en charge, tout comme la X96mini+ qui a un soc s905w4.

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.

X96Max+

Il vous faudra également rajouter une carte zigbee ZYZBP008, disponible également chez Aliexpress (avec ou sans antenne extérieure).

ZYZBP008 version antenne

Avant de commencer, vous devez installer ces logiciels :

Installation d'Armbian

L’installation d’Armbian sur une box Tv va se dérouler en trois étapes :

  1. Création de la clé USB ou de la SD.
  2. Installation d’Armbian sur la clé USB, SD.
  3. 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.

💡
On peut éventuellement fixer l’ip de la box dans le fichier Boot/armbian_first_run.txt.template et renommer ce fichier en armbian_first_run.txt.
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.

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.

💡
Pour la sécurité, ces box sont très proche du raspberry. Presque le même OS, même organisation des partitions, etc… Donc beaucoup de tuto fonctionnerons dessus.

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é.