Humax UHD 4tune+ Steuerung über UDP

Begonnen von MatthiasL, 28 Januar 2018, 23:58:03

Vorheriges Thema - Nächstes Thema

MatthiasL

Hallo zusammen,

ich habe die Frage, ob mir jemand etwas beim schreiben eines Moduls zur Steuerung des Humax UHD 4tune+ helfen kann.
Für Perl bin ich einfach zu doof :-D
Steuern lässt er sich einfach über UDP.
Anhand von Wireshark mitschnitten könnte man hiermit sicher auch noch andere Receiver von Humax steuern.
Theoretisch müssten zusätzlich diese funktionieren:

Humax FVP-4000T
HMS-1000S/DE
Humax H3 HSO-1000
HDR-2000T
HDR-FOX T2
HDR-7500T
HDR-7510T/AU
HDR-1003S/AU
iCord Cable
HD-FOX C/Retails/DE
HD-FREE/ME
HD3000HD/ME
HD3100HD/ME
HD3020HD
HD3025HD
iCord HD+/ADM/ME

Aber ein bisschen was habe ich schon hinbekommen, bzw. zusammengetragen.
Im Moment steuere ich das Gerät über folgenden Code in 99_MyUtils.pm
Gefunden im FHEM Forum

sub UDP_Msg($$)
{
  my ($dest,$cmd)  = @_;
  eval "require IO::Socket::INET";
  if($@) {
    Log 1, $@;
    return "Can't load IO::Socket::INET"
  }

  my $sock = IO::Socket::INET->new(
    Proto    => 'udp',
    PeerPort => 22558,
    PeerAddr => $dest
  );

  if(!$sock) {
    return "something went wrong"
  }

  $sock->send($cmd);
  $sock->close();

  return "send $cmd"
}

zusammen mit einem Dummy

Internals:
   CFGFN     
   NAME       Humax_Remote
   NR         40583
   STATE      Play
   TYPE       dummy
   READINGS:
     2018-01-28 23:34:09   state           Play
Attributes:
   group      Humax
   room       Wohnzimmer
   setList    Pause Play Stop
   webCmd     Pause:Play:Stop

und einem DOIF:

Internals:
   CFGFN     
   DEF        ([Humax_Remote] eq "Pause") ({UDP_Msg("10.0.1.3","hmxra\00\00\00rcu\00\01\00\00\000091\00\00\00\00\00\90\1e\01\01\00\00\00")})
DOELSEIF ([Humax_Remote] eq "Play") ({UDP_Msg("10.0.1.3","hmxra\00\00\00rcu\00\01\00\00\000090\00\00\00\00\00\90\1e\01\01\00\00\00")})
DOELSEIF ([Humax_Remote] eq "Stop") ({UDP_Msg("10.0.1.3","hmxra\00\00\00rcu\00\01\00\00\000092\00\00\00\00\00\90\1e\01\01\00\00\00")})
   NAME       Humax_Remote_DOIF
   NR         40651
   NTFY_ORDER 50-Humax_Remote_DOIF
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2018-01-28 23:34:09   Device          Humax_Remote
     2018-01-28 23:34:09   cmd             2
     2018-01-28 23:34:09   cmd_event       Humax_Remote
     2018-01-28 23:34:09   cmd_nr          2
     2018-01-28 23:34:09   e_Humax_Remote_STATE Play
     2018-01-28 23:34:09   error           {UDP_Msg("10.0.1.3","hmxra\00\00\00rcu\00\01\00\00\000090\00\00\00\00\00\90\1e\01\01\00\00\00")}: send hmxrarcu09090e
     2018-01-28 23:33:19   mode            enabled
     2018-01-28 23:34:09   state           cmd_2
   Regex:
   condition:
     0          InternalDoIf($hash,'Humax_Remote','STATE') eq "Pause"
     1          InternalDoIf($hash,'Humax_Remote','STATE') eq "Play"
     2          InternalDoIf($hash,'Humax_Remote','STATE') eq "Stop"
   devices:
     0           Humax_Remote
     1           Humax_Remote
     2           Humax_Remote
     all         Humax_Remote
   do:
     0:
       0          {UDP_Msg("10.0.1.3","hmxra\00\00\00rcu\00\01\00\00\000091\00\00\00\00\00\90\1e\01\01\00\00\00")}
     1:
       0          {UDP_Msg("10.0.1.3","hmxra\00\00\00rcu\00\01\00\00\000090\00\00\00\00\00\90\1e\01\01\00\00\00")}
     2:
       0          {UDP_Msg("10.0.1.3","hmxra\00\00\00rcu\00\01\00\00\000092\00\00\00\00\00\90\1e\01\01\00\00\00")}
     3:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      Play
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Humax_Remote
     timerevent Play
     triggerDev Humax_Remote
     timerevents:
       Play
     timereventsState:
       state: Play
     triggerEvents:
       Play
     triggerEventsState:
       state: Play
   internals:
     0           Humax_Remote:STATE
     1           Humax_Remote:STATE
     2           Humax_Remote:STATE
     all         Humax_Remote:STATE
   itimer:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Wohnzimmer

