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

 找回密码
 立即注册
查看: 11332|回复: 10

[教程系列] 求 Node-RED 触发顺序 怎么做?

[复制链接]

40

主题

313

帖子

3093

积分

论坛元老

Rank: 8Rank: 8

积分
3093
金钱
2780
HASS币
0
发表于 2020-4-20 03:44:47 | 显示全部楼层 |阅读模式
传感器输出都为MQTT  ,分为 A、B、C三个传感器,想做的流程是这样

当A为1,隔2秒,B为1的时候,触发MQTT(走廊灯)
当A为1,隔5秒,C为1的时候,触发MQTT(厨房灯)
当B为1,隔2秒,A为1的时候,触发MQTT(卧室灯)

麻烦各位前辈,帮忙做一个流程示例就可以,主要是不知道怎么判断后面的条件。
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-4-20 09:31:55 | 显示全部楼层
本帖最后由 neroxps 于 2020-4-20 09:34 编辑

用间隔来做灯的触发会不会有问题??精确到多少秒在现实生活中很难确定吧?

流程可以做,但感觉不太适合。
Nero
回复

使用道具 举报

40

主题

313

帖子

3093

积分

论坛元老

Rank: 8Rank: 8

积分
3093
金钱
2780
HASS币
0
 楼主| 发表于 2020-4-20 09:57:23 | 显示全部楼层
neroxps 发表于 2020-4-20 09:31
用间隔来做灯的触发会不会有问题??精确到多少秒在现实生活中很难确定吧?

流程可以做,但感觉不太适合。

不是精确到秒数,就是最短间隔,其实没用,就是判断传感器前后顺序
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-4-20 10:06:42 | 显示全部楼层
dizherui 发表于 2020-4-20 09:57
不是精确到秒数,就是最短间隔,其实没用,就是判断传感器前后顺序

如果看得懂,可以参考我人数识别的帖子。但是你比我的更复杂,因为你是三个传感器做对比。
Nero
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-4-20 10:34:05 | 显示全部楼层
本帖最后由 neroxps 于 2020-4-20 10:47 编辑

flows.zip (1 KB, 下载次数: 53)

flows.jpg

原理就是使用 join 节点的特性,当 join 收到两个信息之后往下发送,然后通过逻辑判断他两个信息谁先谁后。


join 发送的永远是第二个信息的msg,所以先判断join之后的 msg.topic 来看看是谁是最后一个,然后再通过合并 topic 到 msg.payload 来找谁是触发者。


这样就满足你的逻辑判断,但如果精确到时间,就复杂很多了。你需要先记录时间,满足条件后还要做时间判断。谁的时间大于谁的,如果还要精确到秒,我觉得这个就么必要了。


这个流程有bug,因为如果C也可以作为先触发的话,可能会乱套。
Nero
回复

使用道具 举报

15

主题

158

帖子

1368

积分

论坛技术达人

积分
1368
金钱
1200
HASS币
40
发表于 2020-4-20 10:34:31 | 显示全部楼层
你可以试试node-red-contrib-interval-length这个节点,这个可以按主题测量两个消息之间的间隔,后面你在自己判断时间长度,在进行触发
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-4-20 10:43:26 | 显示全部楼层
minions123 发表于 2020-4-20 10:34
你可以试试node-red-contrib-interval-length这个节点,这个可以按主题测量两个消息之间的间隔,后面你在自 ...

试了下,是可以精确两个节点到毫秒的触发,但没法知道谁先触发,只知道最后触发的是谁。
Nero
回复

使用道具 举报

40

主题

313

帖子

3093

积分

论坛元老

Rank: 8Rank: 8

积分
3093
金钱
2780
HASS币
0
 楼主| 发表于 2020-4-21 14:44:29 | 显示全部楼层
neroxps 发表于 2020-4-20 10:34
原理就是使用 join 节点的特性,当 join 收到两个信息之后往下发送,然后通过逻辑判断他两个信息谁先谁 ...

哇哦,版主好用心,我参考了你的人数识别,最近房子开始设计木作了,我准备在门框上直接把传感器的口留好,我这个问的是给棚顶红外传感器用的,多多益善嘛,我去试试你的流程
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-4-21 17:23:21 | 显示全部楼层
dizherui 发表于 2020-4-21 14:44
哇哦,版主好用心,我参考了你的人数识别,最近房子开始设计木作了,我准备在门框上直接把传感器的口留好 ...

欢迎一起研究。

我装修也预留了线,但是没在门框上动手脚
Nero
回复

使用道具 举报

0

主题

25

帖子

129

积分

注册会员

Rank: 2

积分
129
金钱
104
HASS币
0
发表于 2020-6-23 18:45:35 | 显示全部楼层
楼主应该是通过传感器的触发顺序来判定人的行进方向,进而触发开关灯的动作。
没必要搞很复杂啊。
当A触发,delay一秒判断B状态,如果被触发,那么Mqtt走廊
A触发  delay5秒判断C状态,如果被触发,那么厨房灯
B触发,delay2秒判断A触发,那么卧室灯。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 18:18 , Processed in 0.302656 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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