33from homeassistant .core import HomeAssistant
44from homeassistant .config_entries import ConfigEntry
55from homeassistant .helpers .entity_platform import AddEntitiesCallback
6+ from homeassistant .helpers .restore_state import RestoreEntity
67from homeassistant .helpers .update_coordinator import DataUpdateCoordinator
78
89from custom_components .eight_sleep import EightSleepBaseEntity , EightSleepConfigEntryData
3031 icon = "mdi:head" ,
3132)
3233
34+ SNOOZE_MINUTES_DESCRIPTION = NumberEntityDescription (
35+ key = "alarm_snooze_minutes" ,
36+ native_unit_of_measurement = "min" ,
37+ native_max_value = 30 ,
38+ native_min_value = 5 ,
39+ native_step = 1 ,
40+ name = "Alarm Snooze Minutes" ,
41+ icon = "mdi:alarm-snooze" ,
42+ )
43+
3344
3445async def async_setup_entry (
3546 hass : HomeAssistant , entry : ConfigEntry , async_add_entities : AddEntitiesCallback
@@ -40,6 +51,21 @@ async def async_setup_entry(
4051
4152 entities : list [NumberEntity ] = []
4253
54+ # Add snooze minutes number entity for each user
55+ for user in eight .users .values ():
56+ entities .append (
57+ EightNumberEntity (
58+ entry ,
59+ config_entry_data .user_coordinator ,
60+ eight ,
61+ user ,
62+ SNOOZE_MINUTES_DESCRIPTION ,
63+ lambda u = user : u .snooze_minutes ,
64+ lambda value , u = user : setattr (u , 'snooze_minutes' , int (value )),
65+ base_entity = False ,
66+ )
67+ )
68+
4369 user = eight .base_user
4470 if user :
4571 def set_leg_angle (value ):
@@ -71,7 +97,7 @@ def set_torso_angle(value):
7197 async_add_entities (entities )
7298
7399
74- class EightNumberEntity (EightSleepBaseEntity , NumberEntity ):
100+ class EightNumberEntity (EightSleepBaseEntity , NumberEntity , RestoreEntity ):
75101
76102 def __init__ (
77103 self ,
@@ -81,13 +107,24 @@ def __init__(
81107 user : EightUser | None ,
82108 entity_description : NumberEntityDescription ,
83109 value_getter : Callable [[], float | None ],
84- set_value_callback : Callable [[float ], None ]
110+ set_value_callback : Callable [[float ], None ],
111+ base_entity : bool = True ,
85112 ):
86- super ().__init__ (entry , coordinator , eight , user , entity_description .key , base_entity = True )
113+ super ().__init__ (entry , coordinator , eight , user , entity_description .key , base_entity = base_entity )
87114 self .entity_description = entity_description
88115 self ._value_getter = value_getter
89116 self ._set_value_callback = set_value_callback
90117
118+ async def async_added_to_hass (self ) -> None :
119+ """Restore previous value on startup."""
120+ await super ().async_added_to_hass ()
121+ last_state = await self .async_get_last_state ()
122+ if last_state and last_state .state not in (None , "unknown" , "unavailable" ):
123+ try :
124+ self ._set_value_callback (float (last_state .state ))
125+ except (ValueError , TypeError ):
126+ pass
127+
91128 @property
92129 def native_value (self ) -> float | None :
93130 return self ._value_getter ()
0 commit comments