Beim DOIF sollte euch auffallen, dass sich nur ein Teil des Strings ändert. Dies müsste sich doch mit einer Art "lookup table" abhängig vom STATE vereinfach lassen, oder?

Ich bin mir sicher, dass das jemand sinnvoll zu einem Modul zusammenfassen könnte.
Weitere Kommandos (z.B. Rewind, Forward, Rec, Volume...) kann ich gerne zur Verfügung stellen.

Wünschenswert wäre ein Define mit der IP-Adresse des Receivers.
Am Ende würde ich das dann gerne mit dem FRITZBOX Modul kombinieren, damit bei einem eingehenden Anruf der Receiver auf Pause stellt und am Ende des Gesprächs automatisch das aktuelle Programm fortsetzt.
Ich freue mich auf eine gute Zusammenarbeit ;-)

MatthiasL

Für Interessenten, hier mein Modul. Hab es doch noch recht fix hinbekommen... Gar nicht so schwer wie ich dachte  ;)
define <NAME> HumaxRemote <IP-RECEIVER> <PORT>

Der Port ist bei meinem Humax UHD 4tune+ - 22558 - sollte bei allen dieser Geräte gleich sein.
Beispiel:
define Humax HumaxRemote 192.168.0.10 22558

Steuerung funktioniert einfach über das Dropdown:
set <NAME> <CMD>
z.B. set Humax PAUSE
oder:
set <NAME> ZZCodeTester <##>
z.B.: set Humax ZZCodeTester 90 ( => PLAY)

Testen ist gerne erwünscht. Gerne auch für andere HUMAX Receiver

Kruemel

Hallo,
ich habe das Module gerade installiert.
Habe einen HD NANO.
Leider funktioniert bisher nichts.
STATE=???
Hast du eine Idee?

VG
Wolfgang
RPi, Homematik, LAN-CFG, Bewegungsmelder, Rauchmelder, Rolläden, Schalter, Türkontakte, Heizungsventile, FB7390, Owncloud, xBMC

MatthiasL

Hallo Wolfgang,

Ich komme heute leider nicht dazu dies zu prüfen, melde mich aber morgen nochmal mit der Lösung.

VG

Matthias

Kruemel

Hallo Matthias,
danke für deine Hilfe.
VG
Wolfgang
RPi, Homematik, LAN-CFG, Bewegungsmelder, Rauchmelder, Rolläden, Schalter, Türkontakte, Heizungsventile, FB7390, Owncloud, xBMC

MatthiasL

Hallo Wolfgang,

Also so wie es aussieht lässt sich der Nano nicht über UDP Befehle steuern und somit funktioniert das Modul leider nicht.
Lässt sich dein Nano über die Humax Remote App steuern?
Wenn ja findet sich aber vielleicht noch ein weg.

State ??? Ist übrigens ,,normal". Da ich selbst eigentlich keine Ahnung von Perl Modulen habe, kann ich es leider nicht besser. Mein modul sendet nur blind die entsprechenden UDP Befehle an das definierte Geräte.

Kruemel

Hallo Matthias,
danke für die Informationen.
Die RemoteApp erkennt meinen Receiver nicht.
Daher muss ich jetzt mal nachdenken wie es weiter geht.
Als Möglichkeiten gibt es dann einen unterstützten Receiver zu besorgen. Da ich bereits mit Kodi's arbeite, könnte man auch dort mal schauen.
Ich habe hier einige Ansätze gelesen: https://forum.fhem.de/index.php?topic=40920.0

Wenn du nicht noch eine tolle Idee hast, sind die Tage meines HUMAX dann wohl gezählt, er geht dann wohl als Backup in die Kiste ;-))
VG
Wolfgang
RPi, Homematik, LAN-CFG, Bewegungsmelder, Rauchmelder, Rolläden, Schalter, Türkontakte, Heizungsventile, FB7390, Owncloud, xBMC