Add support for configuring built-in Melnor Bluetooth scheduling system (#93333)

This commit is contained in:
Justin Vanderhooft 2023-05-26 02:06:22 +01:00 committed by GitHub
parent e6a214595b
commit accee4b5ef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 335 additions and 25 deletions

View file

@ -8,9 +8,13 @@ from typing import Any
from melnor_bluetooth.device import Valve
from homeassistant.components.number import NumberEntity, NumberEntityDescription
from homeassistant.components.number import (
NumberEntity,
NumberEntityDescription,
NumberMode,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory
from homeassistant.const import EntityCategory, UnitOfTime
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -44,10 +48,33 @@ ZONE_ENTITY_DESCRIPTIONS: list[MelnorZoneNumberEntityDescription] = [
native_min_value=1,
icon="mdi:timer-cog-outline",
key="manual_minutes",
name="Manual Minutes",
name="Manual Duration",
native_unit_of_measurement=UnitOfTime.MINUTES,
set_num_fn=lambda valve, value: valve.set_manual_watering_minutes(value),
state_fn=lambda valve: valve.manual_watering_minutes,
)
),
MelnorZoneNumberEntityDescription(
entity_category=EntityCategory.CONFIG,
native_max_value=168,
native_min_value=1,
icon="mdi:calendar-refresh-outline",
key="frequency_interval_hours",
name="Schedule Interval",
native_unit_of_measurement=UnitOfTime.HOURS,
set_num_fn=lambda valve, value: valve.set_frequency_interval_hours(value),
state_fn=lambda valve: valve.frequency.interval_hours,
),
MelnorZoneNumberEntityDescription(
entity_category=EntityCategory.CONFIG,
native_max_value=360,
native_min_value=1,
icon="mdi:timer-outline",
key="frequency_duration_minutes",
name="Schedule Duration",
native_unit_of_measurement=UnitOfTime.MINUTES,
set_num_fn=lambda valve, value: valve.set_frequency_duration_minutes(value),
state_fn=lambda valve: valve.frequency.duration_minutes,
),
]
@ -75,6 +102,7 @@ class MelnorZoneNumber(MelnorZoneEntity, NumberEntity):
"""A number implementation for a melnor device."""
entity_description: MelnorZoneNumberEntityDescription
_attr_mode = NumberMode.BOX
def __init__(
self,
@ -88,7 +116,7 @@ class MelnorZoneNumber(MelnorZoneEntity, NumberEntity):
@property
def native_value(self) -> float | None:
"""Return the current value."""
return self._valve.manual_watering_minutes
return self.entity_description.state_fn(self._valve)
async def async_set_native_value(self, value: float) -> None:
"""Update the current value."""