LG TV steuern/abfragen?

da ist ja noch jemand zu so später Stunde wach. Wollte gerade fragen ob es mit Deinem Script geklappt hat. Weil damit hatte ich es Probiert und es hat damals nicht hingehauen

sieht gerade so aus:

43503.ips.php = webosTv Script

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; webOSTV has a deprecated constructor in /var/lib/symcon/scripts/43503.ips.php on line 3

Warning: fsockopen(): unable to connect to 192.168.1.4:3000 (Operation timed out) in /var/lib/symcon/scripts/43503.ips.php on line 25

Warning: socket_set_timeout() expects parameter 1 to be resource, boolean given in /var/lib/symcon/scripts/43503.ips.php on line 26
Sending WS handshake GET / HTTP/1.1 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Version: 13 Sec-WebSocket-Key: cmxRUExmUlV1ME1Ia21zPQ== Host: 192.168.1.4:3000 ERROR during WS handshake!
Warning: fsockopen(): unable to connect to 192.168.1.4:3000 (Host is unreachable) in /var/lib/symcon/scripts/43503.ips.php on line 25

Warning: socket_set_timeout() expects parameter 1 to be resource, boolean given in /var/lib/symcon/scripts/43503.ips.php on line 26
Sending WS handshake GET / HTTP/1.1 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Version: 13 Sec-WebSocket-Key: cmxRUExmUlV1ME1Ia21zPQ== Host: 192.168.1.4:3000 ERROR during WS handshake!
Warning: fsockopen(): unable to connect to 192.168.1.4:3000 (Operation timed out) in /var/lib/symcon/scripts/43503.ips.php on line 25

Warning: socket_set_timeout() expects parameter 1 to be resource, boolean given in /var/lib/symcon/scripts/43503.ips.php on line 26
Sending WS handshake GET / HTTP/1.1 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Version: 13 Sec-WebSocket-Key: cmxRUExmUlV1ME1Ia21zPQ== Host: 192.168.1.4:3000 ERROR during WS handshake!
Warning: fsockopen(): unable to connect to 192.168.1.4:3000 (Operation timed out) in /var/lib/symcon/scripts/43503.ips.php on line 25

