Homebridge plugin to control Denon/Marantz AV Receivers.
npm install homebridge-denon-tv





Homebridge plugin for Denon/Marantz AV Receivers series X/SR.
Tested Denon AVR-2112CI, AVR-3311CI, AVR-X4100W, AVR-X6300H, AVR-X2700H, AVC-X4800H, Marantz SR8012, SR6013, M-CR611, PM7000N.
| Package | Installation | Role | Required |
| --- | --- | --- | --- |
| Homebridge | Homebridge Wiki | HomeKit Bridge | Required |
| Homebridge UI | Homebridge UI Wiki | Homebridge User Interface | Recommended |
| Denon TV | Plug-In Wiki | Plug-In | Required |
* For plugin < v6.1.0 use Homebridge UI <= v5.5.0.
* For plugin >= v6.1.0 use Homebridge UI >= v5.13.0.
* This plugin is based upon the official documentation: Denon Control Protocol 2020
* Multi Zone control.
* Power ON/OFF control with short press the tile in HomeKit app.
* Media control, need use RC app on iPhone/iPad.
* Volume and mute control with extra tile Lightbulb/Fan or Hardware Buttons, need use RC app on iPhone/iPad.
* Inputs control using inputs whell or buttons.
* All other functions control using buttons.
* Surrounds/Pass Trough Inputs control as a extra accessory tile.
* Siri, some times need to create buttons/switches/sensors.
* Automations, some times need to create buttons/switches/sensors.
* External integrations, RESTFul, MQTT.
* First enable Network Contorl Denon/Marantz.
* Run this plugin as a Child Bridge (Highly Recommended), this prevent crash Homebridge if plugin crashes.
* Install and use Homebridge UI to configure this plugin.
* The sample-config.json can be edited and used as an alternative.
| Key | Description |
| --- | --- |
| name | Here set the accessory Name to be displayed in Homebridge/HomeKit. |
| host | Here set the Hostname or Address IP of AVR. |
| port | Here set the API communication port, if 8080 is not working try to use port 80 which some receivers use alternatively. |
| generation | Here choose generation of Your device, old 0 - 2010 - 2012, middle 1 - 2013 - 2022, new 2 - 2023 and newer. |
| zoneControl | Here choose which zone will be controlled by this section, create same zone multiple times for same AVR is not possible -1 - None/Disabled,0 - Main Zone, 1 - Zone 2, 2 - Zone 3, 3 - Surrounds, 4 - Pass Through Inputs. |
| inputs{} | Inputs object. |
| inputs.getFromDevice | If enabled, Inputs will be loaded direct from device. |
| inputs.getFavoritesFromDevice | If enabled, Favorites will be loaded to the inputs list if exist. |
| inputs.getQuickSmartSelectFromDevice | If enabled, Quick/Smart Select will be loaded to the inputs list if exist. |
| inputs.displayOrder | Here choose display order of the inputs list, 0 - None, 1 - Ascending by Name, 2 - Descending by Name, 3 - Ascending by Reference, 4 - Descending by Reference. |
| inputs.data[] | Inputs array. |
| inputs.data[].name | Here set Input Name. |
| inputs.data[].reference | Choose from available inputs, the inputs that should be published to and appear in HomeKit app in the device tile as inputs list. |
| surrounds.displayOrder | Here choose display order of the surrounds list, 0 - None, 1 - Ascending by Name, 2 - Descending by Name, 3 - Ascending by Reference, 4 - Descending by Reference. |
| surrounds.data[] | Here create Surrounds which You want expose to the Homebridge/HomeKit. |
| surrounds.data[].name | Here set Surround Mode Name. |
| surrounds.data[].reference | Here choose Surround Mode, the mode that should be published to and appear in HomeKit app in the extra tile as Surrounds List. |
| buttons[] | Buttons array. |
| buttons[].name | Here set Button Name. |
| buttons[].reference | Here choose Function for this button. |
| buttons[].displayType | Here choose characteristic type to be exposed in HomeKit app, possible 0 - None/Disabled, 1 - Outlet, 2 - Switch. |
| buttons[].namePrefix | Here enable accessory name as a prefix for button name. |
| buttonsZ2[] | Here create Buttons which You want expose to the Homebridge/HomeKit for Zone 2. |
| buttonsZ2[].name | Here set Button Name. |
| buttonsZ2[].reference | Here choose function for this button. |
| buttonsZ2[].displayType | Here choose characteristic type to be exposed in HomeKit app, possible 0 - None/Disabled, 1 - Outlet, 2 - Switch. |
| buttonsZ2[].namePrefix | Here enable accessory name as a prefix for button name. |
| buttonsZ3[] | Here create Buttons which You want expose to the Homebridge/HomeKit for Zone 3. |
| buttonsZ3[].name | Here set Button Name. |
| buttonsZ3[].reference | Here choose function for this button. |
| buttonsZ3[].displayType | Here choose characteristic type to be exposed in HomeKit app, possible 0 - None/Disabled, 1 - Outlet, 2 - Switch. |
| buttonsZ3[].namePrefix | Here enable accessory name as a prefix for button name. |
| sensors[] | Sensors array. |
| sensors[].displayType | Here choose sensor type to be exposed in HomeKit app, possible 0 - None/Disabled, 1 - Motion Sensor, 2 - Occupancy Sensor, 3 - Contact Sensor. |
| sensors[].mode | Here choose sensor mode, possible 0 - Input/Surround, 1 - Power, 2 - Volume, 3 - Mute. |
| sensors[].name | Here set sensor Name which You want expose to the Homebridge/HomeKit. |
| sensors[].reference | Here choose Input Reference, sensor fired on switch to this input. |
| sensors[].referenceSurround | Here choose Surround Reference, sensor fired on switch to this surround. |
| sensors[].pulse | Here enable sensor pulse, sensor send pulse and fired on every value change of selected mode. |
| sensors[].namePrefix | Here enable the accessory name as a prefix for sensor name. |
| sensors[].level | Here set Level between 0 - 100, sensor fired on this level. |
| power{} | Power object. |
| power.zone | Here choose which zone the power want control, 0 - Main Zone, 1 - Zone 2, 2 - Zone 3, 3 - Zone 2/3, 4 - Main Zone + Z2, 5 - Main Zone + Z3, 6 - Main Zone + Z2/Z3, 7 - Master Power, this also working with power button in RC app. |
| volume{} | Volume object. |
| volume.displayTtype | Here choose what a additional volume control mode You want to use 0 - None/Disabled, 1 - Lightbulb, 2 - Fan, 3 - TV Speaker, 4 - TV Speaker / Lightbulb, 5 - TV Speaker / Fan. |
| volume.zone | Here choose which zone the volume/mute want control, 0 - Main Zone, 1 - Zone 2, 2 - Zone 3, 3 - Zone 2/3, 4 - Main Zone + Z2, 5 - Main Zone + Z3, 6 - Main Zone + Z2/Z3, this also working with hardware
| volume.name | Here set Your own volume/mute control name or leave empty. |
| volume.namePrefix | Here enable accessory name as a prefix for volume control name. |
| volume.max | Here set the maximum possible volume to set, 0 - 100. |
| infoButtonCommand | Here choose the function for I button in RC app. |
| refreshInterval | Here set the data refresh interval. |
| log{} | Log object. |
| log.deviceInfo | If enabled, log device info will be displayed by every connections device to the network. |
| log.success | If enabled, success log will be displayed in console. |
| log.info | If enabled, info log will be displayed in console. |
| log.warn | If enabled, warn log will be displayed in console. |
| log.error | If enabled, error log will be displayed in console. |
| log.debug | If enabled, debug log will be displayed in console. |
| restFul{} | RESTFul object. |
| restFul.enable | If enabled, RESTful server will start automatically and respond to any path request. |
| restFul.port | Here set the listening Port for RESTful server. |
| mqtt{} | MQTT object. |
| mqtt.enable | If enabled, MQTT Broker will start automatically and publish all awailable data. |
| mqtt.host | Here set the IP Address or Hostname for MQTT Broker. |
| mqtt.port | Here set the Port for MQTT Broker, default 1883. |
| mqtt.clientId | Here optional set the Client Id of MQTT Broker. |
| mqtt.prefix | Here set the Prefix for Topic or leave empty. |
| mqtt.auth{} | MQTT authorization object. |
| mqtt.auth.enable | Here enable authorization for MQTT Broker. |
| mqtt.auth.user | Here set the MQTT Broker user. |
| mqtt.auth.passwd | Here set the MQTT Broker password. |
* Surrounds - supports only Surrounds Control, Surrounds Sensors.
* Pass Tgrough Inputs - always ON, supports only Pass Through Inputs Control.
* Only for Main Zone, Zone 2, Zone 3
* POST data as a JSON Object {Power: true}
* Header content type must be application/json
* Path status response all available paths.
| Method | URL | Path | Response | Type |
| --- | --- | --- | --- | --- |
| GET | http//ip:port/ | info, state, picture, surround | {"Power": {"value": OFF}} | JSON object. |
| Method | URL | Key | Value | Type | Description |
| --- | --- | --- | --- | --- | --- |
| POST | http//ip:port | Power | true, false | boolean | Set power On/Off. |
| | http//ip:port | Input | SAT/CBL | string | Set input/pass through input. |
| | http//ip:port | Surround | MUSIC | string | Set surround mode. |
| | http//ip:port | Volume | 0 - 98 | integer | Set volume. |
| | http//ip:port | Mute | true, false | boolean | Set mute On/Off. |
| | http//ip:port | RcControl | NS9E | string | Send RC command. |
* Only for Main Zone, Zone 2, Zone 3
* Subscribe data as a JSON Object {Power: true}
| Method | Topic | Message | Type |
| --- | --- | --- | --- |
| Publish | Info, State, Picture, Surround | {"Power": {"value": OFF}} | JSON object. |
| Method | Topic | Key | Value | Type | Description |
| --- | --- | --- | --- | --- | --- |
| Subscribe | Set | Power | true, false | boolean | Set power On/Off. |
| | Set | Input | SAT/CBL | string | Set input/pass through input. |
| | Set | Surround | MUSIC | string | Set surround mode. |
| | Set | Volume | 0 - 98 | integer | Set volume. |
| | Set | Mute | true, false | boolean | Set mute On/Off. |
| | Set | RcControl | NS9E | string | Send RC command. |