denonavr 1.1.1__py3-none-any.whl → 1.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
denonavr/const.py CHANGED
@@ -90,6 +90,8 @@ ReceiverURLs = namedtuple(
90
90
  "command_hdmi_audio_decode",
91
91
  "command_quick_select_mode",
92
92
  "command_quick_select_memory",
93
+ "command_smart_select_mode", # Marantz
94
+ "command_smart_select_memory", # Marantz
93
95
  "command_auto_standby",
94
96
  "command_sleep",
95
97
  "command_center_spread",
@@ -112,6 +114,14 @@ ReceiverURLs = namedtuple(
112
114
  "command_panel_and_volume_lock",
113
115
  "command_graphic_eq",
114
116
  "command_headphone_eq",
117
+ "command_denon_hdmi_cec_on",
118
+ "command_denon_hdmi_cec_off",
119
+ "command_marantz_hdmi_cec_on",
120
+ "command_marantz_hdmi_cec_off",
121
+ "command_mdax", # Marantz Only
122
+ "command_dac_filter", # Marantz Only
123
+ "command_illumination", # Marantz Only
124
+ "command_auto_lip_sync", # Marantz Only
115
125
  ],
116
126
  )
117
127
  TelnetCommands = namedtuple(
@@ -183,6 +193,8 @@ TelnetCommands = namedtuple(
183
193
  "command_hdmi_audio_decode",
184
194
  "command_quick_select_mode",
185
195
  "command_quick_select_memory",
196
+ "command_smart_select_mode", # Marantz
197
+ "command_smart_select_memory", # Marantz
186
198
  "command_auto_standby",
187
199
  "command_sleep",
188
200
  "command_center_spread",
@@ -205,6 +217,14 @@ TelnetCommands = namedtuple(
205
217
  "command_panel_and_volume_lock",
206
218
  "command_graphic_eq",
207
219
  "command_headphone_eq",
220
+ "command_denon_hdmi_cec_on",
221
+ "command_denon_hdmi_cec_off",
222
+ "command_marantz_hdmi_cec_on",
223
+ "command_marantz_hdmi_cec_off",
224
+ "command_mdax", # Marantz Only
225
+ "command_dac_filter", # Marantz Only
226
+ "command_illumination", # Marantz Only
227
+ "command_auto_lip_sync", # Marantz Only
208
228
  ],
209
229
  )
210
230
 
@@ -364,9 +384,13 @@ SOUND_MODE_MAPPING = {
364
384
  "DOLBY AUDIO - TRUEHD + NEURAL:X",
365
385
  "DOLBY AUDIO-DD",
366
386
  "DOLBY AUDIO-DD+ +DSUR",
387
+ # Added both variants as we don't know if type is intentional
388
+ "DOLBY AUDIO-DD+ +NERUAL:X",
367
389
  "DOLBY AUDIO-DD+ +NEURAL:X",
368
390
  "DOLBY AUDIO-DD+",
391
+ "DOLBY AUDIO-DD+",
369
392
  "DOLBY AUDIO-DD+DSUR",
393
+ "DOLBY AUDIO-DD+NEURAL:X",
370
394
  "DOLBY AUDIO-DSUR",
371
395
  "DOLBY AUDIO-TRUEHD",
372
396
  "DOLBY AUDIO-TRUEHD+DSUR",
@@ -391,16 +415,16 @@ SOUND_MODE_MAPPING = {
391
415
  "MULTI IN + NEURAL:X",
392
416
  "NEURAL",
393
417
  "STANDARD(DOLBY)",
394
- "DOLBY AUDIO-DD+NEURAL:X",
395
- "DOLBY AUDIO-DD+",
396
- # Added both variants as we don't know if type is intentional
397
- "DOLBY AUDIO-DD+ +NERUAL:X",
398
- "DOLBY AUDIO-DD+ +NEURAL:X",
399
418
  ],
400
419
  "DTS SURROUND": [
401
420
  "DTS + DOLBY SURROUND",
402
421
  "DTS + NEURAL:X",
403
422
  "DTS + VIRTUAL:X",
423
+ "DTS HD MSTR",
424
+ "DTS HD",
425
+ "DTS HD+DSUR",
426
+ "DTS HD+NEURAL:X",
427
+ "DTS HD+VIRTUAL:X",
404
428
  "DTS NEURAL:X",
405
429
  "DTS SURROUND",
406
430
  "DTS VIRTUAL:X",
@@ -411,26 +435,22 @@ SOUND_MODE_MAPPING = {
411
435
  "DTS-HD",
412
436
  "DTS:X MSTR",
413
437
  "DTS:X",
414
- "M CH IN+DSUR",
415
- "MULTI CH IN",
416
- "NEURAL:X",
417
- "STANDARD(DTS)",
418
- "VIRTUAL:X",
419
- "IMAX DTS",
420
- "IMAX DTS+NEURAL:X",
421
- "MAX DTS+VIRTUAL:X",
438
+ "DTS:X+VIRTUAL:X",
422
439
  "DTS+DSUR",
423
440
  "DTS+NEURAL:X",
424
441
  "DTS+VIRTUAL:X",
425
- "DTS HD",
426
- "DTS HD+DSUR",
427
- "DTS HD+NEURAL:X",
428
- "DTS HD+VIRTUAL:X",
429
- "DTS:X+VIRTUAL:X",
430
442
  "IMAX DTS:X",
431
443
  "IMAX DTS:X+VIRTUAL:X",
444
+ "IMAX DTS",
445
+ "IMAX DTS+NEURAL:X",
446
+ "M CH IN+DSUR",
432
447
  "M CH IN+NEURAL:X",
433
448
  "M CH IN+VIRTUAL:X",
449
+ "MAX DTS+VIRTUAL:X",
450
+ "MULTI CH IN",
451
+ "NEURAL:X",
452
+ "STANDARD(DTS)",
453
+ "VIRTUAL:X",
434
454
  ],
435
455
  "AURO3D": ["AURO-3D", "AURO3D"],
436
456
  "AURO2DSURR": ["AURO-2D SURROUND", "AURO2DSURR"],
@@ -541,7 +561,11 @@ COMMAND_DIALOG_ENHANCER = "/goform/formiPhoneAppDirect.xml?PSDEH%20{level}"
541
561
  COMMAND_HDMI_OUTPUT = "/goform/formiPhoneAppDirect.xml?VSMONI{output}"
542
562
  COMMAND_HDMI_AUDIO_DECODE = "/goform/formiPhoneAppDirect.xml?VSAUDIO%20{mode}"
543
563
  COMMAND_QUICK_SELECT_MODE = "/goform/formiPhoneAppDirect.xml?MSQUICK{number}"
544
- COMMAND_QUICK_SELECT_MEMORY = "/goform/formiPhoneAppDirect.xml?MSQUICK{number}"
564
+ COMMAND_QUICK_SELECT_MEMORY = "/goform/formiPhoneAppDirect.xml?MSQUICK{number}%20MEMORY"
565
+ COMMAND_SMART_SELECT_MODE = "/goform/formiPhoneAppDirect.xml?MSSMART{number}" # Marantz
566
+ COMMAND_SMART_SELECT_MEMORY = (
567
+ "/goform/formiPhoneAppDirect.xml?MSSMART{number}%20MEMORY" # Marantz
568
+ )
545
569
  COMMAND_AUTO_STANDBY = "/goform/formiPhoneAppDirect.xml?STBY{mode}"
546
570
  COMMAND_SLEEP = "/goform/formiPhoneAppDirect.xml?SLP{value}"
547
571
  COMMAND_CENTER_SPREAD = "/goform/formiPhoneAppDirect.xml?PSCES%20{mode}"
@@ -564,6 +588,16 @@ COMMAND_PANEL_LOCK = "/goform/formiPhoneAppDirect.xml?SYPANEL%20LOCK%20{mode}"
564
588
  COMMAND_PANEL_AND_VOLUME_LOCK = "/goform/formiPhoneAppDirect.xml?SYPANEL+V%20LOCK%20ON"
565
589
  COMMAND_GRAPHIC_EQ = "/goform/formiPhoneAppDirect.xml?PSGEQ%20{mode}"
566
590
  COMMAND_HEADPHONE_EQ = "/goform/formiPhoneAppDirect.xml?PSHEQ%20{mode}"
591
+ COMMAND_DENON_HDMI_CEC_ON = "/goform/formiPhoneAppDirect.xml?RCKSK0410826"
592
+ COMMAND_DENON_HDMI_CEC_OFF = "/goform/formiPhoneAppDirect.xml?RCKSK0410827"
593
+ COMMAND_MARANTZ_HDMI_CEC_ON = "/goform/formiPhoneAppDirect.xml?RCRC51608408"
594
+ COMMAND_MARANTZ_HDMI_CEC_OFF = "/goform/formiPhoneAppDirect.xml?RCRC51608409"
595
+ COMMAND_MDAX = "/goform/formiPhoneAppDirect.xml?PSMDAX%20{mode}" # Marantz Only
596
+ COMMAND_DAC_FILTER = "/goform/formiPhoneAppDirect.xml?PSDACFIL%20{mode}" # Marantz Only
597
+ COMMAND_ILLUMINATION = "/goform/formiPhoneAppDirect.xml?ILB%20{mode}" # Marantz Only
598
+ COMMAND_AUTO_LIP_SYNC = (
599
+ "/goform/formiPhoneAppDirect.xml?SSHOSALS%20{mode}" # Marantz Only
600
+ )
567
601
 
568
602
  # Zone 2 URLs
569
603
  STATUS_Z2_URL = "/goform/formZone2_Zone2XmlStatus.xml"
@@ -658,6 +692,8 @@ DENONAVR_URLS = ReceiverURLs(
658
692
  command_hdmi_audio_decode=COMMAND_HDMI_AUDIO_DECODE,
659
693
  command_quick_select_mode=COMMAND_QUICK_SELECT_MODE,
660
694
  command_quick_select_memory=COMMAND_QUICK_SELECT_MODE,
695
+ command_smart_select_mode=COMMAND_SMART_SELECT_MODE, # Marantz
696
+ command_smart_select_memory=COMMAND_SMART_SELECT_MEMORY, # Marantz
661
697
  command_auto_standby=COMMAND_AUTO_STANDBY,
662
698
  command_sleep=COMMAND_SLEEP,
663
699
  command_center_spread=COMMAND_CENTER_SPREAD,
@@ -680,6 +716,14 @@ DENONAVR_URLS = ReceiverURLs(
680
716
  command_panel_and_volume_lock=COMMAND_PANEL_AND_VOLUME_LOCK,
681
717
  command_graphic_eq=COMMAND_GRAPHIC_EQ,
682
718
  command_headphone_eq=COMMAND_HEADPHONE_EQ,
719
+ command_denon_hdmi_cec_on=COMMAND_DENON_HDMI_CEC_ON,
720
+ command_denon_hdmi_cec_off=COMMAND_DENON_HDMI_CEC_OFF,
721
+ command_marantz_hdmi_cec_on=COMMAND_MARANTZ_HDMI_CEC_ON,
722
+ command_marantz_hdmi_cec_off=COMMAND_MARANTZ_HDMI_CEC_OFF,
723
+ command_mdax=COMMAND_MDAX, # Marantz Only
724
+ command_dac_filter=COMMAND_DAC_FILTER, # Marantz Only
725
+ command_illumination=COMMAND_ILLUMINATION, # Marantz Only
726
+ command_auto_lip_sync=COMMAND_AUTO_LIP_SYNC, # Marantz Only
683
727
  )
684
728
 
685
729
  ZONE2_URLS = ReceiverURLs(
@@ -751,6 +795,8 @@ ZONE2_URLS = ReceiverURLs(
751
795
  command_hdmi_audio_decode=COMMAND_HDMI_AUDIO_DECODE,
752
796
  command_quick_select_mode=COMMAND_QUICK_SELECT_MODE,
753
797
  command_quick_select_memory=COMMAND_QUICK_SELECT_MEMORY,
798
+ command_smart_select_mode=COMMAND_SMART_SELECT_MODE, # Marantz
799
+ command_smart_select_memory=COMMAND_SMART_SELECT_MEMORY, # Marantz
754
800
  command_auto_standby=COMMAND_AUTO_STANDBY,
755
801
  command_sleep=COMMAND_SLEEP,
756
802
  command_center_spread=COMMAND_CENTER_SPREAD,
@@ -773,6 +819,14 @@ ZONE2_URLS = ReceiverURLs(
773
819
  command_panel_and_volume_lock=COMMAND_PANEL_AND_VOLUME_LOCK,
774
820
  command_graphic_eq=COMMAND_GRAPHIC_EQ,
775
821
  command_headphone_eq=COMMAND_HEADPHONE_EQ,
822
+ command_denon_hdmi_cec_on=COMMAND_DENON_HDMI_CEC_ON,
823
+ command_denon_hdmi_cec_off=COMMAND_DENON_HDMI_CEC_OFF,
824
+ command_marantz_hdmi_cec_on=COMMAND_MARANTZ_HDMI_CEC_ON,
825
+ command_marantz_hdmi_cec_off=COMMAND_MARANTZ_HDMI_CEC_OFF,
826
+ command_mdax=COMMAND_MDAX, # Marantz Only
827
+ command_dac_filter=COMMAND_DAC_FILTER, # Marantz Only
828
+ command_illumination=COMMAND_ILLUMINATION, # Marantz Only
829
+ command_auto_lip_sync=COMMAND_AUTO_LIP_SYNC, # Marantz Only
776
830
  )
777
831
 
778
832
  ZONE3_URLS = ReceiverURLs(
@@ -844,6 +898,8 @@ ZONE3_URLS = ReceiverURLs(
844
898
  command_hdmi_audio_decode=COMMAND_HDMI_AUDIO_DECODE,
845
899
  command_quick_select_mode=COMMAND_QUICK_SELECT_MODE,
846
900
  command_quick_select_memory=COMMAND_QUICK_SELECT_MEMORY,
901
+ command_smart_select_mode=COMMAND_SMART_SELECT_MODE, # Marantz
902
+ command_smart_select_memory=COMMAND_SMART_SELECT_MEMORY, # Marantz
847
903
  command_auto_standby=COMMAND_AUTO_STANDBY,
848
904
  command_sleep=COMMAND_SLEEP,
849
905
  command_center_spread=COMMAND_CENTER_SPREAD,
@@ -866,6 +922,14 @@ ZONE3_URLS = ReceiverURLs(
866
922
  command_panel_and_volume_lock=COMMAND_PANEL_AND_VOLUME_LOCK,
867
923
  command_graphic_eq=COMMAND_GRAPHIC_EQ,
868
924
  command_headphone_eq=COMMAND_HEADPHONE_EQ,
925
+ command_denon_hdmi_cec_on=COMMAND_DENON_HDMI_CEC_ON,
926
+ command_denon_hdmi_cec_off=COMMAND_DENON_HDMI_CEC_OFF,
927
+ command_marantz_hdmi_cec_on=COMMAND_MARANTZ_HDMI_CEC_ON,
928
+ command_marantz_hdmi_cec_off=COMMAND_MARANTZ_HDMI_CEC_OFF,
929
+ command_mdax=COMMAND_MDAX, # Marantz Only
930
+ command_dac_filter=COMMAND_DAC_FILTER, # Marantz Only
931
+ command_illumination=COMMAND_ILLUMINATION, # Marantz Only
932
+ command_auto_lip_sync=COMMAND_AUTO_LIP_SYNC, # Marantz Only
869
933
  )
870
934
 
871
935
  # Telnet Events
@@ -877,6 +941,7 @@ TELNET_EVENTS = {
877
941
  "DIM",
878
942
  "ECO",
879
943
  "HD",
944
+ "ILB", # Marantz Only
880
945
  "MN",
881
946
  "MS",
882
947
  "MU",
@@ -992,6 +1057,8 @@ DENONAVR_TELNET_COMMANDS = TelnetCommands(
992
1057
  command_hdmi_audio_decode="VSAUDIO {mode}",
993
1058
  command_quick_select_mode="MSQUICK{number}",
994
1059
  command_quick_select_memory="MSQUICK{number} MEMORY",
1060
+ command_smart_select_mode="MSSMART{number}", # Marantz
1061
+ command_smart_select_memory="MSSMART{number} MEMORY", # Marantz
995
1062
  command_auto_standby="STBY{mode}",
996
1063
  command_sleep="SLP{value}",
997
1064
  command_center_spread="PSCES {mode}",
@@ -1014,6 +1081,14 @@ DENONAVR_TELNET_COMMANDS = TelnetCommands(
1014
1081
  command_panel_and_volume_lock="SYPANEL+V LOCK ON",
1015
1082
  command_graphic_eq="PSGEQ {mode}",
1016
1083
  command_headphone_eq="PSHEQ {mode}",
1084
+ command_denon_hdmi_cec_on="RCKSK0410826",
1085
+ command_denon_hdmi_cec_off="RCKSK0410827",
1086
+ command_marantz_hdmi_cec_on="RCRC51608408",
1087
+ command_marantz_hdmi_cec_off="RCRC51608409",
1088
+ command_mdax="PSMDAX {mode}", # Marantz Only
1089
+ command_dac_filter="PSDACFIL {mode}", # Marantz Only
1090
+ command_illumination="ILB {mode}", # Marantz Only
1091
+ command_auto_lip_sync="SSHOSALS {mode}", # Marantz Only
1017
1092
  )
1018
1093
 
1019
1094
  ZONE2_TELNET_COMMANDS = TelnetCommands(
@@ -1083,6 +1158,8 @@ ZONE2_TELNET_COMMANDS = TelnetCommands(
1083
1158
  command_hdmi_audio_decode="VSAUDIO {mode}",
1084
1159
  command_quick_select_mode="MSQUICK{number}",
1085
1160
  command_quick_select_memory="MSQUICK{number} MEMORY",
1161
+ command_smart_select_mode="MSSMART{number}", # Marantz
1162
+ command_smart_select_memory="MSSMART{number} MEMORY", # Marantz
1086
1163
  command_auto_standby="STBY{mode}",
1087
1164
  command_sleep="SLP{value}",
1088
1165
  command_center_spread="PSCES {mode}",
@@ -1105,6 +1182,14 @@ ZONE2_TELNET_COMMANDS = TelnetCommands(
1105
1182
  command_panel_and_volume_lock="SYPANEL+V LOCK ON",
1106
1183
  command_graphic_eq="PSGEQ {mode}",
1107
1184
  command_headphone_eq="PSHEQ {mode}",
1185
+ command_denon_hdmi_cec_on="RCKSK0410826",
1186
+ command_denon_hdmi_cec_off="RCKSK0410827",
1187
+ command_marantz_hdmi_cec_on="RCRC51608408",
1188
+ command_marantz_hdmi_cec_off="RCRC51608409",
1189
+ command_mdax="PSMDAX {mode}", # Marantz Only
1190
+ command_dac_filter="PSDACFIL {mode}", # Marantz Only
1191
+ command_illumination="ILB {mode}", # Marantz Only
1192
+ command_auto_lip_sync="SSHOSALS {mode}", # Marantz Only
1108
1193
  )
1109
1194
 
1110
1195
  ZONE3_TELNET_COMMANDS = TelnetCommands(
@@ -1174,6 +1259,8 @@ ZONE3_TELNET_COMMANDS = TelnetCommands(
1174
1259
  command_hdmi_audio_decode="VSAUDIO {mode}",
1175
1260
  command_quick_select_mode="MSQUICK{number}",
1176
1261
  command_quick_select_memory="MSQUICK{number} MEMORY",
1262
+ command_smart_select_mode="MSSMART{number}", # Marantz
1263
+ command_smart_select_memory="MSSMART{number} MEMORY", # Marantz
1177
1264
  command_auto_standby="STBY{mode}",
1178
1265
  command_sleep="SLP{value}",
1179
1266
  command_center_spread="PSCES {mode}",
@@ -1196,6 +1283,14 @@ ZONE3_TELNET_COMMANDS = TelnetCommands(
1196
1283
  command_panel_and_volume_lock="SYPANEL+V LOCK ON",
1197
1284
  command_graphic_eq="PSGEQ {mode}",
1198
1285
  command_headphone_eq="PSHEQ {mode}",
1286
+ command_denon_hdmi_cec_on="RCKSK0410826",
1287
+ command_denon_hdmi_cec_off="RCKSK0410827",
1288
+ command_marantz_hdmi_cec_on="RCRC51608408",
1289
+ command_marantz_hdmi_cec_off="RCRC51608409",
1290
+ command_mdax="PSMDAX {mode}", # Marantz Only
1291
+ command_dac_filter="PSDACFIL {mode}", # Marantz Only
1292
+ command_illumination="ILB {mode}", # Marantz Only
1293
+ command_auto_lip_sync="SSHOSALS {mode}", # Marantz Only
1199
1294
  )
1200
1295
 
1201
1296
  # States
@@ -1604,3 +1699,37 @@ VIDEO_PROCESSING_MODES_MAP = {
1604
1699
  VIDEO_PROCESSING_MODES_MAP_LABELS = {
1605
1700
  value: key for key, value in VIDEO_PROCESSING_MODES_MAP.items()
1606
1701
  }
1702
+
1703
+ MDAXs = Literal["Off", "Low", "Medium", "High"]
1704
+ """M-DAX Modes."""
1705
+
1706
+ MDAX_MAP = {
1707
+ "Off": "OFF",
1708
+ "Low": "LOW",
1709
+ "Medium": "MED",
1710
+ "High": "HI",
1711
+ }
1712
+ MDAX_MAP_LABELS = {value: key for key, value in MDAX_MAP.items()}
1713
+
1714
+ DACFilters = Literal["Mode 1", "Mode 2"]
1715
+ """DAC Filter Modes."""
1716
+
1717
+ DAC_FILTERS_MAP = {
1718
+ "Mode 1": "MODE1",
1719
+ "Mode 2": "MODE2",
1720
+ }
1721
+
1722
+ DAC_FILTERS_MAP_LABELS = {value: key for key, value in DAC_FILTERS_MAP.items()}
1723
+
1724
+ Illuminations = Literal["Auto", "Bright", "Dim", "Dark", "Off"]
1725
+ """Illumination Modes."""
1726
+
1727
+ ILLUMINATION_MAP = {
1728
+ "Auto": "AUTO",
1729
+ "Bright": "BRI",
1730
+ "Dim": "DIM",
1731
+ "Dark": "DAR",
1732
+ "Off": "OFF",
1733
+ }
1734
+
1735
+ ILLUMINATION_MAP_LABELS = {value: key for key, value in ILLUMINATION_MAP.items()}
denonavr/denonavr.py CHANGED
@@ -10,7 +10,7 @@ This module implements the interface to Denon AVR receivers.
10
10
  import asyncio
11
11
  import logging
12
12
  import time
13
- from typing import Awaitable, Callable, Dict, List, Literal, Optional, Union
13
+ from typing import Callable, Dict, List, Literal, Optional, Union
14
14
 
15
15
  import attr
16
16
  import httpx
@@ -27,6 +27,7 @@ from .const import (
27
27
  EcoModes,
28
28
  HDMIAudioDecodes,
29
29
  HDMIOutputs,
30
+ Illuminations,
30
31
  PanelLocks,
31
32
  RoomSizes,
32
33
  TransducerLPFs,
@@ -232,14 +233,12 @@ class DenonAVR(DenonAVRFoundation):
232
233
  """Send telnet commands to the receiver."""
233
234
  self._device.telnet_api.send_commands(*commands)
234
235
 
235
- def register_callback(
236
- self, event: str, callback: Callable[[str, str, str], Awaitable[None]]
237
- ):
236
+ def register_callback(self, event: str, callback: Callable[[str, str, str], None]):
238
237
  """Register a callback for telnet events."""
239
238
  self._device.telnet_api.register_callback(event, callback=callback)
240
239
 
241
240
  def unregister_callback(
242
- self, event: str, callback: Callable[[str, str, str], Awaitable[None]]
241
+ self, event: str, callback: Callable[[str, str, str], None]
243
242
  ):
244
243
  """Unregister a callback for telnet events."""
245
244
  self._device.telnet_api.unregister_callback(event, callback=callback)
@@ -738,6 +737,26 @@ class DenonAVR(DenonAVRFoundation):
738
737
  """
739
738
  return self._device.headphone_eq
740
739
 
740
+ @property
741
+ def illumination(self) -> Optional[str]:
742
+ """
743
+ Return the illumination status for the device.
744
+
745
+ Only available on Marantz devices and when using Telnet.
746
+
747
+ Possible values are: "Auto", "Bright", "Dim", "Dark", "Off"
748
+ """
749
+ return self.illumination
750
+
751
+ @property
752
+ def auto_lip_sync(self) -> Optional[bool]:
753
+ """
754
+ Return the auto lip sync status for the device.
755
+
756
+ Only available on Marantz devices and when using Telnet.
757
+ """
758
+ return self.auto_lip_sync
759
+
741
760
  ##########
742
761
  # Getter #
743
762
  ##########
@@ -1210,3 +1229,43 @@ class DenonAVR(DenonAVRFoundation):
1210
1229
  :param quick_select_number: Quick select number to set. Valid values are 1-5.
1211
1230
  """
1212
1231
  await self._device.async_quick_select_memory(quick_select_number)
1232
+
1233
+ async def async_hdmi_cec_on(self) -> None:
1234
+ """Turn on HDMI CEC on receiver via HTTP get command."""
1235
+ await self._device.async_hdmi_cec_on()
1236
+
1237
+ async def async_hdmi_cec_off(self) -> None:
1238
+ """Turn off HDMI CEC on receiver via HTTP get command."""
1239
+ await self._device.async_hdmi_cec_off()
1240
+
1241
+ async def async_illumination(self, mode: Illuminations):
1242
+ """
1243
+ Set illumination mode on receiver via HTTP get command.
1244
+
1245
+ Only available for Marantz devices.
1246
+ """
1247
+ await self._device.async_illumination(mode)
1248
+
1249
+ async def async_auto_lip_sync_on(self) -> None:
1250
+ """
1251
+ Turn on auto lip sync on receiver via HTTP get command.
1252
+
1253
+ Only available on Marantz devices.
1254
+ """
1255
+ await self._device.async_auto_lip_sync_on()
1256
+
1257
+ async def async_auto_lip_sync_off(self) -> None:
1258
+ """
1259
+ Turn off auto lip sync on receiver via HTTP get command.
1260
+
1261
+ Only available on Marantz devices.
1262
+ """
1263
+ await self._device.async_auto_lip_sync_off()
1264
+
1265
+ async def async_auto_lip_sync_toggle(self) -> None:
1266
+ """
1267
+ Toggle auto lip sync on receiver via HTTP get command.
1268
+
1269
+ Only available on Marantz devices and when using Telnet.
1270
+ """
1271
+ await self._device.async_auto_lip_sync_toggle()
denonavr/dirac.py CHANGED
@@ -8,7 +8,7 @@ This module implements the Audyssey settings of Denon AVR receivers.
8
8
  """
9
9
 
10
10
  import logging
11
- from typing import Optional
11
+ from typing import Optional, get_args
12
12
 
13
13
  import attr
14
14
 
@@ -31,17 +31,14 @@ class DenonAVRDirac(DenonAVRFoundation):
31
31
  _dirac_filter: Optional[str] = attr.ib(
32
32
  converter=attr.converters.optional(str), default=None
33
33
  )
34
+ _dirac_filters = get_args(DiracFilters)
34
35
 
35
36
  def setup(self) -> None:
36
37
  """Ensure that the instance is initialized."""
37
- self._device.telnet_api.register_callback(
38
- "PS", self._async_dirac_filter_callback
39
- )
38
+ self._device.telnet_api.register_callback("PS", self._dirac_filter_callback)
40
39
  self._is_setup = True
41
40
 
42
- async def _async_dirac_filter_callback(
43
- self, zone: str, event: str, parameter: str
44
- ) -> None:
41
+ def _dirac_filter_callback(self, zone: str, event: str, parameter: str) -> None:
45
42
  """Handle Dirac filter change event."""
46
43
  if event == "PS" and parameter[0:5] == "DIRAC":
47
44
  self._dirac_filter = DIRAC_FILTER_MAP_LABELS[parameter[6:]]
@@ -66,7 +63,7 @@ class DenonAVRDirac(DenonAVRFoundation):
66
63
  ##########
67
64
  async def async_dirac_filter(self, dirac_filter: DiracFilters) -> None:
68
65
  """Set Dirac filter."""
69
- if dirac_filter not in DiracFilters:
66
+ if dirac_filter not in self._dirac_filters:
70
67
  raise AvrCommandError("Invalid Dirac filter")
71
68
 
72
69
  mapped_filter = DIRAC_FILTER_MAP[dirac_filter]