十三 Home Assistant 事件的监听

监听事件

你的集成可能需要在Home Assistant内部发生特定事件时采取行动。Home Assistant提供了事件助手来监听特定事件类型,并提供对事件总线的直接访问。这些助手经过高度优化,以尽量减少回调的数量。如果已经有针对你需要监听的特定事件的助手,那么使用助手比直接监听事件总线更可取。

可用的事件助手

事件助手位于homeassistant.helpers.event命名空间中。这些函数返回一个可调用对象,用于取消监听器。

以下函数也有同步版本,没有async_前缀。

示例:

unsub = async_track_state_change_event(hass, entity_ids, state_automation_listener)
unsub()
跟踪实体状态变化
函数用例
async_track_state_change跟踪特定状态变化
async_track_state_change_event按实体ID跟踪特定状态变化事件
async_track_state_added_domain跟踪实体添加到域时的状态变化事件
async_track_state_removed_domain跟踪实体从域中移除时的状态变化事件
async_track_state_change_filtered使用可更新的TrackStates过滤器跟踪状态变化
async_track_same_state跟踪实体状态一段时间并运行一个操作
跟踪模板变化
函数用例
async_track_template添加一个监听器,当模板求值为true时触发
async_track_template_result添加一个监听器,当模板结果发生变化时触发
跟踪实体注册表变化
函数用例
async_track_entity_registry_updated_event按实体ID跟踪特定实体注册表更新事件
跟踪时间变化
函数用例
async_track_point_in_time添加一个监听器,在特定时间点之后触发一次
async_track_point_in_utc_time添加一个监听器,在特定UTC时间点之后触发一次
async_call_later添加一个带有延迟的监听器
async_track_time_interval添加一个监听器,每隔一段时间间隔重复触发
async_track_utc_time_change添加一个监听器,如果时间匹配模式则触发
async_track_time_change添加一个监听器,如果本地时间匹配模式则触发
跟踪太阳
函数用例
async_track_sunrise添加一个监听器,每天在日出后指定偏移量时触发
async_track_sunset添加一个监听器,每天在日落后指定偏移量时触发

直接监听事件总线

有两个函数可用于创建监听器。两个函数都返回一个可调用对象,用于取消监听器。

  • async_listen_once - 监听事件一次,之后不再触发。
  • async_listen - 持续监听,直到取消。

async_listen很少被使用,因为EVENT_HOMEASSISTANT_STARTEVENT_HOMEASSISTANT_STARTEDEVENT_HOMEASSISTANT_STOP在每次运行中仅触发一次。

异步上下文
cancel = hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, disconnect_service)
cancel()

cancel = hass.bus.async_listen(EVENT_STATE_CHANGED, forward_event)
cancel()
同步上下文
cancel = hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, disconnect_service)
cancel()

cancel = hass.bus.listen(EVENT_STATE_CHANGED, forward_event)
cancel()

常见事件

以下事件通常直接被监听。

事件名称描述
EVENT_HOMEASSISTANT_START完成设置并进入启动阶段
EVENT_HOMEASSISTANT_STARTED完成启动阶段,所有集成都有机会加载;主要由语音助手和将状态导出到外部服务的集成使用
EVENT_HOMEASSISTANT_STOP进入停止阶段

其他事件

除非集成是核心的一部分,否则这些事件很少直接被监听。通常有一个助手可以处理这些事件,在这种情况下,不应直接监听它们。

事件名称描述首选助手
EVENT_HOMEASSISTANT_FINAL_WRITE最后一次将数据写入磁盘的机会
EVENT_HOMEASSISTANT_CLOSE拆卸
EVENT_COMPONENT_LOADED一个集成已完成加载homeassistant.helpers.start.async_at_start
EVENT_SERVICE_REGISTERED一个新服务已注册
EVENT_SERVICE_REMOVED一个服务已被移除
EVENT_CALL_SERVICE一个服务已被调用
EVENT_STATE_CHANGED一个实体的状态已改变跟踪实体状态变化相关助手
EVENT_THEMES_UPDATED主题已更新
EVENT_CORE_CONFIG_UPDATE核心配置已更新
EVENT_ENTITY_REGISTRY_UPDATED实体注册表已更新跟踪实体注册表变化相关助手
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值