1 """Support for Homekit motion sensors."""
3 from __future__
import annotations
5 from aiohomekit.model.characteristics
import CharacteristicsTypes
6 from aiohomekit.model.characteristics.const
import InputEventValues
7 from aiohomekit.model.services
import Service, ServicesTypes
8 from aiohomekit.utils
import clamp_enum_to_char
13 EventEntityDescription,
19 from .
import KNOWN_DEVICES
20 from .connection
import HKDevice
21 from .entity
import BaseCharacteristicEntity
23 INPUT_EVENT_VALUES = {
24 InputEventValues.SINGLE_PRESS:
"single_press",
25 InputEventValues.DOUBLE_PRESS:
"double_press",
26 InputEventValues.LONG_PRESS:
"long_press",
31 """Representation of a Homekit event entity."""
33 _attr_should_poll =
False
39 entity_description: EventEntityDescription,
41 """Initialise a generic HomeKit event entity."""
45 "aid": service.accessory.aid,
48 service.characteristics_by_type[CharacteristicsTypes.INPUT_EVENT],
57 for v
in clamp_enum_to_char(InputEventValues, self.
_char_char)
61 """Define the homekit characteristics the entity cares about."""
62 return [CharacteristicsTypes.INPUT_EVENT]
65 """Entity added to hass."""
70 {(self._aid, self.
_char_char.iid)},
77 if self.
_char_char.value
is None:
88 config_entry: ConfigEntry,
89 async_add_entities: AddEntitiesCallback,
91 """Set up Homekit event."""
92 hkid: str = config_entry.data[
"AccessoryPairingID"]
93 conn: HKDevice = hass.data[KNOWN_DEVICES][hkid]
96 def async_add_service(service: Service) -> bool:
99 if service.type == ServicesTypes.DOORBELL:
105 key=f
"{service.accessory.aid}_{service.iid}",
106 device_class=EventDeviceClass.DOORBELL,
107 translation_key=
"doorbell",
112 elif service.type == ServicesTypes.SERVICE_LABEL:
114 service.accessory.services.filter(
115 service_type=ServicesTypes.STATELESS_PROGRAMMABLE_SWITCH,
116 child_service=service,
117 order_by=[CharacteristicsTypes.SERVICE_LABEL_INDEX],
129 key=f
"{service.accessory.aid}_{service.iid}",
130 device_class=EventDeviceClass.BUTTON,
131 translation_key=
"button",
134 for switch
in switches
137 elif service.type == ServicesTypes.STATELESS_PROGRAMMABLE_SWITCH:
140 if not service.has(CharacteristicsTypes.SERVICE_LABEL_INDEX):
146 key=f
"{service.accessory.aid}_{service.iid}",
147 device_class=EventDeviceClass.BUTTON,
148 translation_key=
"button",
159 conn.add_listener(async_add_service)
None _trigger_event(self, str event_type, dict[str, Any]|None event_attributes=None)
None __init__(self, HKDevice connection, Service service, EventEntityDescription entity_description)
None async_added_to_hass(self)
list[str] get_characteristic_types(self)
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
CALLBACK_TYPE async_subscribe(HomeAssistant hass, str topic, Callable[[ReceiveMessage], Coroutine[Any, Any, None]|None] msg_callback, int qos=DEFAULT_QOS, str|None encoding=DEFAULT_ENCODING)