Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Button entities for Tami4Edge."""
2 
3 from collections.abc import Callable
4 from dataclasses import dataclass
5 import logging
6 
7 from Tami4EdgeAPI import Tami4EdgeAPI
8 from Tami4EdgeAPI.drink import Drink
9 
10 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.entity import EntityDescription
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from .const import API, DOMAIN
17 from .entity import Tami4EdgeBaseEntity
18 
19 _LOGGER = logging.getLogger(__name__)
20 
21 
22 @dataclass(frozen=True, kw_only=True)
24  """A class that describes Tami4Edge button entities."""
25 
26  press_fn: Callable[[Tami4EdgeAPI], None]
27 
28 
29 @dataclass(frozen=True, kw_only=True)
31  """A class that describes Tami4Edge Drink button entities."""
32 
33  press_fn: Callable[[Tami4EdgeAPI, Drink], None]
34 
35 
37  key="boil_water",
38  translation_key="boil_water",
39  press_fn=lambda api: api.boil_water(),
40 )
41 
42 
44  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
45 ) -> None:
46  """Perform the setup for Tami4Edge."""
47 
48  api: Tami4EdgeAPI = hass.data[DOMAIN][entry.entry_id][API]
49  buttons: list[Tami4EdgeBaseEntity] = [Tami4EdgeButton(api, BOIL_WATER_BUTTON)]
50 
51  device = await hass.async_add_executor_job(api.get_device)
52  drinks = device.drinks
53 
54  buttons.extend(
56  api=api,
57  entity_description=Tami4EdgeDrinkButtonEntityDescription(
58  key=drink.id,
59  translation_key="prepare_drink",
60  translation_placeholders={"drink_name": drink.name},
61  press_fn=lambda api, drink: api.prepare_drink(drink),
62  ),
63  drink=drink,
64  )
65  for drink in drinks
66  )
67 
68  async_add_entities(buttons)
69 
70 
72  """Button entity for Tami4Edge."""
73 
74  entity_description: Tami4EdgeButtonEntityDescription
75 
76  def press(self) -> None:
77  """Handle the button press."""
78  self.entity_descriptionentity_description.press_fn(self._api_api)
79 
80 
82  """Drink Button entity for Tami4Edge."""
83 
84  entity_description: Tami4EdgeDrinkButtonEntityDescription
85 
86  def __init__(
87  self, api: Tami4EdgeAPI, entity_description: EntityDescription, drink: Drink
88  ) -> None:
89  """Initialize the drink button."""
90  super().__init__(api=api, entity_description=entity_description)
91  self.drinkdrink = drink
92 
93  def press(self) -> None:
94  """Handle the button press."""
95  self.entity_descriptionentity_description.press_fn(self._api_api, self.drinkdrink)
None __init__(self, Tami4EdgeAPI api, EntityDescription entity_description, Drink drink)
Definition: button.py:88
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:45