1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-30 12:14:20 +01:00
Files
2026-04-30 21:14:48 +02:00

72 lines
2.4 KiB
Python

"""The number platform for rainbird."""
import logging
from pyrainbird.exceptions import RainbirdApiException, RainbirdDeviceBusyException
from homeassistant.components.number import NumberEntity
from homeassistant.const import UnitOfTime
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .coordinator import RainbirdUpdateCoordinator
from .types import RainbirdConfigEntry
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(
hass: HomeAssistant,
config_entry: RainbirdConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up entry for a Rain Bird number platform."""
async_add_entities(
[
RainDelayNumber(
config_entry.runtime_data.coordinator,
)
]
)
class RainDelayNumber(CoordinatorEntity[RainbirdUpdateCoordinator], NumberEntity):
"""A number implementation for the rain delay."""
_attr_native_min_value = 0
_attr_native_max_value = 14
_attr_native_step = 1
_attr_native_unit_of_measurement = UnitOfTime.DAYS
_attr_translation_key = "rain_delay"
_attr_has_entity_name = True
def __init__(
self,
coordinator: RainbirdUpdateCoordinator,
) -> None:
"""Initialize the Rain Bird sensor."""
super().__init__(coordinator)
if coordinator.unique_id is not None:
self._attr_unique_id = f"{coordinator.unique_id}-rain-delay"
self._attr_device_info = coordinator.device_info
else:
self._attr_name = f"{coordinator.device_name} Rain delay"
@property
def native_value(self) -> float | None:
"""Return the value reported by the sensor."""
return self.coordinator.data.rain_delay
async def async_set_native_value(self, value: float) -> None:
"""Update the current value."""
try:
await self.coordinator.controller.set_rain_delay(value)
except RainbirdDeviceBusyException as err:
raise HomeAssistantError(
"Rain Bird device is busy; Wait and try again"
) from err
except RainbirdApiException as err:
raise HomeAssistantError("Rain Bird device failure") from err