1 """Support for HDMI CEC devices as media players."""
3 from __future__
import annotations
8 from pycec.commands
import CecCommand, KeyPressCommand, KeyReleaseCommand
9 from pycec.const
import (
32 MediaPlayerEntityFeature,
40 from .const
import ATTR_NEW, DOMAIN
41 from .entity
import CecEntity
43 _LOGGER = logging.getLogger(__name__)
45 ENTITY_ID_FORMAT = MP_DOMAIN +
".{}"
51 add_entities: AddEntitiesCallback,
52 discovery_info: DiscoveryInfoType |
None =
None,
54 """Find and return HDMI devices as +switches."""
55 if discovery_info
and ATTR_NEW
in discovery_info:
56 _LOGGER.debug(
"Setting up HDMI devices %s", discovery_info[ATTR_NEW])
58 for device
in discovery_info[ATTR_NEW]:
59 hdmi_device = hass.data[DOMAIN][device]
60 entities.append(
CecPlayerEntity(hdmi_device, hdmi_device.logical_address))
65 """Representation of a HDMI device as a Media player."""
68 """Initialize the HDMI device."""
69 CecEntity.__init__(self, device, logical)
73 """Send keypress to CEC adapter."""
75 "Sending keypress %s to device %s", hex(key), hex(self.
_logical_address_logical_address)
81 """Send playback status to CEC adapter."""
89 """Go to previous track."""
98 """Clear players playlist."""
99 raise NotImplementedError
102 """Turn device off."""
109 self.
_attr_state_attr_state = MediaPlayerState.IDLE
112 self, media_type: MediaType | str, media_id: str, **kwargs: Any
115 raise NotImplementedError
118 """Skip to next track."""
123 raise NotImplementedError
126 """Set volume level, range 0..1."""
127 raise NotImplementedError
130 """Pause playback."""
132 self.
_attr_state_attr_state = MediaPlayerState.PAUSED
136 raise NotImplementedError
139 """Start playback."""
141 self.
_attr_state_attr_state = MediaPlayerState.PLAYING
144 """Increase volume."""
149 """Decrease volume."""
154 """Update device status."""
156 if device.power_status
in [POWER_OFF, 3]:
159 if device.power_status
in [POWER_ON, 4]:
161 elif device.status == STATUS_PLAY:
162 self.
_attr_state_attr_state = MediaPlayerState.PLAYING
163 elif device.status == STATUS_STOP:
164 self.
_attr_state_attr_state = MediaPlayerState.IDLE
165 elif device.status == STATUS_STILL:
166 self.
_attr_state_attr_state = MediaPlayerState.PAUSED
168 _LOGGER.warning(
"Unknown state: %s", device.status)
172 """Flag media player features that are supported."""
175 MediaPlayerEntityFeature.TURN_ON
176 | MediaPlayerEntityFeature.TURN_OFF
177 | MediaPlayerEntityFeature.PLAY_MEDIA
178 | MediaPlayerEntityFeature.PAUSE
179 | MediaPlayerEntityFeature.STOP
180 | MediaPlayerEntityFeature.PREVIOUS_TRACK
181 | MediaPlayerEntityFeature.NEXT_TRACK
185 MediaPlayerEntityFeature.TURN_ON
186 | MediaPlayerEntityFeature.TURN_OFF
187 | MediaPlayerEntityFeature.PLAY_MEDIA
188 | MediaPlayerEntityFeature.PAUSE
189 | MediaPlayerEntityFeature.STOP
193 MediaPlayerEntityFeature.TURN_ON
194 | MediaPlayerEntityFeature.TURN_OFF
195 | MediaPlayerEntityFeature.VOLUME_STEP
196 | MediaPlayerEntityFeature.VOLUME_MUTE
198 return MediaPlayerEntityFeature.TURN_ON | MediaPlayerEntityFeature.TURN_OFF
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None async_send_command(HomeAssistant hass, Mapping[str, Any] data)