基于海量异构传感器的物联网水质监测系统

2020-05-16 06:33王海峰贾建鑫
计算机应用与软件 2020年5期
关键词:遥测线程水质

陈 玥 王海峰 贾建鑫 康 凯*

1(东南大学计算机科学与工程学院 江苏 南京 211189)2(中国科学院上海微系统与信息技术研究所 上海 200050)3(中国科学院上海高等研究院 上海 201210)

0 引 言

当前,随着我国城市化建设的快速推进,水资源短缺与水环境污染已成为城市化建设面临的关键问题。水资源短缺与水环境污染不仅会阻碍经济建设,更会对国民健康带来危害。因此,针对水资源进行有效的监测与管理显得至关重要。

另一方面,随着国内外物联网技术[1-5]的快速发展,物联网技术被广泛应用于水资源监测领域[6-9],其在很大程度上促进了水资源监测技术的发展。物联网作为一种新兴的技术领域,受到国家的高度重视。国家工信部发布了《物联网“十二五”发展规划》,将智能环保作为一项重点示范工程。智能环保旨在利用物联网相关技术实现污染源监控、水质监测、空气监测、生态监测并建立智能环保信息采集网络与信息平台。水质监测和水污染监控无疑是智能环保的一个重要组成部分。因此,研究基于物联网技术的水资源监测平台势在必行。鉴于此,本文基于物联网平台相关理论技术,设计并实现了一种基于海量异构传感器的物联网水质监测系统,根据图1所示的云-管-端体系,将该系统分为4层,包括感知层、网络层、平台层、应用层。其中感知层主要由各种传感器节点构成,其主要负责对物理世界进行信息收集与信号处理;网络层主要由各类传输网络构成,负责终端接入与数据传输;平台层主要由数据库服务器和业务服务器构成,负责设备通信管理,数据存储,业务处理规划等,应用层由各类可视化控件构成,负责数据呈现及客户交互。

图1 基于云-管-端体系的物联网平台层次划分

本文的主要贡献如下:

(1) 基于云-管-端模型提出了物联网水质监测系统的总体架构,将物联网水质监测系统分为感知层、网络层、平台层、应用层四部分。在感知层,分别采用2G、NB-IoT[10-12]、LoRa[13-15]等多种不同网络制式的传感器设备进行水质数据的采集;在网络层,分别通过2G传输网络、NB-IoT传输网络、LoRa传输网络对水质遥测数据及传感器设备数据进行传输;在平台层,通过数据库服务器、云服务器、NB-IoT服务器、以及LoRa服务器对网络层上报的相关数据进行存储与处理;在应用层,通过图表、地图、视频等可编程显示部件来向用户提供可视化的水质监测信息,并可根据平台层定义的规则引擎触发警报实时地向用户推送短信和邮件通知。

(2) 基于系统总体架构,进一步对系统平台层的关键技术进行了详细介绍。首先,平台层的数据库服务器通过TCP socket模块以及多线程机制与2G传感器进行交互,包括将2G网络传输来的水质遥测数据信息与设备信息进行存储以及针对2G传感器设备下发指令信息。与此同时,数据库服务器中的North API client通过调用北向接口North API与NB-IoT服务器及LoRa服务器进行交互,包括从NB-IoT服务器及LoRa服务器中读取NB-IoT传感器设备及LoRa传感器设备采集的遥测信息和设备信息,将读取后的信息进行解析与存储,以及针对NB-IoT传感器设备及LoRa传感器设备的指令下发。其次,对于数据库服务器中存储的设备信息与水质遥测信息,在数据库服务器中通过Node平台以Javascript搭配MQTT的方式实现与云服务器中开源IoT平台-Thingsboard[16-17]的交互,Thingsboard平台中定义的规则引擎会对数据库服务器发布的设备遥测数据信息进行过滤,对于异常的遥测数据其会触发警报并通过SMTP和RESTful向用户发送警报邮件和警报短信。最后,在Thingsboard平台中,除其自带的图表可显示部件外,对其地图部件进行了修改,消除了鉴权失败的错误并且增强了污染范围的渲染效果,此外,还通过可编程部件Widget加入了视频显示控件,其可向用户提供实时的水质外景监测。

