External integration - Denon / Marantz AVR

Hi everyone!

Denon / Marantz AVR — Gladys Assistant Integration

Introduction

This external integration allows you to control a Denon or Marantz AV receiver from Gladys Assistant, locally, without a cloud account or internet dependency. It relies on the native « AVR Control » protocol (Telnet, shared by almost all Denon/Marantz network receivers) and, for HEOS-equipped models, on the dedicated HEOS CLI protocol for streaming. The receiver itself pushes every state change to Gladys in real-time — no periodic hardware polling.

What It Does Today

  • Automatic discovery of the receiver on the network (SSDP/UPnP), with fallback to manual IP (one or more, separated by commas) if multicast is blocked.
  • Power, volume, mute: controllable from the dashboard, synchronized in real-time with the physical remote or Denon/HEOS app.
  • Input source: dropdown menu on the dashboard, with custom renaming or hiding of each input (e.g., display « Chromecast » instead of « SAT/CBL »).
  • Sound mode: dropdown menu of surround modes (Movie, Stereo, Pure Direct…).
  • Playback controls (Play/Pause/Next/Previous) via a « Music » card on the dashboard. For streaming sources managed by HEOS (Qobuz, Spotify Connect, TIDAL…), commands automatically use the HEOS CLI protocol; otherwise, they use the classic Telnet channel.
  • Current playing title (artist/track), refreshed both by HEOS push notifications and by an active check every 30 seconds, to stay up-to-date even in case of a temporary HEOS connection drop.
  • « Test Connection » action for a quick diagnostic of the receiver’s status.
  • Docker image published automatically (multi-architecture amd64/arm64) with each new version. I’ve also worked on the Docker image security to minimize the attack surface.

Current Limitations

  • Tested in real conditions on a single model (Denon AVR-S970H) — behavior may vary slightly depending on the model or firmware version.
  • Sound mode: the list of proposed modes is generic and may not cover all names across receiver generations.
  • HEOS: implemented from community libraries and documentation (including the library used by the official Home Assistant integration), not yet tested in real paid streaming conditions by the developer. In case of unexpected behavior, the integration automatically falls back to the classic channel without breaking the rest.
  • No multi-zone: Zone 2/3 not managed (for now, depending on needs).
  • Manual multi-receiver discovery: requires a fixed IP or DHCP reservation per receiver, the entry does not follow automatic IP changes.

I’ll test this tomorrow with my Denon s650h!

Well, I can cross this integration off my to-do list :sweat_smile:
Thanks @lmilcent, even though I still don’t have my Marantz Stereo 70 (or the upcoming Cinema 70 planned for the end of the year).

Ahaha perfect :wink:
If you need to, you can ask your Claude to make a PR on my repo, and I’ll ask mine to implement your plan :rofl:

It’s missing the local tag to be perfect :wink:

Thanks, I’ll add that!

Great, finally I can control my PM7000N amplifier. I wanted to know if it’s normal that the ‹ Speak on a speaker › action can’t be used with this integration?

Yes, that’s normal, I’ve never used it, so I didn’t think about it. I’ll see if I can add it :slight_smile:

:speaker_high_volume: New Feature: « Speak on a Speaker » Available on the Denon/Marantz AVR Integration!

Hi everyone,

The Denon/Marantz AVR integration has just gained support for the native Gladys action « Speak on a Speaker » (the one we use to announce a text in TTS within a scene). Your Denon or Marantz amplifier now appears directly in the list of available speakers for this action, just like a Sonos speaker or a Google Cast device.

How it works technically (in two words): the amplifier must be equipped with the HEOS module (this is the case for almost all recent network models) because it is the only path that allows playing an arbitrary audio stream (like the file generated by voice synthesis). Without HEOS, or if the module is not reachable on the network, this action will not be available for the amplifier — no fallback solution is possible here, unlike other playback commands (Play/Pause…).

