Home Assistant Unofficial Reference 2024.12.1
time.py
Go to the documentation of this file.
1 """Renson ventilation unit time."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from datetime import datetime, time
8 
9 from renson_endura_delta.field_enum import DAYTIME_FIELD, NIGHTTIME_FIELD, FieldEnum
10 from renson_endura_delta.renson import RensonVentilation
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, callback
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from . import RensonData
19 from .const import DOMAIN
20 from .coordinator import RensonCoordinator
21 from .entity import RensonEntity
22 
23 
24 @dataclass(kw_only=True, frozen=True)
26  """Class describing Renson time entity."""
27 
28  action_fn: Callable[[RensonVentilation, str], None]
29  field: FieldEnum
30 
31 
32 ENTITY_DESCRIPTIONS: tuple[RensonTimeEntityDescription, ...] = (
34  key="day_time",
35  entity_category=EntityCategory.CONFIG,
36  translation_key="day_time",
37  action_fn=lambda api, time: api.set_day_time(time),
38  field=DAYTIME_FIELD,
39  ),
41  key="night_time",
42  translation_key="night_time",
43  entity_category=EntityCategory.CONFIG,
44  action_fn=lambda api, time: api.set_night_time(time),
45  field=NIGHTTIME_FIELD,
46  ),
47 )
48 
49 
51  hass: HomeAssistant,
52  config_entry: ConfigEntry,
53  async_add_entities: AddEntitiesCallback,
54 ) -> None:
55  """Set up the Renson time platform."""
56 
57  data: RensonData = hass.data[DOMAIN][config_entry.entry_id]
58 
59  entities = [
60  RensonTime(description, data.coordinator) for description in ENTITY_DESCRIPTIONS
61  ]
62 
63  async_add_entities(entities)
64 
65 
67  """Representation of a Renson time entity."""
68 
69  entity_description: RensonTimeEntityDescription
70  _attr_has_entity_name = True
71 
72  def __init__(
73  self,
74  description: RensonTimeEntityDescription,
75  coordinator: RensonCoordinator,
76  ) -> None:
77  """Initialize class."""
78  super().__init__(description.key, coordinator.api, coordinator)
79 
80  self.entity_descriptionentity_description = description
81 
82  @callback
83  def _handle_coordinator_update(self) -> None:
84  """Handle updated data from the coordinator."""
85 
86  all_data = self.coordinator.data
87 
88  value = self.apiapiapi.get_field_value(all_data, self.entity_descriptionentity_description.field.name)
89 
90  self._attr_native_value_attr_native_value = datetime.strptime(
91  value,
92  "%H:%M",
93  ).time()
94 
96 
97  def set_value(self, value: time) -> None:
98  """Triggers the action."""
99 
100  string_value = value.strftime("%H:%M")
101  self.entity_descriptionentity_description.action_fn(self.apiapiapi, string_value)
None __init__(self, RensonTimeEntityDescription description, RensonCoordinator coordinator)
Definition: time.py:76
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: time.py:54
bool time(HomeAssistant hass, dt_time|str|None before=None, dt_time|str|None after=None, str|Container[str]|None weekday=None)
Definition: condition.py:802