Hallo Leute,
ich habe eine Steuerung für den Medienplayer WDTV von WesternDigital (meiner Meinung nach der beste Medienplayer, gigantisches Preis-Leistungsverhältnis) über fhem geschrieben. Für alle, die so eine kleine Wunderschachtel haben, hier der Code - einfach in die 99_myUtils.pm einfügen (wenn ihr noch keine habt: http://www.fhemwiki.de/wiki/99_myUtils_anlegen (//www.fhemwiki.de/wiki/99_myUtils_anlegen)).
Ihr könnt alles steuern was die Fernbedienung hergibt. Dafür habe ich alle möglichen "Buchstaben" getestet und geschaut, wie die WDTV reagiert. Einzig das direkte Schalten von Subtitels habe ich nicht gefunden (wer da unterstützen will, sh. Aufruf der Funktion und Ergebnis bitte posten).
Hier der Code:
###################################
### WDTV
###################################
sub wdtv_cmd($)
{
my $ip = "10.11.30.101";
my ($action) = @_;
my $do;
SELECT:{
if ($action eq "onoff"){ $do="{\"remote\":\"w\"}"; last SELECT; }
if ($action eq "left"){ $do="{\"remote\":\"l\"}"; last SELECT; }
if ($action eq "right"){ $do="{\"remote\":\"r\"}"; last SELECT; }
if ($action eq "up"){ $do="{\"remote\":\"u\"}"; last SELECT; }
if ($action eq "down"){ $do="{\"remote\":\"d\"}"; last SELECT; }
if ($action eq "setup"){ $do="{\"remote\":\"s\"}"; last SELECT; }
if ($action eq "home"){ $do="{\"remote\":\"o\"}"; last SELECT; }
if ($action eq "ok"){ $do="{\"remote\":\"n\"}"; last SELECT; }
if ($action eq "louder"){ $do="{\"remote\":\"k\"}"; last SELECT; }
if ($action eq "quieter"){ $do="{\"remote\":\"m\"}"; last SELECT; }
if ($action eq "info"){ $do="{\"remote\":\"i\"}"; last SELECT; }
if ($action eq "pause"){ $do="{\"remote\":\"p\"}"; last SELECT; }
if ($action eq "mute"){ $do="{\"remote\":\"M\"}"; last SELECT; }
if ($action eq "jump"){ $do="{\"remote\":\"E\"}"; last SELECT; }
if ($action eq "v-setup"){ $do="{\"remote\":\"G\"}"; last SELECT; }
if ($action eq "rewind"){ $do="{\"remote\":\"H\"}"; last SELECT; }
if ($action eq "forward"){ $do="{\"remote\":\"I\"}"; last SELECT; }
if ($action eq "services"){ $do="{\"remote\":\"N\"}"; last SELECT; }
if ($action eq "eject"){ $do="{\"remote\":\"X\"}"; last SELECT; }
if ($action eq "fulloff"){ $do="{\"remote\":\"Q\"}"; last SELECT; }
}
my $wd_ret= GetFileFromURL( "http://10.11.30.101/cgi-bin/toServerValue.cgi", 4, $do);
my $pos=index($wd_ret,"success");
if ($pos eq -1) {return "Fehler:\n".$wd_ret;} else {return "Befehl erfolgreich abgesetzt";}
}
sub wdtv_cmdir($)
{
my ($do) = @_;
my $do1 = "{\"remote\":\"$do\"}";
my $wd_ret= GetFileFromURL( "http://10.11.30.101/cgi-bin/toServerValue.cgi", 4, $do1 );
return $wd_ret;
}
Aufruf der Funktiont:
entweder wdtv_cmd("gewünschterBefehl") - Befehlsliste sh. action eq "gewünschterBefehl"
oder ihr wollt noch ein paar Buchstaben testen / diese direkt eingeben, dann wdtv_cmdir("Buchstabe"). Die wdtv verarbeitet über den Befehl Klein- und Großbuchstaben, jeweils nur einstellig.
Viel Spaß wenn ihr es brauche könnt - Verbesserungsvorschläge sehr gerne und wer es benutzt / wem es gefällt, darf auch gerne mal auf Reputation + klicken ;-)
Viele Grüße
doc
PS: Danke an justme1968 für die perl-Starthilfe!
darf ich noch einen vorschlag machen?
du hast my $ip definiert aber benutzt es dann nicht sondern hast die ip fest in der url stehen :)
gruss
andre
;-) Lol. Danke für den Hinweis... Version 1.1:
###################################
### WDTV
###################################
sub wdtv_cmd($)
{
my $ip = "10.11.30.101"; #Hier eigene IP eintragen
my ($action) = @_;
my $do;
SELECT:{
if ($action eq "onoff"){ $do="{\"remote\":\"w\"}"; last SELECT; }
if ($action eq "left"){ $do="{\"remote\":\"l\"}"; last SELECT; }
if ($action eq "right"){ $do="{\"remote\":\"r\"}"; last SELECT; }
if ($action eq "up"){ $do="{\"remote\":\"u\"}"; last SELECT; }
if ($action eq "down"){ $do="{\"remote\":\"d\"}"; last SELECT; }
if ($action eq "setup"){ $do="{\"remote\":\"s\"}"; last SELECT; }
if ($action eq "home"){ $do="{\"remote\":\"o\"}"; last SELECT; }
if ($action eq "ok"){ $do="{\"remote\":\"n\"}"; last SELECT; }
if ($action eq "louder"){ $do="{\"remote\":\"k\"}"; last SELECT; }
if ($action eq "quieter"){ $do="{\"remote\":\"m\"}"; last SELECT; }
if ($action eq "info"){ $do="{\"remote\":\"i\"}"; last SELECT; }
if ($action eq "pause"){ $do="{\"remote\":\"p\"}"; last SELECT; }
if ($action eq "mute"){ $do="{\"remote\":\"M\"}"; last SELECT; }
if ($action eq "jump"){ $do="{\"remote\":\"E\"}"; last SELECT; }
if ($action eq "v-setup"){ $do="{\"remote\":\"G\"}"; last SELECT; }
if ($action eq "rewind"){ $do="{\"remote\":\"H\"}"; last SELECT; }
if ($action eq "forward"){ $do="{\"remote\":\"I\"}"; last SELECT; }
if ($action eq "services"){ $do="{\"remote\":\"N\"}"; last SELECT; }
if ($action eq "eject"){ $do="{\"remote\":\"X\"}"; last SELECT; }
if ($action eq "fulloff"){ $do="{\"remote\":\"Q\"}"; last SELECT; }
}
my $wd_ret= GetFileFromURL( "http://$ip/cgi-bin/toServerValue.cgi", 4, $do);
my $pos=index($wd_ret,"success");
if ($pos eq -1) {return "Fehler:\n".$wd_ret;} else {return "Befehl erfolgreich abgesetzt";}
}
sub wdtv_cmdir($)
{
my $ip = "10.11.30.101"; #Hier eigene IP eintragen
my ($do) = @_;
my $do1 = "{\"remote\":\"$do\"}";
my $wd_ret= GetFileFromURL( "http://$ip/cgi-bin/toServerValue.cgi", 4, $do1 );
return $wd_ret;
}
So, jetzt habe ich noch die fehlenden Codes rausgefunden...jetzt kann alles gesteuert werden, wie mit der Originalfernbedienung...
viele grüße
doc
sub wdtv_cmd($)
{
my $ip = "IP des WDTV hier eintragen";
my ($action) = @_;
my $do;
SELECT:{
if ($action eq "onoff"){ $do="{\"remote\":\"w\"}"; last SELECT; }
if ($action eq "left"){ $do="{\"remote\":\"l\"}"; last SELECT; }
if ($action eq "right"){ $do="{\"remote\":\"r\"}"; last SELECT; }
if ($action eq "up"){ $do="{\"remote\":\"u\"}"; last SELECT; }
if ($action eq "down"){ $do="{\"remote\":\"d\"}"; last SELECT; }
if ($action eq "setup"){ $do="{\"remote\":\"s\"}"; last SELECT; }
if ($action eq "home"){ $do="{\"remote\":\"o\"}"; last SELECT; }
if ($action eq "ok"){ $do="{\"remote\":\"n\"}"; last SELECT; }
if ($action eq "louder"){ $do="{\"remote\":\"k\"}"; last SELECT; }
if ($action eq "quieter"){ $do="{\"remote\":\"m\"}"; last SELECT; }
if ($action eq "info"){ $do="{\"remote\":\"i\"}"; last SELECT; }
if ($action eq "pause"){ $do="{\"remote\":\"p\"}"; last SELECT; }
if ($action eq "play"){ $do="{\"remote\":\"p\"}"; last SELECT; }
if ($action eq "mute"){ $do="{\"remote\":\"M\"}"; last SELECT; }
if ($action eq "search"){ $do="{\"remote\":\"E\"}"; last SELECT; }
if ($action eq "options"){ $do="{\"remote\":\"G\"}"; last SELECT; }
if ($action eq "rewind"){ $do="{\"remote\":\"H\"}"; last SELECT; }
if ($action eq "forward"){ $do="{\"remote\":\"I\"}"; last SELECT; }
if ($action eq "services"){ $do="{\"remote\":\"N\"}"; last SELECT; }
if ($action eq "eject"){ $do="{\"remote\":\"X\"}"; last SELECT; }
if ($action eq "fulloff"){ $do="{\"remote\":\"Q\"}"; last SELECT; }
if ($action eq "subtitle"){ $do="{\"remote\":\"\\\\\"}"; last SELECT; }
if ($action eq "audio"){ $do="{\"remote\":\",\"}"; last SELECT; }
if ($action eq "previous"){ $do="{\"remote\":\"[\"}"; last SELECT; }
if ($action eq "next"){ $do="{\"remote\":\"]\"}"; last SELECT; }
if ($action eq "stop"){ $do="{\"remote\":\"t\"}"; last SELECT; }
if ($action eq "back"){ $do="{\"remote\":\"T\"}"; last SELECT; }
if ($action eq "prevpage"){ $do="{\"remote\":\"U\"}"; last SELECT; }
if ($action eq "nextpage"){ $do="{\"remote\":\"D\"}"; last SELECT; }
if ($action eq "a-green"){ $do="{\"remote\":\"x\"}"; last SELECT; }
if ($action eq "b-red"){ $do="{\"remote\":\"y\"}"; last SELECT; }
if ($action eq "c-yellow"){ $do="{\"remote\":\"z\"}"; last SELECT; }
if ($action eq "d-blue"){ $do="{\"remote\":\"A\"}"; last SELECT;
if ($action eq "0"){ $do="{\"remote\":\"0\"}"; last SELECT; }
if ($action eq "1"){ $do="{\"remote\":\"1\"}"; last SELECT; }
if ($action eq "2"){ $do="{\"remote\":\"2\"}"; last SELECT; }
if ($action eq "3"){ $do="{\"remote\":\"3\"}"; last SELECT; }
if ($action eq "4"){ $do="{\"remote\":\"4\"}"; last SELECT; }
if ($action eq "5"){ $do="{\"remote\":\"5\"}"; last SELECT; }
if ($action eq "6"){ $do="{\"remote\":\"6\"}"; last SELECT; }
if ($action eq "7"){ $do="{\"remote\":\"7\"}"; last SELECT; }
if ($action eq "8"){ $do="{\"remote\":\"8\"}"; last SELECT; }
if ($action eq "9"){ $do="{\"remote\":\"9\"}"; last SELECT; }
}
my $wd_ret= GetFileFromURL( "http://$ip/cgi-bin/toServerValue.cgi", 4, $do);
my $pos=index($wd_ret,"success");
if ($pos eq -1) {return "Fehler:\n".$wd_ret;} else {return "Befehl erfolgreich abgesetzt";}
}
Hallo Doc,
dein Programm gefällt mir, ich versuche dein Lösungsansatz auf den IR Trans Wifi umzustricken.
Was mir fehlt ist ein Beispiel wie der Befehl mit define zu deklarieren ist um dem Programm ein Parameter bzw. Befehl zu übergeben.
Die zweite Anwendung wäre Befehle an die XML APi der Homematic Zentrale zu übergeben.
Für ein Beispiel wäre ich Dir dankbar !
Gruß Thomas
Servus!
Ein guter Hinweis, vielen Dank!
Das ganze kannst du nicht per define aufrufen, sondern direkt per fhem quasi als perl Befehl, in fhemweb gibst du oben in der Befehlszeile z.B. ein
{ wdtv_cmd("onoff") }
oder du rufst das ganze z.B. über die remotecontrol auf (dazu sh. commandref).
So und bei XML API - sorry da bin ich raus ;-) Keine Ahnung wie das gehen soll, da musst du dich an die wirklichen Cracks wenden - ich bin nur Hobbyanwender und -bastler ;-)
Viele Grüße
doc