(3) 通过实验案例来对水质监测系统进行功能测试,通过收集实时的水质监测数据来触发警报并向用户推送警报短信与警报邮件。相关实验结果表明,该系统可快速有效地向用户提供水质监测与报警信息。

1 系统总体架构

基于图2所示的系统总体架构,在感知层,分别采用2G传感器节点与2G汇聚节点、NB-IoT传感器节点与NB-IoT汇聚节点,以及LoRa传感器节点与LoRa汇聚节点对需要监测的水质数据进行采集,包括水的溶解氧浓度(DO)、氢离子浓度指数(PH)、水温(TEMP)、氧化还原电位(ORP)、电导率(EC)、化学需氧量(COD)、生化需氧量(BOD)、悬浮物(SS)、水质色度(WC)等。

图2 基于海量异构传感器的物联网水质监测系统总体架构

在网络层,通过2G传输网络、NB-IoT传输网络以及LoRa传输网络对感知层采集的水质监测数据进行传输。

在平台层,数据库服务器、NB-IoT服务器、LoRa服务器以及云服务器对网络层传输来的遥测数据进行存储与处理。具体而言,系统整体运行于云服务器之上,主体部分是运行于服务器中的开源IoT平台——Thingsboard,该平台基于Java语言构建并可提供完整的Web功能,其利用独立的外置数据库Cassandra将数据源与Web平台隔离,以便为后续大数据处理预留空间。如前文所述,感知层的传感器通信模组包括LoRa、NB-IoT、以及2G等多种网络制式,因此本系统分别使用不同的方式对上述网络制式传送的遥测数据与设备数据进行处理。为实现数据采集,数据库服务器中运行了三个程序模块来实现数据源与云服务器中Cassandra数据库的交互,包括数据获取、解析、储存和设备上报周期指令的下发。其中第一个程序模块如图2中数据库服务器左侧的双向箭头所示,对于2G网络传送的数据,系统通过TCP socket以及多线程机制对2G设备发送的数据进行实时接收并存储至MySQL数据库。对于使用NB-IoT与LoRa传送的数据而言,数据库服务器通过第二个程序模块调用North API对NB-IoT服务器与LoRa服务器中缓存的数据进行读取并存储至MySQL数据库。之后,数据库服务器将MySQL中的数据通过基于JavaScript编写的第3个程序模块获取并使用MQTT的方式发送至Thingsboard平台的外置Cassandra数据库。Thingsboard平台支持HTTP、CoAP和MQTT等多种协议,其中MQTT是被广泛应用的轻量级M2M/IoT消息协议,其采用订阅/发布的模式。Thingsboard平台的规则引擎会对数据库服务器发送来的数据进行监测,当规则引擎发现异常数据时会向用户推送报警短信和邮件。

在应用层,系统基于平台层实现了在Thingsboard平台内的规则引擎中利用SMTP和RESTful API分别向互联网中的第三方电子邮件转发商与短信转发商推送信息,提供电子邮件和短信通知服务。此外,Thingsboard平台内置一个Web servlet用于提供Web服务,其默认运行在本地8080端口,Web页面由多个可编程部件(Widget)构成,Thingsboard平台预先提供一些物联网应用常用的显示部件,如地图、数据图表等。可编程部件可在Web页面内修改HTML、CSS和JavaScript部分代码并动态编译运行于Thingsboard平台中。除了使用已有部件构建Web页面,本系统还针对腾讯地图的更新操作进行了修改,以消除鉴权失败的错误并通过地图渲染进一步增强显示污染区域的具体范围。此外,还新建了视频直播部件,使得用户可在传感器终端站点页面中获得云平台提供的摄像头直播画面。

2 物联网水质监测系统

