1 """Number support for Melnor Bluetooth water timer."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
9 from melnor_bluetooth.device
import Valve
13 NumberEntityDescription,
21 from .const
import DOMAIN
22 from .coordinator
import MelnorDataUpdateCoordinator
23 from .entity
import MelnorZoneEntity, get_entities_for_valves
26 @dataclass(frozen=True, kw_only=True)
28 """Describes Melnor number entity."""
30 set_num_fn: Callable[[Valve, int], Coroutine[Any, Any,
None]]
31 state_fn: Callable[[Valve], Any]
34 ZONE_ENTITY_DESCRIPTIONS: list[MelnorZoneNumberEntityDescription] = [
36 entity_category=EntityCategory.CONFIG,
40 translation_key=
"manual_minutes",
41 native_unit_of_measurement=UnitOfTime.MINUTES,
42 set_num_fn=
lambda valve, value: valve.set_manual_watering_minutes(value),
43 state_fn=
lambda valve: valve.manual_watering_minutes,
46 entity_category=EntityCategory.CONFIG,
49 key=
"frequency_interval_hours",
50 translation_key=
"frequency_interval_hours",
51 native_unit_of_measurement=UnitOfTime.HOURS,
52 set_num_fn=
lambda valve, value: valve.set_frequency_interval_hours(value),
53 state_fn=
lambda valve: valve.frequency.interval_hours,
56 entity_category=EntityCategory.CONFIG,
59 key=
"frequency_duration_minutes",
60 translation_key=
"frequency_duration_minutes",
61 native_unit_of_measurement=UnitOfTime.MINUTES,
62 set_num_fn=
lambda valve, value: valve.set_frequency_duration_minutes(value),
63 state_fn=
lambda valve: valve.frequency.duration_minutes,
70 config_entry: ConfigEntry,
71 async_add_entities: AddEntitiesCallback,
73 """Set up the number platform."""
75 coordinator: MelnorDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
78 get_entities_for_valves(
80 ZONE_ENTITY_DESCRIPTIONS,
82 coordinator, description, valve
89 """A number implementation for a melnor device."""
91 entity_description: MelnorZoneNumberEntityDescription
92 _attr_mode = NumberMode.BOX
96 coordinator: MelnorDataUpdateCoordinator,
97 entity_description: MelnorZoneNumberEntityDescription,
100 """Initialize a number for a melnor device."""
101 super().
__init__(coordinator, entity_description, valve)
105 """Return the current value."""
109 """Update the current value."""
None async_set_native_value(self, float value)
None __init__(self, MelnorDataUpdateCoordinator coordinator, MelnorZoneNumberEntityDescription entity_description, Valve valve)
float|None native_value(self)
None _async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)