姚麗麗



摘 要:伴隨著云計算技術、移動端技術的快速發展,物聯網平臺在云服務器上的部署已經成為一種趨勢。MQTT作為一種基于訂閱/發布模型的輕量級即時通信協議,在物聯網云平臺中得到了廣泛應用。然而傳統的MQTT設備、網絡等發生故障時,會導致故障時段數據缺失,使得業務數據不完整。為此,文中研究了一種基于MQTT協議的斷點續傳設計方案解決此類問題。
關鍵詞:MQTT;通信協議;斷點續傳;Json;網關;物聯網
中圖分類號:TP39文獻標識碼:A文章編號:2095-1302(2020)10-00-03
0 引 言
伴隨著云計算技術的發展,目前越來越多的云服務器(Elastic Compute Service,ECS)在市場出現,主要代表有阿里云、華為云、天翼云、金山云等。云服務器(ECS)具有網絡部署、靈活擴展、節約成本、方便維護、公網IP自帶等特點。為了解決由于物聯網節點分散而導致的網絡部署困難、移動端應用必須公網部署、終端需要等問題,越來越多的物聯網平臺也部署到了云服務器上。
消息隊列遙測傳輸協議(Message Queuing Telemetry Transport,MQTT)是一種基于訂閱/發布模型的輕量級即時通信協議,符合物聯網的通信要求,目前,其已在物聯網云平臺中得到了廣泛應用[1]。耿錫濤對MQTT協議在電力設備在線監測系統進行了應用研究[2],給出了基于MQTT協議實現溫度在線實時采集的設計方案。劉佳利用MQTT協議對城市水務物聯網監控系統進行了設計[3]。MQTT本身的設計理念為即時通信,目前的研究與應用也都集中在即時通信上。若傳輸層網關、代理服務器、平臺端服務器以及中間傳輸網絡任何一方在某個時段出現故障,采用常規的MQTT進行即時通信將導致故障時段數據缺失,使得業務數據不完整。為了解決此類問題,本文給出了一種基于MQTT的數據斷點續傳設計方案。
1 MQTT協議在物聯網中的應用介紹
MQTT協議是一種基于訂閱/發布數據傳輸模型的通信協議,MQTT服務代理作為服務端,物聯網平臺端和下方網關端都屬于客戶端[4]。在正常設備和網絡都無故障的情況下,MQTT可以實現即時通信,當發布端發送消息到達服務端后,訂閱端可立即接收已訂閱主題的消息。
基于MQTT協議的物聯網系統架構如圖1所示。網關和傳感器之間一般利用RS 485線連接,采用如Modbus,DL645等串口協議通信[5],也可以采用LoRa等無線連接;網關與平臺端可采用有線、GPRS、無線等方式進行網絡連接,采用MQTT協議通信。
MQTT通過主題對消息進行分類,為了避免消息干擾,物聯網系統針對每一網關設置兩個主題,其中一個主題作為網關端,用于發送數據,平臺端接收數據;另一個作為平臺端,用于發送數據,網關端接收數據。若一個物聯網系統中有n個網關,則主題數目需要設置2n個。對于每一個網關來說,需要訂閱一個主題,發布一個主題;而平臺端需要訂閱n個網關端發布的主題和發布n個針對不同網關的主題。
MQTT提供了三種服務質量(Quality of Service,QoS)機制[6]。其中,QoS0為只發送一次;QoS1為至少發送一次;QoS2為剛好發送一次。這三種服務質量的控制都是針對發布端和中間代理服務之間的通信質量,對于代理服務和訂閱者之間的通信則不做考慮。
2 即時MQTT報文規約設計
2.1 報文格式
Json是一種簡單的數據交換格式,它具有層次結構簡單、良好的自我描述、生成解析方便、讀寫速度快等特點。故本文采用Json格式確定物聯網平臺的報文規約。
報文規約中的具體標識定義:CMD:報文類型;PN:網關編碼;State:狀態;Direction:傳輸方向;Value:終端采集設備數據;DataType:數據類型。
2.2 報文類型
借助電力系統的數據分類,物聯網傳輸的數據種類分為遙測、遙信、遙脈和遙設四大類。
遙測:指傳輸的變量之值,如電壓、電流、瞬時流量等,一般來說,該類數據時刻都在發生變化,且具有限值的告警存在。在數據上送過程中,該類數據除了進行全上送外,可以給定幅度進行變化上送。
遙信:傳輸的狀態信息用0和1表示,如合閘狀態、機器運行狀態等。一般來說,該類數據只要狀態發生變化,則需要立即上送。
遙脈:指傳輸的累計量,如電度、累計流量等,該類數據與遙測數據的最主要區別是該類數據是累計上升的數值,無限值。
遙設:平臺端下方給終端設備的設置命令可以是0和1的狀態控制,也可以是數值型設置,如空調溫度設置等。
根據以上數據種類的應用傳輸功能,CMD報文類型可根據傳輸的數據類型等的不同給定相應設置:00,遙設;01,全遙測;02,變化遙測;03,全遙信;04,變化遙信;05,全遙脈。
2.3 規約傳輸內容
不考慮斷點續傳,在即時通信的情況下,物聯網系統的平臺端和網關端分別傳輸的內容見表1所列,主要包括即時發送的消息和定時發送的消息。全遙測、全遙信和全遙脈數據設置為網關端定時上送,即每固定周期間隔之后上送一次。對于變化遙測,為了避免上送頻繁,可設置變化幅度,如變化幅度大于1%,則上送;對于遙信而言,只要發生變位,都需要立即上送;遙設消息由平臺端在業務應用的觸發下即時發送,網關端接收到消息后立即下發給控制裝置,控制裝置執行后,網關可將執行結果以遙信突變的方式或者遙測突變的方式上送到平臺端。
3 斷點續傳方案設計
MQTT的數據傳輸涉及多個環節,如果傳輸層網關、代理服務器、平臺端服務器以及中間傳輸網絡任何一方在某個時段出現故障,采用常規的MQTT進行即時通信將導致故障時段數據缺失。為了保證業務應用的完整性,當故障修復后,故障期間的數據能夠繼續上送,本文設計了一種基于MQTT的斷點續傳設計方案。
斷點續傳方案設計的思想是基于發送數據端在確定接收端可以接收到數據的情況下發送數據;否則,不發送數據,將數據暫存。
由于物聯網系統平臺端僅發送一些控制消息,因此在發送消息前可以利用MQTT的遺囑方式獲得網關的在線狀態而反饋。數據發送主要集中在網關端,故斷點續傳針對網關端設計,平臺端獲取斷點續傳數據后進行解析處理即可。
本文給出的斷點續傳設計方案如下:
(1)規定平臺端每一分鐘發送一次心跳(此處心跳也可用MQTT遺囑實現),當網關端接收到平臺端發送來的心跳時,表示當前平臺端、代理服務端、網關端及網絡運行良好,設置平臺在線狀態為1,設置上次通信時間等于當前時間;
(2)對于平臺端的離線機制,每隔一分鐘進行一次狀態檢測,若當前時間與上次通信時間之差大于規定有效通斷時間,則設置平臺在線狀態為0;
(3)在得知平臺端在線離線狀態的情況下,網關端的斷點續傳流程設計如圖2所示。
4 應用實例
本文提出的斷點續傳方案已成功應用到本公司的DMFS-9000蜜云綜合能源管控平臺中,目前已部署到多個現場。經測試,系統運行良好,滿足斷線故障后的數據續傳業務需求。
DMFS-9000蜜云綜合能源管控平臺網關端采用DMF-330X系列數據集中器作為網關進行轉發,MQTT代理服務器安裝在集中業務云平臺。
圖3所示為網關端MQTT的服務配置程序,采集規約支持標準的Modbus,DL645等,可進行即時開發插件擴展,對規約采用本文介紹的含有數據斷點續傳的MQTT協議。
圖4所示為帶有斷點續傳功能的MQTT協議的平臺端的接收解析應用程序。圖5所示為業務應用平臺的展示界面。
為了進一步說明本文提出的帶有斷點續傳功能的MQTT協議對于業務應用的必要性,同時搭建之前無斷點續傳功能的平臺和帶有斷點續傳功能的平臺,網關和代理服務只有一個,代理服務與兩個平臺不在同一臺服務器上,兩個平臺同時訂閱網關的發布數據主題。在6:20時分別將兩個平臺和代理服務之間的網絡斷開,8:50時恢復,其結果如圖6和圖7所示。無斷點續傳功能的平臺在6:20和8:50之間數據缺失,而含有斷點續傳功能的平臺在6:20和8:50之間的數據是完整的。
5 結 語
MQTT協議由于其開源、可靠、輕巧、簡單、低功耗的特點,已然成為物聯網協議發展的趨勢。由于MQTT本身設計思想是給定一種即時通信,在很多物聯網業務應用現場,如果出現網絡或平臺端故障問題,業務應用數據將缺失。為了解決發布端無故障,而代理服務器、平臺端或者中間任意傳輸網絡故障的情況下,當故障修復后,故障期間的數據能夠繼續上送平臺,保證業務數據的完整性,本文提出的基于MQTT協議的數據斷點續傳設計方案已經成功應用到實際項目中,得到了客戶的廣泛認可。
參考文獻
[1]徐侃,丁強.一種基于MQTT協議的物聯網通信網關[J].儀表技術,2019,48(1):1-4.
[2]耿錫濤.基于MQTT協議的電力設備溫度在線監測系統應用研究[J].工業控制計算機,2019,32(10):73-74.
[3]劉佳.基于MQTT協議的城市水務物聯網監控系統設計[J].物聯網技術,2019,9(6):14-19.
[4]蔣樹慶,房瀅.一種基于MQTT協議的數據采集控制系統[J].信息通信,2019,32(8):80-82.
[5]吳俊輝,吳桂初,陳沖,等.基于MQTT協議的物聯網網關設計[J].溫州大學學報(自然科學版),2019,40(4):54-61.
[6]賈凡,熊剛,朱鳳華,等.基于MQTT的工業物聯網通信系統研究與實現[J].智能科學與技術學報,2019,1(3):249-259.
[7]劉復源.基于MQTT協議的消息推送平臺的設計與實現[D].廣州:暨南大學,2015.
[8]陳濤,李娟.基于MQTT協議的推送技術研究[J].軟件導刊,2016,15(3):18-21.
[9]龔永罡,付俊英,汪昕宇,等.MQTT協議在物聯網中的應用研究[J].電腦與電信,2017,23(11):89-91.
[10]陶強,屈波,熊前興.基于WinSock構建對等模式下斷點續傳系統的探討[J].交通與計算機,2005(1):79-83.