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

Ibm cloud 如何为节点红色的模块添加特定的时间间隔?,ibm-cloud,node-red,Ibm Cloud,Node Red,我对STACKOVERFLOW和Node RED都是新手,我在Bluemix平台上创建了一个Node RED孵化器项目 它基本上通过来自arduino的MQTT获取数据,功能节点将接收到的温度和湿度值与阈值进行比较。基于此计算数据,再次使用MQTT将操作命令发送回arduino 以下是项目的基本流程 在该项目中,我还添加了一些用于分析的仪表板节点 主要的问题是我怎样才能将阶段添加到这个项目中。不同时间间隔的阶段 第一阶段:比较的阈值应为最初3天的'XX' 第二阶段:接下来7天的比较阈值应为“Y

我对STACKOVERFLOW和Node RED都是新手,我在Bluemix平台上创建了一个Node RED孵化器项目

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

以下是项目的基本流程

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

主要的问题是我怎样才能将阶段添加到这个项目中。不同时间间隔的阶段

第一阶段:比较的阈值应为最初3天的'XX'

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

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

第四阶段:在未来5天内,比较的阈值应为'NN'

我在项目中总共有4个阶段

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

如何使用所示的项目流程实现这一点


在arduino中,我使用millis()函数来实现此目的。但我在节点红色中找不到任何选项。

在节点红色中插入节点

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


“开始时注入一次”选项实际上会在触发之前等待很短的时间间隔,以便给其他节点一个正确实例化的机会。

我会使用一个全局变量来存储您需要开始的日期,然后使用一个
case
If/Else
逻辑来评估它,并确定您现在所处的阶段。见:

只要您的节点化实例正在运行,就会一直保持这种状态。如果重新启动NodeRed,则必须将其重置。您需要一些逻辑来理解何时应该将其设置回某个基本值

编辑下面的示例代码是为了说明如何使用global.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);
}

这里不清楚你所说的阶段是什么意思,请编辑问题以添加更多细节