NEWS
lgtv Adapter zur Steuerung von LG WebOS SmartTVs
-
Hallo nochmals.
Ich habe die letzten beiden Tage damit verbracht ein wenig zu tüfteln. Nun ist es mir gelungen
lg.0.input per Script zu setzten und zu starten.
on({id: 'javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink").val === false) { setState( "lgtv.0.input"/*Select input source*/,'HDMI_1',on); } });
Allerdings ist dieser Code mangels meiner Kompetenz in Javascript doch recht unsauber und wirft eine Warnung in den Log
"javascript-0 2017-11-23 08:10:19.474 warn State "undefined" not found"
Kann mir hier jemand mit mehr Erfahrung bitte helfen?
-
Hallo,
@LaGra:Hallo nochmals.
Ich habe die letzten beiden Tage damit verbracht ein wenig zu tüfteln. Nun ist es mir gelungen
lg.0.input per Script zu setzten und zu starten.
on({id: 'javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink").val === false) { setState( "lgtv.0.input"/*Select input source*/,'HDMI_1',on); } });
Allerdings ist dieser Code mangels meiner Kompetenz in Javascript doch recht unsauber und wirft eine Warnung in den Log
"javascript-0 2017-11-23 08:10:19.474 warn State "undefined" not found"
Kann mir hier jemand mit mehr Erfahrung bitte helfen? `
mir ist nicht klar, wie du detektierst, ob der Fernseher eingeschaltet wurde.Dein Skript reagiert auf die (De-)Aktivierung des Skriptes javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink, das hakt ziemlich.
Du musst dir klar machen, dass du die Skripte nicht aktivieren oder deaktivieren musst. Sie laufen immer. Innerhalb der Skripte gibt es Funktionion (on() oder schedule), die zB einzelne Datenpunkte überwachen und einen Code ausführen, sobald eine definierte Änderung eintritt oder eine Zeit erreicht wird (schedule()).
Ich schalte meinen TV per harmony-hub ein. So könnte ich dort auf einen Datenpunkt horchen und dann etwas zeitversetzt (bis der TV tatsächlich an ist) einen Befehl zum Kanalwechsel senden. Wie genau schaltest du deinen Fernseher ein?
Pix
-
Via Broadlink wird der TV eingeschalten.
-
Hallo Pix.
Mir geht es nicht darum den LG Fernseher einzuschalten. Dies erledigt mein Broadlink via IR.
Ich versuche im laufenden Betrieb des TV diesen auf zB.: HDMI 1 umzuschalten.
on({id: 'javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink").val === false) { setState( "lgtv.0.input"/*Select input source*/,'HDMI_1',on); } });
oder auch
on({id: 'javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; { setState( "lgtv.0.input",'HDMI_1' ); } });
Tun dies mit zB.: Alexa, schalte Steamlink ein.
Der Script wird erkannt und der TV schaltet auch auf HDMI1 um.
Nur leider etwas unsauber, da er eine Fehlermeldung in den Log schreibt.
` > javascript.0 2017-11-24 08:59:10.498 info Start javascript script.js.Kanäle_TV.HDMI_Steamlink
javascript.0 2017-11-24 08:59:10.491 warn at Object. (script.js.Fernseher.Steamlink:4:5)
javascript.0 2017-11-24 08:59:10.473 warn Wrong type of lgtv.0.input: "string". Please fix, while deprecated and will not work in next versions. `
Ich wollte später auch HDMI2 und HDMI3 jeweils durch einen eigenen Script mit Alexa steuerbar machen. So das ich meine
PS4 und Kodibox nutzen kann.
Ich habe keine Erfahrung mit Javascript und bin daher froh, dass ich es bis hierher schon geschafft habe. Allerdings nervt mich diese Fehlermeldung.
Wie kann ich die umgehen? Ein Scriptbeispiel wäre echt nett, da ich sonst wirklich nur Bahnhof verstehe, wenn die ITler mit
ihren Texten um die Ecke kommen.
MfG LaGra
-
–> javascript.0 2017-11-24 08:59:10.473 warn Wrong type of lgtv.0.input: "string". Please fix, while deprecated and will not work in next versions.
Hallo zusammen,
....hatte die gleiche Fehlermeldung auch mal.
Bei mir lag die Ursache darin begründet, dass ich wegen des ganzen verzweifelten rumprobierens (beschäftige mich erst seit gestern mit dem Thema und habe nur grosse Augen, was hier alles geleistet wird...) in den "Objekten" unter "lgtv.0.input" den Typ des Wertes auf Zahl gesetzt hatte.
Als ich dann dort den Typ auf "Zeichenkette" geändert hatte (also String) ging es.
Aber darf ich bei der Gelegenheit noch eine Frage stellen ?
Ich hatte auch ein wenig mit openHAB runprobiert.
Dort gab es ein "Binding", welches es erlaubte die Lautstärke direkt einzutragen (also gleich den Wert 30 z.B.) und es gibt im Gegenzug die Möglichkeit eines ChannelDown und eines ChannelUp.
Besteht hier in ioBroker ebenfalls dies Möglichkeit dies so zu nutzen ?
https://github.com/sprehn/openhab2-addo … /README.md
..leider ist openHAB in meinen Augen für mich keine Alternative zu ioBroker.
Und falls dies nicht geht, besteht hier irgendwie die Möglichkeit eines "Featurerequests" ?
Nicht falsch verstehen, bitte, bitte. Das wäre nur das i-Tüpfelchen auf dem ganzen.
Zur Not ist es für mich auch nicht zu viel verlangt, wenn ich versuche openHAB für den Fernseher zu verwenden und für den Rest ioBroker
Herzlichen Dank und…... Ihr seid Klasse !!
Grüße
gBonfire
-
Hallo gBonfire.
Hättest du eventuell mal ein Codebeispiel für mich?
Edit.
Hat sich erledigt….. hab's geschnallt. Im Objekt.
Danke
-
Hallo Pix.
Mir geht es nicht darum den LG Fernseher einzuschalten. Dies erledigt mein Broadlink via IR.
Ich versuche im laufenden Betrieb des TV diesen auf zB.: HDMI 1 umzuschalten.
on({id: 'javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink").val === false) { setState( "lgtv.0.input"/*Select input source*/,'HDMI_1',on); } });
oder auch
on({id: 'javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; { setState( "lgtv.0.input",'HDMI_1' ); } });
Tun dies mit zB.: Alexa, schalte Steamlink ein.
Der Script wird erkannt und der TV schaltet auch auf HDMI1 um.
Nur leider etwas unsauber, da er eine Fehlermeldung in den Log schreibt.
` > javascript.0 2017-11-24 08:59:10.498 info Start javascript script.js.Kanäle_TV.HDMI_Steamlink
javascript.0 2017-11-24 08:59:10.491 warn at Object. (script.js.Fernseher.Steamlink:4:5)
javascript.0 2017-11-24 08:59:10.473 warn Wrong type of lgtv.0.input: "string". Please fix, while deprecated and will not work in next versions. `
Ich wollte später auch HDMI2 und HDMI3 jeweils durch einen eigenen Script mit Alexa steuerbar machen. So das ich meine
PS4 und Kodibox nutzen kann.
Ich habe keine Erfahrung mit Javascript und bin daher froh, dass ich es bis hierher schon geschafft habe. Allerdings nervt mich diese Fehlermeldung.
Wie kann ich die umgehen? Ein Scriptbeispiel wäre echt nett, da ich sonst wirklich nur Bahnhof verstehe, wenn die ITler mit
ihren Texten um die Ecke kommen.
MfG LaGra `
Kannst du bitte das gesamte Skript posten, das den Fehler verursacht? Im Log steht, das Zeile 4 ab Zeichen 5 ein Problem macht.
Die Zeile darunter sagt, dass der Datenpunkt mit einer Zeichenkette gefüllt wird. Das ist aber falsch. Ich vermute, es muss eine Zahl rein. Ich vermute 0 für HDMI1, 1 für HDMI 2 usw.
Mit Steam Link kenne ich mich nicht aus. Gibt es einen Adapter, der das Signal schickt?
Das zweite Code-Beispiel im zitierten Post hat ja auch einen Fehler: Da sind geschweifte Klammern, aber es gibt keine IF-Abfrage. Die davor stattfinden Zuweisung der Variablen ist auch nicht nötig, da diese Variablen nicht weiter verwendet werden.
Sehe ich das richtig? Deine Alexa-Anbindung schaltet das ganze Skript javascript.0.scriptEnabled.Kanäle_TV.HDMI_Steamlink ein?
Ich würde für jeden HDMI Kanal ein Boolean-Objekt anlegen und das als Smartobjekt mit Alexa verbinden
const delay = 3; // Verzögerung in s bis zu Rückstellung der Objekte auf false const idHDMI1 = 'javascript.0.Kanäle_TV.HDMI1'; const idHDMI2 = 'javascript.0.Kanäle_TV.HDMI2'; const idHDMI3 = 'javascript.0.Kanäle_TV.HDMI3'; const idKanal = "lgtv.0.input"/*Select input source*/; createStates(idHDMI1, false, { name: 'HDMI 1', type: boolean, role: 'switch', smartName: { de: 'Eingang eins' } }; createStates(idHDMI2, false, { name: 'HDMI 2', type: boolean, role: 'switch', smartName: { de: 'Eingang zwei' } }; createStates(idHDMI3, false, { name: 'HDMI 3', type: boolean, role: 'switch', smartName: { de: 'Eingang drei' } }; on(idHDMI1, function(obj) { if (obj.state.val) setState(idKanal, 0); setStateDelayed(idHDMI1, false, delay * 1000); }); on(idHDMI2, function(obj) { if (obj.state.val) setState(idKanal, 1); setStateDelayed(idHDMI2, false, delay * 1000); }); on(idHDMI3, function(obj) { if (obj.state.val) setState(idKanal, 2); setStateDelayed(idHDMI3, false, delay * 1000); });
Das Skript setzt voraus, dass lgtv.0.input auf Zahlen wartet. Das Skript legt automatisch Smartnames an. Also nur Alexa Smarthome Geräte aktualisieren. Danach sollte "Alexa, schalte Eingang eins ein" auf HDMI1 schalten, usw.
Nach dem Aufruf durch Alexa wird das Objekt auf true gesetzt und dadurch im Skript die entsprechende Funktion ausgelöst (1,2 oder 3). Darin wird dann der passende Befehl zum Schalten des TV abgesetzt (setState()). Damit Alexa später mal wieder auf diesen Eingang schalten kann (true), muss dieser wieder auf false zurückgesetzt werden. Das passiert dann zweitversetzt nach delay Sekunden.
Bitte um Feedback!
Pix
-
Hallo Pix.
Hat sich bereits erledigt. Funktioniert jetzt alles zu meiner Zufriedenheit.
Ich habe jetzt wie von gBonfire empfohlen den Type im Reiter Objekte von "Logikwert" auf "Zeichenkette" geändert
und anschießend diesen Blockly getüftelt.
Jetzt kann ich nachdem ich im Cloud Adapter den Script ausgewählt habe und mit Namen versehen habe
diesen auch mit Alexa steuern.
zB.: Alexa, Steamlink an
Schon schaltet der TV auf HDMI1 ohne Fehlermeldung in Log.
Das ganze geht auch mit lg.0.launch oder lg.0.channel
bei lg.0.launch
und bei lg.0.channel
allerdings muss man bei lg.0.channel im Reiter Objekte keine Änderung vornehmen.
> Mit Steam Link kenne ich mich nicht aus. Gibt es einen Adapter, der das Signal schickt?
Würde mich freuen wenn es dafür mal irgendwann einen Adapter geben würde.
Der Steamlink ist eine Streamingbox von Value um Steam Spiele auf dem TV zu spielen.
MfG LaGra
-
Hallo,
danke fürs Posten der Lösung. Immer gut, wenn auf eine Frage auch die Lösung kommt. Dann könne auch andere profitieren.
Adapterwünsche bitte separat in einem eigenen Thread veröffentlichen "Adapterwunsch: Steamlink"
Gruß
Pix
-
Hi, wie würde eine Lösung für
"Alexa, Fernseher leiser" / lauter aussehen? Es müsste dann z.B. 5x auf "VolumeUp" gedrückt werden (weil man sonst die Veränderung nicht merkt) muss ja irgendwie mit dem Schleifenobjekt "wiederhole 5x" eingestellt werden aber bekomme es nicht hin
-
Hi, wie würde eine Lösung für
"Alexa, Fernseher leiser" / lauter aussehen? Es müsste dann z.B. 5x auf "VolumeUp" gedrückt werden (weil man sonst die Veränderung nicht merkt) muss ja irgendwie mit dem Schleifenobjekt "wiederhole 5x" eingestellt werden aber bekomme es nicht hin `
Okay, habs einfach über eine Szene hinbekommen, in der ich mit 500ms Verzögerung hintereinander den gleichen Befehl sende In Alexa dann über eine Routine eingebunden "Alexa, Fernseher lauter" - läuft
-
Ich habe den Adapter erfolgreich konfiguriert und kann auch über den Objekte Reiter im iobroker die Befehle senden.
Leider taucht mein TV nicht in der Liste der Smart Geräte auf.
Kann mir dabei jemand helfen?
-
Ich habe den Adapter erfolgreich konfiguriert und kann auch über den Objekte Reiter im iobroker die Befehle senden.
Leider taucht mein TV nicht in der Liste der Smart Geräte auf.
Kann mir dabei jemand helfen? `
Meinst du Smart Devices vom Cloud Adapter? Er wird dort nicht automatisch hinzugefügt. Du kannst einzelne Befehle über das Plus-Symbol oben links hinzufügen. Dazu musst du aber vermutlich für jeden Datenpunkt/Befehl ein einzelnes Device erstellen (z.B. je ein Device für "Lauter", "Leiser"…)
@SchuetzeSchulz, erstmal Danke für die Arbeit! Ich muss leider nochmal auf den Datenpunkt "on" kommen, leider funktioniert dieser auch nicht, wenn ich in einer App bin (z.B. Netflix)... Kann man das erkennen und kannst du das auch noch einbauen?
-
@SchuetzeSchulz, erstmal Danke für die Arbeit! Ich muss leider nochmal auf den Datenpunkt "on" kommen, leider funktioniert dieser auch nicht, wenn ich in einer App bin (z.B. Netflix)… Kann man das erkennen und kannst du das auch noch einbauen? `
Hallo
wie im Github Issue schon beschrieben mal den Adapter vom Github neu installieren und testen
-
Auf Github (und demnächst im offiziellen Repo hoffe ich) liegt die Version 1.0.3:
Auf einigen TVs muss zum Wechseln in die Amazon Prime App nicht "prime" als Datenpunkt für "launch" gesetzt werden, sondern "amazon".
Auch die Erkennung, ob der Fernseher eingeschaltet ist (Datenpunkt "on") funktioniert jetzt auch zuverlässig (auch wenn man sich am TV in einer App befindet).
-
Hallo SchuetzeSchulz,
erst mal herzlichen Danke für die Arbeit, die du in den Adapter gesteckt hast!
Er ist wirklich eine Bereicherung, zumal er zuverlässiger ist als IR-Signale.
Leider funktioniert bei mir der Channel-Wechsel nicht.
Weder als Wert noch als String bekomme ich mein Gerät zum Umschalten auf einen anderen Sendeplatz.
Selbst eine direkte Änderung in den Objekten zeigt keine Wirkung.
Kann ich dich dabei unterstützen, dass es bei mir klappt (mein Model: LG 43UF6809)?
Schon mal Dank im Voraus.
Grüße
-
Hallo,
vielen Dank für das Lob
Also ich habe das bei mir gerade mal ausprobiert.
Setze ich in Objekte lgtv.0.channel auf z.B. 3 schaltet er bei mir auch auf Kanal 3.
Wichtig ist, dass diese Kanaländerung natürlich nur für den "Live TV" Modus funktioniert, NICHT wenn
Du einen externen Receiver wie z.B. Sky oder Telekom Entertain hast.
Ansonsten die Adapterinstanz mal auf "Debug" stellen und versuchen den Kanal zu wecheln.
Dann kannst Du ja mal schauen, ob im Log ein Fehler ausgegeben wird.
-
Hallo SchuetzeSchulz,
und danke für die schnelle Antwort.
"LiveTV" Modus ist klar … hab ihn aber extra nochmal aktiviert.
Hier das gezogene Log:
lgtv.0 2018-02-01 18:49:30.445 debug Polling OnlineStatus lgtv.0 2018-02-01 18:49:30.432 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:49:30.403 debug Polling channel lgtv.0 2018-02-01 18:48:30.409 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:48:30.405 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:48:30.404 debug Polling Input lgtv.0 2018-02-01 18:48:30.403 debug Polling OnlineStatus lgtv.0 2018-02-01 18:48:30.397 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:48:30.395 debug Polling channel lgtv.0 2018-02-01 18:48:28.674 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:48:28.671 debug Sending switch to channel 4 command to WebOS TV: 192.168.1.138 lgtv.0 2018-02-01 18:48:11.773 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:48:11.771 debug Switching to LiveTV on WebOS TV: 192.168.1.138 lgtv.0 2018-02-01 18:48:11.771 debug Sending launch command livetv to WebOS TV: 192.168.1.138 lgtv.0 2018-02-01 18:47:30.407 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:47:30.400 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:47:30.397 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:47:30.396 debug Polling Input lgtv.0 2018-02-01 18:47:30.393 debug Polling OnlineStatus lgtv.0 2018-02-01 18:47:30.391 debug Polling channel lgtv.0 2018-02-01 18:46:41.112 debug Connecting to WebOS TV: ws://192.168.1.138:3000 lgtv.0 2018-02-01 18:46:41.099 debug Sending switch to channel 4 command to WebOS TV: 192.168.1.138 lgtv.0 2018-02-01 18:46:30.378 info Ready. Configured WebOS TV IP: 192.168.1.138 lgtv.0 2018-02-01 18:46:30.370 info starting. Version 1.0.3 in /opt/iobroker/node_modules/iobroker.lgtv, node: v6.12.3 lgtv.0 2018-02-01 18:46:30.318 debug statesDB connected lgtv.0 2018-02-01 18:46:30.244 debug objectDB connected
Danke für drüberschaun!
Grüße und schönen Abend
-
Hmm, der Adapter macht was es soll und wirft keinen Fehler aus:
lgtv.0 2018-02-01 18:46:41.099 debug Sending switch to channel 4 command to WebOS TV: 192.168.1.138
Verstehe ich nicht. Bei mir geht es wie gesagt wunderbar.
Können andere mit dem Adapter hier diese Funktion mal austesten???
Könnte jetzt höchstens sein, dass Dein TV das - warum auch immer - nicht unterstützt???
-
Hallo SchuetzeSchulz,
da ich leider von Technik bzw. Programmierung nicht viel Ahnung habe, kann ich nur versuchen dich mit Infos zu versorgen
Hier gibt es Infos zu dem verwendeten Protokoll:
http://developer.lgappstv.com/TV_HELP/i … ations.htm
Hier eine Java Lösung:
http://book2s.com/java/src/package/com/ … rvice.html
Und hier weitere Infos/Kommandos
https://www.npmjs.com/package/lgtv2
Vielleicht findest du ja bei Gelegenheit mal Zeit drüber zu schauen um die Abweichungen zu entdecken.
An dieser Stelle schon mal herzlichen Dank dafür!
Viele Grüße
P.S.: mach dir aber bitte wegen mir keinen Stress …