1 """Support for AirGradient number entities."""
3 from collections.abc
import Awaitable, Callable
4 from dataclasses
import dataclass
6 from airgradient
import AirGradientClient, Config
7 from airgradient.models
import ConfigurationControl
10 DOMAIN
as NUMBER_DOMAIN,
12 NumberEntityDescription,
19 from .
import AirGradientConfigEntry
20 from .const
import DOMAIN
21 from .coordinator
import AirGradientCoordinator
22 from .entity
import AirGradientEntity
25 @dataclass(frozen=True, kw_only=True)
27 """Describes AirGradient number entity."""
29 value_fn: Callable[[Config], int]
30 set_value_fn: Callable[[AirGradientClient, int], Awaitable[
None]]
34 key=
"display_brightness",
35 translation_key=
"display_brightness",
36 entity_category=EntityCategory.CONFIG,
40 native_unit_of_measurement=PERCENTAGE,
41 value_fn=
lambda config: config.display_brightness,
42 set_value_fn=
lambda client, value: client.set_display_brightness(value),
46 key=
"led_bar_brightness",
47 translation_key=
"led_bar_brightness",
48 entity_category=EntityCategory.CONFIG,
52 native_unit_of_measurement=PERCENTAGE,
53 value_fn=
lambda config: config.led_bar_brightness,
54 set_value_fn=
lambda client, value: client.set_led_bar_brightness(value),
60 entry: AirGradientConfigEntry,
61 async_add_entities: AddEntitiesCallback,
63 """Set up AirGradient number entities based on a config entry."""
65 coordinator = entry.runtime_data
66 model = coordinator.data.measures.model
68 added_entities =
False
71 def _async_check_entities() -> None:
72 nonlocal added_entities
75 coordinator.data.config.configuration_control
is ConfigurationControl.LOCAL
76 and not added_entities
87 coordinator.data.config.configuration_control
88 is not ConfigurationControl.LOCAL
91 entity_registry = er.async_get(hass)
92 for entity_description
in (DISPLAY_BRIGHTNESS, LED_BAR_BRIGHTNESS):
93 unique_id = f
"{coordinator.serial_number}-{entity_description.key}"
94 if entity_id := entity_registry.async_get_entity_id(
95 NUMBER_DOMAIN, DOMAIN, unique_id
97 entity_registry.async_remove(entity_id)
98 added_entities =
False
100 coordinator.async_add_listener(_async_check_entities)
101 _async_check_entities()
105 """Defines an AirGradient number entity."""
107 entity_description: AirGradientNumberEntityDescription
111 coordinator: AirGradientCoordinator,
112 description: AirGradientNumberEntityDescription,
114 """Initialize AirGradient number."""
117 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.serial_number}-{description.key}"
121 """Return the state of the number."""
125 """Set the selected value."""
None __init__(self, AirGradientCoordinator coordinator, AirGradientNumberEntityDescription description)
int|None native_value(self)
None async_set_native_value(self, float value)
None async_request_refresh(self)
None async_setup_entry(HomeAssistant hass, AirGradientConfigEntry entry, AddEntitiesCallback async_add_entities)