【问题标题】:IOT Node Red IBM Bluemix: State Machine/Store Old DataIOT Node Red IBM Bluemix:状态机/存储旧数据
【发布时间】:2016-05-16 02:39:21
【问题描述】:

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

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

Email IoT Application Nodes

【问题讨论】:

  • 看起来您正在为您的应用程序使用 Node-RED。可以导出代码吗?:
  • 我认为您可能需要将读数提供给 Cloudant 等数据库,然后编写逻辑以仅在您从一个阈值跨越到另一个阈值时发送电子邮件。或者,您可能想查看flows.nodered.org 的一些流程,看看这些示例是否对您有帮助。

标签: ibm-cloud iot node-red


【解决方案1】:

除了 rbe 之外,您还可以使用延迟节点(函数面板中的第三个)将速率限制为例如每分钟 5 条消息(可编程数量和周期),并可选择是否丢弃多余的消息。据推测,当消息以短脉冲到达且脉冲之间的间隔很长时,您可能不会丢弃。

【讨论】:

    【解决方案2】:

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

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

    流程看起来像这样:

    我使用了 MQTT 输入而不是 IoTf 节点,但它几乎相同。

    函数节点集的邮件正文(msg.payload)和rbe节点将处理每次更改只发送一次。

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

    【讨论】:

    • 我对 rbe 感到奇怪的一点是 msg.payload 必须是简单的字符串或整数值,不能是 javascript 对象。
    • @barny 如果你能想出一种有效的方法来比较两个 JSON 对象,我相信 Node-RED 项目会接受补丁。
    • :-) 令人惊讶的是文档并没有更明确
    【解决方案3】:

    如果我们看看这篇文章:

    http://noderedguide.com/index.php/2015/11/06/node-red-lecture-5-the-node-red-programming-model/

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多