1 """Support for august 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 AugustConfigEntry, AugustData
22 from .entity
import AugustDescriptionEntity
24 retrieve_ding_activity,
25 retrieve_doorbell_motion_activity,
26 retrieve_online_state,
30 @dataclass(kw_only=True, frozen=True)
32 """Describe august event entities."""
34 value_fn: Callable[[AugustData, DoorbellDetail | LockDetail], Activity |
None]
37 TYPES_VIDEO_DOORBELL: tuple[AugustEventEntityDescription, ...] = (
40 translation_key=
"motion",
41 device_class=EventDeviceClass.MOTION,
42 event_types=[
"motion"],
43 value_fn=retrieve_doorbell_motion_activity,
48 TYPES_DOORBELL: tuple[AugustEventEntityDescription, ...] = (
51 translation_key=
"doorbell",
52 device_class=EventDeviceClass.DOORBELL,
54 value_fn=retrieve_ding_activity,
61 config_entry: AugustConfigEntry,
62 async_add_entities: AddEntitiesCallback,
64 """Set up the august event platform."""
65 data = config_entry.runtime_data
66 entities: list[AugustEventEntity] = [
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 august event entity."""
83 entity_description: AugustEventEntityDescription
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
DoorbellDetail|LockDetail _detail(self)
None _update_from_data(self)
None _trigger_event(self, str event_type, dict[str, Any]|None event_attributes=None)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, AugustConfigEntry config_entry, AddEntitiesCallback async_add_entities)
bool retrieve_online_state(AugustData data, DoorbellDetail|LockDetail detail)