Jump to content

How To: Control Denon AVR Using Official Control Protocol


alx9r

Recommended Posts

Denon AV Receivers have an official control protocol. (in case that link goes dead in the future, google for "Denon AVR control protocol").

 

While the protocol document references a particular model of Denon receiver (AVR-3808CI), the protocol seems to work the same for both models that I have tried to control (AVR-2808CI and AVR-2113CI, purchased 5 years apart). The protocol document reads like an API spec. Therefore, I expect Denon to maintain a level of consistency for this control protocol across different models. The commands (but not the connection details) are also the same for both RS232 and Ethernet. As a reference, this is the protocol that the LinuxMCE project uses to control Denon receivers.

 

Enough front matter already...

 

How to Create a Network Resource That Sends a Command to an AVR from an ISY994i

 

Things you'll need that I won't document here:


  • [*:3366dip0] the ISY994i network module
    [*:3366dip0] get to the ISY994i's Admin Page->Configuration->Networking->Network Resources tab
    [*:3366dip0] the IP address of your Denon AV Receiver

 

Find the command you want from aforementioned control protocol document. In this example, I will be using the "ON" "PoWer" command which is the string "PWON" followed by carriage return (i.e. the C escape character '\r').

 

Create a network resource with the following configuration:

Protocol: TCP

Host:

Port: 23

Timeout: 100 ms

Mode: C Escaped

Body: "PWON\r" (without the quotes)

 

 

 

Click Update, Save, Save again, select the resource and click Test.

 

Any other command that your receiver supports can be put in the body. Make sure you remember the '\r'. For example, volume up becomes "MVUP\r".

 

Enjoy.

post-4182-14047415658_thumb.png

Link to comment
  • 2 weeks later...
  • 5 weeks later...
  • 1 month later...
  • 1 month later...

JSP0511,

 

That is exactly what this does on the most basic level. I now use my ISY to turn on my AVR-1912 as port of my morning program that starts my coffee pot. If you do a little exploration, nearly every command for the AVR is available. I kept it simple, turn it on or off with my alarm being set, shut down when going to bed, lower the volume when my slug is announcing the weather forecast in the morning.

 

it's a very simple thing, but it makes a huge difference.

Link to comment
  • 9 months later...
  • 6 months later...

I've figured out the problem. I'm using Vera3 for my zwave door locks and thermostat and I had a Denon plugin running

Which is using telnet ( I guess) and could not connect to denon with Isy. As soon as I shot down Vera everything was good.

Link to comment
I've figured out the problem. I'm using Vera3 for my zwave door locks and thermostat and I had a Denon plugin running

Which is using telnet ( I guess) and could not connect to denon with Isy. As soon as I shot down Vera everything was good.

That is because the Denon will only allow one connection at a time, so the first app running gets the connection. There is another method of controlling the Denon that connects via http that allows multiple connections. This is the method that the Denon iPhone app uses, however they have not published the Api.

Link to comment
  • 1 year later...

I used this today and it was very helpful.  The important things for me were:  the 100 msec timeout and realizing that the script that was running on my old Redeye (network remote control device) was clogging up the Denon receiver and as soon as I unplugged my Redeye it solved most of my problems.

 

thank you for your time Alx9r.

Link to comment
  • 8 months later...

Hi

As you guys are experienced with ISY -> Denon control, I'm wondering if you can answer the following:

 

Can one specify the amount of volume increase or decrease, or is increase /decrease always by one unit? I know I can set an absolute volume,but am trying to send increase decrease volumes but they only increment by one. This means I need to send repeated network commands from ISY and it takes a very long time for the response cycle to for example increase volume by 10. I've tried adding a number after the volume up/down command and have not succeeded. Can this be done?

 

Thanks

Link to comment

Hi ccclapp,Aren't there volume up/down commands?With kind regards,Michel

yes there are, but the command increases/decreases by one unit, an amount which is so small as to be hardly audible. Therefore one has to repeat the command at least 10 times flooding both Isy and the denon

Link to comment

post-6054-0-67047000-1456692007_thumb.png

 

Not sure of the exact model you have and whether or not this is applicable, but you could try this.

Look at the pic which is a snip of the service manual for AVR-3312CI/AVR-3312.

Your command would be MV40 if 40dB was the level you wanted.

 

Not sure if this is what you meant by absolute volume.

 

Hope this helps

Link to comment

attachicon.gifDenonVolumedB.PNG

 

Not sure of the exact model you have and whether or not this is applicable, but you could try this.

Look at the pic which is a snip of the service manual for AVR-3312CI/AVR-3312.

Your command would be MV40 if 40dB was the level you wanted.

 

Not sure if this is what you meant by absolute volume.

 

 

Hi Dan.  Thanks

 

