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

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】:

我会使用一个全局变量来存储您需要从哪一天开始,然后使用 caseIf/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 选项实际上会在触发前等待一小段时间间隔,以便让其他节点有机会正确实例化。

【讨论】:

以上是关于如何为节点红色的模块添加一定的时间间隔?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Spring Boot 2 添加自定义 MeterRegisty

日期间隔 SQL

本地通知 - 重复间隔/自定义时间不起作用

如何为所有节点模块自动安装@types

如何为导出函数的节点模块编写打字稿定义文件?

C++怎么能间隔一定的时间执行指定的代码