Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. [Projekt] Google Home steuert Denon AV-Receiver

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Projekt] Google Home steuert Denon AV-Receiver

    This topic has been deleted. Only users with topic management privileges can see it.
    • uweklatt
      uweklatt last edited by

      Hallo,

      nachdem meine erste Tests mit Alexa nicht besonders zufriedenstellend ausgefallen sind, habe ich mir einen Google-Home mini angeschafft. Dieser musste natürlich sofort mit ioBroker gekoppelt werden 😉

      Ein Ziel war es, meinen Denon AV-Receiver mit Sprachkommandos zu steuern.

      Dabei sollte eine gewisse Flexibilität bei den Sprachkommandos möglich sein.

      Da sich die http-Kommandos des Denon als am zuverlässigsten herausgestellt haben, habe ich diese zur Steuerung verwendet.

      Man kann das auch über Telnet (TCP Port 23) machen, wenn man Rückmeldungen vom Receiver benötigt. Ich habe darauf verzichtet.

      Die Realisierung nutzt den bekannten Weg über IFTTT.

      Dazu habe ich in IFTTT 2 Applets angelegt. Diese dienen zur Übergabe der Kommandos an ioBroker.

      Applet 1 dient zur übergabe einen Kommandos ohne Parameter.

      Applet 2 dient zur Übergabe eines Kommandos mit Parameter.

      Diese sehen wie folgt aus:

      ! 3419_applet_1.png
      3419_applet_2.png
      Gemein ist beiden Applets, dass diese aus dem Befehlswort "Kommando" und den Platzhaltern bestehen.

      Beim Applet 2 mit Parameter muss der Parameter mit dem Schlüsselwort "auf" abgetrennt werden.

      Z.B. "Kommando Receiver Lautstärke Küche auf 50"

      Man kann aber auch sagen: "Kommando Setze die Lautstärke des Receivers in der Küche auf 50".

      "Kommando" ist das Erkennungswort, damit der gesprochene Text von IFTTT an ioBroker übermittelt wird.

      Dort kommt dann der Rest ohne "Kommando" unter der Variablen cloud.x.services.ifttt an.

      Wenn irgendwo die Phrase "auf x" verwendet wird, nutzt IFTTT automatisch das 2. Applet und der übergebene Text besteht aus dem Sprachbefehl (ohne "Kommando") und abgetrennt mit ":" dem Parameterwert.

      Der Parameter muss numerisch sein, sonst wird Applet 1 verwendet!

      Das ":" dient zum späteren Separieren des Parameters im ioBroker Script.

      Ich habe keine JSON-Variante gewählt, da ich die übergebenen Texte manuell parsen möchte.

      Dazu dient ein Javascript (s.u.), das auch den optionalen Parameter erkennt und an die Auswertefunktion übergibt.

      Zuerst wird der Text auf Kleinbuchstaben geändert und gegebenenfalls der Parameter ermittelt.

      Damit diese auch noch für andere Geräte genutzt werden kann, habe ich in der Auswertung vorgesehen, das in allen Sprachbefehlen das Wort

      "Receiver" vorkommen muss. Solange man nur den Receiver über IFTTT steuern möchte, kann man diese Prüfung auch weglassen.

      Ein Sprachbefehl setzt sich also immer wie folgt zusammen:

      "Kommando" + "Receiver" + gewünschter Befehl" ( + optional "auf xx")

      Der Befehl wird auf das Vorkommen von Schlüsselwörtern wie "Eingang", "Lautstärke" oder die zusätzliche

      Zonenangabe "Küche" untersucht. Die Reihenfolge oder zusätzliche Füllwörter spielen dabei keine Rolle.

      Wenn das Wort "Küche" irgendwo vorkommt, wirken die Komandos auf Zone 2, ansonsten auf die Main-Zone.

      Bei der Lautstärkesteuerung habe ich eine Begrenzung eingebaut, die verhindert, dass es zu laut werden kann 😉

      Dadurch ist die Spracherkennung etwas flexibler, als wenn man alle Kommandos direkt in IFTTT erstellen würde.

      Und IFTTT muss man bei zusätzlichen Sprachbefehlen nicht ändern 😉

      Das Script "umgeht" zwar den vorhandenen Denon-Adapter und nutzt auch keine weiteren Variablen, aber für mich

      funktioniert es so schon recht gut.

      Zur Nutzung mit dem eigenen Receiver muss auf jeden Fall oben im Script die IP-Adresse angepasst werden.

      Aktuell ist möglich:

      • Ein-/Ausschalten für 2 Zonen

      • Ändern der Lautstärke in Stufen oder absolut

      • Abrufen von Standardwerten "laut", "normal" und "leise"

      • Aktivieren der MUTE-Funktion mit Lautstärke "stumm"

      • Umschalten der Eingänge pro Zone zwischen "Netzwerk", "SAT", "TV-Ton" und "Blueray/DVD"

      • Aufrufen der "Favoriten1..3"

      Tschau

      Uwe

      Hier das Script:

      ! ````
      //Kontakt: uweklatt@aol.com
      //ioBroker Forum: uweklatt
      var net = require('net');
      var request= require('request');
      ! var ip = '192.168.178.11'; // Denon Receiver IP-Adresse
      ! function work(command, val)
      {
      var zone = 'ZM'; // Master-Zone
      var zonevol = 'MV'; // Lautstärke-Prefix Masterzone
      var zoneinp = 'SI'; // Eingang-Prefix Masterzone

      // Receiver
      if(command.search("receiver") >= 0)
      {
          // Favoriten - Globale Kommandos
          if(command.search("favorit") >= 0)
          {
              if(command.search("1") >= 0 || val.search("1") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?ZMFAVORITE1');
              else if(command.search("2") >= 0 || val.search("2") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?ZMFAVORITE2');
              else if(command.search("3") >= 0 || val.search("3") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?ZMFAVORITE3');
              return;
          }
      
          // Küche - Kommando für Zone 2
          if(command.search("küche") >= 0)
              zone = zonevol = zoneinp = 'Z2';
      

      ! // Eingang wählen
      if(command.search("eingang") >= 0)
      {
      if(zone == 'Z2')
      incmd = 'SI';

              if(command.search("net") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zoneinp+'NET');
              else if(command.search("tv") >= 0 || command.search("fernseh") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zoneinp+'TV');
              else if(command.search("cd") >= 0 || command.search("dvd") >= 0 || command.search("ray") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zoneinp+'BD');
              else if(command.search("sat") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zoneinp+'SAT/CBL');
          }
      
          // Lautstärke ändern
          else if(command.search("lautstärke") >= 0)
          {
              if(command.search("lauter") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zonevol+'UP');
              else if(command.search("leiser") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zonevol+'DOWN');
              else if(command.search("leise") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zonevol+'30');
              else if(command.search("laut") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zonevol+'55');
              else if(command.search("normal") >= 0)
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zonevol+'40');
              else if(command.search(" stu") >= 0)  // MUTE
              {
                  if(zone == 'ZM') // Master-Zone
                      request('http://'+ip+'/goform/formiPhoneAppDirect.xml?MUON');
                  else
                      request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zone+'MUON');
              }
              else if (val >= 0)
              {
                  var laut = parseInt(val*8/10);
                  laut = Math.max(0, Math.min(laut, 70)); // Begrenzung!
                  request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zonevol+laut);
              }
          }
      

      ! // Power
      else if(command.search(" ein") >= 0) // Zone Einschalten
      request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zone+'ON');
      else if(command.search(" aus") >= 0) // Zone Ausschalten
      request('http://'+ip+'/goform/formiPhoneAppDirect.xml?'+zone+'OFF');

      }    
      

      }

      ! on({id:"cloud.0.services.ifttt"}, function (obj){
      var text = getState('cloud.0.services.ifttt').val.toLowerCase();
      var command = text;
      var hasval = text.search(":");
      var val = -1;
      if(hasval>=0)
      command = text.slice(0,hasval);
      if(hasval > 0)
      val = text.slice(hasval+1)
      console.log(command+'['+val+']');
      work(command, val);
      }
      );

      1 Reply Last reply Reply Quote 0
      • eric2905
        eric2905 last edited by

        Ich habe das Thema, auf Anregung des Erstellers, hierher verschoben - passt besser.

        Gruß,

        Eric

        1 Reply Last reply Reply Quote 0
        • J
          jsoentgen last edited by

          Hallo Uwe,

          genau so etwas habe ich gesucht, also erst mal vielen dank für die Arbeit.

          Schade nur ist, bei mir läuft es nicht.

          Ich habe im Script die IP-Adresse meines Denon AVR-x3400h eingetragen, im Receiver ist die Netzwerksteuerung angelegt. Ich denke auch, dass in der Cloud beim IObroker alles stimmt, der Befehl kommt auf jeden Fall an. unter Objekte/servicesIifttt erscheint "Text Field" wenn ich den Befehl sprechen (über Google Home).

          Nur leider passiert dann nichts.

          Was könnte noch falsch sein?

          1 Reply Last reply Reply Quote 0
          • uweklatt
            uweklatt last edited by

            Hallo jsoentgen,

            Was erscheint in der Debugausgabe des Scriptes, wenn Du das Script startest und dann ein Kommando schickst/sprichst?

            Uwe

            1 Reply Last reply Reply Quote 0
            • M
              maxpd last edited by

              Aber es ist nicht möglich einfach die Musikausgabe auf einen Denon zu verlagern?

              Z.b. "Google, spiele charts"

              dann startet Google direkt spotify und die charts playlist.

              Schön wäre, wenn er spotify startet, dass er dass auf dem denon tut.

              1 Reply Last reply Reply Quote 0
              • uweklatt
                uweklatt last edited by

                Hallo maxpd,

                Du kannst Musik z.B. über DLNA an den Denon streamen. Dazu gibt es auch diverse Apps.

                Ich nutze einen zusätzlichen Google Chromecast am HDMI-Anschluss eines Denon X4000.

                Darüber kann man aus fast allen Apps (auch Youtube) direkt Videos oder reines Audio streamen.

                Zusammen mit Google Home auch sprachgesteuert.

                Wenn ich z.B. Yello von Spotify hören möchte, schalte ich den Receiver mit passendem Eingang über ein Sprachkommando ein.

                Dann sage ich "OK Google, spiele Spotify Yello" und die Wiedergabe startet… Auch die Lautstärke kann man über Sprachkommando steuern.

                Der Chromecast am Denon ist dazu unter Google Home als Standard Audiogerät eingerichtet.

                Tschau

                Uwe

                1 Reply Last reply Reply Quote 0
                • J
                  jsoentgen last edited by

                  Hallo Uwe,

                  denke ich habe das Problem gefunden, die neueren Denon Receiver hören nicht mehr auf http Kommandos und können nur noch per Telnet oder RS232 angesprochen werden.

                  1 Reply Last reply Reply Quote 0
                  • uweklatt
                    uweklatt last edited by

                    Danke für die Info.

                    Tschau

                    Uwe

                    1 Reply Last reply Reply Quote 0
                    • J
                      jsoentgen last edited by

                      An und Ausschalten des receivers habe ich damit hinbekommen per Google Home über IFTTT

                      on({id: 'cloud.0.services.ifttt', change: "any"}, function (obj) {

                      var value = obj.state.val;

                      var oldValue = obj.oldState.val;

                      if (getState("cloud.0.services.ifttt").val == 'receiver power an') {

                      setState("denon.0.settings.powerSystem"/System Power State/, true);

                      } else if (getState("cloud.0.services.ifttt").val == 'receiver power aus') {

                      setState("denon.0.settings.powerSystem"/System Power State/, false);

                      }

                      });

                      für mehr reichen meine Grundkenntnisse leider noch nicht. Wollte den Eingang in der Mainzone noch per Sprachbefehl auf Internetradio ändern können, klappt aber leider nicht.

                      on({id: 'cloud.0.services.ifttt', change: "ne"}, function (obj) {

                      var value = obj.state.val;

                      var oldValue = obj.oldState.val;

                      if (getState("cloud.0.services.ifttt").val == 'internetradio an') {

                      setState("denon.0.zoneMain.selectInput"/Select input/, 'IRADIO');

                      }

                      });

                      1 Reply Last reply Reply Quote 0
                      • M
                        maxpd last edited by

                        @uweklatt:

                        Hallo maxpd,

                        Du kannst Musik z.B. über DLNA an den Denon streamen. Dazu gibt es auch diverse Apps.

                        Ich nutze einen zusätzlichen Google Chromecast am HDMI-Anschluss eines Denon X4000.

                        Darüber kann man aus fast allen Apps (auch Youtube) direkt Videos oder reines Audio streamen.

                        Zusammen mit Google Home auch sprachgesteuert.

                        Wenn ich z.B. Yello von Spotify hören möchte, schalte ich den Receiver mit passendem Eingang über ein Sprachkommando ein.

                        Dann sage ich "OK Google, spiele Spotify Yello" und die Wiedergabe startet… Auch die Lautstärke kann man über Sprachkommando steuern.

                        Der Chromecast am Denon ist dazu unter Google Home als Standard Audiogerät eingerichtet.

                        Tschau

                        Uwe `

                        Danke für die Rückmeldung.

                        Ja ich hatte schon vermutet, dass man dies am besten über einen Chromecast Audio löst. Der Receiver schaltet sich hier bei einem Eingangssignal vermutlich nicht von alleine an, weil es nur einen "lauschenden" HDMI Port gibt und dieser schon für den TV belegt ist.

                        1 Reply Last reply Reply Quote 0
                        • uweklatt
                          uweklatt last edited by

                          Hallo maxpd,

                          wenn man die Multi-Room Funktion nicht benötigt, würde ich einen "normalen "Chromecast und keinen vom Typ "Audio" nehmen, da der "normale" auch Videos streamen kann.

                          Tschau

                          Uwe

                          1 Reply Last reply Reply Quote 0
                          • M
                            maxpd last edited by

                            Danke! Teste ich, wenn er noch funktioniert. Hat mehrere Monate an einem 2A Netzteil gehangen und war glühend heiß und hat nur noch Lila Streifen gestreamt..

                            1 Reply Last reply Reply Quote 0
                            • ?
                              A Former User last edited by

                              Hallo UweKlatt,

                              ich bin mir nicht sicher, ob ich mit meinem Anliegen hier genau richtig bin, und erhoffe Nachsehen, falls nicht.

                              Da ich im Netz nicht genau fündig wurde, möchte ich mir die Frage gestatten, ob es möglich ist, einen Google Chromecast (welchen ?)

                              an einen Denon AVR -X 2500H so anzuschliessen, das dieser die Musik in den Chromecast leitet ( über Multiroom Zone 2 ), und der Chrome cast diese streamt, so das die Multiroom Zone über den Chromecast aufgebaut werden kann.

                              Ziel wäre es, die vom Denon AVR integrierte Heos Multiroom funktion zu umgehen, da die Lautsprecher erheblich teurer sind, als z.B. Google Chromcast unterstützende Lautsprecher von Pioneer.

                              Vielen Dank im Voraus 🙂

                              1 Reply Last reply Reply Quote 0
                              • uweklatt
                                uweklatt last edited by

                                Hallo Naphtalin,

                                Du kannst den Google Chromecast über HDMI an den AV-Receiver anschliessen und alles , was auf diesem Chromecast abgespielt wird, über Zone 2 ausgeben. Der benutze HDMI Eingang muss einem Eingang zugeordnet werden, dann kann man den Eingang für Zone 2 nutzen. Der "normale" Chromecast kann Audio und Video ausgeben.

                                Alternativ kann auch ein Chromecast Audio verwendet werden. Der wird am besten über ein optisches Kabel angeschlossen, kann aber nur Audio ausgeben.

                                Tschau

                                Uwe

                                1 Reply Last reply Reply Quote 0
                                • ?
                                  A Former User last edited by

                                  UweKlatt, hab vielen Dank für Deine ausführliche Ausführung 🙂

                                  ich bin mal gespannt für welche Möglichkeit ( Heos / Chrome ) ich mich entscheiden werde.

                                  Bisher wäre für mich die Audio Möglichkeit wohl ausreichend, um ein wenig Musik in Küche und Bad zu haben.

                                  Muss mich mal schlau machen, was die Geräte so ausmachen, bzw. die Möglichkeiten des Machbaren.

                                  Der Denon AVR ist ja Alexa kompatibel und sprachbedienbar (zumindest Musikwünsche),

                                  wäre das mit einem angeschlossenem Chromecast ebenso möglich ?

                                  Und was wäre mit dem Chromcast wohl alles machbar ?

                                  Ist ja schon eine interessante Sache, sofern sie problemlos funktioniert 😄

                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  478
                                  Online

                                  31.7k
                                  Users

                                  79.8k
                                  Topics

                                  1.3m
                                  Posts

                                  5
                                  15
                                  7213
                                  Loading More Posts
                                  • Oldest to Newest
                                  • Newest to Oldest
                                  • Most Votes
                                  Reply
                                  • Reply as topic
                                  Log in to reply
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                  The ioBroker Community 2014-2023
                                  logo