Hallo alle,
ich möchte mal meinen ersten (Anfänger-) Erfolg mit Euch teilen, evtl kann es noch jemand anderes gebrauchen.
Das Protokoll der Samsung Fernseher in Verbindung mit dem iPhone Remote App ist geknackt worden.
Hier ein Script wie man dem Fernseher über ein Netzwerksocket z.B. die Ausschalttaste senden kann:
<?
$src = "192.168.0.4"; # ip des IPS
$mac = "00-E0-81-31-80-CF"; # mac des IPS
$remote = "Perl Samsung Remote";
$dst = "192.168.0.105"; # ip of tv
$app = "iphone..iapp.samsung";
$tv = "UE55C6700"; # iphone.UE55C6700.iapp.samsung
$key = "KEY_POWEROFF"; #auszuführende Taste
error_reporting(0);
$ping = Sys_Ping($dst, 1000);
if ($ping ==false){
echo "<FONT SIZE='+3' COLOR=red><br>FERNSEHER REAGIERT NICHT</FONT>";
die();
}
$samsungstatus = IPS_GetInstance(13848 /*[UE55C6700 Socket]*/);
if ($samsungstatus['InstanceStatus']>102){
CSCK_SetOpen(13848 /*[UE55C6700 Socket]*/, true);
IPS_ApplyChanges(13848 /*[UE55C6700 Socket]*/);
$samsungstatus = IPS_GetInstance(13848 /*[UE55C6700 Socket]*/);
if ($samsungstatus['InstanceStatus']>102){
echo "<FONT SIZE='+3' COLOR=red><br>FERNSEHER REAGIERT NICHT</FONT>";
die();
}
}
CSCK_SetOpen(13848 /*[UE55C6700 Socket]*/, true);
$msg = chr(0x64).chr(0x00).chr(strlen(base64_encode($src))).chr(0x00).base64_encode($src).chr(strlen(base64_encode($mac))).chr(0x00).base64_encode($mac).chr(strlen(base64_encode($remote))).chr(0x00).base64_encode($remote);
$pkt = chr(0x00).chr(strlen($app)).chr(0x00).$app.chr(strlen($msg)).chr(0x00).$msg;
CSCK_SendText(13848 /*[UE55C6700 Socket]*/,$pkt);
$msg = chr(0x00).chr(0x00).chr(0x00).chr(strlen(base64_encode($key))).chr(0x00).base64_encode($key);
$pkt = chr(0x00).chr(strlen($tv)).chr(0x00).$tv.chr(strlen($msg)).chr(0x00).$msg;
CSCK_SendText(13848 /*[UE55C6700 Socket]*/,$pkt);
CSCK_SetOpen(13848 /*[UE55C6700 Socket]*/, false);
?>
Unter $src müsst ihr die IP Nummer der IPS Servers eintragen.
Unter $mac die MAC Adresse der Netzwerkkarte des IPS Servers.
Unter $dst kommt die IP Adresse des Fernsehers hinein.
Unter $tv die genaue Modellnummer - getestet habe ich es mit der C Serie vom letzten Jahr.
Die Variable $key beinhaltet den Namen der Taste. Welche Tasten sonst noch möglich sind, erfahrt Ihr >>hier<< . Das ist auch der Urheber des Scriptes. Ich habe es auf die IPS angepasst. Natürlich ist für jede weitere Taste ein neues Script nötig, in dem nur die $key Variable ausgetauscht wird.
Beim ersten Sendeversuch erscheint auf dem Fernseher erst einmal die Frage, ob die Applikation den Fernseher fernbedienen darf oder nicht. Danach lassen sich alle Befehle übertragen.
Natürlich müsst Ihr im IPS noch einen Client Socket anlegen und darin die IP Nummer und die Portnumer 55000 des Fernsehers eintragen. Vergesst nicht im Script die Instanz (in meinem Fall 13848) gegen die Instanz Eures Client Sockets auszutauschen.
Falls Ihr noch Wünsche und Verbesserungsvorschläge habt, lasst es mich wissen. Wie gesagt, es ist mein erstes Script für die IPS
jwka
21. Juli 2011 um 08:37
2
Hallo,
kannst Du vielleicht noch ein paar Links einstellen, woher Du die Befehlssequenzen hast?
Dann kann man daraus evtl. noch mehr machen.
Das wäre sehr Interessant.
jwka
Der Link ist doch drinnen, wo alle Tasten zu sehen sind. Oben im Text:
Welche Tasten sonst noch möglich sind, erfahrt Ihr hier.
Auf das „hier“ klicken…
sysrun
21. Juli 2011 um 09:29
4
Nice,
bin grad dabei das ganze per uPNP zu realisieren
jwka
21. Juli 2011 um 11:44
5
Sorry,
vielleicht bin ich der Einzige, aber bei mir geht kein klick auf >>hier<<.
Und auch „oben“ im Text sehe ich keinen Link.
kannst Du mir den vielleicht per pm senden?
Danke!
jwka
hbraun
21. Juli 2011 um 11:50
6
Die Variable $key beinhaltet den Namen der Taste. Welche Tasten sonst noch möglich sind, erfahrt Ihr hier .
Hier der Satz in dem das gesuchte hier steht
jwka
21. Juli 2011 um 11:58
7
Superl, danke.
Stand grad aufm Schlauch, was die Antwort von simba angeht … sorry!
Habe jetzt auch das „hier“ im ersten Beitrag gefunden. Das mit der blauen „Hervorhebung“ habe ich schlicht übersehen.
Thx
jwka
Ich habe es mal etwas besser hervorgehoben.
Ganz geil… würde mich vor allen Dingen für die IP gesteuerte Einblendung des PIP Modus interessieren, mit der man z.B. beim klingeln kurz die Türkamera einblenden könnte…
Dafür gibt es meines Wissens keinen direkten Befehl. Zumindest hat meine Fernbedienung keine PiP Taste. Du könntest höchstens eine Tastenfolge programmieren z.B.: MENU, RUNTER, RUNTER, RECHTS, RECHTS, OK…
Aber ob das zuverlässig ist?
ok, der link gab etwas in der richtung her…
Hallo,
vorweg, es klappt auch mit der D-Serie (UE40D5700).
Habe nur noch das Problem, wenn ich z.B. Programm 10 aufrufen möchte. Das Senden von Key_1 bis Key_9 geht. Befehl Key_10 funktioniert nicht.
Wie schaffe ich, das ich 2Stellige Programmnummern sende. Sehe anscheinend den Walt vor lautern Bäumen nicht.
Bitte um Hilfe.
Hast Du mal versucht den KEY_1 und KEY_0 hintereinander zu senden? Einfach mit zwei Befehlen?
Hab ich auch schon versucht, der nimmt nur den 1. Key
Im Script schliesse ich ja den Socket wieder. Hast Du den zwischen der 1 und 0 Sendung hoffentlich offen gelassen?
Es werden ja zwei Texte gesendet:
CSCK_SetOpen(13848 /*[UE55C6700 Socket]*/, true);
$msg = chr(0x64).chr(0x00).chr(strlen(base64_encode($src))).chr(0x00).base64_encode($src).chr(strlen(base64_encode($mac))).chr(0x00).base64_encode($mac).chr(strlen(base64_encode($remote))).chr(0x00).base64_encode($remote);
$pkt = chr(0x00).chr(strlen($app)).chr(0x00).$app.chr(strlen($msg)).chr(0x00).$msg;
CSCK_SendText(13848 /*[UE55C6700 Socket]*/,$pkt);
$msg = chr(0x00).chr(0x00).chr(0x00).chr(strlen(base64_encode($key))).chr(0x00).base64_encode($key);
$pkt = chr(0x00).chr(strlen($tv)).chr(0x00).$tv.chr(strlen($msg)).chr(0x00).$msg;
CSCK_SendText(13848 /*[UE55C6700 Socket]*/,$pkt);
CSCK_SetOpen(13848 /*[UE55C6700 Socket]*/, false);
Hast Du es so probiert?:
CSCK_SetOpen(13848 /*[UE55C6700 Socket]*/, true);
$msg = chr(0x64).chr(0x00).chr(strlen(base64_encode($src))).chr(0x00).base64_encode($src).chr(strlen(base64_encode($mac))).chr(0x00).base64_encode($mac).chr(strlen(base64_encode($remote))).chr(0x00).base64_encode($remote);
$pkt = chr(0x00).chr(strlen($app)).chr(0x00).$app.chr(strlen($msg)).chr(0x00).$msg;
CSCK_SendText(13848 /*[UE55C6700 Socket]*/,$pkt);
$msg = chr(0x00).chr(0x00).chr(0x00).chr(strlen(base64_encode($key))).chr(0x00).base64_encode($key);
$pkt = chr(0x00).chr(strlen($tv)).chr(0x00).$tv.chr(strlen($msg)).chr(0x00).$msg;
CSCK_SendText(13848 /*[UE55C6700 Socket]*/,$pkt);
$key = "KEY_0";
$msg = chr(0x00).chr(0x00).chr(0x00).chr(strlen(base64_encode($key))).chr(0x00).base64_encode($key);
$pkt = chr(0x00).chr(strlen($tv)).chr(0x00).$tv.chr(strlen($msg)).chr(0x00).$msg;
CSCK_SendText(13848 /*[UE55C6700 Socket]*/,$pkt);
CSCK_SetOpen(13848 /*[UE55C6700 Socket]*/, false);
Negativ, so habe ich es auch schon getestet.
Dann schick die KEY_9 und KEY_CH_UP :c)
Es gibt noch ein KEY_PLUS100. Vielleich kann man da noch eine dreistellige Zahl hinterher senden?!?
Das Provisorium benutze ich gerade.
Danke
KEY_PLUS100 > Dieser Befehl ist lt. TV-Anzeige nicht verfügbar
Hallo zusammen.
Hat noch einer eine link zu den keys? In dem neuen Wiki kann ich irgendwie nchts finden.
Grüße Stefan
Das gleiche Problem sonst super gibts endlich ne möglichkeit über IP den TV zu steuern… :-))