Home Assistant Unofficial Reference 2024.12.1
media_player.py
Go to the documentation of this file.
1 """Media Player platform for Tessie integration."""
2 
3 from __future__ import annotations
4 
6  MediaPlayerDeviceClass,
7  MediaPlayerEntity,
8  MediaPlayerState,
9 )
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 
13 from . import TessieConfigEntry
14 from .entity import TessieEntity
15 from .models import TessieVehicleData
16 
17 STATES = {
18  "Playing": MediaPlayerState.PLAYING,
19  "Paused": MediaPlayerState.PAUSED,
20  "Stopped": MediaPlayerState.IDLE,
21 }
22 
23 PARALLEL_UPDATES = 0
24 
25 
27  hass: HomeAssistant,
28  entry: TessieConfigEntry,
29  async_add_entities: AddEntitiesCallback,
30 ) -> None:
31  """Set up the Tessie Media platform from a config entry."""
32  data = entry.runtime_data
33 
34  async_add_entities(TessieMediaEntity(vehicle) for vehicle in data.vehicles)
35 
36 
38  """Vehicle Location Media Class."""
39 
40  _attr_device_class = MediaPlayerDeviceClass.SPEAKER
41 
42  def __init__(
43  self,
44  vehicle: TessieVehicleData,
45  ) -> None:
46  """Initialize the media player entity."""
47  super().__init__(vehicle, "media")
48 
49  @property
50  def state(self) -> MediaPlayerState:
51  """State of the player."""
52  return STATES.get(
53  self.getget("vehicle_state_media_info_media_playback_status"),
54  MediaPlayerState.OFF,
55  )
56 
57  @property
58  def volume_level(self) -> float:
59  """Volume level of the media player (0..1)."""
60  return self.getget("vehicle_state_media_info_audio_volume", 0) / self.getget(
61  "vehicle_state_media_info_audio_volume_max", 10.333333
62  )
63 
64  @property
65  def media_duration(self) -> int | None:
66  """Duration of current playing media in seconds."""
67  if duration := self.getget("vehicle_state_media_info_now_playing_duration"):
68  return duration / 1000
69  return None
70 
71  @property
72  def media_position(self) -> int | None:
73  """Position of current playing media in seconds."""
74  # Return media position only when a media duration is > 0
75  if self.getget("vehicle_state_media_info_now_playing_duration"):
76  return self.getget("vehicle_state_media_info_now_playing_elapsed") / 1000
77  return None
78 
79  @property
80  def media_title(self) -> str | None:
81  """Title of current playing media."""
82  if title := self.getget("vehicle_state_media_info_now_playing_title"):
83  return title
84  return None
85 
86  @property
87  def media_artist(self) -> str | None:
88  """Artist of current playing media, music track only."""
89  if artist := self.getget("vehicle_state_media_info_now_playing_artist"):
90  return artist
91  return None
92 
93  @property
94  def media_album_name(self) -> str | None:
95  """Album name of current playing media, music track only."""
96  if album := self.getget("vehicle_state_media_info_now_playing_album"):
97  return album
98  return None
99 
100  @property
101  def media_playlist(self) -> str | None:
102  """Title of Playlist currently playing."""
103  if playlist := self.getget("vehicle_state_media_info_now_playing_station"):
104  return playlist
105  return None
106 
107  @property
108  def source(self) -> str | None:
109  """Name of the current input source."""
110  if source := self.getget("vehicle_state_media_info_now_playing_source"):
111  return source
112  return None
Any get(self, str|None key=None, Any|None default=None)
Definition: entity.py:52
None async_setup_entry(HomeAssistant hass, TessieConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: media_player.py:30