Panasonic TV mit IPS Steuern

Hallo,
hat jemand hier im Forum einen Ansatz um einen Panasonic TV per IPS ohne den Harmony Hub und passendem Modul zu steuern? Mein Modell ist aus der CXW Serie.

Das must Du ausprobieren was bei dem Modell möglich ist.

Viele Modelle lassen sich mit Viera Control steuern. Wenn das bei Deinem Modell der Fall sein sollte kannst Du z.B. die Befehle ausprobieren über ein Skript aus IP-Symcon zu senden.

Mein Modell ist aus 2015 und lässt sich auch über die Remote App steuern. Werde es mal ausprobieren, Danke dafür.

Hallo Zusammen

muss man da wirklich node.js auf dem Symcon-Server installieren? Gibt es nicht einen einfacheren Weg? resp. gibt es nicht ein passendes Panasonic oder Viera PHP-Mudul?

Grüsse
Patrick

Nein Du musst kein node.js installieren. Das geht auch mit IP-Symcon das war nur ein Beispiel in dem die Befehle vermerkt sind.

Hier findest Du das ganze mit PHP. Ob das geht kannst nur Du oder Jemand der das Gerät besitzt testen. Ob es Sinn macht dafür dann extra ein Modul zu machen, das würde dann wohl nur eine Variable für den Webfront anlegen wenn das hilft.

Hallo Fonzo

Merci für den Link zum Skript, aber ich verstehe noch nicht wie ich das nun anstellen soll…

  1. Ich erstelle ein Skript mit dessen Inhalt. Nenne es zb VIERA und krige eine Instanz-Nummer.

Aber wie übergebe ich nun dem Skript die entsprechenden Parameter wie die IP-Adresse vom TV und das entsprechende Komando mit dem entsprechenden Parameter?

Herzliche Grüsse
Patrick

Du erstellst Dir am besten ein Skript und kopierst dort die Klasse rein.



class vieraControl
{
    public $host;

    function __construct($hostname = false)
    {
        if ($hostname)
            $this->host = $hostname;
    }

    function createRequest($url, $urn, $action, $option = array())
    {

        $input = '<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
 <u:'.$action.' xmlns:u="urn:'.$urn.'">
 '.$option['args'].'
 </u:'.$action.'>
</s:Body>
</s:Envelope>';
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, 'http://'.$this->host.':55000/'.$url);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('SOAPACTION: "urn:'.$urn.'#'.$action.'"'));
        curl_setopt($curl, CURLOPT_POSTFIELDS, $input);
        //curl_setopt($curl, CURLOPT_HEADER, true);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);

        if ($option['returnXml'])
            return $data;
        else
            return $this->getResponse($data);
    }

    function getResponse($data)
    {
        $xml = simplexml_load_string($data);
        if ($xml === false)
            return false;
        $ns = $xml->getNamespaces(true);
        $soap = $xml->children($ns['s']);
        $res = $soap->children($ns['u'])->children();
        return $res[0];
    }

    function getVolume()
    {
        return $this->createRequest(
            'dmr/control_0',
            'schemas-upnp-org:service:RenderingControl:1',
            'GetVolume',
            array('args' => '<InstanceID>0</InstanceID><Channel>Master</Channel>')
        );
    }

    function sendKey($keyCode)
    {
        return $this->createRequest(
            'nrc/control_0',
            'panasonic-com:service:p00NetworkControl:1',
            'X_SendKey',
            array(
                'args' => '<X_KeyEvent>' . $keyCode . '</X_KeyEvent>',
                'returnXml' => true
            )
        );
    }

    function getMute()
    {
        return $this->createRequest(
            'dmr/control_0',
            'schemas-upnp-org:service:RenderingControl:1',
            'GetMute',
            array('args' => '<InstanceID>0</InstanceID><Channel>Master</Channel>')
        );
    }

    function setMute($enable = false)
    {
        $data = ($enable) ? '1' : '0';
        return $this->createRequest(
            'dmr/control_0',
            'schemas-upnp-org:service:RenderingControl:1',
            'SetMute',
            array('args' => '<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>'.$data.'</DesiredMute>')
        );
    }

    function setVolume($volume = '0')
    {
        $volume = intval($volume);
        if ($volume > 100 || $volume < 0)
            throw new Exception('Bad request to volume control. Must be between 0 and 100');

        return $this->createRequest(
            'dmr/control_0',
            'schemas-upnp-org:service:RenderingControl:1',
            'SetVolume',
            array('args' => '<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>'.$volume.'</DesiredVolume>', 'returnXml' => true)
        );
    }

    function sendString($string)
    {
        return $this->createRequest(
            'nrc/control_0',
            'panasonic-com:service:p00NetworkControl:1',
            'X_SendString',
            array(
                'args' => '<X_String>' . $string . '</X_String>',
                'returnXml' => true
            )
        );
    }
}

