Anyone using the Denon/Marantz binding willing to help with a few tests?


I recently upgraded my Denon receiver to a new model, which now also supports an HTTP protocol that my 17 years old receiver didn’t. :slight_smile: I have the new protocol working, but somewhere between my old and new receiver there were models supporting another variant of the protocol. Probably somewhere around 2015-2016 things changed a bit.

I would like to hear from anyone using the binding with older models (I should be covered for now with brand new models), and who would be willing to run a few tests.

Currently I’m assuming that receivers exposing the API through port 8080 have a slightly different API than those exposing the API on port 80 (same as the web UI). However, I don’t know this for sure, so I would like to verify it.

It will involve:

  • Telling me the model name.
  • Installing a JAR for testing the new version of the binding (currently 4.2, but can backport to 4.0/4.1 as well if needed).
  • Performing a few HTTP requests - it can be done simply from a browser.

I can help with some testing.

  1. AVR-S920W (2015 or 2016 I believe)

  2. openHAB 4.2.0.M2

1 Like

I’ll help.

  • AVRX1600H
  • openhab 4.2.0.M2
1 Like

I can help, too.
1.) AVR X4500H
2.) openhab 4.2.0.M2 (development) + openhab 4.1.2 (“production”, AVR actually connected via Telnet)
btw :
1.) port 80 is redirected on my AVR to port 10443; port 8080 shows err 403.
2.) I’m using a bash script to collect video+audio codec infos from
Hope you’re new binding adds channels for this type of info.

1 Like

Thanks for your replies and willingness to help testing, much appreciated!

It seems you are all on 4.2 already - amazing! So here’s the JAR including the latest changes and also a current draft implementing parts of the 2016+ protocol: org.openhab.binding.denonmarantz-4.2.0-SNAPSHOT.jar - see:

First, let me briefly go back to the already merged PR improving discovery. Probably there was a reason for the logic that in my case lead to the auto-generated label “Denon AVC-X4800H (Marantz Denon AVC-X4800H)”, so I would like to check with you how your discovery results now look like.

I have a suspicion they might now in some cases be like “AVR-X4500H” without “Denon” in front of it. In that case I need to prepare a small fix. However, this test would require you to delete your Thing in order to perform a scan for new DenonMarantz Things. It’s totally fine if you’d like to skip this test.

Now the real test…

If you are currently using Telnet, please disable that and check which port works for you (80 or 8080):

Now, please perform the following requests (in Postman, curl or whatever suits you, replace ‘denon’ with your receiver IP or hostname and 8080 with 80 if needed):

  1. POST http://denon:8080/goform/AppCommand.xml with request body:
<?xml version="1.0" encoding="utf-8"?>
 <cmd id="1">GetAllZonePowerStatus</cmd>
 <cmd id="1">GetVolumeLevel</cmd>
 <cmd id="1">GetMuteStatus</cmd>
 <cmd id="1">GetSourceStatus</cmd>
 <cmd id="1">GetSurroundModeStatus</cmd
  1. GET http://denon:8080/goform/formMainZone_MainZoneXml.xml
  2. GET http://denon:8080/goform/formMainZone_MainZoneXmlStatus.xml
  3. GET http://denon:8080/goform/formZone2_Zone2XmlStatusLite.xml

For my receiver, only 1 and 4 works. If you are on port 80, my current assumption is that only 2, 3 and 4 will work for you.

If you are unable to verify the POST request, you can also let the binding do this for you. To enable trace logging in the console:

log:set trace org.openhab.binding.denonmarantz

and when you are done:

log:set default org.openhab.binding.denonmarantz

2016, so perfect model year for testing. :wink:

2019 model, excellent!

  1. :+1:

All in all great range of model years. If you are interested, I’m keeping a small database of models here:

If anyone not signed up yet (and not frightened by running the above tests) has a pre-2016 model, that would also be very interesting to test.


Thing was discovered as “Denon AVR-S920W”

This was my experience.

I’m no expert in curl, so with no results it is hard to tell if Test 1 is failing or I am executing the command wrong.

Hi Jacob,
1.) I’m running OH 4.2.0.M2 on DietPi 9.4.2/Docker 26.1.3. Just moved your jar-file to addons directory and got errors :

  Error while starting bundle: file:/openhab/addons/org.openhab.binding.denonmarantz-4.2.0-SNAPSHOT.jar
  org.osgi.framework.BundleException: Could not resolve module: org.openhab.binding.denonmarantz [296]
  Unresolved requirement: Import-Package: org.openhab.core.config.discovery.upnp

