mirror of https://github.com/home-assistant/core
72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
"""Entity representing a Bang & Olufsen device."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import cast
|
|
|
|
from mozart_api.models import (
|
|
PlaybackContentMetadata,
|
|
PlaybackProgress,
|
|
RenderingState,
|
|
Source,
|
|
VolumeLevel,
|
|
VolumeMute,
|
|
VolumeState,
|
|
)
|
|
from mozart_api.mozart_client import MozartClient
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import CONF_HOST
|
|
from homeassistant.core import callback
|
|
from homeassistant.helpers.device_registry import DeviceInfo
|
|
from homeassistant.helpers.entity import Entity
|
|
|
|
from .const import DOMAIN
|
|
|
|
|
|
class BangOlufsenBase:
|
|
"""Base class for BangOlufsen Home Assistant objects."""
|
|
|
|
def __init__(self, entry: ConfigEntry, client: MozartClient) -> None:
|
|
"""Initialize the object."""
|
|
|
|
# Set the MozartClient
|
|
self._client = client
|
|
|
|
# get the input from the config entry.
|
|
self.entry: ConfigEntry = entry
|
|
|
|
# Set the configuration variables.
|
|
self._host: str = self.entry.data[CONF_HOST]
|
|
self._unique_id: str = cast(str, self.entry.unique_id)
|
|
|
|
# Objects that get directly updated by notifications.
|
|
self._playback_metadata: PlaybackContentMetadata = PlaybackContentMetadata()
|
|
self._playback_progress: PlaybackProgress = PlaybackProgress(total_duration=0)
|
|
self._playback_source: Source = Source()
|
|
self._playback_state: RenderingState = RenderingState()
|
|
self._source_change: Source = Source()
|
|
self._volume: VolumeState = VolumeState(
|
|
level=VolumeLevel(level=0), muted=VolumeMute(muted=False)
|
|
)
|
|
|
|
|
|
class BangOlufsenEntity(Entity, BangOlufsenBase):
|
|
"""Base Entity for BangOlufsen entities."""
|
|
|
|
_attr_has_entity_name = True
|
|
_attr_should_poll = False
|
|
|
|
def __init__(self, entry: ConfigEntry, client: MozartClient) -> None:
|
|
"""Initialize the object."""
|
|
super().__init__(entry, client)
|
|
|
|
self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, self._unique_id)})
|
|
|
|
@callback
|
|
def _async_update_connection_state(self, connection_state: bool) -> None:
|
|
"""Update entity connection state."""
|
|
self._attr_available = connection_state
|
|
|
|
self.async_write_ha_state()
|