1 """Media player support for Panasonic Viera TV."""
3 from __future__
import annotations
8 from panasonic_viera
import Keys
13 MediaPlayerDeviceClass,
15 MediaPlayerEntityFeature,
18 async_process_play_media_url,
37 _LOGGER = logging.getLogger(__name__)
42 config_entry: ConfigEntry,
43 async_add_entities: AddEntitiesCallback,
45 """Set up Panasonic Viera TV from a config entry."""
47 config = config_entry.data
49 remote = hass.data[DOMAIN][config_entry.entry_id][ATTR_REMOTE]
50 name = config[CONF_NAME]
51 device_info = config[ATTR_DEVICE_INFO]
58 """Representation of a Panasonic Viera TV."""
60 _attr_supported_features = (
61 MediaPlayerEntityFeature.PAUSE
62 | MediaPlayerEntityFeature.VOLUME_STEP
63 | MediaPlayerEntityFeature.VOLUME_SET
64 | MediaPlayerEntityFeature.VOLUME_MUTE
65 | MediaPlayerEntityFeature.PREVIOUS_TRACK
66 | MediaPlayerEntityFeature.NEXT_TRACK
67 | MediaPlayerEntityFeature.TURN_OFF
68 | MediaPlayerEntityFeature.TURN_ON
69 | MediaPlayerEntityFeature.PLAY
70 | MediaPlayerEntityFeature.PLAY_MEDIA
71 | MediaPlayerEntityFeature.STOP
72 | MediaPlayerEntityFeature.BROWSE_MEDIA
74 _attr_has_entity_name =
True
76 _attr_device_class = MediaPlayerDeviceClass.TV
79 """Initialize the entity."""
81 if device_info
is not None:
83 identifiers={(DOMAIN, device_info[ATTR_UDN])},
84 manufacturer=device_info.get(ATTR_MANUFACTURER, DEFAULT_MANUFACTURER),
85 model=device_info.get(ATTR_MODEL_NUMBER, DEFAULT_MODEL_NUMBER),
93 def state(self) -> MediaPlayerState | None:
94 """Return the state of the device."""
95 return self.
_remote_remote.state
99 """Return True if the device is available."""
100 return self.
_remote_remote.available
104 """Volume level of the media player (0..1)."""
105 return self.
_remote_remote.volume
109 """Boolean if volume is currently muted."""
110 return self.
_remote_remote.muted
113 """Retrieve the latest data."""
117 """Turn on the media player."""
121 """Turn off media player."""
125 """Volume up the media player."""
126 await self.
_remote_remote.async_send_key(Keys.VOLUME_UP)
129 """Volume down media player."""
130 await self.
_remote_remote.async_send_key(Keys.VOLUME_DOWN)
133 """Send mute command."""
134 await self.
_remote_remote.async_set_mute(mute)
137 """Set volume level, range 0..1."""
138 await self.
_remote_remote.async_set_volume(volume)
141 """Simulate play pause media player."""
142 if self.
_remote_remote.playing:
143 await self.
_remote_remote.async_send_key(Keys.PAUSE)
144 self.
_remote_remote.playing =
False
146 await self.
_remote_remote.async_send_key(Keys.PLAY)
147 self.
_remote_remote.playing =
True
150 """Send play command."""
151 await self.
_remote_remote.async_send_key(Keys.PLAY)
152 self.
_remote_remote.playing =
True
155 """Send pause command."""
156 await self.
_remote_remote.async_send_key(Keys.PAUSE)
157 self.
_remote_remote.playing =
False
161 await self.
_remote_remote.async_send_key(Keys.STOP)
164 """Send the fast forward command."""
165 await self.
_remote_remote.async_send_key(Keys.FAST_FORWARD)
168 """Send the rewind command."""
169 await self.
_remote_remote.async_send_key(Keys.REWIND)
172 self, media_type: MediaType | str, media_id: str, **kwargs: Any
175 if media_source.is_media_source_id(media_id):
176 media_type = MediaType.URL
177 play_item = await media_source.async_resolve_media(
180 media_id = play_item.url
182 if media_type != MediaType.URL:
183 _LOGGER.warning(
"Unsupported media_type: %s", media_type)
191 media_content_type: MediaType | str |
None =
None,
192 media_content_id: str |
None =
None,
194 """Implement the websocket media browsing helper."""
195 return await media_source.async_browse_media(self.
hasshass, media_content_id)