Panasonic TV mit IPS Steuern

Hi. Vielen Dank für deine Bemühungen. Ich werde die Tage mal mit dem Laptop ins Wohnzimmer auswandern und ein wenig Testen. Vielleicht auch den Code etwas aufräumen/optimieren/anpassen, falls das notwendig und gewünscht ist.

Nachtrag: Verbinden geht und Power-OnOff geht auch. Volume geht nicht. Liegt vmtl. daran, dass ich im Hintergrund einen AVR für die Audio Funktion nutze.

Aufräumen, optimieren, na klar gerne.
Gruß Frank

Hallo,
werde das Skript auch mal testen. Habe schon nicht mehr geglaubt das sich da was in die Richtung entwickelt das ich meinen TV in IPS bekomme.

Wenn ich noch was testen soll oder so kannste gerne Bescheid geben.

LG
Stefan

Bei mir funktioniert das init Skript nicht.

Notice: SoapRequest failed (action = X_DisplayPinCode) in /var/lib/symcon/scripts/13997.ips.php on line 147

Fatal error: Uncaught Error: Call to a member function getNamespaces() on bool in /var/lib/symcon/scripts/13997.ips.php:149
Stack trace:
#0 /var/lib/symcon/scripts/13997.ips.php(77): SoapRequest('192.168.30.31', 'nrc/control_0', 'panasonic-com:s...', 'X_DisplayPinCod...', Array, 'u')
#1 /var/lib/symcon/scripts/13997.ips.php(14): request_pin_code('192.168.30.31')
#2 {main}
  thrown in /var/lib/symcon/scripts/13997.ips.php on line 149
Abort Processing during Fatal-Error: Uncaught Error: Call to a member function getNamespaces() on bool in /var/lib/symcon/scripts/13997.ips.php:149
Stack trace:
#0 /var/lib/symcon/scripts/13997.ips.php(77): SoapRequest('192.168.30.31', 'nrc/control_0', 'panasonic-com:s...', 'X_DisplayPinCod...', Array, 'u')
#1 /var/lib/symcon/scripts/13997.ips.php(14): request_pin_code('192.168.30.31')
#2 {main}
  thrown
   Error in Script /var/lib/symcon/scripts/13997.ips.php on Line 149

Welche Symcon und damit PHP Version? Kannst du von Symcon aus einen PING an den TV machen? TV ist an?

Symcon Version welche ich hier nicht erwähnen darf :sunglasses:

TV ist an und Netzwerk Verbindung besteht. Wie mache ich das mit dem Ping aus Symcon? Kann das sein weil ich Connect deaktiviert habe, das er keine Verbindung herstellt?

Habs gefunden
Sys_Ping(„meinrechner“, 1000); //Max. 1 Sekunde warten

Und geht der ping? Symcon-Connect ist unerheblich für diese Funktionen. Welche Hardware verwendest du für Symcon? Hat der Fernseher unter Netzwerk o.ä. eine generelle Funktion ‚Fernbedienung erlauben‘?

So wie das aussieht, hat das Skript von deinem TV keine Antwort im XML Format bekommen (oder auch gar keine Antwort). Könnte eventuell eine Einstellung am TV sein (Stichwort Netzwerk - Remote Einstellungen) oder er kann nicht erreicht werden.

Was müsste den der Ping zurück geben? Wenn ich das ausführe läuft das Skript ohne Meldung durch. Schaue mal ob ich die Funktion damals wieder deaktiviert hatte mit dem Remote Zugriff über Fremd Apps.

Remote Funktionen alles aktiviert. Vielleicht liegt es auch daran das der TV in einem anderen VLAN ist. VLAN’s können miteinander kommunizieren.

Symcon läuft auf einem NUC in einem Proxmox Container.

Tja VLAN… da musst schon Routing, etc. einrichten sonst wird das nichts.
Warum tut man sich vlans an und merkt dann erst ‚zufällig‘ an, dass das ein Problem sein könnte.

VLAN’s sind alle offen bzw. können miteinander kommunizieren.

Sind überall die richtigen Gateways eingetragen? Hast du ein ping vom Betriebssystem mit Symcon auf den TV erfolgreich durchgeführt?

Ja, sind alle entsprechend eingetragen.

Hast du ein ping vom Betriebssystem mit Symcon auf den TV erfolgreich durchgeführt?

Muss ich dann den Ping vom Proxmox Container ausführen oder kann ich das auch von der Pro Konsole aus vom Windows Rechner ausführen?

Über die php Funktion exec und dann die Systemfunktion ping sollte es auch aus IP-Symcon gehen.

Habe aus der Konsole des Symcon Containers den Ping an den TV gesendet.

Ergebnis:
64 bytes from 192.168.30.31: icmp_seq=45 ttl=63 time=0.602 ms
64 bytes from 192.168.30.31: icmp_seq=46 ttl=63 time=0.483 ms
64 bytes from 192.168.30.31: icmp_seq=47 ttl=63 time=0.430 ms
64 bytes from 192.168.30.31: icmp_seq=48 ttl=63 time=0.438 ms
64 bytes from 192.168.30.31: icmp_seq=49 ttl=63 time=0.580 ms
64 bytes from 192.168.30.31: icmp_seq=50 ttl=63 time=0.467 ms
64 bytes from 192.168.30.31: icmp_seq=51 ttl=63 time=0.564 ms
64 bytes from 192.168.30.31: icmp_seq=52 ttl=63 time=0.385 ms
64 bytes from 192.168.30.31: icmp_seq=53 ttl=63 time=0.596 ms
^C
— 192.168.30.31 ping statistics —
53 packets transmitted, 53 received, 0% packet loss, time 53030ms
rtt min/avg/max/mdev = 0.282/0.496/0.642/0.096 ms