本节对物联网水质监测系统平台层的主要功能及关键技术进行介绍,以2G与NB-IoT为例(平台层针对LoRa的操作与NB类似)展开。

2.1 2G TCP Socket模块

该模块部署于数据库服务器中,其所包含的代码文件关系图如图3所示,主函数所在的Java源文件在运行期间会调用其他5个代码文件。其中Global Parameter.java主要用于定义2G TCP socket功能模块相关全局变量。ServerThread.java文件包含与TCP socket相关联的线程类的公有操作及私有变量的定义。MyDataSource.java描述了与存储2G相关设备信息以及遥测数据信息的数据库连接类的私有变量和公有操作的定义。V1Msg.java用于描述2G TCP Socket模块用到的数据结构类的定义。下文将以主函数为主线来对该模块的关键功能进行介绍。

图3 2G TCP socket模块的文件调用关系图

2G TCP socket模块main函数的主要逻辑功能如图4所示,其包含六部分功能。第一部分功能用于设置线程计数器的初始值,主要用于对线程池中的线程进行计数。第二部分功能用于建立一个数据库连接池对象,与数据库连接池相关的类为MyDataSource,其相关定义在MyDataSource.java源文件中,该连接池包含了与2G设备信息及遥测数据信息相关的数据库连接对象,如图5中双向箭头所示。第三部分功能主要用于建立TCP Socket相关的TCP server线程池对象,全局变量GlobalParameter.maxThreadNumber规定了该线程池所包含的最大线程数,该值的定义位于全局变量文件GlobalParameter.java中。第四部分功能用于建立一个保护线程对象,保护线程类定义在ServerThread.java中,保护线程主要用于对线程池中的TCP server线程进行监视以防止某一个TCP server线程执行时间过长所造成的资源占用。第五部分功能用于建立一个TCP server socket对象并监听指定的端口号。第六部分功能用于建立一个TCP server线程对象并为其赋予TCP socket连接、指定的TCP server线程索引号、以及指定的数据库资源池ds。

图4 2G TCP socket模块main函数的主要逻辑功能

图5 2G TCP Socket模块多线程与多数据库连接的对应关系

根据图5可以看出TCP server线程资源池中的线程调用数据库资源池中的任意一个数据库连接与MySQL数据库进行交互,具体而言,一个TCP server线程在任一时刻对应一个TCP socket连接与一个数据库连接。对于右向箭头,其表示TCP server线程通过TCP socket连接以及数据库连接将2G网络传送来的设备数据与遥测数据写入数据库服务器中用于存储2G设备信息和遥测信息的MySQL数据库;对于左向箭头,其表示数据库服务器根据指定规则下发指令到2G设备来更新其上报数据的周期,目的是为节省设备的能耗。如前文所述,由于TCP server线程池中的线程数量有限,当上报数据的设备逐渐增多时,若没有保护线程对当前的执行线程进行有效监视与释放,那么线程池中的可用线程将会逐渐减少,最终可能导致无可用的线程来进行调度。因此,在本系统中,我们设定当线程的执行时间超过预设的最大执行时间timingvalue时就对该线程释放,也即当线程资源池将线程提交时开始计时,当线程达到最大执行时间timing value时对该线程进行释放,与保护线程相同,TCP server线程类的相关定义也在代码文件ServerThread.java中。

2.2 数据库服务器与NB-IoT服务器交互模块

本模块所包含的源代码文件关系如图6所示,主函数所在的DataCollectionFromServer.java文件在运行期间会调用其他3个代码文件。其中DeviceInfoFrom Json.java文件主要包含了DeviceInfoFromJson类的定义,该类主要用于描述NB-IoT传感器设备节点的主要属性信息。DataFromJson.java文件包含了DataFrom Json类的定义,该类主要用于描述NB-IoT传感器设备节点所采集的水质数据信息。ConnectionWithDB.java文件主要定义了与NB-IoT数据库操作相关的函数,包括建立与数据库之间的连接getConnection()、关闭与数据库之间的连接closeConnection()、设备信息的添加与存储add2Devicelist()、针对NB-IoT传感器设备的数据上报周期指令查询checkCommandList()、遥测数据信息的存储insert2datatable()等。

