Denon AV-Receiver mit FHEM in die Multimediasteuerung integrieren

IM EINSATZ?

Dann schau dir UNSEREN LOXKURS an und profitiere von unserem Wissen!

Zu einer halbwegs brauchbaren HiFi-Ausrüstung gehört selbstredend auch ein AV-Receiver, der nicht nur primär die Lautsprecher befeuert, sondern auch als verlässlicher HDMI-Switch auftritt. Und das ist wirklich relevant, kann im heutigen 4K-HDR-HDMI2.2-Dolby-Atmos-HD-Schiess-Mich-Wahn aber gerade aus Anwendersicht schnell alles andere als trivial werden. Da man weiss Gott wieviele Einstellungen vornehmen kann bzw. manchmal sogar muss, um das gewünschte audiovisuelle Erlebnis aus der jeweiligen Multimediaquelle herauszukitzeln, sollte so ein Wunderwerk der Technik natürlich auch ins Smart Home integrierbar sein, um Dinge nach und nach automatisieren zu können.

Wie diese Anbindung im Fall des Denon AVR-X1400H in FHEM aussieht und welche Möglichkeiten das für den Alltagsbetrieb mit sich bringt, ist Inhalt des nachfolgenden Blogpost.

AV-Receiver – Die Qual der Wahl

Neben dem von mir gewählten und hier vorgestellten Denon AVR-X1400H (Affiliate-Link) gibt es natürlich auch eine andere Reihe namhafter Hersteller wie Pioneer oder Marantz. Ich habe mir die letzten Jahre Einiges selbst angeschaut und bin mehrfach gewechselt, aus diversen Gründen. Immer hat mich irgendetwas gestört oder etwas hat nicht so funktioniert, wie ich es mir erhofft hatte. Umso glücklicher bin ich jetzt mit der Denon-Kiste, die mich technisch bisher am meisten überzeugen konnte und glücklicherweise auch optisch unaufdringlich daherkommt.

Ein wirklich wichtiger Grund, der für den Denon spricht, ist für mich die perfekt funktionierende Intergration ins Smart Home. Einerseits lässt er sich ohne Probleme über UDP-Nachrichten (z.B. über Loxone) ansteuern, um “einfache” Schaltvorgänge auszulösen und andererseits über das passende FHEM-Modul DENON_AVR einbinden, um neben den reinen Schaltvorgängen auch auf den aktuellen Gerätestatus zuzugreifen, um diese wiederum als Auslöser für bestimmte Aktionen nutzen zu können.

Das Beste für mich daran: Das FHEM-Modul – auch wenn es immer noch nicht im offiziellen Repository verfügbar ist und deshalb manuell nachinstalliert werden muss – funktioniert seit Wochen ohne jeglichen Aussetzer und hat auch beim mehrfachen Neustart von FHEM oder des AV-Receivers keinerelei Verbindungsprobleme. Und gerade das hat mich auf lange Sicht beim zuvor verwendeten Pioneer langsam angefangen zu nerven.

Denon AV-Receiver in FHEM einbinden

Um den Denon-Receiver in FHEM nutzen zu können, muss also erstmal das von raman im FHEM-Forum bereitgestellte Plugin manuell heruntergeladen werden -> Direktdownload

Das geladene zip-Archiv “Denon_AVR.zip” entpacken und die darin enthaltenen Dateien 70_DENON_AVR.pm und 71_DENON_AVR_ZONE.pm in den passenden FHEM-Plugin-Ordner kopieren. Dieser ist gewöhnlich im Pfad /opt/fhem/FHEM zu finden. Am einfachsten kopiert man das Ganze per FileZilla, indem man sich über das Protokoll “SFTP – SSH File Transfer Protocol” einloggt. Voraussetzung ist natürlich, dass SSH aktiviert ist – Bei Verwendung eines Raspbian-Images lautet der Benutzer dann “pi” und das Standardpasswort “raspberry”.

Jetzt geht es in der FHEM-Oberfläche weiter. Über den FHEM-Konsolenbefehl

define Denon DENON_AVR 192.168.3.87:23

wird der AV-Receiver eingebunden. Die IP-Adresse des Denon (hier: 192.168.3.87) muss jeder selbst ausfindig machen. Entweder über das OnScreen-Interface des Denon oder “konventionell” über den heimischen Router. Wer DHCP (automatische IP-Vergabe durch den Router) verwendet, sollte hier sowieso sicherstellen, dass sich die IP später nicht mehr ändert. Das geht bspw. bei der Fritz!Box über die Option: “Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen.”

Aber zurück zu FHEM. Jetzt noch den FHEM-Konsolenbefehl

attr Denon room Wohnzimmer

absetzen und schon ist der Denon im richtigen Raum zugewiesen.

Bei meinem Setup habe ich dann noch das Attribut “event-on-change-reading” angepasst, um Ereignisse bei den mir wichtigen Reading zu erzeugen (das ist bei mir wichtig, da ich Statusänderungen per UDP an Loxone weiterschicke):

attr Denon event-on-change-reading presence,state,zoneMain,input,volume,mute,signal,sound

Abschließend dann noch oben links auf “Save config” klicken, um die Änderungen dauerhaft zu speichern.

Hat man das Gerät ausgewählt, sollten sich die “Readings” schnell füllen.

Um erste Schaltvorgang zu testen, bietet sich bspw. das Einschalten des AV-Receivers an:

set Denon on

Oder beim eingeschaltenem AV-Receiver bspw. der Stummschalten-Befehl:

set Denon mute toggle

Ein weiteres Absetzen des Befehls schaltet den Stummodus dann wieder aus.

Hat das geklappt, kann man sich munter daran machen verschiedene Szenarien umzusetzen.

Denon AV-Receiver in Multimediasteuerung integrieren

Denkbar sind selbstredend unterschiedlichste Szenarien, von denen ich einfach mal einige herausgreife, die ich praktisch finde.

Oft gestört hat mich die Tatsache, dass die meisten HDMI-Zuspielgeräte unterschiedliche Audio-Pegel liefern. Steht der AV-Receiver dann bspw. auf 30%, was beim Fernsehen über die VU+ (Input TV) lautstärketechnisch passt, ist dieser Wert beim Wechsel zum Apple TV (Input DVD) schlicht zu leise. Dieses Problem lässt sich dann über passende notify-Befehle adressieren, um beim Eingangswechsel die Laustärke entsprechend zu setzen:

define DenonInputTVSetVol notify Denon.input:.TV set Denon volume 30
define DenonInputDVDSetVol notify Denon.input:.DVD set Denon volume 40

Spannender wird es natürlich, wenn beim Eingangswechsel auch andere Geräte getriggert werden. So z.B. meine VU+, welche beim Wechsel des Denon auf den Input TV eingeschaltet und Ausschalten des AV-Receivers in den Standby fährt:

define DenonInputTVSetVUOn notify Denon.input:.TV set VUSolo4k on
define DenonOffSetVUOff notify Denon.off set VUSolo4k off

Da ich eine Harmony Elite (Affiliate-Link) nutze, liese sich das Ein- und Ausschalten der VU+ natürlich auch augenscheinlich einfacher über eine Harmony-Aktion lösen. Hier hat man jedoch die Einschränkung, dass die VU+ lediglich einen “Toggle On/Standby” entgegennimmt und nicht wie bei der FHEM-Lösung den Trigger “On” bzw. “Standby”. Manchmal findet das Infrarot-Signal der Harmony nicht seinen Weg zur VU+ und der Status ist verdreht. Dazu kommt, dass die Harmony schlicht träger beim Starten einer Aktion wird, je mehr Start-Befehle nacheinander abgearbeitet werden müssen. Deshalb hab ich es mittlerweile so eingerichtet, dass die Harmony wirklich nur die relevanten Befehle sendet und der Rest über FHEM abgewickelt wird. Das geht einfach einen guten Rutsch schneller und funktioniert zudem noch viel zuverlässiger.

Was ich in dieser Form nicht nutze, was ich mir aber gut vorstellen könnte, wenn ich nicht eh bereits den Play-Status meiner Plex-Clients auslesen würde, wäre die Regelung der Beleuchtung anhand der Lautstärke. Sobald die Lautstärke aufgedreht wird, kann man davon ausgehen, dass ein Film läuft und entsprechend wird die Beleuchtung ausgeschaltet (bzw. ein Dummy namens “Moviemode” getriggert).

