Home Assistant Unofficial Reference 2024.12.1
select.py
Go to the documentation of this file.
1 """Support for LaMetric selects."""
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 BrightnessMode, Device, LaMetricDevice
10 
11 from homeassistant.components.select import SelectEntity, SelectEntityDescription
12 from homeassistant.config_entries import ConfigEntry
13 from homeassistant.const import 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 select entities."""
26 
27  current_fn: Callable[[Device], str]
28  select_fn: Callable[[LaMetricDevice, str], Awaitable[Any]]
29 
30 
31 SELECTS = [
33  key="brightness_mode",
34  translation_key="brightness_mode",
35  entity_category=EntityCategory.CONFIG,
36  options=["auto", "manual"],
37  current_fn=lambda device: device.display.brightness_mode.value,
38  select_fn=lambda api, opt: api.display(brightness_mode=BrightnessMode(opt)),
39  ),
40 ]
41 
42 
44  hass: HomeAssistant,
45  entry: ConfigEntry,
46  async_add_entities: AddEntitiesCallback,
47 ) -> None:
48  """Set up LaMetric select based on a config entry."""
49  coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
52  coordinator=coordinator,
53  description=description,
54  )
55  for description in SELECTS
56  )
57 
58 
60  """Representation of a LaMetric select."""
61 
62  entity_description: LaMetricSelectEntityDescription
63 
64  def __init__(
65  self,
66  coordinator: LaMetricDataUpdateCoordinator,
67  description: LaMetricSelectEntityDescription,
68  ) -> None:
69  """Initiate LaMetric Select."""
70  super().__init__(coordinator)
71  self.entity_descriptionentity_description = description
72  self._attr_unique_id_attr_unique_id = f"{coordinator.data.serial_number}-{description.key}"
73 
74  @property
75  def current_option(self) -> str | None:
76  """Return the selected entity option to represent the entity state."""
77  return self.entity_descriptionentity_description.current_fn(self.coordinator.data)
78 
79  @lametric_exception_handler
80  async def async_select_option(self, option: str) -> None:
81  """Change the selected option."""
82  await self.entity_descriptionentity_description.select_fn(self.coordinator.lametric, option)
83  await self.coordinator.async_request_refresh()
None __init__(self, LaMetricDataUpdateCoordinator coordinator, LaMetricSelectEntityDescription description)
Definition: select.py:68
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: select.py:47