LG TV steuern/abfragen?

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?

Entweder nutzt Du so was wie IPSStudio oder auch NEO. Wenn Du das im Webfront selber machen willst dann mit einer String Variable mit Variablenprofil ~HTMLBox z.B. so oder ähnlich.

Genial, auf das wäre ich nicht gekommen :slight_smile:

Ich poste mal die Skripte (am Abend)

Für mich wäre halt wichtig für die „Kinderruhigstellung“ einen Button im IPS zu haben, der SCHNELL die Biene Maja von der Synology NAS abspielt, oder von mir aus auch den kleinen Maulwurf :slight_smile:

Hi Fonzo!

IPSStudio habe ich, aber ich möchte zuert mal ein reines Webfront basteln…

Danke für den Link, werds mir gleich ansehen.

Wie könnte denn so ein Skript dann komplett aussehen. Ich habe mir den Sleep Befehl angeschaut, aber da kann ich mir noch keinen reim draus machen. Ich denke ich muss da auf jeden Fall das übergeordnete LG Skript mit einbeziehen.
Sorry für die vielen dummen fragen. Aber so langsam freunde ich mich ja mit IPS an.:wink:

Hier mein Testscript, es braucht nur Deine LG IP Adresse und Deine Pairing Nr. nix weiter.
Meine Versuche siehst Du ganz unten im Script.
Gruß Helmut

LG Script.zip (3.02 KB)

Super! Danke! Werde ich heute Abend mal testen und das Skript mal studieren.

:slight_smile: cool Helmut du hast da schon fast mehr drin als bei mir, gleiche es am Weekend ab und ergänze sonst noch was ich zusätzlich drin habe. Wenn aber jemand herausfindet wie die YouTube-Funktion direkt gestartet werden kann dem spendier ich ein Mittagessen :slight_smile:

Gesendet von iPhone mit Tapatalk

Das Beispiel ist nur meine Spielwiese, IPS sleep ist nicht gut, muß mit der Timerfunktion besser gemacht werden.

Man könnte diese Klammerinhalt von einer zu übergebenden Variable füllen

processCommand(TV_CMD_CHANGE_CHANNEL, $channel)

Für mich ist es nicht so wichtig: Prime oder Netflix zu erreichen, weil ich dann immer noch den Film auswählen muß…
Das Schalten auf meine TV-Senderliste habe ich hin bekommen, reicht mir schon :wink:

Leider kann ich nicht so gut PHP programmieren, kopieren und einfügen schon :wink: Bewundere die Jungs die Module erstellen können.
Dafür kann ich gut Eier „weich“ kochen.
Gruß Helmut

Hello,
I’m French, and thank you for the php scripts (good job)
I use the PHP script „webos.inc.php“ to control my LG OLED TV (with WebOS 1)
When I test to send a message I sometimes get this error

Command response : {„type“:„error“,„id“:„message“,„error“:„401 insufficient permissions (not registered)“,„payload“:{}}

Do you have an idea of the origin of the problem?

Sorry für die wirklich späte Antwort!
Hier die Skripte für Netflix, Amazon. (wobei Amazon seit ein paar Tagen nicht mehr funktionert - also das Skript - UPDATE: falscher Code - funktioniert nun wieder)

Habe das „Welche App läuft gerade“ Skript ausprobiert, aber es gibt einen Fehlercode zurück. Ich denke LG hat ein Update gemacht!?

[b]<?[/b]
include_once '12280.ips.php';
include_once '14099.ips.php'; // wakeonlane

WakeOnLan('10.0.0.255', '20:17:42:6F:31:F8'); //Broadcastadresse des Netzwerks und MAC-Adrresse des Gerätes

sleep(2);

$tv = new webOSTV("10.0.0.130",3000,"609c232453f2abc26cef7c97680c31a6");   //LG Client-Key eintragen
$tv->connect();
$tv->lg_handshake();

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


$tv->disconnect();

Umschalten auf Amazon Prime Skript

[b]<?[/b]
include_once '12280.ips.php';
include_once '14099.ips.php'; // wakeonlane

WakeOnLan('10.0.0.255', '20:17:42:6F:31:F8'); //Broadcastadresse des Netzwerks und MAC-Adrresse des Gerätes

sleep(2);

$tv = new webOSTV("10.0.0.130",3000,"609c232453f2abc26cef7c97680c31a6");   //LG Client-Key eintragen
$tv->connect();
$tv->lg_handshake();

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


$tv->disconnect(); 

Umschalten auf Netflix Skript

include_once'12280.ips.php';include_once '14099.ips.php'; // wakeonlane

WakeOnLan('10.0.0.255', '20:17:42:6F:31:F8'); //Broadcastadresse des Netzwerks und MAC-Adrresse des Gerätes

sleep(2);

$tv = new webOSTV("10.0.0.130",3000,"609c232453f2abc26cef7c97680c31a6");   //LG Client-Key eintragen
$tv->connect();
$tv->lg_handshake();


$tv->send_command('{"id":"GET_INPUTS","type":"request","uri":"ssap://com.webos.service.appstatus/getAppStatus"}'); 

Welche App läuft gerade Skript

Helmut, processCommand wirft bei mir einen Fehler zurück. Hast du diese Funktion selber implementiert?

Hallo Cbham oder in der jetzigen Zeit : CBhome :wink:
Ich glaube meine Funktion(en) habe ich zusammenkopiert, angefangen ab hier.
Mags Du Deine Include Scripte mal zippen und hier posten?
Denn Deine „webOSTV“ habe gar nicht.
Gruß Helmut.