Home Assistant Unofficial Reference 2024.12.1
number.py
Go to the documentation of this file.
1 """Support for LaMetric numbers."""
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 demetriek import Device, LaMetricDevice
10 
11 from homeassistant.components.number import NumberEntity, NumberEntityDescription
12 from homeassistant.config_entries import ConfigEntry
13 from homeassistant.const import PERCENTAGE, EntityCategory
14 from homeassistant.core import HomeAssistant
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 
17 from .const import DOMAIN
18 from .coordinator import LaMetricDataUpdateCoordinator
19 from .entity import LaMetricEntity
20 from .helpers import lametric_exception_handler
21 
22 
23 @dataclass(frozen=True, kw_only=True)
25  """Class describing LaMetric number entities."""
26 
27  value_fn: Callable[[Device], int | None]
28  set_value_fn: Callable[[LaMetricDevice, float], Awaitable[Any]]
29 
30 
31 NUMBERS = [
33  key="brightness",
34  translation_key="brightness",
35  name="Brightness",
36  entity_category=EntityCategory.CONFIG,
37  native_step=1,
38  native_min_value=0,
39  native_max_value=100,
40  native_unit_of_measurement=PERCENTAGE,
41  value_fn=lambda device: device.display.brightness,
42  set_value_fn=lambda device, bri: device.display(brightness=int(bri)),
43  ),
45  key="volume",
46  translation_key="volume",
47  name="Volume",
48  entity_category=EntityCategory.CONFIG,
49  native_step=1,
50  native_min_value=0,
51  native_max_value=100,
52  value_fn=lambda device: device.audio.volume,
53  set_value_fn=lambda api, volume: api.audio(volume=int(volume)),
54  ),
55 ]
56 
57 
59  hass: HomeAssistant,
60  entry: ConfigEntry,
61  async_add_entities: AddEntitiesCallback,
62 ) -> None:
63  """Set up LaMetric number based on a config entry."""
64  coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
67  coordinator=coordinator,
68  description=description,
69  )
70  for description in NUMBERS
71  )
72 
73 
75  """Representation of a LaMetric number."""
76 
77  entity_description: LaMetricNumberEntityDescription
78 
79  def __init__(
80  self,
81  coordinator: LaMetricDataUpdateCoordinator,
82  description: LaMetricNumberEntityDescription,
83  ) -> None:
84  """Initiate LaMetric Number."""
85  super().__init__(coordinator)
86  self.entity_descriptionentity_description = description
87  self._attr_unique_id_attr_unique_id = f"{coordinator.data.serial_number}-{description.key}"
88 
89  @property
90  def native_value(self) -> int | None:
91  """Return the number value."""
92  return self.entity_descriptionentity_description.value_fn(self.coordinator.data)
93 
94  @lametric_exception_handler
95  async def async_set_native_value(self, value: float) -> None:
96  """Change to new number value."""
97  await self.entity_descriptionentity_description.set_value_fn(self.coordinator.lametric, value)
98  await self.coordinator.async_request_refresh()
None __init__(self, LaMetricDataUpdateCoordinator coordinator, LaMetricNumberEntityDescription description)
Definition: number.py:83
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: number.py:62