Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Component providing support for Ring buttons."""
2 
3 from __future__ import annotations
4 
5 from ring_doorbell import RingOther
6 
7 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
8 from homeassistant.core import HomeAssistant
9 from homeassistant.helpers.entity_platform import AddEntitiesCallback
10 
11 from . import RingConfigEntry
12 from .coordinator import RingDataCoordinator
13 from .entity import RingEntity, exception_wrap
14 
15 BUTTON_DESCRIPTION = ButtonEntityDescription(
16  key="open_door", translation_key="open_door"
17 )
18 
19 
21  hass: HomeAssistant,
22  entry: RingConfigEntry,
23  async_add_entities: AddEntitiesCallback,
24 ) -> None:
25  """Create the buttons for the Ring devices."""
26  ring_data = entry.runtime_data
27  devices_coordinator = ring_data.devices_coordinator
28 
30  RingDoorButton(device, devices_coordinator, BUTTON_DESCRIPTION)
31  for device in ring_data.devices.other
32  if device.has_capability("open")
33  )
34 
35 
36 class RingDoorButton(RingEntity[RingOther], ButtonEntity):
37  """Creates a button to open the ring intercom door."""
38 
39  def __init__(
40  self,
41  device: RingOther,
42  coordinator: RingDataCoordinator,
43  description: ButtonEntityDescription,
44  ) -> None:
45  """Initialize the button."""
46  super().__init__(
47  device,
48  coordinator,
49  )
50  self.entity_descriptionentity_description = description
51  self._attr_unique_id_attr_unique_id = f"{device.id}-{description.key}"
52 
53  @exception_wrap
54  async def async_press(self) -> None:
55  """Open the door."""
56  await self._device_device_device.async_open_door()
None __init__(self, RingOther device, RingDataCoordinator coordinator, ButtonEntityDescription description)
Definition: button.py:44
None async_setup_entry(HomeAssistant hass, RingConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:24