Heartsuit's Simple Blog

A place to hold mainly reading notes, and some technical stuff occasionally. 这里主要是一些读书笔记、感悟;还有部分技术相关的内容。


Project maintained by heartsuit Hosted on GitHub Pages — Theme by mattgraham

NodeRed拖拉拽实现OPCUA数据订阅,发布至MQTT并落库MySQL

目录[-]

背景

几年前曾根据 Node-Red 官网示例进行了简单的体验,当时觉得这东西就是个玩具,拿过来玩一玩可以,不实用;但是如今发现有不少产品对其进行了集成,并做出了复杂的商业应用,这确实是极大的震撼。

使用看似简单的工具,实现真正复杂的应用。

环境准备

要本地运行 Node-Red ,有 Node.js 环境就够了。

不过 Node-Red 新版的 V3.x 版本需要 Node.jsV14 以上,所以用惯了 NodeV10 或者 V12 的,可能需要更新下环境,这里建议使用nvm管理不同版本的Node.js

# 列出当前已安装的Node.js,同 nvm ls
nvm list
# 列出可下载的Node.js版本号
nvm list available
# 下载安装指定版本的Node.js
nvm install 16.18.0
# 切换到指定版本的Node.js
nvm use 16.18.0
# 列出当前已安装的Node.js,同 nvm ls
nvm list
# 卸载指定版本的Node.js
nvm uninstall 16.18.0

但是要实现 OPCUA 数据订阅,发布至MQTT并落库MySQL,则还需要 OPCUA 的模拟服务器 Prosys OPC UA Simulation Server ,作为 MQTT BrokerEMQX 与MQTT客户端测试工具 MQTTX ,以及持久化存储 MySQL 或者时序数据库 TDengine 等工具。

如果是使用 Win7 ,默认只能用到的 Node 最高版本为 V13 ,需要进行以下调整。

Win7 系统环境变量中新建环境变量: NODE_SKIP_PLATFORM_CHECK ,值设为1。

安装运行

# 全局安装
npm i -g node-red

# 运行
node-red

2023-09-24-1-Install.jpg

示例流程

官方提供了两个示例流程,可以快速上手,建议阅读英文文档,因为中文网的示例程序中链接过期。

2023-09-24-2-Demo.jpg

拖拉拽操作

OPCUA数据订阅

在默认的节点中不包含 OPCUA 节点,需要到节点管理(点击右上角菜单下)的市场上搜索安装,各路大神开放了各类节点;从我当前的目标出发,简单通过关键词检索了一下,基本覆盖了工业互联网设备接入的各种协议以及各类数据库的操作。

2023-09-24-3-OPCUAServer.jpg

2023-09-24-4-InstallOPCUA.jpg

2023-09-24-5-OPCItem.jpg

2023-09-24-6-OPCClient.jpg

2023-09-24-7-OPCDemo.jpg

发布至MQTT主题

因为 IBM 这款开源系统是针对物联网行业而研发的,那么作为物联网设备上云事实上的标准通信协议, Node-Red 已默认集成了 MQTT 组件。

2023-09-24-8-EMQX.jpg

msg.payload = {
    'device': msg.topic,
    'plc': msg.payload,
    'create_time': new Date().toLocaleString()
};
return msg;

2023-09-24-9-MQTTPayload.jpg

2023-09-24-10-MQTTout.jpg

2023-09-24-11-MQTTDemo.jpg

订阅MQTT主题并落库MySQL

在默认的节点中不包含 MySQL 节点,需要到节点管理的市场上搜索安装。

2023-09-24-12-MySQL.jpg

CREATE TABLE `plc_test` (
	`id` INT(10) NOT NULL AUTO_INCREMENT,
	`plc` FLOAT NULL DEFAULT NULL,
	`create_time` DATETIME NULL DEFAULT NULL,
	PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB;

2023-09-24-13-MQTTin.jpg

2023-09-24-14-MySQLInsert.jpg

let insertOne = "INSERT INTO plc_test(plc, create_time) VALUES ('%f','%s')";
msg.topic = util.format(insertOne, msg.payload.plc, msg.payload.create_time)
return msg;

2023-09-24-15-MySQLConfig.jpg

数据成功写入数据库中。

2023-09-24-16-MySQLDemo.jpg

小总结

通过使用可视化连线的方式,可以轻松实现数据清洗、告警分发和逻辑联动等任务,降低了系统的使用门槛。Node-Red提供了灵活的集成能力,可以连接各种设备、传感器和应用程序,帮助用户快速构建高效的系统。此外,Node-Red还具有可扩展性,可以轻松地添加新的节点和功能,以适应不断变化的需求。

综上,先是介绍了运行 Node-Red 所需的环境准备,包括安装 Node.js 和一些其他工具。接下来,文章介绍了 Node-Red 的安装和运行方法。在拖拉拽操作部分,介绍了如何使用 Node-Red 进行 OPCUA 数据订阅、发布至 MQTT 主题和将数据存储到 MySQL 数据库中。 Node-Red 是一个强大而灵活的工具,可以帮助你实现复杂的应用。

Reference


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!


「说点什么吧😊~~😊」: