韓 吉,周 杰,杜景林
(南京信息工程大學(xué) 電子與信息工程學(xué)院,江蘇 南京210044)
本文引入氣象無(wú)線傳感器網(wǎng)絡(luò)的概念,將無(wú)線傳感器網(wǎng)絡(luò) (wireless sensor networks,WSN)[1]技術(shù)應(yīng)用于氣象基本要素的觀測(cè)中,輔助傳統(tǒng)自動(dòng)氣象站的氣象觀測(cè),用于局部區(qū)域氣象要素收集工作,監(jiān)測(cè)環(huán)境溫度、濕度、氣壓、風(fēng)速、風(fēng)向和雨量等狀態(tài)。由于無(wú)線傳感器網(wǎng)絡(luò)中的傳感器節(jié)點(diǎn)會(huì)在短時(shí)間內(nèi)采集大量的傳感信息,對(duì)這些信息的加工處理成為了一項(xiàng)重要任務(wù),因此本文提出了分層次的氣象無(wú)線傳感器網(wǎng)絡(luò)監(jiān)測(cè)系統(tǒng)體系結(jié)構(gòu),并設(shè)計(jì)實(shí)現(xiàn)了原型系統(tǒng)。通過該系統(tǒng)傳感器網(wǎng)絡(luò)的采集信息被上傳保存到服務(wù)器的數(shù)據(jù)庫(kù)中,服務(wù)器端使用Web服務(wù)技術(shù)和實(shí)時(shí)通信技術(shù)等,使得用戶能夠在安卓智能手機(jī)上實(shí)時(shí)以曲線圖、表格等多種形式查看監(jiān)測(cè)區(qū)域的氣象信息,同時(shí)還能查看網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、管理傳感器節(jié)點(diǎn)、接收預(yù)警信息等。
目前,已有一些利用無(wú)線傳感器網(wǎng)絡(luò)構(gòu)建環(huán)境監(jiān)測(cè)系統(tǒng)的研究工作。文獻(xiàn) [2]介紹了一個(gè)基于WSNs和Web技術(shù)構(gòu)建農(nóng)作物溫室環(huán)境監(jiān)測(cè)系統(tǒng)的案例。文獻(xiàn) [3]提出了一種基于Web技術(shù),設(shè)計(jì)無(wú)線傳感器網(wǎng)絡(luò)監(jiān)測(cè)系統(tǒng)的模式。
如上所述,雖然已有一些關(guān)于無(wú)線傳感器網(wǎng)絡(luò)監(jiān)測(cè)系統(tǒng)的研究,但關(guān)于無(wú)線傳感器網(wǎng)絡(luò)技術(shù),更多的工作集中于對(duì)網(wǎng)絡(luò)通信協(xié)議、網(wǎng)絡(luò)安全管理等方面的研究。本文的主要工作是提出了分層次的無(wú)線傳感網(wǎng)監(jiān)測(cè)系統(tǒng)體系結(jié)構(gòu),組件了監(jiān)測(cè)原型系統(tǒng)。同時(shí),區(qū)別于一些類似工作,本系統(tǒng)中考慮到移動(dòng)用戶、移動(dòng)應(yīng)用場(chǎng)景的大量增長(zhǎng),設(shè)計(jì)了基于安卓智能手機(jī)的移動(dòng)管理客戶端,不僅實(shí)現(xiàn)了傳統(tǒng)Web客戶端中常見的數(shù)據(jù)展示、節(jié)點(diǎn)管理等功能,結(jié)合移動(dòng)設(shè)備的特色還實(shí)現(xiàn)了高效的預(yù)警推送的功能。
本文提出分層的氣象無(wú)線傳感器網(wǎng)絡(luò)監(jiān)測(cè)系統(tǒng),其體系架構(gòu)如圖1所示,由下到上依次為感知層、接入層、服務(wù)平臺(tái)層和應(yīng)用層。
基于上述體系結(jié)構(gòu),構(gòu)建的氣象無(wú)線傳感網(wǎng)監(jiān)測(cè)系統(tǒng)工作方式為:感知層中監(jiān)測(cè)區(qū)域內(nèi)大量傳感器節(jié)點(diǎn)通過自組織形成的一個(gè)感知網(wǎng)絡(luò),將采集到的數(shù)據(jù)經(jīng)過多跳方式進(jìn)行傳輸和處理,最后傳遞到匯聚節(jié)點(diǎn) (sink node),然后經(jīng)過接入層的網(wǎng)關(guān)設(shè)備上傳到服務(wù)平臺(tái)層的網(wǎng)絡(luò)服務(wù)器,最終應(yīng)用層的客戶端用戶就可以通過瀏覽器、手機(jī)等多種方式對(duì)傳感網(wǎng)進(jìn)行配置和管理,完成監(jiān)測(cè)任務(wù)。每個(gè)層次的具體說明如下。
感知層,即多個(gè)傳感器節(jié)點(diǎn)組成的環(huán)境監(jiān)測(cè)網(wǎng)絡(luò)。常見的傳感器節(jié)點(diǎn),如Crossbow公司的TelosB、MicaZ等。在本項(xiàng)目中,使用的是基于CC2530自制傳感器節(jié)點(diǎn),并移植了TinyOS無(wú)線傳感器網(wǎng)絡(luò)操作系統(tǒng)。傳感器節(jié)點(diǎn)可分成一般傳感器節(jié)點(diǎn) (sensor node)和匯聚節(jié)點(diǎn) (sink node),本項(xiàng)目中傳感器節(jié)點(diǎn)主要負(fù)責(zé)采集基本環(huán)境氣象數(shù)據(jù),匯聚節(jié)點(diǎn)主要負(fù)責(zé)向網(wǎng)關(guān)傳輸數(shù)據(jù)包。
接入層主要是指網(wǎng)關(guān)設(shè)備。網(wǎng)關(guān)既需要與匯聚節(jié)點(diǎn)進(jìn)行通信,還需要有接入互聯(lián)網(wǎng)的能力。常見的網(wǎng)關(guān)是基于ARM的嵌入式設(shè)備,其通過串口 (RS232)與匯聚節(jié)點(diǎn)保持通信,同時(shí)它可以通過3G、WIFI或其他互聯(lián)網(wǎng)接入方式與服務(wù)器通信。
在分層的氣象無(wú)線傳感器網(wǎng)絡(luò)監(jiān)測(cè)系統(tǒng)中,服務(wù)平臺(tái)層尤為重要,上層客戶端穩(wěn)定可靠的運(yùn)行離不開服務(wù)平臺(tái)層提供的各項(xiàng)基本服務(wù)。在本系統(tǒng)中,服務(wù)平臺(tái)層主要包括如下幾個(gè)模塊:數(shù)據(jù)收發(fā)模塊、數(shù)據(jù)服務(wù)模塊和推送服務(wù)模塊。
2.3.1 數(shù)據(jù)收發(fā)模塊
服務(wù)平臺(tái)層中,數(shù)據(jù)收發(fā)模塊起到了 “橋梁”的角色,它主要起到數(shù)據(jù)存儲(chǔ)和指令中轉(zhuǎn)的功能。
數(shù)據(jù)存儲(chǔ)是指數(shù)據(jù)收發(fā)模塊負(fù)責(zé)將無(wú)線傳感器網(wǎng)絡(luò)采集到的數(shù)據(jù)包按照指定的格式解析并存入數(shù)據(jù)庫(kù)。具體的,傳感器節(jié)點(diǎn)按預(yù)定義的頻率采集到氣象要素?cái)?shù)據(jù)之后,以多跳路由的方式將數(shù)據(jù)包中轉(zhuǎn)到匯聚節(jié)點(diǎn),繼而匯聚節(jié)點(diǎn)將數(shù)據(jù)包發(fā)送到網(wǎng)關(guān)。網(wǎng)關(guān)通過3G或WIFI方式,與數(shù)據(jù)收發(fā)模塊進(jìn)行Socket通信,向其發(fā)送數(shù)據(jù)包。數(shù)據(jù)收發(fā)模塊監(jiān)聽到Socket發(fā)送請(qǐng)求之后,接收數(shù)據(jù)包并根據(jù)預(yù)定義的協(xié)議標(biāo)準(zhǔn)檢驗(yàn)數(shù)據(jù)包的完整性與合法性,判斷數(shù)據(jù)包是否有效。如果有效,按照指定的格式數(shù)據(jù)收發(fā)模塊解析數(shù)據(jù)包,獲得傳感器數(shù)據(jù) (如溫度值)、路由中轉(zhuǎn)路徑、網(wǎng)關(guān)ID編號(hào)等,然后將這些數(shù)據(jù)存入數(shù)據(jù)庫(kù)相應(yīng)的表中。如果無(wú)效,則丟棄該數(shù)據(jù)包。
指令中轉(zhuǎn)是指數(shù)據(jù)收發(fā)模塊負(fù)責(zé)向傳感器節(jié)點(diǎn)傳達(dá)客戶端的操作請(qǐng)求??蛻舳说目刂普?qǐng)求指令,經(jīng)由數(shù)據(jù)收發(fā)模塊、網(wǎng)關(guān)、多跳路由到達(dá)指定傳感器節(jié)點(diǎn),可對(duì)節(jié)點(diǎn)的工作模式和狀態(tài)進(jìn)行控制,如改變節(jié)點(diǎn)傳感器的采樣頻率、控制節(jié)點(diǎn)使其休眠或工作等。
2.3.2 數(shù)據(jù)服務(wù)模塊
數(shù)據(jù)服務(wù)模塊的主要任務(wù)是為客戶端提供數(shù)據(jù)源,客戶端將得到的數(shù)據(jù)以圖表、表格等多種形式展示給用戶。基本的客戶端功能包括歷史數(shù)據(jù)查詢功能和動(dòng)態(tài)數(shù)據(jù)展示功能等。通過構(gòu)建Web服務(wù),客戶端可以通過HTTP請(qǐng)求的方式向數(shù)據(jù)服務(wù)模塊的Web服務(wù)器請(qǐng)求數(shù)據(jù),服務(wù)器根據(jù)請(qǐng)求內(nèi)容從數(shù)據(jù)庫(kù)中查找數(shù)據(jù)集并以XML或JSON格式返回給客戶端。通過這種方式可以很方便地實(shí)現(xiàn)歷史數(shù)據(jù)查詢功能。而對(duì)于客戶端的動(dòng)態(tài)數(shù)據(jù)展示功能,使用了WebSocket實(shí)時(shí)通信技術(shù)。具體如下分析:
(1)構(gòu)建REST式的Web服務(wù)API
為實(shí)現(xiàn)移動(dòng)客戶端和數(shù)據(jù)庫(kù)的交互,需要構(gòu)建Web服務(wù)為客戶端提供模塊化、通用的應(yīng)用程序接口 (API)。有遠(yuǎn)程過程調(diào)用 (RPC),面向服務(wù)架構(gòu) (SOA)以及表述性狀態(tài)轉(zhuǎn)移 (REST)3種常見的 Web服務(wù)架構(gòu)[4]。因?yàn)镽EST風(fēng)格的Web服務(wù)與復(fù)雜的SOA和RPC相比更加靈活簡(jiǎn)易,因此本系統(tǒng)中采用了REST架構(gòu),這里重點(diǎn)說明。REST是由Roy Fielding在其博士論文中首次提出,是一種針對(duì)網(wǎng)絡(luò)應(yīng)用的設(shè)計(jì)和開發(fā)方式,可以降低開發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性。在REST的概念中,整個(gè)Web被看作一組資源的集合,資源由URI標(biāo)識(shí),對(duì)資源進(jìn)行的操作由客戶端指定的URI和HTTP協(xié)議動(dòng)詞 (GET、POST、PUT和DELETE)的組合來(lái)實(shí)施。REST這種基于資源的設(shè)計(jì)改變了傳統(tǒng)的基于服務(wù)的設(shè)計(jì)思想[5]。
構(gòu)建REST服務(wù)的關(guān)鍵是設(shè)計(jì)易于理解且結(jié)構(gòu)良好的URI。在本系統(tǒng)中設(shè)計(jì)資源URI時(shí),采用了如下模板:/{nameSpace}/ {resourceName}/ {resourceId}/ {resourceName}.{format}。 如,URI:http:// [serverip]/nodes/1/temperature.json,將得到節(jié)點(diǎn)編號(hào)為1的傳感器節(jié)點(diǎn)上的最新的溫度數(shù)據(jù)。另外,假設(shè)需要查詢2013-09-15到2013-09-20時(shí)間段內(nèi)節(jié)點(diǎn)1上溫度傳感器數(shù)據(jù)集時(shí),需構(gòu)建的 URI為:http:// [server-ip]/nodes/1/history/temperature/2013-09-15/2013-09-20.json。注意到,構(gòu)建REST式Web服務(wù)時(shí)選用了JSON作為返回?cái)?shù)據(jù)的格式,因?yàn)镴SON較常見的XML格式而言更加輕量級(jí),更易閱讀,且更易于解析處理。借助如此構(gòu)建的REST式Web服務(wù)API,當(dāng)Android客戶端向服務(wù)器發(fā)送HTTP GET或POST請(qǐng)求后,服務(wù)器就會(huì)返回JSON格式的結(jié)果集,形式如下所示:
{
"node":[
{
"id":"1",
"tempature":"22.3",
"time":"11:20:30"
"date":"2013-09-20"
},
…
]
}
(2)基于WebSocket的實(shí)時(shí)通信技術(shù)
在本系統(tǒng)中,Android客戶端用戶對(duì)于一些功能的實(shí)時(shí)性要求較高,比如需要實(shí)時(shí)刷新顯示當(dāng)前某節(jié)點(diǎn)的傳感器數(shù)值、需要?jiǎng)討B(tài)顯示傳感網(wǎng)中節(jié)點(diǎn)路由拓?fù)鋱D、客戶端操作傳感器節(jié)點(diǎn)使其休眠或啟動(dòng)等,這些功能的實(shí)現(xiàn)都依賴于可靠穩(wěn)定的客戶端-服務(wù)器實(shí)時(shí)通信技術(shù)。
在傳統(tǒng)的Web客戶端中,存在大量實(shí)時(shí)性要求較高的信息展示需求,因此出現(xiàn)了多種客戶端-服務(wù)器實(shí)時(shí)通信解決方案。其中基于Ajax長(zhǎng)輪詢方式是最常用的技術(shù),其通過輪詢的異步請(qǐng)求方式實(shí)現(xiàn)客戶端刷新。隨著HTML5的興起,出現(xiàn)了另一種實(shí)時(shí)通信機(jī)制:WebSocket。Web-Socket是一種全雙工的雙向通信技術(shù),主要目的是在Web瀏覽器 (或其他客戶端)和Web服務(wù)器之間提供一種類似TCP socket的雙向的、持續(xù)的、有狀態(tài)的通信方式?;赪ebSocket實(shí)時(shí)通信的優(yōu)勢(shì)在于,服務(wù)器和客戶端能夠彼此相互推送消息[6]。在Android原生APP客戶端中,要實(shí)現(xiàn)與WebSocket服務(wù)器的實(shí)時(shí)通信,需借助于第三方開源庫(kù):AutobahnAndroid[7]。
通常在無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用中,節(jié)點(diǎn)數(shù)目大,傳感器種類多,服務(wù)器端數(shù)據(jù)更新較快,因此Ajax長(zhǎng)輪詢方式的性能將大大降低,且會(huì)給服務(wù)器帶來(lái)較大的處理壓力。此外在本文所述的氣象無(wú)線傳感網(wǎng)監(jiān)測(cè)系統(tǒng)中,客戶端的形式是Android原生APP,Ajax方式顯然不適用于此應(yīng)用場(chǎng)景。綜合考慮WebSocket的性能優(yōu)勢(shì),借助于AutobahnAndroid開源項(xiàng)目,實(shí)現(xiàn)了Android客戶端與服務(wù)器的實(shí)時(shí)通信,其工作模式如圖2所示,服務(wù)器端能夠?qū)崟r(shí)地將定時(shí)更新的傳感器數(shù)值發(fā)送到Android客戶端,客戶端收到數(shù)據(jù)后立即更新顯示界面。同時(shí),Android客戶端能夠向服務(wù)器端實(shí)時(shí)發(fā)送請(qǐng)求指令,經(jīng)過數(shù)據(jù)收發(fā)服務(wù)器、網(wǎng)關(guān),用戶可實(shí)時(shí)操控傳感器節(jié)點(diǎn),使其休眠或啟動(dòng)。此外,用戶也可以查詢節(jié)點(diǎn)的實(shí)時(shí)數(shù)據(jù),使其在固定的上傳頻率之外立即上傳即時(shí)數(shù)據(jù)包,供用戶即時(shí)查詢節(jié)點(diǎn)的當(dāng)前工作狀態(tài)。
2.3.3 推送服務(wù)模塊
推送 (push)是一種由服務(wù)器主動(dòng)向客戶端推送消息的技術(shù),與拉取 (pull)相比,它不需要用戶不斷的刷新以檢查是否有消息更新,推送會(huì)主動(dòng)將更新信息發(fā)送給客戶端用戶[8]。目前,推送服務(wù)廣泛應(yīng)用于各種類型的智能手機(jī)應(yīng)用中,如:新聞應(yīng)用會(huì)向用戶及時(shí)推送重大新聞、天氣應(yīng)用會(huì)向用戶及時(shí)推送災(zāi)害性天氣預(yù)報(bào)信息等。通過推送服務(wù),不僅能夠增強(qiáng)用戶黏度,更重要的是能夠及時(shí)向用戶通知一些關(guān)鍵性信息。在本系統(tǒng)中,推送服務(wù)模塊的主要功能是將預(yù)警信息及時(shí)推送給Android客戶端用戶,這里說的預(yù)警信息如:某一傳感器節(jié)點(diǎn)測(cè)得的溫度超出閾值,雨量傳感器測(cè)得的每小時(shí)降水量超出閾值等。通過推送服務(wù)模塊,想要達(dá)到的效果是:只要用戶的Android智能手機(jī)處于開機(jī)且保持網(wǎng)絡(luò)連接狀態(tài),預(yù)警信息就能以Notification通知的形式即時(shí)的顯示在手機(jī)上。
根據(jù)Google官方的建議,推送服務(wù)可采用谷歌云消息(Google cloud messaging,GCM)實(shí)現(xiàn)。但由于Android是開放源碼的操作系統(tǒng),不同手機(jī)廠商會(huì)根據(jù)源碼進(jìn)行深度定制操作系統(tǒng),所以GCM服務(wù)并不能夠有效地工作在每部手機(jī)上。如果自行實(shí)現(xiàn)高效推送服務(wù),主要存在這樣2種技術(shù)方案:
(1)長(zhǎng)連接方案。長(zhǎng)連接是指客戶端與服務(wù)器之間維護(hù)一個(gè)TCP長(zhǎng)連接,當(dāng)服務(wù)器有數(shù)據(jù)時(shí),通過該連接實(shí)時(shí)將數(shù)據(jù)推送到客戶端,即所謂的Push。TCP連接通過發(fā)送心跳包的方式保持連接存在,心跳間隔通常設(shè)定為10到30分鐘,在Android客戶端發(fā)起心跳時(shí)耗電稍多,但在心跳間隔期間耗電極少,所以總體上看TCP長(zhǎng)連接方式實(shí)現(xiàn)的推送服務(wù)不僅耗電少而且實(shí)時(shí)性很高[9]。
(2)開源解決方案?;赬MPP(可擴(kuò)展通訊和表示協(xié)議)的開源項(xiàng)目androidopn[10]是一種常用的開源方案。但由于XMPP的協(xié)議體是基于XML的,所以較為冗余,對(duì)于流量和電量敏感的手機(jī)客戶端而言,該方案并不是最佳選擇。
綜合考慮上述2種方案,長(zhǎng)連接方案的性能最佳,但自行實(shí)現(xiàn)該方案需要設(shè)計(jì)一個(gè)長(zhǎng)連接服務(wù)器,該服務(wù)器需要維護(hù)與所有客戶端的連接,當(dāng)客戶端數(shù)目過大時(shí)服務(wù)器的設(shè)計(jì)是一個(gè)很大的挑戰(zhàn)。注意到目前出現(xiàn)一些第三方推送服務(wù)供應(yīng)商,如國(guó)外的Parse[11],國(guó)內(nèi)的極光推送[12]等。分析它們的技術(shù)原理,都是通過心跳包的方式使得網(wǎng)絡(luò)環(huán)境復(fù)雜的移動(dòng)客戶端和服務(wù)器保持TCP長(zhǎng)連接,從而提供穩(wěn)定可靠的推送服務(wù)。在本系統(tǒng)中,為節(jié)約成本、快速開發(fā),使用了極光推送的服務(wù)進(jìn)行氣象無(wú)線傳感網(wǎng)內(nèi)預(yù)警信息的推送。
具體的工作流程如圖3所示。為使用極光推送服務(wù),Android客戶端需要加入極光推送的Android SDK,即1個(gè)庫(kù)文件,借助這個(gè)庫(kù)文件,客戶端可以與極光云推送服務(wù)器保持較為穩(wěn)定的長(zhǎng)連接,其內(nèi)部通過心跳包機(jī)制實(shí)現(xiàn)跳線重連。在本系統(tǒng)的自建服務(wù)器中,通過數(shù)據(jù)收發(fā)模塊過濾下層網(wǎng)絡(luò)傳來(lái)的傳感器數(shù)據(jù),第一時(shí)間檢測(cè)到預(yù)警信息并轉(zhuǎn)交給推送服務(wù)模塊。推送服務(wù)模塊收到預(yù)警消息后將消息生成統(tǒng)一的JSON格式,然后通過HTTP請(qǐng)求調(diào)用極光推送遠(yuǎn)程API將消息推送出去,數(shù)秒鐘之內(nèi)Android客戶端用戶就能收到Notification形式的預(yù)警信息。
在本文提出的無(wú)線傳感器網(wǎng)絡(luò)監(jiān)測(cè)系統(tǒng)層次結(jié)構(gòu)中,應(yīng)用層位于最上層,是指可視化的傳感網(wǎng)監(jiān)測(cè)、管理客戶端,提供用戶交互界面。區(qū)別于常見的Web管理客戶端,該項(xiàng)目中的客戶端是基于Android平臺(tái)的原生應(yīng)用,其主要功能結(jié)構(gòu)如圖4所示。
圖4 中Android客戶端主要分成5個(gè)模塊,體現(xiàn)在用戶界面上是5個(gè)選項(xiàng)卡,每個(gè)模塊可細(xì)分出各個(gè)功能類別,詳細(xì)說明如下:
(1)氣象預(yù)報(bào)模塊,即首頁(yè)選項(xiàng)卡。該模塊提供了氣象預(yù)報(bào)服務(wù),通過政府氣象部門的Web服務(wù)提供全國(guó)各大城市7天天氣預(yù)報(bào)查詢功能。借助于Android的基站、WIFI或GPS定位,可自動(dòng)識(shí)別當(dāng)前所在城市。該模塊還提供了查看當(dāng)前傳感網(wǎng)內(nèi)氣象數(shù)據(jù)的功能。此外,借助于各大社交網(wǎng)站提供的API,可以方便的將天氣預(yù)報(bào)或傳感網(wǎng)氣象數(shù)據(jù)分享到微博等平臺(tái)。
(2)歷史數(shù)據(jù)模塊,即歷史選項(xiàng)卡。該模塊提供傳感器節(jié)點(diǎn)歷史數(shù)據(jù)查詢功能,用戶選擇節(jié)點(diǎn)編號(hào)、傳感器類型和時(shí)間段條件后,客戶端向Web服務(wù)器提交查詢請(qǐng)求,客戶端得到返回的JSON數(shù)據(jù)后,將其解析并以列表和圖表的形式展示給用戶。其中繪制圖表時(shí),使用了開源的Android圖表繪制庫(kù) AChartEngine[13]。
(3)節(jié)點(diǎn)管理模塊,即管理選項(xiàng)卡。該模塊提供了節(jié)點(diǎn)狀態(tài)管理功能和動(dòng)態(tài)路由拓?fù)鋱D查看功能。其中節(jié)點(diǎn)狀態(tài)管理包括了更新節(jié)點(diǎn)的采樣頻率和工作狀態(tài),同時(shí)在節(jié)點(diǎn)現(xiàn)場(chǎng)借助于Android手機(jī)精準(zhǔn)的GPS定位可確定該節(jié)點(diǎn)的GPS坐標(biāo)并導(dǎo)入數(shù)據(jù)庫(kù)。
(4)地圖服務(wù)模塊,即地圖選項(xiàng)卡。借助于第三方地圖服務(wù),可方便地在地圖上標(biāo)注出每個(gè)傳感器節(jié)點(diǎn)的地理位置。點(diǎn)擊地圖上的節(jié)點(diǎn)標(biāo)記,可以彈出氣泡對(duì)話框顯示出當(dāng)前節(jié)點(diǎn)所包含的傳感器類別以及最新的傳感器數(shù)據(jù)。同時(shí)借助于GPS定位追蹤功能,可方便的到達(dá)無(wú)線傳感器網(wǎng)絡(luò)部署現(xiàn)場(chǎng)找到對(duì)應(yīng)的節(jié)點(diǎn)。
(5)應(yīng)用配置模塊,即設(shè)置選項(xiàng)卡。該模塊主要包括了對(duì)客戶端的一些配置功能,包括:管理用戶賬號(hào)、配置服務(wù)器地址、開關(guān)預(yù)警推送、客戶端更新和反饋意見等。
如上所述,借助于服務(wù)平臺(tái)層提供的Restful Web服務(wù)和WebSocket實(shí)時(shí)通信服務(wù),該Android客戶端實(shí)現(xiàn)了路由拓?fù)湫畔⒄故?、傳感器信息查詢和?jié)點(diǎn)控制等基本功能。同時(shí),借助于第三方推送服務(wù),通過服務(wù)平臺(tái)層的推送服務(wù)模塊,實(shí)現(xiàn)了預(yù)警信息即時(shí)推送功能。
按照如圖1所示的系統(tǒng)體系結(jié)構(gòu)組件氣象無(wú)線傳感器網(wǎng)絡(luò)監(jiān)測(cè)系統(tǒng),整個(gè)監(jiān)測(cè)網(wǎng)絡(luò)部署在室外環(huán)境中。系統(tǒng)具體包括18個(gè)傳感器節(jié)點(diǎn)及6個(gè)附加傳感器,1個(gè)網(wǎng)關(guān),1個(gè)系統(tǒng)服務(wù)平臺(tái)和1個(gè)Android客戶端。
其中18個(gè)傳感器節(jié)點(diǎn)為基于CC2530的自行設(shè)計(jì)節(jié)點(diǎn)(如圖5(a)所示),基于TinyOS操作系統(tǒng)組成監(jiān)測(cè)網(wǎng)絡(luò)。節(jié)點(diǎn)電路板的設(shè)計(jì)可根據(jù)需求添加貼片式的溫度、濕度和光照和氣壓傳感器,只需燒錄對(duì)應(yīng)的驅(qū)動(dòng)程序即可正常工作。這18個(gè)傳感器節(jié)點(diǎn)中的2個(gè)節(jié)點(diǎn)作為匯聚節(jié)點(diǎn),它們采用太陽(yáng)能蓄電池直流供電系統(tǒng)作為電源,搭載了功耗較高的工業(yè)級(jí)傳感器,包括了風(fēng)速、風(fēng)向、溫濕度、氣壓和雨量傳感器。
網(wǎng)關(guān)為基于ARM 6410的嵌入式設(shè)備 (如圖5(b)所示),采用Linux操作系統(tǒng),通過串口 (RS232)接收匯聚節(jié)點(diǎn)傳來(lái)的數(shù)據(jù)包,并通過3G、WIFI上傳到服務(wù)器。
系統(tǒng)服務(wù)平臺(tái)部署在一臺(tái)Windows Server 2008服務(wù)器上。其中數(shù)據(jù)收發(fā)模塊和推送服務(wù)模塊采用C#技術(shù)實(shí)現(xiàn),數(shù)據(jù)庫(kù)采用MySQL開源數(shù)據(jù)庫(kù)。數(shù)據(jù)服務(wù)模塊采用Java語(yǔ)言,通過MyEclipse、Jetty和Jersey技術(shù)構(gòu)建RESTful Web服務(wù)。
Android客戶端基于Google Android SDK (system development kit),采用Java語(yǔ)言編寫實(shí)現(xiàn),已在三星i9300,Google Nexus 4等多部手機(jī)上安裝調(diào)試成功。圖6展示了Android客戶端部分功能效果。如圖6(a)所示,用戶可以給定條件,查詢傳感器節(jié)點(diǎn)的歷史氣象數(shù)值。當(dāng)用戶點(diǎn)擊右上角的查詢按鈕后,客戶端根據(jù)請(qǐng)求條件向Web服務(wù)器發(fā)起HTTP請(qǐng)求,從而得到對(duì)應(yīng)的歷史數(shù)據(jù)集,然后生成表格展示給用戶。如圖6(b)所示,借助于第三方地圖服務(wù),用戶可以隨時(shí)查看傳感器節(jié)點(diǎn) (圖中氣泡狀標(biāo)記)部署的位置以及自身 (實(shí)心圓點(diǎn)標(biāo)記)所處位置。打開該地圖選項(xiàng)卡后,客戶端后臺(tái)就與服務(wù)平臺(tái)層的數(shù)據(jù)服務(wù)模塊保持了WebSocket實(shí)時(shí)通信,點(diǎn)擊傳感器節(jié)點(diǎn)氣泡標(biāo)記,就會(huì)彈出顯示該節(jié)點(diǎn)的詳細(xì)信息。
本文以氣象無(wú)線傳感器網(wǎng)絡(luò)為應(yīng)用背景,提出了分層次的監(jiān)測(cè)系統(tǒng)結(jié)構(gòu),并根據(jù)應(yīng)用需求,設(shè)計(jì)和實(shí)現(xiàn)了可視化的監(jiān)測(cè)、管理系統(tǒng)。其中,感知層的物理感知設(shè)備,即傳感器節(jié)點(diǎn)負(fù)責(zé)監(jiān)測(cè)環(huán)境狀態(tài)并將采集到的數(shù)據(jù)包以多跳路由的方式通過匯聚節(jié)點(diǎn)、網(wǎng)關(guān) (接入層)上傳到服務(wù)器(服務(wù)平臺(tái)層)。服務(wù)器端通過構(gòu)建REST風(fēng)格的 Web服務(wù)、穩(wěn)定的WebSocket實(shí)時(shí)通信服務(wù)等,為Android客戶端 (應(yīng)用層)的可視化數(shù)據(jù)展示提供了穩(wěn)定可靠的數(shù)據(jù)源。同時(shí),利用服務(wù)器端的推送服務(wù)模塊和第三方推送服務(wù),Android客戶端實(shí)現(xiàn)了高效的預(yù)警信息推送功能。本監(jiān)測(cè)系統(tǒng)尚處于原型開發(fā)階段,有些功能仍需完善,如推送功能依賴于第三方服務(wù),后續(xù)工作將考慮自行開發(fā)推送服務(wù)器。此外,考慮提高系統(tǒng)的可擴(kuò)展性,以滿足不同的應(yīng)用場(chǎng)景。
[1]Jennifer Yick,Biswanath Mukherjee,Dipak Ghosal.Wireless sensor network survey [J].Computer Networks,2008,52(12):2292-2330.
[2]Francisco G Montoya,Julio Gómez,Alejandro Cama,et al.A monitoring system for intensive agriculture based on mesh networks and the Android system [J].Computers and Electronics in Agriculture,2013,99:14-20.
[3]Anthony Marcus,Mihaela Cardei,Ionut Cardei,et al.A pattern for Web-based WSN monitoring [J].Journal of Communications,2011,6 (5):393-399.
[4]LI Ang.Designing and implementation of RESTful workflow middleware[J].Computer Engineering and Design,2012,33(9):3455-3459 (in Chinese).[李昂.REST架構(gòu)工作流中間件設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33 (9):3455-3459.]
[5]CHENG Xiaofei.Research and design of Web Services [D].Wuhan:Wuhan University of Technology,2010:18-19 (in Chinese).[程小飛.基于REST架構(gòu)的 Web Services的研究與設(shè)計(jì) [D].武漢:武漢理工大學(xué),2010:18-19.]
[6]JIANG Fengyan,DUAN Huichuan.Application research of WebSocket technology on Web tree component[C]//IEEE International Symposium on Information Technologies in Medicine and Education,2012:889-892.
[7]Tavendo.Autobahn Android [CP/OL].[2013-10-25].https://github.com/tavendo/AutobahnAndroid.
[8]WANG Kefeng.The design and implementation of information push and management system based on Android [D].Dalian:Dalian University of Technology,2012:5-6 (in Chinese).[王克峰.基于Android的信息推送管理系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)[D].大連:大連理工大學(xué),2012:5-6]
[9]SHAO Xiaozhe,WU Guoquan,WEI Jun,et al.Design and implementation of messaging service for mobile platform [J].Computer Engineering & Science,2013,35 (9):78-82 (in Chinese).[邵小哲,吳國(guó)全,魏峻,等.面向移動(dòng)平臺(tái)的消息通訊服務(wù)設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)工程與科學(xué),2013,35(9):78-82.]
[10]Androidpn[CP/OL].[2013-10-25].http://sourceforge.net/projects/androidpn/.
[11]Parse [EB/OL].[2013-10-25].https://www.parse.com/.
[12]JPush [EB/OL].[2013-10-25].https://www.jpush.cn/(in Chinese).[極光推送[EB/OL].[2013-10-25].https://www.jpush.cn/.
[13]A Chart Engine[CP/OL].[2013-10-25].https://code.google.com/p/achartengine/.