Inzwischen ist es mir gelungen dieses Projekt zu verwirklichen. Im Anhang ist mein php Skript. Zu erwähnen bleibt, dass mir die Software device spy upnp von Open Software Projects - UPnP Tools geholfen hat, die nötigen Parameter zu finden. Jedes Modell verwendet einen anderen Port und Ordner. (/smp_12_ ist bei jedem Gerät vermutlich anders. Ebenso kann das eine oder andere Gerät mehr Befehle ausüben). Die wichtigsten
GetCurrentExternalSource meldet zurück, welche Quelle momentan aktiv ist.
GetCurrentMainTVChannel gibt den Programmplatz zurück.
GetCurrentContentRecognition
Vermutlich könnte man auch das Lautstärke Volumen abfragen und ändern. Bei mir läuft das Audio über die Stereo-Anlage. Deshalb bringt diese Befehl mir nichts. Dafür kann man einige Bild Attribute (Kontrast, Schärfe, Farbton und Helligkeit) verändern.
Leider ist bei mir die Antwortdes des Fernseher nicht standard HTML. Wenn dies zuerst geschickt umgewandelt werden kann und dann mit Standard Befehlen zergliedert werden kann, bitte hier melden.
Im Anhang ein Beispiel für GetCurrentExternalSource.
$ip = '192.168.1.xyz';
$port = 7676;
$url = 'http://' . $ip . ':' . $port."/smp_12_";
$command3 = '
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<u:GetCurrentExternalSource xmlns:u="urn:samsung.com:service:MainTVAgent2:1" />
</s:Body>
</s:Envelope>';
$headers3 = array(
'Content-Type: text/xml; charset=UTF-8',
'SOAPACTION: "urn:samsung.com:service:MainTVAgent2:1#GetCurrentExternalSource"',
"Cache-Control: no-cache",
'Content-Length: ' . strlen($command3)
);
$request = curl_init();
curl_setopt($request, CURLOPT_URL, $url);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers3);
curl_setopt($request, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($request, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($request, CURLOPT_TIMEOUT, 3);
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($request, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($request, CURLOPT_ENCODING, '');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $command3);
$result = curl_exec($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
if ($httpCode == 0) {
die('Device not responding');
} else if ($httpCode == 400) {
die('Bad request');}
$first_pos = stripos($result, '<CurrentExternalSource>');
$second_pos = stripos($result, "</CurrentExternalSource>");
$a=substr($result,$first_pos+23,$second_pos-$first_pos-23);
print($a);