Yes that is what I meant by "absolute volume", which can be done just as you say.  Its "relative volume", i.e increase/decrease that is the issue.  If you invoke Volume Down, it changes by 1 unit ie goes from 40 to 39.  That level of volume change is barely audible so as to make that function useless because you cant send enough repeats fast enough to be functional...60 seconds holding a button doesn't cut it with Mrs.  I've searched here, AVS, Remote Central etc and not found a way to do: "increase by 5db" etc.  Because I am doing this on a keypad it looks like I have two options:

 

1) Use a Global Cache to convert back to IR with required repeats built into the command, or

2) Test IsyHelper for this.  IsyHelper (IH) enables the ISY to interface w my Harmony Hub.  If I can create the command in Harmony with enough repeats sent by Harmony that would work too.  Two issues here: i. Harmony seems not to permit device level macros and has very limited repeates at the device level, only custom button press assignments can be macros, which IH may or may not interface with and, ii.  will IH/RPi be stable enough for this unattended location vs Global Cache.  

 

Thanks for your thinking and effort. The search goes on...

Link to comment

ccclapp,

I can confirm that I have found no way to implement volume up/down commands in greater increments than 0.5dB.  That increment is too small to be useful when dispatching user-invoked volume commands using the ISY because of the delay introduced by the ISY.  As a workaround, I have a list of about 10 separate network resources each with its own volume level (eg. MV13, MV16, MV19, MV22, MV25, etc) that are invoked by ISY programs as the user selects different volume levels.

 

