denonavr 1.1.2__py3-none-any.whl → 1.3.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/denonavr.py CHANGED
@@ -10,13 +10,14 @@ 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
17
17
 
18
18
  from .audyssey import DenonAVRAudyssey, audyssey_factory
19
19
  from .const import (
20
+ AVR_X,
20
21
  DENON_ATTR_SETATTR,
21
22
  MAIN_ZONE,
22
23
  VALID_ZONES,
@@ -24,16 +25,21 @@ from .const import (
24
25
  AutoStandbys,
25
26
  BluetoothOutputModes,
26
27
  DimmerModes,
28
+ DynamicVolumeSettings,
27
29
  EcoModes,
28
30
  HDMIAudioDecodes,
29
31
  HDMIOutputs,
32
+ Illuminations,
33
+ InputModes,
34
+ MultiEQModes,
30
35
  PanelLocks,
36
+ ReferenceLevelOffsets,
31
37
  RoomSizes,
32
38
  TransducerLPFs,
33
39
  VideoProcessingModes,
34
40
  )
35
41
  from .dirac import DenonAVRDirac, dirac_factory
36
- from .exceptions import AvrCommandError
42
+ from .exceptions import AvrCommandError, AvrForbiddenError, AvrIncompleteResponseError
37
43
  from .foundation import DenonAVRFoundation, set_api_host, set_api_timeout
38
44
  from .input import DenonAVRInput, input_factory
39
45
  from .soundmode import DenonAVRSoundMode, sound_mode_factory
@@ -84,7 +90,7 @@ class DenonAVR(DenonAVRFoundation):
84
90
  _timeout: float = attr.ib(
85
91
  converter=float, on_setattr=[*DENON_ATTR_SETATTR, set_api_timeout], default=2.0
86
92
  )
87
- _zones: Dict[str, DenonAVRFoundation] = attr.ib(
93
+ _zones: Dict[str, "DenonAVR"] = attr.ib(
88
94
  validator=attr.validators.deep_mapping(
89
95
  attr.validators.in_(VALID_ZONES),
90
96
  attr.validators.instance_of(DenonAVRFoundation),
@@ -94,6 +100,7 @@ class DenonAVR(DenonAVRFoundation):
94
100
  init=False,
95
101
  )
96
102
  _setup_lock: asyncio.Lock = attr.ib(default=attr.Factory(asyncio.Lock))
103
+ _allow_recovery: bool = attr.ib(converter=bool, default=True, init=True)
97
104
  audyssey: DenonAVRAudyssey = attr.ib(
98
105
  validator=attr.validators.instance_of(DenonAVRAudyssey),
99
106
  default=attr.Factory(audyssey_factory, takes_self=True),
@@ -193,23 +200,46 @@ class DenonAVR(DenonAVRFoundation):
193
200
  # Create a cache id for this global update
194
201
  cache_id = time.time()
195
202
 
196
- # Verify update method
197
- _LOGGER.debug("Verifying update method")
198
- await self._device.async_verify_avr_2016_update_method(cache_id=cache_id)
203
+ try:
204
+ # Update device
205
+ await self._device.async_update(global_update=True, cache_id=cache_id)
206
+
207
+ # Update other functions
208
+ await self.input.async_update(global_update=True, cache_id=cache_id)
209
+ await self.soundmode.async_update(global_update=True, cache_id=cache_id)
210
+ await self.tonecontrol.async_update(global_update=True, cache_id=cache_id)
211
+ await self.vol.async_update(global_update=True, cache_id=cache_id)
212
+ except AvrForbiddenError:
213
+ # Recovery in case receiver changes port from 80 to 8080 which
214
+ # might happen at Denon AVR-X 2016 receivers
215
+ if self._device.use_avr_2016_update and self._allow_recovery:
216
+ self._allow_recovery = False
217
+ _LOGGER.warning(
218
+ "AppCommand.xml returns HTTP status 403. Running setup"
219
+ " again once to check if receiver interface switched "
220
+ "ports"
221
+ )
222
+ self._is_setup = False
223
+ await self.async_update()
224
+ else:
225
+ raise
226
+ except AvrIncompleteResponseError:
227
+ # Use status XML interface if Appcommand.xml returns an incomplete result
228
+ # Only AVR_X devices support both interfaces
229
+ if self._device.use_avr_2016_update and self._device.receiver == AVR_X:
230
+ _LOGGER.warning(
231
+ "Error verifying Appcommand.xml update method, it returns "
232
+ "an incomplete result set. Deactivating the interface"
233
+ )
234
+ self._device.use_avr_2016_update = False
235
+ await self.async_update()
236
+ else:
237
+ raise
238
+ else:
239
+ if not self._allow_recovery:
240
+ self._allow_recovery = True
241
+ _LOGGER.info("AppCommand.xml recovered from HTTP status 403 error")
199
242
 
200
- # Update device
201
- await self._device.async_update(global_update=True, cache_id=cache_id)
202
-
203
- # Update other functions
204
- await self.input.async_update(global_update=True, cache_id=cache_id)
205
- await self.soundmode.async_update(global_update=True, cache_id=cache_id)
206
- await self.tonecontrol.async_update(global_update=True, cache_id=cache_id)
207
- await self.vol.async_update(global_update=True, cache_id=cache_id)
208
-
209
- # AppCommand0300.xml interface is very slow, thus it is not included
210
- # into main update
211
- # await self.audyssey.async_update(
212
- # global_update=True, cache_id=cache_id)
213
243
  _LOGGER.debug("Finished denonavr update")
214
244
 
215
245
  async def async_update_tonecontrol(self):
@@ -232,14 +262,12 @@ class DenonAVR(DenonAVRFoundation):
232
262
  """Send telnet commands to the receiver."""
233
263
  self._device.telnet_api.send_commands(*commands)
234
264
 
235
- def register_callback(
236
- self, event: str, callback: Callable[[str, str, str], Awaitable[None]]
237
- ):
265
+ def register_callback(self, event: str, callback: Callable[[str, str, str], None]):
238
266
  """Register a callback for telnet events."""
239
267
  self._device.telnet_api.register_callback(event, callback=callback)
240
268
 
241
269
  def unregister_callback(
242
- self, event: str, callback: Callable[[str, str, str], Awaitable[None]]
270
+ self, event: str, callback: Callable[[str, str, str], None]
243
271
  ):
244
272
  """Unregister a callback for telnet events."""
245
273
  self._device.telnet_api.unregister_callback(event, callback=callback)
@@ -321,7 +349,7 @@ class DenonAVR(DenonAVRFoundation):
321
349
  return self.input.state
322
350
 
323
351
  @property
324
- def muted(self) -> bool:
352
+ def muted(self) -> Optional[bool]:
325
353
  """
326
354
  Boolean if volume is currently muted.
327
355
 
@@ -330,7 +358,7 @@ class DenonAVR(DenonAVRFoundation):
330
358
  return self.vol.muted
331
359
 
332
360
  @property
333
- def volume(self) -> float:
361
+ def volume(self) -> Optional[float]:
334
362
  """
335
363
  Return volume of Denon AVR as float.
336
364
 
@@ -433,7 +461,7 @@ class DenonAVR(DenonAVRFoundation):
433
461
  return self.input.playing_func_list
434
462
 
435
463
  @property
436
- def receiver_port(self) -> int:
464
+ def receiver_port(self) -> Optional[int]:
437
465
  """Return the receiver's port."""
438
466
  if self._device.receiver is None:
439
467
  return None
@@ -541,8 +569,6 @@ class DenonAVR(DenonAVRFoundation):
541
569
  """
542
570
  Returns the dimmer state of the device.
543
571
 
544
- Only available if using Telnet.
545
-
546
572
  Possible values are: "Off", "Dark", "Dim" and "Bright"
547
573
  """
548
574
  return self._device.dimmer
@@ -552,9 +578,7 @@ class DenonAVR(DenonAVRFoundation):
552
578
  """
553
579
  Return the auto-standby state of the device.
554
580
 
555
- Only available if using Telnet.
556
-
557
- Possible values are: "OFF", "15M", "30M", "60M"
581
+ Possible values are: "OFF", "15M", "30M", "60M", "2H", "4H", "8H"
558
582
  """
559
583
  return self._device.auto_standby
560
584
 
@@ -583,8 +607,6 @@ class DenonAVR(DenonAVRFoundation):
583
607
  """
584
608
  Returns the eco-mode for the device.
585
609
 
586
- Only available if using Telnet.
587
-
588
610
  Possible values are: "Off", "On", "Auto"
589
611
  """
590
612
  return self._device.eco_mode
@@ -623,7 +645,7 @@ class DenonAVR(DenonAVRFoundation):
623
645
  return self._device.video_processing_mode
624
646
 
625
647
  @property
626
- def tactile_transducer(self) -> Optional[bool]:
648
+ def tactile_transducer(self) -> Optional[str]:
627
649
  """
628
650
  Return the tactile transducer state of the device.
629
651
 
@@ -661,7 +683,7 @@ class DenonAVR(DenonAVRFoundation):
661
683
  return self._device.room_size
662
684
 
663
685
  @property
664
- def triggers(self) -> Dict[int, str]:
686
+ def triggers(self) -> Optional[Dict[int, str]]:
665
687
  """
666
688
  Return the triggers and their statuses for the device.
667
689
 
@@ -738,6 +760,26 @@ class DenonAVR(DenonAVRFoundation):
738
760
  """
739
761
  return self._device.headphone_eq
740
762
 
763
+ @property
764
+ def illumination(self) -> Optional[str]:
765
+ """
766
+ Return the illumination status for the device.
767
+
768
+ Only available on Marantz devices and when using Telnet.
769
+
770
+ Possible values are: "Auto", "Bright", "Dim", "Dark", "Off"
771
+ """
772
+ return self.illumination
773
+
774
+ @property
775
+ def auto_lip_sync(self) -> Optional[bool]:
776
+ """
777
+ Return the auto lip sync status for the device.
778
+
779
+ Only available on Marantz devices and when using Telnet.
780
+ """
781
+ return self.auto_lip_sync
782
+
741
783
  ##########
742
784
  # Getter #
743
785
  ##########
@@ -780,15 +822,15 @@ class DenonAVR(DenonAVRFoundation):
780
822
  """Toggle DynamicEQ."""
781
823
  await self.audyssey.async_toggle_dynamic_eq()
782
824
 
783
- async def async_set_multieq(self, value: str) -> None:
825
+ async def async_set_multieq(self, value: MultiEQModes) -> None:
784
826
  """Set MultiEQ mode."""
785
827
  await self.audyssey.async_set_multieq(value)
786
828
 
787
- async def async_set_reflevoffset(self, value: str) -> None:
829
+ async def async_set_reflevoffset(self, value: ReferenceLevelOffsets) -> None:
788
830
  """Set Reference Level Offset."""
789
831
  await self.audyssey.async_set_reflevoffset(value)
790
832
 
791
- async def async_set_dynamicvol(self, value: str) -> None:
833
+ async def async_set_dynamicvol(self, value: DynamicVolumeSettings) -> None:
792
834
  """Set Dynamic Volume."""
793
835
  await self.audyssey.async_set_dynamicvol(value)
794
836
 
@@ -815,40 +857,44 @@ class DenonAVR(DenonAVRFoundation):
815
857
  await self.input.async_toggle_play_pause()
816
858
 
817
859
  async def async_play(self) -> None:
818
- """Send play command to receiver command via HTTP post."""
860
+ """Send play command to receiver command."""
819
861
  await self.input.async_play()
820
862
 
821
863
  async def async_pause(self) -> None:
822
- """Send pause command to receiver command via HTTP post."""
864
+ """Send pause command to receiver command."""
823
865
  await self.input.async_pause()
824
866
 
867
+ async def async_stop(self) -> None:
868
+ """Send stop command to receiver command."""
869
+ await self.input.async_stop()
870
+
825
871
  async def async_previous_track(self) -> None:
826
- """Send previous track command to receiver command via HTTP post."""
872
+ """Send previous track command to receiver command."""
827
873
  await self.input.async_previous_track()
828
874
 
829
875
  async def async_next_track(self) -> None:
830
- """Send next track command to receiver command via HTTP post."""
876
+ """Send next track command to receiver command."""
831
877
  await self.input.async_next_track()
832
878
 
833
879
  async def async_power_on(self) -> None:
834
- """Turn on receiver via HTTP get command."""
880
+ """Turn on receiver."""
835
881
  await self._device.async_power_on()
836
882
 
837
883
  async def async_power_off(self) -> None:
838
- """Turn off receiver via HTTP get command."""
884
+ """Turn off receiver."""
839
885
  await self._device.async_power_off()
840
886
 
841
887
  async def async_volume_up(self) -> None:
842
- """Volume up receiver via HTTP get command."""
888
+ """Volume up receiver."""
843
889
  await self.vol.async_volume_up()
844
890
 
845
891
  async def async_volume_down(self) -> None:
846
- """Volume down receiver via HTTP get command."""
892
+ """Volume down receiver."""
847
893
  await self.vol.async_volume_down()
848
894
 
849
895
  async def async_set_volume(self, volume: float) -> None:
850
896
  """
851
- Set receiver volume via HTTP get command.
897
+ Set receiver volume.
852
898
 
853
899
  Volume is send in a format like -50.0.
854
900
  Minimum is -80.0, maximum at 18.0
@@ -856,7 +902,7 @@ class DenonAVR(DenonAVRFoundation):
856
902
  await self.vol.async_set_volume(volume)
857
903
 
858
904
  async def async_mute(self, mute: bool) -> None:
859
- """Mute receiver via HTTP get command."""
905
+ """Mute receiver."""
860
906
  await self.vol.async_mute(mute)
861
907
 
862
908
  async def async_enable_tone_control(self) -> None:
@@ -926,60 +972,60 @@ class DenonAVR(DenonAVRFoundation):
926
972
  await self.tonecontrol.async_treble_down()
927
973
 
928
974
  async def async_cursor_up(self) -> None:
929
- """Send cursor up to receiver via HTTP get command."""
975
+ """Send cursor up to receiver."""
930
976
  await self._device.async_cursor_up()
931
977
 
932
978
  async def async_cursor_down(self) -> None:
933
- """Send cursor down to receiver via HTTP get command."""
979
+ """Send cursor down to receiver."""
934
980
  await self._device.async_cursor_down()
935
981
 
936
982
  async def async_cursor_left(self) -> None:
937
- """Send cursor left to receiver via HTTP get command."""
983
+ """Send cursor left to receiver."""
938
984
  await self._device.async_cursor_left()
939
985
 
940
986
  async def async_cursor_right(self) -> None:
941
- """Send cursor right to receiver via HTTP get command."""
987
+ """Send cursor right to receiver."""
942
988
  await self._device.async_cursor_right()
943
989
 
944
990
  async def async_cursor_enter(self) -> None:
945
- """Send cursor enter to receiver via HTTP get command."""
991
+ """Send cursor enter to receiver."""
946
992
  await self._device.async_cursor_enter()
947
993
 
948
994
  async def async_back(self) -> None:
949
- """Send back to receiver via HTTP get command."""
995
+ """Send back to receiver."""
950
996
  await self._device.async_back()
951
997
 
952
998
  async def async_info(self) -> None:
953
- """Send info to receiver via HTTP get command."""
999
+ """Send info to receiver."""
954
1000
  await self._device.async_info()
955
1001
 
956
1002
  async def async_options(self) -> None:
957
- """Raise options menu to receiver via HTTP get command."""
1003
+ """Raise options menu to receiver."""
958
1004
  await self._device.async_options()
959
1005
 
960
1006
  async def async_settings_menu(self) -> None:
961
- """Raise settings menu to receiver via HTTP get command."""
1007
+ """Raise settings menu to receiver."""
962
1008
  await self._device.async_settings_menu()
963
1009
 
964
1010
  async def async_channel_level_adjust(self) -> None:
965
- """Toggle the channel level adjust menu on receiver via HTTP get command."""
1011
+ """Toggle the channel level adjust menu on receiver."""
966
1012
  await self._device.async_channel_level_adjust()
967
1013
 
968
1014
  async def async_dimmer_toggle(self) -> None:
969
- """Toggle dimmer on receiver via HTTP get command."""
1015
+ """Toggle dimmer on receiver."""
970
1016
  await self._device.async_dimmer_toggle()
971
1017
 
972
1018
  async def async_dimmer(self, mode: DimmerModes) -> None:
973
- """Set dimmer mode on receiver via HTTP get command."""
1019
+ """Set dimmer mode on receiver."""
974
1020
  await self._device.async_dimmer(mode)
975
1021
 
976
1022
  async def async_auto_standby(self, auto_standby: AutoStandbys) -> None:
977
- """Set auto standby on receiver via HTTP get command."""
1023
+ """Set auto standby on receiver."""
978
1024
  await self._device.async_auto_standby(auto_standby)
979
1025
 
980
1026
  async def async_sleep(self, sleep: Union[Literal["OFF"], int]) -> None:
981
1027
  """
982
- Set auto standby on receiver via HTTP get command.
1028
+ Set auto standby on receiver.
983
1029
 
984
1030
  Valid sleep values are "OFF" and 1-120 (in minutes)
985
1031
  """
@@ -1002,14 +1048,14 @@ class DenonAVR(DenonAVRFoundation):
1002
1048
  await self._device.async_hdmi_output(output)
1003
1049
 
1004
1050
  async def async_hdmi_audio_decode(self, mode: HDMIAudioDecodes) -> None:
1005
- """Set HDMI Audio Decode mode on receiver via HTTP get command."""
1051
+ """Set HDMI Audio Decode mode on receiver."""
1006
1052
  await self._device.async_hdmi_audio_decode(mode)
1007
1053
 
1008
1054
  async def async_video_processing_mode(self, mode: VideoProcessingModes) -> None:
1009
- """Set video processing mode on receiver via HTTP get command."""
1055
+ """Set video processing mode on receiver."""
1010
1056
  await self._device.async_video_processing_mode(mode)
1011
1057
 
1012
- async def async_status(self) -> str:
1058
+ async def async_status(self) -> None:
1013
1059
  """
1014
1060
  Toggles the display of status on the device.
1015
1061
 
@@ -1018,16 +1064,16 @@ class DenonAVR(DenonAVRFoundation):
1018
1064
  return await self._device.async_status()
1019
1065
 
1020
1066
  async def async_system_reset(self) -> None:
1021
- """DANGER! Reset the receiver via HTTP get command."""
1067
+ """DANGER! Reset the receiver."""
1022
1068
  await self._device.async_system_reset()
1023
1069
 
1024
1070
  async def async_network_restart(self) -> None:
1025
- """Restart the network on the receiver via HTTP get command."""
1071
+ """Restart the network on the receiver."""
1026
1072
  await self._device.async_network_restart()
1027
1073
 
1028
1074
  async def async_speaker_preset(self, preset: int) -> None:
1029
1075
  """
1030
- Set speaker preset on receiver via HTTP get command.
1076
+ Set speaker preset on receiver.
1031
1077
 
1032
1078
  Valid preset values are 1-2.
1033
1079
  """
@@ -1035,143 +1081,143 @@ class DenonAVR(DenonAVRFoundation):
1035
1081
 
1036
1082
  async def async_speaker_preset_toggle(self) -> None:
1037
1083
  """
1038
- Toggle speaker preset on receiver via HTTP get command.
1084
+ Toggle speaker preset on receiver.
1039
1085
 
1040
1086
  Only available if using Telnet.
1041
1087
  """
1042
1088
  await self._device.async_speaker_preset_toggle()
1043
1089
 
1044
1090
  async def async_bt_transmitter_on(self) -> None:
1045
- """Turn on Bluetooth transmitter on receiver via HTTP get command."""
1091
+ """Turn on Bluetooth transmitter on receiver."""
1046
1092
  await self._device.async_bt_transmitter_on()
1047
1093
 
1048
1094
  async def async_bt_transmitter_off(self) -> None:
1049
- """Turn off Bluetooth transmitter on receiver via HTTP get command."""
1095
+ """Turn off Bluetooth transmitter on receiver."""
1050
1096
  await self._device.async_bt_transmitter_off()
1051
1097
 
1052
1098
  async def async_bt_transmitter_toggle(self) -> None:
1053
1099
  """
1054
- Toggle Bluetooth transmitter mode on receiver via HTTP get command.
1100
+ Toggle Bluetooth transmitter mode on receiver.
1055
1101
 
1056
1102
  Only available if using Telnet.
1057
1103
  """
1058
1104
  await self._device.async_bt_transmitter_toggle()
1059
1105
 
1060
1106
  async def async_bt_output_mode(self, mode: BluetoothOutputModes) -> None:
1061
- """Set Bluetooth transmitter mode on receiver via HTTP get command."""
1107
+ """Set Bluetooth transmitter mode on receiver."""
1062
1108
  await self._device.async_bt_output_mode(mode)
1063
1109
 
1064
1110
  async def async_bt_output_mode_toggle(self) -> None:
1065
1111
  """
1066
- Toggle Bluetooth output mode on receiver via HTTP get command.
1112
+ Toggle Bluetooth output mode on receiver.
1067
1113
 
1068
1114
  Only available if using Telnet.
1069
1115
  """
1070
1116
  await self._device.async_bt_output_mode_toggle()
1071
1117
 
1072
1118
  async def async_delay_time_up(self) -> None:
1073
- """Delay time up on receiver via HTTP get command."""
1119
+ """Delay time up on receiver."""
1074
1120
  await self._device.async_delay_time_up()
1075
1121
 
1076
1122
  async def async_delay_time_down(self) -> None:
1077
- """Delay time up on receiver via HTTP get command."""
1123
+ """Delay time up on receiver."""
1078
1124
  await self._device.async_delay_time_down()
1079
1125
 
1080
1126
  async def async_delay_time(self, delay_time: int) -> None:
1081
1127
  """
1082
- Set delay time on receiver via HTTP get command.
1128
+ Set delay time on receiver.
1083
1129
 
1084
1130
  :param delay_time: Delay time in ms. Valid values are 0-999.
1085
1131
  """
1086
1132
  await self._device.async_delay_time(delay_time)
1087
1133
 
1088
1134
  async def async_audio_restorer(self, mode: AudioRestorers):
1089
- """Set audio restorer on receiver via HTTP get command."""
1135
+ """Set audio restorer on receiver."""
1090
1136
  await self._device.async_audio_restorer(mode)
1091
1137
 
1092
1138
  async def async_remote_control_lock(self):
1093
- """Set remote control lock on receiver via HTTP get command."""
1139
+ """Set remote control lock on receiver."""
1094
1140
  await self._device.async_remote_control_lock()
1095
1141
 
1096
1142
  async def async_remote_control_unlock(self):
1097
- """Set remote control unlock on receiver via HTTP get command."""
1143
+ """Set remote control unlock on receiver."""
1098
1144
  await self._device.async_remote_control_unlock()
1099
1145
 
1100
1146
  async def async_panel_lock(self, panel_lock_mode: PanelLocks):
1101
- """Set panel lock on receiver via HTTP get command."""
1147
+ """Set panel lock on receiver."""
1102
1148
  await self._device.async_panel_lock(panel_lock_mode)
1103
1149
 
1104
1150
  async def async_panel_unlock(self):
1105
- """Set panel unlock on receiver via HTTP get command."""
1151
+ """Set panel unlock on receiver."""
1106
1152
  await self._device.async_panel_unlock()
1107
1153
 
1108
1154
  async def async_graphic_eq_on(self) -> None:
1109
- """Turn on Graphic EQ on receiver via HTTP get command."""
1155
+ """Turn on Graphic EQ on receiver."""
1110
1156
  await self._device.async_graphic_eq_on()
1111
1157
 
1112
1158
  async def async_graphic_eq_off(self) -> None:
1113
- """Turn off Graphic EQ on receiver via HTTP get command."""
1159
+ """Turn off Graphic EQ on receiver."""
1114
1160
  await self._device.async_graphic_eq_off()
1115
1161
 
1116
1162
  async def async_graphic_eq_toggle(self) -> None:
1117
1163
  """
1118
- Toggle Graphic EQ on receiver via HTTP get command.
1164
+ Toggle Graphic EQ on receiver.
1119
1165
 
1120
1166
  Only available if using Telnet.
1121
1167
  """
1122
1168
  await self._device.async_graphic_eq_toggle()
1123
1169
 
1124
1170
  async def async_headphone_eq_on(self) -> None:
1125
- """Turn on Headphone EQ on receiver via HTTP get command."""
1171
+ """Turn on Headphone EQ on receiver."""
1126
1172
  await self._device.async_headphone_eq_on()
1127
1173
 
1128
1174
  async def async_headphone_eq_off(self) -> None:
1129
- """Turn off Headphone EQ on receiver via HTTP get command."""
1175
+ """Turn off Headphone EQ on receiver."""
1130
1176
  await self._device.async_headphone_eq_off()
1131
1177
 
1132
1178
  async def async_headphone_eq_toggle(self) -> None:
1133
1179
  """
1134
- Toggle Headphone EQ on receiver via HTTP get command.
1180
+ Toggle Headphone EQ on receiver.
1135
1181
 
1136
1182
  Only available if using Telnet.
1137
1183
  """
1138
1184
  await self._device.async_headphone_eq_toggle()
1139
1185
 
1140
1186
  async def async_tactile_transducer_on(self) -> None:
1141
- """Turn on tactile transducer on receiver via HTTP get command."""
1187
+ """Turn on tactile transducer on receiver."""
1142
1188
  await self._device.async_tactile_transducer_on()
1143
1189
 
1144
1190
  async def async_tactile_transducer_off(self) -> None:
1145
- """Turn on tactile transducer on receiver via HTTP get command."""
1191
+ """Turn on tactile transducer on receiver."""
1146
1192
  await self._device.async_tactile_transducer_off()
1147
1193
 
1148
1194
  async def async_tactile_transducer_toggle(self) -> None:
1149
1195
  """
1150
- Turn on tactile transducer on receiver via HTTP get command.
1196
+ Turn on tactile transducer on receiver.
1151
1197
 
1152
1198
  Only available if using Telnet.
1153
1199
  """
1154
1200
  await self._device.async_tactile_transducer_toggle()
1155
1201
 
1156
1202
  async def async_tactile_transducer_level_up(self) -> None:
1157
- """Increase the transducer level on receiver via HTTP get command."""
1203
+ """Increase the transducer level on receiver."""
1158
1204
  await self._device.async_tactile_transducer_level_up()
1159
1205
 
1160
1206
  async def async_tactile_transducer_level_down(self) -> None:
1161
- """Decrease the transducer on receiver via HTTP get command."""
1207
+ """Decrease the transducer on receiver."""
1162
1208
  await self._device.async_tactile_transducer_level_down()
1163
1209
 
1164
1210
  async def async_transducer_lpf(self, lpf: TransducerLPFs) -> None:
1165
- """Set transducer low pass filter on receiver via HTTP get command."""
1211
+ """Set transducer low pass filter on receiver."""
1166
1212
  await self._device.async_transducer_lpf(lpf)
1167
1213
 
1168
1214
  async def async_room_size(self, room_size: RoomSizes) -> None:
1169
- """Set room size on receiver via HTTP get command."""
1215
+ """Set room size on receiver."""
1170
1216
  await self._device.async_room_size(room_size)
1171
1217
 
1172
1218
  async def async_trigger_on(self, trigger: int) -> None:
1173
1219
  """
1174
- Set trigger to ON on receiver via HTTP get command.
1220
+ Set trigger to ON on receiver.
1175
1221
 
1176
1222
  :param trigger: Trigger number to set to ON. Valid values are 1-3.
1177
1223
  """
@@ -1179,7 +1225,7 @@ class DenonAVR(DenonAVRFoundation):
1179
1225
 
1180
1226
  async def async_trigger_off(self, trigger: int) -> None:
1181
1227
  """
1182
- Set trigger to OFF on receiver via HTTP get command.
1228
+ Set trigger to OFF on receiver.
1183
1229
 
1184
1230
  :param trigger: Trigger number to set to OFF. Valid values are 1-3.
1185
1231
  """
@@ -1187,7 +1233,7 @@ class DenonAVR(DenonAVRFoundation):
1187
1233
 
1188
1234
  async def async_trigger_toggle(self, trigger: int) -> None:
1189
1235
  """
1190
- Toggle trigger on receiver via HTTP get command.
1236
+ Toggle trigger on receiver.
1191
1237
 
1192
1238
  Only available if using Telnet.
1193
1239
 
@@ -1197,7 +1243,7 @@ class DenonAVR(DenonAVRFoundation):
1197
1243
 
1198
1244
  async def async_quick_select_mode(self, quick_select_number: int) -> None:
1199
1245
  """
1200
- Set quick select mode on receiver via HTTP get command.
1246
+ Set quick select mode on receiver.
1201
1247
 
1202
1248
  :param quick_select_number: Quick select number to set. Valid values are 1-5.
1203
1249
  """
@@ -1205,8 +1251,60 @@ class DenonAVR(DenonAVRFoundation):
1205
1251
 
1206
1252
  async def async_quick_select_memory(self, quick_select_number: int) -> None:
1207
1253
  """
1208
- Set quick select memory on receiver via HTTP get command.
1254
+ Set quick select memory on receiver.
1209
1255
 
1210
1256
  :param quick_select_number: Quick select number to set. Valid values are 1-5.
1211
1257
  """
1212
1258
  await self._device.async_quick_select_memory(quick_select_number)
1259
+
1260
+ async def async_hdmi_cec_on(self) -> None:
1261
+ """Turn on HDMI CEC on receiver."""
1262
+ await self._device.async_hdmi_cec_on()
1263
+
1264
+ async def async_hdmi_cec_off(self) -> None:
1265
+ """Turn off HDMI CEC on receiver."""
1266
+ await self._device.async_hdmi_cec_off()
1267
+
1268
+ async def async_illumination(self, mode: Illuminations):
1269
+ """
1270
+ Set illumination mode on receiver.
1271
+
1272
+ Only available for Marantz devices.
1273
+ """
1274
+ await self._device.async_illumination(mode)
1275
+
1276
+ async def async_auto_lip_sync_on(self) -> None:
1277
+ """
1278
+ Turn on auto lip sync on receiver.
1279
+
1280
+ Only available on Marantz devices.
1281
+ """
1282
+ await self._device.async_auto_lip_sync_on()
1283
+
1284
+ async def async_auto_lip_sync_off(self) -> None:
1285
+ """
1286
+ Turn off auto lip sync on receiver.
1287
+
1288
+ Only available on Marantz devices.
1289
+ """
1290
+ await self._device.async_auto_lip_sync_off()
1291
+
1292
+ async def async_auto_lip_sync_toggle(self) -> None:
1293
+ """
1294
+ Toggle auto lip sync on receiver.
1295
+
1296
+ Only available on Marantz devices and when using Telnet.
1297
+ """
1298
+ await self._device.async_auto_lip_sync_toggle()
1299
+
1300
+ async def async_page_up(self) -> None:
1301
+ """Page Up on receiver."""
1302
+ await self._device.async_page_up()
1303
+
1304
+ async def async_page_down(self) -> None:
1305
+ """Page Down on receiver."""
1306
+ await self._device.async_page_down()
1307
+
1308
+ async def async_input_mode(self, mode: InputModes):
1309
+ """Set input mode on receiver."""
1310
+ await self._device.async_input_mode(mode)