Soporte para un campo „Select“ dinámico en las integraciones

Contexto

Hoy en día, una integración puede exponer:

  • valores numéricos (binary, temperature, volume, …)
  • valores de texto (category: text, type: text)

Sin embargo, actualmente no existe ningún medio para exponer una lista dinámica de valores seleccionables.

El mecanismo supported_options responde a otra necesidad: está diseñado para enumeraciones conocidas del núcleo de Gladys (modos de climatización, velocidades de ventilación, etc.). Los valores son fijos y definidos por la taxonomía de Gladys.

Problema

Algunas integraciones necesitan exponer listas que:

  • se descubren dinámicamente;
  • son propias de cada dispositivo;
  • utilizan identificadores en forma de cadenas de caracteres;
  • pueden evolucionar con el tiempo.

Ejemplo con una TV LG webOS

Las aplicaciones instaladas son diferentes de una TV a otra y pueden evolucionar:

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

Cada aplicación tiene su propio identificador:

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

Lo mismo ocurre con las fuentes:

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

con identificadores como:

HDMI_1
HDMI_2
com.webos.app.hdmi3
…

Mapear estos valores a enteros sería peligroso: después de instalar o eliminar una aplicación, el orden puede cambiar y una escena podría lanzar una aplicación diferente a la esperada.

Propuesta

Permitir a las integraciones publicar una lista de opciones dinámicas basada en cadenas de caracteres.

Por ejemplo:

{

« category »: « text »,

« type »: « select »,

« options »: [

{

  "value": "netflix",

  "label": "Netflix"

},

{

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

  "label": "YouTube"

},

{

  "value": "amazon",

  "label": "Prime Video"

}

]

}

La interfaz mostraría simplemente:

▼ Netflix
▼ YouTube
▼ Prime Video

y la integración recibiría directamente `Netflix` en lugar de un índice numérico.

Casos de uso

Esta funcionalidad no se limita a los televisores. Podría ser útil para muchas integraciones:

  • Aplicaciones de TV
  • Fuentes HDMI
  • Piezas de un robot aspirador
  • Listas de reproducción o favoritos
  • Escenas nativas de un equipo (Roborock, por ejemplo)
  • Modos de carga de un vehículo eléctrico
  • etc.

En mi caso, esto permitiría, por ejemplo, ofrecer directamente un selector para iniciar una aplicación (Netflix, Plex, YouTube…) o cambiar de fuente (HDMI 1, HDMI 2, PlayStation 5…) en lugar de pedir al usuario que ingrese un identificador técnico como netflix o HDMI_1.
En mi opinión, esta necesidad es genérica y podría ser utilizada por muchas integraciones siempre que un dispositivo exponga una lista dinámica de elementos (aplicaciones, fuentes, piezas, listas de reproducción, favoritos, escenas nativas, rutinas, etc.).

Cierro este post porque la función ya está disponible en Gladys Assistant 4.86: