LG TV steuern/abfragen?

Ich habe das gestern bei meinem TV mal ausprobiert. Das Umschalten zu Netflix geht wie folgt:

<?

include_once 'webos.inc.php';

$tv = new webOSTV("10.254.120.50",3000,"xxx");
$tv->connect();
$tv->lg_handshake();

$tv->send_command('{"id":"SET_INPUT","type":"request","uri":"ssap://system.launcher/launch","payload":{"id": "netflix"}}');

$tv->disconnect();  

Abend!
Vielen Dank, das funktioniert bei mir auch so!
Aber wo hast du denn die Befehle her? Suche auch noch (fast wichtiger) Amazon Prime.
Und wie machst du die Bedieunung? Cursortasten?
Könntest du das mal zeigen? Screenshot?

Danke und lg

Ich habe leider bzgl. der Steuerung des TVs nichts Vorzeigbares. Probiere gelegentlich nur mit den vorhandenen Code-Schnipseln etwas herum. Den Befehl für Netflix habe ich aus der Doku zu dem LGTV2-Node-Package abgeleitet -> https://www.npmjs.com/package/lgtv2#systemlauncherlaunch

Würde mich ja gerne an einem Modul versuchen aber ich verstehe nicht wie das mit dem Handshake abläuft. Und immer den fest im Code hinterlegten Handshake-String zu senden finde ich jetzt auch nicht soo mega. Möchte den String lieber selbst erzeugen aber bisher habe ich keinen Plan wie das geht.

Danke Vita!!

Leider geht es mit „Amazon“ oder „Prime“ nicht…

Wäre cool wenn jemand sowas zusammenbasteln könnte:

Payload von netflix zu amazon ändern klappt wirklich nicht? Bei mir geht das :confused:

$tv->send_command('{"id":"SET_INPUT","type":"request","uri":"ssap://system.launcher/launch","payload":{"id": "amazon"}}');

Den Namen der aktuell geöffneten App (bei mir z. B. die Amazon Video App) kannst Du hiermit herausfinden:

$tv->send_command('{"id":"GET_INPUTS","type":"request","uri":"ssap://com.webos.applicationManager/getForegroundAppInfo"}');
...
LG Handshake Response
{"type":"registered","id":"register_0","payload":{"client-key":"f3fdceb4cc95a69d45e3fe70ffeefda0"}}
Sending command      : {"id":"GET_INPUTS","type":"request","uri":"ssap://com.webos.applicationManager/getForegroundAppInfo"}
Command response     : {"type":"response","id":"GET_INPUTS","payload":{"appId":"amazon","returnValue":true,"windowId":"","processId":""}}
Connection closed to 10.254.120.50

appId -> amazon

Danke für die rasche Antwort! Ich werds nochmal probieren und berichten…

Wie hast du Visualisierung gemacht? Webfront?
Der Grund ist, das die mitgelieferte Fernbedienungn so unterirdisch schlecht ist, das ich eigentlich lieber mit IPS den LG bedienen möchte.

Es wird bei uns (Kinder) so wie so nur Netflix und Prime geguckt und natürlich von der NAS die alten (guten) Kinderserien…

Perfekt wäre natürlich eine kleine „Videostation“ (Syn NAS) in IPS…

Danke lg
Christian

Wie gesagt, ich habe die Einbindung bzw. die Visualisierung bei mir bisher noch gar nicht umgesetzt. Eventuell komme ich jetzt in der bevorstehenden Urlaubszeit dazu mich näher damit zu beschäftigen.

Ich habe bereits in den Javascript-Abwandlungen für die LG-webOS-Steuerung gesehen, dass man über den Websocket-Zugang auf jeden Fall auch Tasten wie UP, DOWN, LEFT, RIGHT usw. senden kann. Habe aber noch nicht durchblickt wie das in der PHP-Variante auszusehen hat.

Weiß zufällig jemand ob man den Timer für das automatische Abschalten des TVs per Script aktivieren/steuern kann?

So hab das jetzt nochmal getestet: Geht tatsächlich nicht…

Ergebnis:

WS Handshake Response:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: O68bDiBlqgv6j1JhVw9KAieb8V0=


Sucessfull WS connection to 10.0.0.130:3000

Sending LG handshake
{"type":"register","id":"register_0","payload":{"forcePairing":false,"pairingType":"PROMPT","client-key":"609c232453f2abc26cef7c97680c31a6","manifest":{"manifestVersion":1,"appVersion":"1.1","signed":{"created":"20140509","appId":"com.lge.test","vendorId":"com.lge","localizedAppNames":{"":"LG Remote App","ko-KR":"리모컨 앱","zxx-XX":"ЛГ R�мot� AПП"},"localizedVendorNames":{"":"LG Electronics"},"permissions":["TEST_SECURE","CONTROL_INPUT_TEXT","CONTROL_MOUSE_AND_KEYBOARD","READ_INSTALLED_APPS","READ_LGE_SDX","READ_NOTIFICATIONS","SEARCH","WRITE_SETTINGS","WRITE_NOTIFICATION_ALERT","CONTROL_POWER","READ_CURRENT_CHANNEL","READ_RUNNING_APPS","READ_UPDATE_INFO","UPDATE_FROM_REMOTE_APP","READ_LGE_TV_INPUT_EVENTS","READ_TV_CURRENT_TIME"],"serial":"2f930e2d2cfe083771f68e4fe7bb07"},"permissions":["LAUNCH","LAUNCH_WEBAPP","APP_TO_APP","CLOSE","TEST_OPEN","TEST_PROTECTED","CONTROL_AUDIO","CONTROL_DISPLAY","CONTROL_INPUT_JOYSTICK","CONTROL_INPUT_MEDIA_RECORDING","CONTROL_INPUT_MEDIA_PLAYBACK","CONTROL_INPUT_TV","CONTROL_POWER","READ_APP_STATUS","READ_CURRENT_CHANNEL","READ_INPUT_DEVICE_LIST","READ_NETWORK_STATE","READ_RUNNING_APPS","READ_TV_CHANNEL_LIST","WRITE_NOTIFICATION_TOAST","READ_POWER_STATE","READ_COUNTRY_INFO"],"signatures":[{"signatureVersion":1,"signature":"eyJhbGdvcml0aG0iOiJSU0EtU0hBMjU2Iiwia2V5SWQiOiJ0ZXN0LXNpZ25pbmctY2VydCIsInNpZ25hdHVyZVZlcnNpb24iOjF9.hrVRgjCwXVvE2OOSpDZ58hR+59aFNwYDyjQgKk3auukd7pcegmE2CzPCa0bJ0ZsRAcKkCTJrWo5iDzNhMBWRyaMOv5zWSrthlf7G128qvIlpMT0YNY+n/FaOHE73uLrS/g7swl3/qH/BGFG2Hu4RlL48eb3lLKqTt2xKHdCs6Cd4RMfJPYnzgvI4BNrFUKsjkcu+WD4OO2A27Pq1n50cMchmcaXadJhGrOqH5YmHdOCj5NSHzJYrsW0HPlpuAx/ECMeIZYDh6RMqaFM2DXzdKX9NmmyqzJ3o/0lkk/N97gfVRLW5hA29yeAwaCViZNCP8iC9aO0q9fQojoa7NQnAtw=="}]}}}

LG Handshake Response
{"type":"registered","id":"register_0","payload":{"client-key":"609c232453f2abc26cef7c97680c31a6"}}
Sending command      : {"id":"SET_INPUT","type":"request","uri":"ssap://system.launcher/launch","payload":{"id": "Amazon"}}
Command response     : {"type":"error","id":"SET_INPUT","error":"500 Application error","payload":{"returnValue":false}}
Connection closed to 10.0.0.130

Update: Ok, aber mit deinem Code wird mir „amazon“ angezeigt, und ich habs groß geschrieben :slight_smile:

Danke

D. h. kleingeschrieben funktioniert nun der Aufruf der Amazon App?

Ja, auch netflix war kleingeschrieben :banghead: Also alles gut! Wiedermal mein Fehler…

Bleiben jetzt noch folgende Aufgaben für mich:

Synology NAS: Einbinden des Film Verzeichnisses
Cursor Navigationsbuttons
Play Button
Pause Button
Stop Button

Danke und lg

Hallo,
ich würde gerne meinen LG über die HomeMatic nur ausschalten. Mehr brauche ich da nicht.
Hat einer eine Idee, wie so ein Skript aussehen könnte. Ich würde das dann einfach mit einer HM Variable verknüpfen und damit den Ausschaltbefehl ausüben.
Gruß
Marc

Hast Du Dich mal hier orientiert und die Skripte angelegt. Die IP vom TV anpassen.

Ausschalten ist dann


<?php

includeScript(12345); // Objekt ID vom 1.Skript "webos"  
 
function includeScript($scriptID)
{
    $s = IPS_GetScript($scriptID);
    include($s['ScriptFile']);
}

$tv = new webOSTV("XXX.XXX.XXX.XXX",3000,"0afd4c4xxxxxxxxxx");   // IP des TV eintragen, LG Client-Key eintragen
$tv->lg_handshake();

$tv->turnOff() 

Zusätzlich muss noch in dem ersten Skript im Beitrag 53


function webOSTV($host, $port=3000, $lgKey="NOKEY", $path="/")
    {
        $this->host = $host;
        $this->port = $port;
        $this->lg_key = $lgKey;
        $this->path = $path;
        $this->ws_key = $key = base64_encode(generateRandomString(16, false, true));
        if ($this->lg_key=="NOKEY") unset($this->lg_key);    
    }

durch dies ersetzt werden


function __construct($host, $port=3000, $lgKey="NOKEY", $path="/")
    {
        $this->host = $host;
        $this->port = $port;
        $this->lg_key = $lgKey;
        $this->path = $path;
        $this->ws_key = $key = base64_encode(generateRandomString(16, false, true));
        if ($this->lg_key=="NOKEY") unset($this->lg_key);    
    }

Danke bis hierhin.

Noch eine bloede Anfaengerfrage. Die Skripte fangen alle mit <?php an. Wird dann trotzdem danach noch mit <? in Zeile 3 begonnen?

