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

news2024/12/26 23:00:34

背景

几年前曾根据 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 节点,需要到节点管理(点击右上角菜单下)的市场上搜索安装,各路大神开放了各类节点;从我当前的目标出发,简单通过关键词检索了一下,基本覆盖了工业互联网设备接入的各种协议以及各类数据库的操作。

  • 启动OPCUA服务端模拟器

2023-09-24-3-OPCUAServer.jpg

  • 安装OPCUA节点

2023-09-24-4-InstallOPCUA.jpg

  • 配置OPCUA Item节点

2023-09-24-5-OPCItem.jpg

  • 配置OPCUA Client连接

2023-09-24-6-OPCClient.jpg

  • 调试效果

2023-09-24-7-OPCDemo.jpg

发布至MQTT主题

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

  • 启动EMQX

2023-09-24-8-EMQX.jpg

  • 封装payload
    采用 JavaScript 的函数能力实现。
msg.payload = {
    'device': msg.topic,
    'plc': msg.payload,
    'create_time': new Date().toLocaleString()
};
return msg;

2023-09-24-9-MQTTPayload.jpg

  • 配置MQTT out节点与发布主题

2023-09-24-10-MQTTout.jpg

  • 调试效果

2023-09-24-11-MQTTDemo.jpg

订阅MQTT主题并落库MySQL

在默认的节点中不包含 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;
  • 配置MQTT in节点与订阅主题

2023-09-24-13-MQTTin.jpg

  • 编写SQL插入
    采用 JavaScript 的函数能力实现 SQL 语句构造。

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

  • 使用nvm管理不同版本的Node.js
  • Node-Red官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vulnhub系列靶机---JANGOW 1.0.1

文章目录 网卡配置信息收集主机发现端口扫描 漏洞利用反弹Shell提权 靶机文档:JANGOW 1.0.1 下载地址:Download (Mirror) 难易程度:. 网卡配置 水果味儿 信息收集 主机发现 端口扫描 访问80端口 点击site目录 点击页面上方的一个选项&…

【跟小嘉学习区块链】一、区块链基础知识与关键技术解析

系列文章目录 【跟小嘉学习区块链】一、区块链基础知识与关键技术解析 文章目录 系列文章目录[TOC](文章目录) 前言一、区块链基础1.1、区块链的来龙去脉1.1.1、区块链技术起源1.1.2、核心技术发展脉络 1.2、比特币产生的背景与现状1.2.1、现行货币体系存在的问题1.2.2、数字货…

HTTP代理与VPN:网络代理技术的比较

HTTP代理和VPN是两种常见的网络代理技术,它们可以帮助用户隐藏自己的IP地址、保护网络隐私、绕过网络限制等。本文将介绍HTTP代理和VPN的定义、工作原理、优缺点以及使用场景。 一、HTTP代理 HTTP代理是一种通过代理服务器转发网络请求的技术。当用户发起网络请求时…

c语言进阶部分详解(经典回调函数qsort()详解及模拟实现)

大家好!上篇文章(c语言进阶部分详解(指针进阶2)_总之就是非常唔姆的博客-CSDN博客)我已经对回调函数进行了初步的讲解和一个简单的使用事例,鉴于篇幅有限没有进行更加详细的解释,今天便来补上。…

echarts的Y轴设置为整数

