"""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()