DENON A/V-Receiver über HTTP steuern

Ich besitze einen DENON x3000 A/V-Receiver und habe lange versucht über die gut dokumentierte Telnet-Schnittstelle den Reciever mit openHAB zu steuern. Als erstes hatte ich mir ein kleiner Demo Programm mit VisualStudio Express geschrieben. Danach hatte ich versucht die Anbindung über das openHAB TCP Bindung hin zu bekommen. Meine Bemühungen waren aber vergeblich. Lediglich ein Befehl ging durch und danach war die Schnittstelle gesperrt. Der Grund ist das openHAB auch auf Antworten wartet.  Also überlegt ich mir das VisualStudio Programm in ein DENON Binding für openHAB umzusetzen. Nachdem ich dann die Entwicklungsumgebung für openHAB installiert hatte und ich feststellte das ein Java  Projekt für openHAB nicht einfach ist, musste ich mir was anderes einfallen lassen.

Information von Januar 2015 – Inzwischen gibt es ein DENON Binding für openHAB.

Also schreib ich DENON an und fragte ob es eine HTTP Schnittstelle gibt. Ich hatte schon in dem LOG meiner Firewall Datenpakete zum DENON Receiver gesehen. Als Antwort kam dann aber leider nur, dass es eine Telnet Schnittstelle gibt. Aber immerhin nach einem Tag eine Antwort. Der Support ist gut. Also habe ich Android in einer Virtuellen Umgebung mit der Original DENON App installiert und Wireshark gestartet. Ich konnte mir nicht vorstellen das Android über Telnet die Befehle verschickt. So habe ich dann die folgenden Befehle herausgefunden.

HTTP GET-Befehle

Status Abfragen:

http://<AV IP-Adresse>/goform/formMainZone_MainZoneXml.xml
http://<AV IP-Adresse>/goform/formMainZone_MainZoneXmlStatus.xml
http://<AV IP-Adresse>/goform/formMainZone_MainZoneXmlStatusLite.xml
http://<AV IP-Adresse>/goform/formNetAudio_StatusXml.xml
http://<AV IP-Adresse>/goform/formNetAudio_StatusXml.xml?ZoneName=MAIN+ZONE
http://<AV IP-Adresse>/goform/formZone2_Zone2XmlStatus.xml
http://<AV IP-Adresse>/goform/formZone2_Zone2XmlStatusLite.xml
!!! geht nicht !!! http://<AV IP-Adresse>/goform/formZone2_Zone2Xml.xml
http://<AV IP-Adresse>/goform/Deviceinfo.xml

Lautstärke:

http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?MVUP
http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?MVDOWN
Main Zone
http://<AV IP-Adresse>/goform/formiPhoneAppMute.xml?1+MuteOn
http://<AV IP-Adresse>/goform/formiPhoneAppMute.xml?1+MuteOff
http://<AV IP-Adresse>/goform/formiPhoneAppVolume.xml?1+<dB WERT meist negativ z.B. -30>
Zone 2
http://<AV IP-Adresse>/goform/formiPhoneAppMute.xml?2+MuteOn
http://<AV IP-Adresse>/goform/formiPhoneAppMute.xml?2+MuteOff
http://<AV IP-Adresse>/goform/formiPhoneAppVolume.xml?2+-<dB WERT meist negativ z.B. -30>

An / Aus

Main Zone
http://<AV IP-Adresse>/goform/formiPhoneAppPower.xml?1+PowerOn
http://<AV IP-Adresse>/goform/formiPhoneAppPower.xml?1+PowerStandby
Zone 2
http://<AV IP-Adresse>/goform/formiPhoneAppPower.xml?2+PowerOn
http://<AV IP-Adresse>/goform/formiPhoneAppPower.xml?2+PowerStandby

Kanäle

http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?SITV
http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?SIGAME

Netzwerk

http://<AV IP-Adresse>/goform/formiPhoneAppNetAudioCommand.xml?CurLeft
http://<AV IP-Adresse>/goform/formiPhoneAppNetAudioCommand.xml?CurRight
http://<AV IP-Adresse>/goform/formiPhoneAppNetAudioCommand.xml?CurDown
http://<AV IP-Adresse>/goform/formiPhoneAppNetAudioCommand.xml?CurUp

Cover Bilder beim Abspielen

http://<AV IP-Adresse>/NetAudio/art.asp-jpg
http://<AV IP-Adresse>/img/album%20art_S.png

UPNP Description:

http://<AV IP-Adresse>:8080/description.xml
http://<AV IP-Adresse>:8080/BCO_device_lrg_icon.png
http://<AV IP-Adresse>:8080/RenderingControl/desc.xml

Allgemein Befehle laut Telnet Dokumentation
http://assets.denoneu.com/DocumentMaster/DE/AVRX4000_PROTOCOL(10.3.0)_V01.pdf

Beim test mit dem Aufruf der Favoriten, ist mir beim Sniffen und dem lesen der offiziellen Telnet Dokumentation aufgefallen, dass man mit folgenden HTTP-GET-Request fast jeden Dokumentierten Telnet Befehl absenden kann: http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?<BEFEHL>
Beim testen ging fast alles nur die Abfragen mit dem ? nicht Also z.B. http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?SI? geht nicht. Ist auch irgendwie klar.

