如何为节点红色的模块添加一定的时间间隔?
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 选项实际上会在触发之前等待一小段时间,以便让其他节点有机会正确实例化。
我会使用全局变量来存储您需要开始的日期,然后使用 case
或 If/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);
}
我是 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 选项实际上会在触发之前等待一小段时间,以便让其他节点有机会正确实例化。
我会使用全局变量来存储您需要开始的日期,然后使用 case
或 If/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);
}