$keys = array(
    "NRC_CH_DOWN-ONOFF", // channel down
    "NRC_CH_UP-ONOFF", // channel up
    "NRC_VOLUP-ONOFF", // volume up
    "NRC_VOLDOWN-ONOFF", // volume down
    "NRC_MUTE-ONOFF", // mute
    "NRC_TV-ONOFF", // TV
    "NRC_CHG_INPUT-ONOFF", // AV,
    "NRC_RED-ONOFF", // red
    "NRC_GREEN-ONOFF", // green
    "NRC_YELLOW-ONOFF", // yellow
    "NRC_BLUE-ONOFF", // blue
    "NRC_VTOOLS-ONOFF", // VIERA tools
    "NRC_CANCEL-ONOFF", // Cancel / Exit
    "NRC_SUBMENU-ONOFF", // Option
    "NRC_RETURN-ONOFF", // Return
    "NRC_ENTER-ONOFF", // Control Center click / enter
    "NRC_RIGHT-ONOFF", // Control RIGHT
    "NRC_LEFT-ONOFF", // Control LEFT
    "NRC_UP-ONOFF", // Control UP
    "NRC_DOWN-ONOFF", // Control DOWN
    "NRC_3D-ONOFF", // 3D button
    "NRC_SD_CARD-ONOFF", // SD-card
    "NRC_DISP_MODE-ONOFF", // Display mode / Aspect ratio
    "NRC_MENU-ONOFF", // Menu
    "NRC_INTERNET-ONOFF", // VIERA connect
    "NRC_VIERA_LINK-ONOFF", // VIERA link
    "NRC_EPG-ONOFF", // Guide / EPG
    "NRC_TEXT-ONOFF", // Text / TTV
    "NRC_STTL-ONOFF", // STTL / Subtitles
    "NRC_INFO-ONOFF", // info
    "NRC_INDEX-ONOFF", // TTV index
    "NRC_HOLD-ONOFF", // TTV hold / image freeze
    "NRC_R_TUNE-ONOFF", // Last view
    "NRC_POWER-ONOFF", // Power off

    "NRC_REW-ONOFF", // rewind
    "NRC_PLAY-ONOFF", // play
    "NRC_FF-ONOFF", // fast forward
    "NRC_SKIP_PREV-ONOFF", // skip previous
    "NRC_PAUSE-ONOFF", // pause
    "NRC_SKIP_NEXT-ONOFF", // skip next
    "NRC_STOP-ONOFF", // stop
    "NRC_REC-ONOFF", // record

    // numeric buttons
    "NRC_D1-ONOFF", "NRC_D2-ONOFF", "NRC_D3-ONOFF", "NRC_D4-ONOFF", "NRC_D5-ONOFF",
    "NRC_D6-ONOFF", "NRC_D7-ONOFF", "NRC_D8-ONOFF", "NRC_D9-ONOFF", "NRC_D0-ONOFF",

    // The below commands were not avaliable in the iPhone app when using my
    // VIERA G30 - they were pulled out from a disassembly instead
    // only these top three did anything on my TV

    "NRC_P_NR-ONOFF", // P-NR (Noise reduction)
    "NRC_OFFTIMER-ONOFF", // off timer
    "NRC_R_TUNE-ONOFF", // Seems to do the same as INFO

    "NRC_CHG_NETWORK-ONOFF",
    "NRC_CC-ONOFF",
    "NRC_SAP-ONOFF",
    "NRC_RECLIST-ONOFF",
    "NRC_DRIVE-ONOFF",
    "NRC_DATA-ONOFF",
    "NRC_BD-ONOFF",
    "NRC_FAVORITE-ONOFF",
    "NRC_DIGA_CTL-ONOFF",
    "NRC_VOD-ONOFF",
    "NRC_ECO-ONOFF",
    "NRC_GAME-ONOFF",
    "NRC_EZ_SYNC-ONOFF",
    "NRC_PICTAI-ONOFF",
    "NRC_MPX-ONOFF",
    "NRC_SPLIT-ONOFF",
    "NRC_SWAP-ONOFF",
    "NRC_R_SCREEN-ONOFF",
    "NRC_30S_SKIP-ONOFF",
    "NRC_PROG-ONOFF",
    "NRC_TV_MUTE_ON-ONOFF",
    "NRC_TV_MUTE_OFF-ONOFF",
    "NRC_DMS_CH_UP-ONOFF",
    "NRC_DMS_CH_DOWN-ONOFF"

);

