: new article
All checks were successful
release / build (push) Successful in 8s

This commit is contained in:
VC
2025-08-19 13:13:01 +02:00
parent 44c87ab842
commit a94b35ff2f
4 changed files with 129 additions and 0 deletions

View File

@@ -0,0 +1,129 @@
+++
title = "Home Assistant: Projet Consonance, lavant-boutique"
date = 2025-08-19
[taxonomies]
tags = [ "système", "home assistant", "infrarouge", "logitech harmony", "consonance" ]
+++
![Aquaman Meme, en haut Frontend, en bas Backend](/2025/08/aquaman.jpg)
<!-- more -->
# Dis à Tiny Tim que son papa ne rentrera pas pour Noël
Juste une petite note avant de commencer. Je pensais que le hub serait quelque chose qui marche bien. Et bien, je me trompais. **Ça marche putain de sa grand-mère bien**.
Comme le hub est fixe dans la pièce, il peut vraiment être placé de manière ultra optimale. Et ce que jai réalisé (et que je ne comprends toujours pas vraiment dans les faits), cest que finalement ce placement pouvait être pas mal au pif. Mon lecteur de Laserdisc est à pratiquement un mètre, sur la droite du hub, dans meuble presque fermé et ça marche quand même!
Je trouve ça assez ouf dans le principe. Jai vraiment limpression que ça joue sur des rebonds ou quelque chose de ce goût-là. Et ça rend lensemble hyper fiable et limite très largement le recours aux commandes isolées ou au bouton *Help* comme on pouvait lavoir avec une Harmony. Cest simple, ça ne foire quasiment jamais.
# Dis à Scarlett que cest le cadet de mes soucis
Donc résumé de lépisode précédent: on a un hub, on a des scripts et on a pu tester lensemble. Ça marche plutôt pas mal mais ça ne permet pas davoir des boutons spécifiques à certaines activités ou dinteragir directement au cours dune activité (pour mettre à pause, baisser le son, etc…).
Je vais donc tenter de décrire une ou deux activités types pour montrer à quel point cest important et quest-ce qui a guidé mes réflexions sur lergonomie de la solution retenue (qui est labsence de solution en fait, mais on verra ça plus tard).
## Description des activités
Je vais essayer de ne pas te barber, mais voici quelques constats que jai fait quand jai regardé les activités que javais sur la télécommande Harmony:
* toutes les activités utilisent systématiquement les enceintes: écouter un vynil ne nécessite pas la TV mais utilisent les enceintes, toutes les autres activités (JV, Blu-Ray, etc…) utilisent aussi mécaniquement les enceintes;
* quasiment toutes les activités utilisent la TV, mais une fois que lentrée est réglée, seule lactivité «Regarder la TV» utilisent les touches de la TV (pour changer de chaîne, etc…)
De ces deux points, on peut tirer quelques évidences:
* pouvoir contrôler le son (volume +, volume -, muet) est primordial pour toutes les activités;
* comme on ne peut pas passer dune activité à lautre, le bouton pour éteindre doit aussi être tout le temps visible.
Le reste a demandé un peu plus dinvestigation, notamment pour déterminer un certain nombre de stéréotypes de commandes. Typiquement:
* les lecteurs de média de manière générale (Kodi, lecteur Blu-Ray, lecteur de Laserdiscs) ont souvent un cluster de commandes de lecture qui sont à peu près toutes les mêmes: lecture, pause, avance, arrière, suivant, précédent, etc…
* quasiment toutes les activités nécessitent un cluster de navigation: haut, bas, gauche, droite, confirmer, retour, menu, info, etc…
* lactivité «Regarder la TV» elle-même contient des commandes quasi-uniques: chaîne suivante, chaîne précédente et le pavé numérique.
De ces trois points, on peut de nouveau faire quelques déductions:
* on peut parfaitement se passer dun pavé numérique: une seule activité lutilise vraiment, néanmoins, ça donne pas mal de boutons supplémentaires (et numérotés qui plus est) pour faire dautres choses, on y reviendra;
* le cluster de commandes média sont généralement assez mal foutues sur les vraies télécommandes: mon lecteur de laserdiscs na quune seule commande pour Lecture et Pause alors que mon lecteur Blu-Ray a une touche pour Lecture et une touche pour Pause;
* le cluster de commandes média doit contenir une touche Éjecter qui est rarement présente sur les télécommandes universelles (Logitech Harmony comprise!);
* le cluster de navigation est quasi obligatoire pour la moindre activité, et fort heureusement les touches sont relativement simples à implémenter.
Ça donne quelques perspectives intéressantes sur le design moderne des télécommandes. La mode semble être à la télécommande assez minimaliste, mais il y a toujours un bouton lecture/pause, des boutons pour le volume (sils sont marqués intelligemment, ils peuvent aussi faire suivant/précédent) et un cluster de navigation. Cest vraiment le strict minimum pour les média modernes.
Mais le manque daccès direct à certaines fonctions est quand même, à mon sens, relativement gênant. Même sans lire un CD, quand on écoute de la musique comment savoir si droite correspond à passer 10 secondes ou à passer au morceau suivant?
Encore une fois, lapproche est intéressante mais trop limitée.
# Première tentative
Partant de cela, ma première idée a été de me dire quil suffirait de prendre un petit écran tactile dédié. Ça ressemble à ça et ça coûte entre 15 et 20 balles sur AliExpress:
![ESP32 avec écran tactile](/2025/08/esp32_tactile.webp)
Tous ces petits modules sont construits sur une base ESP32 et ça tombe drôlement bien parce quil existe un module côté Home Assistant qui permet de configurer un ESP32, y compris les boutons, lécran tactile et les éventuels capteurs, tout ça dans un YAML plus ou moins compréhensible. Il sagit d[ESPHome](https://esphome.io/) et il dispose même des composants nécessaires pour construire des interfaces graphiques via [LVGL](https://esphome.io/components/lvgl/index.html).
Et mine de rien, et bah ça marche pas mal. Alors, il y a quelques pièges à éviter bien sûr mais en saccrochant un peu et en utilisant quelques astuces de YAML (notamment en abusant des *anchors* YAML), on peut obtenir une interface utilisateur tout-à-fait agréable à utiliser.
Mon idée de base étant quon ne peut pas passer dune activité à lautre, jai donc fait un système assez simple:
* la page daccueil contient un bouton par activité (10 au total)
* quand on clique sur le bouton en question, ça lance le script correspondant côté Home Assistant et ça affiche la page spécifique à lactivité
* sur cette page, le bouton Éteindre est toujours disponible, lance le script dextinction et revient à la page principale
* toujours sur cette page, les boutons de volume sont disponibles en permanence en haut de lécran (et cest un vilain *anchor* YAML bien crade)
* chaque touche après ça envoie directement une commande Home Assistant avec la bonne commande IR derrière
Cest relativement chiant à construire parce quil y a quand même beaucoup de boutons (8 pour un cluster média, 10 pour un pavé numérique, etc…) et quon ne peut pas vraiment «programmer»: il faut obligatoirement tout assigner à la main. Encore une fois, avec des morceaux d*anchors* YAML, on sen sort, mais cest loin dêtre confort.
Et du coup, ça se présente comme ça:
![](static/2025/08/esp32_tactile_activity.mp4)
Et si comme moi, tu tes posé la question: non, je nai pas trouvé démulateur correct pour ce truc. Jaurais bien testé sans acheter de matériel, mais malheureusement, ça na pas été possible.
Tout est évidemment disponible [](https://giteu.be/home_assitant/consonance/src/branch/main/esphome/esp32cc.yaml) si tu veux y jeter un œil. Il y a quelques astuces à connaître, mais au final, quand on a compris comment fonctionne ESPHome, ça va relativement vite à construire.
# Évaluation de lensemble
Cest pas tout de construire un frontend, encore faut-il léprouver.
Et donc, ça marche dans lensemble pas trop mal. Avec un peu dexpérience, on se rend vite compte quil vaut mieux utiliser le widget [button matrix](https://esphome.io/components/lvgl/widgets.html#buttonmatrix) plutôt que des boutons à placer. On finit par comprendre la logique pour placer des boutons les uns par rapport aux autres, etc… Ça ressemble beaucoup à du CSS au final, où lon place les choses les unes par rapport aux autres et on indique des centrages, des tailles, des tailles relatives, etc…
Sincèrement, je trouve que le système, même sil nest pas parfait, permet quand même de faire des choses assez impressionantes. LVGL permet vraiment de construire des interfaces relativement complexes avec des onglets, des pages, des boutons, des visualiseurs, etc… Jimagine quon pourrait très facilement y faire de petites interfaces de contrôle pour le chauffage, pour un EVSE ou plein dautres choses.
Mais est-ce que ça marche correctement pour une télécommande? Et bien, fonctionnellement, cest pas mal: ça donne une interface quon peut personnaliser très facilement et avoir un truc assez minimaliste pour certaines activités et très chargé pour dautres activités. Typiquement, mon activité «Nintendo Switch 2» ne contient que guère que le bandeau de volume que tu as pu voir précédemment. Parce quil ny a pas grand-chose de plus de nécessaire. Mon activtité «Blu-Ray» contient un cluster média et un cluster de navigation.
Et cest là quon voit le premier problème: les boutons ne sont pas toujours placés au même endroit à lécran, en dehors du bandeau du haut, en fonction de lactivité. Jai essayé de garder un peu de cohérence en plaçant par exemple toujours le cluster de navigation en haut de lécran, mais il nempêche: cest pas toujours tout au même endroit.
Cela veut dire quon est souvent obligé de **regarder** lécran pour trouver le bouton quon cherche. Au bout de quelques heures, on na effectivement un peu moins besoin de le faire, mais dans la pratique, je trouve quon regarder très souvent lécran: dabord parce que les boutons ne sont pas tous au même endroit et ensuite parce quon na pas vraiment de retour tactile des boutons, cest juste un écran.
Ce qui mamène au second défaut: **il ny a pas de retour haptique et évidemment pas de sensation tactile**. Quand on démarre ce genre de choses, on se dit que lécran tactile, cest parfait parce que ça permet de construire nimporte quelle interface et de faire un peu nimporte quoi. On nest pas obligé de mettre un bouton «Enregistrer» si on nen a pas besoin. On nest pas obligé dutiliser un bouton aléatoire pour une fonction particulière. **On peut concevoir chaque bouton précisément pour ce quon a besoin.**
Mais cest oublier un peu vite quon na pas lécran sous les yeux en permanence. Quand tu utilises ton téléphone, tu vois à la fois linterface (les boutons, les coches, etc…) et ce que tu es en train de manipuler. Quand tu utilises une télécommande, tu regardes généralement ton moniteur, pas la télécommande.
Ça revient au final au même problème que la WiiU: quand tu joues sur la télé, si tu dois baisser les yeux pour aller chercher une commande sur lécran tactile, cest plus long, tu interromps ton activité, tu es obligé de refocaliser tes yeux sur autre choses, plus proche, puis de revenir à ton activité, et de refocaliser tes yeux.
Donc au final, efficace oui, ergonomique moyen.
# Alternatives
Alors quest-ce quon peut faire dautres? On a vu que finalement un écran, aussi tactile soit-il, nest pas forcément lalpha et loméga. Cest peut-être aussi pour ça que la plupart des télécommandes Logitech Harmony ont un écran tactile mais pour des commandes additionnelles, pour des choses spécifiques, pas pour des fonctions que lon doit accéder souvent.
On pourrait donc imaginer dutiliser un clavier sans fil par exemple: en réécrivant les labels sur les touches et avec un peu dhabitude, on pourrait facilement convertir un petit clavier, avec ou sans pavé numérique, en télécommande. Ça donnerait rapidement quelque chose dutilisable. On pourrait par exemple imaginer de mettre tout le cluster média sur le bas du clavier:
* Espace pour lecture (ou lecture pause)
* Pause sur Alt Gr
* Stop sur Alt
* Super Gauche pour Précédent
* Super Droite pour Suivant
* Ctrl Gauche pour Rembobiner
* Ctrl Droit pour Avancer
Et voilà, boum, les 7 touches essentielles pour contrôler les médias, toutes sur la même ligne et assez facile à «apprendre» avec les mains. Bon après, un clavier, cest très encombrant, donc ça peut être une solution, mais ça reste un peu bizarre.
La seconde solution, ce serait simplement de se servir dun *dashboard* Home Assistant. Lavantage, cest que ça fonctionne déjà sorti de la boîte et quon peut faire quand même beaucoup de choses dans un *dashboard*. Le problème, cest que ça oblige à avoir un navigateur ouvert en permanence. Ça pourrait se faire avec un petit écran tactile pour Raspberry Pi par exemple, mais on reviendrait au même problème que précédemment: cest de nouveau un écran tactile. Et quand au fait dêtre obligé dutiliser son téléphone pour tout faire, cest moyen pour les invités ou pour les enfants. Ou pour quand tas la tête dans le cul.
La troisième solution, ce serait de construire soi-même une télécommande. [Certains lont fait](https://www.thestockpot.net/videos/theeverythingremote) et le résultat est plus ou moins disponible pour être réutilisé par nimporte qui.
De base, ça donne une télécommande assez minimaliste (peut-être trop), mais ça peut donner des idées… Des idées intéressantes…
# Conclusement
Voilà, dans cette partie, nous avons vu comment construire une interface graphique avec ESPHome et LVGL et comment on pouvait sen servir pour faire une télécommande. Je suis conscient que le système est loin dêtre parfait: il envoie des commandes directes à Home Assistant là où il devrait plutôt envoyer des signaux; il est 100% tactile ce qui pose des problèmes dergonomie à lutilisation.
Mais voilà, il faut bien le dire: ça marche. Ça peut remplacer une télécommande Harmony qui nest plus supportée ou qui est tombée en panne. Pour une poignée deuros (20 pour le *blaster IR* et 20 pour lécran tactile), on peut reconstruire un système de commande utilisable par nimporte qui.
Mais jai envie daller plus loin. Alors, je vais aller plus loin.

BIN
static/2025/08/aquaman.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
static/2025/08/esp32_tactile.webp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.