Intégration externe - LG Web os

Bonjour,

J’aimerai bien faire le dev d’une intégration externe pour LG webos (comme j’avais fais sur la V3 à l’époque).
Je vais voir pour lancer le dev soon :slight_smile:

j’ai déjà un truc qui fonctionne pas trop mal.
Mais j’ai deux questions techniques.

@pierre-gilles

  1. Sur ce genre de TV lorsque qu’elle est allumé tu peux faire un peut ce que tu veux. Mais une fois eteinte, pour la rallumé il faut passé par un WOL.
    Mon wol fonctionne bien en local. mais une fois arrivé sur le container c’est le drame. En effet le container n’a connaissance que le reseau gladys_intégration.
    Sais tu si on peut faire une exception pour certain container ?
    Ou alors le sdk peut proposer une api qui ferait le wol côté gladys ? (ça évite de faire des exception aux intégration externe)

  2. LG WebOs mette en place un system de notification par la TV.
    Existe t’il une action qui prend un compte un message et un canal de diffusion ? et par conséquent sur quelle feature dois-je la mapper ?

Merci par avance

Autre limitation.
Aujourd’hui nous n’avons pas de type select
Je pensais a un input qui listerait les applications installé sur la TV ou les sources de la TV.
Ce qui fait que je ne peut pas créé de « Lancer une application » ou « Choix de la source »

aujourd’hui :

Salut @spenceur, super nouvelle pour cette intégration :tada: Je réponds dans l’ordre.

1. Le Wake-on-LAN

En fait tu peux déjà le faire toi-même : le réseau gladys-integrations est un bridge classique, donc un paquet unicast vers l’IP de la TV (port 9) sort très bien du conteneur et arrive sur ton LAN : c’est le même chemin que pour joindre Internet. Ce qui ne passe pas, c’est uniquement le broadcast : 255.255.255.255 reste dans le bridge, et le broadcast dirigé (192.168.1.255) n’est pas forwardé par l’hôte. Comme la plupart des libs WOL envoient sur 255.255.255.255 par défaut, je parie que c’est ça ton problème. Force l’adresse de destination :

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

Tu récupères l’IP via le scan médié (source_ip des réponses) pendant que la TV est allumée, et tu la mémorises pour plus tard, pense à conseiller une réservation DHCP dans ta doc.

La seule limite qui reste n’est pas Docker mais l’ARP : en unicast, l’hôte doit résoudre la MAC de la TV. Si elle répond encore à l’ARP en veille, c’est le cas des LG avec « Mobile TV On » / Quick Start+ activé, ça marche. Si elle est complètement éteinte et que l’entrée ARP a expiré, le paquet est jeté, et là il n’y a que le broadcast qui s’en sort. Si tu constates que ce cas arrive vraiment chez tes utilisateurs, dis-le moi : j’ajouterai une primitive network/wake côté cœur (le cœur est en network=host, il peut broadcaster), mais je préfère attendre d’avoir la confirmation que c’est nécessaire plutôt que d’ajouter une API « au cas où ».

Au passage, côté LG : le WOL ne marche que si « Mobile TV On / Allumage via Wi-Fi » est activé dans les réglages de la TV, et c’est nettement plus fiable en Ethernet qu’en Wi-Fi. Une bonne partie des futurs retours « ça ne marche pas » viendra de là.

2. Les notifications sur la TV

Pour ça, on a déjà ce qu’il faut : le type text (catégorie text, type text), qui marche très bien et qui est exactement le bon mapping pour « pousser un message vers un écran ». Modélise ta notification comme une feature text de l’appareil TV.

3. Le select

Tu as raison, et c’est le point le plus intéressant des trois. Il existe bien un mécanisme d’options par appareil (supported_options), mais il est conçu pour des énumérations fermées et définies par le cœur : les valeurs sont des entiers et les libellés viennent du catalogue traduit de Gladys (modes de clim, vitesses de ventilo…). L’intégration ne fait que restreindre une liste que la taxonomie connaît déjà.

Une liste d’applications de TV, c’est l’inverse : ouverte, propre à chaque appareil, identifiée par des chaînes (netflix, com.webos.app.hdmi1), et qui change quand l’utilisateur installe une app. Surtout, ne la mappe pas sur des entiers : tu devrais maintenir une correspondance index ↔ appId qui bougera à chaque rescan, et la scène « lancer l’app 3 » lancerait silencieusement autre chose le lendemain. C’est le genre de bug impossible à diagnostiquer.

Il manque donc un vrai « select à valeurs chaînes », avec des options publiées par l’intégration. C’est un manque générique, pas spécifique à LG (sources et apps de TV, favoris et playlists, pièces d’un aspirateur…), donc je veux le concevoir proprement plutôt que le bricoler.

Tu créé une demande de fonctionnalité pour ce sujet ?

Merci pour ta réponse complete et constructive :slight_smile:

  1. WOL
    Je fesais effectivement un broadcast vers 192.168.1.255 et pas un unicast. A voir si cela fonctionne bien après une longue veille profonde :slight_smile:.

  2. notifications sur la TV
    La j’ai un doute, j’ai bien créé une feature type texte

{
name: ‹ Message 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,
}

Mais quand je fais une action ‹ controller un appareil › je n’ai aucune action qui se declenche avec du texte a l’exception si j’envoie du int
Sur le repo je vois ça :

je vois qu’on ne peut set que du int et pas de string.
Je ne dois donc pas être sur la bonne action.
Peux tu m’aider ?

  1. je vais faire la demande pour un select dynamique :slight_smile: merci

voici la demande pour le point 3

Pour l’unicast voici ma réponse,
Après une veille prolongé je confirme que ma TV ne se reveille plus et qu’il va donc falloir faire une api via le SDK :confused:

J’ai bien tout les param qui vont bien vue que je la réveil via broadcast ^^

Créé une Demande de fonctionnalités :slight_smile:

@pierre-gilles Merci demandes créés

Et concernant ce point là, as tu le temps pour me conseiller stp ?

Merci pour les demandes !

Je pensais que l’usage était l’inverse, que tu voulais voir dans Gladys une information qui vient de la télé.

Là, tu veux en gros envoyer une notification textuelle sur ta télé ? C’est bien ça ?

Alors si c’est ça, je crois que je vais installer cette intégration et tester ce qui sera possible :grinning_face:

Je te le confirme :slight_smile:

Je le fais déjà via un test

Mais il me manque la feature je crois

Effectivement dans ce cas on a pas la possibilité de le faire actuellement ! :slight_smile:

Je veux bien que tu créé une demande !

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

On a donc a l’ordre du jour 3 features :

@spenceur Ce que j’ai fais pour l’instant pour les notifications, c’est que j’ai ajouté la gestion des appareils de type « texte » sur l’action « Contrôler un appareil » :

La PR, mergée :

Ça sera utile à plein de monde je pense :slight_smile:

Et ensuite quand l’intégration externe de l’appareil recois elle fait une action (dans mon cas la notif sur la tv) c’est ça ?

Yes c’est ça !

Donc la release devrais me débloquer sur l’intégration complète des lg webos
Merci

Attend sur le champ « select » dynamique je m’engage à rien. Claude travaille dessus mais il y a pas mal de boulots en aval :slight_smile: Je fais de mon mieux mais il y a beaucoup d’autres sujets !

Dans tous les cas, ça viendra dans les prochains jours.

feat(device): add text/select feature type with string-valued supported_options by Pierre-Gilles · Pull Request #2869 · GladysAssistant/Gladys · GitHub :eyes: :stuck_out_tongue: