Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Support for Motionblinds button entity using their WLAN API."""
2 
3 from __future__ import annotations
4 
5 from motionblinds.motion_blinds import LimitStatus, MotionBlind
6 
7 from homeassistant.components.button import ButtonEntity
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import EntityCategory
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 
13 from .const import DOMAIN, KEY_COORDINATOR, KEY_GATEWAY
14 from .coordinator import DataUpdateCoordinatorMotionBlinds
15 from .entity import MotionCoordinatorEntity
16 
17 
19  hass: HomeAssistant,
20  config_entry: ConfigEntry,
21  async_add_entities: AddEntitiesCallback,
22 ) -> None:
23  """Perform the setup for Motionblinds."""
24  entities: list[ButtonEntity] = []
25  motion_gateway = hass.data[DOMAIN][config_entry.entry_id][KEY_GATEWAY]
26  coordinator = hass.data[DOMAIN][config_entry.entry_id][KEY_COORDINATOR]
27 
28  for blind in motion_gateway.device_list.values():
29  if blind.limit_status in (
30  LimitStatus.Limit3Detected.name,
31  {
32  "T": LimitStatus.Limit3Detected.name,
33  "B": LimitStatus.Limit3Detected.name,
34  },
35  ):
36  entities.append(MotionGoFavoriteButton(coordinator, blind))
37  entities.append(MotionSetFavoriteButton(coordinator, blind))
38 
39  async_add_entities(entities)
40 
41 
43  """Button entity to go to the favorite position of a blind."""
44 
45  _attr_translation_key = "go_favorite"
46 
47  def __init__(
48  self, coordinator: DataUpdateCoordinatorMotionBlinds, blind: MotionBlind
49  ) -> None:
50  """Initialize the Motion Button."""
51  super().__init__(coordinator, blind)
52  self._attr_unique_id_attr_unique_id = f"{blind.mac}-go-favorite"
53 
54  async def async_press(self) -> None:
55  """Execute the button action."""
56  async with self._api_lock_api_lock:
57  await self.hasshasshass.async_add_executor_job(self._blind_blind.Go_favorite_position)
58  await self.async_request_position_till_stopasync_request_position_till_stop()
59 
60 
62  """Button entity to set the favorite position of a blind to the current position."""
63 
64  _attr_entity_category = EntityCategory.CONFIG
65  _attr_translation_key = "set_favorite"
66 
67  def __init__(
68  self, coordinator: DataUpdateCoordinatorMotionBlinds, blind: MotionBlind
69  ) -> None:
70  """Initialize the Motion Button."""
71  super().__init__(coordinator, blind)
72  self._attr_unique_id_attr_unique_id = f"{blind.mac}-set-favorite"
73 
74  async def async_press(self) -> None:
75  """Execute the button action."""
76  async with self._api_lock_api_lock:
77  await self.hasshasshass.async_add_executor_job(self._blind_blind.Set_favorite_position)
None __init__(self, DataUpdateCoordinatorMotionBlinds coordinator, MotionBlind blind)
Definition: button.py:49
None __init__(self, DataUpdateCoordinatorMotionBlinds coordinator, MotionBlind blind)
Definition: button.py:69
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: button.py:22