diff --git a/homeassistant/components/motionmount/select.py b/homeassistant/components/motionmount/select.py index b9001b55b7f..d15bbb7326b 100644 --- a/homeassistant/components/motionmount/select.py +++ b/homeassistant/components/motionmount/select.py @@ -24,7 +24,6 @@ class MotionMountPresets(MotionMountEntity, SelectEntity): """The presets of a MotionMount.""" _attr_translation_key = "motionmount_preset" - _attr_current_option: str | None = None def __init__( self, @@ -34,6 +33,7 @@ class MotionMountPresets(MotionMountEntity, SelectEntity): """Initialize Preset selector.""" super().__init__(mm, config_entry) self._attr_unique_id = f"{self._base_unique_id}-preset" + self._presets: list[motionmount.Preset] = [] def _update_options(self, presets: list[motionmount.Preset]) -> None: """Convert presets to select options.""" @@ -44,11 +44,30 @@ class MotionMountPresets(MotionMountEntity, SelectEntity): async def async_update(self) -> None: """Get latest state from MotionMount.""" - presets = await self.mm.get_presets() - self._update_options(presets) + self._presets = await self.mm.get_presets() + self._update_options(self._presets) - if self._attr_current_option is None: - self._attr_current_option = self._attr_options[0] + @property + def current_option(self) -> str | None: + """Get the current option.""" + # When the mount is moving we return the currently selected option + if self.mm.is_moving: + return self._attr_current_option + + # When the mount isn't moving we select the option that matches the current position + self._attr_current_option = None + if self.mm.extension == 0 and self.mm.turn == 0: + self._attr_current_option = self._attr_options[0] # Select Wall preset + else: + for preset in self._presets: + if ( + preset.extension == self.mm.extension + and preset.turn == self.mm.turn + ): + self._attr_current_option = f"{preset.index}: {preset.name}" + break + + return self._attr_current_option async def async_select_option(self, option: str) -> None: """Set the new option."""