define DenonMovieModeOn notify Denon.volume.* { if ((ReadingsVal("Denon","volume",0) > 45) && (ReadingsVal("Denon","input",0) eq "DVD")) { fhem("set Moviemode on")}

Denkbar wäre auch, dass ab einem gewissen Volume-Werts der Surround-Modus angepasst wird, der entsprechend auf “Movie” wechselt:

define DenonSurroundModeMovie notify Denon.volume.* { if ((ReadingsVal("Denon","volume",0) > 45) && (ReadingsVal("Denon","input",0) eq "DVD")) { fhem("set Denon surroundMode Movie")}

Und bitte schlagt mich nicht, weil ich immer noch notify-Befehle benutze und kein DOIF. Ich beschäftige mich damit zu wenig, da ich den Großteil der Regeln aktuell über Loxone umsetze. Wäre aber dennoch froh, wenn jemand die DOIF-Pendants zu obigen Befehlen durchschicken könnte, dann pflege ich das im Artikel direkt nach. Vielleicht finde ich dann auch endlich mal den Zugang dazu. Danke schonmal für die Hilfe!

Und hier die DOIF-Befehle. Vielen Dank an Denis für die Hilfe!

define DenonInput DOIF 	([Denon] eq "on" and [Denon:input] eq "TV")(set VUSolo4k on)(set Denon volume 30) DOELSEIF
						([Denon] eq "on" and [Denon:input] eq "DVD")(set Denon volume 40) DOELSEIF
						([Denon] eq "off")(set VUSolo4k off)

define DenonMovieMode ([Denon] eq "on" and [Denon:volume] > 45 and [Denon:input] eq "DVD")(set Moviemode on)(set Denon surroundMode Movie)

Achso und hier noch der Auszug aus meiner 99_myUtils.pm zur Übermittlung der Denon-Status-Informationen in Richtung Loxone:

#DenonToLoxone
#device:
#1 presence present/absent
#2 state on/off
#3 zoneMain on/off
#4 input DVD
#5 volume 23.5
#6 mute on/off
#7 signal PCM
#8 sound Stereo

sub DenonToLoxone($)
{
 my ($device) = @_;
 my $presence = ReadingsVal("$device","presence","-1");
 if ($presence eq "absent") {
  $presence = "0";
 }
 if ($presence eq "present") {
  $presence = "1";
 }
 my $state = ReadingsVal("$device","state","-1");
 if ($state eq "off") {
  $state = "0";
 }
 if ($state eq "on") {
  $state = "1";
 }
 my $zoneMain = ReadingsVal("$device","zoneMain","-1");
 if ($zoneMain eq "off") {
  $zoneMain = "0";
 }
 if ($zoneMain eq "on") {
  $zoneMain = "1";
 }
 my $power = ReadingsVal("$device","power","-1");
 if ($power eq "off") {
  $power = "0";
 }
 my $input = ReadingsVal("$device","input","-1");
 if ($input eq "Blu-Ray") {
  $input = "1";
 }
 if ($input eq "Cbl/Sat") {
  $input = "2";
 }
 if ($input eq "DVD") {
  $input = "3";
 }
 my $volume = ReadingsVal("$device","volume","-1");
 my $mute = ReadingsVal("$device","mute","-1");
 if ($mute eq "off") {
  $mute = "0";
 }
 if ($mute eq "on") {
  $mute = "1";
 }
 my $signal = ReadingsVal("$device","signal","-1");
 if ($signal eq "PCM") {
  $signal = "1";
 }
 my $sound = ReadingsVal("$device","sound","-1");
 if ($sound eq "Direct") {
  $sound = "1";
 }
 if ($sound eq "Movie") {
  $sound = "2";
 }
 if ($sound eq "Stereo") {
  $sound = "3";
 }
 if ($sound eq "Multichannel Stereo") {
  $sound = "4";
 }
 if ($sound eq "Dolby Surround") {
  $sound = "5";
 }
 if ($sound eq "DTS Surround") {
  $sound = "6";
 }
 if ($sound eq "Music") {
  $sound = "7";
 }
 if ($sound eq "Auto") {
  $sound = "8";
 }
 UDP_Msg("192.168.3.5" , "7001" , "$device: $presence $state $zoneMain $input $volume $mute $signal $sound");
}


#UDP Befehle senden
sub UDP_Msg($$)
{
my ($dest,$port,$cmd) = @_;
my $sock = IO::Socket::INET->new(
Proto => 'udp',
PeerPort => $port,
PeerAddr => $dest
) or die "Could not create socket: $!n";
$sock->send($cmd) or die "Send error: $!n";
return "send $cmd";
}

Damit Statusänderungen übermittelt werden dann abschließend noch der Trigger in FHEM:

define DenonToLoxone notify .*Denon.* {DenonToLoxone("$NAME")}

Der virtuelle UDP-Eingang in Loxone für den fünften Wert “Input” hat dann bspw. die Befehlserkennung:

Denon: \# \# \# \# \v

Sind alle UDP-Eingänge definiert und mit passenden Status-Elementen verknüpft, sieht es bei mir in der Loxone Visualisierung so aus:

Aus meinem täglichen Leben

Wirklich sinnvoll automatisieren lässt sich die Multimediasteuerung erst dann, wenn alle dazu genutzten Geräte zentral gesteuert werden können. Der Denon AVR-X1400H (Affiliate-Link) ist einer der zentralen Devices, die mir in meinem Setup bisher noch gefehlt haben. Mit der Integration in FHEM bin ich wirklich sehr glücklich, da die Statusänderungen in Echtzeit weiterverarbeitet werden können. Auch wenn bspw. die Lautstärke direkt am AV-Receiver “händisch” verstellt wird, erfährt FHEM sofort davon. Echt genial!

Vielleicht stelle ich auch mal meine Multimedia-Integration in Loxone vor, denn hier laufen alle Fäden zusammen. Wenn jemand Interesse daran hat einfach per Kommetar mitteilen.

22 Kommentare
    1. Hi Manuel,
      alles klar, ich werde dazu am besten einen eigenständigen Blogpost schreiben, um der Thematik gerecht zu werden. Ist hiermit auf meiner ToDo-Liste.

      Grüße
      Jörg

  1. Hallo,

    Vielen Dank dafür.
    Ich habe mir vor kurzem einen X3400H von Denon gekauft.
    Die Inbetriebnahme war eine ziemliche Herausforderung.
    Ich hätte da eine Frage zu einem anderen Thema. Bisher konnte ich nämlich nirgendwo was dazu finden.
    Vielleicht kann mir hier jemand helfen?

    An einem scheitere ich bis jetzt.
    Die Integration des AVR mit dem Fernseher und meinem Kodi würde am besten über HDMI klappen
    Leider hat mein älterer Fernseher kein ARC, sondern hat nur die Ton-Ausgabe für TOSLink.

    Kennt jemand eine Möglichkeit den Ton des Fernsehers in den ARC eines HDMI einzukoppeln?
    Bis jetzt habe ich nur Geräte gefunden, die z.B. den Ton austauschen.

    Ich bin für jede Hilfe dankbar.
    Danke im Voraus
    Lg, Gerhard

  2. Hallo, mich würde interessieren wir ihr diverse Internet-streams an den denon sendet?
    Problem1 es werden nicht alle Arten von streams unterstützt oder ich weiß nicht wie ich diese angeben soll.
    Problem2 mit unter lässt sich der Denon nicht mehr richtig bedienen nach dem man einen Stream gestartet hat.
    Problem3 der Denon wird nicht als dnla device erkannt…
    Ich habe denn X2400.

  3. Hallo Jörg,

    ja das ist echt Interessant, das die Integration schon soweit fortgeschritten ist, das in Loxone wird mich nat.auch interessieren. Verfolge dein TechBlog immer mal wieder.

    Danke für die vielen guten Tipps und Tricks

    Gruß
    GSi

  4. Hi Jörg,
    ich habe mal deine notify-defines als DOIF umgesetzt und zusammengefasst (ungetestet):

    define DenonInput DOIF ([Denon] eq “on” and [Denon:input] eq “TV”)(set VUSolo4k on)(set Denon volume 30) DOELSEIF
    ([Denon] eq “on” and [Denon:input] eq “DVD”)(set Denon volume 40) DOELSEIF
    ([Denon] eq “off”)(set VUSolo4k off)

    define DenonMovieMode ([Denon] eq “on” and [Denon:volume] > 45 and [Denon:input] eq “DVD”)(set Moviemode on)(set Denon surroundMode Movie)

  5. Hi Jörg…

    Schöne Ostern 🙂

    Klasse Anleitung und die Idee finde ich Super.

    Bei mir funktioniert das setzten der Lautstärke nur, wenn ich ein “sleep” ins notify einbaue. Schaltet das bei dir so wie du oben beschrieben hast zuverlässig die Lautstärke um?

    HomeCinema_Audio:input:.Sat/Cbl {
    fhem(“sleep 2”);
    fhem(“set HomeCinema_Audio volume 10”);
    }

    Beste Grüsse
    Marco

    1. Marco, Deine Antwort ist zwar schon etwas länger her, aber bei mir geht es mit dem AVR-X2500H auch nur mit der Pause.

  6. Hallo Jörg,
    klasse Beitrag zum Thema Denon Integration.

    Habe noch eine Frage zu folgenden Punkt: ” Deshalb hab ich es mittlerweile so eingerichtet, dass die Harmony wirklich nur die relevanten Befehle sendet und der Rest über FHEM abgewickelt wird.” Hattest du dazu schon einmal was geschrieben bzw. könntest du mal kurz ein Beispiel darstellen wie du es genau realisiert hast. Mich nerven diese Verzögerungen bei Harmony nämlich ebenfalls.

    VG David

    1. Hi David!
      Nope, dazu hatte ich bisher noch keine weiteren Infos geliefert.

      Ich habe beim Aktivieren einer Harmony-Aktion alle Harmony-Startbefehle für die einzelnen Geräte deaktiviert. Darum kümmert sich dann komplett FHEM.

      Beispiel für die Ansteuerung des Denon-Receivers:

      #DENON via IP (FHEM)
      define DenonOnDVD notify HarmonyHub.currentActivity:.starting.Apple set Denon input DVD
      define DenonOnCblSat notify HarmonyHub.currentActivity:.starting.Fernsehen set Denon input Cbl/Sat
      define DenonOnPlex notify HarmonyHub.currentActivity:.starting.Plex set Denon input Blu-Ray
      define DenonOff notify HarmonyHub.activity:.PowerOff set Denon zoneMain off

      Oder hier für den TV (hier werden die Start- bzw. Stopbefehle mit zwei sekündiger Verzögerung erneut gesendet, da der TV den Infrarotbefehl manchmal nicht frisst):

      #LG via IR (FHEM)
      define LGOn notify HarmonyHub.currentActivity:.starting.* set HarmonyHub command LG PowerOn;; sleep 2;; set HarmonyHub command LG PowerOn
      define LGOff notify HarmonyHub.activity:.PowerOff set HarmonyHub command LG PowerOff;; sleep 2;; set HarmonyHub command LG PowerOff

      Und hier bspw. noch für die VUPlus (Enigma2-Receiver):
      #VUPlus via IP (FHEM)
      define VUStart notify HarmonyHub.currentActivity:.starting.Fernsehen set VUSolo4k on;; set VUSolo4k input tv;; set VUSolo4k volume 85
      define VUStandby1 notify HarmonyHub.currentActivity:.stopping.Fernsehen set VUSolo4k off
      define VUStandby2 notify HarmonyHub.currentActivity:.starting.Apple set VUSolo4k off
      define VUStandby3 notify HarmonyHub.currentActivity:.starting.Plex set VUSolo4k off

      Hoffe damit wird es etwas klarer.

      Grüße
      Jörg

    1. Kannst du vielleicht noch ein Beispiel zeigen, wie das in Kombination aussieht.

      Also zum Beispiel Aktion Fernsehen -> Fernseher an -> VU+ an

      Wäre ganz lieb. 🙂

  7. Hi Jörg,

    Am I understanding correctly that this receiver sends updates when e.g. the volume has been changed manually without the need to send a pull command (just like your old Pioneer in one of your earlier articles)?

    I read your articles translated through google and it works quite well, I enjoy reading them, thanks!

  8. Hallo Jörg,
    hallo Community,

    mich beschäftigt derzeit ein Thema, welches wie ich finde gut zu diesem Blog-Beitrag passt.

    Ich möchte meinen Denon AVR (X3500H) gerne über die Sonos App steuern. Das Ganze funktioniert im ersten Schritt ja mit dem Sonos Connect, welcher als “Lautsprecher” ins Sonos System eingebunden wird und die Musik z. B über Toslink an den AVR ausgibt.

    Leider muss bei dieser Konstellation der AVR manuell eingeschaltet und ggfs. auf die richtige Eingangsquelle gestellt werden.

    Gibt es eine Möglichkeit mittels (FHEM-)Automatisierung den AVR ein-/auszuschalten, die richtige Eingangsquelle zu wählen und die Lautstärke über die Sonos App zu regulieren?

    Ich freue mich über Input.

  9. Hi Jörg,

    Am I understanding correctly that this receiver sends updates when e.g. the volume has been changed manually (manually turning the volume nobe on the receiver) without the need to send a pull command (just like your old Pioneer in one of your earlier articles)?

  10. Ich bin von einem AVR-X1100W (ging kaputt) auf neu den AVR-X1400H gewechselt. Der X1100W hatte im Fhem auch ordentliche Werte fuer die MediaInfo (z.B. Felder currentAlbum, currentArtist) geliefert. Beim AVR-X1400H vermisse ich das schmerzlich – hatte es fuer meine Smartvisu verwendet. Gibt es einen Trick, wieder daran zukommen oder eine andere Loesung, diese Werte auszulesen?

  11. Hallo zusammen,

    kann es sein das oben im DOIF von Denis nach “define DenonMovieMode” noch ein DOIF stehen müsste? Nur als Verständnis Frage.

    VG Daniel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte dir auch gefallen