From ea4ef26190dae5010f61ed34c9f3ebb7423b6eb7 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Wed, 29 May 2024 11:12:09 +0200 Subject: [PATCH 01/19] denon plugin: fix initial maxvolume check (it's not available) --- denon/commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/denon/commands.py b/denon/commands.py index 27afbd0fa..ac400af84 100755 --- a/denon/commands.py +++ b/denon/commands.py @@ -106,7 +106,7 @@ 'volume': {'read': True, 'write': True, 'read_cmd': 'MV?', 'write_cmd': 'MV{VALUE}', 'item_type': 'num', 'dev_datatype': 'DenonVol', 'reply_pattern': r'MV(\d{2,3})', 'cmd_settings': {'force_min': 0.0, 'valid_max': 98.0}, 'item_attrs': {'initial': True}}, 'volumeup': {'read': False, 'write': True, 'item_type': 'bool', 'write_cmd': 'MVUP', 'dev_datatype': 'raw'}, 'volumedown': {'read': False, 'write': True, 'write_cmd': 'MVDOWN', 'item_type': 'bool', 'dev_datatype': 'raw'}, - 'volumemax': {'opcode': '{VALUE}', 'read': True, 'write': False, 'item_type': 'num', 'dev_datatype': 'str', 'reply_pattern': r'MVMAX (\d{2,3})', 'item_attrs': {'initial': True}}, + 'volumemax': {'opcode': '{VALUE}', 'read': True, 'write': False, 'item_type': 'num', 'dev_datatype': 'str', 'reply_pattern': r'MVMAX (\d{2,3})'}, 'input': {'read': True, 'write': True, 'read_cmd': 'SI?', 'write_cmd': 'SI{VALUE}', 'item_type': 'str', 'dev_datatype': 'str', 'reply_pattern': 'SI{LOOKUP}', 'lookup': 'INPUT', 'item_attrs': {'item_template': 'input', 'initial': True}}, 'listeningmode': {'read': True, 'write': True, 'cmd_settings': {'valid_list_ci': ['MOVIE', 'MUSIC', 'GAME', 'DIRECT', 'PURE DIRECT', 'STEREO', 'AUTO', 'DOLBY DIGITAL', 'DOLBY SURROUND', 'DTS SURROUND', 'NEURAL:X', 'AURO3D', 'AURO2DSURR', 'MCH STEREO', 'ROCK ARENA', 'JAZZ CLUB', 'MONO MOVIE', 'MATRIX', 'VIDEO GAME', 'VIRTUAL', 'LEFT', 'RIGHT']}, 'read_cmd': 'MS?', 'write_cmd': 'MS{RAW_VALUE_UPPER}', 'item_type': 'str', 'dev_datatype': 'str', 'reply_pattern': r'\s?MS(.*)', 'item_attrs': {'initial': True}}, 'sleep': {'read': True, 'write': True, 'item_type': 'num', 'read_cmd': 'SLP?', 'write_cmd': 'SLP{VALUE}', 'dev_datatype': 'convert0', 'reply_pattern': r'SLP(\d{3}|OFF)', 'cmd_settings': {'force_min': 0, 'force_max': 120}, 'item_attrs': {'initial': True}}, From f8a4763faef44a465505b1e0d9d1ad1be27b1703 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Wed, 29 May 2024 11:54:04 +0200 Subject: [PATCH 02/19] denon plugin: add readafterwrite parameter --- denon/plugin.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/denon/plugin.yaml b/denon/plugin.yaml index 3ab797598..329f27207 100755 --- a/denon/plugin.yaml +++ b/denon/plugin.yaml @@ -226,6 +226,13 @@ item_attributes: de: Konfiguriert ein Intervall in Sekunden für regelmäßiges Lesen en: Configures a interval in seconds for cyclic read actions + denon_readafterwrite: + type: num + + description: + de: Konfiguriert eine Verzögerung, nach der der Lesebefehl im Anschluss an einen Schreibbefehl gesendet werden soll. + en: Configures a delay after that the read command related to a send command will get sent. + denon_read_initial: type: bool From 00daeb072882fcb1142a115d0809afebdabe66cc Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Wed, 29 May 2024 11:54:27 +0200 Subject: [PATCH 03/19] denon plugin: add resend options on plugin.yaml --- denon/plugin.yaml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/denon/plugin.yaml b/denon/plugin.yaml index 329f27207..444b8552a 100755 --- a/denon/plugin.yaml +++ b/denon/plugin.yaml @@ -163,6 +163,45 @@ parameters: de: Anzahl Verbindungsversuche en: number of connect retries + send_retries: + type: num + default: 0 + + description: + de: Anzahl Sendeversuche + en: number of sending retries + description_long: + de: 'Anzahl Sendeversuche\n + Kommt keine (passende) Antwort nach dem Senden + eines Commands zurück, wird das Kommando nochmals + gesendet, sofern der Wert über 0 liegt. + ' + en: 'number of sending retries\n + If no (suiting) answer is received after sending + a command the command is resent as long as this + value is more than 0. + ' + + sendretry_cycle: + type: num + valid_min: 1 + default: 1 + + description: + de: Pause zwischen Durchgängen von Sendeversuchen + en: wait time between sending retry rounds + description_long: + de: 'Pause zwischen Durchgängen von Sendeversuchen\n + Sind Send Retries aktiv, wird ein Scheduler erstellt, + der im angegebenen Sekundentakt Kommandos erneut sendet, + zu denen keine (passenden) Antworten erhalten wurden. + ' + en: 'wait time between sending retry rounds\n + If send retries are active, a scheduler gets added + that resends commands in the given cycle value (in seconds) + where no (suiting) answer got received. + ' + connect_cycle: type: num default: 3 From 24b321e28a18e57ddd1a3588267e134a2ee4b165 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Wed, 29 May 2024 11:56:22 +0200 Subject: [PATCH 04/19] denon plugin: query most relevant commands after powering on a zone --- denon/__init__.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/denon/__init__.py b/denon/__init__.py index 56b0f7818..db66fb6ab 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -89,6 +89,25 @@ def _transform_send_data(self, data=None, **kwargs): data['payload'] = f'{data.get("payload", "")}{data["limit_response"].decode("unicode-escape")}' return data + def _process_additional_data(self, command, data, value, custom, by): + zone = 0 + if command == 'zone1.control.power': + zone = 1 + elif command == 'zone2.control.power': + zone = 2 + elif command == 'zone3.control.power': + zone = 3 + if zone > 0 and value is True: + self.logger.debug(f"Device is turned on by command {command}. Requesting current state of zone {zone}.") + time.sleep(1) + self.send_command(f'zone{zone}.control.mute') + self.send_command(f'zone{zone}.control.sleep') + self.send_command(f'zone{zone}.control.standby') + if zone == 1 and value is True: + self.send_command(f'zone{zone}.control.input') + self.send_command(f'zone{zone}.control.volume') + self.send_command(f'zone{zone}.control.listeningmode') + def on_data_received(self, by, data, command=None): commands = None From a66d84db3d35486633589ab8e8a5cefab76b323a Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Wed, 29 May 2024 11:57:10 +0200 Subject: [PATCH 05/19] denon plugin: add resend function --- denon/__init__.py | 48 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/denon/__init__.py b/denon/__init__.py index db66fb6ab..041edf1f2 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -24,6 +24,8 @@ import builtins import os import sys +import threading +import time if __name__ == '__main__': builtins.SDP_standalone = True @@ -56,12 +58,20 @@ class denon(SmartDevicePlugin): PLUGIN_VERSION = '1.0.1' def on_connect(self, by=None): + self.logger.debug(f"Connected.. Cycle for retry: {self._sendretry_cycle}") + if self._send_retries >= 1: + self.scheduler_add('resend', self._resend, cycle=self._sendretry_cycle) self.logger.debug("Checking for custom input names.") self.send_command('general.custom_inputnames') + self._read_initial_values(force=True) def _set_device_defaults(self): - + self._use_callbacks = True self._custom_inputnames = {} + self._sending = {} + self._sending_lock = threading.Lock() + self._send_retries = self.get_parameter_value('send_retries') + self._sendretry_cycle = int(self.get_parameter_value('sendretry_cycle')) # set our own preferences concerning connections if PLUGIN_ATTR_NET_HOST in self._parameters and self._parameters[PLUGIN_ATTR_NET_HOST]: @@ -81,8 +91,31 @@ def _set_device_defaults(self): # command and discard it... so break the "return result"-chain and don't # return anything def _send(self, data_dict): + if data_dict.get('returnvalue') is not None: + self._sending.update({data_dict['command']: data_dict}) self._connection.send(data_dict) + def _resend(self): + if not self.alive or self.suspended: + return + self._sending_lock.acquire(True, 2) + _remove_commands = [] + for command in list(self._sending.keys()): + _retry = self._sending[command].get("retry") or 0 + _sent = True + if _retry is not None and _retry < self._send_retries: + self.logger.debug(f'Re-sending {command}, retry {_retry}.') + _sent = self.send_command(command, self._sending[command].get("returnvalue"), return_result=True, retry=_retry + 1) + elif _retry is not None and _retry >= self._send_retries: + _sent = False + if _sent is False: + _remove_commands.append(command) + self.logger.info(f"Giving up re-sending {command} after {_retry} retries.") + for command in _remove_commands: + self._sending.pop(command) + if self._sending_lock.locked(): + self._sending_lock.release() + def _transform_send_data(self, data=None, **kwargs): if isinstance(data, dict): data['limit_response'] = self._parameters[PLUGIN_ATTR_CONN_TERMINATOR] @@ -151,7 +184,18 @@ def on_data_received(self, by, data, command=None): except OSError as e: self.logger.warning(f'received data "{data}" for command {command}, error {e} occurred while converting. Discarding data.') else: - self.logger.debug(f'received data "{data}" for command {command} converted to value {value}') + self.logger.debug(f'received data "{data}" for command {command} converted to value {value}.') + if command in self._sending: + self._sending_lock.acquire(True, 2) + _retry = self._sending[command].get("retry") or 0 + _compare = self._sending[command].get('returnvalue') + if self._sending[command].get('returntype')(value) == _compare: + self._sending.pop(command) + self.logger.debug(f'Correct answer for {command}, removing from send. Sending {self._sending}') + elif _retry is not None and _retry <= self._send_retries: + self.logger.debug(f'Should send again {self._sending}...') + if self._sending_lock.locked(): + self._sending_lock.release() self._dispatch_callback(command, value, by) self._process_additional_data(base_command, data, value, custom, by) From c3a44948dd8ca98d28331a0f1d20cc628cbd4f99 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Fri, 31 May 2024 20:35:12 +0200 Subject: [PATCH 06/19] denon plugin: fixes, updated plugin.yaml --- denon/__init__.py | 2 +- denon/commands.py | 2 +- denon/plugin.yaml | 5900 ++++++++++++++++++++++----------------------- 3 files changed, 2948 insertions(+), 2956 deletions(-) diff --git a/denon/__init__.py b/denon/__init__.py index 041edf1f2..c722cdc34 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -208,4 +208,4 @@ def _check_for_custominputs(self, command, data): self._custom_inputnames[src] = name if __name__ == '__main__': - s = Standalone(lms, sys.argv[0]) + s = Standalone(denon, sys.argv[0]) diff --git a/denon/commands.py b/denon/commands.py index ac400af84..d256af4ac 100755 --- a/denon/commands.py +++ b/denon/commands.py @@ -424,7 +424,7 @@ 'on_change': [".custom_name = '' if sh.....general.custom_inputnames() == {} else sh.....general.custom_inputnames()[value]",], 'custom_name': { 'type': 'str', - 'on_change': ".. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value]" + 'on_change': "sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None" } } } diff --git a/denon/plugin.yaml b/denon/plugin.yaml index 444b8552a..1eabf58fe 100755 --- a/denon/plugin.yaml +++ b/denon/plugin.yaml @@ -234,7 +234,6 @@ parameters: de: Item-Pfad für das Standby-Item en: item path for standby switch item - item_attributes: denon_command: @@ -311,224 +310,224 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: info + denon_read_group_trigger@instance: info fullmodel: type: str - denon_command: info.fullmodel - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.fullmodel + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info - denon_read_initial: true + denon_read_initial@instance: true model: type: str - denon_command: info.model - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.model + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info - denon_read_initial: true + denon_read_initial@instance: true serialnumber: type: num - denon_command: info.serialnumber - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.serialnumber + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info main: type: str - denon_command: info.main - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.main + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info mainfbl: type: num - denon_command: info.mainfbl - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.mainfbl + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info dsp1: type: num - denon_command: info.dsp1 - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.dsp1 + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info dsp2: type: num - denon_command: info.dsp2 - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.dsp2 + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info dsp3: type: num - denon_command: info.dsp3 - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.dsp3 + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info dsp4: type: num - denon_command: info.dsp4 - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.dsp4 + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info apld: type: num - denon_command: info.apld - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.apld + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info vpld: type: num - denon_command: info.vpld - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.vpld + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info guidat: type: num - denon_command: info.guidat - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.guidat + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info heosversion: type: str - denon_command: info.heosversion - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heosversion + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info heosbuild: type: num - denon_command: info.heosbuild - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heosbuild + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info heosmod: type: num - denon_command: info.heosmod - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heosmod + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info heoscnf: type: str - denon_command: info.heoscnf - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heoscnf + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info heoslanguage: type: str - denon_command: info.heoslanguage - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heoslanguage + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info mac: type: str - denon_command: info.mac - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.mac + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info wifimac: type: str - denon_command: info.wifimac - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.wifimac + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info btmac: type: str - denon_command: info.btmac - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.btmac + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info audyif: type: num - denon_command: info.audyif - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.audyif + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info productid: type: num - denon_command: info.productid - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.productid + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info packageid: type: num - denon_command: info.packageid - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.packageid + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info cmp: type: str - denon_command: info.cmp - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.cmp + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info region: type: str - denon_command: info.region - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.region + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - info - denon_read_initial: true + denon_read_initial@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: general + denon_read_group_trigger@instance: general custom_inputnames: type: dict - denon_command: general.custom_inputnames - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.custom_inputnames + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - general cache: true @@ -543,94 +542,94 @@ item_structs: power: type: bool - denon_command: general.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - general setupmenu: type: bool - denon_command: general.setupmenu - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.setupmenu + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - general display: type: str - denon_command: general.display - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.display + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - general soundmode: type: str - denon_command: general.soundmode - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.soundmode + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - general - denon_read_initial: true + denon_read_initial@instance: true allzonestereo: type: bool - denon_command: general.allzonestereo - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.allzonestereo + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - general - denon_read_initial: true + denon_read_initial@instance: true inputsignal: type: str - denon_command: general.inputsignal - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputsignal + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - general - denon_read_initial: true + denon_read_initial@instance: true inputrate: type: num - denon_command: general.inputrate - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputrate + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - general - denon_read_initial: true + denon_read_initial@instance: true inputformat: type: str - denon_command: general.inputformat - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputformat + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - general - denon_read_initial: true + denon_read_initial@instance: true inputresolution: type: str - denon_command: general.inputresolution - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputresolution + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - general - denon_read_initial: true + denon_read_initial@instance: true outputresolution: type: str - denon_command: general.outputresolution - denon_read: true - denon_write: false + denon_command@instance: general.outputresolution + denon_read@instance: true + denon_write@instance: false ecomode: type: str - denon_command: general.ecomode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.ecomode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - general tuner: @@ -638,86 +637,86 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: tuner + denon_read_group_trigger@instance: tuner title: type: str - denon_command: tuner.title - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: tuner.title + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - tuner - denon_read_initial: true + denon_read_initial@instance: true album: type: str - denon_command: tuner.album - denon_read: true - denon_write: false + denon_command@instance: tuner.album + denon_read@instance: true + denon_write@instance: false artist: type: str - denon_command: tuner.artist - denon_read: true - denon_write: false + denon_command@instance: tuner.artist + denon_read@instance: true + denon_write@instance: false preset: type: num - denon_command: tuner.preset - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.preset + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - tuner - denon_read_initial: true + denon_read_initial@instance: true presetup: type: bool - denon_command: tuner.presetup - denon_read: false - denon_write: true + denon_command@instance: tuner.presetup + denon_read@instance: false + denon_write@instance: true presetdown: type: bool - denon_command: tuner.presetdown - denon_read: false - denon_write: true + denon_command@instance: tuner.presetdown + denon_read@instance: false + denon_write@instance: true frequency: type: num - denon_command: tuner.frequency - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.frequency + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - tuner - denon_read_initial: true + denon_read_initial@instance: true frequencyup: type: bool - denon_command: tuner.frequencyup - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencyup + denon_read@instance: false + denon_write@instance: true frequencydown: type: bool - denon_command: tuner.frequencydown - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencydown + denon_read@instance: false + denon_write@instance: true band: type: str - denon_command: tuner.band - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.band + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - tuner - denon_read_initial: true + denon_read_initial@instance: true tuningmode: type: str - denon_command: tuner.tuningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.tuningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - tuner hd: @@ -725,215 +724,214 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: tuner.hd + denon_read_group_trigger@instance: tuner.hd channel: type: num - denon_command: tuner.hd.channel - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.hd.channel + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - tuner - tuner.hd - denon_read_initial: true + denon_read_initial@instance: true channelup: type: bool - denon_command: tuner.hd.channelup - denon_read: false - denon_write: true + denon_command@instance: tuner.hd.channelup + denon_read@instance: false + denon_write@instance: true channeldown: type: bool - denon_command: tuner.hd.channeldown - denon_read: false - denon_write: true + denon_command@instance: tuner.hd.channeldown + denon_read@instance: false + denon_write@instance: true multicastchannel: type: num - denon_command: tuner.hd.multicastchannel - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.hd.multicastchannel + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - tuner - tuner.hd presetmemory: type: num - denon_command: tuner.hd.presetmemory - denon_read: true - denon_write: true + denon_command@instance: tuner.hd.presetmemory + denon_read@instance: true + denon_write@instance: true preset: type: num - denon_command: tuner.hd.preset - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.hd.preset + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - tuner - tuner.hd presetup: type: bool - denon_command: tuner.hd.presetup - denon_read: false - denon_write: true + denon_command@instance: tuner.hd.presetup + denon_read@instance: false + denon_write@instance: true presetdown: type: bool - denon_command: tuner.hd.presetdown - denon_read: false - denon_write: true + denon_command@instance: tuner.hd.presetdown + denon_read@instance: false + denon_write@instance: true band: type: str - denon_command: tuner.hd.band - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.hd.band + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - tuner - tuner.hd - denon_read_initial: true + denon_read_initial@instance: true zone1: read: type: bool enforce_updates: true - denon_read_group_trigger: zone1 + denon_read_group_trigger@instance: zone1 control: read: type: bool enforce_updates: true - denon_read_group_trigger: zone1.control + denon_read_group_trigger@instance: zone1.control power: type: bool - denon_command: zone1.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.control - denon_read_initial: true + denon_read_initial@instance: true mute: type: bool - denon_command: zone1.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.control - denon_read_initial: true + denon_read_initial@instance: true volume: type: num - denon_command: zone1.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.control - denon_read_initial: true + denon_read_initial@instance: true volumeup: type: bool - denon_command: zone1.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone1.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumedown + denon_read@instance: false + denon_write@instance: true volumemax: type: num - denon_command: zone1.control.volumemax - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: zone1.control.volumemax + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - zone1 - zone1.control - denon_read_initial: true input: type: str - denon_command: zone1.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.control - denon_read_initial: true + denon_read_initial@instance: true on_change: - .custom_name = '' if sh.....general.custom_inputnames() == {} else sh.....general.custom_inputnames()[value] custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None listeningmode: type: str - denon_command: zone1.control.listeningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.listeningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.control - denon_read_initial: true + denon_read_initial@instance: true sleep: type: num - denon_command: zone1.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.control - denon_read_initial: true + denon_read_initial@instance: true standby: type: num - denon_command: zone1.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.control - denon_read_initial: true + denon_read_initial@instance: true settings: read: type: bool enforce_updates: true - denon_read_group_trigger: zone1.settings + denon_read_group_trigger@instance: zone1.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: zone1.settings.sound + denon_read_group_trigger@instance: zone1.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: zone1.settings.sound.channel_level + denon_read_group_trigger@instance: zone1.settings.sound.channel_level front_left: type: num - denon_command: zone1.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -941,10 +939,10 @@ item_structs: front_right: type: num - denon_command: zone1.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -952,10 +950,10 @@ item_structs: front_height_left: type: num - denon_command: zone1.settings.sound.channel_level.front_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -963,10 +961,10 @@ item_structs: front_height_right: type: num - denon_command: zone1.settings.sound.channel_level.front_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -974,10 +972,10 @@ item_structs: front_center: type: num - denon_command: zone1.settings.sound.channel_level.front_center - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_center + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -985,10 +983,10 @@ item_structs: surround_left: type: num - denon_command: zone1.settings.sound.channel_level.surround_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -996,10 +994,10 @@ item_structs: surround_right: type: num - denon_command: zone1.settings.sound.channel_level.surround_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1007,10 +1005,10 @@ item_structs: surroundback_left: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1018,10 +1016,10 @@ item_structs: surroundback_right: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1029,10 +1027,10 @@ item_structs: rear_height_left: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1040,10 +1038,10 @@ item_structs: rear_height_right: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1051,10 +1049,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1062,10 +1060,10 @@ item_structs: subwoofer2: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer2 - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer2 + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1076,14 +1074,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: zone1.settings.sound.tone_control + denon_read_group_trigger@instance: zone1.settings.sound.tone_control tone: type: bool - denon_command: zone1.settings.sound.tone_control.tone - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.tone + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1091,10 +1089,10 @@ item_structs: treble: type: num - denon_command: zone1.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1102,22 +1100,22 @@ item_structs: trebleup: type: bool - denon_command: zone1.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone1.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone1.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1125,29 +1123,29 @@ item_structs: bassup: type: bool - denon_command: zone1.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone1.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: zone1.settings.sound.general + denon_read_group_trigger@instance: zone1.settings.sound.general cinema_eq: type: bool - denon_command: zone1.settings.sound.general.cinema_eq - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.cinema_eq + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1155,10 +1153,10 @@ item_structs: dynamic_eq: type: bool - denon_command: zone1.settings.sound.general.dynamic_eq - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dynamic_eq + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1166,10 +1164,10 @@ item_structs: multeq: type: bool - denon_command: zone1.settings.sound.general.multeq - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.multeq + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1177,10 +1175,10 @@ item_structs: dynamic_vol: type: bool - denon_command: zone1.settings.sound.general.dynamic_vol - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dynamic_vol + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1188,10 +1186,10 @@ item_structs: speakersetup: type: str - denon_command: zone1.settings.sound.general.speakersetup - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.speakersetup + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1199,10 +1197,10 @@ item_structs: hdmiaudioout: type: str - denon_command: zone1.settings.sound.general.hdmiaudioout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.hdmiaudioout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1210,10 +1208,10 @@ item_structs: dynamicrange: type: num - denon_command: zone1.settings.sound.general.dynamicrange - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dynamicrange + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1221,10 +1219,10 @@ item_structs: dialogtoggle: type: bool - denon_command: zone1.settings.sound.general.dialogtoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialogtoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1232,10 +1230,10 @@ item_structs: dialog: type: num - denon_command: zone1.settings.sound.general.dialog - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialog + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1243,22 +1241,22 @@ item_structs: dialogup: type: bool - denon_command: zone1.settings.sound.general.dialogup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogup + denon_read@instance: false + denon_write@instance: true dialogdown: type: bool - denon_command: zone1.settings.sound.general.dialogdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogdown + denon_read@instance: false + denon_write@instance: true dialogenhance: type: num - denon_command: zone1.settings.sound.general.dialogenhance - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialogenhance + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1266,10 +1264,10 @@ item_structs: subwoofertoggle: type: bool - denon_command: zone1.settings.sound.general.subwoofertoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofertoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1277,10 +1275,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.general.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1288,22 +1286,22 @@ item_structs: subwooferup: type: bool - denon_command: zone1.settings.sound.general.subwooferup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferup + denon_read@instance: false + denon_write@instance: true subwooferdown: type: bool - denon_command: zone1.settings.sound.general.subwooferdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferdown + denon_read@instance: false + denon_write@instance: true lfe: type: num - denon_command: zone1.settings.sound.general.lfe - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.lfe + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1311,22 +1309,22 @@ item_structs: lfeup: type: bool - denon_command: zone1.settings.sound.general.lfeup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfeup + denon_read@instance: false + denon_write@instance: true lfedown: type: bool - denon_command: zone1.settings.sound.general.lfedown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfedown + denon_read@instance: false + denon_write@instance: true digitalinput: type: str - denon_command: zone1.settings.sound.general.digitalinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.digitalinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1334,10 +1332,10 @@ item_structs: audioinput: type: str - denon_command: zone1.settings.sound.general.audioinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.audioinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.sound @@ -1348,74 +1346,74 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: zone1.settings.video + denon_read_group_trigger@instance: zone1.settings.video aspectratio: type: str - denon_command: zone1.settings.video.aspectratio - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.aspectratio + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.video hdmimonitor: type: num - denon_command: zone1.settings.video.hdmimonitor - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.hdmimonitor + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.video hdmiresolution: type: str - denon_command: zone1.settings.video.hdmiresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.hdmiresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.video videoprocessingmode: type: str - denon_command: zone1.settings.video.videoprocessingmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoprocessingmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.video videoresolution: type: str - denon_command: zone1.settings.video.videoresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.video pictureenhancer: type: num - denon_command: zone1.settings.video.pictureenhancer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.pictureenhancer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.video videoinput: type: str - denon_command: zone1.settings.video.videoinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone1 - zone1.settings - zone1.settings.video @@ -1425,60 +1423,60 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: zone2 + denon_read_group_trigger@instance: zone2 control: read: type: bool enforce_updates: true - denon_read_group_trigger: zone2.control + denon_read_group_trigger@instance: zone2.control power: type: bool - denon_command: zone2.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.control mute: type: bool - denon_command: zone2.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.control volume: type: num - denon_command: zone2.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.control volumeup: type: bool - denon_command: zone2.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone2.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumedown + denon_read@instance: false + denon_write@instance: true input: type: str - denon_command: zone2.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.control on_change: @@ -1486,23 +1484,23 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None sleep: type: num - denon_command: zone2.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.control standby: type: num - denon_command: zone2.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.control @@ -1511,28 +1509,28 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: zone2.settings + denon_read_group_trigger@instance: zone2.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: zone2.settings.sound + denon_read_group_trigger@instance: zone2.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: zone2.settings.sound.channel_level + denon_read_group_trigger@instance: zone2.settings.sound.channel_level front_left: type: num - denon_command: zone2.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.settings - zone2.settings.sound @@ -1540,10 +1538,10 @@ item_structs: front_right: type: num - denon_command: zone2.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.settings - zone2.settings.sound @@ -1554,14 +1552,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: zone2.settings.sound.tone_control + denon_read_group_trigger@instance: zone2.settings.sound.tone_control treble: type: num - denon_command: zone2.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.settings - zone2.settings.sound @@ -1569,22 +1567,22 @@ item_structs: trebleup: type: bool - denon_command: zone2.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone2.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone2.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.settings - zone2.settings.sound @@ -1592,40 +1590,40 @@ item_structs: bassup: type: bool - denon_command: zone2.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone2.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: zone2.settings.sound.general + denon_read_group_trigger@instance: zone2.settings.sound.general hdmiout: type: str - denon_command: zone2.settings.sound.general.hdmiout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.hdmiout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.settings - zone2.settings.sound - zone2.settings.sound.general - HPF: + hpf: type: bool - denon_command: zone2.settings.sound.general.HPF - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.HPF + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone2 - zone2.settings - zone2.settings.sound @@ -1636,78 +1634,78 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: zone3 + denon_read_group_trigger@instance: zone3 control: read: type: bool enforce_updates: true - denon_read_group_trigger: zone3.control + denon_read_group_trigger@instance: zone3.control power: type: bool - denon_command: zone3.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.control mute: type: bool - denon_command: zone3.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.control volume: type: num - denon_command: zone3.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.control volumeup: type: bool - denon_command: zone3.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone3.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone3.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone3.control.volumedown + denon_read@instance: false + denon_write@instance: true sleep: type: num - denon_command: zone3.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.control standby: type: num - denon_command: zone3.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.control input: type: str - denon_command: zone3.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.control on_change: @@ -1715,35 +1713,35 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None settings: read: type: bool enforce_updates: true - denon_read_group_trigger: zone3.settings + denon_read_group_trigger@instance: zone3.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: zone3.settings.sound + denon_read_group_trigger@instance: zone3.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: zone3.settings.sound.channel_level + denon_read_group_trigger@instance: zone3.settings.sound.channel_level front_left: type: num - denon_command: zone3.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.settings - zone3.settings.sound @@ -1751,10 +1749,10 @@ item_structs: front_right: type: num - denon_command: zone3.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.settings - zone3.settings.sound @@ -1765,14 +1763,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: zone3.settings.sound.tone_control + denon_read_group_trigger@instance: zone3.settings.sound.tone_control treble: type: num - denon_command: zone3.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.settings - zone3.settings.sound @@ -1780,22 +1778,22 @@ item_structs: trebleup: type: bool - denon_command: zone3.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone3.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone3.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.settings - zone3.settings.sound @@ -1803,29 +1801,29 @@ item_structs: bassup: type: bool - denon_command: zone3.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone3.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: zone3.settings.sound.general + denon_read_group_trigger@instance: zone3.settings.sound.general - HPF: + hpf: type: bool - denon_command: zone3.settings.sound.general.HPF - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.general.HPF + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - zone3 - zone3.settings - zone3.settings.sound @@ -1836,21 +1834,21 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL + denon_read_group_trigger@instance: ALL general: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.general + denon_read_group_trigger@instance: ALL.general custom_inputnames: type: dict - denon_command: general.custom_inputnames - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.custom_inputnames + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - ALL - ALL.general cache: true @@ -1866,84 +1864,84 @@ item_structs: power: type: bool - denon_command: general.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.general setupmenu: type: bool - denon_command: general.setupmenu - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.setupmenu + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.general soundmode: type: str - denon_command: general.soundmode - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.soundmode + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - ALL - ALL.general - denon_read_initial: true + denon_read_initial@instance: true inputsignal: type: str - denon_command: general.inputsignal - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputsignal + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - ALL - ALL.general - denon_read_initial: true + denon_read_initial@instance: true inputrate: type: num - denon_command: general.inputrate - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputrate + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - ALL - ALL.general - denon_read_initial: true + denon_read_initial@instance: true inputformat: type: str - denon_command: general.inputformat - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputformat + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - ALL - ALL.general - denon_read_initial: true + denon_read_initial@instance: true inputresolution: type: str - denon_command: general.inputresolution - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputresolution + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - ALL - ALL.general - denon_read_initial: true + denon_read_initial@instance: true outputresolution: type: str - denon_command: general.outputresolution - denon_read: true - denon_write: false + denon_command@instance: general.outputresolution + denon_read@instance: true + denon_write@instance: false ecomode: type: str - denon_command: general.ecomode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.ecomode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.general @@ -1952,68 +1950,68 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.tuner + denon_read_group_trigger@instance: ALL.tuner preset: type: num - denon_command: tuner.preset - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.preset + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.tuner - denon_read_initial: true + denon_read_initial@instance: true presetup: type: bool - denon_command: tuner.presetup - denon_read: false - denon_write: true + denon_command@instance: tuner.presetup + denon_read@instance: false + denon_write@instance: true presetdown: type: bool - denon_command: tuner.presetdown - denon_read: false - denon_write: true + denon_command@instance: tuner.presetdown + denon_read@instance: false + denon_write@instance: true frequency: type: num - denon_command: tuner.frequency - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.frequency + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.tuner - denon_read_initial: true + denon_read_initial@instance: true frequencyup: type: bool - denon_command: tuner.frequencyup - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencyup + denon_read@instance: false + denon_write@instance: true frequencydown: type: bool - denon_command: tuner.frequencydown - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencydown + denon_read@instance: false + denon_write@instance: true band: type: str - denon_command: tuner.band - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.band + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.tuner - denon_read_initial: true + denon_read_initial@instance: true tuningmode: type: str - denon_command: tuner.tuningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.tuningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.tuner @@ -2022,148 +2020,147 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone1 + denon_read_group_trigger@instance: ALL.zone1 control: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone1.control + denon_read_group_trigger@instance: ALL.zone1.control power: type: bool - denon_command: zone1.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.control - denon_read_initial: true + denon_read_initial@instance: true mute: type: bool - denon_command: zone1.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volume: type: num - denon_command: zone1.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volumeup: type: bool - denon_command: zone1.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone1.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumedown + denon_read@instance: false + denon_write@instance: true volumemax: type: num - denon_command: zone1.control.volumemax - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: zone1.control.volumemax + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.control - denon_read_initial: true input: type: str - denon_command: zone1.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.control - denon_read_initial: true + denon_read_initial@instance: true on_change: - .custom_name = '' if sh.....general.custom_inputnames() == {} else sh.....general.custom_inputnames()[value] custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None listeningmode: type: str - denon_command: zone1.control.listeningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.listeningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.control - denon_read_initial: true + denon_read_initial@instance: true sleep: type: num - denon_command: zone1.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.control - denon_read_initial: true + denon_read_initial@instance: true standby: type: num - denon_command: zone1.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.control - denon_read_initial: true + denon_read_initial@instance: true settings: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone1.settings + denon_read_group_trigger@instance: ALL.zone1.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone1.settings.sound + denon_read_group_trigger@instance: ALL.zone1.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone1.settings.sound.channel_level + denon_read_group_trigger@instance: ALL.zone1.settings.sound.channel_level front_left: type: num - denon_command: zone1.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2172,10 +2169,10 @@ item_structs: front_right: type: num - denon_command: zone1.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2184,10 +2181,10 @@ item_structs: front_height_left: type: num - denon_command: zone1.settings.sound.channel_level.front_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2196,10 +2193,10 @@ item_structs: front_height_right: type: num - denon_command: zone1.settings.sound.channel_level.front_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2208,10 +2205,10 @@ item_structs: front_center: type: num - denon_command: zone1.settings.sound.channel_level.front_center - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_center + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2220,10 +2217,10 @@ item_structs: surround_left: type: num - denon_command: zone1.settings.sound.channel_level.surround_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2232,10 +2229,10 @@ item_structs: surround_right: type: num - denon_command: zone1.settings.sound.channel_level.surround_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2244,10 +2241,10 @@ item_structs: surroundback_left: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2256,10 +2253,10 @@ item_structs: surroundback_right: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2268,10 +2265,10 @@ item_structs: rear_height_left: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2280,10 +2277,10 @@ item_structs: rear_height_right: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2292,10 +2289,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2307,14 +2304,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone1.settings.sound.tone_control + denon_read_group_trigger@instance: ALL.zone1.settings.sound.tone_control tone: type: bool - denon_command: zone1.settings.sound.tone_control.tone - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.tone + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2323,10 +2320,10 @@ item_structs: treble: type: num - denon_command: zone1.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2335,22 +2332,22 @@ item_structs: trebleup: type: bool - denon_command: zone1.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone1.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone1.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2359,29 +2356,29 @@ item_structs: bassup: type: bool - denon_command: zone1.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone1.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone1.settings.sound.general + denon_read_group_trigger@instance: ALL.zone1.settings.sound.general cinema_eq: type: bool - denon_command: zone1.settings.sound.general.cinema_eq - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.cinema_eq + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2390,10 +2387,10 @@ item_structs: hdmiaudioout: type: str - denon_command: zone1.settings.sound.general.hdmiaudioout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.hdmiaudioout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2402,10 +2399,10 @@ item_structs: dynamicrange: type: num - denon_command: zone1.settings.sound.general.dynamicrange - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dynamicrange + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2414,10 +2411,10 @@ item_structs: subwoofertoggle: type: bool - denon_command: zone1.settings.sound.general.subwoofertoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofertoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2426,10 +2423,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.general.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2438,22 +2435,22 @@ item_structs: subwooferup: type: bool - denon_command: zone1.settings.sound.general.subwooferup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferup + denon_read@instance: false + denon_write@instance: true subwooferdown: type: bool - denon_command: zone1.settings.sound.general.subwooferdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferdown + denon_read@instance: false + denon_write@instance: true lfe: type: num - denon_command: zone1.settings.sound.general.lfe - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.lfe + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2462,22 +2459,22 @@ item_structs: lfeup: type: bool - denon_command: zone1.settings.sound.general.lfeup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfeup + denon_read@instance: false + denon_write@instance: true lfedown: type: bool - denon_command: zone1.settings.sound.general.lfedown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfedown + denon_read@instance: false + denon_write@instance: true audioinput: type: str - denon_command: zone1.settings.sound.general.audioinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.audioinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone1 - ALL.zone1.settings @@ -2489,63 +2486,63 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone2 + denon_read_group_trigger@instance: ALL.zone2 control: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone2.control + denon_read_group_trigger@instance: ALL.zone2.control power: type: bool - denon_command: zone2.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone2 - ALL.zone2.control mute: type: bool - denon_command: zone2.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone2 - ALL.zone2.control volume: type: num - denon_command: zone2.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone2 - ALL.zone2.control volumeup: type: bool - denon_command: zone2.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone2.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumedown + denon_read@instance: false + denon_write@instance: true input: type: str - denon_command: zone2.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone2 - ALL.zone2.control @@ -2554,24 +2551,24 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None sleep: type: num - denon_command: zone2.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone2 - ALL.zone2.control standby: type: num - denon_command: zone2.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone2 - ALL.zone2.control @@ -2581,28 +2578,28 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone2.settings + denon_read_group_trigger@instance: ALL.zone2.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone2.settings.sound + denon_read_group_trigger@instance: ALL.zone2.settings.sound general: read: type: bool enforce_updates: true - denon_read_group_trigger: ALL.zone2.settings.sound.general + denon_read_group_trigger@instance: ALL.zone2.settings.sound.general hdmiout: type: str - denon_command: zone2.settings.sound.general.hdmiout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.hdmiout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - ALL - ALL.zone2 - ALL.zone2.settings @@ -2614,256 +2611,256 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H + denon_read_group_trigger@instance: AVR-X6300H info: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.info + denon_read_group_trigger@instance: AVR-X6300H.info fullmodel: type: str - denon_command: info.fullmodel - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.fullmodel + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info - denon_read_initial: true + denon_read_initial@instance: true model: type: str - denon_command: info.model - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.model + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info - denon_read_initial: true + denon_read_initial@instance: true serialnumber: type: num - denon_command: info.serialnumber - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.serialnumber + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info main: type: str - denon_command: info.main - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.main + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info mainfbl: type: num - denon_command: info.mainfbl - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.mainfbl + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info dsp1: type: num - denon_command: info.dsp1 - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.dsp1 + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info dsp2: type: num - denon_command: info.dsp2 - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.dsp2 + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info dsp3: type: num - denon_command: info.dsp3 - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.dsp3 + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info dsp4: type: num - denon_command: info.dsp4 - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.dsp4 + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info apld: type: num - denon_command: info.apld - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.apld + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info vpld: type: num - denon_command: info.vpld - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.vpld + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info guidat: type: num - denon_command: info.guidat - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.guidat + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info heosversion: type: str - denon_command: info.heosversion - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heosversion + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info heosbuild: type: num - denon_command: info.heosbuild - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heosbuild + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info heosmod: type: num - denon_command: info.heosmod - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heosmod + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info heoscnf: type: str - denon_command: info.heoscnf - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heoscnf + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info heoslanguage: type: str - denon_command: info.heoslanguage - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.heoslanguage + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info mac: type: str - denon_command: info.mac - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.mac + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info wifimac: type: str - denon_command: info.wifimac - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.wifimac + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info btmac: type: str - denon_command: info.btmac - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.btmac + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info audyif: type: num - denon_command: info.audyif - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.audyif + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info productid: type: num - denon_command: info.productid - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.productid + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info packageid: type: num - denon_command: info.packageid - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.packageid + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info cmp: type: str - denon_command: info.cmp - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.cmp + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info region: type: str - denon_command: info.region - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: info.region + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.info - denon_read_initial: true + denon_read_initial@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.general + denon_read_group_trigger@instance: AVR-X6300H.general custom_inputnames: type: dict - denon_command: general.custom_inputnames - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.custom_inputnames + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.general cache: true @@ -2879,84 +2876,84 @@ item_structs: power: type: bool - denon_command: general.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.general setupmenu: type: bool - denon_command: general.setupmenu - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.setupmenu + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.general soundmode: type: str - denon_command: general.soundmode - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.soundmode + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.general - denon_read_initial: true + denon_read_initial@instance: true inputsignal: type: str - denon_command: general.inputsignal - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputsignal + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.general - denon_read_initial: true + denon_read_initial@instance: true inputrate: type: num - denon_command: general.inputrate - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputrate + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.general - denon_read_initial: true + denon_read_initial@instance: true inputformat: type: str - denon_command: general.inputformat - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputformat + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.general - denon_read_initial: true + denon_read_initial@instance: true inputresolution: type: str - denon_command: general.inputresolution - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputresolution + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.general - denon_read_initial: true + denon_read_initial@instance: true outputresolution: type: str - denon_command: general.outputresolution - denon_read: true - denon_write: false + denon_command@instance: general.outputresolution + denon_read@instance: true + denon_write@instance: false ecomode: type: str - denon_command: general.ecomode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.ecomode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.general @@ -2965,68 +2962,68 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.tuner + denon_read_group_trigger@instance: AVR-X6300H.tuner preset: type: num - denon_command: tuner.preset - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.preset + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.tuner - denon_read_initial: true + denon_read_initial@instance: true presetup: type: bool - denon_command: tuner.presetup - denon_read: false - denon_write: true + denon_command@instance: tuner.presetup + denon_read@instance: false + denon_write@instance: true presetdown: type: bool - denon_command: tuner.presetdown - denon_read: false - denon_write: true + denon_command@instance: tuner.presetdown + denon_read@instance: false + denon_write@instance: true frequency: type: num - denon_command: tuner.frequency - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.frequency + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.tuner - denon_read_initial: true + denon_read_initial@instance: true frequencyup: type: bool - denon_command: tuner.frequencyup - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencyup + denon_read@instance: false + denon_write@instance: true frequencydown: type: bool - denon_command: tuner.frequencydown - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencydown + denon_read@instance: false + denon_write@instance: true band: type: str - denon_command: tuner.band - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.band + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.tuner - denon_read_initial: true + denon_read_initial@instance: true tuningmode: type: str - denon_command: tuner.tuningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.tuningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.tuner @@ -3035,227 +3032,226 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.tuner.hd + denon_read_group_trigger@instance: AVR-X6300H.tuner.hd channel: type: num - denon_command: tuner.hd.channel - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.hd.channel + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.tuner - AVR-X6300H.tuner.hd - denon_read_initial: true + denon_read_initial@instance: true channelup: type: bool - denon_command: tuner.hd.channelup - denon_read: false - denon_write: true + denon_command@instance: tuner.hd.channelup + denon_read@instance: false + denon_write@instance: true channeldown: type: bool - denon_command: tuner.hd.channeldown - denon_read: false - denon_write: true + denon_command@instance: tuner.hd.channeldown + denon_read@instance: false + denon_write@instance: true multicastchannel: type: num - denon_command: tuner.hd.multicastchannel - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.hd.multicastchannel + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.tuner - AVR-X6300H.tuner.hd presetmemory: type: num - denon_command: tuner.hd.presetmemory - denon_read: true - denon_write: true + denon_command@instance: tuner.hd.presetmemory + denon_read@instance: true + denon_write@instance: true preset: type: num - denon_command: tuner.hd.preset - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.hd.preset + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.tuner - AVR-X6300H.tuner.hd presetup: type: bool - denon_command: tuner.hd.presetup - denon_read: false - denon_write: true + denon_command@instance: tuner.hd.presetup + denon_read@instance: false + denon_write@instance: true presetdown: type: bool - denon_command: tuner.hd.presetdown - denon_read: false - denon_write: true + denon_command@instance: tuner.hd.presetdown + denon_read@instance: false + denon_write@instance: true band: type: str - denon_command: tuner.hd.band - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.hd.band + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.tuner - AVR-X6300H.tuner.hd - denon_read_initial: true + denon_read_initial@instance: true zone1: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone1 + denon_read_group_trigger@instance: AVR-X6300H.zone1 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone1.control + denon_read_group_trigger@instance: AVR-X6300H.zone1.control power: type: bool - denon_command: zone1.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true mute: type: bool - denon_command: zone1.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volume: type: num - denon_command: zone1.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volumeup: type: bool - denon_command: zone1.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone1.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumedown + denon_read@instance: false + denon_write@instance: true volumemax: type: num - denon_command: zone1.control.volumemax - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: zone1.control.volumemax + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.control - denon_read_initial: true input: type: str - denon_command: zone1.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true on_change: - .custom_name = '' if sh.....general.custom_inputnames() == {} else sh.....general.custom_inputnames()[value] custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None listeningmode: type: str - denon_command: zone1.control.listeningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.listeningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true sleep: type: num - denon_command: zone1.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true standby: type: num - denon_command: zone1.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true settings: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone1.settings + denon_read_group_trigger@instance: AVR-X6300H.zone1.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone1.settings.sound + denon_read_group_trigger@instance: AVR-X6300H.zone1.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone1.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X6300H.zone1.settings.sound.channel_level front_left: type: num - denon_command: zone1.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3264,10 +3260,10 @@ item_structs: front_right: type: num - denon_command: zone1.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3276,10 +3272,10 @@ item_structs: front_height_left: type: num - denon_command: zone1.settings.sound.channel_level.front_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3288,10 +3284,10 @@ item_structs: front_height_right: type: num - denon_command: zone1.settings.sound.channel_level.front_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3300,10 +3296,10 @@ item_structs: front_center: type: num - denon_command: zone1.settings.sound.channel_level.front_center - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_center + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3312,10 +3308,10 @@ item_structs: surround_left: type: num - denon_command: zone1.settings.sound.channel_level.surround_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3324,10 +3320,10 @@ item_structs: surround_right: type: num - denon_command: zone1.settings.sound.channel_level.surround_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3336,10 +3332,10 @@ item_structs: surroundback_left: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3348,10 +3344,10 @@ item_structs: surroundback_right: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3360,10 +3356,10 @@ item_structs: rear_height_left: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3372,10 +3368,10 @@ item_structs: rear_height_right: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3384,10 +3380,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3396,10 +3392,10 @@ item_structs: subwoofer2: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer2 - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer2 + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3411,14 +3407,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone1.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X6300H.zone1.settings.sound.tone_control tone: type: bool - denon_command: zone1.settings.sound.tone_control.tone - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.tone + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3427,10 +3423,10 @@ item_structs: treble: type: num - denon_command: zone1.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3439,22 +3435,22 @@ item_structs: trebleup: type: bool - denon_command: zone1.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone1.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone1.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3463,29 +3459,29 @@ item_structs: bassup: type: bool - denon_command: zone1.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone1.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone1.settings.sound.general + denon_read_group_trigger@instance: AVR-X6300H.zone1.settings.sound.general cinema_eq: type: bool - denon_command: zone1.settings.sound.general.cinema_eq - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.cinema_eq + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3494,10 +3490,10 @@ item_structs: speakersetup: type: str - denon_command: zone1.settings.sound.general.speakersetup - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.speakersetup + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3506,10 +3502,10 @@ item_structs: hdmiaudioout: type: str - denon_command: zone1.settings.sound.general.hdmiaudioout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.hdmiaudioout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3518,10 +3514,10 @@ item_structs: dynamicrange: type: num - denon_command: zone1.settings.sound.general.dynamicrange - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dynamicrange + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3530,10 +3526,10 @@ item_structs: dialogenhance: type: num - denon_command: zone1.settings.sound.general.dialogenhance - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialogenhance + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3542,10 +3538,10 @@ item_structs: subwoofertoggle: type: bool - denon_command: zone1.settings.sound.general.subwoofertoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofertoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3554,10 +3550,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.general.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3566,22 +3562,22 @@ item_structs: subwooferup: type: bool - denon_command: zone1.settings.sound.general.subwooferup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferup + denon_read@instance: false + denon_write@instance: true subwooferdown: type: bool - denon_command: zone1.settings.sound.general.subwooferdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferdown + denon_read@instance: false + denon_write@instance: true lfe: type: num - denon_command: zone1.settings.sound.general.lfe - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.lfe + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3590,22 +3586,22 @@ item_structs: lfeup: type: bool - denon_command: zone1.settings.sound.general.lfeup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfeup + denon_read@instance: false + denon_write@instance: true lfedown: type: bool - denon_command: zone1.settings.sound.general.lfedown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfedown + denon_read@instance: false + denon_write@instance: true audioinput: type: str - denon_command: zone1.settings.sound.general.audioinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.audioinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3617,14 +3613,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone1.settings.video + denon_read_group_trigger@instance: AVR-X6300H.zone1.settings.video aspectratio: type: str - denon_command: zone1.settings.video.aspectratio - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.aspectratio + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3632,10 +3628,10 @@ item_structs: hdmimonitor: type: num - denon_command: zone1.settings.video.hdmimonitor - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.hdmimonitor + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3643,10 +3639,10 @@ item_structs: hdmiresolution: type: str - denon_command: zone1.settings.video.hdmiresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.hdmiresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3654,10 +3650,10 @@ item_structs: videoprocessingmode: type: str - denon_command: zone1.settings.video.videoprocessingmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoprocessingmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3665,10 +3661,10 @@ item_structs: videoresolution: type: str - denon_command: zone1.settings.video.videoresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3676,10 +3672,10 @@ item_structs: pictureenhancer: type: num - denon_command: zone1.settings.video.pictureenhancer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.pictureenhancer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3687,10 +3683,10 @@ item_structs: videoinput: type: str - denon_command: zone1.settings.video.videoinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone1 - AVR-X6300H.zone1.settings @@ -3701,63 +3697,63 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone2 + denon_read_group_trigger@instance: AVR-X6300H.zone2 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone2.control + denon_read_group_trigger@instance: AVR-X6300H.zone2.control power: type: bool - denon_command: zone2.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.control mute: type: bool - denon_command: zone2.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.control volume: type: num - denon_command: zone2.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.control volumeup: type: bool - denon_command: zone2.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone2.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumedown + denon_read@instance: false + denon_write@instance: true input: type: str - denon_command: zone2.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.control @@ -3766,24 +3762,24 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None sleep: type: num - denon_command: zone2.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.control standby: type: num - denon_command: zone2.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.control @@ -3793,28 +3789,28 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone2.settings + denon_read_group_trigger@instance: AVR-X6300H.zone2.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone2.settings.sound + denon_read_group_trigger@instance: AVR-X6300H.zone2.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone2.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X6300H.zone2.settings.sound.channel_level front_left: type: num - denon_command: zone2.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.settings @@ -3823,10 +3819,10 @@ item_structs: front_right: type: num - denon_command: zone2.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.settings @@ -3838,14 +3834,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone2.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X6300H.zone2.settings.sound.tone_control treble: type: num - denon_command: zone2.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.settings @@ -3854,22 +3850,22 @@ item_structs: trebleup: type: bool - denon_command: zone2.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone2.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone2.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.settings @@ -3878,41 +3874,41 @@ item_structs: bassup: type: bool - denon_command: zone2.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone2.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone2.settings.sound.general + denon_read_group_trigger@instance: AVR-X6300H.zone2.settings.sound.general hdmiout: type: str - denon_command: zone2.settings.sound.general.hdmiout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.hdmiout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.settings - AVR-X6300H.zone2.settings.sound - AVR-X6300H.zone2.settings.sound.general - HPF: + hpf: type: bool - denon_command: zone2.settings.sound.general.HPF - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.HPF + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone2 - AVR-X6300H.zone2.settings @@ -3924,83 +3920,83 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone3 + denon_read_group_trigger@instance: AVR-X6300H.zone3 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone3.control + denon_read_group_trigger@instance: AVR-X6300H.zone3.control power: type: bool - denon_command: zone3.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.control mute: type: bool - denon_command: zone3.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.control volume: type: num - denon_command: zone3.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.control volumeup: type: bool - denon_command: zone3.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone3.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone3.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone3.control.volumedown + denon_read@instance: false + denon_write@instance: true sleep: type: num - denon_command: zone3.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.control standby: type: num - denon_command: zone3.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.control input: type: str - denon_command: zone3.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.control @@ -4009,35 +4005,35 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None settings: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone3.settings + denon_read_group_trigger@instance: AVR-X6300H.zone3.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone3.settings.sound + denon_read_group_trigger@instance: AVR-X6300H.zone3.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone3.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X6300H.zone3.settings.sound.channel_level front_left: type: num - denon_command: zone3.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.settings @@ -4046,10 +4042,10 @@ item_structs: front_right: type: num - denon_command: zone3.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.settings @@ -4061,14 +4057,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone3.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X6300H.zone3.settings.sound.tone_control treble: type: num - denon_command: zone3.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.settings @@ -4077,22 +4073,22 @@ item_structs: trebleup: type: bool - denon_command: zone3.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone3.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone3.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.settings @@ -4101,29 +4097,29 @@ item_structs: bassup: type: bool - denon_command: zone3.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone3.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X6300H.zone3.settings.sound.general + denon_read_group_trigger@instance: AVR-X6300H.zone3.settings.sound.general - HPF: + hpf: type: bool - denon_command: zone3.settings.sound.general.HPF - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.general.HPF + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X6300H - AVR-X6300H.zone3 - AVR-X6300H.zone3.settings @@ -4135,21 +4131,21 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H + denon_read_group_trigger@instance: AVR-X4300H general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.general + denon_read_group_trigger@instance: AVR-X4300H.general custom_inputnames: type: dict - denon_command: general.custom_inputnames - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.custom_inputnames + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.general cache: true @@ -4165,84 +4161,84 @@ item_structs: power: type: bool - denon_command: general.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.general setupmenu: type: bool - denon_command: general.setupmenu - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.setupmenu + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.general soundmode: type: str - denon_command: general.soundmode - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.soundmode + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.general - denon_read_initial: true + denon_read_initial@instance: true inputsignal: type: str - denon_command: general.inputsignal - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputsignal + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.general - denon_read_initial: true + denon_read_initial@instance: true inputrate: type: num - denon_command: general.inputrate - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputrate + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.general - denon_read_initial: true + denon_read_initial@instance: true inputformat: type: str - denon_command: general.inputformat - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputformat + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.general - denon_read_initial: true + denon_read_initial@instance: true inputresolution: type: str - denon_command: general.inputresolution - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputresolution + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.general - denon_read_initial: true + denon_read_initial@instance: true outputresolution: type: str - denon_command: general.outputresolution - denon_read: true - denon_write: false + denon_command@instance: general.outputresolution + denon_read@instance: true + denon_write@instance: false ecomode: type: str - denon_command: general.ecomode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.ecomode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.general @@ -4251,68 +4247,68 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.tuner + denon_read_group_trigger@instance: AVR-X4300H.tuner preset: type: num - denon_command: tuner.preset - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.preset + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.tuner - denon_read_initial: true + denon_read_initial@instance: true presetup: type: bool - denon_command: tuner.presetup - denon_read: false - denon_write: true + denon_command@instance: tuner.presetup + denon_read@instance: false + denon_write@instance: true presetdown: type: bool - denon_command: tuner.presetdown - denon_read: false - denon_write: true + denon_command@instance: tuner.presetdown + denon_read@instance: false + denon_write@instance: true frequency: type: num - denon_command: tuner.frequency - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.frequency + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.tuner - denon_read_initial: true + denon_read_initial@instance: true frequencyup: type: bool - denon_command: tuner.frequencyup - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencyup + denon_read@instance: false + denon_write@instance: true frequencydown: type: bool - denon_command: tuner.frequencydown - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencydown + denon_read@instance: false + denon_write@instance: true band: type: str - denon_command: tuner.band - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.band + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.tuner - denon_read_initial: true + denon_read_initial@instance: true tuningmode: type: str - denon_command: tuner.tuningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.tuningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.tuner @@ -4321,148 +4317,147 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone1 + denon_read_group_trigger@instance: AVR-X4300H.zone1 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone1.control + denon_read_group_trigger@instance: AVR-X4300H.zone1.control power: type: bool - denon_command: zone1.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true mute: type: bool - denon_command: zone1.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volume: type: num - denon_command: zone1.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volumeup: type: bool - denon_command: zone1.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone1.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumedown + denon_read@instance: false + denon_write@instance: true volumemax: type: num - denon_command: zone1.control.volumemax - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: zone1.control.volumemax + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.control - denon_read_initial: true input: type: str - denon_command: zone1.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true on_change: - .custom_name = '' if sh.....general.custom_inputnames() == {} else sh.....general.custom_inputnames()[value] custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None listeningmode: type: str - denon_command: zone1.control.listeningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.listeningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true sleep: type: num - denon_command: zone1.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true standby: type: num - denon_command: zone1.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.control - denon_read_initial: true + denon_read_initial@instance: true settings: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone1.settings + denon_read_group_trigger@instance: AVR-X4300H.zone1.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone1.settings.sound + denon_read_group_trigger@instance: AVR-X4300H.zone1.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone1.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X4300H.zone1.settings.sound.channel_level front_left: type: num - denon_command: zone1.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4471,10 +4466,10 @@ item_structs: front_right: type: num - denon_command: zone1.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4483,10 +4478,10 @@ item_structs: front_height_left: type: num - denon_command: zone1.settings.sound.channel_level.front_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4495,10 +4490,10 @@ item_structs: front_height_right: type: num - denon_command: zone1.settings.sound.channel_level.front_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4507,10 +4502,10 @@ item_structs: front_center: type: num - denon_command: zone1.settings.sound.channel_level.front_center - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_center + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4519,10 +4514,10 @@ item_structs: surround_left: type: num - denon_command: zone1.settings.sound.channel_level.surround_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4531,10 +4526,10 @@ item_structs: surround_right: type: num - denon_command: zone1.settings.sound.channel_level.surround_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4543,10 +4538,10 @@ item_structs: surroundback_left: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4555,10 +4550,10 @@ item_structs: surroundback_right: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4567,10 +4562,10 @@ item_structs: rear_height_left: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4579,10 +4574,10 @@ item_structs: rear_height_right: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4591,10 +4586,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4603,10 +4598,10 @@ item_structs: subwoofer2: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer2 - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer2 + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4618,14 +4613,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone1.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X4300H.zone1.settings.sound.tone_control tone: type: bool - denon_command: zone1.settings.sound.tone_control.tone - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.tone + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4634,10 +4629,10 @@ item_structs: treble: type: num - denon_command: zone1.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4646,22 +4641,22 @@ item_structs: trebleup: type: bool - denon_command: zone1.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone1.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone1.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4670,29 +4665,29 @@ item_structs: bassup: type: bool - denon_command: zone1.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone1.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone1.settings.sound.general + denon_read_group_trigger@instance: AVR-X4300H.zone1.settings.sound.general cinema_eq: type: bool - denon_command: zone1.settings.sound.general.cinema_eq - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.cinema_eq + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4701,10 +4696,10 @@ item_structs: speakersetup: type: str - denon_command: zone1.settings.sound.general.speakersetup - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.speakersetup + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4713,10 +4708,10 @@ item_structs: hdmiaudioout: type: str - denon_command: zone1.settings.sound.general.hdmiaudioout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.hdmiaudioout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4725,10 +4720,10 @@ item_structs: dynamicrange: type: num - denon_command: zone1.settings.sound.general.dynamicrange - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dynamicrange + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4737,10 +4732,10 @@ item_structs: dialogtoggle: type: bool - denon_command: zone1.settings.sound.general.dialogtoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialogtoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4749,10 +4744,10 @@ item_structs: dialog: type: num - denon_command: zone1.settings.sound.general.dialog - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialog + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4761,22 +4756,22 @@ item_structs: dialogup: type: bool - denon_command: zone1.settings.sound.general.dialogup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogup + denon_read@instance: false + denon_write@instance: true dialogdown: type: bool - denon_command: zone1.settings.sound.general.dialogdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogdown + denon_read@instance: false + denon_write@instance: true subwoofertoggle: type: bool - denon_command: zone1.settings.sound.general.subwoofertoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofertoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4785,10 +4780,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.general.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4797,22 +4792,22 @@ item_structs: subwooferup: type: bool - denon_command: zone1.settings.sound.general.subwooferup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferup + denon_read@instance: false + denon_write@instance: true subwooferdown: type: bool - denon_command: zone1.settings.sound.general.subwooferdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferdown + denon_read@instance: false + denon_write@instance: true lfe: type: num - denon_command: zone1.settings.sound.general.lfe - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.lfe + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4821,22 +4816,22 @@ item_structs: lfeup: type: bool - denon_command: zone1.settings.sound.general.lfeup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfeup + denon_read@instance: false + denon_write@instance: true lfedown: type: bool - denon_command: zone1.settings.sound.general.lfedown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfedown + denon_read@instance: false + denon_write@instance: true audioinput: type: str - denon_command: zone1.settings.sound.general.audioinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.audioinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4848,14 +4843,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone1.settings.video + denon_read_group_trigger@instance: AVR-X4300H.zone1.settings.video aspectratio: type: str - denon_command: zone1.settings.video.aspectratio - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.aspectratio + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4863,10 +4858,10 @@ item_structs: hdmimonitor: type: num - denon_command: zone1.settings.video.hdmimonitor - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.hdmimonitor + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4874,10 +4869,10 @@ item_structs: hdmiresolution: type: str - denon_command: zone1.settings.video.hdmiresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.hdmiresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4885,10 +4880,10 @@ item_structs: videoprocessingmode: type: str - denon_command: zone1.settings.video.videoprocessingmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoprocessingmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4896,10 +4891,10 @@ item_structs: videoresolution: type: str - denon_command: zone1.settings.video.videoresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4907,10 +4902,10 @@ item_structs: pictureenhancer: type: num - denon_command: zone1.settings.video.pictureenhancer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.pictureenhancer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4918,10 +4913,10 @@ item_structs: videoinput: type: str - denon_command: zone1.settings.video.videoinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone1 - AVR-X4300H.zone1.settings @@ -4932,63 +4927,63 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone2 + denon_read_group_trigger@instance: AVR-X4300H.zone2 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone2.control + denon_read_group_trigger@instance: AVR-X4300H.zone2.control power: type: bool - denon_command: zone2.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.control mute: type: bool - denon_command: zone2.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.control volume: type: num - denon_command: zone2.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.control volumeup: type: bool - denon_command: zone2.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone2.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumedown + denon_read@instance: false + denon_write@instance: true input: type: str - denon_command: zone2.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.control @@ -4997,24 +4992,24 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None sleep: type: num - denon_command: zone2.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.control standby: type: num - denon_command: zone2.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.control @@ -5024,28 +5019,28 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone2.settings + denon_read_group_trigger@instance: AVR-X4300H.zone2.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone2.settings.sound + denon_read_group_trigger@instance: AVR-X4300H.zone2.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone2.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X4300H.zone2.settings.sound.channel_level front_left: type: num - denon_command: zone2.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.settings @@ -5054,10 +5049,10 @@ item_structs: front_right: type: num - denon_command: zone2.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.settings @@ -5069,14 +5064,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone2.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X4300H.zone2.settings.sound.tone_control treble: type: num - denon_command: zone2.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.settings @@ -5085,22 +5080,22 @@ item_structs: trebleup: type: bool - denon_command: zone2.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone2.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone2.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.settings @@ -5109,41 +5104,41 @@ item_structs: bassup: type: bool - denon_command: zone2.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone2.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone2.settings.sound.general + denon_read_group_trigger@instance: AVR-X4300H.zone2.settings.sound.general hdmiout: type: str - denon_command: zone2.settings.sound.general.hdmiout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.hdmiout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.settings - AVR-X4300H.zone2.settings.sound - AVR-X4300H.zone2.settings.sound.general - HPF: + hpf: type: bool - denon_command: zone2.settings.sound.general.HPF - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.HPF + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone2 - AVR-X4300H.zone2.settings @@ -5155,83 +5150,83 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone3 + denon_read_group_trigger@instance: AVR-X4300H.zone3 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone3.control + denon_read_group_trigger@instance: AVR-X4300H.zone3.control power: type: bool - denon_command: zone3.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.control mute: type: bool - denon_command: zone3.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.control volume: type: num - denon_command: zone3.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.control volumeup: type: bool - denon_command: zone3.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone3.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone3.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone3.control.volumedown + denon_read@instance: false + denon_write@instance: true sleep: type: num - denon_command: zone3.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.control standby: type: num - denon_command: zone3.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.control input: type: str - denon_command: zone3.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.control @@ -5240,35 +5235,35 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None settings: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone3.settings + denon_read_group_trigger@instance: AVR-X4300H.zone3.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone3.settings.sound + denon_read_group_trigger@instance: AVR-X4300H.zone3.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone3.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X4300H.zone3.settings.sound.channel_level front_left: type: num - denon_command: zone3.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.settings @@ -5277,10 +5272,10 @@ item_structs: front_right: type: num - denon_command: zone3.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.settings @@ -5292,14 +5287,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone3.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X4300H.zone3.settings.sound.tone_control treble: type: num - denon_command: zone3.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.settings @@ -5308,22 +5303,22 @@ item_structs: trebleup: type: bool - denon_command: zone3.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone3.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone3.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.settings @@ -5332,29 +5327,29 @@ item_structs: bassup: type: bool - denon_command: zone3.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone3.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone3.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X4300H.zone3.settings.sound.general + denon_read_group_trigger@instance: AVR-X4300H.zone3.settings.sound.general - HPF: + hpf: type: bool - denon_command: zone3.settings.sound.general.HPF - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone3.settings.sound.general.HPF + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X4300H - AVR-X4300H.zone3 - AVR-X4300H.zone3.settings @@ -5366,21 +5361,21 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W + denon_read_group_trigger@instance: AVR-X3300W general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.general + denon_read_group_trigger@instance: AVR-X3300W.general custom_inputnames: type: dict - denon_command: general.custom_inputnames - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.custom_inputnames + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general cache: true @@ -5396,93 +5391,93 @@ item_structs: power: type: bool - denon_command: general.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general setupmenu: type: bool - denon_command: general.setupmenu - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.setupmenu + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general display: type: str - denon_command: general.display - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.display + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general soundmode: type: str - denon_command: general.soundmode - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.soundmode + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general - denon_read_initial: true + denon_read_initial@instance: true inputsignal: type: str - denon_command: general.inputsignal - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputsignal + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general - denon_read_initial: true + denon_read_initial@instance: true inputrate: type: num - denon_command: general.inputrate - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputrate + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general - denon_read_initial: true + denon_read_initial@instance: true inputformat: type: str - denon_command: general.inputformat - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputformat + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general - denon_read_initial: true + denon_read_initial@instance: true inputresolution: type: str - denon_command: general.inputresolution - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputresolution + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general - denon_read_initial: true + denon_read_initial@instance: true outputresolution: type: str - denon_command: general.outputresolution - denon_read: true - denon_write: false + denon_command@instance: general.outputresolution + denon_read@instance: true + denon_write@instance: false ecomode: type: str - denon_command: general.ecomode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.ecomode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.general @@ -5491,90 +5486,90 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.tuner + denon_read_group_trigger@instance: AVR-X3300W.tuner title: type: str - denon_command: tuner.title - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: tuner.title + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.tuner - denon_read_initial: true + denon_read_initial@instance: true album: type: str - denon_command: tuner.album - denon_read: true - denon_write: false + denon_command@instance: tuner.album + denon_read@instance: true + denon_write@instance: false artist: type: str - denon_command: tuner.artist - denon_read: true - denon_write: false + denon_command@instance: tuner.artist + denon_read@instance: true + denon_write@instance: false preset: type: num - denon_command: tuner.preset - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.preset + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.tuner - denon_read_initial: true + denon_read_initial@instance: true presetup: type: bool - denon_command: tuner.presetup - denon_read: false - denon_write: true + denon_command@instance: tuner.presetup + denon_read@instance: false + denon_write@instance: true presetdown: type: bool - denon_command: tuner.presetdown - denon_read: false - denon_write: true + denon_command@instance: tuner.presetdown + denon_read@instance: false + denon_write@instance: true frequency: type: num - denon_command: tuner.frequency - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.frequency + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.tuner - denon_read_initial: true + denon_read_initial@instance: true frequencyup: type: bool - denon_command: tuner.frequencyup - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencyup + denon_read@instance: false + denon_write@instance: true frequencydown: type: bool - denon_command: tuner.frequencydown - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencydown + denon_read@instance: false + denon_write@instance: true band: type: str - denon_command: tuner.band - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.band + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.tuner - denon_read_initial: true + denon_read_initial@instance: true tuningmode: type: str - denon_command: tuner.tuningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.tuningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.tuner @@ -5583,148 +5578,147 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone1 + denon_read_group_trigger@instance: AVR-X3300W.zone1 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone1.control + denon_read_group_trigger@instance: AVR-X3300W.zone1.control power: type: bool - denon_command: zone1.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true mute: type: bool - denon_command: zone1.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volume: type: num - denon_command: zone1.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volumeup: type: bool - denon_command: zone1.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone1.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumedown + denon_read@instance: false + denon_write@instance: true volumemax: type: num - denon_command: zone1.control.volumemax - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: zone1.control.volumemax + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.control - denon_read_initial: true input: type: str - denon_command: zone1.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true on_change: - .custom_name = '' if sh.....general.custom_inputnames() == {} else sh.....general.custom_inputnames()[value] custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None listeningmode: type: str - denon_command: zone1.control.listeningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.listeningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true sleep: type: num - denon_command: zone1.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true standby: type: num - denon_command: zone1.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true settings: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone1.settings + denon_read_group_trigger@instance: AVR-X3300W.zone1.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone1.settings.sound + denon_read_group_trigger@instance: AVR-X3300W.zone1.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone1.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X3300W.zone1.settings.sound.channel_level front_left: type: num - denon_command: zone1.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5733,10 +5727,10 @@ item_structs: front_right: type: num - denon_command: zone1.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5745,10 +5739,10 @@ item_structs: front_height_left: type: num - denon_command: zone1.settings.sound.channel_level.front_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5757,10 +5751,10 @@ item_structs: front_height_right: type: num - denon_command: zone1.settings.sound.channel_level.front_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5769,10 +5763,10 @@ item_structs: front_center: type: num - denon_command: zone1.settings.sound.channel_level.front_center - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_center + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5781,10 +5775,10 @@ item_structs: surround_left: type: num - denon_command: zone1.settings.sound.channel_level.surround_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5793,10 +5787,10 @@ item_structs: surround_right: type: num - denon_command: zone1.settings.sound.channel_level.surround_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5805,10 +5799,10 @@ item_structs: surroundback_left: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5817,10 +5811,10 @@ item_structs: surroundback_right: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5829,10 +5823,10 @@ item_structs: rear_height_left: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5841,10 +5835,10 @@ item_structs: rear_height_right: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5853,10 +5847,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5865,10 +5859,10 @@ item_structs: subwoofer2: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer2 - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer2 + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5880,14 +5874,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone1.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X3300W.zone1.settings.sound.tone_control tone: type: bool - denon_command: zone1.settings.sound.tone_control.tone - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.tone + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5896,10 +5890,10 @@ item_structs: treble: type: num - denon_command: zone1.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5908,22 +5902,22 @@ item_structs: trebleup: type: bool - denon_command: zone1.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone1.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone1.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5932,29 +5926,29 @@ item_structs: bassup: type: bool - denon_command: zone1.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone1.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone1.settings.sound.general + denon_read_group_trigger@instance: AVR-X3300W.zone1.settings.sound.general cinema_eq: type: bool - denon_command: zone1.settings.sound.general.cinema_eq - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.cinema_eq + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5963,10 +5957,10 @@ item_structs: hdmiaudioout: type: str - denon_command: zone1.settings.sound.general.hdmiaudioout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.hdmiaudioout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5975,10 +5969,10 @@ item_structs: dynamicrange: type: num - denon_command: zone1.settings.sound.general.dynamicrange - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dynamicrange + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5987,10 +5981,10 @@ item_structs: dialogtoggle: type: bool - denon_command: zone1.settings.sound.general.dialogtoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialogtoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -5999,10 +5993,10 @@ item_structs: dialog: type: num - denon_command: zone1.settings.sound.general.dialog - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialog + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6011,22 +6005,22 @@ item_structs: dialogup: type: bool - denon_command: zone1.settings.sound.general.dialogup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogup + denon_read@instance: false + denon_write@instance: true dialogdown: type: bool - denon_command: zone1.settings.sound.general.dialogdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogdown + denon_read@instance: false + denon_write@instance: true subwoofertoggle: type: bool - denon_command: zone1.settings.sound.general.subwoofertoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofertoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6035,10 +6029,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.general.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6047,22 +6041,22 @@ item_structs: subwooferup: type: bool - denon_command: zone1.settings.sound.general.subwooferup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferup + denon_read@instance: false + denon_write@instance: true subwooferdown: type: bool - denon_command: zone1.settings.sound.general.subwooferdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferdown + denon_read@instance: false + denon_write@instance: true lfe: type: num - denon_command: zone1.settings.sound.general.lfe - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.lfe + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6071,22 +6065,22 @@ item_structs: lfeup: type: bool - denon_command: zone1.settings.sound.general.lfeup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfeup + denon_read@instance: false + denon_write@instance: true lfedown: type: bool - denon_command: zone1.settings.sound.general.lfedown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfedown + denon_read@instance: false + denon_write@instance: true audioinput: type: str - denon_command: zone1.settings.sound.general.audioinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.audioinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6098,14 +6092,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone1.settings.video + denon_read_group_trigger@instance: AVR-X3300W.zone1.settings.video aspectratio: type: str - denon_command: zone1.settings.video.aspectratio - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.aspectratio + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6113,10 +6107,10 @@ item_structs: hdmiresolution: type: str - denon_command: zone1.settings.video.hdmiresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.hdmiresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6124,10 +6118,10 @@ item_structs: videoprocessingmode: type: str - denon_command: zone1.settings.video.videoprocessingmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoprocessingmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6135,10 +6129,10 @@ item_structs: videoresolution: type: str - denon_command: zone1.settings.video.videoresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6146,10 +6140,10 @@ item_structs: pictureenhancer: type: num - denon_command: zone1.settings.video.pictureenhancer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.pictureenhancer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6157,10 +6151,10 @@ item_structs: videoinput: type: str - denon_command: zone1.settings.video.videoinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone1 - AVR-X3300W.zone1.settings @@ -6171,63 +6165,63 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone2 + denon_read_group_trigger@instance: AVR-X3300W.zone2 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone2.control + denon_read_group_trigger@instance: AVR-X3300W.zone2.control power: type: bool - denon_command: zone2.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.control mute: type: bool - denon_command: zone2.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.control volume: type: num - denon_command: zone2.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.control volumeup: type: bool - denon_command: zone2.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone2.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumedown + denon_read@instance: false + denon_write@instance: true input: type: str - denon_command: zone2.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.control @@ -6236,24 +6230,24 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None sleep: type: num - denon_command: zone2.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.control standby: type: num - denon_command: zone2.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.control @@ -6263,28 +6257,28 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone2.settings + denon_read_group_trigger@instance: AVR-X3300W.zone2.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone2.settings.sound + denon_read_group_trigger@instance: AVR-X3300W.zone2.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone2.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X3300W.zone2.settings.sound.channel_level front_left: type: num - denon_command: zone2.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.settings @@ -6293,10 +6287,10 @@ item_structs: front_right: type: num - denon_command: zone2.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.settings @@ -6308,14 +6302,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone2.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X3300W.zone2.settings.sound.tone_control treble: type: num - denon_command: zone2.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.settings @@ -6324,22 +6318,22 @@ item_structs: trebleup: type: bool - denon_command: zone2.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone2.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone2.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.settings @@ -6348,41 +6342,41 @@ item_structs: bassup: type: bool - denon_command: zone2.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone2.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone2.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X3300W.zone2.settings.sound.general + denon_read_group_trigger@instance: AVR-X3300W.zone2.settings.sound.general hdmiout: type: str - denon_command: zone2.settings.sound.general.hdmiout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.hdmiout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.settings - AVR-X3300W.zone2.settings.sound - AVR-X3300W.zone2.settings.sound.general - HPF: + hpf: type: bool - denon_command: zone2.settings.sound.general.HPF - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.HPF + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X3300W - AVR-X3300W.zone2 - AVR-X3300W.zone2.settings @@ -6394,21 +6388,21 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W + denon_read_group_trigger@instance: AVR-X2300W general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.general + denon_read_group_trigger@instance: AVR-X2300W.general custom_inputnames: type: dict - denon_command: general.custom_inputnames - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.custom_inputnames + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general cache: true @@ -6424,93 +6418,93 @@ item_structs: power: type: bool - denon_command: general.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general setupmenu: type: bool - denon_command: general.setupmenu - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.setupmenu + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general display: type: str - denon_command: general.display - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.display + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general soundmode: type: str - denon_command: general.soundmode - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.soundmode + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general - denon_read_initial: true + denon_read_initial@instance: true inputsignal: type: str - denon_command: general.inputsignal - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputsignal + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general - denon_read_initial: true + denon_read_initial@instance: true inputrate: type: num - denon_command: general.inputrate - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputrate + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general - denon_read_initial: true + denon_read_initial@instance: true inputformat: type: str - denon_command: general.inputformat - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputformat + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general - denon_read_initial: true + denon_read_initial@instance: true inputresolution: type: str - denon_command: general.inputresolution - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputresolution + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general - denon_read_initial: true + denon_read_initial@instance: true outputresolution: type: str - denon_command: general.outputresolution - denon_read: true - denon_write: false + denon_command@instance: general.outputresolution + denon_read@instance: true + denon_write@instance: false ecomode: type: str - denon_command: general.ecomode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.ecomode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.general @@ -6519,90 +6513,90 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.tuner + denon_read_group_trigger@instance: AVR-X2300W.tuner title: type: str - denon_command: tuner.title - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: tuner.title + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.tuner - denon_read_initial: true + denon_read_initial@instance: true album: type: str - denon_command: tuner.album - denon_read: true - denon_write: false + denon_command@instance: tuner.album + denon_read@instance: true + denon_write@instance: false artist: type: str - denon_command: tuner.artist - denon_read: true - denon_write: false + denon_command@instance: tuner.artist + denon_read@instance: true + denon_write@instance: false preset: type: num - denon_command: tuner.preset - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.preset + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.tuner - denon_read_initial: true + denon_read_initial@instance: true presetup: type: bool - denon_command: tuner.presetup - denon_read: false - denon_write: true + denon_command@instance: tuner.presetup + denon_read@instance: false + denon_write@instance: true presetdown: type: bool - denon_command: tuner.presetdown - denon_read: false - denon_write: true + denon_command@instance: tuner.presetdown + denon_read@instance: false + denon_write@instance: true frequency: type: num - denon_command: tuner.frequency - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.frequency + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.tuner - denon_read_initial: true + denon_read_initial@instance: true frequencyup: type: bool - denon_command: tuner.frequencyup - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencyup + denon_read@instance: false + denon_write@instance: true frequencydown: type: bool - denon_command: tuner.frequencydown - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencydown + denon_read@instance: false + denon_write@instance: true band: type: str - denon_command: tuner.band - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.band + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.tuner - denon_read_initial: true + denon_read_initial@instance: true tuningmode: type: str - denon_command: tuner.tuningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.tuningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.tuner @@ -6611,148 +6605,147 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone1 + denon_read_group_trigger@instance: AVR-X2300W.zone1 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone1.control + denon_read_group_trigger@instance: AVR-X2300W.zone1.control power: type: bool - denon_command: zone1.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true mute: type: bool - denon_command: zone1.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volume: type: num - denon_command: zone1.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volumeup: type: bool - denon_command: zone1.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone1.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumedown + denon_read@instance: false + denon_write@instance: true volumemax: type: num - denon_command: zone1.control.volumemax - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: zone1.control.volumemax + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.control - denon_read_initial: true input: type: str - denon_command: zone1.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true on_change: - .custom_name = '' if sh.....general.custom_inputnames() == {} else sh.....general.custom_inputnames()[value] custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None listeningmode: type: str - denon_command: zone1.control.listeningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.listeningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true sleep: type: num - denon_command: zone1.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true standby: type: num - denon_command: zone1.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true settings: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone1.settings + denon_read_group_trigger@instance: AVR-X2300W.zone1.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone1.settings.sound + denon_read_group_trigger@instance: AVR-X2300W.zone1.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone1.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X2300W.zone1.settings.sound.channel_level front_left: type: num - denon_command: zone1.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6761,10 +6754,10 @@ item_structs: front_right: type: num - denon_command: zone1.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6773,10 +6766,10 @@ item_structs: front_height_left: type: num - denon_command: zone1.settings.sound.channel_level.front_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6785,10 +6778,10 @@ item_structs: front_height_right: type: num - denon_command: zone1.settings.sound.channel_level.front_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6797,10 +6790,10 @@ item_structs: front_center: type: num - denon_command: zone1.settings.sound.channel_level.front_center - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_center + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6809,10 +6802,10 @@ item_structs: surround_left: type: num - denon_command: zone1.settings.sound.channel_level.surround_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6821,10 +6814,10 @@ item_structs: surround_right: type: num - denon_command: zone1.settings.sound.channel_level.surround_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6833,10 +6826,10 @@ item_structs: surroundback_left: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6845,10 +6838,10 @@ item_structs: surroundback_right: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6857,10 +6850,10 @@ item_structs: rear_height_left: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6869,10 +6862,10 @@ item_structs: rear_height_right: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6881,10 +6874,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6896,14 +6889,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone1.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X2300W.zone1.settings.sound.tone_control tone: type: bool - denon_command: zone1.settings.sound.tone_control.tone - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.tone + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6912,10 +6905,10 @@ item_structs: treble: type: num - denon_command: zone1.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6924,22 +6917,22 @@ item_structs: trebleup: type: bool - denon_command: zone1.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone1.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone1.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6948,29 +6941,29 @@ item_structs: bassup: type: bool - denon_command: zone1.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone1.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone1.settings.sound.general + denon_read_group_trigger@instance: AVR-X2300W.zone1.settings.sound.general cinema_eq: type: bool - denon_command: zone1.settings.sound.general.cinema_eq - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.cinema_eq + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6979,10 +6972,10 @@ item_structs: hdmiaudioout: type: str - denon_command: zone1.settings.sound.general.hdmiaudioout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.hdmiaudioout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -6991,10 +6984,10 @@ item_structs: dynamicrange: type: num - denon_command: zone1.settings.sound.general.dynamicrange - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dynamicrange + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7003,10 +6996,10 @@ item_structs: dialogtoggle: type: bool - denon_command: zone1.settings.sound.general.dialogtoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialogtoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7015,10 +7008,10 @@ item_structs: dialog: type: num - denon_command: zone1.settings.sound.general.dialog - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialog + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7027,22 +7020,22 @@ item_structs: dialogup: type: bool - denon_command: zone1.settings.sound.general.dialogup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogup + denon_read@instance: false + denon_write@instance: true dialogdown: type: bool - denon_command: zone1.settings.sound.general.dialogdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogdown + denon_read@instance: false + denon_write@instance: true subwoofertoggle: type: bool - denon_command: zone1.settings.sound.general.subwoofertoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofertoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7051,10 +7044,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.general.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7063,22 +7056,22 @@ item_structs: subwooferup: type: bool - denon_command: zone1.settings.sound.general.subwooferup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferup + denon_read@instance: false + denon_write@instance: true subwooferdown: type: bool - denon_command: zone1.settings.sound.general.subwooferdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferdown + denon_read@instance: false + denon_write@instance: true lfe: type: num - denon_command: zone1.settings.sound.general.lfe - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.lfe + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7087,22 +7080,22 @@ item_structs: lfeup: type: bool - denon_command: zone1.settings.sound.general.lfeup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfeup + denon_read@instance: false + denon_write@instance: true lfedown: type: bool - denon_command: zone1.settings.sound.general.lfedown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfedown + denon_read@instance: false + denon_write@instance: true audioinput: type: str - denon_command: zone1.settings.sound.general.audioinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.audioinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7114,14 +7107,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone1.settings.video + denon_read_group_trigger@instance: AVR-X2300W.zone1.settings.video aspectratio: type: str - denon_command: zone1.settings.video.aspectratio - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.aspectratio + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7129,10 +7122,10 @@ item_structs: hdmimonitor: type: num - denon_command: zone1.settings.video.hdmimonitor - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.hdmimonitor + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7140,10 +7133,10 @@ item_structs: hdmiresolution: type: str - denon_command: zone1.settings.video.hdmiresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.hdmiresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7151,10 +7144,10 @@ item_structs: videoprocessingmode: type: str - denon_command: zone1.settings.video.videoprocessingmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoprocessingmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7162,10 +7155,10 @@ item_structs: videoresolution: type: str - denon_command: zone1.settings.video.videoresolution - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoresolution + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7173,10 +7166,10 @@ item_structs: pictureenhancer: type: num - denon_command: zone1.settings.video.pictureenhancer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.pictureenhancer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7184,10 +7177,10 @@ item_structs: videoinput: type: str - denon_command: zone1.settings.video.videoinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.video.videoinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone1 - AVR-X2300W.zone1.settings @@ -7198,63 +7191,63 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone2 + denon_read_group_trigger@instance: AVR-X2300W.zone2 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone2.control + denon_read_group_trigger@instance: AVR-X2300W.zone2.control power: type: bool - denon_command: zone2.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone2 - AVR-X2300W.zone2.control mute: type: bool - denon_command: zone2.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone2 - AVR-X2300W.zone2.control volume: type: num - denon_command: zone2.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone2 - AVR-X2300W.zone2.control volumeup: type: bool - denon_command: zone2.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone2.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumedown + denon_read@instance: false + denon_write@instance: true input: type: str - denon_command: zone2.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone2 - AVR-X2300W.zone2.control @@ -7263,24 +7256,24 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None sleep: type: num - denon_command: zone2.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone2 - AVR-X2300W.zone2.control standby: type: num - denon_command: zone2.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone2 - AVR-X2300W.zone2.control @@ -7290,28 +7283,28 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone2.settings + denon_read_group_trigger@instance: AVR-X2300W.zone2.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone2.settings.sound + denon_read_group_trigger@instance: AVR-X2300W.zone2.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone2.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X2300W.zone2.settings.sound.channel_level front_left: type: num - denon_command: zone2.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone2 - AVR-X2300W.zone2.settings @@ -7320,10 +7313,10 @@ item_structs: front_right: type: num - denon_command: zone2.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone2 - AVR-X2300W.zone2.settings @@ -7335,14 +7328,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X2300W.zone2.settings.sound.general + denon_read_group_trigger@instance: AVR-X2300W.zone2.settings.sound.general hdmiout: type: str - denon_command: zone2.settings.sound.general.hdmiout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.hdmiout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X2300W - AVR-X2300W.zone2 - AVR-X2300W.zone2.settings @@ -7354,21 +7347,21 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W + denon_read_group_trigger@instance: AVR-X1300W general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.general + denon_read_group_trigger@instance: AVR-X1300W.general custom_inputnames: type: dict - denon_command: general.custom_inputnames - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.custom_inputnames + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general cache: true @@ -7384,93 +7377,93 @@ item_structs: power: type: bool - denon_command: general.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general setupmenu: type: bool - denon_command: general.setupmenu - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.setupmenu + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general display: type: str - denon_command: general.display - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.display + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general soundmode: type: str - denon_command: general.soundmode - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.soundmode + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general - denon_read_initial: true + denon_read_initial@instance: true inputsignal: type: str - denon_command: general.inputsignal - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputsignal + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general - denon_read_initial: true + denon_read_initial@instance: true inputrate: type: num - denon_command: general.inputrate - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputrate + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general - denon_read_initial: true + denon_read_initial@instance: true inputformat: type: str - denon_command: general.inputformat - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputformat + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general - denon_read_initial: true + denon_read_initial@instance: true inputresolution: type: str - denon_command: general.inputresolution - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: general.inputresolution + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general - denon_read_initial: true + denon_read_initial@instance: true outputresolution: type: str - denon_command: general.outputresolution - denon_read: true - denon_write: false + denon_command@instance: general.outputresolution + denon_read@instance: true + denon_write@instance: false ecomode: type: str - denon_command: general.ecomode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: general.ecomode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.general @@ -7479,90 +7472,90 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.tuner + denon_read_group_trigger@instance: AVR-X1300W.tuner title: type: str - denon_command: tuner.title - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: tuner.title + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.tuner - denon_read_initial: true + denon_read_initial@instance: true album: type: str - denon_command: tuner.album - denon_read: true - denon_write: false + denon_command@instance: tuner.album + denon_read@instance: true + denon_write@instance: false artist: type: str - denon_command: tuner.artist - denon_read: true - denon_write: false + denon_command@instance: tuner.artist + denon_read@instance: true + denon_write@instance: false preset: type: num - denon_command: tuner.preset - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.preset + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.tuner - denon_read_initial: true + denon_read_initial@instance: true presetup: type: bool - denon_command: tuner.presetup - denon_read: false - denon_write: true + denon_command@instance: tuner.presetup + denon_read@instance: false + denon_write@instance: true presetdown: type: bool - denon_command: tuner.presetdown - denon_read: false - denon_write: true + denon_command@instance: tuner.presetdown + denon_read@instance: false + denon_write@instance: true frequency: type: num - denon_command: tuner.frequency - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.frequency + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.tuner - denon_read_initial: true + denon_read_initial@instance: true frequencyup: type: bool - denon_command: tuner.frequencyup - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencyup + denon_read@instance: false + denon_write@instance: true frequencydown: type: bool - denon_command: tuner.frequencydown - denon_read: false - denon_write: true + denon_command@instance: tuner.frequencydown + denon_read@instance: false + denon_write@instance: true band: type: str - denon_command: tuner.band - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.band + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.tuner - denon_read_initial: true + denon_read_initial@instance: true tuningmode: type: str - denon_command: tuner.tuningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: tuner.tuningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.tuner @@ -7571,148 +7564,147 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone1 + denon_read_group_trigger@instance: AVR-X1300W.zone1 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone1.control + denon_read_group_trigger@instance: AVR-X1300W.zone1.control power: type: bool - denon_command: zone1.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true mute: type: bool - denon_command: zone1.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volume: type: num - denon_command: zone1.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true volumeup: type: bool - denon_command: zone1.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone1.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone1.control.volumedown + denon_read@instance: false + denon_write@instance: true volumemax: type: num - denon_command: zone1.control.volumemax - denon_read: true - denon_write: false - denon_read_group: + denon_command@instance: zone1.control.volumemax + denon_read@instance: true + denon_write@instance: false + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.control - denon_read_initial: true input: type: str - denon_command: zone1.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true on_change: - .custom_name = '' if sh.....general.custom_inputnames() == {} else sh.....general.custom_inputnames()[value] custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None listeningmode: type: str - denon_command: zone1.control.listeningmode - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.listeningmode + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true sleep: type: num - denon_command: zone1.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true standby: type: num - denon_command: zone1.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.control - denon_read_initial: true + denon_read_initial@instance: true settings: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone1.settings + denon_read_group_trigger@instance: AVR-X1300W.zone1.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone1.settings.sound + denon_read_group_trigger@instance: AVR-X1300W.zone1.settings.sound channel_level: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone1.settings.sound.channel_level + denon_read_group_trigger@instance: AVR-X1300W.zone1.settings.sound.channel_level front_left: type: num - denon_command: zone1.settings.sound.channel_level.front_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7721,10 +7713,10 @@ item_structs: front_right: type: num - denon_command: zone1.settings.sound.channel_level.front_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7733,10 +7725,10 @@ item_structs: front_height_left: type: num - denon_command: zone1.settings.sound.channel_level.front_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7745,10 +7737,10 @@ item_structs: front_height_right: type: num - denon_command: zone1.settings.sound.channel_level.front_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7757,10 +7749,10 @@ item_structs: front_center: type: num - denon_command: zone1.settings.sound.channel_level.front_center - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.front_center + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7769,10 +7761,10 @@ item_structs: surround_left: type: num - denon_command: zone1.settings.sound.channel_level.surround_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7781,10 +7773,10 @@ item_structs: surround_right: type: num - denon_command: zone1.settings.sound.channel_level.surround_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surround_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7793,10 +7785,10 @@ item_structs: surroundback_left: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7805,10 +7797,10 @@ item_structs: surroundback_right: type: num - denon_command: zone1.settings.sound.channel_level.surroundback_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.surroundback_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7817,10 +7809,10 @@ item_structs: rear_height_left: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_left - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_left + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7829,10 +7821,10 @@ item_structs: rear_height_right: type: num - denon_command: zone1.settings.sound.channel_level.rear_height_right - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.rear_height_right + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7841,10 +7833,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.channel_level.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.channel_level.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7856,14 +7848,14 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone1.settings.sound.tone_control + denon_read_group_trigger@instance: AVR-X1300W.zone1.settings.sound.tone_control tone: type: bool - denon_command: zone1.settings.sound.tone_control.tone - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.tone + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7872,10 +7864,10 @@ item_structs: treble: type: num - denon_command: zone1.settings.sound.tone_control.treble - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.treble + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7884,22 +7876,22 @@ item_structs: trebleup: type: bool - denon_command: zone1.settings.sound.tone_control.trebleup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebleup + denon_read@instance: false + denon_write@instance: true trebledown: type: bool - denon_command: zone1.settings.sound.tone_control.trebledown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.trebledown + denon_read@instance: false + denon_write@instance: true bass: type: num - denon_command: zone1.settings.sound.tone_control.bass - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.tone_control.bass + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7908,29 +7900,29 @@ item_structs: bassup: type: bool - denon_command: zone1.settings.sound.tone_control.bassup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassup + denon_read@instance: false + denon_write@instance: true bassdown: type: bool - denon_command: zone1.settings.sound.tone_control.bassdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.tone_control.bassdown + denon_read@instance: false + denon_write@instance: true general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone1.settings.sound.general + denon_read_group_trigger@instance: AVR-X1300W.zone1.settings.sound.general cinema_eq: type: bool - denon_command: zone1.settings.sound.general.cinema_eq - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.cinema_eq + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7939,10 +7931,10 @@ item_structs: hdmiaudioout: type: str - denon_command: zone1.settings.sound.general.hdmiaudioout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.hdmiaudioout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7951,10 +7943,10 @@ item_structs: dynamicrange: type: num - denon_command: zone1.settings.sound.general.dynamicrange - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dynamicrange + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7963,10 +7955,10 @@ item_structs: dialogtoggle: type: bool - denon_command: zone1.settings.sound.general.dialogtoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialogtoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7975,10 +7967,10 @@ item_structs: dialog: type: num - denon_command: zone1.settings.sound.general.dialog - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.dialog + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -7987,22 +7979,22 @@ item_structs: dialogup: type: bool - denon_command: zone1.settings.sound.general.dialogup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogup + denon_read@instance: false + denon_write@instance: true dialogdown: type: bool - denon_command: zone1.settings.sound.general.dialogdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.dialogdown + denon_read@instance: false + denon_write@instance: true subwoofertoggle: type: bool - denon_command: zone1.settings.sound.general.subwoofertoggle - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofertoggle + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -8011,10 +8003,10 @@ item_structs: subwoofer: type: num - denon_command: zone1.settings.sound.general.subwoofer - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.subwoofer + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -8023,22 +8015,22 @@ item_structs: subwooferup: type: bool - denon_command: zone1.settings.sound.general.subwooferup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferup + denon_read@instance: false + denon_write@instance: true subwooferdown: type: bool - denon_command: zone1.settings.sound.general.subwooferdown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.subwooferdown + denon_read@instance: false + denon_write@instance: true lfe: type: num - denon_command: zone1.settings.sound.general.lfe - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.lfe + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -8047,22 +8039,22 @@ item_structs: lfeup: type: bool - denon_command: zone1.settings.sound.general.lfeup - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfeup + denon_read@instance: false + denon_write@instance: true lfedown: type: bool - denon_command: zone1.settings.sound.general.lfedown - denon_read: false - denon_write: true + denon_command@instance: zone1.settings.sound.general.lfedown + denon_read@instance: false + denon_write@instance: true audioinput: type: str - denon_command: zone1.settings.sound.general.audioinput - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone1.settings.sound.general.audioinput + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone1 - AVR-X1300W.zone1.settings @@ -8074,63 +8066,63 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone2 + denon_read_group_trigger@instance: AVR-X1300W.zone2 control: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone2.control + denon_read_group_trigger@instance: AVR-X1300W.zone2.control power: type: bool - denon_command: zone2.control.power - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.power + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone2 - AVR-X1300W.zone2.control mute: type: bool - denon_command: zone2.control.mute - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.mute + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone2 - AVR-X1300W.zone2.control volume: type: num - denon_command: zone2.control.volume - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.volume + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone2 - AVR-X1300W.zone2.control volumeup: type: bool - denon_command: zone2.control.volumeup - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumeup + denon_read@instance: false + denon_write@instance: true volumedown: type: bool - denon_command: zone2.control.volumedown - denon_read: false - denon_write: true + denon_command@instance: zone2.control.volumedown + denon_read@instance: false + denon_write@instance: true input: type: str - denon_command: zone2.control.input - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.input + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone2 - AVR-X1300W.zone2.control @@ -8139,24 +8131,24 @@ item_structs: custom_name: type: str - on_change: .. = '' if sh......general.custom_inputnames.reverse() == {} else sh......general.custom_inputnames.reverse()[value] + on_change: sh...(sh......general.custom_inputnames.reverse()[value]) if sh......general.custom_inputnames.reverse() != {} else None sleep: type: num - denon_command: zone2.control.sleep - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.sleep + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone2 - AVR-X1300W.zone2.control standby: type: num - denon_command: zone2.control.standby - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.control.standby + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone2 - AVR-X1300W.zone2.control @@ -8166,28 +8158,28 @@ item_structs: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone2.settings + denon_read_group_trigger@instance: AVR-X1300W.zone2.settings sound: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone2.settings.sound + denon_read_group_trigger@instance: AVR-X1300W.zone2.settings.sound general: read: type: bool enforce_updates: true - denon_read_group_trigger: AVR-X1300W.zone2.settings.sound.general + denon_read_group_trigger@instance: AVR-X1300W.zone2.settings.sound.general hdmiout: type: str - denon_command: zone2.settings.sound.general.hdmiout - denon_read: true - denon_write: true - denon_read_group: + denon_command@instance: zone2.settings.sound.general.hdmiout + denon_read@instance: true + denon_write@instance: true + denon_read_group@instance: - AVR-X1300W - AVR-X1300W.zone2 - AVR-X1300W.zone2.settings From fdc0d48a8290f23b898518204bde12c9120c91b7 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sat, 1 Jun 2024 21:23:15 +0200 Subject: [PATCH 07/19] denon plugin: add on_suspend/resume functions --- denon/__init__.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/denon/__init__.py b/denon/__init__.py index c722cdc34..8d3fadd58 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -65,6 +65,17 @@ def on_connect(self, by=None): self.send_command('general.custom_inputnames') self._read_initial_values(force=True) + def _on_suspend(self): + for scheduler in self.scheduler_get_all(): + self.scheduler_remove(scheduler) + + def _on_resume(self): + if self.scheduler_get('resend'): + self.scheduler_remove('resend') + self.logger.debug(f"Resuming.. Cycle for retry: {self._sendretry_cycle}") + if self._send_retries >= 1: + self.scheduler_add('resend', self._resend, cycle=self._sendretry_cycle) + def _set_device_defaults(self): self._use_callbacks = True self._custom_inputnames = {} From 58d9567ab60b0dbd4937a519456baab65d1249ae Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sat, 1 Jun 2024 22:28:41 +0200 Subject: [PATCH 08/19] denon plugin: implement delay for initial value read --- denon/__init__.py | 18 +++++++++++++----- denon/plugin.yaml | 8 ++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/denon/__init__.py b/denon/__init__.py index 8d3fadd58..905db1c62 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -26,6 +26,8 @@ import sys import threading import time +import datetime +from lib.shtime import Shtime if __name__ == '__main__': builtins.SDP_standalone = True @@ -63,7 +65,13 @@ def on_connect(self, by=None): self.scheduler_add('resend', self._resend, cycle=self._sendretry_cycle) self.logger.debug("Checking for custom input names.") self.send_command('general.custom_inputnames') - self._read_initial_values(force=True) + if self.scheduler_get('read_initial_values'): + return + elif self._initial_value_read_delay > 0: + self.logger.dbghigh(f"On connect reading initial values after {self._initial_value_read_delay} seconds.") + self.scheduler_add('read_initial_values', self._read_initial_values, value={'force': True}, next=self.shtime.now() + datetime.timedelta(seconds=self._initial_value_read_delay)) + else: + self._read_initial_values(True) def _on_suspend(self): for scheduler in self.scheduler_get_all(): @@ -101,10 +109,10 @@ def _set_device_defaults(self): # the sent command. Getting it as return value would assign it to the wrong # command and discard it... so break the "return result"-chain and don't # return anything - def _send(self, data_dict): - if data_dict.get('returnvalue') is not None: - self._sending.update({data_dict['command']: data_dict}) - self._connection.send(data_dict) + def _send(self, data_dict, resend_info=None): + if resend_info.get('returnvalue') is not None: + self._sending.update({resend_info.get('command'): resend_info}) + return self._connection.send(data_dict) def _resend(self): if not self.alive or self.suspended: diff --git a/denon/plugin.yaml b/denon/plugin.yaml index 1eabf58fe..dd8670950 100755 --- a/denon/plugin.yaml +++ b/denon/plugin.yaml @@ -202,6 +202,14 @@ parameters: where no (suiting) answer got received. ' + delay_initial_read: + type: num + default: 0 + + description: + de: Warte nach Verbindungsaufbau mit dem Abfragen von Werten + en: Wait after connection with querying values + connect_cycle: type: num default: 3 From fabe5fd43a45516c54835337c8beac0f1d021d0c Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Wed, 3 Jul 2024 10:20:57 +0200 Subject: [PATCH 09/19] denon plugin: fix resend_info --- denon/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/denon/__init__.py b/denon/__init__.py index 905db1c62..6ace0cb1c 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -109,7 +109,7 @@ def _set_device_defaults(self): # the sent command. Getting it as return value would assign it to the wrong # command and discard it... so break the "return result"-chain and don't # return anything - def _send(self, data_dict, resend_info=None): + def _send(self, data_dict, resend_info={}): if resend_info.get('returnvalue') is not None: self._sending.update({resend_info.get('command'): resend_info}) return self._connection.send(data_dict) From 8b847c3803e4121a7b44efe14867263a01e59773 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sun, 7 Jul 2024 12:33:06 +0200 Subject: [PATCH 10/19] denon plugin: code fix --- denon/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/denon/__init__.py b/denon/__init__.py index 6ace0cb1c..633c4c258 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -109,7 +109,9 @@ def _set_device_defaults(self): # the sent command. Getting it as return value would assign it to the wrong # command and discard it... so break the "return result"-chain and don't # return anything - def _send(self, data_dict, resend_info={}): + def _send(self, data_dict, resend_info=None): + if resend_info is None: + resend_info = {} if resend_info.get('returnvalue') is not None: self._sending.update({resend_info.get('command'): resend_info}) return self._connection.send(data_dict) From 45c1352fd54026b566f22365dd65ef183c0d2ad9 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sun, 11 Aug 2024 21:49:16 +0200 Subject: [PATCH 11/19] denon plugin: add resume_initial_read and protocol (for resend) --- denon/plugin.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/denon/plugin.yaml b/denon/plugin.yaml index dd8670950..513e1eeaa 100755 --- a/denon/plugin.yaml +++ b/denon/plugin.yaml @@ -139,6 +139,16 @@ parameters: de: Klasse für Verarbeitung von Kommandos en: class for command processing + protocol: + type: str + default: '' + valid list: + - '' + - 'resend' + description: + de: 'Protokoll' + en: 'Protocol' + autoreconnect: type: bool default: true @@ -210,6 +220,13 @@ parameters: de: Warte nach Verbindungsaufbau mit dem Abfragen von Werten en: Wait after connection with querying values + resume_initial_read: + type: bool + defaul: false + description: + de: 'Bei resume vom Plugin erstmaliges Lesen erneut durchführen' + en: 'Repeat initial read on resume' + connect_cycle: type: num default: 3 From 83dd11fa624714c9c07476d8f9a54422e8bcd76e Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sun, 11 Aug 2024 22:15:26 +0200 Subject: [PATCH 12/19] denon plugin: revert resend changes as it is now included as a protocol on a global level --- denon/__init__.py | 70 ----------------------------------------------- 1 file changed, 70 deletions(-) diff --git a/denon/__init__.py b/denon/__init__.py index 633c4c258..414052ef9 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -26,8 +26,6 @@ import sys import threading import time -import datetime -from lib.shtime import Shtime if __name__ == '__main__': builtins.SDP_standalone = True @@ -60,37 +58,12 @@ class denon(SmartDevicePlugin): PLUGIN_VERSION = '1.0.1' def on_connect(self, by=None): - self.logger.debug(f"Connected.. Cycle for retry: {self._sendretry_cycle}") - if self._send_retries >= 1: - self.scheduler_add('resend', self._resend, cycle=self._sendretry_cycle) self.logger.debug("Checking for custom input names.") self.send_command('general.custom_inputnames') - if self.scheduler_get('read_initial_values'): - return - elif self._initial_value_read_delay > 0: - self.logger.dbghigh(f"On connect reading initial values after {self._initial_value_read_delay} seconds.") - self.scheduler_add('read_initial_values', self._read_initial_values, value={'force': True}, next=self.shtime.now() + datetime.timedelta(seconds=self._initial_value_read_delay)) - else: - self._read_initial_values(True) - - def _on_suspend(self): - for scheduler in self.scheduler_get_all(): - self.scheduler_remove(scheduler) - - def _on_resume(self): - if self.scheduler_get('resend'): - self.scheduler_remove('resend') - self.logger.debug(f"Resuming.. Cycle for retry: {self._sendretry_cycle}") - if self._send_retries >= 1: - self.scheduler_add('resend', self._resend, cycle=self._sendretry_cycle) def _set_device_defaults(self): self._use_callbacks = True self._custom_inputnames = {} - self._sending = {} - self._sending_lock = threading.Lock() - self._send_retries = self.get_parameter_value('send_retries') - self._sendretry_cycle = int(self.get_parameter_value('sendretry_cycle')) # set our own preferences concerning connections if PLUGIN_ATTR_NET_HOST in self._parameters and self._parameters[PLUGIN_ATTR_NET_HOST]: @@ -105,38 +78,6 @@ def _set_device_defaults(self): b = b.decode('unicode-escape').encode() self._parameters[PLUGIN_ATTR_CONN_TERMINATOR] = b - # we need to receive data via callback, as the "reply" can be unrelated to - # the sent command. Getting it as return value would assign it to the wrong - # command and discard it... so break the "return result"-chain and don't - # return anything - def _send(self, data_dict, resend_info=None): - if resend_info is None: - resend_info = {} - if resend_info.get('returnvalue') is not None: - self._sending.update({resend_info.get('command'): resend_info}) - return self._connection.send(data_dict) - - def _resend(self): - if not self.alive or self.suspended: - return - self._sending_lock.acquire(True, 2) - _remove_commands = [] - for command in list(self._sending.keys()): - _retry = self._sending[command].get("retry") or 0 - _sent = True - if _retry is not None and _retry < self._send_retries: - self.logger.debug(f'Re-sending {command}, retry {_retry}.') - _sent = self.send_command(command, self._sending[command].get("returnvalue"), return_result=True, retry=_retry + 1) - elif _retry is not None and _retry >= self._send_retries: - _sent = False - if _sent is False: - _remove_commands.append(command) - self.logger.info(f"Giving up re-sending {command} after {_retry} retries.") - for command in _remove_commands: - self._sending.pop(command) - if self._sending_lock.locked(): - self._sending_lock.release() - def _transform_send_data(self, data=None, **kwargs): if isinstance(data, dict): data['limit_response'] = self._parameters[PLUGIN_ATTR_CONN_TERMINATOR] @@ -206,17 +147,6 @@ def on_data_received(self, by, data, command=None): self.logger.warning(f'received data "{data}" for command {command}, error {e} occurred while converting. Discarding data.') else: self.logger.debug(f'received data "{data}" for command {command} converted to value {value}.') - if command in self._sending: - self._sending_lock.acquire(True, 2) - _retry = self._sending[command].get("retry") or 0 - _compare = self._sending[command].get('returnvalue') - if self._sending[command].get('returntype')(value) == _compare: - self._sending.pop(command) - self.logger.debug(f'Correct answer for {command}, removing from send. Sending {self._sending}') - elif _retry is not None and _retry <= self._send_retries: - self.logger.debug(f'Should send again {self._sending}...') - if self._sending_lock.locked(): - self._sending_lock.release() self._dispatch_callback(command, value, by) self._process_additional_data(base_command, data, value, custom, by) From d3afef8dc41b1454e6beec522eae4d461522f681 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sun, 11 Aug 2024 22:15:58 +0200 Subject: [PATCH 13/19] denon plugin: remove reading of volumemax from structs (it is not available) --- denon/plugin.yaml | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/denon/plugin.yaml b/denon/plugin.yaml index 513e1eeaa..f817fd492 100755 --- a/denon/plugin.yaml +++ b/denon/plugin.yaml @@ -226,7 +226,7 @@ parameters: description: de: 'Bei resume vom Plugin erstmaliges Lesen erneut durchführen' en: 'Repeat initial read on resume' - + connect_cycle: type: num default: 3 @@ -880,9 +880,6 @@ item_structs: denon_command@instance: zone1.control.volumemax denon_read@instance: true denon_write@instance: false - denon_read_group@instance: - - zone1 - - zone1.control input: type: str @@ -2104,10 +2101,6 @@ item_structs: denon_command@instance: zone1.control.volumemax denon_read@instance: true denon_write@instance: false - denon_read_group@instance: - - ALL - - ALL.zone1 - - ALL.zone1.control input: type: str @@ -3195,10 +3188,6 @@ item_structs: denon_command@instance: zone1.control.volumemax denon_read@instance: true denon_write@instance: false - denon_read_group@instance: - - AVR-X6300H - - AVR-X6300H.zone1 - - AVR-X6300H.zone1.control input: type: str @@ -4401,10 +4390,6 @@ item_structs: denon_command@instance: zone1.control.volumemax denon_read@instance: true denon_write@instance: false - denon_read_group@instance: - - AVR-X4300H - - AVR-X4300H.zone1 - - AVR-X4300H.zone1.control input: type: str @@ -5662,10 +5647,6 @@ item_structs: denon_command@instance: zone1.control.volumemax denon_read@instance: true denon_write@instance: false - denon_read_group@instance: - - AVR-X3300W - - AVR-X3300W.zone1 - - AVR-X3300W.zone1.control input: type: str @@ -6689,10 +6670,6 @@ item_structs: denon_command@instance: zone1.control.volumemax denon_read@instance: true denon_write@instance: false - denon_read_group@instance: - - AVR-X2300W - - AVR-X2300W.zone1 - - AVR-X2300W.zone1.control input: type: str @@ -7648,10 +7625,6 @@ item_structs: denon_command@instance: zone1.control.volumemax denon_read@instance: true denon_write@instance: false - denon_read_group@instance: - - AVR-X1300W - - AVR-X1300W.zone1 - - AVR-X1300W.zone1.control input: type: str From bc0633e0583072235cb5b398b4f1f3881cfc40aa Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sun, 11 Aug 2024 22:20:15 +0200 Subject: [PATCH 14/19] denon plugin: remove threading import --- denon/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/denon/__init__.py b/denon/__init__.py index 414052ef9..86ebafaa0 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -24,7 +24,6 @@ import builtins import os import sys -import threading import time if __name__ == '__main__': From 9befb9ff79e71df29844e502de203895d9b2d5c1 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sat, 17 Aug 2024 10:40:23 +0200 Subject: [PATCH 15/19] denon plugin: remove protocol and command_class from plugin.yaml --- denon/plugin.yaml | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/denon/plugin.yaml b/denon/plugin.yaml index f817fd492..4807df68d 100755 --- a/denon/plugin.yaml +++ b/denon/plugin.yaml @@ -128,27 +128,6 @@ parameters: de: Verbindungstyp en: connection type - command_class: - type: str - default: SDPCommandParseStr - valid_list: - - SDPCommand - - SDPCommandParseStr - - description: - de: Klasse für Verarbeitung von Kommandos - en: class for command processing - - protocol: - type: str - default: '' - valid list: - - '' - - 'resend' - description: - de: 'Protokoll' - en: 'Protocol' - autoreconnect: type: bool default: true From 626deafe506bbd46578c1df4e1b78abc0f03dee6 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sat, 17 Aug 2024 10:50:14 +0200 Subject: [PATCH 16/19] denon plugin: auto set command class --- denon/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/denon/__init__.py b/denon/__init__.py index 86ebafaa0..ae1cfe675 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -41,8 +41,9 @@ class SmartPluginWebIf(): else: builtins.SDP_standalone = False -from lib.model.sdp.globals import (PLUGIN_ATTR_NET_HOST, PLUGIN_ATTR_CONNECTION, PLUGIN_ATTR_SERIAL_PORT, PLUGIN_ATTR_CONN_TERMINATOR, CONN_NULL, CONN_NET_TCP_CLI, CONN_SER_ASYNC) +from lib.model.sdp.globals import (PLUGIN_ATTR_NET_HOST, PLUGIN_ATTR_CONNECTION, PLUGIN_ATTR_SERIAL_PORT, PLUGIN_ATTR_CONN_TERMINATOR, PLUGIN_ATTR_CMD_CLASS, CONN_NULL, CONN_NET_TCP_CLI, CONN_SER_ASYNC) from lib.model.smartdeviceplugin import SmartDevicePlugin, Standalone +from lib.model.sdp.command import SDPCommandParseStr # from .webif import WebInterface @@ -73,6 +74,8 @@ def _set_device_defaults(self): self.logger.error('Neither host nor serialport set, connection not possible. Using dummy connection, plugin will not work') self._parameters[PLUGIN_ATTR_CONNECTION] = CONN_NULL + self._parameters[PLUGIN_ATTR_CMD_CLASS] = SDPCommandParseStr + b = self._parameters[PLUGIN_ATTR_CONN_TERMINATOR].encode() b = b.decode('unicode-escape').encode() self._parameters[PLUGIN_ATTR_CONN_TERMINATOR] = b From d52df4cdf71f7162b588996961477d3a67914cdd Mon Sep 17 00:00:00 2001 From: Morg42 <43153739+Morg42@users.noreply.github.com> Date: Sat, 17 Aug 2024 12:25:59 +0200 Subject: [PATCH 17/19] add sdp metadata --- denon/plugin.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/denon/plugin.yaml b/denon/plugin.yaml index 4807df68d..8ec1c8bbe 100755 --- a/denon/plugin.yaml +++ b/denon/plugin.yaml @@ -9,6 +9,7 @@ plugin: version: 1.0.1 sh_minversion: 1.9.5 py_minversion: 3.7 + sdp_minversion: '1.0.3' multi_instance: false restartable: true classname: denon From 4925eda0a13274cfeb599d8da261a639a3f7de6b Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sat, 17 Aug 2024 20:38:21 +0200 Subject: [PATCH 18/19] denon plugin: move custom inputnames to dataype --- denon/__init__.py | 54 ---------------------------------------------- denon/commands.py | 2 +- denon/datatypes.py | 11 ++++++++++ 3 files changed, 12 insertions(+), 55 deletions(-) diff --git a/denon/__init__.py b/denon/__init__.py index ae1cfe675..04f83d4c0 100755 --- a/denon/__init__.py +++ b/denon/__init__.py @@ -105,60 +105,6 @@ def _process_additional_data(self, command, data, value, custom, by): self.send_command(f'zone{zone}.control.volume') self.send_command(f'zone{zone}.control.listeningmode') - def on_data_received(self, by, data, command=None): - - commands = None - if command is not None: - self.logger.debug(f'received data "{data}" from {by} for command {command}') - commands = [command] - else: - # command == None means that we got raw data from a callback and - # don't know yet to which command this belongs to. So find out... - self.logger.debug(f'received data "{data}" from {by} without command specification') - - # command can be a string (classic single command) or - # - new - a list of strings if multiple commands are identified - # in that case, work on all strings - commands = self._commands.get_commands_from_reply(data) - if not commands: - if self._discard_unknown_command: - self.logger.debug(f'data "{data}" did not identify a known command, ignoring it') - return - else: - self.logger.debug(f'data "{data}" did not identify a known command, forwarding it anyway for {self._unknown_command}') - self._dispatch_callback(self._unknown_command, data, by) - - # TODO: remove later? - assert(isinstance(commands, list)) - - # process all commands - for command in commands: - self._check_for_custominputs(command, data) - custom = None - if self.custom_commands: - custom = self._get_custom_value(command, data) - - base_command = command - value = None - try: - if CUSTOM_INPUT_NAME_COMMAND in command: - value = self._custom_inputnames - else: - value = self._commands.get_shng_data(command, data) - except OSError as e: - self.logger.warning(f'received data "{data}" for command {command}, error {e} occurred while converting. Discarding data.') - else: - self.logger.debug(f'received data "{data}" for command {command} converted to value {value}.') - self._dispatch_callback(command, value, by) - - self._process_additional_data(base_command, data, value, custom, by) - - def _check_for_custominputs(self, command, data): - if CUSTOM_INPUT_NAME_COMMAND in command and isinstance(data, str): - tmp = data.split(' ', 1) - src = tmp[0][5:] - name = tmp[1] - self._custom_inputnames[src] = name if __name__ == '__main__': s = Standalone(denon, sys.argv[0]) diff --git a/denon/commands.py b/denon/commands.py index d256af4ac..20900f8c8 100755 --- a/denon/commands.py +++ b/denon/commands.py @@ -61,7 +61,7 @@ 'region': {'read': True, 'write': False, 'read_cmd': 'SYMODTUN ?', 'item_type': 'str', 'dev_datatype': 'str', 'reply_pattern': r'SYMODTUN\s(.*)', 'item_attrs': {'initial': True}}, }, 'general': { - 'custom_inputnames': {'read': True, 'write': False, 'read_cmd': 'SSFUN ?', 'item_type': 'dict', 'dev_datatype': 'str', 'reply_pattern': 'SSFUN(.*)', 'item_attrs': {'item_template': 'custom_inputnames'}}, + 'custom_inputnames': {'read': True, 'write': False, 'read_cmd': 'SSFUN ?', 'item_type': 'dict', 'dev_datatype': 'DenonCustominput', 'reply_pattern': 'SSFUN(.*)', 'item_attrs': {'item_template': 'custom_inputnames'}}, 'power': {'read': True, 'write': True, 'read_cmd': 'PW?', 'write_cmd': 'PW{VALUE}', 'item_type': 'bool', 'dev_datatype': 'str', 'reply_pattern': 'PW{LOOKUP}', 'lookup': 'POWER'}, 'setupmenu': {'read': True, 'write': True, 'read_cmd': 'MNMEN?', 'write_cmd': 'MNMEN {VALUE}', 'item_type': 'bool', 'dev_datatype': 'onoff', 'reply_pattern': 'MNMEN (ON|OFF)'}, 'display': {'read': True, 'write': False, 'read_cmd': 'NSE', 'item_type': 'str', 'dev_datatype': 'DenonDisplay', 'reply_pattern': 'NSE(.*)'}, diff --git a/denon/datatypes.py b/denon/datatypes.py index 11dbe3490..f56d5a228 100755 --- a/denon/datatypes.py +++ b/denon/datatypes.py @@ -20,6 +20,17 @@ def get_shng_data(self, data, type=None, **kwargs): return None +# read only. Creating dict with custom inputnames +class DT_DenonCustominput(DT.Datatype): + def __init__(self, fail_silent=False): + super().__init__(fail_silent) + self._custom_inputnames = {} + + def get_shng_data(self, data, type=None, **kwargs): + tmp = data.split(' ', 1) + self._custom_inputnames[tmp[0]] = tmp[1] + return self._custom_inputnames + # handle pseudo-decimal values without decimal point class DT_DenonVol(DT.Datatype): def get_send_data(self, data, **kwargs): From eeca3490dbc18171017182b6f35ec15595b6b2d8 Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sat, 17 Aug 2024 20:40:45 +0200 Subject: [PATCH 19/19] denon plugin: update plugin.yaml --- denon/plugin.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/denon/plugin.yaml b/denon/plugin.yaml index 8ec1c8bbe..0825eb252 100755 --- a/denon/plugin.yaml +++ b/denon/plugin.yaml @@ -6,9 +6,9 @@ plugin: tester: Morg state: develop keywords: iot device av denon sdp - version: 1.0.1 - sh_minversion: 1.9.5 - py_minversion: 3.7 + version: '1.0.1' + sh_minversion: '1.9.5' + py_minversion: '3.7' sdp_minversion: '1.0.3' multi_instance: false restartable: true