Sieht doch gut aus. Starte den TV doch mal mit dem Netzstecker neu. Hat Symcon eine EIGENE IP oder muss es sich die irgendwie teilen?

Symcon hat eine eigene IP, also der Container 192.168.50.101. Andere Container fortlaufend xxx.102 usw.

Netzstecker ziehen hat nichts gebracht.

Hallöchen,

zum Skript RemotePTV hier noch drei Funktionen.

Die Funktion „GetVectorInfo“ liefert als Ergebnis einen Port. Was es damit auf sich hat, weiß ich nicht.

Die Funktion „GetApps“ liefert ein Array, welches die im TV vorhandenen Apps listet und die dazu gehörigen ProductID’s.

Mit diesen Nummern kann man dann mit der Funktion „LaunchApp“ die App’s starten.

Ich habe jetzt mal nicht - wie im Python Skript - unterschieden zwischen ProductID’s mit 16 Zahlen und <> 16 Zahlen, da meine alle 16 Zeichen haben.

function GetApps(){


global $session_iv, $session_key, $session_hmac_key, $app_id, $session_sequ_num, $session_id, $Host;
    $data = '<X_SessionId>'.$session_id.'</X_SessionId>'.
            '<X_SequenceNumber>'.$session_sequ_num.'</X_SequenceNumber>'.
            '<X_OriginalCommand>'.
                '<u:X_GetAppList xmlns:u="urn:panasonic-com:service:p00NetworkControl:1"></u:X_GetAppList>
            </X_OriginalCommand>';
    $encrypted_command = encrypt_soap_payload($data,$session_key,$session_iv,$session_hmac_key);        
    $action = 'X_EncryptedCommand';
    $param = '<X_ApplicationId>'.$app_id.'</X_ApplicationId><X_EncInfo>'.$encrypted_command.'</X_EncInfo>';
    $encrypt_result = SoapRequest($Host, 'nrc/control_0', 'panasonic-com:service:p00NetworkControl:1', $action, [
                               'args'      => $param,
                               'returnXml' => false],'u');
    $res = explode('vc_app', decrypt_soap_payload($encrypt_result, $session_key, $session_iv));
    return($res);

}

function GetVectorInfo(){

    global $session_iv, $session_key, $session_hmac_key, $app_id, $session_sequ_num, $session_id, $Host;
    $data = '<X_SessionId>'.$session_id.'</X_SessionId>'.
            '<X_SequenceNumber>'.$session_sequ_num.'</X_SequenceNumber>'.
            '<X_OriginalCommand>'.
                '<u:X_GetVectorInfo xmlns:u="urn:panasonic-com:service:p00NetworkControl:1"></u:X_GetVectorInfo>
            </X_OriginalCommand>';
    $encrypted_command = encrypt_soap_payload($data,$session_key,$session_iv,$session_hmac_key);        
    $action = 'X_EncryptedCommand';
    $param = '<X_ApplicationId>'.$app_id.'</X_ApplicationId><X_EncInfo>'.$encrypted_command.'</X_EncInfo>';
    $encrypt_result = SoapRequest($Host, 'nrc/control_0', 'panasonic-com:service:p00NetworkControl:1', $action, [
                               'args'      => $param,
                               'returnXml' => false],'u');
    $res = decrypt_soap_payload($encrypt_result, $session_key, $session_iv);
    return($res);
}

function LaunchApp($productID) {

    global $session_iv, $session_key, $session_hmac_key, $app_id, $session_sequ_num, $session_id, $Host;

    $data = '<X_SessionId>'.$session_id.'</X_SessionId>'.
            '<X_SequenceNumber>'.$session_sequ_num.'</X_SequenceNumber>'.
            '<X_OriginalCommand>'.
                '<u:X_LaunchApp xmlns:u="urn:panasonic-com:service:p00NetworkControl:1">
                    <X_AppType>vc_app</X_AppType><X_LaunchKeyword>product_id=' . $productID . '</X_LaunchKeyword>
                </u:X_LaunchApp>
            </X_OriginalCommand>';

    $encrypted_command = encrypt_soap_payload($data,$session_key,$session_iv,$session_hmac_key);        
    $action = 'X_EncryptedCommand';
    $param = '<X_ApplicationId>'.$app_id.'</X_ApplicationId><X_EncInfo>'.$encrypted_command.'</X_EncInfo>';
    $encrypt_result = SoapRequest($Host, 'nrc/control_0', 'panasonic-com:service:p00NetworkControl:1', $action, [
                               'args'      => $param,
                               'returnXml' => false],'u');
    
    return (decrypt_soap_payload($encrypt_result, $session_key, $session_iv)); 
}

Gruß Frank