Roon Extension: Denon/Marantz AV receiver volume control (GitHub)

Bumping this in the hopes that someone has an answer.

Got it setup with pm2 on my linux/core server. It works with my SR5010.

This is awesome, thanks!

Hello,

Maybe it could help some people regarding the last questions on external source control issue.

I tweaked a little bit the app.js code to adapt to my own need: “Automatically power-on the Denon if it is shutdown and select the appropriate source”. I decided to trigger that each time I change volume from the extension.

Scenario:

  1. Denon is shutdown.
  2. From Roon I start playing something on my streamer connected to “Media Player” source on the Denon.
  3. No sound, because Denon shutdown.
  4. Change volume on the Roon App.
  5. Denon start automatically and set source to Media Player.
  6. I am now happy to do not have to power-on the amp myself nor change the source.

Here is the very fast tweak which is working in my setup with a Denon AVR 2113 (in the “set_volume” function):

[...]
set_volume: function (req, mode, value) {
   debug("set_volume: mode=%s value=%d", mode, value);

   // HERE Start the customization to power on automatically the AMP and select the right source
   let mysource = mysettings.setsource;
   if(mysource === "Media Player") {
       mysource = "MPLAY";
   }
   if(denon.source_state.Power === "STANDBY") {
       console.log("AMP is in STANDBY, so POWER ON");
       let http = require('http');
       http.get("http://" + mysettings.hostname + "/MainZone/index.put.asp?cmd0=PutZone_OnOff%2FON");
       http.get("http://" + mysettings.hostname + "/MainZone/index.put.asp?cmd0=PutZone_InputFunction%2F" + mysource);
    }
    else {
       if(denon.source_state.Input != mysource) {
          console.log("AMP is not on the right source, change it to " + mysettings.setsource);
          let http = require('http');
          http.get("http://" + mysettings.hostname + "/MainZone/index.put.asp?cmd0=PutZone_InputFunction%2F" + mysource);
       }
    }
    // END of customization...

    let newvol = mode == "absolute" ? value : (state.volume_value + value);
    [...]

Is this a fix for the "Cannot read property “InputFuncList” of undefined” error? If so, I’m not sure what/how to do anything with this code’ Can you help? Thanks!

@Edward_Lee Not really, it is more a workaround for the problem mentionned by @Guy_Maurier on post #57.

But it permits only to turn on the amplifier (no to turn it off, by my amp have auto-standby after few minutes without any activity).

Having the same issue where the extension cannot access the files on my Denon AVR-X1500H but I think I know why. I did a bit of research and found others having the same issue with Home Assistant (link below).

Denon/Marantz have changed their REST HTTP functions as of their 2016 lineup (or most of them at least). Some of these have switched to using port 8080 as well but seems to depend on the model.

http://AVRIP:8080/goform/Deviceinfo.xml - worked for me to get device information. Looks to be similar to /goform/formMainZone_MainZoneXml.xml but with more information.

Some of the URIs in the thread below worked for me. I’m not savvy on this stuff enough to create a fix right now, but if no one else is able to I may look into it further down the road. It seems Boris is no longer working on this.

For those inclined, have a look here:

I had the same problem not being able the read the xml file with my marantz NR1609. This guy’s fork fixed it for me: GitHub - dfuchslin/roon-extension-denon: Roon Volume Control Extension to control Denon & Marantz receivers

The node-roon-api that version I posted was using was out of date and was causing an error this.moo.close is not a function which caused it to crash whenever I closed Roon. I updated the dependency and all seems to be working fine now. I’ve submitted a PR to @Boris_Pruessmann’s original github with these fixes. In the meantime, you can also use my fork here: GitHub - jcharr1/roon-extension-denon: Roon Volume Control Extension to control Denon & Marantz receivers

I also added a Docker image for it: Docker Hub

3 Likes

Hey there,
I was using the extension successfully (and very thankful) for many months without issues.
Since – I believe – Version 1.8 (atm build 831) it crashes after a moment of roon server being up and running. A reboot fixes the issue for another moment before crashing.

anyone else with this problem?

THANK YOU SO MUCH for the Docker version of this - I am a complete linux idiot and I just spent two hours trying to get a node.js server up and running on my Synology NAS, never quite got there (npm kept failing with a ‘double free or corruption (out)’ error).

Your docker image installed super easily using the Synology Docker GUI and other than needing to be restarted manually after I’d given it my AVR IP, it’s been solid. Super handy. Thanks.

AVR is a 3800H for anyone wondering.

You’re very welcome. :blush: I just pushed an updated image for an update to the api and a fix that someone else submitted to me way back in March but I didn’t see until now because I didn’t realize I didn’t have notifications turned on for my GitHub repo… So thank you, too. Because otherwise I wouldn’t have seen that.

1 Like

One thing I have noticed is that the Docker will crash (and then auto-restart), whenever the video source is changed on the Denon AVR. I get the following error in the log:

Hmmmm. I’m not able to reproduce the crash on my marantz NR1609. Unfortunately, I’m not familiar at all with the APIs. I basically just updated the versions of the API the extension’s using to fix some problems and stuck it in a Docker container so I could run it on my Synology NAS, too.

Maybe we can entice @Boris_Pruessmann to take a look… or I could figure out how to disable the Synology ‘your Docker container crashed’ warning emails… :slight_smile:

Hi

Could somebody give me some guidance; I am a complete novice when it comes to code and using Git etc. I think I have installed the extension properly and it appears in Roon - Extensions but “Not configured, please check settings”

I have entered the IP address of my Denon AVC X-6500H but no success. The info in the Git Bash window is below, please help :frowning_face:

Thank you

AzureAD+Kevin@Office MINGW64 /c/git/roon-extension-denon
$ node .
(node:14552) [DEP0040] DeprecationWarning: The punycode module is deprecated.
Please use a userland alternative instead.
(Use node --trace-deprecation ... to show where the warning was created)
→ REQUEST 0 com.roonlabs.registry:1/info
← COMPLETE 0 Success {“core_id”:“4224a4f9-f8cb-49f4-80f2-a1b5c4c5f6a7”,“display_name”:“Roon Optimized Core Kit”,“display_version”:“2.0 (build 1353) production”}
→ REQUEST 1 com.roonlabs.registry:1/register {“extension_id”:“org.pruessmann.roon.denon”,“display_name”:“Denon/Marantz AVR”,“display_version”:“0.0.9”,“publisher”:“Doc Bobo”,“email”:“b
oris@pruessmann.org”,“required_services”:,“optional_services”:,“provided_services”:[“com.roonlabs.status:1”,“com.roonlabs.settings:1”,“com.roonlabs.volumecontrol:1”,“com.roonlabs.s
ourcecontrol:1”,“com.roonlabs.ping:1”],“website”:“GitHub - docbobo/roon-extension-denon: Roon Volume Control Extension to control Denon & Marantz receivers”}
← CONTINUE 1 Registered {“core_id”:“4224a4f9-f8cb-49f4-80f2-a1b5c4c5f6a7”,“display_name”:“Roon Optimized Core Kit”,“display_version”:“2.0 (build 1353) production”,“token”:“39eb197b-f0
3c-4bb5-a6d7-5eb4d46af26c”,“provided_services”:,“http_port”:9330,“extension_host”:“10.0.0.57”}
← REQUEST 1 com.roonlabs.volumecontrol:1/subscribe_controls {“subscription_key”:“73”}
→ CONTINUE 1 Subscribed {“controls”:}
← REQUEST 2 com.roonlabs.sourcecontrol:1/subscribe_controls {“subscription_key”:“74”}
→ CONTINUE 2 Subscribed {“controls”:}
← REQUEST 3 com.roonlabs.status:1/subscribe_status {“subscription_key”:“75”}
→ CONTINUE 3 Subscribed {“message”:“Not configured, please check settings.”,“is_error”:true}
← REQUEST 24 com.roonlabs.settings:1/subscribe_settings {“subscription_key”:“76”}
→ CONTINUE 24 Subscribed {“settings”:{“values”:{“hostname”:“”,“setsource”:“”},“layout”:[{“type”:“string”,“title”:“Host name or IP Address”,“subtitle”:“The IP address or hostname of th
e Denon/Marantz receiver.”,“maxlength”:256,“setting”:“hostname”}],“has_error”:false}}
← REQUEST 28 com.roonlabs.settings:1/save_settings {“settings”:{“values”:{“hostname”:“10.0.0.18”,“setsource”:“”}},“is_dry_run”:true}
→ COMPLETE 28 NotValid {“settings”:{“values”:{“hostname”:“10.0.0.18”,“setsource”:“”,“err”:“parse.parse is not a function”},“layout”:[{“type”:“string”,“title”:“Host name or IP Address”
,“subtitle”:“The IP address or hostname of the Denon/Marantz receiver.”,“maxlength”:256,“setting”:“hostname”},{“type”:“status”,“title”:“parse.parse is not a function”}],“has_error”:tru
e}}
← REQUEST 29 com.roonlabs.settings:1/save_settings {“settings”:{“values”:{“hostname”:“10.0.0.18”,“setsource”:“”,“err”:“parse.parse is not a function”}},“is_dry_run”:false}
→ COMPLETE 29 NotValid {“settings”:{“values”:{“hostname”:“10.0.0.18”,“setsource”:“”,“err”:“parse.parse is not a function”},“layout”:[{“type”:“string”,“title”:“Host name or IP Address”
,“subtitle”:“The IP address or hostname of the Denon/Marantz receiver.”,“maxlength”:256,“setting”:“hostname”},{“type”:“status”,“title”:“parse.parse is not a function”}],“has_error”:tru
e}}
← REQUEST 30 com.roonlabs.settings:1/unsubscribe_settings {“subscription_key”:“76”}
→ COMPLETE 30 Unsubscribed
← REQUEST 67 com.roonlabs.settings:1/subscribe_settings {“subscription_key”:“77”}
→ CONTINUE 67 Subscribed {“settings”:{“values”:{“hostname”:“”,“setsource”:“”},“layout”:[{“type”:“string”,“title”:“Host name or IP Address”,“subtitle”:“The IP address or hostname of th
e Denon/Marantz receiver.”,“maxlength”:256,“setting”:“hostname”}],“has_error”:false}}
← REQUEST 76 com.roonlabs.settings:1/save_settings {“settings”:{“values”:{“hostname”:“10.0.0.18:10443”,“setsource”:“”}},“is_dry_run”:true}
→ COMPLETE 76 NotValid {“settings”:{“values”:{“hostname”:“10.0.0.18:10443”,“setsource”:“”,“err”:“request to http://10.0.0.18:10443/goform/formMainZone_MainZoneXmlStatus.xml failed, re
ason: socket hang up”},“layout”:[{“type”:“string”,“title”:“Host name or IP Address”,“subtitle”:“The IP address or hostname of the Denon/Marantz receiver.”,“maxlength”:256,“setting”:“ho
stname”},{“type”:“status”,“title”:“request to http://10.0.0.18:10443/goform/formMainZone_MainZoneXmlStatus.xml failed, reason: socket hang up”}],“has_error”:true}}
← REQUEST 77 com.roonlabs.settings:1/save_settings {“settings”:{“values”:{“hostname”:“10.0.0.18:10443”,“setsource”:“”,“err”:“request to http://10.0.0.18:10443/goform/formMainZone_Main
ZoneXmlStatus.xml failed, reason: socket hang up”}},“is_dry_run”:false}
→ COMPLETE 77 NotValid {“settings”:{“values”:{“hostname”:“10.0.0.18:10443”,“setsource”:“”,“err”:“request to http://10.0.0.18:10443/goform/formMainZone_MainZoneXmlStatus.xml failed, re
ason: socket hang up”},“layout”:[{“type”:“string”,“title”:“Host name or IP Address”,“subtitle”:“The IP address or hostname of the Denon/Marantz receiver.”,“maxlength”:256,“setting”:“ho
stname”},{“type”:“status”,“title”:“request to http://10.0.0.18:10443/goform/formMainZone_MainZoneXmlStatus.xml failed, reason: socket hang up”}],“has_error”:true}}
← REQUEST 78 com.roonlabs.settings:1/unsubscribe_settings {“subscription_key”:“77”}
→ COMPLETE 78 Unsubscribed

Scratch that, Ive downloaded the updated version on GitHub - jcharr1/roon-extension-denon: Roon Volume Control Extension to control Denon & Marantz receivers and all now seems good. Thanks

Hi all, I’ve had version 0.0.10 running successfully for a few years, but I’m trying to move to a newer (Windows 11) Roon Server and can’t get it to work. I downloaded @jcharr1 's version 0.0.13, and tried to install it. (I installed Node.JS and GIT first, but I have no idea what I’m doing. I mostly just accepted the defaults.)

This is what I got back in the terminal as I entered the commands to install and start it. Could someone take a look and let me know what I did wrong?

C:\Windows\System32>cd c:\users\andys\music\roon-extension-denon-master

c:\Users\andys\Music\roon-extension-denon-master>npm install
npm warn skipping integrity check for git dependency ssh://git@github.com/roonlabs/node-roon-api-volume-control.git
npm warn skipping integrity check for git dependency ssh://git@github.com/roonlabs/node-roon-api-status.git
npm warn skipping integrity check for git dependency ssh://git@github.com/roonlabs/node-roon-api-source-control.git
npm warn skipping integrity check for git dependency ssh://git@github.com/roonlabs/node-roon-api-settings.git
npm warn skipping integrity check for git dependency ssh://git@github.com/roonlabs/node-roon-api.git
npm warn deprecated node-uuid@1.4.8: Use uuid module instead

added 19 packages, and audited 20 packages in 4s

1 package is looking for funding
  run `npm fund` for details

3 vulnerabilities (1 moderate, 2 high)

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

c:\Users\andys\Music\roon-extension-denon-master>node .
(node:13196) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
c:\Users\andys\Music\roon-extension-denon-master\node_modules\node-roon-api\transport-websocket.js:17
    this.ws.on('pong', () => this.is_alive = true);
            ^

TypeError: this.ws.on is not a function
    at new Transport (c:\Users\andys\Music\roon-extension-denon-master\node_modules\node-roon-api\transport-websocket.js:17:13)
    at RoonApi.ws_connect (c:\Users\andys\Music\roon-extension-denon-master\node_modules\node-roon-api\lib.js:397:23)
    at Sood.<anonymous> (c:\Users\andys\Music\roon-extension-denon-master\node_modules\node-roon-api\lib.js:143:66)
    at Sood.emit (node:events:524:28)
    at Socket.<anonymous> (c:\Users\andys\Music\roon-extension-denon-master\node_modules\node-roon-api\sood.js:217:20)
    at Socket.emit (node:events:524:28)
    at UDP.onMessage [as onmessage] (node:dgram:988:8)

Node.js v22.13.0

c:\Users\andys\Music\roon-extension-denon-master>

It looks like original version of the node-roon-api module’s incompatible with node versions 22 and later. A pull request was submitted by OonihiloO to fix it a few months ago, but it hasn’t been merged into Roon’s main repo. The last time they merged a pull request was back in 2023 so who knows if they’ll ever do that one. So I updated my fork to pull that module from OonihiloO’s repo instead. Please pull the changes I just committed and try again:

cd c:\users\andys\music\roon-extension-denon-master
git pull
npm install .
node

.

2 Likes

Hi @jcharr1 ,

I am using your extension since years. Thanks for for that.
Today I have updated my docker container running on Synolgy DSM with your latest submission from GitHub - jcharr1/roon-extension-denon: Roon Volume Control Extension to control Denon & Marantz receivers.

Now the container runs and crashes after several seconds.
The container log report shows

exec /usr/local/bin/docker-entrypoint.sh: exec format error

Do have any idea, how to fix it?

I believe the @jcharr1 image is currently only built for arm64 - at least that’s what the docker registry says.

Now you are somewhat lucky because I started a discussion with @jcharr1 today to get his changes (and those from others) back into my original repository, then making it available through the extension manager.

And because of that, I had created a build like an hour ago for both amd64 and arm64, that should include all the changes from @jcharr1. If you could give that a try, it would also help verify that it’s complete and working :wink:

Image is available as docker.io/docbobo/roon-extension-denon:latest