Dann erstellst Du ein weiteres Skript was etwas bestimmtes ausführen soll.

Hier bindest Du zunächst die Klasse ein mit


includeScript(12345 /*[Panasonic\Class]*/);
 

function includeScript($scriptID)
{
    $s = IPS_GetScript($scriptID);
    include($s['ScriptFile']);
}

Jetzt erstellst Du Dir ein Objekt aus der Klasse im selben Skript


$panasonictv = new vieraControl("192.168.1.100");

Du übergibst bei der Objekterstellung gleich die IP Adresse des Panasonic TV mit. Jetzt hast Du ein Objekt mit dem Du arbeiten kannst. Innerhalb der Klasse gibt es Methoden, das ist das bei dem jeweils function davor steht.

Auf die Methoden des Objekts greifst Du zu mit → also z.B.


$volume = $panasonictv->getVolume()
var_dump($volume);

Je nachdem was Du also in dem Skript machen willst besteht das Skript aus dem include der Klasse s.o. , dann dem Erstellen des Objekts und anschließend dem Methodenaufruf den Du benötigst.

Zum Ausführen eines Befehls nutzt Du die Methode


$keyCode = "NRC_TV-ONOFF";
$panasonictv->sendKey($keyCode);

Die Befehle entnimmst Du dem Array (s.o.) Ob das funktioniert kannst nur Du testen da ich so ein Gerät nicht besitze. Aber vielleicht ist hier ja noch der ein oder andere Panasonic Nutzer der das auch benutzt.

Hallo,

super Script.

Ausschalten funktioniert, aber einschalten nicht.

Kann hier jemand helfen?

Ich weis nicht wie das bei Panasonic ist, da musst Du mal mit Google recherchieren. Bei den Samsung TV Modellen ist es leider so, dass sich diese nur per IR Befehl einschalten lassen oder aber per HDMI aber leider nicht über das Netzwerk, eventuell ist das ja bei Panasonic genauso. Funktionieren denn andere Befehle außer Einschalten?

Hi Fonzo,

ja, Du hast recht.
Im ausgeschalteten Zustand ist leider auch die Netzwerkschnistelle (LAN+W-LAN) deaktiviert.
Somit ist die Kommunikation ausgeschlossen. Im TV Menu hab ich leider nix gefunden um dies zu ändern.
Alle anderen Befehle funktionieren. Danke dafür.

Kommt man nun nur noch über den Logitech Harmony Hub weiter?
Gibt es vielleicht ein günstiges IR-Modul für LAN?

Gruß Mario

Falls der TV an einem Verstärker hängt und dieser über IP-Symcon gesteuert werden kann wäre eine Möglichkeit den Verstärker einzuschalten und dann den TV über ein HDMI Kabel automatisch mit anzuschalten.

