1 """Support for number entities."""
3 from __future__
import annotations
5 from dataclasses
import dataclass, field
7 from gardena_bluetooth.const
import DeviceConfiguration, Sensor, Valve
8 from gardena_bluetooth.parse
import (
17 NumberEntityDescription,
24 from .
import GardenaBluetoothConfigEntry
25 from .coordinator
import GardenaBluetoothCoordinator
26 from .entity
import GardenaBluetoothDescriptorEntity, GardenaBluetoothEntity
29 @dataclass(frozen=True)
31 """Description of entity."""
33 char: CharacteristicInt | CharacteristicUInt16 | CharacteristicLong = field(
34 default_factory=
lambda: CharacteristicInt(
"")
36 connected_state: Characteristic |
None =
None
40 """Context needed for update coordinator."""
41 data = {self.char.uuid}
42 if self.connected_state:
43 data.add(self.connected_state.uuid)
49 key=Valve.manual_watering_time.uuid,
50 translation_key=
"manual_watering_time",
51 native_unit_of_measurement=UnitOfTime.SECONDS,
54 native_max_value=24 * 60 * 60,
56 entity_category=EntityCategory.CONFIG,
57 char=Valve.manual_watering_time,
60 key=Valve.remaining_open_time.uuid,
61 translation_key=
"remaining_open_time",
62 native_unit_of_measurement=UnitOfTime.SECONDS,
64 native_max_value=24 * 60 * 60,
66 entity_category=EntityCategory.DIAGNOSTIC,
67 char=Valve.remaining_open_time,
70 key=DeviceConfiguration.rain_pause.uuid,
71 translation_key=
"rain_pause",
72 native_unit_of_measurement=UnitOfTime.MINUTES,
75 native_max_value=7 * 24 * 60,
77 entity_category=EntityCategory.CONFIG,
78 char=DeviceConfiguration.rain_pause,
81 key=DeviceConfiguration.seasonal_adjust.uuid,
82 translation_key=
"seasonal_adjust",
83 native_unit_of_measurement=UnitOfTime.DAYS,
85 native_min_value=-128.0,
86 native_max_value=127.0,
88 entity_category=EntityCategory.CONFIG,
89 char=DeviceConfiguration.seasonal_adjust,
92 key=Sensor.threshold.uuid,
93 translation_key=
"sensor_threshold",
94 native_unit_of_measurement=PERCENTAGE,
97 native_max_value=100.0,
99 entity_category=EntityCategory.CONFIG,
100 char=Sensor.threshold,
101 connected_state=Sensor.connected_state,
108 entry: GardenaBluetoothConfigEntry,
109 async_add_entities: AddEntitiesCallback,
111 """Set up entity based on a config entry."""
112 coordinator = entry.runtime_data
113 entities: list[NumberEntity] = [
115 for description
in DESCRIPTIONS
116 if description.key
in coordinator.characteristics
118 if Valve.remaining_open_time.uuid
in coordinator.characteristics:
124 """Representation of a number."""
126 entity_description: GardenaBluetoothNumberEntityDescription
149 """Representation of a entity with remaining time."""
151 _attr_translation_key =
"remaining_open_set"
152 _attr_native_unit_of_measurement =
"min"
153 _attr_mode = NumberMode.BOX
154 _attr_native_min_value = 0.0
155 _attr_native_max_value = 24 * 60
156 _attr_native_step = 1.0
160 coordinator: GardenaBluetoothCoordinator,
162 """Initialize the remaining time entity."""
163 super().
__init__(coordinator, {Valve.remaining_open_time.uuid})
168 await self.coordinator.
write(Valve.remaining_open_time,
int(value * 60))
CharacteristicType|None get_cached(self, Characteristic[CharacteristicType] char)
None write(self, Characteristic[CharacteristicType] char, CharacteristicType value)
None async_set_native_value(self, float value)
None _handle_coordinator_update(self)
None __init__(self, GardenaBluetoothCoordinator coordinator)
None async_set_native_value(self, float value)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, GardenaBluetoothConfigEntry entry, AddEntitiesCallback async_add_entities)