场景:使用echarts,设置Y轴为整数。通过判断Y轴的数值为整数才显示即可 yAxis: [{name: ,type: value,min: 0, // 最小值// max: 200, // 最大值// splitNumber: 5, // 坐标轴的分割段数// interval: 100 / 5, // 强制设置坐标轴分割间隔度(取本Y轴的最大…

【算法与数据结构】JavaScript实现十大排序算法(二)

文章目录 关于排序算法快速排序堆排序计数排序桶排序基数排序 关于排序算法 稳定排序: 在排序过程中具有相同键值的元素,在排序之后仍然保持相对的原始顺序。意思就是说,现在有两个元素a和b,a排在b的前面,且ab&#xf…

Windows使用JEnv实现JDK多版本管理

Windows使用JEnv实现JDK多版本管理 JEnv安装Jenv命令 JEnv安装 JEnv是一个帮助我们管理多个JDK安装的工具,并将每个代码库配置为使用特定的JDK版本,而不必改变JAVA_HOME环境变量. 下载链接 windows版 windows版地址JEnvGithub地址: JEnv Jenv命令 添…

如何查看电脑详细配置、型号?这4个技巧 yyds!

知道自己电脑的配置和型号,可以更合理合适的去安装软件,避免出现电脑系统和软件不兼容问题。 了解详细配置信息可以检测一下电脑组件是否是二手的。 从解决实际问题的角度,推荐这4个技巧: 1、右键“此电脑” 2、设备管理器查看…

AJAX的奇妙之旅(1)基础知识

一、简介 AJAX(Asynchronous JavaScript and XML)是一种使用现有标准的新方法。它是一种用于创建快速动态网页的技术。AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。AJAX 不需要任何浏览器插件&a…

【操作系统笔记一】程序运行机制CPU指令集

内存地址 指针 / 引用 指针、引用本质上就是内存地址,有了内存地址就可以操作对应的内存数据了。 不同的数据类型 字节序 大端序(Big Endian):字节顺序从低地址到高地址顺序存储的字节序小端序(Little Endian&#…

stm32之智能垃圾桶实战

之前用过51做过一个垃圾桶的小项目,这里用32重新搞了一下。视频的效果和之前一样,可参考这个垃圾桶效果 。 一、项目描述(同51) 项目主要是模拟不用手动打开垃圾桶盖,而进行自动操作。自动打开的条件如下&#xff1a…

基于微信小程序的学生选课系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言学生小程序端的主要功能有:教师的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 &#x1f4…

PHP自动识别采集何意网址文章正文内容

在做PHP采集内容时,用过querylist采集组件,但是这个插件采集页面内容时,都必须要写个采集选择器。这样比较麻烦,每个文章页面都必须指定一条采集规则 。就开始着手找一个插件可以能自动识别任意文章url正文内容并采集的&#xff0…

完整答题小程序源码/支持流量主/激励广告强点(答题小程序模板+题库)

源码简介: 完整答题小程序源码/支持流量主/激励广告强点(答题小程序模板题库),完整答题小程序源码有题库,无加密,带激励广告强制点击可提升广告收益。是积分激励的小程序,作为答题小程序开发,是很实用的操…

分库分表MySQL

目录 Mycat入门 分片配置 分片配置(配置Mycat的用户以及用户的权限) 启动服务 登录Mycat Mycat配置 schema.xml 1.schema标签:配置逻辑库,逻辑表的相关信息 1-1.核心属性 1-2.table标签 2.datanode标签:配置数据节点的相关信息 核心属性 3.datahost标签:配置的是节…

机器学习笔记 - 维度诅咒的数学表达

1、点之间的距离 kNN分类器假设相似的点也可能有相同的标签。但是,在高维空间中,从概率分布中得出的点往往不会始终靠近在一起。 我们可以用一个简单的例子来说明这一点。 我们将在单位立方体内均匀地随机绘制点(如图所示),并研究该立方体内测试点的 k 个最近邻将占用多少…

全套配置细节:缺省路由实验配置

1、实验目的 掌握默认路由的适用场合和配置方法 2、实验拓扑 默认路由的配置 3、实验步骤 &#xff08;1&#xff09;配置网络连通性如下。 1&#xff09;R1 的配置如下 &#xff1a; <Huawei>system-view Enter system view, return user view with CtrlZ. [Huaw…

MySQL学习笔记6

MySQL数据库如何存放数据&#xff1f; 注明&#xff1a;我们平常说的MySQL&#xff0c;其实主要指的是MySQL数据库管理软件。 一个MySQL DBMS可以 同时存放多个数据库&#xff0c;理论上一个项目就对应一个数据库。 如博客项目blog数据库&#xff0c;商城项目shop数据库&#…

【剑指Offer】23.链表中环的入口结点

题目 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a; n ≤ 10000&#xff0c;1 < 结点值 < 10000 要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂度O(n) 例如…

CTF 全讲解:[SWPUCTF 2021 新生赛]jicao

文章目录 参考环境题目index.phphighlight_file()include()多次调用&#xff0c;多次执行单次调用&#xff0c;单次执行 $_POST超全局变量HackBarHackBar 插件的获取 $_POST打开 HackBar 插件通过 HackBar 插件发起 POST 请求 GET 请求查询字符串超全局变量 $_GET JSONJSON 数据…