Externe Integration - LG WebOS

Hallo,

Ich würde gerne die Entwicklung einer externen Integration für LG webOS machen (so wie ich es damals bei der V3 gemacht hatte).
Ich werde mich bald ans Entwickeln machen :slight_smile:

Ich habe bereits etwas, das ganz gut funktioniert.
Aber ich habe zwei technische Fragen.

@pierre-gilles

  1. Bei dieser Art von TV kannst du, wenn sie eingeschaltet ist, so ziemlich alles machen. Aber wenn sie ausgeschaltet ist, musst du für das erneute Einschalten WOL (Wake-on-LAN) verwenden.
    Mein WOL funktioniert lokal gut. Aber sobald ich auf den Container zugreife, ist es ein Drama. Der Container kennt nämlich nur das Netzwerk gladys_intégration.
    Weißt du, ob man für bestimmte Container eine Ausnahme machen kann?
    Oder könnte der SDK eine API anbieten, die den WOL auf Gladys-Seite ausführt? (Das vermeidet Ausnahmen für externe Integrationen)

  2. LG WebOS hat ein Benachrichtigungssystem über den Fernseher implementiert.
    Gibt es eine Aktion, die eine Nachricht und einen Übertragungskanal berücksichtigt? Und auf welche Funktion soll ich sie dann mappen?

Danke im Voraus

Eine weitere Einschränkung.
Heute haben wir keinen Select-Typ
Ich dachte an ein Input, das die auf dem TV installierten Anwendungen oder die TV-Quellen auflistet.
Dadurch kann ich keine „Anwendung starten“ oder „Quelle auswählen“ erstellen

heute:

Hallo @spenceur, tolle Neuigkeit für diese Integration :tada: Ich antworte in der Reihenfolge.

1. Wake-on-LAN

Tatsächlich kannst du das schon selbst machen: Das Netzwerk gladys-integrations ist eine klassische Bridge, daher wird ein Unicast-Paket an die IP des TVs (Port 9) sehr gut aus dem Container gesendet und erreicht dein LAN: Es ist der gleiche Weg wie zum Verbinden mit dem Internet. Was nicht funktioniert, ist nur das Broadcast: 255.255.255.255 bleibt in der Bridge, und das gerichtete Broadcast (192.168.1.255) wird nicht vom Host weitergeleitet. Da die meisten WOL-Bibliotheken standardmäßig an 255.255.255.255 senden, wage ich zu wetten, dass das dein Problem ist. Erzwinge die Zieladresse:

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

Du holst die IP über den Medienscan (source_ip der Antworten) ab, während der TV eingeschaltet ist, und speicherst sie für später. Denke daran, in deiner Dokumentation eine DHCP-Reservierung zu empfehlen.

Die einzige verbleibende Einschränkung ist nicht Docker, sondern ARP: Beim Unicast muss der Host die MAC des TVs auflösen. Wenn er im Standby noch auf ARP antwortet, ist das der Fall bei LG mit „Mobile TV On“ / Quick Start+ aktiviert, dann funktioniert es. Wenn er komplett ausgeschaltet ist und der ARP-Eintrag abgelaufen ist, wird das Paket verworfen, und nur das Broadcast kommt durch. Wenn du feststellst, dass dieser Fall tatsächlich bei deinen Nutzern auftritt, lass es mich wissen: Ich werde eine primitive network/wake auf der Kernseite hinzufügen (der Kern ist in network=host, er kann broadcasten), aber ich möchte lieber abwarten, bis bestätigt ist, dass es notwendig ist, anstatt eine API „für den Fall der Fälle“ hinzuzufügen.

Übrigens bei LG: Das WOL funktioniert nur, wenn „Mobile TV On / Einschalten per Wi-Fi“ in den TV-Einstellungen aktiviert ist, und es ist deutlich zuverlässiger über Ethernet als über Wi-Fi. Ein guter Teil der zukünftigen Rückmeldungen „es funktioniert nicht“ wird davon kommen.

2. Benachrichtigungen auf dem TV

Dafür haben wir schon alles, was wir brauchen: Der Typ text (Kategorie text, Typ text), der sehr gut funktioniert und genau die richtige Zuordnung für „eine Nachricht an einen Bildschirm senden“ ist. Modelliere deine Benachrichtigung als eine text-Funktion des TV-Geräts.

3. Der Select

