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 (
00–99), plus up/down in 0.5 dB steps — auto-scaled from the unit'sMVMAXreply - 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
- Give the receiver a static IP, or a DHCP reservation so the address never moves.
- On the receiver: Menu → Network → Network Control → Always On.
- 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. - 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:
- Open AV Zones and edit (or create) the zone for the room the receiver serves.
- Set the Volume Device field to this Denon receiver.
- 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.
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
| Attribute | Type | Description |
|---|---|---|
ip | string | Receiver LAN IP. |
Device — optional
| Attribute | Type | Default | Description |
|---|---|---|---|
port | int | 23 | Telnet port. |
status_interval | int | 25000 | Status poll interval, in milliseconds. |
max_volume | int | (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
| Command | Sends | Notes |
|---|---|---|
power_on | ZMON | Main-zone power on. |
power_off | ZMOFF | Main-zone power off. Requires Network Control = Always On to retain control afterward. |
volume | MV + level | Absolute volume, two digits 00–99. GEM zero-pads a single digit. |
volume_up | MVUP | +0.5 dB. |
volume_down | MVDOWN | −0.5 dB. |
mute_on | MUON | Mute audio. |
mute_off | MUOFF | Unmute. |
mute_toggle | (resolved) | Flips mute using the cached mute_state; no native protocol toggle exists. |
input | SI + code | Select an input. Code list below. |
set_input | SI + code | Alias for input. |
multi_channel_stereo | MSMCH STEREO | Switch to multi-channel-stereo surround. |
get_power | ZM? | Query power state. |
get_volume | MV? | Query volume (the reply also carries MVMAX). |
get_mute | MU? | Query mute state. |
get_input | SI? | 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, AUX1–AUX7, 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_stereois exposed from theMS...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
| Symptom | Check |
|---|---|
| No response from receiver | Network 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 intermittently | Close 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 rejected | Older 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 wrong | max_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.