Home Assistant Unofficial Reference 2024.12.1
time.py
Go to the documentation of this file.
1 """Number support for Melnor Bluetooth water timer."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable, Coroutine
6 from dataclasses import dataclass
7 from datetime import time
8 from typing import Any
9 
10 from melnor_bluetooth.device import Valve
11 
12 from homeassistant.components.time import TimeEntity, TimeEntityDescription
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.const import EntityCategory
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from .const import DOMAIN
19 from .coordinator import MelnorDataUpdateCoordinator
20 from .entity import MelnorZoneEntity, get_entities_for_valves
21 
22 
23 @dataclass(frozen=True, kw_only=True)
25  """Describes Melnor number entity."""
26 
27  set_time_fn: Callable[[Valve, time], Coroutine[Any, Any, None]]
28  state_fn: Callable[[Valve], Any]
29 
30 
31 ZONE_ENTITY_DESCRIPTIONS: list[MelnorZoneTimeEntityDescription] = [
33  entity_category=EntityCategory.CONFIG,
34  key="frequency_start_time",
35  translation_key="frequency_start_time",
36  set_time_fn=lambda valve, value: valve.set_frequency_start_time(value),
37  state_fn=lambda valve: valve.frequency.start_time,
38  ),
39 ]
40 
41 
43  hass: HomeAssistant,
44  config_entry: ConfigEntry,
45  async_add_entities: AddEntitiesCallback,
46 ) -> None:
47  """Set up the number platform."""
48 
49  coordinator: MelnorDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
50 
52  get_entities_for_valves(
53  coordinator,
54  ZONE_ENTITY_DESCRIPTIONS,
55  lambda valve, description: MelnorZoneTime(coordinator, description, valve),
56  )
57  )
58 
59 
61  """A time implementation for a melnor device."""
62 
63  entity_description: MelnorZoneTimeEntityDescription
64 
65  def __init__(
66  self,
67  coordinator: MelnorDataUpdateCoordinator,
68  entity_description: MelnorZoneTimeEntityDescription,
69  valve: Valve,
70  ) -> None:
71  """Initialize a number for a melnor device."""
72  super().__init__(coordinator, entity_description, valve)
73 
74  @property
75  def native_value(self) -> time | None:
76  """Return the current value."""
77  return self.entity_descriptionentity_description.state_fn(self._valve_valve)
78 
79  async def async_set_value(self, value: time) -> None:
80  """Update the current value."""
81  await self.entity_descriptionentity_description.set_time_fn(self._valve_valve, value)
None __init__(self, MelnorDataUpdateCoordinator coordinator, MelnorZoneTimeEntityDescription entity_description, Valve valve)
Definition: time.py:70
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: time.py:46