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

目录
  • Node-RED 安装
  • 运行
  • 在 Node-RED 中使用 MQTT
    • 连接 MQTT 服务器
    • 对 MQTT 数据进行处理
    • 发送经过处理后的 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 数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • node-red教程之dashboard简介与输入型仪表板控件的使用

    目录 7.1 仪表板安装与介绍 7.1.1 仪表板的安装 7.1.2 检验安装结果 7.1.3 仪表板简介 7.2 常见的输入型仪表板控件应用 7.2.1 按钮button简介 7.2.2 使用按钮实现简易电话拨号界面 7.2.3 开关switch的使用 7.2.4 滑块slider的使用 7.2.5 输入框text input的使用 7.2.6 使用文本输入的取色功能为按钮设置颜色 7.2.7 下拉菜单dropdown的使用 Node-red基于JS,这是前端技术的“三驾马车”之一.前端技术主

  • Docker安装node-red、导入节点、部署查看的步骤详解

    一.node-red官网: https://nodered.org/ 二.node-red官网上docker安装node-red的教程: https://nodered.org/docs/getting-started/docker 三.安装步骤: 1.前提是本地或服务器已经安装好docker和配置好阿里云镜像加速. 2.执行命令: # 拉取node-red的镜像 docker pull nodered/node-red # 运行node-red的镜像成为容器 docker run -it -p

  • Node-Red实现MySQL数据库连接的方法

    要想实现Node-red连接数据库(mysql),首先电脑需要在电脑中下载MySQL软件,并安装Navicat便于操作,这里默认已经安装完毕. Node-Red中控件下载 在Node-Red中需要先下载所需要的mysql控件: 首先在左上角点击设置,并找到节点管理 : 在节点管理中点击安装: 在安装界面的查询窗口输入node-red-node-mysql 控件,查询后选择下载,等待下载完成: mysql控件使用 在本地新建连接root,并设置Database为本地连接名称 节点信息 定义对接收到

  • node-red File读取好保存实例讲解

    File节点是操作文件的节点 file文件的保存 拖拽 注入节点inject  file节点(writes msg.payload to a file)和 debug节点到工作区,并连线 设置file节点的文件路径 windows如果不设置路径,会保存在C:\Users\Administratordocker容器保存在根目录下 此处文件名我选择 放到data目录下,因为docker容器启动的时候我把/data目录挂载到宿主机上了,方便查看文件 行为有三种,追加至文件  复写文件  删除文件 勾选

  • 基于Node-red的在线评语系统(可视化编程,公网访问)

    目录 Node-red简介与安装 什么是Node-red 安装Node-red 安装Dashboard 编写评语文案 界面 配色网站 按钮 结果显示 显示图片 内嵌图片编码 函数节点编写 Global全局传递参数 数据拼接 在线复制功能 外网使用 最近给高校做了实训,要写300多份评语.评语稍微有点形式主义,且实在是有点多,而且……我懒.好吧,我承认了. 然而,我并没有找到合适的评语系统.搜到了AA班级助手,只有小学和中学的评语库,不适合大学生用. 上CSDN斥巨资下载几个评语软件,没有一个好用

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

    目录 Node-RED 安装 运行 在 Node-RED 中使用 MQTT 连接 MQTT 服务器 对 MQTT 数据进行处理 发送经过处理后的 MQTT 数据 功能测试 总结 Node-RED 是一个可视化的编程工具,可以创新和有趣的方式将硬件设备.API 和在线服务等连接起来.它提供了一个基于浏览器的编辑器,通过调色板中广泛的节点将流程轻松连接起来,而这些节点只需通过一次点击即可部署到其运行时. 除 HTTP.WebScoket 等一些基础的网络服务应用节点外,Node-RED 还提供对于M

  • Node.js数据流Stream之Duplex流和Transform流用法

    Duplex流一个很好的例子是TCP套接字连接.需要实现_read(size)和_Write(data,encoding,callback)方法. var stream = require('stream'); var util = require('util'); util.inherits(Duplexer, stream.Duplex); function Duplexer(opt) { stream.Duplex.call(this, opt); this.data = []; } Du

  • 在Node.js下运用MQTT协议实现即时通讯及离线推送的方法

    前言 前些日子了解到mqtt这样一个协议,可以在web上达到即时通讯的效果,但网上并不能很方便地找到一篇目前版本的在node下正确实现这个协议的博客. 自己捣鼓了一段时间,理解不深刻,但也算是基本能够达到使用目的. 本文尚未对离线消息的接收顺序进行处理. 代码 服务端: server.js //服务端引入中间件mosca let mosca = require('mosca') let settings = { port: 5112 } let server = new mosca.Server

  • Node的stream数据流你了解吗

    目录 一.Node的数据流(stream) 1.处理缓存的方式 2.四种类型的流 3.zlib模块:用于文件的压缩与解压缩 (1)压缩方法:zlib.createGzip() (2)解压缩方法:zlib.createGunzip() 总结 一.Node的数据流(stream) 1.处理缓存的方式 (1)一次性全部读取,然后再进行处理.缺点是大文件处理非常耗时,优点是过程直观 (2)读取一块处理一块.优点是提高程序的性能 2.四种类型的流 Readable - 其是用于读操作 Writable -

  • Node.js数据流Stream之Readable流和Writable流用法

    一.前传 Stream在很多语言都会有,当然Node.js也不例外.数据流是可读.可写.或即可读又可写的内存结构.Node.js中主要包括Readable.Writable.Duplex(双工)和Transform(变换)流.但是在学这些之前先学会util模块中的一个从其他对象继承的功能. util模块提供了util.inherits()方法来允许你创建一个继承另一个对象的prototype(原形)方法的对象.当创建一个新对象时,prototype方法自动被使用. util.inherits(c

  • node实现定时发送邮件的示例代码

    本文介绍了node实现定时发送邮件的示例代码,分享给大家,具体如下: 定时发送,可做提醒使用 nodemailer nodemailer 是一款简单易用的基于于SMTP协议(或 Amazon SES)的邮件发送组件 cron cron可以指定每隔一段时间执行指定的程序.也可以指定每天的某个时刻执行某个程序.还可以按照星期.月份来指定. npm install nodemailer -S npm install nodemailer-smtp-transport -S npm install cr

  • node通过npm写一个cli命令行工具

    前言 如果你想写一个npm插件,如果你想通过命令行来简化自己的操作,如果你也是个懒惰的人,那么这篇文章值得一看. po主的上一篇文章介绍了定制自己的模版,但这样po主还是不满足啊,项目中我们频繁的需要新建一些页面,逻辑样式等文件,每次都手动new一个,然后复制一些基本代码进去非常的麻烦,所以就有了这篇文章.接下来就让po主为大家一步一步演示怎么做一个npm命令行插件. 注册npm账户 发布npm插件,首先肯定要有个npm帐号了,过程就不啰嗦了,走你. npm官网 有了账号后,我们通过npm in

  • Node.js服务器开启Gzip压缩教程

    Gzip是什么 复制大神们的解释吧: GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩.我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的.现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式.HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术.大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度.这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站

  • Node.js文件操作详解

    Node有一组数据流API,可以像处理网络流那样处理文件,用起来很方便,但是它只允许顺序处理文件,不能随机读写文件.因此,需要使用一些更底层的文件系统操作. 本章覆盖了文件处理的基础知识,包括如何打开文件,读取文件某一部分,写数据,以及关闭文件. Node的很多文件API几乎是UNIX(POSIX)中对应文件API 的翻版,比如使用文件描述符的方式,就像UNIX里一样,文件描述符在Node里也是一个整型数字,代表一个实体在进程文件描述符表里的索引. 有3个特殊的文件描述符--1,2和3.他们分别

  • 浅谈Node.js:理解stream

    Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类型,如下所示: Readable,可读流 Writable,可写流 Duplex,读写流 Transform,扩展的Duplex,可修改写入的数据 1.Readable可读流 通过stream.Readable可创建一个可读流,它有两种模式:暂停和流动. 在流动模式下,将自动从下游系统读取数据并使用

随机推荐