To use this feature:

  1. Update the Docker image of the integration.
  2. Open the Discovery tab, restart a scan, and click Update on your existing amplifier (new features do not appear automatically on an already created device).
  3. Create or edit a scene with the action « Speak on a Speaker », and your amplifier should appear in the list.

Like the rest of the HEOS support in this integration, it is implemented based on the protocol documentation (not yet tested in real conditions on HEOS hardware by me) — feel free to report here if it doesn’t work for you, with debug logs if possible.

@Tolkyen let me know if it’s working, I haven’t been able to test it at home yet.

I can’t update the integration.. Still 1.0.9

Edit: my message is a bit messy, sorry.
Am I doing something wrong? I can see that code was modified 7 hours ago… but I think the problem is that no release has been made… am I right?

Last release 4 days ago

Sorry, I forgot to publish the release!

The Denon now appears in the speakers. But in my test tonight (Canada EST time), it doesn’t speak on my speaker.

You’ll tell me, because I had never used this feature.

I tested it on my Denon Home 150 and the PM7000N amplifier, and it doesn’t work either :smiling_face_with_tear:

I need to dig deeper, because it seems to use HEOS (Heos) to play a specific audio file if I understand correctly. It didn’t seem easy to implement.

After installing version 1.0.12, I ran the connection tests and here are the results:

Here are the logs for the Denon Home 150

Just in case, I found this: https://rn.dmglobal.com/usmodel/HEOS_CLI_ProtocolSpecification-Version-1.17.pdf

:speaker_high_volume: « Speak on a speaker » finally works on Denon/Marantz amps (v1.0.14)

The recently announced feature had a bug that prevented it from producing sound on some models: the URL of the voice message was incorrectly transmitted to HEOS, which accepted it but never managed to play it. This is now fixed, tested, and confirmed on my equipment :tada:

By the way, several diagnostic improvements arrived with previous versions, so that any future issues will be visible directly in the logs rather than silent.

As usual: Integrations → your Denon/Marantz amp → Supervision tab → Update.

@Tolkyen I’d appreciate your validation on your model, or the logs from the integration!

Late-night update: v1.0.15 released. The « Now playing » text will display « Oui FM - 63 kbps aac » instead of just « 63 kbps aac » for internet radio stations without metadata.

To make sure I’m doing this right, to broadcast a voice message:

  • I need to create a scene where I control a device > voice message broadcast > I define my text

Is that right?

I just quickly tested this morning with v1.0.15, it works on the amp :star_struck: but not on the Denon Home.

Here are the logs in both cases

PM7000N => OK

image

Denon Home 150 => NOK

:speaker_high_volume: « Speak on a speaker » now also works on standalone HEOS speakers (Denon Home, HEOS 1/3/5/7, Bar…)

Theoretical support for the « Speak on a speaker » action on standalone HEOS speakers from the Denon Home / HEOS range — not just on real network amplifiers (Denon/Marantz AVR, HEOS Amp series, PM7000N…).

What’s new: These speakers don’t have the « AVR Control » control service (Telnet) used by the rest of the integration — only HEOS talks to them. Previously, this blocked all commands, including « Speak on a speaker », which never actually needed Telnet. This is now fixed: this action now goes through HEOS only.

To test with this type of device (I don’t have one at home):

  • Add the IP of your speaker via manual IP (Integration Configuration) — it is not automatically detected by the scan.
  • Create a scene with the « Speak on a speaker » action, choose this speaker.
  • Check that the message is read correctly.

Known limitations (intentional, not bugs):

  • Only the « Speak on a speaker » action works on this type of device. Everything else (power, volume, source, playback buttons…) remains broken/ineffective, as it depends on the Telnet protocol that these speakers don’t have.
  • No automatic discovery for these speakers — manual IP only.
  • Full support for HEOS speakers (with their own adapted features) would be a separate project.

As usual: update via Integrations → Supervision → Update.