Integración externa - LG WebOS

Hola,

Me gustaría hacer el desarrollo de una integración externa para LG webOS (como hice en la V3 en su momento).
Voy a ver para empezar el desarrollo pronto :slight_smile:

ya tengo algo que funciona bastante bien.
Pero tengo dos preguntas técnicas.

@pierre-gilles

  1. En este tipo de TV, cuando está encendida, puedes hacer más o menos lo que quieras. Pero una vez apagada, para volver a encenderla hay que pasar por un WOL.
    Mi WOL funciona bien localmente. pero una vez que llegas al contenedor, es un desastre. De hecho, el contenedor solo conoce la red gladys_integración.
    ¿Sabes si se puede hacer una excepción para ciertos contenedores?
    O entonces, ¿el SDK puede ofrecer una API que haga el WOL del lado de gladys? (esto evita hacer excepciones a las integraciones externas)

  2. LG WebOs implementa un sistema de notificaciones a través de la TV.
    ¿Existe una acción que tome en cuenta un mensaje y un canal de difusión? y, por consiguiente, ¿en qué característica debo mapearla?

Gracias de antemano

Otra limitación.
Hoy no tenemos un tipo select
Pensé en un input que listaría las aplicaciones instaladas en la TV o las fuentes de la TV.
Esto significa que no puedo crear un « Lanzar una aplicación » o « Seleccionar la fuente »

hoy :

Hola @spenceur, ¡genial noticia para esta integración :tada:! Respondo en orden.

1. El Wake-on-LAN

De hecho, ya puedes hacerlo tú mismo: la red gladys-integrations es un puente clásico, por lo que un paquete unicast hacia la IP de la TV (puerto 9) sale muy bien del contenedor y llega a tu LAN: es el mismo camino que para unirse a Internet. Lo que no funciona es solo el broadcast: 255.255.255.255 se queda en el puente, y el broadcast dirigido (192.168.1.255) no se reenvía por el host. Como la mayoría de las librerías WOL envían a 255.255.255.255 por defecto, apuesto a que ese es tu problema. Fuerza la dirección de destino:

wol.wake('AA:BB:CC:DD:EE:FF', { address: '192.168.1.42' });

Obtienes la IP a través del escaneo medieval (source_ip de las respuestas) mientras la TV está encendida, y la memorizas para más tarde, no olvides recomendar una reserva DHCP en tu documentación.

La única limitación que queda no es Docker, sino el ARP: en unicast, el host debe resolver la MAC de la TV. Si aún responde al ARP en modo de espera, es el caso de los LG con « Mobile TV On » / Quick Start+ activado, funciona. Si está completamente apagada y la entrada ARP ha expirado, el paquete se descarta, y solo el broadcast se salva. Si constatas que este caso ocurre realmente en tus usuarios, dime: añadiré una primitiva network/wake en el núcleo (el núcleo está en network=host, puede hacer broadcast), pero prefiero esperar a tener la confirmación de que es necesario antes de añadir una API « por si acaso ».

De paso, en LG: el WOL solo funciona si « Mobile TV On / Encendido vía Wi-Fi » está activado en la configuración de la TV, y es mucho más fiable en Ethernet que en Wi-Fi. Una gran parte de las futuras devoluciones « no funciona » vendrá de ahí.

2. Las notificaciones en la TV

Para esto, ya tenemos lo que necesitamos: el tipo text (categoría text, tipo text), que funciona muy bien y que es exactamente el mapeo correcto para « enviar un mensaje a una pantalla ». Modela tu notificación como una característica text del dispositivo TV.

3. El select

Tienes razón, y es el punto más interesante de los tres. Existe un mecanismo de opciones por dispositivo (supported_options), pero está diseñado para enumeraciones cerradas y definidas por el núcleo: los valores son enteros y las etiquetas provienen del catálogo traducido de Gladys (modos de climatización, velocidades de ventilador…). La integración solo restringe una lista que la taxonomía ya conoce.

