如何为节点红色的模块添加一定的时间间隔?

How to add certain time intervals for the modules in node red?

我是 Whosebug 和 Node-RED 的新手,我在 Bluemix Plaform 上的 Node-Red 中创建了一个孵化器项目。

基本上是通过MQTT从arduino获取数据,函数节点将接收到的温度和湿度值与阈值进行比较。基于此计算数据,再次使用 MQTT 将操作命令发送回 arduino。

这里是项目的基本流程

在项目中我还添加了一些用于分析的仪表板节点。

主要问题是如何向该项目添加阶段。阶段意义不同的时间间隔。

第一阶段:最初 3 天

的比较阈值应为 'XX'

第二阶段:接下来 7 天的比较阈值应为 'YY'

第三阶段:接下来 9 天的比较阈值应为 'ZZ'

第 4 阶段:接下来 5 天的比较阈值应为 'NN'

我的项目总共有 4 个阶段。

最初,阈值应为 X,3 天后,必须更改阈值。这个过程必须进行三次,因为我有 4 个时间间隔(4 个阶段)。

我如何使用显示的项目流程实现此目标..

在 arduino 中,我曾经为此使用 millis() 函数。但是我没有在 Node-RED 中找到任何选项。

在 Node RED 中注入节点

重复功能允许按要求的时间表发送有效载荷。

Inject once at start 选项实际上会在触发之前等待一小段时间,以便让其他节点有机会正确实例化。

我会使用全局变量来存储您需要开始的日期,然后使用 caseIf/Else 逻辑对其进行评估并确定您现在所处的阶段。请参阅: http://nodered.org/docs/writing-functions.html#storing-data

只要您的 NodeRed 实例是 运行,它就会一直保留。如果重新启动 NodeRed,则必须重新设置它。并且您需要一些逻辑来了解何时应将其设置回某个基值。

编辑下面的示例代码以展示如何使用全局。get/set。如果这是出于商业目的,我会比我在这里更加谨慎和考虑日期处理!

//Get current time and time started. Initialize if doesn't exist
timestp = Date.now();
if (!global.get('dateStarted')){
 global.set('dateStarted', timestp);
}

var dateStarted = global.get('dateStarted');

//Check what stage
if (dateStarted == timestp){
    node.warn("I'm new" +timestp);
}
// A day holds 86,400,000 milliseconds.  This needs more verification!!
else if (dateStarted > (timestp + (86400000 * 3 ))){
    node.warn("3 days or more" +dateStarted);
}