Ibm cloud IOT节点红色IBM Bluemix:状态机/存储旧数据

Ibm cloud IOT节点红色IBM Bluemix:状态机/存储旧数据,ibm-cloud,iot,node-red,Ibm Cloud,Iot,Node Red,我已经建立了一个简单的应用程序,它连接到我的物联网温度传感器设备,并根据温度发送电子邮件——温暖、恰到好处和寒冷。为此,我使用IBM IoT节点连接到我的IoT设备,然后使用case语句处理数据,将其分为三个部分:温暖、恰到好处和寒冷。从那里我生成一封电子邮件,并将临时类别发送到我的电子邮件地址 然而,我的温度传感器每1秒测量并发送数据,所以我的应用程序每1秒发送一封电子邮件——这太频繁了。相反,我只想在三种温度状态之间发生转变时发送电子邮件。当然,我想用状态机或case语句处理块来实现这一点。

我已经建立了一个简单的应用程序,它连接到我的物联网温度传感器设备,并根据温度发送电子邮件——温暖、恰到好处和寒冷。为此,我使用IBM IoT节点连接到我的IoT设备,然后使用case语句处理数据,将其分为三个部分:温暖、恰到好处和寒冷。从那里我生成一封电子邮件,并将临时类别发送到我的电子邮件地址

然而,我的温度传感器每1秒测量并发送数据,所以我的应用程序每1秒发送一封电子邮件——这太频繁了。相反,我只想在三种温度状态之间发生转变时发送电子邮件。当然,我想用状态机或case语句处理块来实现这一点。这要求我有两个数据点:当前温度测量值和上次记录的测量值。存储上一次记录的温度测量值的最佳方法是什么?关于我应该使用的节点流有什么提示吗


如果我们看一下这篇文章:


我们找到了一个叫做“上下文”的部分。这允许我们在消息流的实例之间维护状态数据,可以是全局的,也可以是特定节点的局部的。这意味着可以保存以前接收到的值,并将其与当前值进行比较。您必须在
函数
节点中使用JavaScript语言,但我希望这不会太复杂,并且有很多示例。

默认托盘中的异常报告(rbe)节点将为您执行此操作

仅当消息的
msg.payload
字段与上一条消息不同时,它才允许消息传递

流的外观如下所示:

我使用了MQTT输入,而不是IoTf节点,但这已经足够接近了

功能节点集的电子邮件正文(msg.payload)和rbe节点将处理每次更改只发送一次


需要注意的一点是,rbe节点根据每个主题进行过滤,因此所有消息都是同一主题的,但是发邮件节点使用该主题来设置电子邮件主题。

以及rbe您可以使用延迟节点(功能调色板中的第三个节点)来限制每分钟发送5条消息(可编程数字和周期),可以选择是否丢弃多余的消息。可能当消息以短突发方式到达,突发之间的间隔很长时,您可能不会丢弃。

看起来您的应用程序使用的是Node RED。您可以导出代码吗?:我想您可能需要将读数输入到Cloudant之类的数据库,然后只向s写入逻辑当你从一个阈值跨越到另一个阈值时,结束电子邮件。或者,你可能想查看上的一些流,看看这些示例是否对你有帮助。我发现rbe的一个奇怪之处是msg.payload必须是一个简单的字符串或整数值,不能是javascript对象。@barny,如果你能想出一种比较tw的有效方法的话o JSON对象我确信Node RED项目会接受一个补丁。:-)令人惊讶的是,这些文档并没有更加明确