1 """Component providing support for ring events."""
3 from dataclasses
import dataclass
4 from typing
import Generic
6 from ring_doorbell
import RingCapability, RingEvent
as RingAlert
7 from ring_doorbell.const
import KIND_DING, KIND_INTERCOM_UNLOCK, KIND_MOTION
12 EventEntityDescription,
17 from .
import RingConfigEntry
18 from .coordinator
import RingListenCoordinator
19 from .entity
import RingBaseEntity, RingDeviceT
22 @dataclass(frozen=True, kw_only=True)
24 """Base class for event entity description."""
26 capability: RingCapability
29 EVENT_DESCRIPTIONS: tuple[RingEventEntityDescription, ...] = (
32 translation_key=KIND_DING,
33 device_class=EventDeviceClass.DOORBELL,
34 event_types=[KIND_DING],
35 capability=RingCapability.DING,
39 translation_key=KIND_MOTION,
40 device_class=EventDeviceClass.MOTION,
41 event_types=[KIND_MOTION],
42 capability=RingCapability.MOTION_DETECTION,
45 key=KIND_INTERCOM_UNLOCK,
46 translation_key=KIND_INTERCOM_UNLOCK,
47 device_class=EventDeviceClass.BUTTON,
48 event_types=[KIND_INTERCOM_UNLOCK],
49 capability=RingCapability.OPEN,
56 entry: RingConfigEntry,
57 async_add_entities: AddEntitiesCallback,
59 """Set up events for a Ring device."""
60 ring_data = entry.runtime_data
61 listen_coordinator = ring_data.listen_coordinator
64 RingEvent(device, listen_coordinator, description)
65 for description
in EVENT_DESCRIPTIONS
66 for device
in ring_data.devices.all_devices
67 if device.has_capability(description.capability)
72 """An event implementation for Ring device."""
74 entity_description: RingEventEntityDescription[RingDeviceT]
79 coordinator: RingListenCoordinator,
80 description: RingEventEntityDescription[RingDeviceT],
82 """Initialize a event entity for Ring device."""
83 super().
__init__(device, coordinator)
89 """Handle the event."""
93 return self.coordinator.alerts.get(
105 """Return if entity is available."""
106 return self.coordinator.event_listener.started
109 """All updates are passive."""
None _trigger_event(self, str event_type, dict[str, Any]|None event_attributes=None)
RingAlert|None _get_coordinator_alert(self)
None __init__(self, RingDeviceT device, RingListenCoordinator coordinator, RingEventEntityDescription[RingDeviceT] description)
None _async_handle_event(self, str event)
None _handle_coordinator_update(self)
None async_setup_entry(HomeAssistant hass, RingConfigEntry entry, AddEntitiesCallback async_add_entities)