Und, sehe ich das richtig, dass das erste Skript ohne Ereignis laufen wird, das zweite Skript nur zur einmaligen Ermittlung der Client-ID noetig ist und das dritte dann den jeweiligen Befehl ausfuehrt und ueber ein Ereignis angestossen wird?

Wenn hier noch <? im Forum in Beiträgen steht, dann ist das inzwischen überholt ein PHP Skript fängt immer mit


<?php

an. Danach folgt dann auch kein weiteres <? mehr. <? ist die alte Schreibweise, die neue ist <?php.
Also sämtliche Skripte, die Du hier im Forum findest ,die mit <? anfangen sind durch <?php am Anfang des Skripts zu ersetzten.

Das erste Skript dient zum abspeichern der Klasse. Eine Klasse ist so was wie ein Bauplan für ein Objekt. Ein Objekt hat Eigenschaften, diese Eigenschaften werden über Methoden angesprochen. Eine Klasse enthält also eine Anzahl an Methoden um das Objekt zu steuern. Wenn Dich das näher interessiert kannst Du z.B. hier lesen wie Klassen und Objekte funktionieren. Das erste Skript wird dem eigentlichen ausführenden Skript zur Verfügung gestellt über include. Das Ereignis wird also nicht auf das Skript 1 gelegt sondern am Schluss auf das Skript 3. Der Inhalt von Skript 1 wird in Skript 3 geladen. So muss der Code von Skript 1 auch nur einmal vorhanden sein.

Ich habe keine LG TV, aber so viel ich das verstanden habe ja.

Das dritte Skript ist das Skript in dem der eigentliche Befehl ausgeführt wird. Auf diesem Skript liegt dann auch ein Ereignis wenn gewünscht.


includeScript(12345); // Objekt ID vom 1.Skript "webos"  
 
function includeScript($scriptID)
{
    $s = IPS_GetScript($scriptID);
    include($s['ScriptFile']);
}

Damit wird der Code aus dem ersten Skript geladen, der Code muss also auch bei mehreren Befehlen, d.h. mehreren Skripten, nur einmal im ersten Skript vorhanden sein.


$tv = new webOSTV("XXX.XXX.XXX.XXX",3000,"0afd4c4xxxxxxxxxx");   // IP des TV eintragen, LG Client-Key eintragen

Erzeugt aus der Klasse (Bauplan) ein Objekt $tv, das ist Dein Fernseher. Eine Klasse hat den Vorteil, dass man mehrere Objekte erzeugen kann. Jeder TV hat also die gleichen Eigenschaften wie an/aus, lauter/leiser. das einzige was den Fernseher von einem anderen Gerät unterscheidet ist die IP Adresse und der Client Key. Der Code der Klasse bleibt immer gleich.


$tv->turnOff()

ruft die Methode in Deinem Objekt $tv, dein Fernseher, auf um das Gerät auszuschalten.

Das ist ein Weg, eine Alternative wäre einfach direkt in IP-Symcon z.B. auf einem Schalter zu reagieren. Wie man das macht ist einem am Schluss selber überlassen.

Danke für die tollen Erklärungen und die Geduld. Dann habe ich wieder ein neues kleines Projektchen. Ich melde mich bei Vollzug.

@Fonzo
Wollte mich noch zurückmelden. Das mit dem Ausschalten funktioniert jetzt. Danke für die gute Erklärung. So langsam komme ich da zurecht.

@all
Hat einer eine Idee, wie man die Eingänge umschalten könnte? z.B. HDMI1

Abend liebe Leute!

Ich hab mal wieder ein bisschen Zeit gehabt und folgendes erstellt:

Problem ist das ich auf den Link klicken muss und dann der Ausgabe Code kommt. Funktionieren tut es!

Frage: Wie könnte ich da schöne Buttons machen? z.B. Mit Text „Ausschalten“ oder „Lauter“ usw…
Bzw. bei Netflix wäre ein Klick auf ein Logo schön!

Danke und lg
Christian

Ich schmeiss das nochmal rein als Vorlage:

Wie sieht denn Dein PHP Script für Netflix oder Youtube aus?
Ich steuere zB HDMI Auswahl, weil es gerade gefragt war, primitiv über IPS Sleep …so:

  		$tv->processCommand(TV_CMD_APPS);
        IPS_Sleep(900);
        $tv->processCommand(TV_CMD_OK);	
         IPS_Sleep(900);
        $tv->processCommand(TV_CMD_RIGHT);
		IPS_Sleep(900);
		 $tv->processCommand(TV_CMD_RIGHT);	
		 IPS_Sleep(900);
        $tv->processCommand(TV_CMD_RIGHT);
		IPS_Sleep(900);
		 $tv->processCommand(TV_CMD_RIGHT);	
		 IPS_Sleep(900);
		 $tv->processCommand(TV_CMD_RIGHT);
		IPS_Sleep(900);
		 $tv->processCommand(TV_CMD_RIGHT);
		IPS_Sleep(900);
        $tv->processCommand(TV_CMD_OK); 

Gruß Helmut

Also über simulierte Fernbedienungsbefehle?