李 瑩
(焦作大學(xué)信息工程學(xué)院,河南 焦作 454003)
隨著傳感器網(wǎng)絡(luò)的大規(guī)模部署,數(shù)據(jù)集成和訪問(wèn)會(huì)變得越來(lái)越重要。從應(yīng)用角度來(lái)看,從這些高度分布的傳感器網(wǎng)絡(luò)中獲得有意義的數(shù)據(jù)十分困難,因此,數(shù)據(jù)獲取機(jī)制及統(tǒng)一的訪問(wèn)入口就成為急需要解決的辦法。就數(shù)據(jù)獲取來(lái)說(shuō),網(wǎng)關(guān)移動(dòng)和部署多個(gè)無(wú)線傳感器網(wǎng)絡(luò)是兩種可行的方法。但實(shí)際部署的傳感器網(wǎng)絡(luò),會(huì)采用不同的傳感設(shè)備、使用不同的通信協(xié)議,因此,可行的方法就是通過(guò)某種方法屏蔽傳感器網(wǎng)絡(luò)節(jié)點(diǎn)差異,將傳感器網(wǎng)絡(luò)作為支持高層應(yīng)用的數(shù)據(jù)源[1]。
在一些無(wú)線傳感器網(wǎng)絡(luò)典型的應(yīng)用中,通常采用集中式的方式對(duì)數(shù)據(jù)進(jìn)行處理。例如環(huán)境檢測(cè)中,傳感器節(jié)點(diǎn)感應(yīng)到的數(shù)據(jù)傳送到一個(gè)網(wǎng)關(guān)節(jié)點(diǎn)上后,由網(wǎng)關(guān)節(jié)點(diǎn)負(fù)責(zé)將傳感器節(jié)點(diǎn)傳來(lái)的數(shù)據(jù)經(jīng)由一個(gè)傳輸網(wǎng)絡(luò)發(fā)送到一個(gè)集中的數(shù)據(jù)處理中心[2-4]。而上述應(yīng)用場(chǎng)景不同于傳統(tǒng)無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用,使其難以采用集中式的架構(gòu)。
P2P無(wú)線傳感器網(wǎng)絡(luò)是解決上述問(wèn)題的一種嘗試[5-7],它通過(guò)對(duì)傳感器網(wǎng)絡(luò)功能的描述,屏蔽了底層網(wǎng)絡(luò)的差異,并利用P2P網(wǎng)絡(luò)的特點(diǎn)實(shí)現(xiàn)了傳感器網(wǎng)絡(luò)動(dòng)態(tài)變化的支持及多個(gè)傳感器網(wǎng)絡(luò)之間的信息共享。
本文基于已有的研究成果,提出了這個(gè)網(wǎng)絡(luò)層的設(shè)計(jì)與實(shí)現(xiàn),并且在實(shí)際的項(xiàng)目中進(jìn)行測(cè)試。
P2P傳感器網(wǎng)絡(luò)的主要目的之一是實(shí)現(xiàn)傳感器網(wǎng)絡(luò)之間的信息共享。而傳感功能的發(fā)布則是共享信息的第一步,因此如何實(shí)現(xiàn)對(duì)傳感信息的描述,以供P2P網(wǎng)絡(luò)進(jìn)行發(fā)布進(jìn)而實(shí)現(xiàn)共享就成為需要解決的問(wèn)題之一[6]。
無(wú)線傳感器網(wǎng)絡(luò)的節(jié)點(diǎn)通常具有多種功能,以單個(gè)傳感器節(jié)點(diǎn)為例,可能具有多種功能,例如溫度、濕度、光照等多種參數(shù)的測(cè)量。這就造成單個(gè)傳感器節(jié)點(diǎn)會(huì)支持多個(gè)傳感功能。與此相對(duì)應(yīng),在實(shí)際的應(yīng)用中,為提高監(jiān)測(cè)的精確度,降低對(duì)單個(gè)節(jié)點(diǎn)傳感器精度的要求,通常是由多個(gè)無(wú)線傳感器網(wǎng)絡(luò)協(xié)同完成對(duì)被監(jiān)測(cè)區(qū)域的監(jiān)測(cè)任務(wù)。從分析看出,傳感器節(jié)點(diǎn)狀態(tài)和數(shù)量的變化會(huì)對(duì)該無(wú)線傳感器網(wǎng)絡(luò)提供的功能產(chǎn)生影響。
傳感功能發(fā)布后,用戶會(huì)根據(jù)傳感功能列表進(jìn)行選擇,由系統(tǒng)根據(jù)用戶的選擇和相應(yīng)的Peer通信后返回傳感數(shù)據(jù),這些傳感數(shù)據(jù)應(yīng)是經(jīng)過(guò)處理的有意義的數(shù)據(jù)。這就要求系統(tǒng)具備對(duì)傳感器采集數(shù)據(jù)的解析、存儲(chǔ)和查詢的功能。
不同的應(yīng)用背景對(duì)傳感器的要求不同,其硬件平臺(tái)、軟件系統(tǒng)和網(wǎng)絡(luò)協(xié)議必然會(huì)有很大的差別,所以無(wú)線傳感器網(wǎng)絡(luò)不像Internet一樣,有統(tǒng)一的通信協(xié)議平臺(tái)[2]。因此,在進(jìn)行傳感應(yīng)用設(shè)計(jì)時(shí),要根據(jù)具體的應(yīng)用提供相應(yīng)的數(shù)據(jù)解析,得到有意義的數(shù)據(jù)。
傳感器層的設(shè)計(jì)為單個(gè)無(wú)線傳感器網(wǎng)絡(luò)的設(shè)計(jì),可將其應(yīng)用分為兩部分:外部應(yīng)用和內(nèi)部應(yīng)用。網(wǎng)關(guān)是外部應(yīng)用的入口,在其上運(yùn)行了外部應(yīng)用的接口,稱之為Gateway API;內(nèi)部應(yīng)用API,根據(jù)其功能可以看出主要運(yùn)行在傳感器節(jié)點(diǎn)上,稱之為 Node API[3]。在具體實(shí)現(xiàn)中,Node API是指運(yùn)行在傳感器節(jié)點(diǎn)上的數(shù)據(jù)采集程序,負(fù)責(zé)周期性采集被監(jiān)測(cè)區(qū)域的信息;Gateway API則需要實(shí)現(xiàn)對(duì)傳感器數(shù)據(jù)的解析、傳感功能的描述、根據(jù)接受的查詢請(qǐng)求進(jìn)行數(shù)據(jù)訪問(wèn)。
為了實(shí)現(xiàn)對(duì)傳感器節(jié)點(diǎn)的實(shí)時(shí)監(jiān)控,需要為每個(gè)加入到無(wú)線傳感器網(wǎng)絡(luò)中的傳感器節(jié)點(diǎn)構(gòu)建一個(gè)描述文件,稱之為傳感器節(jié)點(diǎn)描述,它與傳感器節(jié)點(diǎn)之間是一一對(duì)應(yīng)的關(guān)系。它會(huì)在傳感器節(jié)點(diǎn)加入時(shí)建立,在網(wǎng)關(guān)無(wú)法監(jiān)測(cè)到節(jié)點(diǎn)時(shí)刪除。傳感器節(jié)點(diǎn)描述以XML格式對(duì)傳感器節(jié)點(diǎn)的靜態(tài)特征以及在網(wǎng)絡(luò)中的角色進(jìn)行定義。
無(wú)線傳感器網(wǎng)絡(luò)部署后,其網(wǎng)絡(luò)中的節(jié)點(diǎn)狀態(tài)和數(shù)量通常會(huì)發(fā)生變化,這會(huì)導(dǎo)致所提供的功能也隨之發(fā)生變化。外部應(yīng)用在訪問(wèn)無(wú)線傳感器網(wǎng)絡(luò)的時(shí)候,通常僅僅關(guān)注網(wǎng)絡(luò)當(dāng)前所能提供的功能,因此,對(duì)無(wú)線傳感器網(wǎng)絡(luò)功能的描述必須是實(shí)時(shí)的,即相應(yīng)的功能描述信息必須根據(jù)無(wú)線傳感器網(wǎng)絡(luò)當(dāng)前的傳感器節(jié)點(diǎn)信息動(dòng)態(tài)生成[4,5]。
XML作為一種可支持動(dòng)態(tài)生成文檔的標(biāo)記語(yǔ)言,成為描述無(wú)線傳感器網(wǎng)絡(luò)功能的語(yǔ)言。從圖1中可以看出傳感功能描述和傳感器節(jié)點(diǎn)描述之間是多對(duì)多的關(guān)系,并且傳感功能描述是在傳感器節(jié)點(diǎn)描述的基礎(chǔ)之上動(dòng)態(tài)生成的。
圖1 傳感功能描述和傳感器節(jié)點(diǎn)描述的關(guān)系
在本文中,采用MICAz無(wú)線傳感器網(wǎng)絡(luò)套件作為實(shí)際的試驗(yàn)環(huán)境,以TinyOS作為操作系統(tǒng)[2],并在傳感器節(jié)點(diǎn)上運(yùn)行Surge_Reliable作為數(shù)據(jù)采集程序。該應(yīng)用程序采用主動(dòng)的方式收集數(shù)據(jù),并每隔8秒將其經(jīng)過(guò)多跳后發(fā)送給網(wǎng)關(guān)。下面以傳感器節(jié)點(diǎn)作為例,說(shuō)明傳感器數(shù)據(jù)的解析和存儲(chǔ)[6]。
Surge_Relaible的特點(diǎn)是主動(dòng)采集數(shù)據(jù),它支持集中式的無(wú)線傳感器網(wǎng)絡(luò)數(shù)據(jù)管理結(jié)構(gòu)。這種結(jié)構(gòu)中,感知數(shù)據(jù)的查詢和無(wú)線傳感器網(wǎng)絡(luò)的訪問(wèn)是相對(duì)獨(dú)立的。處理過(guò)程分為兩步:首先將傳感器數(shù)據(jù)按事先指定的方式從無(wú)線傳感器網(wǎng)絡(luò)傳輸?shù)街行姆?wù)器;然后,在中心服務(wù)器上進(jìn)行查詢處理。
主要模板的交互涉及到三種數(shù)據(jù)流:傳感功能注冊(cè)數(shù)據(jù)流、傳感數(shù)據(jù)采集流、傳感信息訪問(wèn)流。
傳感數(shù)據(jù)采集流:傳感器節(jié)點(diǎn)會(huì)運(yùn)行采樣程序,每隔一定的時(shí)間段將數(shù)據(jù)發(fā)送到網(wǎng)關(guān)。由DataCollector模塊循環(huán)從gateway讀取數(shù)據(jù),根據(jù)分隔符126將數(shù)據(jù)包切割開(kāi),調(diào)用Parser來(lái)解析數(shù)據(jù)包。為了實(shí)現(xiàn)對(duì)歷史數(shù)據(jù)的保存,便于以后的數(shù)據(jù)查詢,SensorAcess模塊會(huì)將 Parser的結(jié)果持續(xù)不斷地送入到本地?cái)?shù)據(jù)庫(kù)。
傳感功能注冊(cè)數(shù)據(jù)流:為了支持外部應(yīng)用對(duì)傳感器功能的訪問(wèn),需要在網(wǎng)關(guān)上對(duì)其所提供的功能進(jìn)行注冊(cè)。為此將根據(jù)Parser的解析結(jié)果進(jìn)行判斷,如果是“新”節(jié)點(diǎn),生成傳感器節(jié)點(diǎn)描述文件,同時(shí)根據(jù)其所提供的功能進(jìn)行注冊(cè)。此外,還必須提供對(duì)描述信息的更新功能,以保證傳感功能的實(shí)時(shí)性。
傳感信息訪問(wèn)流:傳感器信息訪問(wèn)流由兩部分組成。在本文中,無(wú)線傳感器網(wǎng)絡(luò)層的主要功能即是向上屏蔽無(wú)線傳感器網(wǎng)絡(luò)的通信細(xì)節(jié),以傳感應(yīng)用的方式暴露給外部應(yīng)用。因此,為獲得該無(wú)線傳感器網(wǎng)絡(luò)所提供的功能列表,需要進(jìn)行功能發(fā)現(xiàn)。此后,用戶根據(jù)獲得的列表進(jìn)行相應(yīng)的選擇,從而得到該應(yīng)用的數(shù)據(jù)。
傳感功能注冊(cè)數(shù)據(jù)流主要包括兩個(gè)部分:Sensor Watch模塊和傳感器節(jié)點(diǎn)描述。下面主要介紹Sensor Watch的功能,如圖2所示。
圖2 傳感器節(jié)點(diǎn)注冊(cè)和刪除活動(dòng)
節(jié)點(diǎn)注冊(cè):節(jié)點(diǎn)在加入無(wú)線傳感器網(wǎng)絡(luò)時(shí),會(huì)和網(wǎng)關(guān)進(jìn)行通信,SensorWatch模塊將根據(jù)解析的結(jié)果判定其功能,向相應(yīng)的功能注冊(cè)該傳感器節(jié)點(diǎn),同時(shí)生成傳感器節(jié)點(diǎn)描述文件。
節(jié)點(diǎn)刪除:為了保證該無(wú)線傳感器網(wǎng)絡(luò)功能的實(shí)時(shí)性,SensorWatch模塊需要根據(jù)Parser的結(jié)果不斷地掃描多個(gè)功能文件夾下已經(jīng)注冊(cè)的傳感器節(jié)點(diǎn)。如果在設(shè)定的時(shí)間間隔內(nèi)傳感器節(jié)點(diǎn)信息沒(méi)有更新,即認(rèn)為該節(jié)點(diǎn)已經(jīng)和網(wǎng)關(guān)失去聯(lián)系,SensorWatch模塊會(huì)從相應(yīng)的目錄下刪除該傳感器節(jié)點(diǎn)對(duì)應(yīng)的傳感器節(jié)點(diǎn)描述。
傳感器數(shù)據(jù)采集數(shù)據(jù)流,主要是實(shí)現(xiàn)對(duì)傳感數(shù)據(jù)的解析,為傳感功能注冊(cè)提供信息,并實(shí)現(xiàn)傳感數(shù)據(jù)的本地存儲(chǔ),這里采用開(kāi)源java類庫(kù)RXTX支持開(kāi)發(fā)。RXTX項(xiàng)目提供了Windows、Linux、Mac Os X、Solaris操作系統(tǒng)下的兼容 javax.comm串口通訊包API的實(shí)現(xiàn),為其他開(kāi)發(fā)人員在此類系統(tǒng)下開(kāi)發(fā)串口的應(yīng)用提供了方便。
傳感信息訪問(wèn)流主要包括對(duì)傳感功能描述的訪問(wèn)和對(duì)本地?cái)?shù)據(jù)庫(kù)的訪問(wèn)。
功能發(fā)現(xiàn)請(qǐng)求:接收來(lái)自上層P2P網(wǎng)絡(luò)的查詢命令,由Query Generator生成適合本地查詢的格式。根據(jù)查詢命令對(duì)基于本地的傳感器描述、文件傳感器節(jié)點(diǎn)描述和生成傳感功能描述。
數(shù)據(jù)查詢:用戶端接收到傳感功能描述后,在本地進(jìn)行解析生成功能列表??蛻舳藭?huì)根據(jù)生成的功能列表,選擇感興趣的功能后,將查詢消息通過(guò)P2P網(wǎng)絡(luò)發(fā)送到對(duì)應(yīng)的網(wǎng)關(guān)。由網(wǎng)關(guān)根據(jù)本地的傳感器節(jié)點(diǎn)描述的解析結(jié)果,查詢本地?cái)?shù)據(jù)庫(kù)中對(duì)應(yīng)節(jié)點(diǎn)的信息。
返回?cái)?shù)據(jù):傳感器節(jié)點(diǎn)每隔一定時(shí)間將傳感器數(shù)據(jù)寫(xiě)入網(wǎng)關(guān)上的數(shù)據(jù)庫(kù)中。根據(jù)本地?cái)?shù)據(jù)庫(kù)的查詢結(jié)構(gòu),由網(wǎng)關(guān)負(fù)責(zé)將數(shù)據(jù)通過(guò)上層的P2P網(wǎng)絡(luò)返回給最終用戶。
我們的實(shí)驗(yàn)部署如圖3所示。
圖3 實(shí)驗(yàn)部署圖
為了評(píng)估該網(wǎng)絡(luò)層應(yīng)用架構(gòu)的可行性,搭建了一個(gè)實(shí)現(xiàn)環(huán)境。測(cè)試環(huán)境在同一局域網(wǎng)內(nèi)實(shí)現(xiàn),由同一個(gè)局域網(wǎng)的多個(gè)節(jié)點(diǎn)構(gòu)成。根據(jù)試驗(yàn)室的設(shè)備情況,我們利用兩臺(tái)PC充當(dāng)其中的兩個(gè) Peer(P3和 P4),并連接傳感器網(wǎng)絡(luò),以提供傳感功能。其中P3提供地點(diǎn)room2的信息,P4提供地點(diǎn)room1的信息。此外,根據(jù)JXTA的可在一臺(tái)物理設(shè)備上運(yùn)行多個(gè)Peer節(jié)點(diǎn)的特點(diǎn),我們可以在其中的一臺(tái)機(jī)器上設(shè)定另外一個(gè)Peer(P1),以供用戶加入P2P網(wǎng)絡(luò)。根據(jù)P2P網(wǎng)絡(luò)的設(shè)計(jì),在某一時(shí)刻,由P3、P4充當(dāng)查詢響應(yīng)代理,P1作為客戶端,形成了基于P2P的傳感功能查詢網(wǎng)絡(luò)。
在本試驗(yàn)平臺(tái)中,利用MICAz節(jié)點(diǎn)充當(dāng)傳感器節(jié)點(diǎn),它是由美國(guó)加州大學(xué)Berkeley分校開(kāi)發(fā),由CrossBow公司生產(chǎn)和銷售的一款無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn),是當(dāng)前最受歡迎的一款無(wú)線傳感器網(wǎng)絡(luò)產(chǎn)品。為了測(cè)量環(huán)境中感興趣的物理量,可以對(duì)傳感板進(jìn)行擴(kuò)展,可包含光、溫度、相對(duì)濕度等傳感器。根據(jù)使用的通信協(xié)議,我們預(yù)先設(shè)定了傳感器節(jié)點(diǎn)的GroupID和NodeID號(hào),試驗(yàn)平臺(tái)中傳感器節(jié)點(diǎn)的初始狀態(tài)如表1所示。
表1 試驗(yàn)平臺(tái)中傳感器節(jié)點(diǎn)狀態(tài)
下面用戶對(duì)P2P網(wǎng)絡(luò)中傳感功能進(jìn)行訪問(wèn)。首先,由提供room1傳感器信息的Peer4首先啟動(dòng),它會(huì)自動(dòng)發(fā)布本地的傳感功能。此后用戶通過(guò)Peer1加入P2P網(wǎng)絡(luò)中,系統(tǒng)會(huì)返回Peer4上發(fā)布的的無(wú)線傳感器網(wǎng)絡(luò)功能。為便于驗(yàn)證該架構(gòu)的正確性,同時(shí)返回了提供功能的傳感器節(jié)點(diǎn)名稱(以SensorGroupIDNodeID的格式命名),在此過(guò)程中兩個(gè)Peer之間信息交互如圖4。
圖4 Peer1加入后和Peer4的信息交互
這里我們?cè)O(shè)定系統(tǒng)返回:最大值 (MAX),最小值(MIN),平均值(Average),在圖形界面上顯示的結(jié)果如圖5。
圖5 用戶選擇后返回的數(shù)據(jù)
(1)傳感器網(wǎng)絡(luò)的加入
傳感器網(wǎng)絡(luò)的加入,即是其對(duì)應(yīng)Peer節(jié)點(diǎn)的加入過(guò)程。映射與部署在地點(diǎn)room2的傳感器網(wǎng)絡(luò)的Peer3加入,一段時(shí)間后,用戶端將反映發(fā)生的變化。Peer3和用戶端的交互過(guò)程如圖6。用戶可通過(guò)該界面訪問(wèn)該P(yáng)2P網(wǎng)絡(luò)中所有的傳感器功能,或某個(gè)傳感器網(wǎng)絡(luò)的某種功能。
圖6 Peer2加入后的用戶端的更新
(2)傳感器節(jié)點(diǎn)動(dòng)態(tài)變化
傳感器節(jié)點(diǎn)通常會(huì)加入或退出傳感器網(wǎng)絡(luò),如果提供某個(gè)功能的所有傳感器節(jié)點(diǎn)全部失效,則應(yīng)該向客戶端反映這種變化。在本場(chǎng)景的驗(yàn)證中,我們以傳感器節(jié)點(diǎn)退出為例,進(jìn)行驗(yàn)證。某時(shí),提供room1的傳感器網(wǎng)絡(luò)中提供光照的傳感器節(jié)點(diǎn)退出(關(guān)閉節(jié)點(diǎn)即可模擬該過(guò)程),一段時(shí)間后,Peer4應(yīng)向用戶反映這種變化。用戶進(jìn)行功能選擇后,該P(yáng)2P網(wǎng)絡(luò)將不再提供該光照的功能,具體的執(zhí)行情況如圖7。
圖7 傳感器節(jié)點(diǎn)退出時(shí)的情況
從上面可以得出結(jié)論,我們的P2P無(wú)線傳感器網(wǎng)絡(luò)層驗(yàn)證了傳感器功能的訪問(wèn)、傳感器網(wǎng)絡(luò)的加入及傳感器節(jié)點(diǎn)的變化等典型場(chǎng)景,能夠?qū)崿F(xiàn)分布在不同地點(diǎn)傳感器網(wǎng)絡(luò)之間的信息共享,滿足實(shí)際應(yīng)用需求。
本文主要研究了P2P無(wú)線傳感器網(wǎng)絡(luò)層的設(shè)計(jì)及實(shí)現(xiàn)。通過(guò)對(duì)傳感器節(jié)點(diǎn)和傳感網(wǎng)絡(luò)功能的描述以及對(duì)傳感器網(wǎng)絡(luò)采集數(shù)據(jù)的解析,從傳感功能注冊(cè)數(shù)據(jù)流、傳感器數(shù)據(jù)采集數(shù)據(jù)流和傳感功能訪問(wèn)數(shù)據(jù)流三個(gè)方面對(duì)模塊之間的交互進(jìn)行了設(shè)計(jì),最后通過(guò)實(shí)驗(yàn)驗(yàn)證發(fā)現(xiàn)P2P無(wú)線傳感器網(wǎng)絡(luò)屏蔽了底層網(wǎng)絡(luò)的差異,并利用P2P網(wǎng)絡(luò)的特點(diǎn)實(shí)現(xiàn)了傳感器網(wǎng)絡(luò)動(dòng)態(tài)變化的支持,及多個(gè)傳感器網(wǎng)絡(luò)之間的信息共享。