基于MQTT协议的物联网岸电监控系统
2023-04-07曹小华李泊桓徐上尉
曹小华 李泊桓 徐上尉
(武汉理工大学物流工程学院 湖北 武汉 430000)
0 引 言
随着岸电技术、电能监控和计算机信息技术的不断发展,针对港口岸电系统的船舶岸电监控系统及其相关研究也受到越来越多的重视[1-4]。船舶在靠港使用港口岸电时,需要对岸电设备的供电过程进行监控,缺失了这一环节,不仅浪费了大量有价值的岸电运行参数资料,而且也具有较大的安全隐患。对岸电系统的监控能够有效地采集岸电设备的实时运行参数,同时还能在远程监控平台上看到岸电设备的用电信息,对其电力参数、环境参数、报警参数等信息进行实时监控,有利于港口岸电管理部门及时了解岸电现场的运行状况,促进船舶岸电的信息化与智能化发展[5-9]。本文针对某港口岸电系统的现状和实际需求,研究了船舶岸电监控系统的组成和架构,分析岸电监控系统需求,采用前沿的物联网、云端技术及MQTT[10-12]通信协议,设计了适合港区岸电系统的远程监控方案,实现岸电系统与岸电监控系统之间的信息交互功能,包括对岸电设备的地理位置监控、电能信息监控、报警信息监控、实时状态监控、历史数据查询等功能,有助于港口岸电系统的信息化监测和管理,支撑船舶岸电系统的升级开发和智慧港口建设。
1 监控系统方案设计
船舶岸电监控系统由两个子系统构成,分别是现场数据采集系统和远程监控系统,两个系统间采用MQTT协议作为数据传输协议。对船舶岸电监控系统的总体架构设计从逻辑架构和物理架构两个层面来描述。
船舶岸电监控系统运用逻辑分层的思想可将其架构上分为三层,分别是感知层、传输层、应用层,如图1所示。
图1 岸电监控系统逻辑分层架构
1) 感知层主要是对系统数据源进行数据采集、接入及处理。这些数据来自于岸电设备PLC作业控制程序内,包含了岸电系统运行时的各项基本数据。
2) 传输层是感知层与应用层之间沟通的桥梁,从感知层里采集到的数据通过MQTT通信协议传输到应用层。
3) 应用层实现了船舶岸电监控系统的各项监控功能需求,并设计了管理员移动端App,用于岸电设备管理员对所管控设备的实时状态监控,并可根据需求修改岸电设备的系统参数。
船舶岸电监控系统运用物理分层的思想可将其架构分为两层,分别是现场数据采集系统和远程监控系统。现场数据采集系统的硬件组成为数据采集装置,其由数据采集装置1和数据采集装置2组成。远程监控系统硬件组成为云服务器、本地监控中心和管理员移动端三部分。岸电监控系统物理分层架构如图2所示。
1) 现场岸电设备包括电源进线柜、岸基供电箱、电缆提升装置,船舶岸电监控系统的监控对象是岸基供电箱和电缆提升装置。
2) 现场数据采集系统负责对现场岸电设备的监控数据进行一体式采集传输,并执行岸电设备管理员下发的参数修改指令。其实现过程如下:数据采集装置2采集电缆提升装置的数据,并通过蓝牙模块将监控数据发送给数据采集装置1,数据采集装置1采集岸基供电箱的数据并接收数据采集装置2发来的监控数据,将这两部分数据汇集上传实现对岸电设备监控数据的一体式采集传输。数据采集装置1还可以接收岸电设备管理员下发的参数修改指令,解析指令内容后将其转发给相连接的岸电设备PLC内的通信控制程序执行。
3) 远程监控系统。远程监控系统主要由云服务器、本地监控中心和管理员移动端三部分组成。云服务器负责运行MQTT消息服务器(MQTT Broker),并通过数据交互处理程序完成对监控数据的接收、解析和存储。本地监控中心用于港口岸电管理部门对船舶岸电系统的远程监控。管理员移动端用于岸电设备管理员对所管控设备的实时状态监控,并可根据需求修改岸电设备的系统参数。
2 物联网岸电监控系统
2.1 岸电设备数据类型分析
岸基供电箱工作时由其内部的西门子PLC(可编程逻辑控制器)来进行系统控制,系统运行时岸基供电箱设备的全部数据都储存于PLC程序对应的数据块中,岸基供电箱数据类型如表1所示。
表1 岸基供电箱采集数据类型
电缆提升装置工作时由其内部的西门子PLC(可编程逻辑控制器)来进行系统控制,系统运行时电缆提升装置的全部数据都储存于PLC程序对应的数据块中,电缆提升装置数据类型如表2所示。
表2 电缆提升装置采集数据类型
2.2 MD5信息摘要算法
本文所采用的数据加密算法基于MD5信息摘要算法。MD5算法是由MD4算法导出,是一种被广泛使用的密码杂凑函数,其具有以下特性:
1) 易实现且不可逆:MD5算法实现起来流程比较简易,被当前主流的编程语言所广泛支持。但MD5算法是不可逆的,因为其使用的hash算法在计算过程中丢失了大量的原文信息,因此我们无法通过MD5值倒推还原原文。
2) 压缩性:MD5算法能将任意长度的原文处理成统一的32位16进制字符串,相当于超损压缩,所有原文经MD5算法处理后长度是一致的。
3) 抗修改性:原文出现任何改动,通过MD5算法处理后的MD5值都会有很大变化,因此可以看出原文是否被非法篡改。
4) 强抗碰撞:找到两个不同的原文,使它们MD5值相同是很困难的。
2.3 消息完整性验证过程设计
船舶岸电监控系统中存在一些隐私性和安全性要求较高的数据,包括船舶用电数据、船舶用户信息、岸电设备系统参数等,这些数据一旦被窃取或修改将会对船舶岸电系统造成重大损失和危害。虽然MQTT协议可以通过设置较高的消息服务质量等级来确保数据安全到达,但是消息传输过程中可能会被恶意劫持和篡改。常用于该协议消息传输中的安全协议为SSL(Secure Sockets Layer)/TLS(Transport Layer Security)协议,但SSL/TLS协议会占用大量资源且设备支持率不高。因此本文结合MQTT协议的特性,提出一种基于MD5算法的数据加密验证方案,通过在MQTT消息发送和接收这两个过程分别对其进行加密和验证,实现以更低的成本和资源消耗来保障系统数据的安全传输。
系统消息分为现场设备监控数据和参数修改指令数据,它们都是由DeviceID、消息体和EncryptCheck组成的JSON数据,DeviceID为发送或接收消息的数据采集装置编号。消息体在现场设备监控数据中由DataGDX和DataTS及GPSData三部分拼接组成,在参数修改指令数据中由ParaData组成。
EncryptCheck为加密验签,通过消息加密步骤生成,系统消息数据结构如图3所示。
图3 系统消息数据结构
消息传输加密验证机制由消息加密过程和消息验证过程两部分组成,系统消息在发送阶段进行加密,在消息接收阶段进行验证,验证通过才接收消息,否则丢弃。消息加密过程和消息验证过程原理与步骤如下。
1) 消息加密过程。消息加密过程采取如下思想:对消息的一部分数据拼接上一个特定的字符串进行MD5算法加密,生成一个固定长度为32位字符的EncryptCheck加密验签,将EncryptCheck与原有消息包装成JSON格式发送,消息加密过程如图4所示。
图4 消息加密过程
消息加密过程具体加密步骤如下:
(1) 将系统消息中的DeviceID和消息体数据与加密字段PubTopic进行拼接,此PubTopic为该消息对应MQTT消息发布主题。
(2) 对拼接好的消息进行MD5算法加密处理,生成32位固定长度的EncryptCheck加密验签。
(3) 打包DeviceID、消息体和EncryptCheck,包装成JSON格式后发送。
2) 消息验证过程。消息验证过程采用如下思想:消息验证过程也要使用到数据加密。客户端接收到消息后,首先切分出EncryptCheck作为原始验签,采用与消息加密过程一致的加密步骤进行加密,再次得到加密结果,将结果与原始验签进行比对,若一致,则消息验证通过,若不一致则说明消息在传输过程中遭到了篡改或损坏,丢弃此条消息,消息验证过程如图5所示。
图5 消息验证过程示意图
消息验证过程具体步骤如下:
(1) 消息到达后查询加密字段SubTopic,根据消息接收的对象分为两种情况:当数据为现场设备监控数据时,接收对象为远程监控系统,此时可通过程序查询到达消息所对应的Topic属性来获取SubTopic;当数据为参数修改指令数据时,验证对象为现场数据采集系统,此时SubTopic已烧录进数据采集装置程序中。对于MQTT消息传输模型,同一条消息在两个客户端间传输,发布者的消息发布主题PubTopic与订阅者的消息订阅主题SubTopic在内容上是相同的。
(2) 将要验证的消息进行JSON解析,切分出DeviceID、消息体与SubTopic进行拼接,将EncryptCheck记为原始验签。
(3) 将拼接好的消息进行MD5算法加密,生成临时验签。
(4) 比对临时验签与原始验签,若二者一致,则说明消息在传输过程中未发生变化,接收消息;否则说明消息被恶意篡改,丢弃消息。
本文设计的消息传输加密验证机制的主要思想如下:在数据发送和数据接收两个阶段对消息进行同样的加密步骤,再比对这两个阶段的加密结果,来验证消息在传输过程中是否被破坏或恶意篡改。
为增加消息加密验证机制的兼容性和安全性,可以对消息处理算法进一步设计,设计增加双重MD5加密算法以及先SHA-1加密,再MD5加密算法,规定根据不同的消息主题使用不同的算法。
2.4 云端数据交互处理方案设计
在船舶岸电监控系统中,现场数据采集系统与远程监控系统之间的数据交互处理方案是系统设计的重点。本文以MQTT协议和云服务器为基础,设计了云端数据交互处理总体方案,保障了现场设备监控数据和参数修改指令数据的安全、高效和稳定地传输,云端数据交互处理方案架构如图6所示。
图6 云端数据交互处理方案架构
云端数据交互处理架构由MQTT客户端、MQTT Broker、数据交互处理程序、MySQL数据库组成。
MQTT客户端存在于四个位置:数据采集装置创建的MQTT客户端负责上传现场设备监控数据并接收参数修改指令数据;云服务器创建的MQTT客户端用于接收现场设备监控数据并解析处理并存储;本地监控中心创建的MQTT客户端用于接收现场设备监控数据来对岸电设备进行实时监控;管理员移动端App创建的MQTT客户端用于接收现场设备监控数据来对所管控的岸电设备进行实时监控,并发布参数修改指令数据到系统参数修改主题,完成对岸电设备系统参数的修改。
MQTT Broker位于云服务器上,船舶岸电监控系统采用一个MQTT Boker来实现系统的数据的缓存分发,MQTT Broker上存在两个消息主题,分别是现场设备监控主题和系统参数修改主题。
数据交互处理程序也位于云服务器上,用来对现场设备监控数据接收、解析并将这些数据分类存储进MySQL数据库中,同时对供电记录进行每日、每月、每年定时汇总计算并存储进MySQL数据库中。
MySQL数据库存在于云服务器和本地监控中心上,云服务器上的作为主数据库,本地监控中心上的作为从数据库,并配置数据库的主从同步和读写分离。
本方案通过使用MQTT协议的发布订阅模式和消息服务质量保证了系统数据传输的灵活性和安全性。通过使用云端服务器长期工作的稳定性来保障了系统数据的长期不间断安全存储。
3 实验测试
在本文设计的船舶岸电监控系统中,系统数据交互性能决定着整个系统的使用性能,系统数据交互性能由系统数据交互的可靠性和MySQL数据库的并发响应性能决定,远程监控系统能否可靠且高效地存储现场设备监控数据将是系统可用性判断的重要依据。
首先对整个系统数据交互可靠性进行测试,测试用例表如表3所示。
表3 系统数据交互可靠性测试用例表
测试结果与预期一致,数据存储成功率为100%,表明系统数据交互性能符合使用需求,能够保证远程监控系统安全可靠地存储现场设备监控数据。
系统MySQL数据库的并发访问性能决定了系统的抗压能力和用户流量上限,采用MySQL自带的压力测试工具mysqlslap对云服务器上的主数据库进行并发访问性能测试,mysqlslap的测试原理为通过模拟用户并发登入使用数据库,利用mysqlslap的查询语句同时向数据库发出查询更新测试,根据结果得到的响应时间来判断数据库的并发响应能力,测试用例表如表4所示。
表4 MySQL并发访问性能测试用例表
10个用户并发访问,查询字段中含有“test10”属性的所有资源的id,查询10次,mysqlslap的测试命令如下:
shell 依次执行10次、20次、30次、40次和50次的压力测试,得到MySQL并发访问性能测试数据如表5所示。 表5 MySQL并发访问响应时间表 可以看出,在并发量为50的时候,系统的最长响应时间和平均响应时间较短,具有良好的响应性。本文设计的船舶岸电监控系统监控对象为委托港口10个泊位的岸电设备,因此本系统的MySQL数据库并发访问性能能够满足系统需求。 完成MySQL数据库和系统数据交互性能测试之后,需要对岸电系统设备进行地理位置显示。远程监控系统的设备地理位置监控模块通过使用GPS定位模块和百度地图API,实现了对设备地理位置的采集和地图显示,方便了港口岸电管理部门和岸电设备管理员对岸电设备的地理位置监控。 首先需要将获得的原始GPS数据转化成百度GPS坐标,随后在百度地图开放平台上注册用户并创建应用获得AK码,接着使用JavaScript编写.htm网页文件,在.htm文件中创建XML解析器并添加百度地图界面及其他可视化控件,并将AK码注入代码中用于程序的连接与认证,最后在JS代码中编写function函数方法实现输入百度地图GPS坐标后在界面中显示地理位置信息,最终实验测试地图显示如图7所示。 图7 岸电系统云平台地理监控界面 在岸电监控系统测试完成之后,正式运行后可以得到图7所示的云平台地理监控界面和图8所示的岸电系统设备电能信息统计界面。 图8 设备电能信息监控界面 由以上的数据库性能测试和岸电设备地理位置监控界面以及返回岸电系统实时数据可以验证该岸电监控系统能够针对港口岸电系统发挥作用,实时监控岸电设备、按时返回设备及供电相关信息,能够帮助实现港口岸电系统的信息化监测和管理。 本文基于MQTT协议设计并实现一种基于MQTT协议的物联网岸电监控系统。本文主要完成了以下工作:1) 提出一种基于MQTT协议和云端的数据交互技术,利用逻辑分层与物理分层思想划分了监控系统的总体架构。2) 设计适用于岸电监控场景的MQTT消息主题和消息数据格式,采用MD5信息摘要算法设计了数据传输的完整性验证机制,使用MySQL设计云端数据库,实现了现场数据采集系统和远程监控系统之间安全、稳定、可靠的数据传输。3) 通过功能测试对岸电监控系统进行实际功能测试。 由于岸电监控系统的复杂性和不确定性因素太多,设计的系统仍存在不足,需要进一步改进。下一阶段需要进行完善的内容如下:1) 开发更具通用性的基于微信小程序的管理员移动端小程序,来实现管理员对所管控岸电设备的实时监控和系统参数修改功能。2) 本文设计的船舶岸电监控平台是桌面级应用,不具备Web应用所具有的跨平台可用性和移动性。4 结 语