Home Assistant Unofficial Reference 2024.12.1
number.py
Go to the documentation of this file.
1 """Number entity platform for Tailwind."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Awaitable, Callable
6 from dataclasses import dataclass
7 from typing import Any
8 
9 from gotailwind import Tailwind, TailwindDeviceStatus, TailwindError
10 
11 from homeassistant.components.number import NumberEntity, NumberEntityDescription
12 from homeassistant.const import PERCENTAGE, EntityCategory
13 from homeassistant.core import HomeAssistant
14 from homeassistant.exceptions import HomeAssistantError
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 
17 from .const import DOMAIN
18 from .entity import TailwindEntity
19 from .typing import TailwindConfigEntry
20 
21 
22 @dataclass(frozen=True, kw_only=True)
24  """Class describing Tailwind number entities."""
25 
26  value_fn: Callable[[TailwindDeviceStatus], int]
27  set_value_fn: Callable[[Tailwind, float], Awaitable[Any]]
28 
29 
30 DESCRIPTIONS = [
32  key="brightness",
33  translation_key="brightness",
34  entity_category=EntityCategory.CONFIG,
35  native_step=1,
36  native_min_value=0,
37  native_max_value=100,
38  native_unit_of_measurement=PERCENTAGE,
39  value_fn=lambda data: data.led_brightness,
40  set_value_fn=lambda tailwind, brightness: tailwind.status_led(
41  brightness=int(brightness),
42  ),
43  ),
44 ]
45 
46 
48  hass: HomeAssistant,
49  entry: TailwindConfigEntry,
50  async_add_entities: AddEntitiesCallback,
51 ) -> None:
52  """Set up Tailwind number based on a config entry."""
55  entry.runtime_data,
56  description,
57  )
58  for description in DESCRIPTIONS
59  )
60 
61 
63  """Representation of a Tailwind number entity."""
64 
65  entity_description: TailwindNumberEntityDescription
66 
67  @property
68  def native_value(self) -> int | None:
69  """Return the number value."""
70  return self.entity_descriptionentity_description.value_fn(self.coordinator.data)
71 
72  async def async_set_native_value(self, value: float) -> None:
73  """Change to new number value."""
74  try:
75  await self.entity_descriptionentity_description.set_value_fn(self.coordinator.tailwind, value)
76  except TailwindError as exc:
77  raise HomeAssistantError(
78  translation_domain=DOMAIN,
79  translation_key="communication_error",
80  ) from exc
81  await self.coordinator.async_request_refresh()
None async_setup_entry(HomeAssistant hass, TailwindConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: number.py:51