The many-network-resources method works.  But it is rather laborious to implement, and the ISY is slow to execute it.  (I'm guessing it's slow because it evaluates all 10 'if' statements each time the volume is changed, but I don't have any way of proving that.)  I think the correct way for ISY to implement this sort of control is to interpolate variable values into strings transmitted by network resources.  IIRC there was once talk about a future firmware version supporting string interpolation in network resources, but I haven't kept up with that progress.

 

Best Regards,

 

Alex

Link to comment

ccclapp,

I can confirm that I have found no way to implement volume up/down commands in greater increments than 0.5dB.  That increment is too small to be useful when dispatching user-invoked volume commands using the ISY because of the delay introduced by the ISY.  As a workaround, I have a list of about 10 separate network resources each with its own volume level (eg. MV13, MV16, MV19, MV22, MV25, etc) that are invoked by ISY programs as the user selects different volume levels.

 

The many-network-resources method works.  But it is rather laborious to implement, and the ISY is slow to execute it.  (I'm guessing it's slow because it evaluates all 10 'if' statements each time the volume is changed, but I don't have any way of proving that.)  I think the correct way for ISY to implement this sort of control is to interpolate variable values into strings transmitted by network resources.  IIRC there was once talk about a future firmware version supporting string interpolation in network resources, but I haven't kept up with that progress.

 

Best Regards,

 

Alex

 

Thanks Alex.  I've come to the same conclusion (strange that Denon would not have this as it limits the entire IP control of denon).

 

Your vol preset approach is viable, but if using a KP or mini-remote, etc that takes up a lot of buttons.  

 

I came up with what I feel is a very good solution, but it involves adding a Global Cache and sending VolUp/Dn IR commands with repeats built in.  I have one for small change (button presss), for which GC sends 2 repeats and another for mid change (button hold), for which GC sends 6 repeats.  Both of these are single ISY->GC commands and the GC has no issue with the repeats and Dennon no issue in receiving them (just as is a remote volume button hold).  I give some more detail in the GC thread on this forum here:

 

http://forum.universal-devices.com/topic/4810-the-global-cache-wf2ir-works/?p=169036

Link to comment

ccclapp,

You only need to devote two keypad buttons (volup/voldn) to get this working.  Here is the overview of how I implemented this:

 

  • keypress events are received by the ISY and increment or decrement any ISY state variable and limit the valid range of that state variable to, say, 0-9
  • create 10 network resources, each of which transmits a particular value of MVxx
  • create 10 programs each of which has a condition that is true for exactly one valid value of the state variable, and each of which invokes the corresponding network resource.

 

Example in Action

Supposed the state variable is currently "2", and you have decided to map "2" to "MV20" and "3" to "MV30".  Now suppose a user presses your "VOLUP" keypad button.  One program senses the "VOLUP" keypress and increments the state variable from 2 to 3.  Another program has a conditional that is true only when the state variable is 3, so that program executes its 'then' block which invokes a network resource that transmits "MV30".  The net result is that pressing "VOLUP" just incremented the volume from "MV20" to "MV30".  The same concept applies for all 9 other values of state variable and MVxx

 

What I am Doing

FWIW, I have this working in this way at my house.  It works well for A/V zones where dynamic volume is enabled, since the user rarely (read: almost never in my house) has to change the volume manually in those zones.  When those zones turn on, my ISY programming pre-selects a likely volume based on time-of-day, what caused the zone to turn on, and in the kitchen for example, whether the range hood is cranking.  Without dynamic volume, no amount of automation will help you because the user will have to ride the volume constantly to maintain comfortable a volume.  That's fine for the home theater, but impractical everywhere else.

 

In summary:

  • For the home theatre zone I disable dynamic volume and provide a delay-free IR path between an IR remote and the receiver.  This works because you get the full dynamic range of volume and users like the responsiveness of the delay-free volume control.
  • For other zones, I enable dynamic volume to almost eliminate the need for volume adjustments.  Then I provide keypad volume controls à la the method I describe above.  Because volume adjustments are rare in these zones, users are fine with the delay introduced by Insteon and ISY.
  • For still other zones, I don't even provide keypad volume controls because the dynamic volume works well enough.

 

Hope that helps,

 

 

Alex

Link to comment

ccclapp,

You only need to devote two keypad buttons (volup/voldn) to get this working.  Here is the overview of how I implemented this:

 

  • keypress events are received by the ISY and increment or decrement any ISY state variable and limit the valid range of that state variable to, say, 0-9
  • create 10 network resources, each of which transmits a particular value of MVxx
  • create 10 programs each of which has a condition that is true for exactly one valid value of the state variable, and each of which invokes the corresponding network resource.

 

Example in Action

Supposed the state variable is currently "2", and you have decided to map "2" to "MV20" and "3" to "MV30".  Now suppose a user presses your "VOLUP" keypad button.  One program senses the "VOLUP" keypress and increments the state variable from 2 to 3.  Another program has a conditional that is true only when the state variable is 3, so that program executes its 'then' block which invokes a network resource that transmits "MV30".  The net result is that pressing "VOLUP" just incremented the volume from "MV20" to "MV30".  The same concept applies for all 9 other values of state variable and MVxx

 

What I am Doing

FWIW, I have this working in this way at my house.  It works well for A/V zones where dynamic volume is enabled, since the user rarely (read: almost never in my house) has to change the volume manually in those zones.  When those zones turn on, my ISY programming pre-selects a likely volume based on time-of-day, what caused the zone to turn on, and in the kitchen for example, whether the range hood is cranking.  Without dynamic volume, no amount of automation will help you because the user will have to ride the volume constantly to maintain comfortable a volume.  That's fine for the home theater, but impractical everywhere else.

 

In summary:

  • For the home theatre zone I disable dynamic volume and provide a delay-free IR path between an IR remote and the receiver.  This works because you get the full dynamic range of volume and users like the responsiveness of the delay-free volume control.
  • For other zones, I enable dynamic volume to almost eliminate the need for volume adjustments.  Then I provide keypad volume controls à la the method I describe above.  Because volume adjustments are rare in these zones, users are fine with the delay introduced by Insteon and ISY.
  • For still other zones, I don't even provide keypad volume controls because the dynamic volume works well enough.

 

Hope that helps,

 

 

Alex

 

Alex, Very elegant!!  Ok, you're way up on me.  I will circle back on this when all else is running well.

 

FYI, so far, I find I often change volume even when my environment has not changed, eg when working w various levels of concentration vs interest in whats playing. Listening to Kitchen TV to hear dialog at points and not others.  A lot of my use will be via KP on initial entry and some modest changing thereafter (if easier to hit KP than remote).  My desire for initial and changes are not routine/environmental.  More about mood, company, what Im doing.  

 

Moreover, I intend to use several mini-remotes (the tiny insteon 8 button pocket KPs) at the dinner table, bedside, desk, pocket. Most will be room specific and do normal source/volume/lights separately (not as a watch TV scene, but will likely have default start points per source).  Some will be more "universal" with folder/variable activation code to control the whole house on those 8-buttons-in-a-pocket. The "activation code" would set the zone and/or control type and be consistent thereafter (so I dont need to remember much).  With that streamlined, ill investigate "dynamic control".  Sounds cool.

 

I like your progressive volume scheme.  Again, I will very likely implement that (state-machine) approach after my fairly smooth and fairly east to do initial solution.

 

Thanks for sharing this!

Link to comment
  • 1 year later...

Hi Guys...I came across this thread yesterday and got pretty excited. I managed to get my Denon AVR-X6300H Tuner working with the methods described here. So now, I'd like to take the next step and add it to my Mobilinc dashboard. But I can think of an obvious way to assign a control to it. It would be great if I could just click on the control and toggle the tuner on and off. Is this possible? I will confess, I've not had the best luck with programming the ISY except for a few very basic things. Any help would be appreciated! Attached is a screenshot from Mobilinc running on my phone.

 

Thanks for making this information available...I'd love to really dive in and extend the capabilities of my system!

Link to comment

Archived

This topic is now archived and is closed to further replies.


×
×
  • Create New...