1 """Media player platform for Teslemetry integration."""
3 from __future__
import annotations
5 from tesla_fleet_api.const
import Scope
8 MediaPlayerDeviceClass,
10 MediaPlayerEntityFeature,
16 from .
import TeslemetryConfigEntry
17 from .entity
import TeslemetryVehicleEntity
18 from .helpers
import handle_vehicle_command
19 from .models
import TeslemetryVehicleData
22 "Playing": MediaPlayerState.PLAYING,
23 "Paused": MediaPlayerState.PAUSED,
24 "Stopped": MediaPlayerState.IDLE,
25 "Off": MediaPlayerState.OFF,
35 entry: TeslemetryConfigEntry,
36 async_add_entities: AddEntitiesCallback,
38 """Set up the Teslemetry 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: TeslemetryVehicleData,
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."""
127 """Send play command."""
132 self.
_attr_state_attr_state = MediaPlayerState.PLAYING
136 """Send pause command."""
141 self.
_attr_state_attr_state = MediaPlayerState.PAUSED
145 """Send next track command."""
151 """Send previous track command."""
def raise_for_scope(self, Scope scope)
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)