实用节点【自动循环looptimer2】&【时间戳moment】介绍

介绍一下在上次发的抓拍摄像头应用中用到的2个实用的节点,node-red-contrib-looptimer2 以及 node-red-contrib-moment

写了个案例来说明

先来介绍下looptimer2,当被触发后,它可以发起循环执行命令,直到达到设定的目标或者收到停止payload(stop或者STOP)后结束执行。
停止后会发送一个stopped的payload。

微信截图_20190712092628.png

looptimer2的循环输出都会带一个上游传递过来的时间戳(也就是我们触发循环的时间),但这个时间戳无法被我们看懂,当需要输出给其他节点用于显示时间,就可以使用moment节点来解释。

假如我们需要给后方节点发送一个时间,那么可以这样操作

更多关于时间格式的设置可以参考这里:https://momentjs.com/docs/#/displaying/format/

亲自体验一下吧:
[mw_shl_code=javascript,true]{“id”:“8cee0827.7c9008”,“type”:“tab”,“label”:“流程1”,“disabled”:false,“info”:""},{“id”:“690240c0.f7f8c”,“type”:“looptimer2”,“z”:“8cee0827.7c9008”,“duration”:“1”,“units”:“Second”,“maxloops”:“2”,“maxtimeout”:“1”,“maxtimeoutunits”:“Minute”,“name”:“每秒执行1次,重复3次,超时时间1分钟”,“x”:460,“y”:180,“wires”:“dce9bd19.2ddd5”,“d5e4cfce.2d9e1”],“7b3bd3b7.4f416c”,“a7945bf5.c7e448”]]},{“id”:“dce9bd19.2ddd5”,“type”:“debug”,“z”:“8cee0827.7c9008”,“name”:"",“active”:true,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“false”,“x”:790,“y”:100,“wires”:]},{“id”:“7cb70039.e0bb5”,“type”:“inject”,“z”:“8cee0827.7c9008”,“name”:“开始信号”,“topic”:"",“payload”:"",“payloadType”:“date”,“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“x”:180,“y”:140,“wires”:“690240c0.f7f8c”]]},{“id”:“7b3bd3b7.4f416c”,“type”:“debug”,“z”:“8cee0827.7c9008”,“name”:"",“active”:true,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“false”,“x”:790,“y”:220,“wires”:]},{“id”:“37d17861.837ee8”,“type”:“inject”,“z”:“8cee0827.7c9008”,“name”:“停止信号”,“topic”:"",“payload”:“stop”,“payloadType”:“str”,“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“x”:180,“y”:220,“wires”:“690240c0.f7f8c”]]},{“id”:“db9cbe0e.f414”,“type”:“function”,“z”:“8cee0827.7c9008”,“name”:“测试”,“func”:“msg.payload = ${msg.time}:循环被触发了;\nreturn msg;”,“outputs”:1,“noerr”:0,“x”:990,“y”:140,“wires”:“9587405b.90f45”]]},{“id”:“1828bfde.346b6”,“type”:“function”,“z”:“8cee0827.7c9008”,“name”:“测试”,“func”:“msg.payload = ${msg.time}:结束消息是:${msg.payload};\nreturn msg;”,“outputs”:1,“noerr”:0,“x”:990,“y”:260,“wires”:“4a36fc17.0b8864”]]},{“id”:“9587405b.90f45”,“type”:“debug”,“z”:“8cee0827.7c9008”,“name”:"",“active”:true,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“false”,“x”:1130,“y”:140,“wires”:]},{“id”:“4a36fc17.0b8864”,“type”:“debug”,“z”:“8cee0827.7c9008”,“name”:"",“active”:true,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“false”,“x”:1130,“y”:260,“wires”:]},{“id”:“d5e4cfce.2d9e1”,“type”:“moment”,“z”:“8cee0827.7c9008”,“name”:"",“topic”:"",“input”:“payload”,“inputType”:“msg”,“inTz”:“Asia/Shanghai”,“adjAmount”:0,“adjType”:“days”,“adjDir”:“add”,“format”:“YYYY-MM-DD-HH-mm-ss-SSS”,“locale”:“POSIX”,“output”:“time”,“outputType”:“msg”,“outTz”:“Asia/Shanghai”,“x”:820,“y”:140,“wires”:“db9cbe0e.f414”]]},{“id”:“a7945bf5.c7e448”,“type”:“moment”,“z”:“8cee0827.7c9008”,“name”:"",“topic”:"",“input”:"",“inputType”:“date”,“inTz”:“Asia/Shanghai”,“adjAmount”:0,“adjType”:“days”,“adjDir”:“add”,“format”:“YYYY-MM-DD-HH-mm-ss-SSS”,“locale”:“POSIX”,“output”:“time”,“outputType”:“msg”,“outTz”:“Asia/Shanghai”,“x”:820,“y”:260,“wires”:“1828bfde.346b6”]]}][/mw_shl_code]

感谢分享 感觉我用得到 把手动写的一个循环换了

大佬,我用这个循环命令第一次输入能执行,后面就不能循环执行了,请教一下

you can set a maximum timeout in seconds, minutes or hours, and when that time is reached, the loop and timer will also be stopped.

谢谢,搞明白了 :smiley: