『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 5928|回复: 28

[教程系列] 系列教程《HA+NR流程控制》之一:等待无人状态持续x秒

  [复制链接]

6

主题

36

帖子

562

积分

高级会员

Rank: 4

积分
562
金钱
526
HASS币
0
发表于 2023-5-2 01:51:40 | 显示全部楼层 |阅读模式
本帖最后由 afkkk 于 2023-5-2 01:51 编辑

去年装修后开始使用HA,经过一段时间调整,目前各项配置属于比较稳定、便捷的状态。其中使用了一些技巧很少被提及,特别是对新人来说难以找到这方面的资料。所以用《HA+NR流程控制》为标题总结分享一下。每篇帖子单独分享一个技巧。

这个系列将给读者带来的帮助
  • 熟悉NR常用排名在10以后的节点
  • 熟悉多种不同复杂度的范式,并运用其实现更强大的智能家居控制流
  • 了解一些使用HA+NR接入/控制外围设备的例子
阅读需要具备的背景知识
  • 运行和维护Home Assistant系统;
  • 以任何方式安装了Node-RED,并将Node-RED接入Home Assistant系统;
  • 熟悉Home Assistant中常用基本概念:如Integration, Device, Service, Entity;
  • 在Node-RED中编写过Flow,了解NR内置以及node-red-contrib-home-assistant-websocket插件中常用节点
环境:Home Assistant 20230309.1 + Node-RED 3.0.1
-----------------------------------------------以下为正文-----------------------------------------------

容易的范式 - 等待无人状态持续x秒

设计效果:开灯 - 等待无人状态持续x秒 - 关灯
经典实现:配置两条规则:1. 当传感器感应到人,则打开灯;2. 当传感器超过x秒未感应到人,则关闭灯;
以上两条规则是逻辑完全独立的。即使灯并非由规则1打开,规则2仍然可能将其关闭。如果我们需要NR仅关闭自己打开的灯,则需要稍复杂一点的Flow
流程图
微信截图_20230502004901.png
解释:开灯后会流转到第一个wait until节点,流程会阻塞直到传感器探测到无人(off)。接下来继续流转到第二个wait until节点,这个节点会阻塞直到传感器探测到有人(on) 或者 timeout,这两种情况分别由Output 1/2输出。其中Output 1将回到第一个wait until节点继续等待,Output 2则是我们需要的传感器无人X秒。

这里涉及wait until节点的Timeout的使用,参数填写如下图所示
微信截图_20230502005952.png
lessen_1.json (4.63 KB, 下载次数: 96)

顺便介绍一下wait until节点。它来自node-red-contrib-home-assistant-websocket插件。它是插件中唯一可以阻塞流程直到Entity状态满足特定条件的节点,因此具有不可替代的作用。
和它有相似功能的节点有:
1. current state:在流程中获取Entity当前状态,但不能阻塞流程;
2. events: state / events: all:当Entity满足特定条件时触发,发起一个流程。但events*只能作为流程的开始而不能作为流程的中间节点;
3. poll state: 定时拉取Entity的状态,等效于设置的定时条件的Inject + current state节点;相比于events*,会忽略拉取间隔中的变化;

另外,wait until节点只能基于state而非attributes设置等待条件。特殊情况可能需要用template定义一个新的Entity,而其值是源Entity的attributes。


下一篇预告:同时满足多个条件X秒后关闭灯光,主要会涉及逻辑运算节点和trigger节点的使用


评分

参与人数 10金钱 +66 收起 理由
jjcs + 12 感谢楼主分享!
Dlian + 5 高手,这是高手!
isw866 + 5 高手,这是高手!
ydlmxsh + 5 感谢楼主分享!
liy517 + 5 论坛有你更精彩!
zjqian1990 + 5 感谢楼主分享!
kaka0992 + 8 期待更多教程
隔壁的王叔叔 + 10 感谢楼主分享!
dscao + 10 感谢楼主分享!
yc0209 + 1 赠人玫瑰,手留余香!

查看全部评分

回复

使用道具 举报

3

主题

154

帖子

1764

积分

金牌会员

Rank: 6Rank: 6

积分
1764
金钱
1610
HASS币
10
发表于 2023-5-2 09:42:29 | 显示全部楼层
很受用  
回复

使用道具 举报

4

主题

65

帖子

609

积分

高级会员

Rank: 4

积分
609
金钱
544
HASS币
0
发表于 2023-5-2 10:25:33 | 显示全部楼层
教程好 多来一点
回复

使用道具 举报

2

主题

136

帖子

2027

积分

金牌会员

Rank: 6Rank: 6

积分
2027
金钱
1891
HASS币
0
发表于 2023-5-2 11:14:42 | 显示全部楼层
棒。。。这个方法也是我苦想了好久才弄出来
回复

使用道具 举报

22

主题

319

帖子

3931

积分

论坛元老

Rank: 8Rank: 8

积分
3931
金钱
3607
HASS币
30
发表于 2023-5-2 20:49:15 | 显示全部楼层
很实用的方法
回复

使用道具 举报

46

主题

332

帖子

3394

积分

论坛元老

Rank: 8Rank: 8

积分
3394
金钱
3062
HASS币
0
发表于 2023-5-3 18:52:14 | 显示全部楼层
智能家居核心就是自动化,好东西,多分享点
回复

使用道具 举报

9

主题

179

帖子

1405

积分

金牌会员

Rank: 6Rank: 6

积分
1405
金钱
1226
HASS币
0
发表于 2023-5-3 19:48:57 | 显示全部楼层
第一个节点里不需要让状态等于0n吗,那不是相当于人体存在的状态变化就开灯了吗,不管是从on变到off还是反过来都会开灯?
回复

使用道具 举报

20

主题

265

帖子

1852

积分

金牌会员

Rank: 6Rank: 6

积分
1852
金钱
1587
HASS币
0
发表于 2023-5-6 15:24:54 | 显示全部楼层
期待更多NR教程
回复

使用道具 举报

6

主题

36

帖子

562

积分

高级会员

Rank: 4

积分
562
金钱
526
HASS币
0
 楼主| 发表于 2023-5-11 10:43:45 | 显示全部楼层
astang 发表于 2023-5-3 19:48
第一个节点里不需要让状态等于0n吗,那不是相当于人体存在的状态变化就开灯了吗,不管是从on变到off还是反 ...

对,应该要。我主要演示后面的流程。这个节点是随手拖的,感谢指出
回复

使用道具 举报

10

主题

112

帖子

586

积分

高级会员

Rank: 4

积分
586
金钱
474
HASS币
0
发表于 2023-5-26 21:38:53 | 显示全部楼层
有这么一个场景:传感器感应到人后自动开灯,并且在传感器感应不到人后二分钟自动关灯;在感应到人后开灯的状态中,如果手动关灯,在20秒内,即便是传感器感应到人,也不会开灯,20秒后感应到人才会自动开灯。

我目前是通过关灯后触发一个全局变量,20秒后解除限制,再次感应到人才能自动开灯,但感觉设置有点复杂,想请教一下如果是你,会怎么设置NR流?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 10:21 , Processed in 0.220129 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表