使用IOT-Tree消息流MQTT模块节点实现监测数据推送功能
IOT-Tree Server是个开源物联网软件,可以作为组态软件成为自动化系统的上位软件。她提供了接入、数据组织管理、控制逻辑和人机交互多个方面的功能。IOT-Tree消息流功能是在规整接入各种设备数据之后,提供的功能块组合配置支持(直观快速),通过她你可以在大部分场合快速实现数据的处理——存储、转换、发送等。
本文专门以实际使用案例介绍MQTT这个模块节点的使用。
1 案例背景
本案例是一个工业现场,使用IOT-Tree对接西门子PLC S7-1200获取了设备相关数据。对接使用了驱动“Siemens TCP/IP Ethernet”。配置数据标签如下:
项目要求现场IOT-Tree实例要通过云端MQTT Broker提供的消息接口进行数据收集和指令下达。其中,采集标签数据定时10秒向云端服务器主动推送一次,而报警标签只要有触发,则必须马上推送到云端系统中。另外,云端还要能够支持向现场设备推送一些参数调整指令,IOT-Tree要能够根据指令消息包,修改PLC里面的一些数据点。相关消息包全部使用JSON格式,并且每一种消息对应的主题如下:
MQTT主题 | 主题标题 | 主题详细说明 | 备注 |
/dev1/update | 设备1数据 | 由工业现场IOT-Tree向云端MQTT Broker推送的采集数据,定时10秒推送一次 | 生产者 |
/dev1/alm | 设备1报警 | 由工业现场IOT-Tree向云端MQTT Broker推送的报警数据,触发时和解除时都要推送 | 生产者 |
/plat/cmd/chg_tar_temp | 云端指令-修改目标温度 | 由云端向工业现场IOT-Tree推送的指令,用来修改 | 消费者 |
1.1 MQTT协议
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,专为低带宽、高延迟或不稳定的网络环境设计。最初由 IBM 和 Eurotech 开发,现已成为 OASIS 标准,广泛应用于物联网(IoT)、移动应用和嵌入式系统。
- MQTT 核心特性
轻量级:协议头最小仅 2 字节,适合资源受限的设备。
发布/订阅模型:支持多对多通信,解耦消息生产者和消费者。
低功耗:适合电池供电的设备,如传感器和可穿戴设备。
三种服务质量(QoS):
QoS 0:最多一次(可能丢失消息)。
QoS 1:至少一次(确保送达,可能重复)。
QoS 2:恰好一次(严格保证不重复)。
保留消息:代理(Broker)可存储最新消息,供新订阅者立即获取。
- MQTT 基本组件
客户端(Client):发布或订阅消息的设备或应用。
代理(Broker):负责接收、过滤和转发消息的中间服务器。
主题(Topic):消息的分类标识符,采用层级结构(如 sensor/temperature)。
- MQTT 工作原理
客户端通过 TCP/IP 连接代理,订阅感兴趣的主题。
发布者发送消息到主题,代理将消息转发给所有订阅者。
支持通配符:+ 匹配单层,# 匹配多层(如 sensor/#)。
1.2 IOT-Tree接入和数据组织
此部分内容,本文也不重复了,如果不熟悉,请参考如下内容:
https://gitcode.com/jasonzhu8888/iot-tree
https://github.com/bambooww/iot-tree
机房自动化监控手把手分享给你 - 2 温湿度传感器的对接
机房自动化监控手把手分享给你 - 3 漏水传感器的对接
机房自动化监控手把手分享给你 - 4 空调设备对接
机房自动化监控手把手分享给你 - 5 电流监测模块对接
机房自动化监控手把手分享给你 - 6 UPS设备对接
2 MQTT模块节点配置
2.1 新增MQTT模块节点
在你的IOT-Tree项目管理界面左下角,你可以添加一个消息流,点击之后,可以看到消息流具体配置界面,你可以在配置界面左边列表选择网络分类下的“MQTT”节点,拖拽到配置区就完成了节点的添加。如下图:
双击刚刚添加的MQTT节点,可以看到弹出配置界面。你可以在里面进行详细配置。
2.2 配置MQTT
2.2.1 配置主界面说明
在MQTT节点弹出界面中,你可以设置MQTT Broker和端口,并且目前此节点支持用户和密码验证方式。这些内容需要根据Broker提供的相关信息进行设置。
主界面下方有生产者和消费者两个配置区域,这两个区域分别对应此MQTT需要发送数据的主题列表和需要监听接收消息的主题列表。点击新增或点击已经建立主题的修改按钮,可以新增或编辑对应的主题信息。
2.2.2 生产者和消费者主题编辑
2.2.3 配置之后关联节点
以上配置全部确定完成之后,你可以看到此MQTT模块节点会自动生成几个关联节点,每个节点对应一个主题。如果是生产者主题,则节点有个输入端口,可以在消息流中接收输入消息并推送;而对于消费者主题,则生成的节点会有输出端口,如果节点收到服务器端MQTT Broker的数据包之后,会在对应节点端口输出消息,由此可以被消息流中的其他节点处理。
3 消息流数据交换完善
有了上面三个自动生成的主题节点,我们可以根据项目中需要采集的标签数据和报警标签,配置相关的节点来完成最终运行流程。
3.1 采集数据定时发送设置
添加“定时触发器”节点,配置触发时间间隔为10秒;后续添加标签读取过滤器节点,这个节点可以过滤需要的标签,并自动形成JSON数据输出。然后把此JSON数据输出连接"/dev1/update"主题节点的输入。这就完成了间隔10秒采集一次数据并推送到云端的功能。
3.2 报警数据触发/解除发送设置
添加“标签事件/报警触发器"节点,并把触发输出和解除输出都接入到"/dev1/alm"这个主题节点。这样当项目标签报警触发和解除使得时候,都会有对应的JSON消息被自动推送。
3.3 云端指令接收处理
当云端发送"/plat/cmd/chg_tar_temp”主题消息时,这个主题节点就会在输出端子输出云端的指令数据。因此,在此节点后方,新增一个"标签数据写入"节点,内部可以根据JSON数据格式配置需要写标签内容(这样会同时把具体的指令写入到PLC中)。