Home Assistant Unofficial Reference 2024.12.1
number.py
Go to the documentation of this file.
1 """Number platform for V2C settings."""
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 pytrydan import Trydan, TrydanData
10 
12  NumberDeviceClass,
13  NumberEntity,
14  NumberEntityDescription,
15 )
16 from homeassistant.const import EntityCategory, UnitOfElectricCurrent
17 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
19 
20 from . import V2CConfigEntry
21 from .coordinator import V2CUpdateCoordinator
22 from .entity import V2CBaseEntity
23 
24 MIN_INTENSITY = 6
25 MAX_INTENSITY = 32
26 
27 
28 @dataclass(frozen=True, kw_only=True)
30  """Describes V2C EVSE number entity."""
31 
32  value_fn: Callable[[TrydanData], int]
33  update_fn: Callable[[Trydan, int], Coroutine[Any, Any, None]]
34 
35 
36 TRYDAN_NUMBER_SETTINGS = (
38  key="intensity",
39  translation_key="intensity",
40  device_class=NumberDeviceClass.CURRENT,
41  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
42  native_min_value=MIN_INTENSITY,
43  native_max_value=MAX_INTENSITY,
44  value_fn=lambda evse_data: evse_data.intensity,
45  update_fn=lambda evse, value: evse.intensity(value),
46  ),
48  key="min_intensity",
49  translation_key="min_intensity",
50  device_class=NumberDeviceClass.CURRENT,
51  entity_category=EntityCategory.CONFIG,
52  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
53  native_min_value=MIN_INTENSITY,
54  native_max_value=MAX_INTENSITY,
55  value_fn=lambda evse_data: evse_data.min_intensity,
56  update_fn=lambda evse, value: evse.min_intensity(value),
57  ),
59  key="max_intensity",
60  translation_key="max_intensity",
61  device_class=NumberDeviceClass.CURRENT,
62  entity_category=EntityCategory.CONFIG,
63  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
64  native_min_value=MIN_INTENSITY,
65  native_max_value=MAX_INTENSITY,
66  value_fn=lambda evse_data: evse_data.max_intensity,
67  update_fn=lambda evse, value: evse.max_intensity(value),
68  ),
69 )
70 
71 
73  hass: HomeAssistant,
74  config_entry: V2CConfigEntry,
75  async_add_entities: AddEntitiesCallback,
76 ) -> None:
77  """Set up V2C Trydan number platform."""
78  coordinator = config_entry.runtime_data
79 
81  V2CSettingsNumberEntity(coordinator, description, config_entry.entry_id)
82  for description in TRYDAN_NUMBER_SETTINGS
83  )
84 
85 
87  """Representation of V2C EVSE settings number entity."""
88 
89  entity_description: V2CSettingsNumberEntityDescription
90 
91  def __init__(
92  self,
93  coordinator: V2CUpdateCoordinator,
94  description: V2CSettingsNumberEntityDescription,
95  entry_id: str,
96  ) -> None:
97  """Initialize the V2C number entity."""
98  super().__init__(coordinator, description)
99  self._attr_unique_id_attr_unique_id = f"{entry_id}_{description.key}"
100 
101  @property
102  def native_value(self) -> float:
103  """Return the state of the setting entity."""
104  return self.entity_descriptionentity_description.value_fn(self.datadatadata)
105 
106  async def async_set_native_value(self, value: float) -> None:
107  """Update the setting."""
108  await self.entity_descriptionentity_description.update_fn(self.coordinator.evse, int(value))
109  await self.coordinator.async_request_refresh()
None __init__(self, V2CUpdateCoordinator coordinator, V2CSettingsNumberEntityDescription description, str entry_id)
Definition: number.py:96
None async_setup_entry(HomeAssistant hass, V2CConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: number.py:76