Warning: socket_set_timeout() expects parameter 1 to be resource, boolean given in /var/lib/symcon/scripts/43503.ips.php on line 26
Sending WS handshake GET / HTTP/1.1 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Version: 13 Sec-WebSocket-Key: cmxRUExmUlV1ME1Ia21zPQ== Host: 192.168.1.4:3000 ERROR during WS handshake! Connection closed to 192.168.1.4

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; webOSTV has a deprecated constructor in /var/lib/symcon/scripts/43503.ips.php on line 3
Sending WS handshake GET / HTTP/1.1 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Version: 13 Sec-WebSocket-Key: NHlPaWdHgmtPODVQY0FRcg== Host: 192.168.1.4:3000 WS Handshake Response: HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: KHecmiCdsM6TZFTlvW9yJwGH+fo= Sucessfull WS connection to 192.168.1.4:3000 Sending LG handshake {„type“:„register“,„id“:„register_0“,„payload“:{„forcePairing“:false,„pairingType“:„PROMPT“,„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“:„response“,„id“:„register_0“,„payload“:{„pairingType“:„PROMPT“,„returnValue“:true}} Sending command : {„id“:„message“,„type“:„request“,„uri“:„ssap://system.notifications/createToast“,„payload“:{„message“: „YEAH, it works!!!“}} Error sending command: {„id“:„message“,„type“:„request“,„uri“:„ssap://system.notifications/createToast“,„payload“:{„message“: „YEAH, it works!!!“}} Sending command : {„id“:„set_volume“,„type“:„request“,„uri“:„ssap://audio/setVolume“,„payload“:{„volume“:100}} Error sending command: {„id“:„set_volume“,„type“:„request“,„uri“:„ssap://audio/setVolume“,„payload“:{„volume“:100}} Connection closed to 192.168.1.4

irgendwas klappt noch nicht

Guten Morgen, Ich versuch mal zu rekonstruieren wie ich das ganze hier zum laufen bekommen habe.
Grundsätzlich basiert das ganze auf dem bisher hier geposteten.
Ich habe mit meinem laienhaften PHP wissen versucht alles übersichtlicher zu gestallten und musste auch, gerade was die „webos.inc.php“ angeht, an einigen stellen Hochkommas ausbessern.

Ich zeige hier mal die vollständige Config von mir.
(Das ganze läuft wie schon mal erwähnt unter Symcon 5.0)

1.Skript „webos.inc.php“ erstellt


<?

class webOSTV
{
    private $host, $port, $ws_key, $path, $lg_key, $sock, $connected=false, $handshaked=false;

    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);    
    }
        
    function connect()
    {
        $ws_handshake_cmd = "GET " . $this->path . " HTTP/1.1
";
        $ws_handshake_cmd.= "Upgrade: websocket
";
        $ws_handshake_cmd.= "Connection: Upgrade
";
        $ws_handshake_cmd.= "Sec-WebSocket-Version: 13
";            
        $ws_handshake_cmd.= "Sec-WebSocket-Key: " . $this->ws_key . "
";
        $ws_handshake_cmd.= "Host: ".$this->host.":".$this->port."

";
        $this->sock = fsockopen($this->host, $this->port, $errno, $errstr, 2);
        socket_set_timeout($this->sock, 0, 10000);
        echo     "Sending WS handshake
$ws_handshake_cmd
";
        $response = $this->send($ws_handshake_cmd);
        if ($response)
        {
            echo "WS Handshake Response:
$response
";
        } 
        else 
        echo "ERROR during WS handshake!
";
        preg_match('#Sec-WebSocket-Accept:\s(.*)$#mU', $response, $matches);
        if ($matches) 
            {
            $keyAccept = trim($matches[1]);
            $expectedResonse = base64_encode(pack('H*', sha1($this->ws_key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
            $this->connected = ($keyAccept === $expectedResonse) ? true : false;
            } 
        else $this->connected=false;
        if ($this->connected) echo "Sucessfull WS connection to $this->host:$this->port

";
        return $this->connected;  
    }
    
    function lg_handshake()
    {
        if (!$this->connected) $this->connect();
        if ($this->connected)
        {
            $handshake =    '{"type":"register","id":"register_0","payload":{"forcePairing":false,"pairingType":"PROMPT","client-key":"HANDSHAKEKEYGOESHERE","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=="}]}}}';
            if (isset($this->lg_key)) 
            $handshake = str_replace('HANDSHAKEKEYGOESHERE',$this->lg_key,$handshake);
            else  $handshake =    '{"type":"register","id":"register_0","payload":{"forcePairing":false,"pairingType":"PROMPT","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=="}]}}}';
            echo "Sending LG handshake
$handshake
";
            $response = $this->send(hybi10Encode($handshake));
            if ($response)
            {
                echo "
LG Handshake Response
".json_string($response)."
";
                $result = json_array($response);
                if ($result && array_key_exists('id',$result) &&  $result['id']=='result_0' && array_key_exists('client-key',$result['payload']))
                {
                    if ($this->lg_key == $result['payload']['client-key'])
                    echo "LG Client-Key successfully approved
"; 
                } 
                else if ($result && array_key_exists('id',$result) &&  $result['id']=='register_0' && array_key_exists('pairingType',$result['payload']) && array_key_exists('returnValue',$result['payload']))
                {
                    if ($result['payload']['pairingType'] == "PROMPT" && $result['payload']['returnValue'] == "true") 
                    {
                        $starttime = microtime(1);
                        $lg_key_received = false;
                        $error_received = false;
                        do
                        {
                            $response = @fread($this->sock, 8192);
                            $result = json_array($response);
                            if ($result && array_key_exists('id',$result) &&  $result['id']=='register_0' && is_array($result['payload']) && array_key_exists('client-key',$result['payload']))
                            {
                                $lg_key_received = true;
                                $this->lg_key = $result['payload']['client-key'];
                                echo "LG Client-Key successfully received: $this->lg_key
"; 
                            } 
                            else if ($result && array_key_exists('id',$result) &&  $result['id']=='register_0' && array_key_exists('error',$result))
                            {
                                $error_received = true;
                                echo "ERROR: ".$result['error']."
";
                            }
                            usleep(200000);
                            $time = microtime(1);
                        } 
                        while ($time-$starttime<60 && !$lg_key_received && !$error_received);
                    }
                }
            } 
            else echo "ERROR during LG handshake:
";
        } 
        else return FALSE; 
    }

    function disconnect()
    { 
        $this->connected=false;
        @fclose($this->sock);
        echo "Connection closed to $this->host
";
    }

    function send($msg)
    {
        @fwrite($this->sock, $msg);
        usleep(250000);
        $response = @fread($this->sock, 8192);
        return $response;
    }
    
    function send_command($cmd)
    {
        if (!$this->connected) $this->connect();
        if ($this->connected)
        {
            echo "Sending command      : $cmd
";
            $response = $this->send(hybi10Encode($cmd));
            if ($response)
                echo "Command response     : ".json_string($response)."
";
            else 
                echo "Error sending command: $cmd
";
            return $response;            
        } 
    }

   //Ab hier können Funktionen hinzugefügt werden

    function turnOff() //Einschalten geht nur über WOL!
    {
        $command = '{"id":"turnOff","type":"request","uri":"ssap://system/turnOff"}';
        $this->send_command($command);
    }

    function volumeUp()
    {
        $command = '{"id":"volumeUp","type":"request","uri":"ssap://audio/volumeUp"}';
        $this->send_command($command);
    }

    function volumeDown()
    {
        $command = '{"id":"volumeDown","type":"request","uri":"ssap://audio/volumeDown"}';
        $this->send_command($command);
    }
}    
        
function hybi10Encode($payload, $type = 'text', $masked = true) {
        $frameHead = array();
        $frame = '';
        $payloadLength = strlen($payload);

        switch ($type) {
            case 'text':
                $frameHead[0] = 129;
                break;

            case 'close':
                $frameHead[0] = 136;
                break;

            case 'ping':
                $frameHead[0] = 137;
                break;

            case 'pong':
                $frameHead[0] = 138;
                break;
        }

        if ($payloadLength > 65535)
        {
            $payloadLengthBin = str_split(sprintf('%064b', $payloadLength), 8);
            $frameHead[1] = ($masked === true) ? 255 : 127;
            for ($i = 0; $i < 8; $i++) 
            {
                $frameHead[$i + 2] = bindec($payloadLengthBin[$i]);
            }
            if ($frameHead[2] > 127) 
            {
                $this->close(1004);
                return false;
            }
        } 
        elseif ($payloadLength > 125) 
        {
            $payloadLengthBin = str_split(sprintf('%016b', $payloadLength), 8);
            $frameHead[1] = ($masked === true) ? 254 : 126;
            $frameHead[2] = bindec($payloadLengthBin[0]);
            $frameHead[3] = bindec($payloadLengthBin[1]);
        } 
        else    
        {
            $frameHead[1] = ($masked === true) ? $payloadLength + 128 : $payloadLength;
        }
        foreach (array_keys($frameHead) as $i) 
        {
            $frameHead[$i] = chr($frameHead[$i]);
        }
        if ($masked === true) 
        {
            $mask = array();
            for ($i = 0; $i < 4; $i++)
            {
                $mask[$i] = chr(rand(0, 255));
            }
            $frameHead = array_merge($frameHead, $mask);
        }
        $frame = implode('', $frameHead);
        for ($i = 0; $i < $payloadLength; $i++) 
        {
            $frame .= ($masked === true) ? $payload[$i] ^ $mask[$i % 4] : $payload[$i];
        }
        return $frame;
    }

    function generateRandomString($length = 10, $addSpaces = true, $addNumbers = true)
    {  
        $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"§$%&/()=[]{}';
        $useChars = array();
        for($i = 0; $i < $length; $i++)
        {
            $useChars[] = $characters[mt_rand(0, strlen($characters)-1)];
        }
        if($addSpaces === true)
        {
            array_push($useChars, ' ', ' ', ' ', ' ', ' ', ' ');
        }
        if($addNumbers === true)
        {
            array_push($useChars, rand(0,9), rand(0,9), rand(0,9));
        }
        shuffle($useChars);
        $randomString = trim(implode('', $useChars));
        $randomString = substr($randomString, 0, $length);
        return $randomString;
    }

    function json_array($str)
    {
        $result = json_decode(json_string($str),true);
        return $result;
    }
    
    function json_string($str)
    {
        $from = strpos($str,"{");
        $to = strripos($str,"}");
        $len = $to-$from+1;
        $result = substr($str,$from,$len);
        return $result;
    }

?>

2. Skript „WebOS.Handshake.php“ erstellt (Kommentare beachten)


<?
//1. TV Einschalten und Einstellungen im TV für Steuerung via App usw. prüfen ob aktiviert

include_once 'XXXXX.ips.php';                    //2. Skript ID des "webos.inc.php" Skript eintragen

$tv = new webOSTV("XXX.XXX.XXX.XXX",3000,"");    //3. IP des TV eintragen
$tv->connect();
$tv->lg_handshake();
$tv->disconnect();  

//4. Skript ausführen
//5. Meldung am TV beachten und akzeptieren (kurzes Zeitfenster)
//6. Response abwarten und LG Client-Key notieren. "LG Client-Key successfully received: 0afd4c4xxxxxxxxxx..."
//7. Mit einem neuen Skript befehle testen


?>

3. Skript für volumeUp erstellen (Kommentare beachten)


<?

include_once '54532.ips.php';
$tv = new webOSTV("XXX.XXX.XXX.XXX",3000,"0afd4c4xxxxxxxxxx");   //LG Client-Key eintragen
$tv->lg_handshake();

$tv->volumeUp()                // Gewünschte Funktion aus webos.inc eintragen (Hier volumeUp - lautstärke um +1 erhöhen)
                                           // momentan intigiert: volumeUp, volumeDown, turnOff

?>

Dann das volumeUP Skript ausführen.

Bei bedarf kann in das webos.inc.php Skript Funktionen (Befehle) hinzugefügt werden. Die entsprechende stelle habe ich dort als Kommentar angezeigt.
Eine Auswahl an Befehlen gibt es hier:

https://github.com/ConnectSDK/Connect-SDK-Android-Core/blob/master/src/com/connectsdk/service/WebOSTVService.java

Ich brauche unbedingt langsam mal Bearbeitungsrechte für meine Beiträge hier.
Bin zu früh auf „Antworten“ gekommen…

Jedenfalls, wollte ich noch abschließend erwähnen das ein Einschalten bei mir über Wake on Lan funktioniert.

Hier ein funktionierendes Skript (Kommentare beachten):


<?php 
# Wake on LAN WebOS LG TV

flush(); 
function WakeOnLan($addr, $mac) 
{ 
    $addr_byte = explode(':', $mac); 
    $hw_addr = ''; 
    for ($a=0; $a < 6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a])); 
    $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255); 
    for ($a = 1; $a <= 16; $a++) $msg .= $hw_addr; 
    $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
    if ($s == false) 
    { 
        echo "Error creating socket!
"; 
        echo "Error code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s)); 
    } 
    else 
    {
        $opt_ret = socket_set_option($s, 1, 6, TRUE); 
        if($opt_ret < 0) 
            { 
                echo "setsockopt() failed, error: " . strerror($opt_ret) . "
"; 
            } 
        $e = socket_sendto($s, $msg, strlen($msg), 0, $addr, 2050); 
        echo $e;
        socket_close($s); 
        echo "Magic Packet sent (".$e.") to ".$addr.", MAC=".$mac; 
    } 
} 