图6 与NB-IoT服务器交互模块的文件调用关系图

以图7为主线来对该模块的关键功能进行介绍。首先,mian函数的第一部分功能是对运行于数据库服务器中的North API client进行认证与鉴权,执行成功后,North API client会获得一个鉴权密钥accessToken。之后,main函数执行第二与第三部分功能,North API client基于accessToken并通过调用库函数queryDevices()在NB-IoT服务器端查询所有NB-IoT的设备信息,通过getTotalCount()函数获得设备的数量。对于新添加的设备,North API client将该设备信息加入数据库服务器的DeviceInfo表中,对于已在表中存在的设备,North API client对该设备的相关属性进行更新。如图8所示,DeviceInfo首先被打包成JSON格式由NB-IoT服务器传输至数据库服务器端,在数据库服务器端North API client将JSON格式的数据进行解析并将解析后的设备信息插入/更新至设备信息表中。在设备信息写入数据库的同时,mian函数执行第四部分功能,即对于每一台设备而言,North API client检查ComandList表以确认是否有针对该设备下发的指令信息,该指令信息用于设备上报周期的更新,其目的是减少设备上报数据时所产生的能耗。

图7 main函数的主要逻辑功能

图8 数据库服务器与NB-IoT服务器的交互

基于上述过程,main函数执行第五部分功能,North API client基于accessToken并通过调用库函数queryDataHistory在NB-IoT服务器端查询所有NB-IoT设备采集的遥测数据信息。与设备信息DeviceInfo相同,遥测数据信息DataInfo首先被打包成JSON格式由NB-IoT服务器传输至数据库服务器端,之后North API client将JSON格式的数据进行解析并将解析后的信息根据采集的时间顺序插入遥测数据信息表中。最后,main函数执行第六部分功能对鉴权密钥进行刷新。

2.3 数据库服务器与云服务器交互模块

在2.2节已详细说明了数据库服务器如何对传感器上报的水质监测数据及设备数据进行获取与存储。为了有效地对数据库服务器中存储的数据进行处理,平台层的业务服务器(即云服务器)需对数据库服务器中存储的数据进行获取。本节将介绍数据库服务器与业务服务器之间交互模块的关键技术并进一步对业务服务器的关键功能进行介绍。

如图9所示,在数据库服务器中我们采用Java script搭配MQTT的方式对其存储的设备数据信息及设备遥测数据信息进行发布,其中数据库服务器作为数据的发布者而云服务器作为数据的订阅者。具体而言,图9中的MQTT(消息队列遥测传输)是ISO标准下基于发布/订阅范式的消息协议。它工作于TCP/IP协议族之上,而Node是一个可让JavaScript程序模块运行于服务端的开发平台。

图9 数据库服务器针对云服务器的数据发布

在云服务器中,Thingsboard平台会根据定义的规则引擎(Rule Engine)对数据库服务器发布的遥测数据信息进行过滤并对异常的遥测数据进行报警。其中规则引擎是一个易于使用的框架,主要用于构建基于事件的工作流,其由3个主要组成部分:

(1) 消息——任何传入的事件,它可以是来自设备的传入数据、设备的生命周期事件、REST API事件、RPC请求等。

(2) 规则节点——针对传入消息所执行的功能,有多种不同类型的规则节点可对不同的传入消息进行过滤、转换或执行其他操作。

(3) 规则链——规则节点通过关系相互连接,因此来自规则链中的某一节点的输入消息为其前驱节点的输出消息,而该规则节点的输出消息为其后继规则节点的输入消息。

由于水质监测系统监测的水质指标较多,在这里以其中5项指标为例进行相关说明,包括水的溶解氧浓度(DO)、氢离子浓度指数(PH)、水温(TEMP)、氧化还原电位(ORP)、电导率(EC)。我们首先定义了如图10所示的规则链根实体,其中规则链根实体中的五个长方形分别标识针对5项水质监测指标的规则链节点。

