Node-RED使用指南:19:使用trigger实现retry

在这里插入图片描述
在流程控制中,经常会碰到异步方式对结果进行确认,如果出错的情况下进行重试,这篇文章结合具体的示例对trigger在Node-RED中流程编辑的方式进行进一步说明。

事前准备

以容器方式启动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

使用场景:连接性检测

场景说明:如果持续能够获取输入的情况下,表明连接是正常的,如果一旦不能有数据过来,可能是硬件传感器的数据没有获取,说明是失败的情况。

在这里插入图片描述
trigger节点设定信息详细如下所示:
在这里插入图片描述
部署之后,执行结果如下所示
在这里插入图片描述
当然也可以将输出进行合并,显示用的输出节点合并之后如下图所示
在这里插入图片描述
部署并执行,结果如下所示
在这里插入图片描述

retry逻辑

上述的示例有一个问题就是一旦出错,不能够持续性地进行提示,再结合一个trigger即可实现常见的retry功能,从而实现一旦停止5s以上不输入就会持续输出信息,如果数据一旦继续输入就会不再提示错误信息的功能。flow信息如下所示
在这里插入图片描述

  • tregger 5s节点设定信息如下所示

在这里插入图片描述

  • retry节点设定如下所示:
    在这里插入图片描述
    部署之后执行结果如下所示:
    在这里插入图片描述
  • JSON格式的flow
[{"id":"d67f423d.4031","type":"inject","z":"73554227.4474dc","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":160,"wires":[["3ddd10ea.96ab3","8a18d983.f05418"]]},{"id":"3ddd10ea.96ab3","type":"debug","z":"73554227.4474dc","name":"正常输出","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":700,"y":160,"wires":[]},{"id":"8a18d983.f05418","type":"trigger","z":"73554227.4474dc","op1":"retry","op2":"true","op1type":"str","op2type":"bool","duration":"5","extend":true,"units":"s","reset":"","bytopic":"all","name":"","x":340,"y":220,"wires":[["fd94e825.30c3f8"]]},{"id":"fd94e825.30c3f8","type":"trigger","z":"73554227.4474dc","op1":"5秒没有动作,请检查硬件","op2":"5秒没有动作,请检查硬件","op1type":"str","op2type":"str","duration":"-5","extend":true,"units":"s","reset":"retry","bytopic":"all","name":"retry","x":510,"y":220,"wires":[["3ddd10ea.96ab3"]]}]

总结

在Node-RED中,本例中展示的特性还可以用作异常时的替换,比如正常时传感器以2秒的频率进行数字的更新仪表盘的显示,而一旦硬件出现问题,可以考虑使用这种方式进行异常情况下的数据替代输出,比如显示为0,一旦硬件恢复动作,retry不再执行,而仪表盘的显示也能随之正常。

发布了1133 篇原创文章 · 获赞 1357 · 访问量 410万+

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/104745389