1 """Support for yale events."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import TYPE_CHECKING
9 from yalexs.activity
import Activity
10 from yalexs.doorbell
import DoorbellDetail
11 from yalexs.lock
import LockDetail
16 EventEntityDescription,
21 from .
import YaleConfigEntry, YaleData
22 from .entity
import YaleDescriptionEntity
24 retrieve_ding_activity,
25 retrieve_doorbell_motion_activity,
26 retrieve_online_state,
30 @dataclass(kw_only=True, frozen=True)
32 """Describe yale event entities."""
34 value_fn: Callable[[YaleData, DoorbellDetail | LockDetail], Activity |
None]
37 TYPES_VIDEO_DOORBELL: tuple[YaleEventEntityDescription, ...] = (
40 translation_key=
"motion",
41 device_class=EventDeviceClass.MOTION,
42 event_types=[
"motion"],
43 value_fn=retrieve_doorbell_motion_activity,
48 TYPES_DOORBELL: tuple[YaleEventEntityDescription, ...] = (
51 translation_key=
"doorbell",
52 device_class=EventDeviceClass.DOORBELL,
54 value_fn=retrieve_ding_activity,
61 config_entry: YaleConfigEntry,
62 async_add_entities: AddEntitiesCallback,
64 """Set up the yale event platform."""
65 data = config_entry.runtime_data
66 entities: list[YaleEventEntity] = [
68 for description
in TYPES_DOORBELL
69 for lock
in data.locks
70 if (detail := data.get_device_detail(lock.device_id))
and detail.doorbell
74 for description
in TYPES_DOORBELL + TYPES_VIDEO_DOORBELL
75 for doorbell
in data.doorbells
81 """An yale event entity."""
83 entity_description: YaleEventEntityDescription
84 _last_activity: Activity |
None =
None
88 """Update from data."""
91 if not current_activity
or current_activity == self.
_last_activity_last_activity:
96 assert event_types
is not None
None _trigger_event(self, str event_type, dict[str, Any]|None event_attributes=None)
DoorbellDetail|LockDetail _detail(self)
None _update_from_data(self)
None async_write_ha_state(self)
bool retrieve_online_state(AugustData data, DoorbellDetail|LockDetail detail)
None async_setup_entry(HomeAssistant hass, YaleConfigEntry config_entry, AddEntitiesCallback async_add_entities)