Skip to main content

Denon Receiver

Denon AV receivers (AVR-X / AVC-X series, CEOL networked units, and most network-capable models) are controlled over Denon's serial-over-IP Telnet protocol. The same wire protocol runs on Marantz receivers — if the badge on the front says Marantz, use the Marantz Receiver driver instead, which ships the Marantz-leaning input codes. The two command surfaces are deliberately parallel; pick the one that matches the unit.

What's controlled

  • Main-zone power on/off
  • Master volume — absolute set (0099), plus up/down in 0.5 dB steps — auto-scaled from the unit's MVMAX reply
  • Mute on/off, plus a mute toggle that GEM resolves from the last-known mute state (the receiver has no native toggle)
  • Input selection from a fixed code list (CD, TUNER, DVD, BD, TV, SAT/CBL, MPLAY, GAME, NET, BT, and more — see the table below)
  • A multi-channel-stereo surround switch
  • Live status polling every 25 seconds for power, volume, mute, and the selected input

This driver covers the main zone only. Zone 2 / Zone 3 commands are not exposed in this revision — see "Known limitations".

Prerequisites

  • A network-capable Denon receiver reachable on the LAN.
  • Network Control set to "Always On" on the receiver. Denon defaults this to "On while on", which closes the Telnet socket the moment the receiver powers off — so the very first power-off would sever GEM's control. Set it to Always On so the socket stays open in standby.
  • No other Telnet client connected. Most models allow only one Telnet session at a time. If the Denon mobile app or a HEOS controller is connected, the receiver silently refuses GEM.

Setup

  1. Give the receiver a static IP, or a DHCP reservation so the address never moves.
  2. On the receiver: Menu → Network → Network Control → Always On.
  3. In GEM, open Devices, add a device, and choose the Denon / Marantz Receiver driver. Set the Receiver IP field. Telnet Port defaults to 23 — leave it unless your unit was re-mapped.
  4. Save. On connect, GEM queries power (ZM?), volume (MV?), mute (MU?), and input (SI?) to seed the cached state, then begins polling every 25 seconds.

This driver does not create a control zone of its own (it is a single, main-zone device). To get a zone-level volume slider, link it to an AV zone — see below.

Linking to an AV zone

The receiver feeds volume and mute to an AV zone rather than appearing as its own controllable zone:

  1. Open AV Zones and edit (or create) the zone for the room the receiver serves.
  2. Set the Volume Device field to this Denon receiver.
  3. Save. From then on, whenever the receiver reports a new volume or mute state, GEM mirrors it onto that AV zone's volume slider and mute indicator — and the zone's volume control drives the receiver.
note

Picking an input on the receiver is a device command, not a zone source change. The Denon's selected input is tracked separately from GEM's AV source routing — choosing the room's source on a touchpanel does not, by itself, change the receiver's input unless you wire that input switch into the source's on-macro.

Attributes

Device — required

AttributeTypeDescription
ipstringReceiver LAN IP.

Device — optional

AttributeTypeDefaultDescription
portint23Telnet port.
status_intervalint25000Status poll interval, in milliseconds.
max_volumeint(auto)Read from the receiver's MVMAX reply on connect. Read-only — clients use it to scale the volume slider's top end.

The driver also auto-populates these state attributes on the device as the receiver reports them: power_state, volume, mute_state, and input. They are read-only status, not things you set by hand.

Commands

CommandSendsNotes
power_onZMONMain-zone power on.
power_offZMOFFMain-zone power off. Requires Network Control = Always On to retain control afterward.
volumeMV + levelAbsolute volume, two digits 0099. GEM zero-pads a single digit.
volume_upMVUP+0.5 dB.
volume_downMVDOWN−0.5 dB.
mute_onMUONMute audio.
mute_offMUOFFUnmute.
mute_toggle(resolved)Flips mute using the cached mute_state; no native protocol toggle exists.
inputSI + codeSelect an input. Code list below.
set_inputSI + codeAlias for input.
multi_channel_stereoMSMCH STEREOSwitch to multi-channel-stereo surround.
get_powerZM?Query power state.
get_volumeMV?Query volume (the reply also carries MVMAX).
get_muteMU?Query mute state.
get_inputSI?Query selected input.

After any volume or mute command, the driver re-queries the receiver about half a second later so the cached state (and the linked AV zone) stays in sync with what the unit actually did.

Input codes

The input / set_input commands accept these codes (entered uppercase — GEM upper-cases them for you):

CD, TUNER, DVD, BD, TV, SAT/CBL, MPLAY, GAME, AUX1AUX7, NET, BT, PHONO, IRADIO, SERVER, FAVORITES, USB/IPOD, IPD, IRP, FVP.

If a code is rejected, the receiver replies with an error and the input does not change — see the troubleshooting note about firmware-specific codes.

Known limitations

  • Main zone only. Zone 2 (Z2...) and Zone 3 (Z3...) commands are not exposed. A multi-zone receiver still answers Denon's full protocol, but this driver's command map is intentionally scoped to the main zone in this revision.
  • One surround switch. Only multi_channel_stereo is exposed from the MS... surround-mode namespace; there is no full listening-mode picker, and the driver does not read surround mode back as a status attribute. (Pure Direct, available on the Marantz driver, is not mapped here.)
  • One Telnet client at a time. This is a receiver hardware limit, not a driver bug. Any other app on the same unit locks GEM out until it disconnects.

Troubleshooting

SymptomCheck
No response from receiverNetwork Control must be "Always On", not "On while on" — the latter drops Telnet in standby, so control is lost after the first power-off.
Commands work intermittentlyClose the Denon mobile app, the HEOS controller, and any other dashboard talking to the same unit. The receiver only accepts one Telnet client.
An input pick is rejectedOlder firmware uses different input codes (e.g. NET vs ONLINE). Select the input on the receiver itself, watch the SI? reply in the device log to see which code the unit emits, and use that code.
Volume slider scale is wrongmax_volume is read once on connect from MVMAX. Trigger a device reload to re-query it.

See also

  • Marantz Receiver — same Sound United wire protocol, Marantz-branded input list and an extra Pure Direct switch.
  • AV Zones — set this receiver as a zone's Volume Device.
  • AV Sources — how room sources route, and where an input-switch macro would live.