http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?MVUP
http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?MVDOWN
http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?SITV
http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?SIGAME
http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?SIIRADIO
http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?SIFAVORITES
http://<AV IP-Adresse>/goform/formiPhoneAppDirect.xml?ZMFAVORITE1

HTTP POST-Befehle

Es gibt auch noch die Möglichkeit eine xml Datei mit Befehlen als POST zusenden aber dies habe ich bisher nicht weiter verfolgt.

Der Befehl ist:

http://192.168.2.99/goform/AppCommand.xml

Folgenden XML Code fand ich in Wireshark

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">SetFavoriteStation</cmd>
 <zone>Main</zone>
 <value>3</value>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetDeletedSource</cmd>
 <value>1</value>
 <cmd id="1">GetAllZonePowerStatus</cmd>
 <cmd id="1">GetZoneName</cmd>
 <cmd id="1">GetSurroundModeStatus</cmd>
 <cmd id="1">GetRestorerModeStatus</cmd>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetVolumeLevel</cmd>
 <cmd id="1">GetMuteStatus</cmd>
 <cmd id="1">GetRenameSource</cmd>
 <cmd id="1">GetSourceStatus</cmd>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetDeletedSource</cmd>
 <value>2</value>
 <cmd id="1">GetZoneName</cmd>
 <cmd id="1">GetRenameSource</cmd>
 <cmd id="1">GetSourceStatus</cmd>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetDeletedSource</cmd>
 <value>1</value>
 <cmd id="1">GetAllZonePowerStatus</cmd>
 <cmd id="1">GetZoneName</cmd>
 <cmd id="1">GetSurroundModeStatus</cmd>
 <cmd id="1">GetRestorerModeStatus</cmd>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetAllZonePowerStatus</cmd>
 <cmd id="1">GetSurroundModeStatus</cmd>
 <cmd id="1">GetVolumeLevel</cmd>
 <cmd id="1">GetMuteStatus</cmd>
 <cmd id="1">GetRestorerModeStatus</cmd>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetVolumeLevel</cmd>
 <cmd id="1">GetMuteStatus</cmd>
 <cmd id="1">GetRenameSource</cmd>
 <cmd id="1">GetSourceStatus</cmd>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetSourceStatus</cmd>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetDeletedSource</cmd>
 <value>2</value>
 <cmd id="1">GetZoneName</cmd>
 <cmd id="1">GetRenameSource</cmd>
 <cmd id="1">GetSourceStatus</cmd>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetAllZonePowerStatus</cmd>
 <cmd id="1">GetVolumeLevel</cmd>
 <cmd id="1">GetMuteStatus</cmd>
 <cmd id="1">GetSurroundModeStatus</cmd>
 <cmd id="1">GetRestorerModeStatus</cmd>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetDeletedSource</cmd>
 <value>1</value>
</tx>

Code:
<?xml version="1.0" encoding="utf-8"?>
<tx>
 <cmd id="1">GetDeletedNetworkSource</cmd>
</tx>

 

11 Comments

  1. Vielen Dank für die schöne Übersicht. Genau die Infos brauchte ich.
    Der Receiver wurde in den Schrank verbannt, da ja eh alles nötige für den Fernsehgenuss über HDMI ARC gesteuert werden kann. Nur wenn ich etwas vom Mac Mini schauen wollte, musste ich immer die Tür aufmachen, damit die IR-Fernbedienung da durchkommt. Oder aber die schnarch-langsame Denon-App öffnen.

    Ich habe mir jetzt mit Workflows für iPhone eine Homescreen-App gebaut, die nichts anderes macht, als den Input via URL auf den Mac Mini zu wechseln. Klappt wie ne eins.

    Also, nochmals besten Dank für die Infos,
    Grüße, Lorenz

    1. blueAdmin

      Ja unter anderem mit
      http:///goform/formiPhoneAppDirect.xml?SIFAVORITES
      http://
      /goform/formiPhoneAppDirect.xml?ZMFAVORITE1

      In der Dokumentation von Denon zu Telnet findest du alle Möglichkeiten.

  2. Markus

    Vielen Dank für diesen hilfreichen Artikel!

    Funktoniert auch wunderbar bei meinem Marantz MCR-510 Gerät.
    Denon und Marantz haben da an einigen Stellen das gleiche Protokoll.

  3. Aco

    Dankeschön!!! jetzt kann ich endlich die Infrarot befehle aus meinem “Lightmanager Air” entfernen die sowieso nicht immer Funktioniert haben 🙂

    Aber habe noch eine Frage: das ist ja der GET befehl aus dem Smartphone ich wollte es mal über den Browser ausprobieren und auf Wireshark kammen folgende befehl für Volumen +
    /goform/formMainZone_MainZoneXml.xml?_=1469724615846
    /goform/formMainZone_MainZoneXml.xml?_=1469726603159

    jedes mal sind es andere zahlen.

    Kannst du mir vielleicht weiterhelfen wie ich die GET befehle vom Browser rausfiltere?

    Gruss

  4. We absolutely love your blog and find almost all of your post’s to be exactly I’m looking
    for. can you offer guest writers to write content to suit your needs?
    I wouldn’t mind publishing a post or elaborating on some of
    the subjects you write about here. Again, awesome website!

Schreibe einen Kommentar

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

9 + 1 =