Home Assistant Unofficial Reference 2024.12.1
number.py
Go to the documentation of this file.
1 """Support for TechnoVE number entities."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable, Coroutine
6 from dataclasses import dataclass
7 from typing import Any
8 
9 from technove import MIN_CURRENT, TechnoVE
10 
12  NumberDeviceClass,
13  NumberEntity,
14  NumberEntityDescription,
15  NumberMode,
16 )
17 from homeassistant.const import EntityCategory
18 from homeassistant.core import HomeAssistant
19 from homeassistant.exceptions import ServiceValidationError
20 from homeassistant.helpers.entity_platform import AddEntitiesCallback
21 
22 from . import TechnoVEConfigEntry
23 from .const import DOMAIN
24 from .coordinator import TechnoVEDataUpdateCoordinator
25 from .entity import TechnoVEEntity
26 from .helpers import technove_exception_handler
27 
28 
29 @dataclass(frozen=True, kw_only=True)
31  """Describes TechnoVE number entity."""
32 
33  native_max_value_fn: Callable[[TechnoVE], float]
34  native_value_fn: Callable[[TechnoVE], float]
35  set_value_fn: Callable[
36  [TechnoVEDataUpdateCoordinator, float], Coroutine[Any, Any, None]
37  ]
38 
39 
40 async def _set_max_current(
41  coordinator: TechnoVEDataUpdateCoordinator, value: float
42 ) -> None:
43  if coordinator.data.info.in_sharing_mode:
45  translation_domain=DOMAIN, translation_key="max_current_in_sharing_mode"
46  )
47  await coordinator.technove.set_max_current(value)
48 
49 
50 NUMBERS = [
52  key="max_current",
53  translation_key="max_current",
54  entity_category=EntityCategory.CONFIG,
55  device_class=NumberDeviceClass.CURRENT,
56  mode=NumberMode.BOX,
57  native_step=1,
58  native_min_value=MIN_CURRENT,
59  native_max_value_fn=lambda station: station.info.max_station_current,
60  native_value_fn=lambda station: station.info.max_current,
61  set_value_fn=_set_max_current,
62  ),
63 ]
64 
65 
67  hass: HomeAssistant,
68  entry: TechnoVEConfigEntry,
69  async_add_entities: AddEntitiesCallback,
70 ) -> None:
71  """Set up TechnoVE number entity based on a config entry."""
73  TechnoVENumberEntity(entry.runtime_data, description) for description in NUMBERS
74  )
75 
76 
78  """Defines a TechnoVE number entity."""
79 
80  entity_description: TechnoVENumberDescription
81 
82  def __init__(
83  self,
84  coordinator: TechnoVEDataUpdateCoordinator,
85  description: TechnoVENumberDescription,
86  ) -> None:
87  """Initialize a TechnoVE switch entity."""
88  self.entity_descriptionentity_description = description
89  super().__init__(coordinator, description.key)
90 
91  @property
92  def native_max_value(self) -> float:
93  """Return the max value of the TechnoVE number entity."""
94  return self.entity_descriptionentity_description.native_max_value_fn(self.coordinator.data)
95 
96  @property
97  def native_value(self) -> float:
98  """Return the native value of the TechnoVE number entity."""
99  return self.entity_descriptionentity_description.native_value_fn(self.coordinator.data)
100 
101  @technove_exception_handler
102  async def async_set_native_value(self, value: float) -> None:
103  """Set the value for the TechnoVE number entity."""
104  await self.entity_descriptionentity_description.set_value_fn(self.coordinator, value)
None __init__(self, TechnoVEDataUpdateCoordinator coordinator, TechnoVENumberDescription description)
Definition: number.py:86
None async_setup_entry(HomeAssistant hass, TechnoVEConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: number.py:70
None _set_max_current(TechnoVEDataUpdateCoordinator coordinator, float value)
Definition: number.py:42