陳 玥 王海峰 賈建鑫 康 凱*
1(東南大學(xué)計算機科學(xué)與工程學(xué)院 江蘇 南京 211189)2(中國科學(xué)院上海微系統(tǒng)與信息技術(shù)研究所 上海 200050)3(中國科學(xué)院上海高等研究院 上海 201210)
當前,隨著我國城市化建設(shè)的快速推進,水資源短缺與水環(huán)境污染已成為城市化建設(shè)面臨的關(guān)鍵問題。水資源短缺與水環(huán)境污染不僅會阻礙經(jīng)濟建設(shè),更會對國民健康帶來危害。因此,針對水資源進行有效的監(jiān)測與管理顯得至關(guān)重要。
另一方面,隨著國內(nèi)外物聯(lián)網(wǎng)技術(shù)[1-5]的快速發(fā)展,物聯(lián)網(wǎng)技術(shù)被廣泛應(yīng)用于水資源監(jiān)測領(lǐng)域[6-9],其在很大程度上促進了水資源監(jiān)測技術(shù)的發(fā)展。物聯(lián)網(wǎng)作為一種新興的技術(shù)領(lǐng)域,受到國家的高度重視。國家工信部發(fā)布了《物聯(lián)網(wǎng)“十二五”發(fā)展規(guī)劃》,將智能環(huán)保作為一項重點示范工程。智能環(huán)保旨在利用物聯(lián)網(wǎng)相關(guān)技術(shù)實現(xiàn)污染源監(jiān)控、水質(zhì)監(jiān)測、空氣監(jiān)測、生態(tài)監(jiān)測并建立智能環(huán)保信息采集網(wǎng)絡(luò)與信息平臺。水質(zhì)監(jiān)測和水污染監(jiān)控?zé)o疑是智能環(huán)保的一個重要組成部分。因此,研究基于物聯(lián)網(wǎng)技術(shù)的水資源監(jiān)測平臺勢在必行。鑒于此,本文基于物聯(lián)網(wǎng)平臺相關(guān)理論技術(shù),設(shè)計并實現(xiàn)了一種基于海量異構(gòu)傳感器的物聯(lián)網(wǎng)水質(zhì)監(jiān)測系統(tǒng),根據(jù)圖1所示的云-管-端體系,將該系統(tǒng)分為4層,包括感知層、網(wǎng)絡(luò)層、平臺層、應(yīng)用層。其中感知層主要由各種傳感器節(jié)點構(gòu)成,其主要負責(zé)對物理世界進行信息收集與信號處理;網(wǎng)絡(luò)層主要由各類傳輸網(wǎng)絡(luò)構(gòu)成,負責(zé)終端接入與數(shù)據(jù)傳輸;平臺層主要由數(shù)據(jù)庫服務(wù)器和業(yè)務(wù)服務(wù)器構(gòu)成,負責(zé)設(shè)備通信管理,數(shù)據(jù)存儲,業(yè)務(wù)處理規(guī)劃等,應(yīng)用層由各類可視化控件構(gòu)成,負責(zé)數(shù)據(jù)呈現(xiàn)及客戶交互。
圖1 基于云-管-端體系的物聯(lián)網(wǎng)平臺層次劃分
本文的主要貢獻如下:
(1) 基于云-管-端模型提出了物聯(lián)網(wǎng)水質(zhì)監(jiān)測系統(tǒng)的總體架構(gòu),將物聯(lián)網(wǎng)水質(zhì)監(jiān)測系統(tǒng)分為感知層、網(wǎng)絡(luò)層、平臺層、應(yīng)用層四部分。在感知層,分別采用2G、NB-IoT[10-12]、LoRa[13-15]等多種不同網(wǎng)絡(luò)制式的傳感器設(shè)備進行水質(zhì)數(shù)據(jù)的采集;在網(wǎng)絡(luò)層,分別通過2G傳輸網(wǎng)絡(luò)、NB-IoT傳輸網(wǎng)絡(luò)、LoRa傳輸網(wǎng)絡(luò)對水質(zhì)遙測數(shù)據(jù)及傳感器設(shè)備數(shù)據(jù)進行傳輸;在平臺層,通過數(shù)據(jù)庫服務(wù)器、云服務(wù)器、NB-IoT服務(wù)器、以及LoRa服務(wù)器對網(wǎng)絡(luò)層上報的相關(guān)數(shù)據(jù)進行存儲與處理;在應(yīng)用層,通過圖表、地圖、視頻等可編程顯示部件來向用戶提供可視化的水質(zhì)監(jiān)測信息,并可根據(jù)平臺層定義的規(guī)則引擎觸發(fā)警報實時地向用戶推送短信和郵件通知。
(2) 基于系統(tǒng)總體架構(gòu),進一步對系統(tǒng)平臺層的關(guān)鍵技術(shù)進行了詳細介紹。首先,平臺層的數(shù)據(jù)庫服務(wù)器通過TCP socket模塊以及多線程機制與2G傳感器進行交互,包括將2G網(wǎng)絡(luò)傳輸來的水質(zhì)遙測數(shù)據(jù)信息與設(shè)備信息進行存儲以及針對2G傳感器設(shè)備下發(fā)指令信息。與此同時,數(shù)據(jù)庫服務(wù)器中的North API client通過調(diào)用北向接口North API與NB-IoT服務(wù)器及LoRa服務(wù)器進行交互,包括從NB-IoT服務(wù)器及LoRa服務(wù)器中讀取NB-IoT傳感器設(shè)備及LoRa傳感器設(shè)備采集的遙測信息和設(shè)備信息,將讀取后的信息進行解析與存儲,以及針對NB-IoT傳感器設(shè)備及LoRa傳感器設(shè)備的指令下發(fā)。其次,對于數(shù)據(jù)庫服務(wù)器中存儲的設(shè)備信息與水質(zhì)遙測信息,在數(shù)據(jù)庫服務(wù)器中通過Node平臺以Javascript搭配MQTT的方式實現(xiàn)與云服務(wù)器中開源IoT平臺-Thingsboard[16-17]的交互,Thingsboard平臺中定義的規(guī)則引擎會對數(shù)據(jù)庫服務(wù)器發(fā)布的設(shè)備遙測數(shù)據(jù)信息進行過濾,對于異常的遙測數(shù)據(jù)其會觸發(fā)警報并通過SMTP和RESTful向用戶發(fā)送警報郵件和警報短信。最后,在Thingsboard平臺中,除其自帶的圖表可顯示部件外,對其地圖部件進行了修改,消除了鑒權(quán)失敗的錯誤并且增強了污染范圍的渲染效果,此外,還通過可編程部件Widget加入了視頻顯示控件,其可向用戶提供實時的水質(zhì)外景監(jiān)測。
(3) 通過實驗案例來對水質(zhì)監(jiān)測系統(tǒng)進行功能測試,通過收集實時的水質(zhì)監(jiān)測數(shù)據(jù)來觸發(fā)警報并向用戶推送警報短信與警報郵件。相關(guān)實驗結(jié)果表明,該系統(tǒng)可快速有效地向用戶提供水質(zhì)監(jiān)測與報警信息。
基于圖2所示的系統(tǒng)總體架構(gòu),在感知層,分別采用2G傳感器節(jié)點與2G匯聚節(jié)點、NB-IoT傳感器節(jié)點與NB-IoT匯聚節(jié)點,以及LoRa傳感器節(jié)點與LoRa匯聚節(jié)點對需要監(jiān)測的水質(zhì)數(shù)據(jù)進行采集,包括水的溶解氧濃度(DO)、氫離子濃度指數(shù)(PH)、水溫(TEMP)、氧化還原電位(ORP)、電導(dǎo)率(EC)、化學(xué)需氧量(COD)、生化需氧量(BOD)、懸浮物(SS)、水質(zhì)色度(WC)等。
圖2 基于海量異構(gòu)傳感器的物聯(lián)網(wǎng)水質(zhì)監(jiān)測系統(tǒng)總體架構(gòu)
在網(wǎng)絡(luò)層,通過2G傳輸網(wǎng)絡(luò)、NB-IoT傳輸網(wǎng)絡(luò)以及LoRa傳輸網(wǎng)絡(luò)對感知層采集的水質(zhì)監(jiān)測數(shù)據(jù)進行傳輸。
在平臺層,數(shù)據(jù)庫服務(wù)器、NB-IoT服務(wù)器、LoRa服務(wù)器以及云服務(wù)器對網(wǎng)絡(luò)層傳輸來的遙測數(shù)據(jù)進行存儲與處理。具體而言,系統(tǒng)整體運行于云服務(wù)器之上,主體部分是運行于服務(wù)器中的開源IoT平臺——Thingsboard,該平臺基于Java語言構(gòu)建并可提供完整的Web功能,其利用獨立的外置數(shù)據(jù)庫Cassandra將數(shù)據(jù)源與Web平臺隔離,以便為后續(xù)大數(shù)據(jù)處理預(yù)留空間。如前文所述,感知層的傳感器通信模組包括LoRa、NB-IoT、以及2G等多種網(wǎng)絡(luò)制式,因此本系統(tǒng)分別使用不同的方式對上述網(wǎng)絡(luò)制式傳送的遙測數(shù)據(jù)與設(shè)備數(shù)據(jù)進行處理。為實現(xiàn)數(shù)據(jù)采集,數(shù)據(jù)庫服務(wù)器中運行了三個程序模塊來實現(xiàn)數(shù)據(jù)源與云服務(wù)器中Cassandra數(shù)據(jù)庫的交互,包括數(shù)據(jù)獲取、解析、儲存和設(shè)備上報周期指令的下發(fā)。其中第一個程序模塊如圖2中數(shù)據(jù)庫服務(wù)器左側(cè)的雙向箭頭所示,對于2G網(wǎng)絡(luò)傳送的數(shù)據(jù),系統(tǒng)通過TCP socket以及多線程機制對2G設(shè)備發(fā)送的數(shù)據(jù)進行實時接收并存儲至MySQL數(shù)據(jù)庫。對于使用NB-IoT與LoRa傳送的數(shù)據(jù)而言,數(shù)據(jù)庫服務(wù)器通過第二個程序模塊調(diào)用North API對NB-IoT服務(wù)器與LoRa服務(wù)器中緩存的數(shù)據(jù)進行讀取并存儲至MySQL數(shù)據(jù)庫。之后,數(shù)據(jù)庫服務(wù)器將MySQL中的數(shù)據(jù)通過基于JavaScript編寫的第3個程序模塊獲取并使用MQTT的方式發(fā)送至Thingsboard平臺的外置Cassandra數(shù)據(jù)庫。Thingsboard平臺支持HTTP、CoAP和MQTT等多種協(xié)議,其中MQTT是被廣泛應(yīng)用的輕量級M2M/IoT消息協(xié)議,其采用訂閱/發(fā)布的模式。Thingsboard平臺的規(guī)則引擎會對數(shù)據(jù)庫服務(wù)器發(fā)送來的數(shù)據(jù)進行監(jiān)測,當規(guī)則引擎發(fā)現(xiàn)異常數(shù)據(jù)時會向用戶推送報警短信和郵件。
在應(yīng)用層,系統(tǒng)基于平臺層實現(xiàn)了在Thingsboard平臺內(nèi)的規(guī)則引擎中利用SMTP和RESTful API分別向互聯(lián)網(wǎng)中的第三方電子郵件轉(zhuǎn)發(fā)商與短信轉(zhuǎn)發(fā)商推送信息,提供電子郵件和短信通知服務(wù)。此外,Thingsboard平臺內(nèi)置一個Web servlet用于提供Web服務(wù),其默認運行在本地8080端口,Web頁面由多個可編程部件(Widget)構(gòu)成,Thingsboard平臺預(yù)先提供一些物聯(lián)網(wǎng)應(yīng)用常用的顯示部件,如地圖、數(shù)據(jù)圖表等??删幊滩考稍赪eb頁面內(nèi)修改HTML、CSS和JavaScript部分代碼并動態(tài)編譯運行于Thingsboard平臺中。除了使用已有部件構(gòu)建Web頁面,本系統(tǒng)還針對騰訊地圖的更新操作進行了修改,以消除鑒權(quán)失敗的錯誤并通過地圖渲染進一步增強顯示污染區(qū)域的具體范圍。此外,還新建了視頻直播部件,使得用戶可在傳感器終端站點頁面中獲得云平臺提供的攝像頭直播畫面。
本節(jié)對物聯(lián)網(wǎng)水質(zhì)監(jiān)測系統(tǒng)平臺層的主要功能及關(guān)鍵技術(shù)進行介紹,以2G與NB-IoT為例(平臺層針對LoRa的操作與NB類似)展開。
該模塊部署于數(shù)據(jù)庫服務(wù)器中,其所包含的代碼文件關(guān)系圖如圖3所示,主函數(shù)所在的Java源文件在運行期間會調(diào)用其他5個代碼文件。其中Global Parameter.java主要用于定義2G TCP socket功能模塊相關(guān)全局變量。ServerThread.java文件包含與TCP socket相關(guān)聯(lián)的線程類的公有操作及私有變量的定義。MyDataSource.java描述了與存儲2G相關(guān)設(shè)備信息以及遙測數(shù)據(jù)信息的數(shù)據(jù)庫連接類的私有變量和公有操作的定義。V1Msg.java用于描述2G TCP Socket模塊用到的數(shù)據(jù)結(jié)構(gòu)類的定義。下文將以主函數(shù)為主線來對該模塊的關(guān)鍵功能進行介紹。
圖3 2G TCP socket模塊的文件調(diào)用關(guān)系圖
2G TCP socket模塊main函數(shù)的主要邏輯功能如圖4所示,其包含六部分功能。第一部分功能用于設(shè)置線程計數(shù)器的初始值,主要用于對線程池中的線程進行計數(shù)。第二部分功能用于建立一個數(shù)據(jù)庫連接池對象,與數(shù)據(jù)庫連接池相關(guān)的類為MyDataSource,其相關(guān)定義在MyDataSource.java源文件中,該連接池包含了與2G設(shè)備信息及遙測數(shù)據(jù)信息相關(guān)的數(shù)據(jù)庫連接對象,如圖5中雙向箭頭所示。第三部分功能主要用于建立TCP Socket相關(guān)的TCP server線程池對象,全局變量GlobalParameter.maxThreadNumber規(guī)定了該線程池所包含的最大線程數(shù),該值的定義位于全局變量文件GlobalParameter.java中。第四部分功能用于建立一個保護線程對象,保護線程類定義在ServerThread.java中,保護線程主要用于對線程池中的TCP server線程進行監(jiān)視以防止某一個TCP server線程執(zhí)行時間過長所造成的資源占用。第五部分功能用于建立一個TCP server socket對象并監(jiān)聽指定的端口號。第六部分功能用于建立一個TCP server線程對象并為其賦予TCP socket連接、指定的TCP server線程索引號、以及指定的數(shù)據(jù)庫資源池ds。
圖4 2G TCP socket模塊main函數(shù)的主要邏輯功能
圖5 2G TCP Socket模塊多線程與多數(shù)據(jù)庫連接的對應(yīng)關(guān)系
根據(jù)圖5可以看出TCP server線程資源池中的線程調(diào)用數(shù)據(jù)庫資源池中的任意一個數(shù)據(jù)庫連接與MySQL數(shù)據(jù)庫進行交互,具體而言,一個TCP server線程在任一時刻對應(yīng)一個TCP socket連接與一個數(shù)據(jù)庫連接。對于右向箭頭,其表示TCP server線程通過TCP socket連接以及數(shù)據(jù)庫連接將2G網(wǎng)絡(luò)傳送來的設(shè)備數(shù)據(jù)與遙測數(shù)據(jù)寫入數(shù)據(jù)庫服務(wù)器中用于存儲2G設(shè)備信息和遙測信息的MySQL數(shù)據(jù)庫;對于左向箭頭,其表示數(shù)據(jù)庫服務(wù)器根據(jù)指定規(guī)則下發(fā)指令到2G設(shè)備來更新其上報數(shù)據(jù)的周期,目的是為節(jié)省設(shè)備的能耗。如前文所述,由于TCP server線程池中的線程數(shù)量有限,當上報數(shù)據(jù)的設(shè)備逐漸增多時,若沒有保護線程對當前的執(zhí)行線程進行有效監(jiān)視與釋放,那么線程池中的可用線程將會逐漸減少,最終可能導(dǎo)致無可用的線程來進行調(diào)度。因此,在本系統(tǒng)中,我們設(shè)定當線程的執(zhí)行時間超過預(yù)設(shè)的最大執(zhí)行時間timingvalue時就對該線程釋放,也即當線程資源池將線程提交時開始計時,當線程達到最大執(zhí)行時間timing value時對該線程進行釋放,與保護線程相同,TCP server線程類的相關(guān)定義也在代碼文件ServerThread.java中。
本模塊所包含的源代碼文件關(guān)系如圖6所示,主函數(shù)所在的DataCollectionFromServer.java文件在運行期間會調(diào)用其他3個代碼文件。其中DeviceInfoFrom Json.java文件主要包含了DeviceInfoFromJson類的定義,該類主要用于描述NB-IoT傳感器設(shè)備節(jié)點的主要屬性信息。DataFromJson.java文件包含了DataFrom Json類的定義,該類主要用于描述NB-IoT傳感器設(shè)備節(jié)點所采集的水質(zhì)數(shù)據(jù)信息。ConnectionWithDB.java文件主要定義了與NB-IoT數(shù)據(jù)庫操作相關(guān)的函數(shù),包括建立與數(shù)據(jù)庫之間的連接getConnection()、關(guān)閉與數(shù)據(jù)庫之間的連接closeConnection()、設(shè)備信息的添加與存儲add2Devicelist()、針對NB-IoT傳感器設(shè)備的數(shù)據(jù)上報周期指令查詢checkCommandList()、遙測數(shù)據(jù)信息的存儲insert2datatable()等。
圖6 與NB-IoT服務(wù)器交互模塊的文件調(diào)用關(guān)系圖
以圖7為主線來對該模塊的關(guān)鍵功能進行介紹。首先,mian函數(shù)的第一部分功能是對運行于數(shù)據(jù)庫服務(wù)器中的North API client進行認證與鑒權(quán),執(zhí)行成功后,North API client會獲得一個鑒權(quán)密鑰accessToken。之后,main函數(shù)執(zhí)行第二與第三部分功能,North API client基于accessToken并通過調(diào)用庫函數(shù)queryDevices()在NB-IoT服務(wù)器端查詢所有NB-IoT的設(shè)備信息,通過getTotalCount()函數(shù)獲得設(shè)備的數(shù)量。對于新添加的設(shè)備,North API client將該設(shè)備信息加入數(shù)據(jù)庫服務(wù)器的DeviceInfo表中,對于已在表中存在的設(shè)備,North API client對該設(shè)備的相關(guān)屬性進行更新。如圖8所示,DeviceInfo首先被打包成JSON格式由NB-IoT服務(wù)器傳輸至數(shù)據(jù)庫服務(wù)器端,在數(shù)據(jù)庫服務(wù)器端North API client將JSON格式的數(shù)據(jù)進行解析并將解析后的設(shè)備信息插入/更新至設(shè)備信息表中。在設(shè)備信息寫入數(shù)據(jù)庫的同時,mian函數(shù)執(zhí)行第四部分功能,即對于每一臺設(shè)備而言,North API client檢查ComandList表以確認是否有針對該設(shè)備下發(fā)的指令信息,該指令信息用于設(shè)備上報周期的更新,其目的是減少設(shè)備上報數(shù)據(jù)時所產(chǎn)生的能耗。
圖7 main函數(shù)的主要邏輯功能
圖8 數(shù)據(jù)庫服務(wù)器與NB-IoT服務(wù)器的交互
基于上述過程,main函數(shù)執(zhí)行第五部分功能,North API client基于accessToken并通過調(diào)用庫函數(shù)queryDataHistory在NB-IoT服務(wù)器端查詢所有NB-IoT設(shè)備采集的遙測數(shù)據(jù)信息。與設(shè)備信息DeviceInfo相同,遙測數(shù)據(jù)信息DataInfo首先被打包成JSON格式由NB-IoT服務(wù)器傳輸至數(shù)據(jù)庫服務(wù)器端,之后North API client將JSON格式的數(shù)據(jù)進行解析并將解析后的信息根據(jù)采集的時間順序插入遙測數(shù)據(jù)信息表中。最后,main函數(shù)執(zhí)行第六部分功能對鑒權(quán)密鑰進行刷新。
在2.2節(jié)已詳細說明了數(shù)據(jù)庫服務(wù)器如何對傳感器上報的水質(zhì)監(jiān)測數(shù)據(jù)及設(shè)備數(shù)據(jù)進行獲取與存儲。為了有效地對數(shù)據(jù)庫服務(wù)器中存儲的數(shù)據(jù)進行處理,平臺層的業(yè)務(wù)服務(wù)器(即云服務(wù)器)需對數(shù)據(jù)庫服務(wù)器中存儲的數(shù)據(jù)進行獲取。本節(jié)將介紹數(shù)據(jù)庫服務(wù)器與業(yè)務(wù)服務(wù)器之間交互模塊的關(guān)鍵技術(shù)并進一步對業(yè)務(wù)服務(wù)器的關(guān)鍵功能進行介紹。
如圖9所示,在數(shù)據(jù)庫服務(wù)器中我們采用Java script搭配MQTT的方式對其存儲的設(shè)備數(shù)據(jù)信息及設(shè)備遙測數(shù)據(jù)信息進行發(fā)布,其中數(shù)據(jù)庫服務(wù)器作為數(shù)據(jù)的發(fā)布者而云服務(wù)器作為數(shù)據(jù)的訂閱者。具體而言,圖9中的MQTT(消息隊列遙測傳輸)是ISO標準下基于發(fā)布/訂閱范式的消息協(xié)議。它工作于TCP/IP協(xié)議族之上,而Node是一個可讓JavaScript程序模塊運行于服務(wù)端的開發(fā)平臺。
圖9 數(shù)據(jù)庫服務(wù)器針對云服務(wù)器的數(shù)據(jù)發(fā)布
在云服務(wù)器中,Thingsboard平臺會根據(jù)定義的規(guī)則引擎(Rule Engine)對數(shù)據(jù)庫服務(wù)器發(fā)布的遙測數(shù)據(jù)信息進行過濾并對異常的遙測數(shù)據(jù)進行報警。其中規(guī)則引擎是一個易于使用的框架,主要用于構(gòu)建基于事件的工作流,其由3個主要組成部分:
(1) 消息——任何傳入的事件,它可以是來自設(shè)備的傳入數(shù)據(jù)、設(shè)備的生命周期事件、REST API事件、RPC請求等。
(2) 規(guī)則節(jié)點——針對傳入消息所執(zhí)行的功能,有多種不同類型的規(guī)則節(jié)點可對不同的傳入消息進行過濾、轉(zhuǎn)換或執(zhí)行其他操作。
(3) 規(guī)則鏈——規(guī)則節(jié)點通過關(guān)系相互連接,因此來自規(guī)則鏈中的某一節(jié)點的輸入消息為其前驅(qū)節(jié)點的輸出消息,而該規(guī)則節(jié)點的輸出消息為其后繼規(guī)則節(jié)點的輸入消息。
由于水質(zhì)監(jiān)測系統(tǒng)監(jiān)測的水質(zhì)指標較多,在這里以其中5項指標為例進行相關(guān)說明,包括水的溶解氧濃度(DO)、氫離子濃度指數(shù)(PH)、水溫(TEMP)、氧化還原電位(ORP)、電導(dǎo)率(EC)。我們首先定義了如圖10所示的規(guī)則鏈根實體,其中規(guī)則鏈根實體中的五個長方形分別標識針對5項水質(zhì)監(jiān)測指標的規(guī)則鏈節(jié)點。
圖10 規(guī)則鏈根實體
以DO為例對其規(guī)則鏈的建立進行說明。如圖11所示,可以看到對于數(shù)據(jù)庫服務(wù)器發(fā)布的水質(zhì)監(jiān)測信息, DO規(guī)則鏈首先對DO值進行檢查并判斷該值是否觸發(fā)黃色警報或紅色警報,若該值異常并足以觸發(fā)黃色警報,則系統(tǒng)會向河長、部門、公司發(fā)送警報郵件及警報短信;若該值異常足以觸發(fā)紅色警報,則系統(tǒng)會向河長、部門、公司、領(lǐng)導(dǎo)發(fā)送警報郵件。其中觸發(fā)黃色警報的具體動作定義如圖12所示,紅色警報觸發(fā)動作的定義與黃色警報相同。
圖11 DO規(guī)則鏈的建立
圖12 觸發(fā)黃色警報動作的定義
本系統(tǒng)還對云服務(wù)器中Thingsboard平臺的地圖顯示部件進行了修改,消除了鑒權(quán)失敗的錯誤并且通過污染范圍的繪制及渲染增強了水質(zhì)污染區(qū)域的顯示。本節(jié)對該關(guān)鍵技術(shù)進行簡單介紹。
云服務(wù)器中的Thingsboard平臺可預(yù)先提供一些物聯(lián)網(wǎng)應(yīng)用常用的顯示部件,如地圖、數(shù)據(jù)圖表等。這些顯示部件可通過可編程部件Widgets進行編輯與動態(tài)編譯。具體而言,其可通過在Web頁面內(nèi)修改HTML、CSS、和JavaScript部分代碼并動態(tài)編譯運行于Thingsboard平臺中。
如2.3節(jié)所述,對于數(shù)據(jù)庫服務(wù)器發(fā)布來的最新遙測數(shù)據(jù),Thingsboard平臺可對數(shù)據(jù)進行觸發(fā)報警短信與報警郵件的邏輯判斷。進一步,為了更清晰地在地圖中定位異常數(shù)據(jù)發(fā)生的位置,我們需對Thingsboard平臺前端及后臺的部分代碼進行更新。由于地圖顯示部件本身并不直接讀取Thingsboard平臺外置數(shù)據(jù)庫中的遙測數(shù)據(jù),因此需要通過調(diào)用Thingsboard后臺代碼中的結(jié)構(gòu)體dataSource進行遙測數(shù)據(jù)的讀取并進行正確的解析。具體而言,每個傳感器設(shè)備有其自身的屬性值,如經(jīng)度、緯度、測量值和閾值,而傳感器數(shù)量眾多,發(fā)送的數(shù)據(jù)量較大,因此需要在后臺代碼中根據(jù)內(nèi)置的key值對每個傳感器對應(yīng)的屬性值進行區(qū)分,然后放入dataSource結(jié)體并發(fā)送至地圖顯示部件的API。
之后,前端代碼根據(jù)解析的數(shù)據(jù)判斷當前讀入的遙測數(shù)據(jù)是否為異常數(shù)據(jù),對于異常數(shù)據(jù),前端代碼根據(jù)對應(yīng)數(shù)據(jù)采集設(shè)備的經(jīng)緯度值進行定位并繪制出污染范圍。用戶顯示界面只需在Thingsboard平臺中的dashboard地圖數(shù)據(jù)源配置部分設(shè)置時間序列為最新的遙測值,進行刷新,若測量值大于閾值,雙擊地理坐標點則可根據(jù)污染范圍繪制如圖13所示的示意圖,再次雙擊則會更清楚地顯示繪制效果。
圖13 污染范圍繪制示意圖
本節(jié)加入的異常數(shù)據(jù)地圖渲染功能,搭配前文所述的報警短信與報警郵件功能,可對用戶提供更快速有效的水質(zhì)監(jiān)測決策支持。
本節(jié)通過具體的實驗案例來對物聯(lián)網(wǎng)水質(zhì)監(jiān)測系統(tǒng)平臺層功能進行測試。該實驗選取的監(jiān)測區(qū)域位于上海市奉賢區(qū)的大治河,在河中部署了2G與NB-IoT兩種通信模組的傳感器節(jié)點與匯聚節(jié)點。兩種設(shè)備定時對水質(zhì)監(jiān)測數(shù)據(jù)進行上報,系統(tǒng)平臺層的數(shù)據(jù)庫服務(wù)器對上報的遙測數(shù)據(jù)進行接收并存儲,再將存儲的遙測數(shù)據(jù)發(fā)布至業(yè)務(wù)服務(wù)器做進一步處理,業(yè)務(wù)服務(wù)器對發(fā)布的數(shù)據(jù)進行處理并根據(jù)數(shù)據(jù)是否異常為應(yīng)用層用戶提供預(yù)警服務(wù)(包括發(fā)送報警短信與報警郵件),此外,應(yīng)用層可提供多種顯示控件供用戶進行數(shù)據(jù)查詢與實時監(jiān)測。
功能測試實驗步驟如下:
(1) 在數(shù)據(jù)庫服務(wù)器中的Node平臺中運行test.java模塊,該模塊基于javascript搭配MQTT協(xié)議編寫,其主要功能是將數(shù)據(jù)庫服務(wù)器中存儲的傳感器遙測數(shù)據(jù)發(fā)送至云服務(wù)器。
(2) 如圖14所示,在數(shù)據(jù)庫服務(wù)器中打開命令窗口,對發(fā)送至云服務(wù)器的遙測數(shù)據(jù)進行觀察。
圖14 云服務(wù)器接收的遙測數(shù)據(jù)中發(fā)現(xiàn)異常
(3) 如圖14高亮區(qū)域所示,由于發(fā)現(xiàn)異常數(shù)據(jù),因此用戶將收到報警短信與報警郵件,如圖15與圖16所示。
圖15 異常數(shù)據(jù)觸發(fā)的報警短信
圖16 異常數(shù)據(jù)觸發(fā)的報警郵件
可以看出,由于云服務(wù)器收到的異常數(shù)據(jù)DO的值超出了規(guī)則引擎所規(guī)定的合理范圍,因此觸發(fā)了報警短信與報警郵件。報警短信與報警郵件中包含了采集該異常數(shù)據(jù)的傳感器設(shè)備地址。此外,在報警郵件中還包含了騰訊地圖的鏈接,通過鏈接可以打開如圖17所示的用戶查詢監(jiān)測界面。
圖17 異常數(shù)據(jù)在數(shù)據(jù)庫服務(wù)器中的位置
(4) 圖17中,可以根據(jù)地圖找到相應(yīng)位置的設(shè)備數(shù)據(jù)信息與遙測數(shù)據(jù)信息,此外由于通過可編程部件加入了視頻顯示插件,因此可以通過視頻實時監(jiān)測此時河流周圍的具體環(huán)境信息。
(5) 根據(jù)報警短信與報警郵件顯示的異常數(shù)據(jù)信息,到數(shù)據(jù)庫服務(wù)器中定位該值所在的數(shù)據(jù)庫文件,如圖18所示,其位于數(shù)據(jù)庫表device5中,可以看出該設(shè)備編號與報警短信與報警郵件中的設(shè)備編號一致。
圖18 異常數(shù)據(jù)在用戶查詢與監(jiān)測界面的顯示
通過上述實驗測試可以看出,平臺層可以成功地銜接網(wǎng)絡(luò)層與應(yīng)用層,其可將網(wǎng)絡(luò)層傳輸來的遙測數(shù)據(jù)通過數(shù)據(jù)庫服務(wù)器進行有效存儲并能通過云服務(wù)器對存儲的遙測數(shù)據(jù)進行有效處理,為應(yīng)用層的用戶提供決策服務(wù)。此外,應(yīng)用層可通過地圖、圖表、視頻等可顯示部件來為用戶提供可視化的水質(zhì)監(jiān)測服務(wù)。
本文基于物聯(lián)網(wǎng)平臺的云-管-端體系設(shè)計并實現(xiàn)了一種基于海量異構(gòu)傳感器的物聯(lián)網(wǎng)水質(zhì)監(jiān)測系統(tǒng)。該系統(tǒng)基于2G傳感器節(jié)點、NB-IoT傳感器節(jié)點以及LoRa傳感器節(jié)點對水質(zhì)監(jiān)測數(shù)據(jù)進行實時采集,并通過平臺層的數(shù)據(jù)庫服務(wù)器、NB-IoT服務(wù)器、LoRa服務(wù)器以及業(yè)務(wù)服務(wù)器之間的交互來實現(xiàn)水質(zhì)遙測數(shù)據(jù)的高效存儲與處理。通過平臺層的處理,該系統(tǒng)可以圖表、地圖、視頻的形式為應(yīng)用層的用戶提供水資源監(jiān)測數(shù)據(jù)的實時查詢與監(jiān)控并可通過報警短信與報警郵件的方式向用戶提供異常水質(zhì)監(jiān)測數(shù)據(jù)信息,以便迅速作出決策。總體而言,本文主要完成了以下工作:
(1) 提出了一種系統(tǒng)的總體設(shè)計架構(gòu),基于云-管-端體系對系統(tǒng)架構(gòu)進行層次劃分并總結(jié)了系統(tǒng)各個層的主要組成單元及功能。
(2) 詳細介紹了系統(tǒng)平臺層的主要功能及關(guān)鍵技術(shù),包括數(shù)據(jù)庫服務(wù)器通過TCP socket模塊對2G傳感器設(shè)備采集的遙測數(shù)據(jù)信息進行接收與存儲,數(shù)據(jù)庫服務(wù)器通過North API client模塊從NB-IoT服務(wù)器與LoRa服務(wù)器提取及存儲與NB-IoT傳感器和LoRa傳感器設(shè)備相關(guān)的遙測數(shù)據(jù)信息,以及數(shù)據(jù)庫服務(wù)器通過Node平臺以Javascript搭配MQTT的方式將其存儲的數(shù)據(jù)發(fā)布至云服務(wù)器供其進行數(shù)據(jù)的處理與提供面向用戶的Web服務(wù)。
(3) 通過實驗案例對水質(zhì)監(jiān)測系統(tǒng)進行了功能測試并對測試結(jié)果進行了分析,可以看出該系統(tǒng)可通過多種方式為用戶提供水質(zhì)數(shù)據(jù)的查詢與監(jiān)測并可及時發(fā)送水質(zhì)預(yù)警短信及郵件來為用戶快速決策提供支持。
本文提出的水質(zhì)監(jiān)測系統(tǒng)是一項較為復(fù)雜的系統(tǒng)工程,文中的相關(guān)內(nèi)容還需再做進一步完善與補充。今后的研究工作應(yīng)包含以下相關(guān)內(nèi)容:
(1) 考慮到未來海量傳感器節(jié)點的部署,海量數(shù)據(jù)的傳輸、存儲、處理,以及更為豐富的Web應(yīng)用,應(yīng)通過相關(guān)技術(shù)進一步增強系統(tǒng)的穩(wěn)定性、可擴展性及開發(fā)便捷性。
(2) 考慮到未來傳感器節(jié)點采集的海量數(shù)據(jù),應(yīng)考慮采用服務(wù)器集群的方式對數(shù)據(jù)進行存儲與處理。
(3) 考慮到系統(tǒng)的商用穩(wěn)定性及長期維護的便捷性,應(yīng)采用備份服務(wù)器或服務(wù)器集群的方式實現(xiàn)服務(wù)器功能失效后的快速切換。