本發(fā)明涉及網(wǎng)絡(luò)協(xié)議封裝技術(shù)領(lǐng)域,具體地說是一種物聯(lián)網(wǎng)終端平臺數(shù)據(jù)封裝的方法。
背景技術(shù):
物聯(lián)網(wǎng)應(yīng)用涉及國民經(jīng)濟和人類社會生活的方方面面,隨著技術(shù)的不斷成熟,應(yīng)用日漸廣泛。
物聯(lián)網(wǎng)終端是物聯(lián)網(wǎng)的關(guān)鍵設(shè)備,它是物聯(lián)網(wǎng)中連接傳感網(wǎng)絡(luò)層和傳輸網(wǎng)絡(luò)層,屬于傳感網(wǎng)絡(luò)層和傳輸網(wǎng)絡(luò)層的中間設(shè)備,實現(xiàn)采集數(shù)據(jù)及向網(wǎng)絡(luò)層發(fā)送數(shù)據(jù)的設(shè)備。它擔負著數(shù)據(jù)采集、初步處理、加密、傳輸?shù)榷喾N功能,它將數(shù)據(jù)通過各種網(wǎng)絡(luò)接口方式傳輸?shù)交ヂ?lián)網(wǎng)中。如果沒有他的存在,傳感數(shù)據(jù)將無法送到指定位置,“物”的聯(lián)網(wǎng)將不復(fù)存在。
物聯(lián)網(wǎng)終端基本由外圍傳感接口,中央處理模塊和外部通訊接口三個部分組成,通過外圍傳感接口與傳感設(shè)備連接,如RFID讀卡器、二維碼、紅外感應(yīng)器,環(huán)境傳感器等,將這些傳感設(shè)備的數(shù)據(jù)進行讀取并通過中央處理模塊處理后,按照網(wǎng)絡(luò)協(xié)議,通過外部通訊接口,如:GPRS模塊、以太網(wǎng)接口、WIFI等方式發(fā)送到以太網(wǎng)的指定中心處理平臺。
物聯(lián)網(wǎng)在通信中比較常見的通訊協(xié)議包括:HTTP、websocket、XMPP、COAP、MQTT,但此類協(xié)議只是定義了數(shù)據(jù)傳輸?shù)哪J剑紤]到物聯(lián)網(wǎng)的終端將會鏈接各種傳感器,采集數(shù)據(jù)種類很多,如溫、濕度,加速度,重力計,經(jīng)緯度等等信息,各種不同的數(shù)據(jù)格式/類型眾多,為了能夠簡化后臺系統(tǒng)處理以及業(yè)務(wù)數(shù)據(jù)的設(shè)計,很有必要設(shè)計一套完整的數(shù)據(jù)封裝格式,支持物聯(lián)網(wǎng)終端對于收集后的傳感器數(shù)據(jù)進行傳輸。
現(xiàn)今,制約物聯(lián)網(wǎng)技術(shù)大規(guī)模推廣的主要原因則是終端的不兼容問題,不同廠商的設(shè)備和軟件無法在同一個平臺上使用,設(shè)備間的協(xié)議沒有統(tǒng)一的標準。因此,在物聯(lián)網(wǎng)的普及和終端的大規(guī)模推廣前必須解決標準化問題,具體表現(xiàn)為以下幾個方面:
一、硬件接口標準化
物聯(lián)網(wǎng)的傳感設(shè)備由不同廠商提供,如果每家的接口規(guī)則或通訊規(guī)則都不同,便會導(dǎo)致終端接口設(shè)計的不同,而終端不可能為每個廠商都預(yù)留接口,所以需要傳感設(shè)備廠商和終端廠商一同制定標準的物聯(lián)網(wǎng)傳感器與終端間的接口規(guī)范和通訊規(guī)范,以滿足不同廠商設(shè)備間的硬件互通、互連需求。
二、數(shù)據(jù)協(xié)議標準化
數(shù)據(jù)協(xié)議指終端與平臺層的數(shù)據(jù)流交互協(xié)議,該數(shù)據(jù)流可以分為業(yè)務(wù)數(shù)據(jù)流和管理數(shù)據(jù)流。中國移動與愛立信合作制定的WMMP協(xié)議就是一個很好的管理協(xié)議。該WMMP協(xié)議是為實現(xiàn)行業(yè)終端與M2M平臺數(shù)據(jù)通信過程而設(shè)計,由于GPRS網(wǎng)絡(luò)帶寬較窄,延遲較大,不適于采用TCP協(xié)議進行通信,所以該協(xié)議是建立在UDP協(xié)議之上,而采用UDP協(xié)議無連接方式傳輸,其優(yōu)點是效率高,流量小,節(jié)省網(wǎng)絡(luò)帶寬資源,缺點是沒有確認機制,有可能引起丟包,一般還需要通過在UDP的上層應(yīng)用層協(xié)議實現(xiàn)類似TCP的包確認和重傳機制,以提高通信效率及可靠性,從而造成該WMMP協(xié)議數(shù)據(jù)傳輸控制和數(shù)據(jù)封裝高度耦合,不能有效利用現(xiàn)有的物聯(lián)網(wǎng)數(shù)據(jù)傳輸協(xié)議。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是克服現(xiàn)有技術(shù)的不足,提供一種能方便為物聯(lián)網(wǎng)終端與業(yè)務(wù)平臺的數(shù)據(jù)傳輸提供統(tǒng)一數(shù)據(jù)封裝協(xié)議的方法。
為實現(xiàn)上述目的,一種物聯(lián)網(wǎng)終端平臺數(shù)據(jù)封裝的方法,包括物聯(lián)網(wǎng)終端、業(yè)務(wù)平臺,若干傳感器、數(shù)據(jù)接收模塊,其特征在于,
在物聯(lián)網(wǎng)終端與業(yè)務(wù)平臺的應(yīng)用層定義數(shù)據(jù)封裝協(xié)議,為物聯(lián)網(wǎng)終端與業(yè)務(wù)平臺之間的通信提供通用的數(shù)據(jù)封裝接口;當數(shù)據(jù)接收模塊接收相應(yīng)傳感器采集的數(shù)據(jù)后,從物聯(lián)網(wǎng)終端向業(yè)務(wù)平臺發(fā)送,按照數(shù)據(jù)封裝協(xié)議的格式對采集的數(shù)據(jù)進行編碼封裝處理形成數(shù)據(jù)包,然后將數(shù)據(jù)包傳輸給業(yè)務(wù)平臺,業(yè)務(wù)平臺接收相應(yīng)的數(shù)據(jù)包后再對數(shù)據(jù)包進行解碼處理;當業(yè)務(wù)平臺向物聯(lián)網(wǎng)終端發(fā)送數(shù)據(jù)時,也按照數(shù)據(jù)封裝協(xié)議的格式對數(shù)據(jù)進行編碼封裝處理形成數(shù)據(jù)包,然后將數(shù)據(jù)包傳輸給物聯(lián)網(wǎng)終端,物聯(lián)網(wǎng)終端接收相應(yīng)的數(shù)據(jù)包后再對數(shù)據(jù)包進行解碼處理;
所述的編碼封裝處理采用如下處理步驟:(1)、開始;(2)設(shè)置STX字段的值為0x55;(3)設(shè)置CTRL字段的選項,設(shè)置協(xié)議版本ver,根據(jù)是否提供IMEI字段、TIMESTAMP字段、TTL字段、CHK字段,分別設(shè)置imei、ts、ttl和chk的值;(4)設(shè)置LEN字段:設(shè)置除STX字段和CTRL字段外的數(shù)據(jù)包的長度;(5)設(shè)置非CTRL字段中選項控制的字段:設(shè)置PACKET_TYPE字段、ACK字段、TRANS-MODE字段、PRIORITY字段和PACKET-ID字段的信息;(6)判斷CTRL選項中imei、ts、ttl是否有任意一個被設(shè)置;如果已被設(shè)置,則根據(jù)CTRL字段中imei、ts、ttl的設(shè)置情況,設(shè)置IMEI字段、TIMESTAMP字段和TTL字段后,再進入“設(shè)置SERVICE字段數(shù)據(jù)”步驟;如果未設(shè)置,則進入“設(shè)置SERVICE字段數(shù)據(jù)”步驟;所述的“設(shè)置SERVICE字段數(shù)據(jù)”,包括設(shè)置ID號、CMD號、與SERVICE字段相關(guān)的DATA字段的長度值,如果定義了多個SERVICE字段+DATA字段組合,則除最后一個SERVICE字段+DATA字段組合中MULTIPLE字段置0外,其余中間的SERVICE字段+DATA字段組合中MULTIPLE字段置1;(7)再判斷CTRL字段的選項中chk是否設(shè)置;如果未設(shè)置,則結(jié)束;如果已設(shè)置,則計算校驗和,將值存入CHK字段中形成數(shù)據(jù)包,然后結(jié)束;
所述的數(shù)據(jù)封裝協(xié)議的格式如下:
表1數(shù)據(jù)封裝協(xié)議的格式
其中,Bn表示該字段占n個BYTE;bn表示該字段占n個bit;
如果傳輸數(shù)據(jù)的種類多和傳輸數(shù)據(jù)量大,數(shù)據(jù)封裝協(xié)議的格式中分設(shè)若干個不同的SERVICE字段與DATA字段的組合以增加容量。
所述的解碼處理采用如下處理步驟:(1)、開始:(2)、輸入字節(jié)流;(3)、判斷STX字段的值是否為0x55,如果不是則結(jié)束;如果是,則進入“判斷chk值是否為1”的步驟;(4)、如果chk值等于1,則進入“校驗CHK”步驟,所述的校驗CHK為計算數(shù)據(jù)包校驗和,并與CHK字段內(nèi)的值進行相等性比較;如果chk選項的值不等于1,則進入“檢測版本號ver”步驟;(5)如果“校驗CHK”步驟中,數(shù)據(jù)包檢驗和與CHK的值相等,則進入“檢測版本號ver”步驟;如果數(shù)據(jù)包檢驗和與CHK字段內(nèi)的值不相等,則結(jié)束;(6)如果檢測協(xié)議版本號ver不是指定的版本,則結(jié)束;如果檢測協(xié)議版本號ver是指定的版本,則進入“根據(jù)協(xié)議格式提取各個字段的值”步驟,再結(jié)束;所述的“根據(jù)協(xié)議格式提取各個字段的值”為根據(jù)CTRL字段的選項中imei、ts、ttl的值是否為1,判斷IMEI字段、TIMESTAMP字段、TTL字段是否存在,然后根據(jù)數(shù)據(jù)封裝協(xié)議的格式進行各個字段的解析,解析整個數(shù)據(jù)包。
所述的STX字段表示:標識報文數(shù)據(jù)開始;
所述的CTRL字段中,除ver表示協(xié)議版本以外,imei選項、ts選項、ttl選項、chk選項作為相應(yīng)字段的控制開關(guān),1表示存在,0表示不存在;spare表示保留,值必須為0;
LEN字段中,LENlsb選項表示長度的低位;Ext選項值為1時,LENmsb選項表示長度的高位,Ext選項值不為1時,則表示不存在LENmsb選項;
PACKET_TYPE字段表示:報文類型,值為0時表示Request報文,值為1時表示Ack報文;
ACK字段表示:值為1時表示當報文類型為請求時,需要Ack報文確認;值為0時表示當報文類型為Request時,不需要Ack報文確認;對于Ack報文,ACK字段的值必須為0;
TRANS-MODE字段表示:通信層使用的協(xié)議,值為0時表示采用MQTT協(xié)議,值為1時表示采用SMS協(xié)議,值為2時表示采用HTTP協(xié)議、值為3時表示采用websocket協(xié)議、值為4時表示采用XMPP協(xié)議、值為5時表示采用COAP協(xié)議;
PRIORITY字段表示:報文的優(yōu)先級;
PACKET_ID字段表示:報文ID,該報文ID用于ACK確認和/或丟棄重復(fù)的報文;
IMEI字段表示:物聯(lián)網(wǎng)終端的設(shè)備編號,由CTRL字段中的imei選項控制是否存在;
TIMESTAMP字段表示:報文產(chǎn)生時的時間戳,由CTRL中的ts選項控制是否存在;
TTL字段表示:報文超時時間,由CTRL字段中的ttl選項控制是否存在;
SERVICE字段:ID表示服務(wù)id號,CMD表示服務(wù)的具體操作,MULTIPLE表示此報文中還存在其他自定義的SERVICE字段和DATA字段的組合,LEN表示與此SERVICE字段相關(guān)的DATA字段的長度;
其中SERVICE字段中的id號可以根據(jù)具體的業(yè)務(wù)形態(tài)做出自定義,從而和物聯(lián)網(wǎng)終端傳輸?shù)臄?shù)據(jù)進行匹配;
DATA字段表示:具體要傳輸?shù)臄?shù)據(jù);
CHK字段表示:校驗和,用于檢測數(shù)據(jù)完整性。
本發(fā)明與現(xiàn)有技術(shù)相比具有如下優(yōu)勢:
一、為物聯(lián)網(wǎng)終端設(shè)備和業(yè)務(wù)平臺之間的通信提供了通用的數(shù)據(jù)封裝接口,可以用來在不同的行業(yè)中,針對不同的傳感器設(shè)備采集的數(shù)據(jù)進行統(tǒng)一的封裝,從而可以減少業(yè)務(wù)平臺的數(shù)據(jù)處理要求;支持多種網(wǎng)絡(luò)傳輸協(xié)議:MQTT、SMS、HTTP、websocket、XMPP、COAP,具有廣泛的適用性;業(yè)務(wù)上通過定義SERVICE字段中ID和CMD的含義,可以靈活方便地自定義業(yè)務(wù)平臺的多種功能;
二、其另一重要的作用是,實現(xiàn)了上層業(yè)務(wù)應(yīng)用層和底層數(shù)據(jù)傳輸層的分離,結(jié)構(gòu)清晰,具有很好的可擴展性,并且可以有效降低物聯(lián)網(wǎng)終端和業(yè)務(wù)平臺的開發(fā)難度。
附圖說明
圖1為本發(fā)明中編碼封裝處理的流程框圖。
圖2為本發(fā)明中解碼處理的流程框圖。
圖3為本發(fā)明中字段名的含義表。
具體實施方式
現(xiàn)結(jié)合附圖對本發(fā)明作進一步地說明。
實施例1
參見圖1~圖2,一種物聯(lián)網(wǎng)終端平臺數(shù)據(jù)封裝的方法,包括物聯(lián)網(wǎng)終端、業(yè)務(wù)平臺,若干傳感器、數(shù)據(jù)接收模塊,其特征在于,
在物聯(lián)網(wǎng)終端與業(yè)務(wù)平臺的應(yīng)用層定義數(shù)據(jù)封裝協(xié)議,為物聯(lián)網(wǎng)終端與業(yè)務(wù)平臺之間的通信提供通用的數(shù)據(jù)封裝接口;當數(shù)據(jù)接收模塊接收相應(yīng)傳感器采集的數(shù)據(jù)后,從物聯(lián)網(wǎng)終端向業(yè)務(wù)平臺發(fā)送,按照數(shù)據(jù)封裝協(xié)議的格式對采集的數(shù)據(jù)進行編碼封裝處理形成數(shù)據(jù)包,然后將數(shù)據(jù)包傳輸給業(yè)務(wù)平臺,業(yè)務(wù)平臺接收相應(yīng)的數(shù)據(jù)包后再對數(shù)據(jù)包進行解碼處理;當業(yè)務(wù)平臺向物聯(lián)網(wǎng)終端發(fā)送數(shù)據(jù)時,也按照數(shù)據(jù)封裝協(xié)議的格式對數(shù)據(jù)進行編碼封裝處理形成數(shù)據(jù)包,然后將數(shù)據(jù)包傳輸給物聯(lián)網(wǎng)終端,物聯(lián)網(wǎng)終端接收相應(yīng)的數(shù)據(jù)包后再對數(shù)據(jù)包進行解碼處理;
所述的編碼封裝處理采用如下處理步驟:(1)、開始;(2)設(shè)置STX字段的值為0x55;(3)設(shè)置CTRL字段的選項,設(shè)置協(xié)議版本ver,根據(jù)是否提供IMEI字段、TIMESTAMP字段、TTL字段、CHK字段,分別設(shè)置imei、ts、ttl和chk的值;(4)設(shè)置LEN字段:設(shè)置除STX字段和CTRL字段外的數(shù)據(jù)包的長度;(5)設(shè)置非CTRL字段中選項控制的字段:根據(jù)報文類型、優(yōu)先級、傳輸協(xié)議等信息設(shè)置PACKET_TYPE字段、ACK字段、TRANS-MODE字段、PRIORITY字段和PACKET-ID字段的信息;(6)判斷CTRL選項中imei、ts、ttl是否有任意一個被設(shè)置;如果已被設(shè)置,則根據(jù)CTRL字段中imei、ts、ttl的設(shè)置情況,設(shè)置IMEI字段、TIMESTAMP字段和TTL字段后,再進入“設(shè)置SERVICE字段數(shù)據(jù)”步驟;如果未設(shè)置,則進入“設(shè)置SERVICE字段數(shù)據(jù)”步驟;所述的“設(shè)置SERVICE字段數(shù)據(jù)”,包括設(shè)置ID號、CMD號、與SERVICE字段相關(guān)的DATA字段的長度值,如果定義了多個SERVICE字段+DATA字段組合,則除最后一個SERVICE字段+DATA字段組合中MULTIPLE字段置0外,其余中間的SERVICE字段+DATA字段組合中MULTIPLE字段置1;(7)再判斷CTRL字段的選項中chk是否設(shè)置;如果未設(shè)置,則結(jié)束;如果已設(shè)置,則計算校驗和,將值存入CHK字段中形成數(shù)據(jù)包,然后結(jié)束;
所述的數(shù)據(jù)封裝協(xié)議的格式如下:
表1數(shù)據(jù)封裝協(xié)議的格式
其中,Bn表示該字段占n個BYTE;bn表示該字段占n個bit;
有一類復(fù)雜的數(shù)據(jù)傳輸需求,比如車載系統(tǒng)相關(guān)變量的傳輸,突出特點是傳輸數(shù)據(jù)的種類多,傳輸數(shù)據(jù)量較大,可以在數(shù)據(jù)封裝格式中通過分設(shè)若干個不同的SERVICE字段+DATA字段的組合來增加容量,具體的數(shù)據(jù)封裝協(xié)議的格式內(nèi)容如下:
參見圖3,本發(fā)明中各字段的具體含義如下:
所述的STX字段表示:標識報文數(shù)據(jù)開始;
所述的CTRL字段中,除ver表示協(xié)議版本以外,imei選項、ts選項、ttl選項、chk選項作為相應(yīng)字段的控制開關(guān),1表示存在,0表示不存在;spare表示保留,值必須為0;
LEN字段中,LENlsb選項表示長度的低位;Ext選項值為1時,LENmsb選項表示長度的高位,Ext選項值不為1時,則表示不存在LENmsb選項;
PACKET_TYPE字段表示:報文類型,值為0時表示Request報文,值為1時表示Ack報文;這里Ack報文是對Request報文的確認,如果Request報文設(shè)置了ACK字段的值為1,表示需要收到Request報文的對方發(fā)送Ack報文確認已經(jīng)收到Request報文;
ACK字段表示:值為1時表示當報文類型為請求時,需要Ack報文確認;值為0時表示當報文類型為Request時,不需要Ack報文確認;對于Ack報文,ACK字段的值必須為0;
TRANS-MODE字段表示:通信層使用的協(xié)議,值為0時表示采用MQTT協(xié)議,值為1時表示采用SMS協(xié)議,值為2時表示采用HTTP協(xié)議、值為3時表示采用websocket協(xié)議、值為4時表示采用XMPP協(xié)議、值為5時表示采用COAP協(xié)議;本發(fā)明的方法不管下層協(xié)議是采用哪種格式的,都只需在應(yīng)用層中采用本發(fā)明的數(shù)據(jù)封裝協(xié)議,就能兼容識別處理各種格式或類型的數(shù)據(jù),不但減少業(yè)務(wù)平臺的數(shù)據(jù)處理要求,而且也降低了物聯(lián)網(wǎng)終端和業(yè)務(wù)平臺的開發(fā)難度。
PRIORITY字段表示:報文的優(yōu)先級;
PACKET_ID字段表示:報文ID,該報文ID用于ACK確認和/或丟棄重復(fù)的報文;
IMEI字段表示:物聯(lián)網(wǎng)終端的設(shè)備編號,由CTRL字段中的imei選項控制是否存在;
TIMESTAMP字段表示:報文產(chǎn)生時的時間戳,由CTRL中的ts選項控制是否存在;
TTL字段表示:報文超時時間,由CTRL字段中的ttl選項控制是否存在;
SERVICE字段:ID表示服務(wù)id號,CMD表示服務(wù)的具體操作,MULTIPLE表示此報文中還存在其他自定義的SERVICE字段和DATA字段的組合,LEN表示與此SERVICE字段相關(guān)的DATA字段的長度;
其中SERVICE字段中的id號可以根據(jù)具體的業(yè)務(wù)形態(tài)做出自定義,從而和物聯(lián)網(wǎng)終端傳輸?shù)臄?shù)據(jù)進行匹配;
DATA字段表示:具體要傳輸?shù)臄?shù)據(jù);
CHK字段表示:校驗和,用于檢測數(shù)據(jù)完整性。
所述的解碼處理采用如下處理步驟:(1)、開始:(2)、輸入字節(jié)流;(3)、判斷STX字段的值是否為0x55,如果不是則結(jié)束;如果是,則進入“判斷chk值是否為1”的步驟;(4)、如果chk值等于1,則進入“校驗CHK”步驟,所述的校驗CHK為計算數(shù)據(jù)包校驗和,并與CHK字段內(nèi)的值進行相等性比較;如果chk選項的值不等于1,則進入“檢測版本號ver”步驟;(5)如果“校驗CHK”步驟中,數(shù)據(jù)包檢驗和與CHK的值相等,則進入“檢測版本號ver”步驟;如果數(shù)據(jù)包檢驗和與CHK字段內(nèi)的值不相等,則結(jié)束;(6)如果檢測協(xié)議版本號ver不是指定的版本,則結(jié)束;如果檢測協(xié)議版本號ver是指定的版本,則進入“根據(jù)協(xié)議格式提取各個字段的值”步驟,再結(jié)束;所述的“根據(jù)協(xié)議格式提取各個字段的值”為根據(jù)CTRL字段的選項中imei、ts、ttl的值是否為1,判斷IMEI字段、TIMESTAMP字段、TTL字段是否存在,然后根據(jù)數(shù)據(jù)封裝協(xié)議的格式進行各個字段的解析,解析整個數(shù)據(jù)包。
本發(fā)明通過設(shè)計統(tǒng)一的物聯(lián)網(wǎng)數(shù)據(jù)封裝協(xié)議,可以用來在不同的行業(yè)中,針對不同的傳感器設(shè)備采集的數(shù)據(jù)進行統(tǒng)一的封裝,從而可以減少物聯(lián)網(wǎng)終端與業(yè)務(wù)平臺的業(yè)務(wù)數(shù)據(jù)處理要求,同時物聯(lián)網(wǎng)終端與業(yè)務(wù)平臺通過此協(xié)議靈活地對各種傳感器采集數(shù)據(jù)進行封裝,并且支持通過不同的網(wǎng)絡(luò)協(xié)議傳輸。
通過在物聯(lián)網(wǎng)終端與業(yè)務(wù)平臺的應(yīng)用層采用這一套數(shù)據(jù)封裝協(xié)議,該數(shù)據(jù)封裝協(xié)議支持多個數(shù)據(jù)傳輸協(xié)議,在數(shù)據(jù)傳輸層面有眾多的開發(fā)庫支持,可以降低物聯(lián)網(wǎng)終端的開發(fā)難度,實現(xiàn)數(shù)據(jù)與協(xié)議分離,能有效地提高物聯(lián)網(wǎng)業(yè)務(wù)系統(tǒng)對于數(shù)據(jù)處理的能力。