Bon du coup j’ai essayé de faire autrement car en parcourant divers forum, je ne suis pas le seul à avoir ce problème avec certaines app du Fire TV qui ne peuvent pas être appelées via leur id. Donc la solution est d’envoyer directement la commande ADB complète au Fire TV (Android Debug Bridge - Home Assistant) qui fourni aussi des clés de commandes (POWER, SLEEP, HOME) pouvant être directement utilisées telles quelles.
J’ai ainsi crée 3 input helpers. L’un qui stock l’id des app, l’autre qui stocke des commandes ADB. Et le 3ème c’est un input de type select qui représente en quelques sortes les boutons de ma télécommande qui fera le mapping avec les 2 autres inputs. Quand je choisi une option dans ce select, ça met à jour la valeur, soit de l’input qui stock les id, soit de l’input qui stock les commandes. Mieux vaut une image que des maux, sans jeu de mots :
L’input select :
Et le yaml associé qui donne l’action effectué en fonction de l’option choisi dans la liste déroulante qui détermine si c’est une commande ADB qu’on souhaite envoyée ou juste transmettre l’id de l’app à lancer :
alias: On envoi ID de application à lancer ou une commande ADB
choose:
- alias: App ID
conditions:
- alias: SI ID application fournie
condition: template
value_template: >-
{{ states('sensor.adb_appid') if has_value('sensor.adb_appid') else
None }}
sequence:
- action: media_player.select_source
data:
source: |-
{% set value = states('sensor.adb_appid') %}
Netflix
metadata: {}
target:
device_id: 1208b1c43ad320e98422de2df3777949
- alias: Commande ADB
conditions:
- alias: SI commande ADB fournie
condition: template
value_template: >-
{{ states('sensor.adb_commandes') if has_value('sensor.adb_commandes')
else None }}
sequence:
- action: androidtv.adb_command
data:
command: |-
{% set value = states('sensor.adb_commandes') %}
{{ value }}
metadata: {}
target:
device_id: 1208b1c43ad320e98422de2df3777949
Et mes 2 inputs qui font le mapping avec les valeurs du select:
l’input qui stocke les id des apps : (sensor.adb_appid)
{% set mapper = {
'Launcher': 'com.amazon.tv.launcher',
'Netflix': 'com.netflix.ninja',
'Disney+': 'com.disney.disneyplus',
'Prime Video': 'com.amazon.firebat',
'myCANAL': 'com.canal.android.canal',
} %}
{% set value = states('select.fire_tv_remote_control_chambre_aurore') %}
{{ mapper[value] if value in mapper else None }}
l’input qui stocke les commandes ADB (sensor.adb_commandes)
{% set mapper = {
'CMD:PowerOn': 'POWER',
'CMD:Home': 'HOME',
'CMD:Sleep': 'SLEEP',
} %}
{% set value = states('select.fire_tv_remote_control_chambre_aurore') %}
{{ mapper[value] if value in mapper else None }}
Le test :
- Dans l’input de type select je sélectionne Netflix
- l’input sensor.adb_appid se met à jour et prend la valeur
com.netflix.ninja
. C’est cette valeur qui est ensuite récupéré dans l’action du select pour indiquer la source à transmettre au Fire TV.
Autre test :
- Dans l’input de type select je sélectionne CMD:Home
- l’input sensor.adb_commandes se met à jour et prend la valeur
POWER
. C’est cette valeur qui est ensuite récupéré dans l’action du select pour indiquer la commande ADB à transmettre au Fire TV.
Dans ces 2 exemples ça ne fonctionne pas. Les 2 input sensor.adb_appid et sensor.adb_commandes ne se mettent pas à jour quand je change le select. J’ai l’impression que le problème se situe dés le départ dans le modèle de l’état du select (voir image 2 ci dessus). Comme si les 2 conditions has_value()
ne retournaient pas true. Ce qui devrait être le cas mais je dois passer à côté de quelque chose.