基于循环的Home Assistant自动化:一盏灯按优先级(烟雾、门铃、邮件)触发三个Home Assistant事件,并自动取消和恢复
Home Assistant 是基于事件驱动的——每个自动化都会响应自身的触发条件,彼此之间并不真正了解。这就使得构建一个共享输出变得异常困难,例如让一盏灯按优先级向多个事件发出信号。你最终不得不同时处理输入布尔值、辅助函数和链式自动化,仅仅为了表达“如果发生烟雾,就忽略所有其他情况”。
该项目使用一个设置为优先级模式的控制组来实现相同功能。三个闪烁控件——红色表示烟雾,绿色表示门铃,蓝色表示电子邮件——位于其中,其优先级分别为1、2和3。引擎在每次扫描周期中评估条件,并自动让优先级最高的控件获胜。当在闪烁过程中触发了更高优先级的条件时,较低优先级的控件将立即被取消,只有在较高优先级的控件不再激活时,才会恢复执行。
•一盏灯表示三种不同的HA事件——烟雾、门铃、邮件
•原生优先级支持 — 烟雾 (1) > 门铃 (2) > 邮件 (3)
•当更高优先级的事件触发时,自动取消并恢复
•通过长期访问令牌读取和写入任何 HA 实体
•无需MQTT代理,无需YAML,无需代码
我们为什么决定这么做?
基于事件的自动化非常适合“当发生X时,执行Y”这种场景,但一旦两个事件争夺同一个执行器,就会出现问题。大多数用户最终不得不编写条件辅助函数,或转向AppDaemon/Node-RED。我们希望展示,采用PLC风格的扫描周期引擎,并具备原生优先级机制,能为这类问题提供更简单的思维模型,而且只需一个长期有效的访问令牌,即可直接将其连接到现有的Home Assistant实体中。
你将构建什么
•一种读取逻辑,每周期从 Home Assistant 中获取最新的烟雾、门铃和邮件状态
•烟雾检测时,烟雾控制装置每0.5秒闪烁一次红色指示灯
•门铃控制:当门铃响起时,每秒闪烁一次绿色,持续15秒。
•当有新邮件到达时,邮箱控制会每1.5秒闪烁一次蓝色,持续10秒。
•优先级控制组,当更高优先级事件触发时,会自动取消低优先级的闪烁。
快速入门
•在设置 → Home Assistant → 编辑中填写您的 Home Assistant 连接信息(HA 块已存在于项目中,只需输入服务器地址,并粘贴来自 HA → 个人资料 → 安全 → 长期访问令牌的长期访问令牌即可)。
•打开每个HA操作,重新选择您自己的设置实体——三个读取操作(烟雾、门铃、电子邮件)以及您灯光实体上的开关操作。
•连接您的设备并点击运行
•在 Home Assistant 中切换烟雾、门铃和邮件实体,实时查看灯的响应情况
构建过程
逻辑 — 读取值
第一个逻辑“读取值”基于一个简单的“始终”条件运行,为三个实体——binary_sensor.smoke_alarm、binary_sensor.doorbell 和 binary_sensor.email_new——设置了 Home Assistant 集成操作为“读取”,并将它们的状态分别赋值给 Smoke、Doorbell 和 Email 变量。由于 Grablo 在每次扫描周期都会重新评估,这些变量始终反映最新的 HA 状态,这正是优先级控制所需的。
逻辑 — 优先级控制
第二种逻辑包含一个设置为优先级模式的控制组,其中包含三个控件:烟雾(优先级1)、门铃(优先级2)和电子邮件(优先级3)。烟雾使用简单的比较条件(Smoke EQ True),因此只要传感器保持开启,红色闪烁就会持续不断。门铃和电子邮件则使用带有上升沿选项的比较功能,因此只需一次触发即可启动它们的闪烁循环。
烟雾控制的操作很简单:将灯以100%亮度点亮,延迟0.5秒,关闭灯,再延迟0.5秒。门铃和邮件的开关与延迟链被封装在“动作组”中,并设置为重复持续时间——门铃每1秒触发一次,持续15秒;邮件则每1.5秒触发一次,持续10秒。由于整个流程都位于优先级控制组内,当更高优先级的条件变为真时,引擎会自动暂停当前运行的低优先级闪烁操作,仅在高优先级条件完成后才恢复。
就这样!
两种逻辑,一个控制组,三个优先级——只需一盏灯,就能智能响应三种Home Assistant事件,按您想要的顺序进行。
预期结果
•在HA中切换邮件助手——灯每1.5秒闪烁一次,持续10秒
•当邮箱闪烁时,按门铃——灯会以1秒为间隔立即变为绿色
•当门铃闪烁时,触发烟雾——灯会以0.5秒为间隔变为红色,并持续亮起直到烟雾消散。
•烟雾消散后,如果15秒的窗口时间未过,门铃将重新响起;否则灯会熄灭。
硬件设置
该项目完全运行在 Home Assistant 和 Grablo 运行时之间——无需 GPIO、I2C,也无需额外布线。你需要一台能够运行 Grablo 的设备(如树莓派、迷你电脑、Windows 或 Mac 笔记本电脑),以及一台可从该设备访问的 Home Assistant 服务器。
在 Home Assistant 端,你需要一个 RGB 灯光实体(项目默认使用 light.priority_lamp — 任何支持 RGB 的灯光均可),以及三个二进制传感器实体用于烟雾、门铃和邮件。如果你没有物理传感器,可以连接 Helpers → 切换功能来模拟它们进行测试。
本文编译自hackster.io





