Support d’un champ “Select” dynamique pour les intégrations

Contexte

Aujourd’hui, une intégration peut exposer :

  • des valeurs numériques (binary, temperature, volume, …)
  • des valeurs texte (category: text, type: text)

En revanche, il n’existe actuellement aucun moyen d’exposer une liste dynamique de valeurs sélectionnables.

Le mécanisme supported_options répond à un autre besoin : il est conçu pour des énumérations connues du cœur de Gladys (modes de climatisation, vitesses de ventilation, etc.). Les valeurs sont fixes et définies par la taxonomie de Gladys.

Problème

Certaines intégrations ont besoin d’exposer des listes qui :

  • sont découvertes dynamiquement ;
  • sont propres à chaque appareil ;
  • utilisent des identifiants sous forme de chaînes de caractères ;
  • peuvent évoluer au cours du temps.

Exemple avec une TV LG webOS

Les applications installées sont différentes d’une TV à l’autre et peuvent évoluer :

  • Netflix
  • Disney+
  • Prime Video
  • YouTube
  • Plex

Chaque application possède un identifiant propre :

netflix
com.disney.disneyplus-prod
amazon
youtube.leanback.v4
cdp-30

Même chose pour les sources :

  • HDMI 1
  • HDMI 2
  • PlayStation 5
  • Nintendo Switch

avec des identifiants tels que :

HDMI_1
HDMI_2
com.webos.app.hdmi3

Mapper ces valeurs sur des entiers serait dangereux : après l’installation ou la suppression d’une application, l’ordre peut changer et une scène pourrait lancer une autre application que celle attendue.

Proposition

Permettre aux intégrations de publier une liste d’options dynamiques basée sur des chaînes de caractères.

Par exemple :

{

« category »: « text »,

« type »: « select »,

« options »: [

{

  "value": "netflix",

  "label": "Netflix"

},

{

  "value": "youtube.leanback.v4",

  "label": "YouTube"

},

{

  "value": "amazon",

  "label": "Prime Video"

}

]

}

L’interface afficherait simplement :

▼ Netflix
▼ YouTube
▼ Prime Video

et l’intégration recevrait directement `Netflix` au lieu d’un indice numérique.

Cas d’usage

Cette fonctionnalité ne concerne pas uniquement les téléviseurs. Elle pourrait servir à de nombreuses intégrations :

  • Applications TV
  • Sources HDMI
  • Pièces d’un aspirateur robot
  • Playlists ou favoris
  • Scènes natives d’un équipement (Roborock par ex)
  • Modes de charge d’un véhicule électrique
  • etc.

Dans mon cas, cela permettrait par exemple de proposer directement un sélecteur pour lancer une application (Netflix, Plex, YouTube…) ou changer de source (HDMI 1, HDMI 2, PlayStation 5…) au lieu de demander à l’utilisateur de saisir un identifiant technique comme netflix ou HDMI_1.
À mon sens, ce besoin est générique et pourrait être utilisé par de nombreuses intégrations dès qu’un équipement expose une liste dynamique d’éléments (applications, sources, pièces, playlists, favoris, scènes natives, routines, etc.).