SHOW:
|
|
- or go back to the newest paste.
1 | <?php | |
2 | class vieraControl | |
3 | { | |
4 | public $host; | |
5 | ||
6 | function __construct($hostname = false) | |
7 | { | |
8 | if ($hostname) | |
9 | $this->host = $hostname; | |
10 | } | |
11 | ||
12 | function createRequest($url, $urn, $action, $option = array()) | |
13 | { | |
14 | ||
15 | $input = '<?xml version="1.0" encoding="utf-8"?> | |
16 | <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> | |
17 | <s:Body> | |
18 | <u:'.$action.' xmlns:u="urn:'.$urn.'"> | |
19 | '.$option['args'].' | |
20 | </u:'.$action.'> | |
21 | </s:Body> | |
22 | </s:Envelope>'; | |
23 | $curl = curl_init(); | |
24 | curl_setopt($curl, CURLOPT_URL, 'http://'.$this->host.':55000/'.$url); | |
25 | curl_setopt($curl, CURLOPT_POST, 1); | |
26 | curl_setopt($curl, CURLOPT_HTTPHEADER, array('SOAPACTION: "urn:'.$urn.'#'.$action.'"')); | |
27 | curl_setopt($curl, CURLOPT_POSTFIELDS, $input); | |
28 | //curl_setopt($curl, CURLOPT_HEADER, true); | |
29 | curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); | |
30 | $data = curl_exec($curl); | |
31 | ||
32 | if ($option['returnXml']) | |
33 | return $data; | |
34 | else | |
35 | return $this->getResponse($data); | |
36 | } | |
37 | ||
38 | function getResponse($data) | |
39 | { | |
40 | $xml = simplexml_load_string($data); | |
41 | if ($xml === false) | |
42 | return false; | |
43 | $ns = $xml->getNamespaces(true); | |
44 | $soap = $xml->children($ns['s']); | |
45 | $res = $soap->children($ns['u'])->children(); | |
46 | return $res[0]; | |
47 | } | |
48 | ||
49 | function getVolume() | |
50 | { | |
51 | return $this->createRequest( | |
52 | 'dmr/control_0', | |
53 | 'schemas-upnp-org:service:RenderingControl:1', | |
54 | 'GetVolume', | |
55 | array('args' => '<InstanceID>0</InstanceID><Channel>Master</Channel>') | |
56 | ); | |
57 | } | |
58 | ||
59 | function sendKey($keyCode) | |
60 | { | |
61 | return $this->createRequest( | |
62 | 'nrc/control_0', | |
63 | 'panasonic-com:service:p00NetworkControl:1', | |
64 | 'X_SendKey', | |
65 | array( | |
66 | 'args' => '<X_KeyEvent>' . $keyCode . '</X_KeyEvent>', | |
67 | 'returnXml' => true | |
68 | ) | |
69 | ); | |
70 | } | |
71 | ||
72 | function getMute() | |
73 | { | |
74 | return $this->createRequest( | |
75 | 'dmr/control_0', | |
76 | 'schemas-upnp-org:service:RenderingControl:1', | |
77 | 'GetMute', | |
78 | array('args' => '<InstanceID>0</InstanceID><Channel>Master</Channel>') | |
79 | ); | |
80 | } | |
81 | ||
82 | function setMute($enable = false) | |
83 | { | |
84 | $data = ($enable) ? '1' : '0'; | |
85 | return $this->createRequest( | |
86 | 'dmr/control_0', | |
87 | 'schemas-upnp-org:service:RenderingControl:1', | |
88 | 'SetMute', | |
89 | array('args' => '<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>'.$data.'</DesiredMute>') | |
90 | ); | |
91 | } | |
92 | ||
93 | function setVolume($volume = '0') | |
94 | { | |
95 | $volume = intval($volume); | |
96 | if ($volume > 100 || $volume < 0) | |
97 | throw new Exception('Bad request to volume control. Must be between 0 and 100'); | |
98 | ||
99 | return $this->createRequest( | |
100 | 'dmr/control_0', | |
101 | 'schemas-upnp-org:service:RenderingControl:1', | |
102 | 'SetVolume', | |
103 | array('args' => '<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>'.$volume.'</DesiredVolume>', 'returnXml' => true) | |
104 | ); | |
105 | } | |
106 | ||
107 | function sendString($string) | |
108 | { | |
109 | return $this->createRequest( | |
110 | 'nrc/control_0', | |
111 | 'panasonic-com:service:p00NetworkControl:1', | |
112 | 'X_SendString', | |
113 | array( | |
114 | 'args' => '<X_String>' . $string . '</X_String>', | |
115 | 'returnXml' => true | |
116 | ) | |
117 | ); | |
118 | } | |
119 | } | |
120 | ||
121 | $keys = array( | |
122 | "NRC_CH_DOWN-ONOFF", // channel down | |
123 | "NRC_CH_UP-ONOFF", // channel up | |
124 | "NRC_VOLUP-ONOFF", // volume up | |
125 | "NRC_VOLDOWN-ONOFF", // volume down | |
126 | "NRC_MUTE-ONOFF", // mute | |
127 | "NRC_TV-ONOFF", // TV | |
128 | "NRC_CHG_INPUT-ONOFF", // AV, | |
129 | "NRC_RED-ONOFF", // red | |
130 | "NRC_GREEN-ONOFF", // green | |
131 | "NRC_YELLOW-ONOFF", // yellow | |
132 | "NRC_BLUE-ONOFF", // blue | |
133 | "NRC_VTOOLS-ONOFF", // VIERA tools | |
134 | "NRC_CANCEL-ONOFF", // Cancel / Exit | |
135 | "NRC_SUBMENU-ONOFF", // Option | |
136 | "NRC_RETURN-ONOFF", // Return | |
137 | "NRC_ENTER-ONOFF", // Control Center click / enter | |
138 | "NRC_RIGHT-ONOFF", // Control RIGHT | |
139 | "NRC_LEFT-ONOFF", // Control LEFT | |
140 | "NRC_UP-ONOFF", // Control UP | |
141 | "NRC_DOWN-ONOFF", // Control DOWN | |
142 | "NRC_3D-ONOFF", // 3D button | |
143 | "NRC_SD_CARD-ONOFF", // SD-card | |
144 | "NRC_DISP_MODE-ONOFF", // Display mode / Aspect ratio | |
145 | "NRC_MENU-ONOFF", // Menu | |
146 | "NRC_INTERNET-ONOFF", // VIERA connect | |
147 | "NRC_VIERA_LINK-ONOFF", // VIERA link | |
148 | "NRC_EPG-ONOFF", // Guide / EPG | |
149 | "NRC_TEXT-ONOFF", // Text / TTV | |
150 | "NRC_STTL-ONOFF", // STTL / Subtitles | |
151 | "NRC_INFO-ONOFF", // info | |
152 | "NRC_INDEX-ONOFF", // TTV index | |
153 | "NRC_HOLD-ONOFF", // TTV hold / image freeze | |
154 | "NRC_R_TUNE-ONOFF", // Last view | |
155 | "NRC_POWER-ONOFF", // Power off | |
156 | ||
157 | "NRC_REW-ONOFF", // rewind | |
158 | "NRC_PLAY-ONOFF", // play | |
159 | "NRC_FF-ONOFF", // fast forward | |
160 | "NRC_SKIP_PREV-ONOFF", // skip previous | |
161 | "NRC_PAUSE-ONOFF", // pause | |
162 | "NRC_SKIP_NEXT-ONOFF", // skip next | |
163 | "NRC_STOP-ONOFF", // stop | |
164 | "NRC_REC-ONOFF", // record | |
165 | ||
166 | // numeric buttons | |
167 | "NRC_D1-ONOFF", "NRC_D2-ONOFF", "NRC_D3-ONOFF", "NRC_D4-ONOFF", "NRC_D5-ONOFF", | |
168 | "NRC_D6-ONOFF", "NRC_D7-ONOFF", "NRC_D8-ONOFF", "NRC_D9-ONOFF", "NRC_D0-ONOFF", | |
169 | ||
170 | // The below commands were not avaliable in the iPhone app when using my | |
171 | // VIERA G30 - they were pulled out from a disassembly instead | |
172 | // only these top three did anything on my TV | |
173 | ||
174 | "NRC_P_NR-ONOFF", // P-NR (Noise reduction) | |
175 | "NRC_OFFTIMER-ONOFF", // off timer | |
176 | "NRC_R_TUNE-ONOFF", // Seems to do the same as INFO | |
177 | ||
178 | "NRC_CHG_NETWORK-ONOFF", | |
179 | "NRC_CC-ONOFF", | |
180 | "NRC_SAP-ONOFF", | |
181 | "NRC_RECLIST-ONOFF", | |
182 | "NRC_DRIVE-ONOFF", | |
183 | "NRC_DATA-ONOFF", | |
184 | "NRC_BD-ONOFF", | |
185 | "NRC_FAVORITE-ONOFF", | |
186 | "NRC_DIGA_CTL-ONOFF", | |
187 | "NRC_VOD-ONOFF", | |
188 | "NRC_ECO-ONOFF", | |
189 | "NRC_GAME-ONOFF", | |
190 | "NRC_EZ_SYNC-ONOFF", | |
191 | "NRC_PICTAI-ONOFF", | |
192 | "NRC_MPX-ONOFF", | |
193 | "NRC_SPLIT-ONOFF", | |
194 | "NRC_SWAP-ONOFF", | |
195 | "NRC_R_SCREEN-ONOFF", | |
196 | "NRC_30S_SKIP-ONOFF", | |
197 | "NRC_PROG-ONOFF", | |
198 | "NRC_TV_MUTE_ON-ONOFF", | |
199 | "NRC_TV_MUTE_OFF-ONOFF", | |
200 | "NRC_DMS_CH_UP-ONOFF", | |
201 | "NRC_DMS_CH_DOWN-ONOFF" | |
202 | ||
203 | ); |