diff --git a/homeassistant/components/monoprice/media_player.py b/homeassistant/components/monoprice/media_player.py index 2f4a4a33f49..f6150ab1d22 100644 --- a/homeassistant/components/monoprice/media_player.py +++ b/homeassistant/components/monoprice/media_player.py @@ -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))