Il y a des problèmes qu’on résout proprement. Et il y a celui-là.
Le besoin : appuyer sur le bouton « volume + » de la télécommande, et que le son monte. Voilà. C’est tout. C’est une fonctionnalité qui existe depuis que les télécommandes existent.
Chez moi, ça passe par une appli Android, un webhook, Home Assistant, un émetteur infrarouge Wi-Fi reflashé. Ce n’est pas du tout KISS. Mais ça tient depuis novembre 2025 sans broncher, et c’est un peu vexant.
Le point de départ#
Ma « télé » n’est pas vraiment une télé :
- une Nvidia Shield sous Android TV, qui fait tout le travail ;
- un simple écran, sans haut-parleurs dignes de ce nom ;
- entre les deux, un splitter HDMI (un peu à la con) qui a une qualité rare : il propose une sortie audio optique ;
- sur cette sortie optique, une paire d’enceintes amplifiées Edifier R1280DBs, avec entrée optique, Bluetooth, et leur propre télécommande infrarouge.
Sur le papier, c’est parfait. Dans les faits, le bouton volume de la télécommande de la Shield ne fait… rien.
La raison : la Shield est réglée en « volume HDMI fixe ». Elle envoie le son à plein niveau, sans y toucher, et considère que régler le volume, c’est le travail de l’appareil branché en face. Quand on appuie sur « volume + », elle se contente de transmettre la demande en HDMI-CEC, le petit protocole qui permet aux appareils HDMI de se piloter entre eux.
Sauf qu’en face, il y a le splitter à la con, qui ne comprend rien au CEC. Et derrière, des enceintes en optique, dont la Shield ignore jusqu’à l’existence. La demande part donc dans le vide.
Il reste bien la télécommande infrarouge des Edifier. Mais ça fait deux télécommandes, et il faut viser les enceintes. On est au XXIᵉ siècle, quand même.
La solution raisonnable#
La première idée, c’est de décocher « volume HDMI fixe » : la Shield règle alors elle-même le volume du son qu’elle envoie. Sauf qu’on se retrouve avec deux volumes à la suite. Si les enceintes sont à zéro (par exemple parce que quelqu’un les a baissées en écoutant son téléphone en Bluetooth), on a beau pousser la Shield à fond, il n’y a toujours pas de son. Et il faut ressortir la télécommande Edifier. Retour à la case départ.
La télécommande de la Shield a pourtant un émetteur infrarouge, et un menu pour lui apprendre à piloter un ampli. Menu grisé. D’après les forums, il suffit de couper le HDMI-CEC et de redémarrer. J’ai coupé le HDMI-CEC, j’ai redémarré, débranché, désactivé le Dolby, réappairé la télécommande, vérifié que c’était bien une officielle : toujours grisé. Et même débloqué, il n’aurait proposé qu’une liste de marques toute faite, sans aucun moyen d’apprendre les codes d’une enceinte qui n’y serait pas. J’ai abandonné.
Restaient les solutions raisonnables :
- acheter un autre splitter ;
- ou acheter une barre de son qui gère le HDMI-CEC ;
- ou garder deux télécommandes sur la table basse, comme tout le monde.
Je n’ai rien fait de tout ça.
La solution retenue#
À la place, voici ce qui se passe quand j’appuie sur « volume + » :
flowchart TD
remote["🎮 Télécommande Shield
bouton « volume + »"]
app["📱 Button Mapper
sur la Shield"]
ha["🏠 Home Assistant
automatisation"]
ir["📡 Émetteur IR Tuya
reflashé ESPHome"]
edifier["🔊 Enceintes Edifier"]
remote -- Bluetooth --> app
app -- "requête HTTP (webhook)" --> ha
ha -- "Wi-Fi (API ESPHome)" --> ir
ir -- infrarouge --> edifier
remote -. "ce qu'on voudrait" .-> edifier
Cinq maillons, quatre protocoles, un serveur domotique. Pour un bouton volume.
1. Intercepter le bouton#
Sur la Shield, l’appli Button Mapper (en version Pro, payante, s’il vous plaît) capture les appuis sur les boutons volume de la télécommande, avant qu’Android ne les ignore superbement. À chaque appui, elle envoie une requête HTTP, une action proposée directement par l’appli : il suffit de lui donner une URL.
2. Le webhook Home Assistant#
Cette URL, c’est un
webhook
Home Assistant. Il y en a deux, edifier_vol_up et edifier_vol_down,
écoutés par une seule automatisation au nom sobre : [GP] WebHook vol up/down
(GP pour « Grande Pièce »). Selon le webhook appelé, elle « allume » le bon
interrupteur de l’ESP :
alias: "[GP] WebHook vol up/down"
triggers:
- trigger: webhook
webhook_id: edifier_vol_up
id: edifier_vol_up
allowed_methods: [POST, PUT]
local_only: true
- trigger: webhook
webhook_id: edifier_vol_down
id: edifier_vol_down
allowed_methods: [POST, PUT]
local_only: true
actions:
- choose:
- conditions:
- condition: trigger
id: edifier_vol_up
sequence:
- action: switch.turn_on
target:
entity_id: switch.edifier_volume_up
- conditions:
- condition: trigger
id: edifier_vol_down
sequence:
- action: switch.turn_on
target:
entity_id: switch.edifier_volume_down
mode: singleLe local_only: true évite au moins qu’un inconnu sur Internet monte le son
de mon salon. On a des principes.
Home Assistant, qui gère déjà le reste de la maison, a donc aussi officiellement la charge du volume de la télé. Il ne s’en est jamais plaint.
3. La télécommande infrarouge en Wi-Fi#
Enfin, le dernier maillon s’appelle ir00. À l’origine, c’est un
émetteur infrarouge Wi-Fi « Tuya »
acheté quelques euros sur AliExpress : un petit
boîtier prévu pour être piloté par une appli « Smart Life », via un cloud
quelque part en Chine.
Dedans, il y a un ESP8266. Il suffit
donc d’ouvrir le boîtier, de souder quelques fils sur les pads, de le flasher
en série avec ESPHome, et le voilà qui ne parle plus
qu’à Home Assistant. Il joue le rôle de la télécommande Edifier grâce au
composant
remote_transmitter.
Attention, le mien est une version un peu ancienne. Les modèles plus récents remplacent l’ESP8266 par une puce Beken, avec un boîtier identique de l’extérieur (la nouvelle version) : ESPHome les gère aussi, mais la méthode de flashage n’est pas la même.
Petite astuce pour l’ouvrir : le boîtier est clipsé, sans vis. Plutôt que de forcer avec un tournevis, on le serre doucement dans un serre-joint. La coque se déforme, et les clips sautent en général sans casser.
Un gadget conçu pour simplifier la vie, démonté au fer à souder pour l’intégrer dans une chaîne encore plus compliquée. C’est cohérent avec le reste.
Pour récupérer les codes, le boîtier sait aussi recevoir de l’infrarouge
(remote_receiver). On
pointe la vraie télécommande Edifier vers lui, on appuie sur chaque bouton,
et ESPHome affiche le code reçu dans ses logs. Il n’y a plus qu’à le recopier.
Ma config actuelle recopie ces codes tels quels, en brut : une liste de
durées d’impulsions en microsecondes, du genre
[8965, -4544, 520, -641, 519, …], soixante-sept nombres par bouton. Chaque
bouton devient un interrupteur (switch) dans Home Assistant, qu’on
« allume » pour envoyer le code.
Ça marche, mais en écrivant cet article, je me suis rendu compte qu’on pouvait faire nettement plus propre :
- ces codes sont en fait du NEC, le protocole infrarouge le plus courant. Au lieu de 67 durées, un bouton se résume à une adresse et une commande ;
- un
switch, c’est fait pour quelque chose qui a un état, allumé ou éteint. Un bouton de télécommande n’en a pas : ESPHome a des entitésbutton, exactement pour ça.
Ce qui donne :
esp8266:
board: esp01_1m
remote_receiver: # pour capturer les codes de la vraie télécommande
pin:
number: GPIO5
inverted: true
dump: nec
remote_transmitter: # la LED infrarouge
pin: GPIO14
carrier_duty_percent: 50%
button:
- platform: template
name: Edifier Volume Up
on_press:
- remote_transmitter.transmit_nec:
address: 0xE710
command: 0xF609
- platform: template
name: Edifier Volume Down
on_press:
- remote_transmitter.transmit_nec:
address: 0xE710
command: 0xF30C
- platform: template
name: Edifier Volume Mute
on_press:
- remote_transmitter.transmit_nec:
address: 0xE710
command: 0xFF00Côté Home Assistant, l’automatisation appelle alors button.press au lieu de
switch.turn_on. Ça ne change rien au résultat, mais c’est plus honnête.
Le plus vexant : ça marche#
J’aimerais pouvoir raconter que tout ça est fragile, qu’il faut redémarrer un truc toutes les semaines, que le son monte avec deux secondes de retard.
Même pas.
La latence est imperceptible, et depuis novembre 2025 ça n’a jamais lâché. La seule vraie limite : si Home Assistant est en panne, on ne peut plus régler le volume de la télé. Ce qui, pour une télé, est une dépendance assez remarquable.
Ce que j’en retiens#
Ce montage coche à peu près toutes les cases de l’over-engineering : beaucoup de pièces, un point de défaillance central, et une solution simple (un réglage, un câble, un autre appareil) qui existait sûrement.
Mais il a aussi quelques qualités, qu’on peut appeler des excuses :
- tout le matériel était déjà là (la Shield, les enceintes, Home Assistant, et un émetteur IR à quelques euros, reflashé) ;
- c’est le volume des enceintes qu’on règle, pas celui de la Shield. Ça marche donc aussi quand elles sont en Bluetooth, pour écouter de la musique depuis un téléphone : la télécommande de la Shield règle le son… du téléphone. Plutôt pratique, pour le coup ;
- et c’était plus drôle que de chercher le bon menu dans les réglages audio (qui, de toute façon, est grisé).
On pourrait croire qu’avec le volume dans Home Assistant, on ouvre la porte à plein d’automatisations malignes : baisser le son quand on sonne à la porte, le limiter après 22 h… Même pas. L’infrarouge ne marche que dans un sens : Home Assistant peut dire « plus fort » ou « moins fort », mais il n’a aucune idée du niveau réel. Et comme on peut toujours tourner le bouton directement sur l’enceinte, impossible de le deviner en comptant les appuis. Toute cette infrastructure pour un volume dont Home Assistant ne sait rien.
Bref : ce n’est pas KISS du tout, c’est absurde, et je ne compte pas y toucher. Ça marche.
