如何为节点红色的模块添加一定的时间间隔?
Posted
技术标签:
【中文标题】如何为节点红色的模块添加一定的时间间隔?【英文标题】:How to add certain time intervals for the modules in node red? 【发布时间】:2017-03-11 14:20:55 【问题描述】:我是 *** 和 Node-RED 的新手,我在 Bluemix 平台上的 Node-Red 中创建了一个孵化器项目。
它基本上是通过 arduino 的 MQTT 获取数据,功能节点将接收到的温度和湿度值与阈值进行比较。根据这些计算数据,动作命令再次使用 MQTT 发送回 arduino。
这是项目的基本流程
在项目中我还添加了一些仪表板节点进行分析。
主要问题是如何为这个项目添加阶段。阶段在意义上不同的时间间隔。
第一阶段:最初 3 天的比较阈值应为'XX'。
第 2 阶段:比较的阈值应为 'YY'接下来的 7 天。
第 3 阶段:比较的阈值应为 'ZZ'接下来的 9 天。
第 4 阶段:比较的阈值应为 'NN'接下来的 5 天。
我的项目共有 4 个阶段。
最初,阈值应为 X,3 天后,必须更改阈值。这个过程必须进行三次,因为我有 4 个时间间隔(4 个阶段)。
如何使用显示的项目流程来实现这一点..
在 arduino 中,我曾经为此使用 millis() 函数。但是我在 Node-RED 中没有找到任何选项。
【问题讨论】:
这里的阶段真的不清楚你的意思,请编辑问题以添加更多细节 【参考方案1】:我会使用一个全局变量来存储您需要从哪一天开始,然后使用 case
或 If/Else
逻辑来评估它并确定您现在所处的阶段。请参阅:http://nodered.org/docs/writing-functions.html#storing-data
只要您的 NodeRed 实例正在运行,它就会一直保留。如果重新启动 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);
【讨论】:
【参考方案2】:在节点RED中注入节点
重复功能允许按要求的时间表发送有效负载。
Inject once at start 选项实际上会在触发前等待一小段时间间隔,以便让其他节点有机会正确实例化。
【讨论】:
以上是关于如何为节点红色的模块添加一定的时间间隔?的主要内容,如果未能解决你的问题,请参考以下文章