Una lista de aplicaciones de TV es lo contrario: abierta, propia de cada dispositivo, identificada por cadenas (netflix, com.webos.app.hdmi1), y que cambia cuando el usuario instala una aplicación. Sobre todo, no la mapees a enteros: deberías mantener una correspondencia índice ↔ appId que cambiará en cada rescan, y la escena « lanzar la aplicación 3 » lanzaría silenciosamente otra cosa al día siguiente. Es el tipo de error imposible de diagnosticar.

Por lo tanto, falta un verdadero « select con valores de cadena », con opciones publicadas por la integración. Es una carencia genérica, no específica de LG (fuentes y aplicaciones de TV, favoritos y listas de reproducción, piezas de un aspirador…), por lo que quiero diseñarlo correctamente en lugar de improvisarlo.

¿Crees una solicitud de funcionalidad para este tema?

Gracias por tu respuesta completa y constructiva :slight_smile:

  1. WOL
    Efectivamente, estaba haciendo un broadcast hacia 192.168.1.255 y no un unicast. Veremos si funciona bien después de una larga hibernación profunda :slight_smile:.

  2. notificaciones en la TV
    Aquí tengo una duda, sí he creado una característica tipo texto

{
name: ‹ Mensaje TV ›,
external_id: ids.feature(FEATURE_KEYS.TOAST),
category: ‹ text ›,
type: ‹ text ›,
min: 0,
max: 0,
read_only: false,
has_feedback: false,
keep_history: false,
}

Pero cuando hago una acción ‹ controlar un dispositivo › no tengo ninguna acción que se active con texto, excepto si envío un int
En el repositorio veo esto:

https://github.com/GladysAssistant/Gladys/blob/master/server/lib/scene/scene.actions.js#L79

Veo que solo se puede establecer un int y no una cadena.
Por lo tanto, no debo estar en la acción correcta.
¿Puedes ayudarme?

  1. Voy a hacer la solicitud para un selector dinámico :slight_smile: gracias

aquí está la solicitud para el punto 3

Para el unicast, aquí está mi respuesta,
Después de una larga espera, confirmo que mi TV ya no se despierta y que, por lo tanto, tendré que hacer una API a través del SDK :confused:

Tengo todos los parámetros correctos, ya que la despierto mediante broadcast ^^

Crea una Demande de fonctionnalités :slight_smile:

@pierre-gilles Gracias por las solicitudes creadas

Y con respecto a este punto, ¿tienes tiempo para aconsejarme, por favor?

¡Gracias por las peticiones!

Pensé que el uso era al revés, que querías ver en Gladys una información que viene de la tele.

¿Ahora quieres enviar una notificación de texto a tu tele? ¿Es eso?

Pues si es eso, creo que voy a instalar esta integración y probar lo que sea posible :grinning_face:

Te lo confirmo :slight_smile:

Ya lo hago a través de una prueba

Pero creo que me falta la función

¡Efectivamente en este caso no tenemos la posibilidad de hacerlo actualmente! :slight_smile:

¡Me encantaría que crearas una solicitud!

hecho: Action de scène : Envoyer un message sur un appareil

Tenemos en el orden del día 3 características:

@spenceur Lo que he hecho hasta ahora para las notificaciones es que he añadido la gestión de dispositivos de tipo « texto » en la acción « Controlar un dispositivo »:

La PR, fusionada:

Creo que será útil para mucha gente :slight_smile:

¿Y luego, cuando la integración externa del dispositivo recibe la notificación, realiza una acción (en mi caso, la notificación en la TV), es eso?

¡Sí, eso es!

Por lo tanto, la versión debería desbloquear la integración completa de los lg webos
Gracias

En el campo « select » dinámico, no me comprometo a nada. Claude está trabajando en ello, pero hay mucho trabajo pendiente :slight_smile: Hago lo que puedo, pero hay muchos otros temas.

En cualquier caso, llegará en los próximos días.

https://github.com/GladysAssistant/Gladys/pull/2869 :eyes: :stuck_out_tongue: