core/homeassistant/components/ring/button.py

59 lines
1.7 KiB
Python

"""Component providing support for Ring buttons."""
from __future__ import annotations
from ring_doorbell import RingOther
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import RingData
from .const import DOMAIN
from .coordinator import RingDataCoordinator
from .entity import RingEntity, exception_wrap
BUTTON_DESCRIPTION = ButtonEntityDescription(
key="open_door", translation_key="open_door"
)
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Create the buttons for the Ring devices."""
ring_data: RingData = hass.data[DOMAIN][config_entry.entry_id]
devices_coordinator = ring_data.devices_coordinator
async_add_entities(
RingDoorButton(device, devices_coordinator, BUTTON_DESCRIPTION)
for device in ring_data.devices.other
if device.has_capability("open")
)
class RingDoorButton(RingEntity[RingOther], ButtonEntity):
"""Creates a button to open the ring intercom door."""
def __init__(
self,
device: RingOther,
coordinator: RingDataCoordinator,
description: ButtonEntityDescription,
) -> None:
"""Initialize the button."""
super().__init__(
device,
coordinator,
)
self.entity_description = description
self._attr_unique_id = f"{device.id}-{description.key}"
@exception_wrap
def press(self) -> None:
"""Open the door."""
self._device.open_door()