Node-RED使用指南:18:延時觸發:delay vs trigger

在這裏插入圖片描述
在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節點的示例來對其使用進行說明
在這裏插入圖片描述
delay 5s節點爲缺省設定,詳細如下所示
在這裏插入圖片描述
其餘各節點也均使用缺省設定,部署、手動多次觸發後結果如下所示
在這裏插入圖片描述
從右側輸出結果可以看到,結果三次正常輸出,三次延後輸出,延後輸出都是sleep 5秒之後輸出的,與正常輸出一一對應。

Trigger

使用場景:
雖然功能上也可以有擴展,但是delay在使用上主要就是sleep的概念。而trigger則需要結合具體的場景進行理解,Node-RED畢竟是個IOT領域的流程編輯引擎,比如需要連接的某個硬件傳感器,需要定期檢查是否有問題,如果沒有問題則不需要進行任何處理,而僅當有問題時才需要進行後續處理,trigger就是用於這種場景的,可以理解爲delay功能的加強。

使用一個類似的構成來對trigger節點進行說明。
在這裏插入圖片描述
trigger節點的設定詳細如下圖所示,設定Send nothing和等待時間爲5s,其餘均使用缺省設定
在這裏插入圖片描述

部署、手動多次觸發後結果如下所示,可以看到和delay的一一對應不同,每5s會觸發一次
在這裏插入圖片描述

  • JSON格式的flow
[{"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的功能則變爲只要有消息到來就一直不會超時。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章