图10 规则链根实体

以DO为例对其规则链的建立进行说明。如图11所示,可以看到对于数据库服务器发布的水质监测信息, DO规则链首先对DO值进行检查并判断该值是否触发黄色警报或红色警报,若该值异常并足以触发黄色警报,则系统会向河长、部门、公司发送警报邮件及警报短信;若该值异常足以触发红色警报,则系统会向河长、部门、公司、领导发送警报邮件。其中触发黄色警报的具体动作定义如图12所示,红色警报触发动作的定义与黄色警报相同。

图11 DO规则链的建立

图12 触发黄色警报动作的定义

2.4 云服务器中Thingsboard平台地图显示

本系统还对云服务器中Thingsboard平台的地图显示部件进行了修改,消除了鉴权失败的错误并且通过污染范围的绘制及渲染增强了水质污染区域的显示。本节对该关键技术进行简单介绍。

云服务器中的Thingsboard平台可预先提供一些物联网应用常用的显示部件,如地图、数据图表等。这些显示部件可通过可编程部件Widgets进行编辑与动态编译。具体而言,其可通过在Web页面内修改HTML、CSS、和JavaScript部分代码并动态编译运行于Thingsboard平台中。

如2.3节所述,对于数据库服务器发布来的最新遥测数据,Thingsboard平台可对数据进行触发报警短信与报警邮件的逻辑判断。进一步,为了更清晰地在地图中定位异常数据发生的位置,我们需对Thingsboard平台前端及后台的部分代码进行更新。由于地图显示部件本身并不直接读取Thingsboard平台外置数据库中的遥测数据,因此需要通过调用Thingsboard后台代码中的结构体dataSource进行遥测数据的读取并进行正确的解析。具体而言,每个传感器设备有其自身的属性值,如经度、纬度、测量值和阈值,而传感器数量众多,发送的数据量较大,因此需要在后台代码中根据内置的key值对每个传感器对应的属性值进行区分,然后放入dataSource结体并发送至地图显示部件的API。

之后,前端代码根据解析的数据判断当前读入的遥测数据是否为异常数据,对于异常数据,前端代码根据对应数据采集设备的经纬度值进行定位并绘制出污染范围。用户显示界面只需在Thingsboard平台中的dashboard地图数据源配置部分设置时间序列为最新的遥测值,进行刷新,若测量值大于阈值,双击地理坐标点则可根据污染范围绘制如图13所示的示意图,再次双击则会更清楚地显示绘制效果。

图13 污染范围绘制示意图

本节加入的异常数据地图渲染功能,搭配前文所述的报警短信与报警邮件功能,可对用户提供更快速有效的水质监测决策支持。

3 实验案例

本节通过具体的实验案例来对物联网水质监测系统平台层功能进行测试。该实验选取的监测区域位于上海市奉贤区的大治河,在河中部署了2G与NB-IoT两种通信模组的传感器节点与汇聚节点。两种设备定时对水质监测数据进行上报,系统平台层的数据库服务器对上报的遥测数据进行接收并存储,再将存储的遥测数据发布至业务服务器做进一步处理,业务服务器对发布的数据进行处理并根据数据是否异常为应用层用户提供预警服务(包括发送报警短信与报警邮件),此外,应用层可提供多种显示控件供用户进行数据查询与实时监测。

功能测试实验步骤如下:

(1) 在数据库服务器中的Node平台中运行test.java模块,该模块基于javascript搭配MQTT协议编写,其主要功能是将数据库服务器中存储的传感器遥测数据发送至云服务器。

(2) 如图14所示,在数据库服务器中打开命令窗口,对发送至云服务器的遥测数据进行观察。

图14 云服务器接收的遥测数据中发现异常

(3) 如图14高亮区域所示,由于发现异常数据,因此用户将收到报警短信与报警邮件,如图15与图16所示。

图15 异常数据触发的报警短信

图16 异常数据触发的报警邮件

