mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 13:47:35 +00:00
Use ._attr_*
properties for monoprice integration (#80505)
This commit is contained in:
parent
e15f2e050e
commit
8714fc5c2c
@ -5,6 +5,7 @@ from serial import SerialException
|
|||||||
|
|
||||||
from homeassistant import core
|
from homeassistant import core
|
||||||
from homeassistant.components.media_player import (
|
from homeassistant.components.media_player import (
|
||||||
|
MediaPlayerDeviceClass,
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
MediaPlayerState,
|
MediaPlayerState,
|
||||||
@ -27,6 +28,7 @@ from .const import (
|
|||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
MAX_VOLUME = 38
|
||||||
PARALLEL_UPDATES = 1
|
PARALLEL_UPDATES = 1
|
||||||
|
|
||||||
|
|
||||||
@ -114,6 +116,7 @@ async def async_setup_entry(
|
|||||||
class MonopriceZone(MediaPlayerEntity):
|
class MonopriceZone(MediaPlayerEntity):
|
||||||
"""Representation of a Monoprice amplifier zone."""
|
"""Representation of a Monoprice amplifier zone."""
|
||||||
|
|
||||||
|
_attr_device_class = MediaPlayerDeviceClass.RECEIVER
|
||||||
_attr_supported_features = (
|
_attr_supported_features = (
|
||||||
MediaPlayerEntityFeature.VOLUME_MUTE
|
MediaPlayerEntityFeature.VOLUME_MUTE
|
||||||
| MediaPlayerEntityFeature.VOLUME_SET
|
| MediaPlayerEntityFeature.VOLUME_SET
|
||||||
@ -131,16 +134,18 @@ class MonopriceZone(MediaPlayerEntity):
|
|||||||
# dict source name -> source_id
|
# dict source name -> source_id
|
||||||
self._source_name_id = sources[1]
|
self._source_name_id = sources[1]
|
||||||
# ordered list of all source names
|
# ordered list of all source names
|
||||||
self._source_names = sources[2]
|
self._attr_source_list = sources[2]
|
||||||
self._zone_id = zone_id
|
self._zone_id = zone_id
|
||||||
self._unique_id = f"{namespace}_{self._zone_id}"
|
self._attr_unique_id = f"{namespace}_{self._zone_id}"
|
||||||
self._name = f"Zone {self._zone_id}"
|
self._attr_name = f"Zone {self._zone_id}"
|
||||||
|
self._attr_device_info = DeviceInfo(
|
||||||
|
identifiers={(DOMAIN, self._attr_unique_id)},
|
||||||
|
manufacturer="Monoprice",
|
||||||
|
model="6-Zone Amplifier",
|
||||||
|
name=self.name,
|
||||||
|
)
|
||||||
|
|
||||||
self._snapshot = None
|
self._snapshot = None
|
||||||
self._state = None
|
|
||||||
self._volume = None
|
|
||||||
self._source = None
|
|
||||||
self._mute = None
|
|
||||||
self._update_success = True
|
self._update_success = True
|
||||||
|
|
||||||
def update(self) -> None:
|
def update(self) -> None:
|
||||||
@ -156,71 +161,24 @@ class MonopriceZone(MediaPlayerEntity):
|
|||||||
self._update_success = False
|
self._update_success = False
|
||||||
return
|
return
|
||||||
|
|
||||||
self._state = MediaPlayerState.ON if state.power else MediaPlayerState.OFF
|
self._attr_state = MediaPlayerState.ON if state.power else MediaPlayerState.OFF
|
||||||
self._volume = state.volume
|
self._attr_volume_level = state.volume / MAX_VOLUME
|
||||||
self._mute = state.mute
|
self._attr_is_volume_muted = state.mute
|
||||||
idx = state.source
|
idx = state.source
|
||||||
if idx in self._source_id_name:
|
if idx in self._source_id_name:
|
||||||
self._source = self._source_id_name[idx]
|
self._attr_source = self._source_id_name[idx]
|
||||||
else:
|
else:
|
||||||
self._source = None
|
self._attr_source = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def entity_registry_enabled_default(self) -> bool:
|
def entity_registry_enabled_default(self) -> bool:
|
||||||
"""Return if the entity should be enabled when first added to the entity registry."""
|
"""Return if the entity should be enabled when first added to the entity registry."""
|
||||||
return self._zone_id < 20 or self._update_success
|
return self._zone_id < 20 or self._update_success
|
||||||
|
|
||||||
@property
|
|
||||||
def device_info(self) -> DeviceInfo:
|
|
||||||
"""Return device info for this device."""
|
|
||||||
return DeviceInfo(
|
|
||||||
identifiers={(DOMAIN, self.unique_id)},
|
|
||||||
manufacturer="Monoprice",
|
|
||||||
model="6-Zone Amplifier",
|
|
||||||
name=self.name,
|
|
||||||
)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def unique_id(self):
|
|
||||||
"""Return unique ID for this device."""
|
|
||||||
return self._unique_id
|
|
||||||
|
|
||||||
@property
|
|
||||||
def name(self):
|
|
||||||
"""Return the name of the zone."""
|
|
||||||
return self._name
|
|
||||||
|
|
||||||
@property
|
|
||||||
def state(self):
|
|
||||||
"""Return the state of the zone."""
|
|
||||||
return self._state
|
|
||||||
|
|
||||||
@property
|
|
||||||
def volume_level(self):
|
|
||||||
"""Volume level of the media player (0..1)."""
|
|
||||||
if self._volume is None:
|
|
||||||
return None
|
|
||||||
return self._volume / 38.0
|
|
||||||
|
|
||||||
@property
|
|
||||||
def is_volume_muted(self):
|
|
||||||
"""Boolean if volume is currently muted."""
|
|
||||||
return self._mute
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def media_title(self):
|
def media_title(self):
|
||||||
"""Return the current source as medial title."""
|
"""Return the current source as medial title."""
|
||||||
return self._source
|
return self.source
|
||||||
|
|
||||||
@property
|
|
||||||
def source(self):
|
|
||||||
"""Return the current input source of the device."""
|
|
||||||
return self._source
|
|
||||||
|
|
||||||
@property
|
|
||||||
def source_list(self):
|
|
||||||
"""List of available input sources."""
|
|
||||||
return self._source_names
|
|
||||||
|
|
||||||
def snapshot(self):
|
def snapshot(self):
|
||||||
"""Save zone's current state."""
|
"""Save zone's current state."""
|
||||||
@ -253,16 +211,18 @@ class MonopriceZone(MediaPlayerEntity):
|
|||||||
|
|
||||||
def set_volume_level(self, volume: float) -> None:
|
def set_volume_level(self, volume: float) -> None:
|
||||||
"""Set volume level, range 0..1."""
|
"""Set volume level, range 0..1."""
|
||||||
self._monoprice.set_volume(self._zone_id, int(volume * 38))
|
self._monoprice.set_volume(self._zone_id, round(volume * MAX_VOLUME))
|
||||||
|
|
||||||
def volume_up(self) -> None:
|
def volume_up(self) -> None:
|
||||||
"""Volume up the media player."""
|
"""Volume up the media player."""
|
||||||
if self._volume is None:
|
if self.volume_level is None:
|
||||||
return
|
return
|
||||||
self._monoprice.set_volume(self._zone_id, min(self._volume + 1, 38))
|
volume = round(self.volume_level * MAX_VOLUME)
|
||||||
|
self._monoprice.set_volume(self._zone_id, min(volume + 1, MAX_VOLUME))
|
||||||
|
|
||||||
def volume_down(self) -> None:
|
def volume_down(self) -> None:
|
||||||
"""Volume down media player."""
|
"""Volume down media player."""
|
||||||
if self._volume is None:
|
if self.volume_level is None:
|
||||||
return
|
return
|
||||||
self._monoprice.set_volume(self._zone_id, max(self._volume - 1, 0))
|
volume = round(self.volume_level * MAX_VOLUME)
|
||||||
|
self._monoprice.set_volume(self._zone_id, max(volume - 1, 0))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user