Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Button 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, TailwindError
10 
12  ButtonDeviceClass,
13  ButtonEntity,
14  ButtonEntityDescription,
15 )
16 from homeassistant.const import EntityCategory
17 from homeassistant.core import HomeAssistant
18 from homeassistant.exceptions import HomeAssistantError
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 
21 from .const import DOMAIN
22 from .entity import TailwindEntity
23 from .typing import TailwindConfigEntry
24 
25 
26 @dataclass(frozen=True, kw_only=True)
28  """Class describing Tailwind button entities."""
29 
30  press_fn: Callable[[Tailwind], Awaitable[Any]]
31 
32 
33 DESCRIPTIONS = [
35  key="identify",
36  device_class=ButtonDeviceClass.IDENTIFY,
37  entity_category=EntityCategory.CONFIG,
38  press_fn=lambda tailwind: tailwind.identify(),
39  ),
40 ]
41 
42 
44  hass: HomeAssistant,
45  entry: TailwindConfigEntry,
46  async_add_entities: AddEntitiesCallback,
47 ) -> None:
48  """Set up Tailwind button based on a config entry."""
51  entry.runtime_data,
52  description,
53  )
54  for description in DESCRIPTIONS
55  )
56 
57 
59  """Representation of a Tailwind button entity."""
60 
61  entity_description: TailwindButtonEntityDescription
62 
63  async def async_press(self) -> None:
64  """Trigger button press on the Tailwind device."""
65  try:
66  await self.entity_descriptionentity_description.press_fn(self.coordinator.tailwind)
67  except TailwindError as exc:
68  raise HomeAssistantError(
69  str(exc),
70  translation_domain=DOMAIN,
71  translation_key="communication_error",
72  ) from exc
None async_setup_entry(HomeAssistant hass, TailwindConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:47