Home Assistant Unofficial Reference 2024.12.1
event.py
Go to the documentation of this file.
1 """Support for doorbird events."""
2 
3 from typing import TYPE_CHECKING
4 
6  EventDeviceClass,
7  EventEntity,
8  EventEntityDescription,
9 )
10 from homeassistant.core import HomeAssistant, callback
11 from homeassistant.helpers.dispatcher import async_dispatcher_connect
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from .const import DOMAIN
15 from .device import DoorbirdEvent
16 from .entity import DoorBirdEntity
17 from .models import DoorBirdConfigEntry, DoorBirdData
18 
19 EVENT_DESCRIPTIONS = {
20  "doorbell": EventEntityDescription(
21  key="doorbell",
22  translation_key="doorbell",
23  device_class=EventDeviceClass.DOORBELL,
24  event_types=["ring"],
25  ),
26  "motion": EventEntityDescription(
27  key="motion",
28  translation_key="motion",
29  device_class=EventDeviceClass.MOTION,
30  event_types=["motion"],
31  ),
32 }
33 
34 
36  hass: HomeAssistant,
37  config_entry: DoorBirdConfigEntry,
38  async_add_entities: AddEntitiesCallback,
39 ) -> None:
40  """Set up the DoorBird event platform."""
41  door_bird_data = config_entry.runtime_data
43  DoorBirdEventEntity(door_bird_data, doorbird_event, description)
44  for doorbird_event in door_bird_data.door_station.event_descriptions
45  if (description := EVENT_DESCRIPTIONS.get(doorbird_event.event_type))
46  )
47 
48 
50  """A doorbird event entity."""
51 
52  entity_description: EventEntityDescription
53  _attr_has_entity_name = True
54 
55  def __init__(
56  self,
57  door_bird_data: DoorBirdData,
58  doorbird_event: DoorbirdEvent,
59  entity_description: EventEntityDescription,
60  ) -> None:
61  """Initialize an event for a doorbird device."""
62  super().__init__(door_bird_data)
63  self._doorbird_event_doorbird_event = doorbird_event
64  self.entity_descriptionentity_description = entity_description
65  event = doorbird_event.event
66  self._attr_unique_id_attr_unique_id = f"{self._mac_addr}_{event}"
67  slug_name = event.removeprefix(self._door_station_door_station.slug).strip("_")
68  friendly_name = slug_name.replace("_", " ")
69  self._attr_name_attr_name = friendly_name[0:1].upper() + friendly_name[1:].lower()
70 
71  async def async_added_to_hass(self) -> None:
72  """Subscribe to device events."""
73  self.async_on_removeasync_on_remove(
75  self.hasshass,
76  f"{DOMAIN}_{self._doorbird_event.event}",
77  self._async_handle_event_async_handle_event,
78  )
79  )
80 
81  @callback
82  def _async_handle_event(self) -> None:
83  """Handle a device event."""
84  event_types = self.entity_descriptionentity_description.event_types
85  if TYPE_CHECKING:
86  assert event_types is not None
87  self._trigger_event_trigger_event(event_type=event_types[0])
88  self.async_write_ha_stateasync_write_ha_state()
None __init__(self, DoorBirdData door_bird_data, DoorbirdEvent doorbird_event, EventEntityDescription entity_description)
Definition: event.py:60
None _trigger_event(self, str event_type, dict[str, Any]|None event_attributes=None)
Definition: __init__.py:148
None async_on_remove(self, CALLBACK_TYPE func)
Definition: entity.py:1331
None async_setup_entry(HomeAssistant hass, DoorBirdConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: event.py:39
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103