Use ._attr_* properties for monoprice integration (#80505)

This commit is contained in:
Sean Vig 2022-10-26 04:24:47 -04:00 committed by GitHub
parent e15f2e050e
commit 8714fc5c2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5,6 +5,7 @@ from serial import SerialException
from homeassistant import core
from homeassistant.components.media_player import (
MediaPlayerDeviceClass,
MediaPlayerEntity,
MediaPlayerEntityFeature,
MediaPlayerState,
@ -27,6 +28,7 @@ from .const import (
_LOGGER = logging.getLogger(__name__)
MAX_VOLUME = 38
PARALLEL_UPDATES = 1
@ -114,6 +116,7 @@ async def async_setup_entry(
class MonopriceZone(MediaPlayerEntity):
"""Representation of a Monoprice amplifier zone."""
_attr_device_class = MediaPlayerDeviceClass.RECEIVER
_attr_supported_features = (
MediaPlayerEntityFeature.VOLUME_MUTE
| MediaPlayerEntityFeature.VOLUME_SET
@ -131,16 +134,18 @@ class MonopriceZone(MediaPlayerEntity):
# dict source name -> source_id
self._source_name_id = sources[1]
# ordered list of all source names
self._source_names = sources[2]
self._attr_source_list = sources[2]
self._zone_id = zone_id
self._unique_id = f"{namespace}_{self._zone_id}"
self._name = f"Zone {self._zone_id}"
self._attr_unique_id = f"{namespace}_{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._state = None
self._volume = None
self._source = None
self._mute = None
self._update_success = True
def update(self) -> None:
@ -156,71 +161,24 @@ class MonopriceZone(MediaPlayerEntity):
self._update_success = False
return
self._state = MediaPlayerState.ON if state.power else MediaPlayerState.OFF
self._volume = state.volume
self._mute = state.mute
self._attr_state = MediaPlayerState.ON if state.power else MediaPlayerState.OFF
self._attr_volume_level = state.volume / MAX_VOLUME
self._attr_is_volume_muted = state.mute
idx = state.source
if idx in self._source_id_name:
self._source = self._source_id_name[idx]
self._attr_source = self._source_id_name[idx]
else:
self._source = None
self._attr_source = None
@property
def entity_registry_enabled_default(self) -> bool:
"""Return if the entity should be enabled when first added to the entity registry."""
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
def media_title(self):
"""Return the current source as medial title."""
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
return self.source
def snapshot(self):
"""Save zone's current state."""
@ -253,16 +211,18 @@ class MonopriceZone(MediaPlayerEntity):
def set_volume_level(self, volume: float) -> None:
"""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:
"""Volume up the media player."""
if self._volume is None:
if self.volume_level is None:
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:
"""Volume down media player."""
if self._volume is None:
if self.volume_level is None:
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))