事件实体
事件是在某些事情发生时发出的信号,例如,当用户按下门铃等物理按钮或遥控器上的按钮时。事件实体捕获物理世界中的这些事件,并在Home Assistant中将其作为实体提供。
事件实体是无状态的,这意味着您不必维护状态。相反,当物理世界中发生某些事情时,您可以触发一个事件。Home Assistant将跟踪最后发出的事件,并将其显示为实体的当前状态。
实体的主要状态是最后一个事件发出的时间戳,此外,还会跟踪事件的类型以及事件附带的可选额外状态数据。
事件实体派生自 homeassistant.components.event.EventEntity。
属性
- 提示:属性应始终仅从内存返回信息,不应进行I/O操作(如网络请求)。请实现
update()或async_update()来获取数据。
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| event_types | list[str] | 必需 | 此实体可以触发的可能事件类型列表。 |
其他所有实体共有的属性,如 device_class、icon、name 等也适用。
触发事件
事件实体与其他实体略有不同。Home Assistant管理状态,但集成负责触发事件。这是通过在事件实体上调用 _trigger_event 方法来完成的。
此方法将事件类型作为第一个参数,可选的额外状态数据作为第二个参数。
class MyEvent(EventEntity):
_attr_device_class = EventDeviceClass.BUTTON
_attr_event_types = ["single_press", "double_press"]
@callback
def _async_handle_event(self, event: str) -> None:
"""处理演示按钮事件。"""
self._trigger_event(event, {"extra_data": 123})
self.async_write_ha_state()
async def async_added_to_hass(self) -> None:
"""向设备API / 库注册回调。"""
my_device_api.listen(self._async_handle_event)
只有在 event_types 属性中定义的事件类型才能被触发。如果触发了未在 event_types 属性中定义的事件类型,将引发 ValueError。
- 提示:当实体从Home Assistant中移除时,一定要注销任何回调。
可用设备类
可选地指定它是什么类型的实体。
| 常量 | 描述 |
|---|---|
| EventDeviceClass.BUTTON | 遥控器上的按钮被按下。 |
| EventDeviceClass.DOORBELL | 专门用于用作门铃的按钮。 |
| EventDeviceClass.MOTION | 用于运动传感器检测到的运动事件。 |
总结
本文档介绍了Home Assistant中的事件实体(Event Entity)相关内容,包括其概念(用于捕获物理世界中的事件信号)、无状态特性(由Home Assistant管理状态,集成负责触发事件)、属性(如事件类型列表)、触发事件的方法(通过 _trigger_event 方法,且只能触发定义在 event_types 中的事件类型)以及可用的设备类(如按钮、门铃、运动传感器等类型),为开发人员在Home Assistant中处理事件相关的集成提供了指导和规范。
859

被折叠的 条评论
为什么被折叠?



