在 node-red 中,延时操作诸如 sleep 的动作可以通过 delay 或者 trigger 来实现,而 delay 和 trigger 在使用中也略有差别,这篇文章通过具体的示例来进行说明。
以容器方式启动 node-red 服务,启动命令如下所示:
启动命令:docker run -it -p 1880:1880 -v $pwd/data:/data -e tz=asia/shanghai --name nodered -d nodered/node-red:1.0.4
下面使用一个 delay 节点的示例来对其使用进行说明
delay 5s 节点为缺省设定,详细如下所示
其余各节点也均使用缺省设定,部署、手动多次触发后结果如下所示
从右侧输出结果可以看到,结果三次正常输出,三次延后输出,延后输出都是 sleep 5 秒之后输出的,与正常输出一一对应。
使用场景: 虽然功能上也可以有扩展,但是 delay 在使用上主要就是 sleep 的概念。而 trigger 则需要结合具体的场景进行理解,node-red 毕竟是个 iot 领域的流程编辑引擎,比如需要连接的某个硬件传感器,需要定期检查是否有问题,如果没有问题则不需要进行任何处理,而仅当有问题时才需要进行后续处理,trigger 就是用于这种场景的,可以理解为 delay 功能的加强。
使用一个类似的构成来对 trigger 节点进行说明。
trigger 节点的设定详细如下图所示,设定 send nothing 和等待时间为 5s,其余均使用缺省设定
部署、手动多次触发后结果如下所示,可以看到和 delay 的一一对应不同,每 5s 会触发一次
[{"id":"d67f423d.4031","type":"inject","z":"73554227.4474dc","name":"","topic":"","payload":"","payloadtype":"date","repeat":"","crontab":"","once":false,"oncedelay":0.1,"x":240,"y":520,"wires":[["3ddd10ea.96ab3","8a18d983.f05418"]]},{"id":"807440a3.65064","type":"debug","z":"73554227.4474dc","name":"超时输出","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targettype":"msg","x":640,"y":580,"wires":[]},{"id":"3ddd10ea.96ab3","type":"debug","z":"73554227.4474dc","name":"正常输出","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targettype":"msg","x":640,"y":520,"wires":[]},{"id":"8a18d983.f05418","type":"trigger","z":"73554227.4474dc","op1":"","op2":"5 秒没有动作,请检查硬件","op1type":"nul","op2type":"str","duration":"5","extend":false,"units":"s","reset":"","bytopic":"all","name":"","x":420,"y":580,"wires":[["807440a3.65064"]]}]
虽然功能不止于此,在这篇文章的两个对比示例中,delay 的方式手动触发会一一对应触发,而 trigger 则是定期触发,而如果选中 extend delay if new message arrives 的复选框的情况下,则本文示例中的 trigger 的功能则变为只要有消息到来就一直不会超时。
来源:
nodered 澳门人威尼斯3966官网:
noderedgithub:
nodered 英文社区:
nodered 中文社区:https://www.iotschool.com/topics/node81
nodered 中文社区 qq 群:8604461