1 """Support for interface with an Aquos TV."""
3 from __future__
import annotations
5 from collections.abc
import Callable
7 from typing
import Any, Concatenate
10 import voluptuous
as vol
13 PLATFORM_SCHEMA
as MEDIA_PLAYER_PLATFORM_SCHEMA,
15 MediaPlayerEntityFeature,
31 _LOGGER = logging.getLogger(__name__)
33 DEFAULT_NAME =
"Sharp Aquos TV"
35 DEFAULT_USERNAME =
"admin"
36 DEFAULT_PASSWORD =
"password"
40 PLATFORM_SCHEMA = MEDIA_PLAYER_PLATFORM_SCHEMA.extend(
42 vol.Required(CONF_HOST): cv.string,
43 vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
44 vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
45 vol.Optional(CONF_USERNAME, default=DEFAULT_USERNAME): cv.string,
46 vol.Optional(CONF_PASSWORD, default=DEFAULT_PASSWORD): cv.string,
47 vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.string,
48 vol.Optional(
"retries", default=DEFAULT_RETRIES): cv.string,
49 vol.Optional(
"power_on_enabled", default=
False): cv.boolean,
69 add_entities: AddEntitiesCallback,
70 discovery_info: DiscoveryInfoType |
None =
None,
72 """Set up the Sharp Aquos TV platform."""
74 name = config[CONF_NAME]
75 port = config[CONF_PORT]
76 username = config[CONF_USERNAME]
77 password = config[CONF_PASSWORD]
78 power_on_enabled = config[
"power_on_enabled"]
79 host = config[CONF_HOST]
80 remote = sharp_aquos_rc.TV(host, port, username, password, 15, 1)
85 def _retry[_SharpAquosTVDeviceT: SharpAquosTVDevice, **_P](
86 func: Callable[Concatenate[_SharpAquosTVDeviceT, _P], Any],
87 ) -> Callable[Concatenate[_SharpAquosTVDeviceT, _P],
None]:
88 """Handle query retries."""
90 def wrapper(obj: _SharpAquosTVDeviceT, *args: _P.args, **kwargs: _P.kwargs) ->
None:
91 """Wrap all query functions."""
93 while update_retries > 0:
95 func(obj, *args, **kwargs)
97 except (OSError, TypeError, ValueError):
99 if update_retries == 0:
100 obj.set_state(MediaPlayerState.OFF)
106 """Representation of a Aquos TV."""
108 _attr_source_list =
list(SOURCES.values())
109 _attr_supported_features = (
110 MediaPlayerEntityFeature.TURN_OFF
111 | MediaPlayerEntityFeature.NEXT_TRACK
112 | MediaPlayerEntityFeature.PAUSE
113 | MediaPlayerEntityFeature.PREVIOUS_TRACK
114 | MediaPlayerEntityFeature.SELECT_SOURCE
115 | MediaPlayerEntityFeature.VOLUME_MUTE
116 | MediaPlayerEntityFeature.VOLUME_STEP
117 | MediaPlayerEntityFeature.VOLUME_SET
118 | MediaPlayerEntityFeature.PLAY
122 self, name: str, remote: sharp_aquos_rc.TV, power_on_enabled: bool =
False
124 """Initialize the aquos device."""
139 """Retrieve the latest data."""
140 if self.
_remote_remote.power() == 1:
146 self.
_remote_remote.power_on_command_settings(2)
148 self.
_remote_remote.power_on_command_settings(0)
150 if self.
_remote_remote.mute() == 2:
161 """Turn off tvplayer."""
166 """Volume up the media player."""
168 _LOGGER.debug(
"Unknown volume in volume_up")
174 """Volume down media player."""
176 _LOGGER.debug(
"Unknown volume in volume_down")
182 """Set Volume media player."""
187 """Send mute command."""
192 """Turn the media player on."""
197 """Simulate play pause media player."""
198 self.
_remote_remote.remote_button(40)
202 """Send play command."""
203 self.
_remote_remote.remote_button(16)
207 """Send pause command."""
208 self.
_remote_remote.remote_button(16)
212 """Send next track command."""
213 self.
_remote_remote.remote_button(21)
217 """Send the previous track command."""
218 self.
_remote_remote.remote_button(19)
221 """Set the input source."""
222 for key, value
in SOURCES.items():
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)