So I moved your jar-file to :

  bash>  ls -l /openhab/userdata/tmp/mvn/org/openhab/addons/bundles/org.openhab.binding.denonmarantz/4.2.0.M2/
  total 156
  -rw-r--r-- 1 openhab openhab 70987 Mai 18 10:07 org.openhab.binding.denonmarantz-4.2.0.M2.jar.M2
  -rw-r--r-- 1 openhab openhab    40 Mai 18 10:07 org.openhab.binding.denonmarantz-4.2.0.M2.jar.sha1.M2
  -rwxr-xr-x 1 openhab openhab 77255 Mai 18 10:00 org.openhab.binding.denonmarantz-4.2.0-SNAPSHOT.jar
  -rw-r--r-- 1 openhab openhab    41 Mai 18 11:27 org.openhab.binding.denonmarantz-4.2.0-SNAPSHOT.jar.sha1

Is this the right place for deployment in a dockered environment?
Anyway, I got a THING labeled “ki-avr (Denon AVR-X4500H)” getting online after setting to HTTP-Port 8080 (ki-avr=HOSTNAME)
2.) see below for test results:

bash> DENON='' ; cat DENON.xml
  <?xml version="1.0" encoding="utf-8"?>
   <cmd id="1">GetAllZonePowerStatus</cmd>
   <cmd id="1">GetVolumeLevel</cmd>
   <cmd id="1">GetMuteStatus</cmd>
   <cmd id="1">GetSourceStatus</cmd>
   <cmd id="1">GetSurroundModeStatus</cmd
bash> curl -H 'Content-Type: application/xml' -d @DENON.xml -X POST http://${DENON}:8080/goform/AppCommand.xml
  <?xml version="1.0" encoding="utf-8" ?>
bash> ## response with no data ? Wrong curl command?
bash> curl  http://${DENON}:8080/goform/formMainZone_MainZoneXml.xml
  Error 403: Forbidden
  Access Forbidden
bash> curl  http://${DENON}:8080/goform/formMainZone_MainZoneXmlStatus.xml
  Error 403: Forbidden
  Access Forbidden
bash> curl  http://${DENON}:8080/goform/formZone2_Zone2XmlStatusLite.xml
  <?xml version="1.0" encoding="utf-8" ?>
bash> curl http://${DENON}:8080/goform/formZone3_Zone3XmlStatusLite.xml
  <?xml version="1.0" encoding="utf-8" ?>

3.) run additional query and got results like from Web-UI:

bash> wget --timeout=4 --tries=1 --no-check-certificate -O denon.out "" > /dev/null 2>&1
bash> xmllint --format denon.out
  <?xml version="1.0" encoding="utf-8"?>
      <SoundMode>Dolby Atmos</SoundMode>
      <InputSignal>Dolby Atmos - TrueHD</InputSignal>
      <SampleRate>48 kHz</SampleRate>
    <Video mode="monitor">
        <Resolution>1080p:24Hz -&gt; 1080p:24Hz</Resolution>
        <HDR> ---  -&gt;  --- </HDR>
        <ColorSpace>YCbCr 4:4:4 -&gt; YCbCr 4:4:4</ColorSpace>
        <PixelDepth>10bits -&gt; 10bits</PixelDepth>
        <Interface>HDMI 3D</Interface>
        <SoundMode>Dolby Atmos</SoundMode>
        <HDMILimitationMode mode="fourk" default="6">2</HDMILimitationMode>
        <IpScaler group="1">2</IpScaler>
        <SelectSource>HEOS Music</SelectSource>

So a lot of infos to define new channels?


I exported the request I prepared in Postman, can you try again with that?

curl --location 'http://denon.local:8080/goform/AppCommand.xml' \
--header 'Content-Type: application/json' \
--data '<?xml version="1.0" encoding="utf-8"?>
 <cmd id="1">GetAllZonePowerStatus</cmd>
 <cmd id="1">GetVolumeLevel</cmd>
 <cmd id="1">GetMuteStatus</cmd>
 <cmd id="1">GetSourceStatus</cmd>
 <cmd id="1">GetSurroundModeStatus</cmd

I guess you would need another binding installed with this dependency, since I provided a JAR, not a KAR. You could for example try to install the HEOS binding normally, and see if that resolves the issue.