1 """Media player platform for Tesla Fleet integration."""
3 from __future__
import annotations
5 from tesla_fleet_api.const
import Scope
8 MediaPlayerDeviceClass,
10 MediaPlayerEntityFeature,
16 from .
import TeslaFleetConfigEntry
17 from .entity
import TeslaFleetVehicleEntity
18 from .helpers
import handle_vehicle_command
19 from .models
import TeslaFleetVehicleData
22 "Playing": MediaPlayerState.PLAYING,
23 "Paused": MediaPlayerState.PAUSED,
24 "Stopped": MediaPlayerState.IDLE,
25 "Off": MediaPlayerState.OFF,
35 entry: TeslaFleetConfigEntry,
36 async_add_entities: AddEntitiesCallback,
38 """Set up the Tesla Fleet Media platform from a config entry."""
42 for vehicle
in entry.runtime_data.vehicles
47 """Vehicle media player class."""
49 _attr_device_class = MediaPlayerDeviceClass.SPEAKER
50 _attr_supported_features = (
51 MediaPlayerEntityFeature.NEXT_TRACK
52 | MediaPlayerEntityFeature.PAUSE
53 | MediaPlayerEntityFeature.PLAY
54 | MediaPlayerEntityFeature.PREVIOUS_TRACK
55 | MediaPlayerEntityFeature.VOLUME_SET
57 _volume_max: float = VOLUME_MAX
61 data: TeslaFleetVehicleData,
64 """Initialize the media player entity."""
71 """Update entity attributes."""
73 self.
getget(
"vehicle_state_media_info_audio_volume_max")
or VOLUME_MAX
76 self.
getget(
"vehicle_state_media_info_media_playback_status")
or "Off",
82 self.
getget(
"vehicle_state_media_info_audio_volume_increment")
87 if volume := self.
getget(
"vehicle_state_media_info_audio_volume"):
92 if duration := self.
getget(
"vehicle_state_media_info_now_playing_duration"):
98 position := self.
getget(
"vehicle_state_media_info_now_playing_elapsed")
106 "vehicle_state_media_info_now_playing_artist"
109 "vehicle_state_media_info_now_playing_album"
112 "vehicle_state_media_info_now_playing_station"
114 self.
_attr_source_attr_source = self.
getget(
"vehicle_state_media_info_now_playing_source")
117 """Set volume level, range 0..1."""
126 """Send play command."""
130 self.
_attr_state_attr_state = MediaPlayerState.PLAYING
134 """Send pause command."""
138 self.
_attr_state_attr_state = MediaPlayerState.PAUSED
142 """Send next track command."""
147 """Send previous track command."""
Any|None get(self, str key, Any|None default=None)
None wake_up_if_asleep(self)
None async_write_ha_state(self)
bool handle_vehicle_command(Awaitable command)