張 敏, 周治平
(江南大學 物聯(lián)網(wǎng)工程學院,江蘇 無錫 214122)
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,遠程監(jiān)測技術(shù)出現(xiàn)在人們的生活和工作中。不可否認,物聯(lián)網(wǎng)軟件、安全、云計算以及用戶接口已經(jīng)趨于成熟,無線短距離通信技術(shù),如WiFi、ZigBee、藍牙等均能實現(xiàn)遠程監(jiān)測需求[1],且在實際中已存在著較多應用案例。文獻[2]討論了基于通用分組無線業(yè)務(general packet radio service,GPRS)和ZigBee技術(shù)的嵌入式智能家居控制系統(tǒng),通過ZigBee技術(shù)實現(xiàn)主控制器和終端節(jié)點之間的通信。而移動客戶端實現(xiàn)家庭設(shè)施的信息采集和遠程監(jiān)控;文獻[3]提出以太網(wǎng)與CC-Link相結(jié)合的遠程控制系統(tǒng),實現(xiàn)對溫室大棚的遠程監(jiān)控;文獻[4]提出心電圖(electro-cardio-graph,ECG)遠程監(jiān)控系統(tǒng),專門針對需要在居住環(huán)境中進行長期健康監(jiān)測的非技術(shù)用戶。以上這些應用采用了不同的無線通訊方式,均實現(xiàn)了遠程監(jiān)控的需求,但環(huán)境監(jiān)測、煙霧報警、電力監(jiān)測這些應用所需數(shù)據(jù)量較小,對實時性要求并不高,無需進行頻繁通信,而這些監(jiān)測系統(tǒng)卻消耗大量功耗在監(jiān)聽網(wǎng)絡(luò)隨時可能發(fā)起的請求上,在需要大面積進行傳感器部署時,存在很大的資源浪費。文獻[5~7]均采用LoRa技術(shù)既滿足了大量連接需求,且節(jié)點無需時刻處于監(jiān)聽狀態(tài),在保證遠距離通信傳輸?shù)耐瑫r,可以最大限度地降低功耗,節(jié)約成本[8]。但目前已實現(xiàn)的基于LoRa的監(jiān)測系統(tǒng)存在著可擴展性弱、運行效率低的問題,大多系統(tǒng)只是針對于某一參量的信息采集,且部署的服務器端大多數(shù)基于虛擬機,運行效率較低。
本文設(shè)計了一種基于LoRa的遠程監(jiān)測系統(tǒng),采用Docker容器技術(shù)[9]部署服務器端,大大提高運行效率,多種應用可并行運行,管理人員可通過監(jiān)控管理平臺進行應用和節(jié)點管理。為網(wǎng)絡(luò)避免擁塞,在LoRaWAN的基礎(chǔ)上采用了ADC-MAC協(xié)議[10]來提高LoRa網(wǎng)絡(luò)性能。此外,用戶可通過服務器提供的串口通訊接口,調(diào)用數(shù)據(jù)庫數(shù)據(jù),設(shè)計應用Web界面,實現(xiàn)數(shù)據(jù)可視化。
基于LoRa的遠程監(jiān)測系統(tǒng)架構(gòu)如圖1所示。針對多種應用的數(shù)據(jù)采集子系統(tǒng)中,含大量內(nèi)嵌SX1278射頻模塊的傳感器,它們采集到的信息經(jīng)由一個或多個網(wǎng)關(guān)發(fā)送至對應應用的子數(shù)據(jù)庫中,同時同步到總數(shù)據(jù)庫,后臺調(diào)用管理數(shù)據(jù)庫,并在監(jiān)測管理平臺顯示。用戶可以客戶或管理員身份登錄監(jiān)測管理平臺進行數(shù)據(jù)查詢,節(jié)點管理等等。
圖1 系統(tǒng)架構(gòu)
數(shù)據(jù)采集子系統(tǒng)主要包括檢測模塊、數(shù)據(jù)處理模塊以及無線傳輸模塊,負責采集參數(shù),進行簡單處理,經(jīng)由無線傳輸模塊發(fā)送數(shù)據(jù)至網(wǎng)關(guān)。
1)檢測模塊:根據(jù)應用的不同,接入的傳感器也不盡相同,用戶根據(jù)所需接入相應的傳感器。
2)數(shù)據(jù)處理模塊:主要由STM32系列微處理器組成。STM32是基于ARM Cortex-M3處理器內(nèi)核的32位閃存微控制器[11],專為高性能、低成本的嵌入式應用設(shè)計。
3)無線傳輸模塊:SX1278射頻芯片是其核心,用于超長距離擴頻通信,靈敏度可達-148 dBm,最大鏈路預算可達168 dB,抗干擾能力強,能最大限度地降低電流消耗。
數(shù)據(jù)傳輸子系統(tǒng)由多個網(wǎng)關(guān)組成,功能框圖如圖2所示,其CPU基于ARM11處理器,內(nèi)存為512KB RAM+4GB EMMC,采用硬件看門狗定時器電路,監(jiān)控主程序運行,避免進入死循環(huán)。
圖2 網(wǎng)關(guān)功能框圖
本文設(shè)計的監(jiān)測管理平臺是一個私有云平臺,網(wǎng)絡(luò)專用,內(nèi)網(wǎng)傳輸,安全性較高。平臺采用Docker技術(shù),將多個Web服務組件部署在多個Docker容器上,然后將整個Web服務系統(tǒng)組件連同其運行環(huán)境固化成Paas服務,向云端遷移和擴展。后臺數(shù)據(jù)的存儲采用mysql為主存儲,redis為輔助存儲形式減少對數(shù)據(jù)庫的訪問,提高性能。采用Nginx結(jié)合Lua腳本連接操作MySQL的方法,為避免短時間保持客戶端與服務端的連接狀態(tài),在頻繁通信的情況下,容易發(fā)生Socket出錯的情況,MySQL選用長連接方式,以確保數(shù)據(jù)傳輸?shù)姆€(wěn)定。整個系統(tǒng)功能設(shè)計如圖3所示。
圖3 系統(tǒng)功能框圖
數(shù)據(jù)采集子系統(tǒng)是所有數(shù)據(jù)的來源,通過安放在監(jiān)控區(qū)域多個傳感器采集數(shù)據(jù)。該子系統(tǒng)的任務是將采集到的數(shù)據(jù)經(jīng)由GPRS模塊傳輸至數(shù)據(jù)庫。數(shù)據(jù)中心包含各應用的子數(shù)據(jù)庫及總數(shù)據(jù)庫,兩者之間數(shù)據(jù)同步。根據(jù)用戶需求不同,分為客戶和管理員兩種身份,以保證平臺的安全性和規(guī)范性??蛻糁饕秦撠熥约核爲玫墓芾砉ぷ?,具體包括應用創(chuàng)建、節(jié)點管理。管理員是整個平臺的管理者,負責用戶信息管理、應用管理、節(jié)點監(jiān)控及數(shù)據(jù)維護。平臺功能可分為5個模塊用戶認證與權(quán)限管理、數(shù)據(jù)接入和存儲、數(shù)據(jù)查詢管理、監(jiān)測管理、異常情況報警。
2.2.1 ADC-MAC規(guī)范概述
LoRaWAN規(guī)范是星型拓撲結(jié)構(gòu),終端連接網(wǎng)關(guān)是直接通過LoRa無線鏈路的。根據(jù)實際情況,LoRaWAN將設(shè)備分成A、B、C三種類型,A類功耗最低。在A類中,終端以ALOHA類型按照自身要求發(fā)送數(shù)據(jù)包,在發(fā)送上行鏈路后,終端打開兩個下行接收窗口,剩余的時間便進入睡眠狀態(tài)。在接收到任何窗口的下游消息,終端才會安排下一個上行鏈路。終端下一次訪問信道的時間是由終端本身決定的而不是其他因素,這種機制并不考慮節(jié)點負載、不同監(jiān)測點的位置以及無線傳感網(wǎng)的大小,很容易導致網(wǎng)絡(luò)擁塞。為解決這個問題,采用了ADC-MAC協(xié)議來平衡能源功耗和網(wǎng)絡(luò)性能。
在該協(xié)議中,每個終端異步和動態(tài)調(diào)整占空比都是基于3個指標:殘余能量指標、節(jié)點負載指標和網(wǎng)絡(luò)擁塞指標。殘余能量指標
(1)
式中Eremaining為傳感器節(jié)點殘余能量,Einitial為節(jié)點初始能量。節(jié)點負載指標如下
(2)
式中Nbuffer為由傳感器節(jié)點緩沖的當前數(shù)據(jù)包數(shù)量,Nmax為傳感器節(jié)點生成的總數(shù)據(jù)包量。
LoRa網(wǎng)關(guān)和終端支持多信道通信,將信道表示為i∈(1,…,N)。在一個周期T內(nèi),終端存在一個上行計數(shù)器Chanl_up_Cnt[i],當終端在任意信道上發(fā)送一個數(shù)據(jù)包,這個信道相應的上行計數(shù)器加1。同時重發(fā)計數(shù)器Chal_Re_Cnt[i]計算重發(fā)次數(shù),當終端沒有在預定時間內(nèi)接收到ACK字符,相應的信道計數(shù)器加1。終端會隨機選擇另外的信道重新傳輸。一個周期后,終端計算出信道的繁忙率
(3)
從而計算出網(wǎng)絡(luò)繁忙度如下
(4)
通過網(wǎng)絡(luò)擁塞指標更精確反映網(wǎng)絡(luò)交通負載
(5)
2.2.2 ADC-MAC協(xié)議流程
步驟1:在每個終端入網(wǎng)后,會記錄初始的包緩沖區(qū),初始化任務周期φ,并將定時器1設(shè)為周期T。
步驟2:如果終端工作在第一個周期T中,使用初始化的占空比通信,否則使用計算后占空比。當終端傳輸上行鏈路時,記錄傳輸時間Tt并將定時器2設(shè)為T2=Tt(1/φ-1)。這樣除了在固定時間內(nèi)打開窗口1,2接收下游消息;
步驟3:當定時器2結(jié)束后,如果有數(shù)據(jù)等待發(fā)送,終端會返回至步驟2,否則繼續(xù)處于休眠狀態(tài),等待下一個數(shù)據(jù)傳送。
步驟4:終端等待定時器1結(jié)束,計算3個指標,殘余能量α指標、節(jié)點負載β、網(wǎng)絡(luò)擁塞率γ,并計算占空比φ=(α+β)/2γ+η用于下個周期。
步驟5:終端將上行計數(shù)器Chanl_up_Cnt[i]、信道繁忙率σ[i]和重發(fā)計數(shù)器歸零Chal_Re_Cnt[i],但需要保持網(wǎng)絡(luò)擁塞率γ用于在下個周期T中衡量網(wǎng)絡(luò)運行負載。同時,終端將設(shè)置好定時器1,跳轉(zhuǎn)到步驟2中。
2.2.3 數(shù)據(jù)獲取與調(diào)用
LoRa網(wǎng)絡(luò)所有節(jié)點均是雙工通信,但主要以傳感器上行傳輸數(shù)據(jù)為主。圖4為系統(tǒng)的軟件流程。系統(tǒng)采集數(shù)據(jù)是通過WebSocket消息傳送獲取的,寫入數(shù)據(jù)庫中便于數(shù)據(jù)調(diào)用。在建立WebSocket連接時,必須在地址中加入創(chuàng)建的應用標記appEUI和用來客戶調(diào)用API安全驗證userSec加密的token,服務器驗證通過才能建立WebSocket連接,否則連接失敗。在成功連接MySQL后,結(jié)合Lua中的Template組件,直接寫入動態(tài)數(shù)據(jù),渲染成頁面,響應前端。
圖4 系統(tǒng)軟件流程
考慮到從傳感器采集到的每一幀數(shù)據(jù)編碼不一致,需重新編碼打包發(fā)送至網(wǎng)關(guān),編碼規(guī)則如下:每一幀由16位字節(jié)表示,其中包含2字節(jié)幀頭、1字節(jié)設(shè)備號、12字節(jié)所要傳輸?shù)臄?shù)據(jù)、1字節(jié)校驗位,嚴格遵循著LoRaWAN規(guī)范物理層(physisal layer,PHY)上行射頻幀的模式。表1為溫濕度應用中消息包的格式。
表1 消息包格式
系統(tǒng)Server端包括網(wǎng)絡(luò)服務器,應用服務器和客戶端,網(wǎng)絡(luò)服務器直接與網(wǎng)關(guān)通信,其工作為:1)驗證數(shù)據(jù)的合法性。2)從網(wǎng)關(guān)的信息中提取數(shù)據(jù),整理成JSON數(shù)據(jù)包。3)將校驗合法的數(shù)據(jù)打包成新的JSON數(shù)據(jù)包上傳至應用服務器。應用服務器負責將上傳的JSON包的Payload部分進行解密。之后,客戶端將應用服務器的數(shù)據(jù)處理成用戶自定義的數(shù)據(jù)格式。
針對系統(tǒng)可擴展性強、多應用特征,設(shè)計了溫濕度監(jiān)測應用。Web界面設(shè)計是基于OpenResty平臺如圖5所示,通過Socket通信實時調(diào)用數(shù)據(jù)庫中的節(jié)點數(shù)據(jù),以圖表方式呈現(xiàn)。左邊下拉菜單選擇設(shè)備號,查看實時溫度、濕度、壓強,其中溫度參數(shù)實時繪制成了折線圖,動態(tài)添加數(shù)據(jù)時,曲線左移,可直觀看出24 h內(nèi)的溫度變化趨勢可直接查看某一時間點溫度值。此外,監(jiān)測管理平臺可以管理應用節(jié)點,查看節(jié)點狀態(tài)及歷史數(shù)據(jù)。實驗證明,本文設(shè)計的監(jiān)測系統(tǒng)運行穩(wěn)定,給開發(fā)應用提供了很大的便利。
圖5 環(huán)境監(jiān)測界面
本文設(shè)計了遠程監(jiān)控系統(tǒng),采用LoRa通信技術(shù)實現(xiàn)數(shù)據(jù)通信。在該系統(tǒng)中,構(gòu)建了一個基于Docker容器技術(shù)的監(jiān)測管理平臺,可應用于多種監(jiān)測。通過溫濕度應用試驗證明,該監(jiān)測系統(tǒng)運行穩(wěn)定、操作方便、適用范圍廣。