WDTV Medienplayer steuern

Begonnen von docb, 21 Juli 2013, 13:46:57

Vorheriges Thema - Nächstes Thema

docb

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).
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!
I love FHEM!

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

docb

;-) 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;
}
I love FHEM!

docb

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";}
}
I love FHEM!

TJ

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

docb

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
I love FHEM!