事件
Home Assistant 的核心是由事件驱动的。这意味着如果你想对发生的事情做出响应,就必须响应事件。大多数情况下,你不会直接与事件系统交互,而是使用事件监听器助手之一。
事件系统非常灵活。只要是字符串,对事件类型就没有限制。每个事件都可以包含数据。数据是一个字典,可以包含任何可 JSON 序列化的数据,这意味着你可以使用数字、字符串、字典和列表。
Home Assistant 触发的事件列表。
触发事件
要触发事件,你必须与事件总线交互。在 Home Assistant 实例中,事件总线可通过hass.bus访问。
示例组件在加载时将触发一个事件:
DOMAIN = 'hello_event'
def setup(hass, config):
"""当Home Assistant加载我们的组件时调用设置函数。"""
# 触发事件my_cool_event,事件数据为answer=42
hass.bus.fire('my_cool_event', {
'answer': 42
})
监听事件
大多数情况下,你不会触发事件,而是监听事件。例如,实体的状态变化会作为一个事件广播。
DOMAIN = 'hello_event'
def setup(hass, config):
"""当Home Assistant加载我们的组件时调用设置函数。"""
count = 0
# 处理触发事件的监听器
def handle_event(event):
nonlocal count
count += 1
print('收到的事件总数:', count)
# 监听my_cool_event被触发
hass.bus.listen('my_cool_event', handle_event)
助手
Home Assistant 自带了许多捆绑的助手来监听特定类型的事件。有用于跟踪时间点、时间间隔、状态变化或日落的助手。查看可用方法。
总结
主要介绍了在 Home Assistant 开发中事件的使用。首先强调了事件在 Home Assistant 中的核心驱动地位,其系统具有高度灵活性,事件类型为字符串且数据可 JSON 序列化。接着分别阐述了触发事件和监听事件的方法,触发事件需通过hass.bus.fire方法并传入事件名和数据字典,监听事件则通过hass.bus.listen方法并传入事件名和处理函数。最后提及了 Home Assistant 提供的众多事件监听助手,可用于处理不同类型的事件,为开发者在实现系统响应和交互功能时提供了丰富的工具和手段,有助于构建更加智能和动态的 Home Assistant 应用。
1355

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



