1 """Event platform for Google Nest."""
3 from dataclasses
import dataclass
6 from google_nest_sdm.device
import Device
7 from google_nest_sdm.device_manager
import DeviceManager
8 from google_nest_sdm.event
import EventMessage, EventType
9 from google_nest_sdm.traits
import TraitType
14 EventEntityDescription,
20 from .const
import DATA_DEVICE_MANAGER, DOMAIN
21 from .device_info
import NestDeviceInfo
30 _LOGGER = logging.getLogger(__name__)
33 @dataclass(kw_only=True, frozen=True)
35 """Entity description for nest event entities."""
37 trait_types: list[TraitType]
38 api_event_types: list[EventType]
39 event_types: list[str]
42 ENTITY_DESCRIPTIONS = [
44 key=EVENT_DOORBELL_CHIME,
45 translation_key=
"chime",
46 device_class=EventDeviceClass.DOORBELL,
47 event_types=[EVENT_DOORBELL_CHIME],
48 trait_types=[TraitType.DOORBELL_CHIME],
49 api_event_types=[EventType.DOORBELL_CHIME],
52 key=EVENT_CAMERA_MOTION,
53 translation_key=
"motion",
54 device_class=EventDeviceClass.MOTION,
55 event_types=[EVENT_CAMERA_MOTION, EVENT_CAMERA_PERSON, EVENT_CAMERA_SOUND],
57 TraitType.CAMERA_MOTION,
58 TraitType.CAMERA_PERSON,
59 TraitType.CAMERA_SOUND,
62 EventType.CAMERA_MOTION,
63 EventType.CAMERA_PERSON,
64 EventType.CAMERA_SOUND,
71 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
73 """Set up the sensors."""
75 device_manager: DeviceManager = hass.data[DOMAIN][entry.entry_id][
80 for device
in device_manager.devices.values()
81 for desc
in ENTITY_DESCRIPTIONS
82 if any(trait
in device.traits
for trait
in desc.trait_types)
87 """Nest doorbell event entity."""
89 entity_description: NestEventEntityDescription
90 _attr_has_entity_name =
True
93 self, entity_description: NestEventEntityDescription, device: Device
95 """Initialize the event entity."""
102 """Handle a device event."""
104 event_message.relation_update
105 or not event_message.resource_update_name
106 or not (events := event_message.resource_update_events)
110 for api_event_type, nest_event
in events.items():
114 event_type = EVENT_NAME_MAP[api_event_type]
115 nest_event_id = nest_event.event_token
116 if last_nest_event_id
is not None and last_nest_event_id == nest_event_id:
122 {
"nest_event_id": nest_event_id},
128 """Run when entity is added to attach an event listener."""
dict[str, Any] state_attributes(self)
None _trigger_event(self, str event_type, dict[str, Any]|None event_attributes=None)
None _async_handle_event(self, EventMessage event_message)
None async_added_to_hass(self)
None __init__(self, NestEventEntityDescription entity_description, Device device)
dict[str, Any]|None state_attributes(self)
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)