Control Panasonic VT50 with PHP
Posted: Tue Dec 31, 2013 7:05 am
Hi,
I had my Panasonic TV working through a PHP-script. I did a fresh install on my Mac and lost the script.
Now I am setting it up again but can't get it to work.
Got the standard script from the net. Just have to add a fixed IP in the script in the right place. Did several try's but none works.
Who can help?
Greetings,
Adrian
I had my Panasonic TV working through a PHP-script. I did a fresh install on my Mac and lost the script.
Now I am setting it up again but can't get it to work.
Got the standard script from the net. Just have to add a fixed IP in the script in the right place. Did several try's but none works.
Who can help?
Greetings,
Adrian
- Code: Select all
<?php
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"
);