NEWS
lgtv Adapter zur Steuerung von LG WebOS SmartTVs
-
oder könnte mir bitte einer ein script zeigen in dem der LG TV eingeschaltet wird und dann auf den jeweilig gewählten Eingang springt… hab schon probiert aber es geht nichts... werde mich wohl in java weiter rein arbeiten müssen... ein Beispiel wär echt super...
-
An die Frage hänge ich mich mal ran. Würde mich auch interessieren.
LG scheint nicht verbreitet zu sein in der iobroker Gemeinde :lol:
-
Einschalten geht leider nicht. Das gibt die API nicht her.
Zumindest habe ich diesbezüglich in der LG WebOS API nichts gefunden
-
Über das API geht das nicht, wenn der Fernseher aus ist ist der Smart Dienst inaktiv und es steht kein API zur Verfügung. Bei den meisten WebOS TVs geht es aber über WOL, falls das vom Fernseher nicht unterstützt wird bleibt nur der Workaround via Infrarot.
-
Mir persönlich geht es mehr um eingänge von lg.0.input.
Eingeschalten wird der TV ohnehin per broadlink.
-
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).