1 """Support for configuring different deCONZ numbers."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
9 from pydeconz.gateway
import DeconzSession
10 from pydeconz.interfaces.sensors
import SensorResources
11 from pydeconz.models.event
import EventType
12 from pydeconz.models.sensor
import SensorBase
as PydeconzSensorBase
13 from pydeconz.models.sensor.presence
import Presence
16 DOMAIN
as NUMBER_DOMAIN,
18 NumberEntityDescription,
25 from .entity
import DeconzDevice
26 from .hub
import DeconzHub
29 @dataclass(frozen=True, kw_only=True)
31 NumberEntityDescription
33 """Class describing deCONZ number entities."""
35 instance_check: type[_T]
37 set_fn: Callable[[DeconzSession, str, int], Coroutine[Any, Any, dict[str, Any]]]
39 value_fn: Callable[[_T], float |
None]
42 ENTITY_DESCRIPTIONS: tuple[DeconzNumberDescription, ...] = (
43 DeconzNumberDescription[Presence](
45 instance_check=Presence,
47 set_fn=
lambda api, id, v: api.sensors.presence.set_config(id=id, delay=v),
49 value_fn=
lambda device: device.delay,
50 native_max_value=65535,
53 entity_category=EntityCategory.CONFIG,
55 DeconzNumberDescription[Presence](
57 instance_check=Presence,
58 name_suffix=
"Duration",
59 set_fn=
lambda api, id, v: api.sensors.presence.set_config(id=id, duration=v),
60 update_key=
"duration",
61 value_fn=
lambda device: device.duration,
62 native_max_value=65535,
65 entity_category=EntityCategory.CONFIG,
72 config_entry: ConfigEntry,
73 async_add_entities: AddEntitiesCallback,
75 """Set up the deCONZ number entity."""
76 hub = DeconzHub.get_hub(hass, config_entry)
77 hub.entities[NUMBER_DOMAIN] = set()
80 def async_add_sensor(_: EventType, sensor_id: str) ->
None:
81 """Add sensor from deCONZ."""
82 sensor = hub.api.sensors.presence[sensor_id]
84 for description
in ENTITY_DESCRIPTIONS:
86 not isinstance(sensor, description.instance_check)
87 or description.value_fn(sensor)
is None
92 hub.register_platform_add_device_callback(
94 hub.api.sensors.presence,
95 always_ignore_clip_sensors=
True,
100 """Representation of a deCONZ number entity."""
103 entity_description: DeconzNumberDescription
107 device: SensorResources,
109 description: DeconzNumberDescription,
111 """Initialize deCONZ number entity."""
120 """Return the value of the sensor property."""
124 """Set sensor config."""
127 self._device.resource_id,
None async_set_native_value(self, float value)
None __init__(self, SensorResources device, DeconzHub hub, DeconzNumberDescription description)
float|None native_value(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)