Ansonsten bleibt wohl nur IR. IP-Symcon unterstützt IR-Trans. PHP Module in IP-Symcon gibt es z.B. für einen Logitech Hub oder ein AIO Gateway das kann auch IR senden. Von den Gateways wäre sicher ein Logitech Hub das günstigste, der kann außerdem auch noch Geräte die über Bluetooth bedient werden steuern wie z.B. FireTV und ähnliches. Wenn man nur ein IR Signal versenden will geht das wohl auch noch billiger wenn Du basteln nicht scheust und auch löten kannst mit einer IR Diode am Rechner und lirc/winlirc. Damit habe ich aber keine Erfahrung da müsstest Du mal im Forum suchen bzw. fragen wie man so was mit einer IR Diode löst.

Hallo,

muss mich hier mal wieder einklinken. Hat mittlerweile jemand einen Panasonic TV mit Skripten vollwertig in IPS eingebunden? Als Vollwertig meine ich zu einem Vergleich mit dem Logitech Harmony Hub. Ich habe alles an einem Marantz AVR verbunden und bei mir gab es in der Vergangenheit Probleme wenn ich die HDMI ARC Funktionen an den Geräten eingeschaltet hatte um den TV wieder aus dem Standby zu holen. Wenn ich mich recht erinnere gab es da Probleme mit der FB des Hubs.

Was fehlt Dir denn? Hast Du das hier mal probiert lässt sich damit was steuern bei Deinem Modell?

Wenn es günstig und per Infrarot sein soll, kannst du meinen Ansatz testen: Günstige Infrarotfernbedienung mit Broadlink RM Mini3 Black Bean

@Fonzo,

bekomme es nicht hin. Habe mir zwei Skripte angelegt einmal mit der Klasse und ein zweites. Bekomme im ersten Skript immer ein Synthax Error in Line 14. Komme nicht drauf was da falsch ist.

Und was ist Line 14?
Einfacher ist wohl das Modul von Traxanos zu nutzten.

Vorne in deinem Script:

    $input = '&lt;?xml version="1.0" encoding="utf-8"?&gt; 

Das Modul von Traxanos schaltet doch nur den TV an oder aus oder sehe ich das falsch?

Und wie ist die genaue Fehlermeldung?

Grundsätzlich würde ich ja das Modul nutzten, wenn es schon eines gibt, bzw. das kann man ja erweitern. Es gibt zur Zeit keine expliziten Methoden für bestimmte Tasten außer Ein / Ausschalten, aber schalten kannst Du damit dennoch alles.
Dazu gibt es die Methode

PVT_SendKey($keyCode)

Bei der Methode fehlt zur Zeit die Deklaration das müsste wohl String sein und da wird der Key übergeben. Die Keys sollten wohl denen aus dem Skript entsprechen.
Keys

Aber da würde ich einfach Traxanos in dem Modultread fragen, er besitzt erstens den passenden TV und zweitens kann er ja auch Anpassungen am Modul vornehmen bzw. fürs Erste die Deklaration

public function SendKey(string $keyCode)

vornehmen, damit man die Methode auch sauber in IP-Symcon nutzten kann.

Ja, mal schauen was Traxanos dazu meint. Obwohl bei mir das anschalten über das WebFront nicht funktioniert, liegt wohl daran das die LAN Schnittstelle deaktiviert wird beim ausschalten. Kann eigentlich nicht verstehen das es bei so teuren Geräten keine IP Befehlsliste vom Hersteller gibt, genau so wie dem Bluray Player Panasonic UB-900.

Die folgende Meldung erhalte ich:

Parse error: syntax error, unexpected ‚version‘ (T_STRING) in C:\IP-Symcon\scripts\10067.ips.php on line 14
Abort Processing during Fatal-Error: syntax error, unexpected ‚version‘ (T_STRING)
Error in Script C:\IP-Symcon\scripts\10067.ips.php on Line 14

Hallo Fonzo, Ich habe mir vor kurzem auch einen Panasonic zugelegt und wollte den nur mit an / aus steuern über IPS und habe dein Script gefunden. Kannst du mir eventuell sagen wie der Methodenaufruf für den Befehl ein aus sein muß? Du hattest beschrieben das es der Befehl aus den Funktionen ist und der wäre dann sendKey deine Beschreibung war auf Volume ausgelegt. Wie müßte der aufruf dann sein für TV-ONOFF

Gruß nach Hessen

Jens