diff --git a/custom_components/airsend/cover.py b/custom_components/airsend/cover.py index d21d68f..ce68b03 100644 --- a/custom_components/airsend/cover.py +++ b/custom_components/airsend/cover.py @@ -6,6 +6,7 @@ from .device import Device from homeassistant.components.cover import CoverEntity from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType +from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.const import CONF_DEVICES, CONF_INTERNAL_URL from . import DOMAIN @@ -26,7 +27,7 @@ async def async_setup_platform( async_add_entities([entity]) -class AirSendCover(CoverEntity): +class AirSendCover(CoverEntity, RestoreEntity): """Representation of an AirSend Cover.""" def __init__( @@ -43,6 +44,33 @@ class AirSendCover(CoverEntity): if device.is_cover_with_position: self._attr_current_cover_position = 50 + async def async_added_to_hass(self): + """Restore last known state when added to hass.""" + await super().async_added_to_hass() + + # Get the last known state + last_state = await self.async_get_last_state() + + if last_state: + # Restore position for covers with position support (type 4099) + if self._device.is_cover_with_position: + # Try to restore position from attributes + if last_state.attributes.get('current_position') is not None: + self._attr_current_cover_position = last_state.attributes['current_position'] + + # Override position based on state if fully open/closed + if last_state.state == 'closed': + self._attr_current_cover_position = 0 + elif last_state.state == 'open': + self._attr_current_cover_position = 100 + + # Restore closed/open state for all covers + if last_state.state == 'closed': + self._closed = True + elif last_state.state == 'open': + self._closed = False + # If no last_state, keep the defaults (50% for position covers) + @property def unique_id(self): """Return unique identifier of remote device."""