使用 Node-RED对 MQTT 数据流处理

 更新时间:2022年05月24日 16:28:23   作者:EMQX  
本文将介绍使用 Node-RED 连接到 MQTT 服务器,并对 MQTT 数据进行过滤和处理后再将其发送至 MQTT 服务器的完整操作流程。读者可以快速了解如何使用 Node-RED 对 MQTT 数据进行简单的流处理

Node-RED 是一个可视化的编程工具,可以创新和有趣的方式将硬件设备、API 和在线服务等连接起来。它提供了一个基于浏览器的编辑器,通过调色板中广泛的节点将流程轻松连接起来,而这些节点只需通过一次点击即可部署到其运行时。

除 HTTP、WebScoket 等一些基础的网络服务应用节点外,Node-RED 还提供对于 MQTT 协议的连接支持。目前同时提供了一个 MQTT 的订阅节点和 MQTT 的发布节点,订阅节点用于数据的输入,而发布节点可以用于数据的输出。

本文将介绍使用 Node-RED 连接到 MQTT 服务器,并对 MQTT 数据进行过滤和处理后再将其发送至 MQTT 服务器的完整操作流程。读者可以快速了解如何使用 Node-RED 对 MQTT 数据进行简单的流处理。

Node-RED 安装

Node-RED 无论是在你本地的电脑上,还是树莓派等设备,亦或是云端服务器,都可以快速安装和使用,下面将使用两种比较常见的安装方式:

使用 npm 进行全局安装:

1npm install -g --unsafe-perm node-red

使用 Docker 进行安装:

1docker run -it -p 1880:1880 --name mynodered nodered/node-red

运行

如果使用的是 npm 进行的全局安装,那么在提示安装成功后,只需要在全局运行 node-red 命令就可以立即启动 Node-RED。

无论是使用 Docker 还是 npm 在启动成功后,我们只需要打开浏览器,输入当前地址加 1880 端口号,即可打开 Node-RED 的浏览器编辑器页面,例如在本地运行的话,打开浏览器,输入 http://127.0.0.1:1880,当看到如下图所示页面后,说明 Node-RED 已经成功启动:

在 Node-RED 中使用 MQTT

本文将使用 EMQ 提供的 免费公共 MQTT 服务器,该服务基于 MQTT 物联网云平台 - EMQX Cloud 创建,服务器接入信息如下:

  • Broker: broker-cn.emqx.io
  • TCP Port: 1883
  • WebSocket Port: 8083

在下面的功能演示中,我们将提供一个使用 Node-RED 来处理接收到的包含温湿度信息的 JSON 数据,然后对温度值进行规则判断,当温度发生改变的时候,就将当前发生改变的温度值通过 MQTT 再次发送出去的简单使用案例。

连接 MQTT 服务器

我们首先在左侧菜单栏中,拖拽一个 MQTT in 的节点到页面中,双击节点后,右侧出现一个编辑 MQTT 节点的配置页面,我们根据内容提示,新建一个连接信息后,再填入 MQTT 的其它连接信息后,点击 Done 按钮后,即可保存该节点信息。

对 MQTT 数据进行处理

接入数据:我们拖拽一个 JSON 节点到页面中,可以在 JSON 节点的配置页面中,配置一个 Action,我们设置为 Always convert to JavasScript Object,因为我们无法确定发送过来的数据是一个 JSON 格式的数据还是一个 JSON 字符串,因此第一步都将接收到的消息进行一个 JSON 转换。配置完成后,我们将该节点与 MQTT in 节点进行连接。

过滤数据

我们配置完成格式化发送过来的消息数据后,我们就可以拖拽一个 filter 节点到页面中,同样双击节点后,在配置页面中配置规则,我们先选择一个 Mode,我们设置为 blcok unless value changes,过滤规则为需要当前接收到数据的值发生改变,因为目前数据为 JSON 格式,我们判断的是 JSON 数据内的某一个值,因此我们需要在 Property 这里设置值为 msg.payload.temperature 配置完成后我们点击 Done 按钮来保存数据过滤节点的配置,最后将该节点连接到上一步配置完成后的 JSON 节点。

使用模版

当过滤完数据后,同样拖拽一个 template 节点到页面中,双击节点后来配置模版内容,使过滤完成后的数据,能通过模版将数据进行输出。当然也可以不需要这个步骤,直接将过滤后的数据进行输出。

发送经过处理后的 MQTT 数据

完成以上对数据的处理和过滤后,最后我们再来将处理完成后的数据使用 MQTT 将其发送出去,拖拽一个 MQTT out 的节点到页面中,填入和 MQTT in 节点相同的连接信息,配置一个用户接收数据的 Topic,最后保存完成后,再将其和 template 节点进行连接,点击右上角的 Deploy 按钮,即可对当前规则应用进行在线部署。

功能测试

在完成整个流数据处理的功能编排以后,我们使用 MQTT 5.0 客户端工具 - MQTT X 来测试和验证该功能的可用性。我们新建一个连接,连接到刚才在 Node-RED 中配置的 MQTT 云服务地址,然后输入 MQTT in 节点内的 Topic 来发送一条消息,使 Node-RED 能够接收到我们发送的 MQTT 数据。

然后我们再在 MQTT X 中订阅一个在 MQTT out 节点内配置的 Topic,用于接收处理过的消息数据。当发送一条包含了温湿度的消息数据后,我们可以接收到一条根据我们设定的消息模版发送过来的消息,再次发送就无法接收到。

因为此时温度值没有发生变化,当我们再次修改温度值后,就会发现我们又接收到了一条包含提醒温度值发生变化的消息。

总结

至此,我们完成了安装并使用 Node-RED 连接到 MQTT 云服务,以及对 MQTT 消息数据进行过滤和处理,最后再将处理完成后的数据消息发送至 MQTT 服务器的全部流程。

Node-RED 的交互和使用方式,即用 UI 方式描述通用业务逻辑,可以降低非专业开发人员的上手门槛,使用一个可视化工具快速地创建需要的复杂执行任务,可以通过简单 Node 即节点连接构建出复杂的任务,特别是针对一些物联网的应用场景,都很有帮助。

到此这篇关于使用 Node-RED 处理 MQTT 数据进行流处理的文章就介绍到这了,更多相关Node-RED 处理 MQTT 数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nodejs教程之环境安装及运行

    nodejs教程之环境安装及运行

    文章从nodejs环境安装、文件结构、路由做了详细介绍,然后结合mongodb制作注册功能也做了细致的讲述,是篇非常不错的文章,这里推荐给大家
    2014-11-11
  • Node8中AsyncHooks异步生命周期

    Node8中AsyncHooks异步生命周期

    这篇文章主要介绍了Node8中AsyncHooks异步生命周期,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • node.js降低版本的方式详解(解决sass和node.js冲突问题)

    node.js降低版本的方式详解(解决sass和node.js冲突问题)

    这篇文章主要介绍了node.js降低版本的方式(解决sass和node.js冲突),本文是因为sass版本和node版本不匹配(可以找一下对应的版本),本文给大家详细讲解,需要的朋友可以参考下
    2023-02-02
  • koa+mongoose实现简单增删改查接口的示例代码

    koa+mongoose实现简单增删改查接口的示例代码

    这篇文章主要介绍了koa+mongoose实现简单增删改查接口的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 详细分析Node.js 多进程

    详细分析Node.js 多进程

    这篇文章主要介绍了Node.js 多进程的的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Node异步和事件循环的深入讲解

    Node异步和事件循环的深入讲解

    异步对于前端来说是老生常谈的话题,同样学习node也离不开异步IO与事件循环,下面这篇文章主要给大家介绍了关于Node异步和事件循环的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 快速掌握Node.js事件驱动模型

    快速掌握Node.js事件驱动模型

    这篇文章主要为大家详细介绍了Node.js事件驱动模型,首先了解一下传统的线程网络模型,然后再学习了解Node.js事件驱动模型,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • node.js发送邮件email的方法详解

    node.js发送邮件email的方法详解

    这篇文章主要介绍了node.js发送邮件email的方法,结合实例形式详细分析了node.js发送邮件的原理、操作步骤、注意事项及常见问题解决方法,需要的朋友可以参考下
    2017-01-01
  • Nodejs实现短信验证码功能

    Nodejs实现短信验证码功能

    使用Nodejs的开发者愈来越多,基于Nodejs的后台开发也多了起来,像短信验证码、短信群发、国际短信这些需求,完全可以采用第三方接口来实现,云片就提供了这样的接口
    2017-02-02
  • 创建简单的node服务器实例(分享)

    创建简单的node服务器实例(分享)

    下面小编就为大家带来一篇创建简单的node服务器实例(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论