1 """Support for SleepIQ SleepNumber firmness number entities."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
7 from typing
import Any, cast
9 from asyncsleepiq
import (
30 from .coordinator
import SleepIQData, SleepIQDataUpdateCoordinator
31 from .entity
import SleepIQBedEntity, sleeper_for_side
34 @dataclass(frozen=True, kw_only=True)
36 """Class to describe a SleepIQ number entity."""
38 value_fn: Callable[[Any], float]
39 set_value_fn: Callable[[Any, int], Coroutine[
None,
None,
None]]
40 get_name_fn: Callable[[SleepIQBed, Any], str]
41 get_unique_id_fn: Callable[[SleepIQBed, Any], str]
45 await sleeper.set_sleepnumber(firmness)
49 actuator: SleepIQActuator, position: int
51 await actuator.set_position(position)
58 f
" {bed.name} {actuator.side_full} {actuator.actuator_full} {ENTITY_TYPES[ACTUATOR]}"
61 return f
"SleepNumber {bed.name} {actuator.actuator_full} {ENTITY_TYPES[ACTUATOR]}"
66 return f
"{bed.id}_{actuator.side.value}_{actuator.actuator}"
68 return f
"{bed.id}_{actuator.actuator}"
72 return f
"SleepNumber {bed.name} {sleeper.name} {ENTITY_TYPES[FIRMNESS]}"
76 return f
"{sleeper.sleeper_id}_{FIRMNESS}"
80 foot_warmer: SleepIQFootWarmer, time: int
82 temperature = FootWarmingTemps(foot_warmer.temperature)
83 if temperature != FootWarmingTemps.OFF:
84 await foot_warmer.turn_on(temperature, time)
86 foot_warmer.timer = time
91 return f
"SleepNumber {bed.name} {sleeper.name} {ENTITY_TYPES[FOOT_WARMING_TIMER]}"
95 return f
"{bed.id}_{foot_warmer.side.value}_{FOOT_WARMING_TIMER}"
98 NUMBER_DESCRIPTIONS: dict[str, SleepIQNumberEntityDescription] = {
102 native_max_value=100,
104 name=ENTITY_TYPES[FIRMNESS],
106 value_fn=
lambda sleeper: cast(float, sleeper.sleep_number),
107 set_value_fn=_async_set_firmness,
108 get_name_fn=_get_sleeper_name,
109 get_unique_id_fn=_get_sleeper_unique_id,
114 native_max_value=100,
116 name=ENTITY_TYPES[ACTUATOR],
118 value_fn=
lambda actuator: cast(float, actuator.position),
119 set_value_fn=_async_set_actuator_position,
120 get_name_fn=_get_actuator_name,
121 get_unique_id_fn=_get_actuator_unique_id,
124 key=FOOT_WARMING_TIMER,
126 native_max_value=360,
128 name=ENTITY_TYPES[FOOT_WARMING_TIMER],
130 value_fn=
lambda foot_warmer: foot_warmer.timer,
131 set_value_fn=_async_set_foot_warmer_time,
132 get_name_fn=_get_foot_warming_name,
133 get_unique_id_fn=_get_foot_warming_unique_id,
141 async_add_entities: AddEntitiesCallback,
143 """Set up the SleepIQ bed sensors."""
144 data: SleepIQData = hass.data[DOMAIN][entry.entry_id]
146 entities: list[SleepIQNumberEntity] = []
147 for bed
in data.client.beds.values():
150 data.data_coordinator,
153 NUMBER_DESCRIPTIONS[FIRMNESS],
155 for sleeper
in bed.sleepers
159 data.data_coordinator,
162 NUMBER_DESCRIPTIONS[ACTUATOR],
164 for actuator
in bed.foundation.actuators
168 data.data_coordinator,
171 NUMBER_DESCRIPTIONS[FOOT_WARMING_TIMER],
173 for foot_warmer
in bed.foundation.foot_warmers
180 """Representation of a SleepIQ number entity."""
182 entity_description: SleepIQNumberEntityDescription
183 _attr_icon =
"mdi:bed"
187 coordinator: SleepIQDataUpdateCoordinator,
190 description: SleepIQNumberEntityDescription,
192 """Initialize the number."""
196 self.
_attr_name_attr_name = description.get_name_fn(bed, device)
205 """Update number attributes."""
209 """Set the number value."""
None async_set_native_value(self, float value)
None __init__(self, SleepIQDataUpdateCoordinator coordinator, SleepIQBed bed, Any device, SleepIQNumberEntityDescription description)
None _async_update_attrs(self)
None async_write_ha_state(self)
SleepIQSleeper sleeper_for_side(SleepIQBed bed, str side)
None _async_set_foot_warmer_time(SleepIQFootWarmer foot_warmer, int time)
str _get_sleeper_name(SleepIQBed bed, SleepIQSleeper sleeper)
str _get_sleeper_unique_id(SleepIQBed bed, SleepIQSleeper sleeper)
str _get_foot_warming_name(SleepIQBed bed, SleepIQFootWarmer foot_warmer)
None _async_set_actuator_position(SleepIQActuator actuator, int position)
str _get_actuator_unique_id(SleepIQBed bed, SleepIQActuator actuator)
str _get_foot_warming_unique_id(SleepIQBed bed, SleepIQFootWarmer foot_warmer)
str _get_actuator_name(SleepIQBed bed, SleepIQActuator actuator)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
None _async_set_firmness(SleepIQSleeper sleeper, int firmness)