Du hast recht, und das ist der interessanteste der drei Punkte. Es gibt tatsächlich einen Mechanismus für Geräteoptionen (supported_options), aber er ist für geschlossene und vom Kern definierte Aufzählungen konzipiert: Die Werte sind Ganzzahlen und die Beschriftungen kommen aus dem übersetzten Katalog von Gladys (Klimaanlagenmodi, Lüftergeschwindigkeiten…). Die Integration beschränkt nur eine Liste, die die Taxonomie bereits kennt.

Eine Liste von TV-Anwendungen ist das Gegenteil: offen, für jedes Gerät einzigartig, identifiziert durch Zeichenfolgen (netflix, com.webos.app.hdmi1), und sie ändert sich, wenn der Benutzer eine App installiert. Vor allem solltest du sie nicht auf Ganzzahlen abbilden: Du müsstest eine Entsprechung Index ↔ AppId pflegen, die sich bei jedem Neu-Scan ändert, und die Szene „App 3 starten“ würde am nächsten Tag leise etwas anderes starten. Das ist eine Art von Bug, der unmöglich zu diagnostizieren ist.

Es fehlt also ein echter „Select mit Zeichenfolgenwerten“, mit Optionen, die von der Integration veröffentlicht werden. Das ist ein generisches Defizit, nicht spezifisch für LG (Quellen und TV-Apps, Favoriten und Playlists, Räume eines Staubsaugers…), also möchte ich es ordentlich entwerfen, anstatt es zu flicken.

Erstellst du einen Feature-Request für dieses Thema?

Danke für deine vollständige und konstruktive Antwort :slight_smile:

  1. WOL
    Ich habe tatsächlich einen Broadcast an 192.168.1.255 gesendet und keinen Unicast. Mal sehen, ob das nach einem langen Tiefschlaf gut funktioniert :slight_smile:.

  2. Benachrichtigungen auf dem TV
    Hier habe ich einen Zweifel, ich habe tatsächlich eine Text-Funktion erstellt

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

Aber wenn ich eine Aktion ‹ Gerät steuern › ausführe, gibt es keine Aktion, die mit Text ausgelöst wird, außer wenn ich eine ganze Zahl sende
Im Repo sehe ich das:

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

Ich sehe, dass man nur eine ganze Zahl setzen kann und keine Zeichenkette.
Ich muss also nicht die richtige Aktion verwenden.
Kannst du mir helfen?

  1. Ich werde die Anfrage für eine dynamische Auswahl stellen :slight_smile: danke

hier ist die Anfrage für Punkt 3

Für Unicast hier meine Antwort,
Nach einer längeren Überwachung bestätige ich, dass mein TV nicht mehr aufwacht und es daher notwendig sein wird, eine API über das SDK zu erstellen :confused:

Ich habe alle Parameter, die ich brauche, da ich sie über Broadcast aufwecke ^^

Erstelle eine Demande de fonctionnalités :slight_smile:

@pierre-gilles Danke für die erstellten Anfragen

Und bezüglich dieses Punktes, hast du Zeit, mir einen Rat zu geben?

Danke für die Anfragen!

Ich dachte, die Nutzung wäre umgekehrt, dass du in Gladys eine Information vom Fernseher sehen möchtest.

Jetzt möchtest du also im Grunde eine Textbenachrichtigung auf deinem Fernseher senden? Ist das richtig?

Wenn es das ist, glaube ich, dass ich diese Integration installieren und testen werde, was möglich ist :grinning_face:

Ich bestätige dir das :slight_smile:

Ich mache das bereits über einen Test

Aber ich glaube, mir fehlt die Funktion

Genau, in diesem Fall haben wir aktuell keine Möglichkeit, das zu tun! :slight_smile:

Ich würde mich freuen, wenn du einen Antrag stellst!

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

Wir haben also drei Features auf der Agenda:

@spenceur Was ich bisher für die Benachrichtigungen gemacht habe, ist, dass ich die Verwaltung von Geräten des Typs „Text“ zur Aktion „Gerät steuern“ hinzugefügt habe:

Der PR, gemerged:

https://github.com/GladysAssistant/Gladys/pull/2856

Das wird vielen Leuten nützlich sein, denke ich :slight_smile:

Und dann, wenn die externe Integration des Geräts eine Aktion ausführt (in meinem Fall die Benachrichtigung auf dem Fernseher), ist das richtig?

Ja, genau das!

Die Veröffentlichung sollte mir die vollständige Integration der LG webOS (WebOS) freischalten
Danke

Auf das dynamische « select »-Feld kann ich mich noch nicht festlegen. Claude arbeitet daran, aber es gibt noch viel Arbeit danach :slight_smile: Ich tue mein Bestes, aber es gibt auch viele andere Themen!

In jedem Fall wird es in den nächsten Tagen kommen.

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