可以看出,由于云服务器收到的异常数据DO的值超出了规则引擎所规定的合理范围,因此触发了报警短信与报警邮件。报警短信与报警邮件中包含了采集该异常数据的传感器设备地址。此外,在报警邮件中还包含了腾讯地图的链接,通过链接可以打开如图17所示的用户查询监测界面。

图17 异常数据在数据库服务器中的位置

(4) 图17中,可以根据地图找到相应位置的设备数据信息与遥测数据信息,此外由于通过可编程部件加入了视频显示插件,因此可以通过视频实时监测此时河流周围的具体环境信息。

(5) 根据报警短信与报警邮件显示的异常数据信息,到数据库服务器中定位该值所在的数据库文件,如图18所示,其位于数据库表device5中,可以看出该设备编号与报警短信与报警邮件中的设备编号一致。

图18 异常数据在用户查询与监测界面的显示

通过上述实验测试可以看出,平台层可以成功地衔接网络层与应用层,其可将网络层传输来的遥测数据通过数据库服务器进行有效存储并能通过云服务器对存储的遥测数据进行有效处理,为应用层的用户提供决策服务。此外,应用层可通过地图、图表、视频等可显示部件来为用户提供可视化的水质监测服务。

4 结 语

本文基于物联网平台的云-管-端体系设计并实现了一种基于海量异构传感器的物联网水质监测系统。该系统基于2G传感器节点、NB-IoT传感器节点以及LoRa传感器节点对水质监测数据进行实时采集,并通过平台层的数据库服务器、NB-IoT服务器、LoRa服务器以及业务服务器之间的交互来实现水质遥测数据的高效存储与处理。通过平台层的处理,该系统可以图表、地图、视频的形式为应用层的用户提供水资源监测数据的实时查询与监控并可通过报警短信与报警邮件的方式向用户提供异常水质监测数据信息,以便迅速作出决策。总体而言,本文主要完成了以下工作:

(1) 提出了一种系统的总体设计架构,基于云-管-端体系对系统架构进行层次划分并总结了系统各个层的主要组成单元及功能。

(2) 详细介绍了系统平台层的主要功能及关键技术,包括数据库服务器通过TCP socket模块对2G传感器设备采集的遥测数据信息进行接收与存储,数据库服务器通过North API client模块从NB-IoT服务器与LoRa服务器提取及存储与NB-IoT传感器和LoRa传感器设备相关的遥测数据信息,以及数据库服务器通过Node平台以Javascript搭配MQTT的方式将其存储的数据发布至云服务器供其进行数据的处理与提供面向用户的Web服务。

(3) 通过实验案例对水质监测系统进行了功能测试并对测试结果进行了分析,可以看出该系统可通过多种方式为用户提供水质数据的查询与监测并可及时发送水质预警短信及邮件来为用户快速决策提供支持。

本文提出的水质监测系统是一项较为复杂的系统工程,文中的相关内容还需再做进一步完善与补充。今后的研究工作应包含以下相关内容:

(1) 考虑到未来海量传感器节点的部署,海量数据的传输、存储、处理,以及更为丰富的Web应用,应通过相关技术进一步增强系统的稳定性、可扩展性及开发便捷性。

(2) 考虑到未来传感器节点采集的海量数据,应考虑采用服务器集群的方式对数据进行存储与处理。

(3) 考虑到系统的商用稳定性及长期维护的便捷性,应采用备份服务器或服务器集群的方式实现服务器功能失效后的快速切换。

猜你喜欢
遥测线程水质
5G终端模拟系统随机接入过程的设计与实现
实时操作系统mbedOS 互斥量调度机制剖析
遥测定位信息网络传输间断问题的解决方法
浅析体育赛事售票系统错票问题的对策研究
高层次综合技术在遥测地面站数据处理中的应用
基于MicroBlaze的测控终端数据处理模块的设计与实现
水质的年轮——读《时光的年轮》
非协作目标的遥测数据处理技术
Java的多线程技术探讨
观水色,辨水质