WakeOnLan('XXX.XXX.XXX.255', 'xx:xx:xx:xx:xx:xx'); //Broadcastadresse des Netzwerks und MAC-Adrresse des Gerätes

?>

ich probiere nachher gleich aus. Ist das der angepasste Code von Tetrapack oder ein anderer ?

Gute frage. Ich weiß es ehrlich gesagt nicht mehr. Hab gestern 7 Stunden investiert um das zum laufen zu bekommen und hab den Überblick verloren. Bin was PHP und Symcon angeht noch gaaaanz am Anfang.

ich auch :wink: - Danke für Deine Mühe. Habe die Scripte gerade erstellt und werde mal den ersten Versuch starten

Als ich es nach 7 stunden Arbeit geschafft habe meinen TV einschaltet zu können hat mich meine Freundin als bekloppt erklärt :smiley:

klasse, der Handshake hat geklappt :slight_smile:

jetzt mal schauen ob ich Wake on Lan auch hinbekomme

haha, ja meine Frau frag auch wozu ich das brauche, geht ja auch über Fernbedienung :smiley:

Nur der Handshake oder auch das absetzen eines Befehls?

Das steht ja in der Fehlermeldung, die Methode heißt wie die Klasse, das kann zukünftig Probleme geben.

Daher sollte wohl statt der Methode webOSTV, die den gleichen Namen trägt wie die Klasse, ein Konstruktor genutzt werden.
Also die Methode webOSTV durch __construct ersetzen.

Siehe auch __construct

WakeOnLan klappt noch nicht…

102Magic Packet sent (102) to 255.255.255.0, MAC=14:C9:15:B3:9B:BE

schickt er zwar, bekomme aber keine reaktion

anbei noch kurz die TV Settings

Die Broadcast-Adresse stimmt denk ich nicht.

ahn und ja den Tippfehler mit 13 und 15 in der MacAddresse hatte ich bereits behoben :slight_smile:

wo finde ich die den dann ?

Super. danke für den Tip. Der Fehler ist mir auch schon aufgefallen. Hab es gleich geändert.

Vorher:


<?

class webOSTV
{
    private $host, $port, $ws_key, $path, $lg_key, $sock, $connected=false, $handshaked=false;

    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);    
    }

Nachher:


<?

class webOSTV
{
    private $host, $port, $ws_key, $path, $lg_key, $sock, $connected=false, $handshaked=false;

    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);    
    }

Jetzt kommt auch kein Fehler mehr.

Nimm mal kleine Buchstaben bei der MAC und versuch als Broadcast 192.168.1.255