1 """Base entity model."""
3 from __future__
import annotations
5 from typing
import TYPE_CHECKING
7 from music_assistant_models.enums
import EventType
8 from music_assistant_models.event
import MassEvent
9 from music_assistant_models.player
import Player
14 from .const
import DOMAIN
17 from music_assistant_client
import MusicAssistantClient
21 """Base Entity from Music Assistant Player."""
23 _attr_has_entity_name =
True
24 _attr_should_poll =
False
26 def __init__(self, mass: MusicAssistantClient, player_id: str) ->
None:
27 """Initialize MediaPlayer entity."""
30 provider = self.
massmass.get_provider(self.
playerplayer.provider)
32 assert provider
is not None
34 identifiers={(DOMAIN, player_id)},
35 manufacturer=self.
playerplayer.device_info.manufacturer
or provider.name,
36 model=self.
playerplayer.device_info.model
or self.
playerplayer.name,
37 name=self.
playerplayer.display_name,
38 configuration_url=f
"{mass.server_url}/#/settings/editplayer/{player_id}",
42 """Register callbacks."""
52 EventType.QUEUE_UPDATED,
58 """Return the Mass Player attached to this HA entity."""
63 """Return unique id for entity."""
65 if hasattr(self,
"entity_description"):
66 return f
"{_base}_{self.entity_description.key}"
71 """Return availability of entity."""
72 return self.
playerplayer.available
and bool(self.
massmass.connection.connected)
75 """Call when we receive an event from MusicAssistant."""
76 if event.event == EventType.QUEUE_UPDATED
and event.object_id
not in (
77 self.
playerplayer.active_source,
78 self.
playerplayer.active_group,
79 self.
playerplayer.player_id,
86 """Handle player updates."""
None async_added_to_hass(self)
None __init__(self, MusicAssistantClient mass, str player_id)
None __on_mass_update(self, MassEvent event)
None async_on_update(self)
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
Callable[[], None] subscribe(HomeAssistant hass, str topic, MessageCallbackType msg_callback, int qos=DEFAULT_QOS, str encoding="utf-8")