吳 宇
(復(fù)旦大學(xué)軟件學(xué)院 上海 200433)
在過(guò)去的幾年中,物聯(lián)網(wǎng)得到了快速的發(fā)展[1],因其涉及的領(lǐng)域廣,統(tǒng)一的設(shè)備通信標(biāo)準(zhǔn)尚未建立,從而涌現(xiàn)了多種物聯(lián)網(wǎng)中間件來(lái)屏蔽底層設(shè)備的異構(gòu)性[2-4]。與此同時(shí),智能家居[5]和深度學(xué)習(xí)[6]的流行增加了對(duì)智能家居領(lǐng)域具備數(shù)據(jù)服務(wù)功能的中間件需求。
市面上已經(jīng)存在一些可供用戶使用的中間件,但大都集中在健康、醫(yī)療領(lǐng)域[7-9],較少涉及到智能家居領(lǐng)域,而提供通用業(yè)務(wù)相關(guān)的數(shù)據(jù)服務(wù)[10-11]更是少有。
因此,本文調(diào)研了已有中間件并借鑒其特點(diǎn)。文獻(xiàn)[12]為減少數(shù)據(jù)傳輸?shù)难舆t將云計(jì)算結(jié)合到中間件中,但其非常依賴于網(wǎng)絡(luò)的穩(wěn)定性,而物聯(lián)網(wǎng)場(chǎng)景下往往存在資源受限的設(shè)備和環(huán)境。文獻(xiàn)[13]給出了名為服務(wù)系統(tǒng)的架構(gòu),闡述了其框架組成并提出了物聯(lián)網(wǎng)、服務(wù)互聯(lián)網(wǎng)、業(yè)務(wù)互聯(lián)網(wǎng)和數(shù)據(jù)互聯(lián)網(wǎng)之間的關(guān)聯(lián)關(guān)系,強(qiáng)調(diào)了網(wǎng)絡(luò)、業(yè)務(wù)與數(shù)據(jù)之間的緊密聯(lián)系,這是一個(gè)啟發(fā)性的概念。文獻(xiàn)[14]提出并討論了將中間件分為兩層的想法,將存儲(chǔ)與交互分離。文獻(xiàn)[15]通過(guò)動(dòng)態(tài)重新配置資源的方法來(lái)解決智能交通領(lǐng)域中異構(gòu)系統(tǒng)和資源約束的問(wèn)題。文獻(xiàn)[16]通過(guò)為開(kāi)發(fā)者預(yù)留插件接口使得其中間件可以作用于資源受限的移動(dòng)設(shè)備。文獻(xiàn)[17]的中間件集成了在線社交網(wǎng)絡(luò)和物理上下文數(shù)據(jù)流,減少了開(kāi)發(fā)社交感應(yīng)應(yīng)用程序所需的編程工作量,具有良好的適用性和針對(duì)性,這也是本文的設(shè)計(jì)目標(biāo)??紤]物聯(lián)網(wǎng)數(shù)據(jù)服務(wù)的趨勢(shì)[18]及中間件模型的設(shè)計(jì)思路[19],本文設(shè)計(jì)并實(shí)現(xiàn)了智能家居場(chǎng)景下的通用數(shù)據(jù)服務(wù)中間件。連接到該中間件的每個(gè)設(shè)備會(huì)在系統(tǒng)中被抽象為對(duì)應(yīng)的虛擬實(shí)體模型,虛擬實(shí)體封裝了設(shè)備提供的所有服務(wù)并向外提供統(tǒng)一的接口,以供上層應(yīng)用程序調(diào)用。實(shí)體池被用來(lái)存儲(chǔ)、管理和維護(hù)這些虛擬實(shí)體。無(wú)用和重復(fù)的數(shù)據(jù)被該中間件過(guò)濾,以減輕系統(tǒng)壓力,提高系統(tǒng)性能。當(dāng)需要適配新的通信協(xié)議時(shí),只要注冊(cè)并生成協(xié)議適配器即可升級(jí)中間件,無(wú)須改動(dòng)底層代碼?;诒局虚g件,上層應(yīng)用無(wú)須關(guān)心物聯(lián)網(wǎng)家居場(chǎng)景下的底層設(shè)備和數(shù)據(jù)訪問(wèn)協(xié)議,只需要專(zhuān)注于相關(guān)的數(shù)據(jù)處理和對(duì)應(yīng)的業(yè)務(wù)邏輯。
該中間件的首要目標(biāo)是支持市面上常用的家居物聯(lián)網(wǎng)設(shè)備和協(xié)議,并支持動(dòng)態(tài)添加新協(xié)議和設(shè)備而無(wú)須改變上層業(yè)務(wù),同時(shí)為上層應(yīng)用提供基礎(chǔ)和穩(wěn)定的數(shù)據(jù)服務(wù)功能,例如異常值監(jiān)測(cè)、關(guān)鍵值提取等。
如圖1所示,本中間件系統(tǒng)分為三層,分別為設(shè)備控制與服務(wù)層、數(shù)據(jù)預(yù)處理層和數(shù)據(jù)服務(wù)層。新的外部設(shè)備想要連接并將數(shù)據(jù)發(fā)送到中間件,就須在協(xié)議注冊(cè)模塊中注冊(cè)其協(xié)議,以便中間件識(shí)別。
圖1 總體架構(gòu)圖
注冊(cè)的設(shè)備將數(shù)據(jù)發(fā)送到中間件時(shí),設(shè)備控制與服務(wù)層負(fù)責(zé)接收并通過(guò)輪詢已注冊(cè)協(xié)議的標(biāo)識(shí)信息(例如前綴)識(shí)別數(shù)據(jù)流的通信協(xié)議,若無(wú)法解析,則證明該協(xié)議尚未注冊(cè),拒絕接收;否則系統(tǒng)將解析出對(duì)應(yīng)的設(shè)備標(biāo)識(shí)符,與已注冊(cè)的設(shè)備進(jìn)行對(duì)比,若此數(shù)據(jù)流的源設(shè)備尚未注冊(cè),則拒絕該設(shè)備的連接并丟棄該數(shù)據(jù)包,否則,中間件在實(shí)體池中查詢對(duì)應(yīng)的設(shè)備實(shí)體是否存在。若不存在,虛擬實(shí)體將由相應(yīng)的協(xié)議適配器構(gòu)建并存入池中。進(jìn)一步,虛擬實(shí)體解析該數(shù)據(jù)流,除去不相關(guān)的元數(shù)據(jù)信息,將實(shí)體數(shù)據(jù)發(fā)送到數(shù)據(jù)預(yù)處理層,該層旨在過(guò)濾大量重復(fù)及無(wú)價(jià)值的數(shù)據(jù),并將過(guò)濾后的不同格式的數(shù)據(jù)實(shí)體轉(zhuǎn)為統(tǒng)一結(jié)構(gòu)傳至數(shù)據(jù)服務(wù)層。數(shù)據(jù)服務(wù)層可以直接調(diào)用實(shí)體池提供的服務(wù),從而控制物理設(shè)備。當(dāng)來(lái)自上層應(yīng)用程序的命令到達(dá)此層時(shí),將調(diào)用實(shí)體池封裝的設(shè)備控制服務(wù)完成設(shè)備的管理。
圖2為系統(tǒng)模塊化結(jié)構(gòu)。設(shè)備控制與服務(wù)層的核心模塊包括設(shè)備適配模塊、連接管理模塊、協(xié)議注冊(cè)模塊、適配器等。
圖2 系統(tǒng)模塊化結(jié)構(gòu)
為了屏蔽底層設(shè)備的異構(gòu)性,需要為每個(gè)異構(gòu)網(wǎng)關(guān)動(dòng)態(tài)分配一個(gè)適配器,以達(dá)到自動(dòng)適應(yīng)的目的。因此,設(shè)備適配模塊利用抽象工廠設(shè)計(jì)模式,負(fù)責(zé)查找和生產(chǎn)適配器。
許多異構(gòu)物聯(lián)網(wǎng)網(wǎng)關(guān)都會(huì)向中間件發(fā)送大量連接請(qǐng)求,因此,連接管理模塊被設(shè)計(jì)為處理這些請(qǐng)求??紤]到網(wǎng)絡(luò)的不穩(wěn)定,連接可能會(huì)斷開(kāi),該模塊設(shè)計(jì)了緩沖池機(jī)制消除了重新適應(yīng)和重新生成的過(guò)程,從而提高系統(tǒng)性能。
來(lái)自不同制造商的物理設(shè)備具有不同的數(shù)據(jù)通信協(xié)議,因此需要注冊(cè)指定的協(xié)議并將其存儲(chǔ)在協(xié)議倉(cāng)庫(kù)中,以便解析異構(gòu)設(shè)備的數(shù)據(jù)并正確封裝命令。協(xié)議注冊(cè)模塊完成該功能。
適配器用于解析異構(gòu)設(shè)備上傳的數(shù)據(jù),并將其封裝為上層的統(tǒng)一格式。類(lèi)似地,上層發(fā)送的指令將被封裝并發(fā)送到相應(yīng)的異構(gòu)設(shè)備,適配器負(fù)責(zé)處理特定網(wǎng)關(guān)的不同設(shè)備。
虛擬實(shí)體引擎模塊是中間件的核心組件。所有設(shè)備被抽象為對(duì)應(yīng)的虛擬實(shí)體模型,從而異構(gòu)設(shè)備具有統(tǒng)一的結(jié)構(gòu)和屬性,可以相互通信。虛擬實(shí)體引擎可以為連接到中間件的每個(gè)設(shè)備構(gòu)建相應(yīng)的虛擬實(shí)體。虛擬實(shí)體模型包括協(xié)議解析所需要的適配器及對(duì)應(yīng)的物理設(shè)備需要向外界暴露的接口屬性,以協(xié)助數(shù)據(jù)交換和設(shè)備發(fā)現(xiàn)。它解析異構(gòu)設(shè)備上傳的數(shù)據(jù),并將其封裝為上層的統(tǒng)一格式。類(lèi)似地,上層發(fā)送的指令將被解析并轉(zhuǎn)發(fā)至相應(yīng)的設(shè)備,完成對(duì)應(yīng)控制功能。
每個(gè)連接的設(shè)備都構(gòu)建了虛擬實(shí)體,因此系統(tǒng)中實(shí)體數(shù)量太多會(huì)影響其性能。實(shí)體池模塊被設(shè)計(jì)來(lái)動(dòng)態(tài)管理虛擬實(shí)體。該模塊集成了所有實(shí)體,并提供資源和服務(wù)列表供上層調(diào)用。
來(lái)自底層設(shè)備的所有數(shù)據(jù)都通過(guò)虛擬實(shí)體形式的實(shí)體池傳輸?shù)綌?shù)據(jù)預(yù)處理層。該層包括消息過(guò)濾和處理引擎,消息緩沖區(qū)隊(duì)列和設(shè)備狀態(tài)管理器。家居場(chǎng)景中仍涉及較多設(shè)備,且每個(gè)設(shè)備會(huì)持續(xù)感知周?chē)沫h(huán)境狀態(tài)并發(fā)送數(shù)據(jù),因此系統(tǒng)處理速度和性能無(wú)疑將成為瓶頸問(wèn)題。為了減輕系統(tǒng)壓力,本中間件將數(shù)據(jù)緩存在消息隊(duì)列中。考慮到物聯(lián)網(wǎng)場(chǎng)景下設(shè)備上傳的數(shù)據(jù)通常是低價(jià)值且冗余的,因此數(shù)據(jù)過(guò)濾模塊將從隊(duì)列中逐步提取消息并丟棄異常數(shù)據(jù),對(duì)于正常數(shù)據(jù),在警告規(guī)則文件中定義了相對(duì)應(yīng)的閾值規(guī)則,在規(guī)則之外的數(shù)據(jù)將被過(guò)濾。數(shù)據(jù)處理引擎能夠計(jì)算出一段時(shí)間內(nèi)數(shù)據(jù)的基礎(chǔ)特征信息,如平均值、最大最小值、方差等,通過(guò)這種方式為上層提供數(shù)據(jù)服務(wù)。該引擎將某段時(shí)間內(nèi)的數(shù)據(jù)基礎(chǔ)特征信息上傳至服務(wù)層以提供接口給上層應(yīng)用調(diào)用。通過(guò)上述策略,本系統(tǒng)可以向上層提供穩(wěn)定的數(shù)據(jù)服務(wù)。
中間件的執(zhí)行基于資源文件,資源文件配置了系統(tǒng)運(yùn)行時(shí)需要加載的相關(guān)配置數(shù)據(jù)。如圖3所示,中間件的資源文件包括協(xié)議描述文件、適配器描述文件、在線設(shè)備列表、數(shù)據(jù)處理規(guī)則、資源服務(wù)列表。
圖3 系統(tǒng)資源文件結(jié)構(gòu)
協(xié)議描述文件與特定的設(shè)備通信協(xié)議關(guān)聯(lián)。由于缺乏標(biāo)準(zhǔn)化的定義,因此協(xié)議具有明顯的異質(zhì)性。為了基于指定的協(xié)議解析設(shè)備數(shù)據(jù),每個(gè)協(xié)議都定義了一個(gè)協(xié)議描述文件。協(xié)議描述文件定義了協(xié)議的數(shù)據(jù)格式和相應(yīng)位置上數(shù)據(jù)的物理含義,即語(yǔ)法和語(yǔ)義。
當(dāng)網(wǎng)關(guān)首次建立與中間件的連接時(shí),系統(tǒng)將根據(jù)協(xié)議特征查詢適配器描述文件,以找到相關(guān)的適配器類(lèi)型信息,然后通過(guò)反射機(jī)制生成對(duì)應(yīng)實(shí)例。
在線設(shè)備列表維護(hù)家居環(huán)境下物理設(shè)備的聯(lián)機(jī)狀態(tài)。假設(shè)濕度傳感器連接到中間件,數(shù)據(jù)將發(fā)送到設(shè)備控制和服務(wù)層進(jìn)行解析和封裝,設(shè)備狀態(tài)管理器在處理消息緩沖區(qū)隊(duì)列中的數(shù)據(jù)時(shí)會(huì)找到此設(shè)備。然后,該設(shè)備將被添加到活動(dòng)列表中,狀態(tài)將標(biāo)記為在線。如果設(shè)備離線,其狀態(tài)將被設(shè)置為脫機(jī)。
根據(jù)傳感器所測(cè)量指標(biāo)的不同,用戶對(duì)其值的范圍約束也不同,因此不同檢測(cè)指標(biāo)具有不同的閾值規(guī)則。不同用戶對(duì)于數(shù)據(jù)處理規(guī)則的需求也不同。因此,數(shù)據(jù)處理規(guī)則文件定義了數(shù)據(jù)過(guò)濾和處理的規(guī)則,其可以與用戶綁定,也可以與檢測(cè)指標(biāo)綁定。例如,當(dāng)系統(tǒng)發(fā)現(xiàn)監(jiān)測(cè)空氣質(zhì)量傳感器的值大于規(guī)則文件所定義的閾值時(shí),向上層應(yīng)用提供了報(bào)告異常事件的接口。該規(guī)則文件還可以根據(jù)需要配置家居環(huán)境自動(dòng)化控制,只要系統(tǒng)檢測(cè)到發(fā)生異常事件,設(shè)備控制命令就會(huì)根據(jù)適配器服務(wù)和此文件中定義的參數(shù)自動(dòng)發(fā)送??紤]到不同異構(gòu)設(shè)備的數(shù)據(jù)可能具有不同的單位,因此系統(tǒng)支持單位轉(zhuǎn)換。
資源服務(wù)列表位于設(shè)備控制和服務(wù)層,它提供了可被直接調(diào)用的基礎(chǔ)設(shè)備資源服務(wù)接口。上層應(yīng)用程序調(diào)用服務(wù)接口與物理設(shè)備進(jìn)行交互。
由于網(wǎng)絡(luò)的不穩(wěn)定性,異構(gòu)設(shè)備發(fā)起的連接可能在某段時(shí)間內(nèi)經(jīng)常斷開(kāi),也就會(huì)出現(xiàn)異構(gòu)設(shè)備在短時(shí)間內(nèi)多次向中間件發(fā)起連接請(qǐng)求的情況。若不緩存相應(yīng)適配器,每次連接都將生成新的實(shí)例,浪費(fèi)大量資源,因此對(duì)于短時(shí)間內(nèi)重連的異構(gòu)設(shè)備應(yīng)分配給其原來(lái)生成的適配器。在這種需求下,本中間件構(gòu)建了適配器緩存池,用來(lái)緩存那些已成功和中間件建立起連接的物理設(shè)備所綁定的適配器實(shí)例,設(shè)備與中間件的連接斷開(kāi)后如果在短時(shí)間內(nèi)該異構(gòu)設(shè)備重新發(fā)起連接請(qǐng)求并成功建立連接,則系統(tǒng)從該緩存池中取出與該設(shè)備之前綁定的適配器實(shí)例使其繼續(xù)提供服務(wù)。
物聯(lián)網(wǎng)應(yīng)用場(chǎng)景中的設(shè)備是海量的,設(shè)備與中間件建立連接并成功匹配、生成適配器之后,會(huì)將該適配器與網(wǎng)關(guān)進(jìn)行綁定并存儲(chǔ)于內(nèi)存中。每一個(gè)物聯(lián)網(wǎng)網(wǎng)關(guān)在內(nèi)存中會(huì)有一個(gè)鍵值與其相對(duì)應(yīng),由于內(nèi)存資源有限并且稀缺,若所有適配器都常駐內(nèi)存,系統(tǒng)將會(huì)變慢甚至崩潰,而且如果物聯(lián)網(wǎng)網(wǎng)關(guān)斷線后長(zhǎng)時(shí)間沒(méi)有連接中間件,而在服務(wù)器的內(nèi)存中仍保存著其綁定的適配器是十分浪費(fèi)資源的。因此本中間件提出了計(jì)時(shí)器模型,其兩大關(guān)鍵屬性為當(dāng)前存活時(shí)間和最大存活時(shí)間。當(dāng)適配器創(chuàng)建并與設(shè)備綁定存儲(chǔ)于內(nèi)存時(shí),就啟動(dòng)該適配器的計(jì)時(shí)器,當(dāng)該計(jì)時(shí)器達(dá)到系統(tǒng)設(shè)定的閾值后將該適配器從緩存池中移除。
本中間件解決的首要問(wèn)題是兼容多種物聯(lián)網(wǎng)通信協(xié)議,使得不同廠商的感知設(shè)備、控制設(shè)備和通信設(shè)備可以在本中間件的基礎(chǔ)上互聯(lián)互通。因此,本文需要對(duì)物聯(lián)網(wǎng)設(shè)備抽象建模。
物聯(lián)網(wǎng)環(huán)境下的異構(gòu)設(shè)備根據(jù)其功能通常分為三類(lèi):感知設(shè)備、控制設(shè)備和帶有通信功能的物聯(lián)網(wǎng)網(wǎng)關(guān)。功能不同的異構(gòu)設(shè)備所具備的特征和虛擬化過(guò)程中的關(guān)鍵因素也不同。感知設(shè)備的主要功能是采集周?chē)h(huán)境指標(biāo)數(shù)據(jù),因此感知設(shè)備的虛擬化要素包含感知設(shè)備采集指標(biāo)數(shù)據(jù)的特征,指標(biāo)數(shù)據(jù)屬性應(yīng)包含指標(biāo)名稱、指標(biāo)值、采集時(shí)間以及數(shù)據(jù)單位??刂圃O(shè)備用于接收和轉(zhuǎn)發(fā)指令。轉(zhuǎn)發(fā)的指令所具備的屬性包括指令數(shù)據(jù)、指令執(zhí)行結(jié)果以及行為操作時(shí)間。物聯(lián)網(wǎng)網(wǎng)關(guān)的主要功能是作為匯聚節(jié)點(diǎn),具有兩種工作方式:接收感知設(shè)備上傳的感知數(shù)據(jù),并將該數(shù)據(jù)轉(zhuǎn)發(fā)給物聯(lián)網(wǎng)中間件;接收物聯(lián)網(wǎng)中間件下發(fā)的指令并轉(zhuǎn)發(fā)給相應(yīng)的控制設(shè)備。為了能夠?qū)ι蠈討?yīng)用提供透明化服務(wù),在尋址和下發(fā)指令的過(guò)程中需要精確定位每一個(gè)物理設(shè)備個(gè)體。
定義1統(tǒng)一資源標(biāo)識(shí)符。不同的制造商具有不同的設(shè)備代碼和標(biāo)識(shí)。在抽象虛擬化過(guò)程中,每個(gè)物理設(shè)備都需要具有唯一的標(biāo)識(shí)符。統(tǒng)一標(biāo)識(shí)符UID由廠商唯一編碼標(biāo)識(shí)和設(shè)備在該廠商中的編碼組成:
UID=CompanyCode+deviceCode
deviceCode∈CSA
(1)
式中:CSA為廠商內(nèi)部設(shè)備標(biāo)識(shí)編碼集合。
定義2虛擬實(shí)體。根據(jù)上述物聯(lián)網(wǎng)異構(gòu)設(shè)備的分類(lèi)以及統(tǒng)一資源模型的定義,將異構(gòu)物理設(shè)備被抽象為虛擬實(shí)體,涵蓋了感應(yīng)實(shí)體和控制實(shí)體的公共屬性,包括統(tǒng)一資源標(biāo)識(shí)符、設(shè)備傳感網(wǎng)內(nèi)部標(biāo)識(shí)、在線狀態(tài)以及創(chuàng)建時(shí)間。虛擬實(shí)體ve表示如下:
ve=(UID,AddrDev,Status,TimeCreated)
(2)
如圖4所示,根據(jù)設(shè)備功能可將虛擬實(shí)體分為感知實(shí)體和控制實(shí)體,它們都繼承自虛擬實(shí)體。一些傳感器同時(shí)檢測(cè)多種指標(biāo),可被分為多個(gè)虛擬實(shí)體。感知虛擬實(shí)體代表環(huán)境監(jiān)控指標(biāo),其具有額外的屬性:該虛擬感知設(shè)備對(duì)應(yīng)的物理感知設(shè)備所監(jiān)測(cè)的指標(biāo)名稱、監(jiān)測(cè)指標(biāo)的單位??刂铺摂M實(shí)體用于執(zhí)行中間件發(fā)送的指令并返回操作結(jié)果,具有控制指令、指令集和指令執(zhí)行結(jié)果的屬性。
圖4 虛擬實(shí)體層次結(jié)構(gòu)圖
通信協(xié)議包含兩部分內(nèi)容,即發(fā)送數(shù)據(jù)的結(jié)構(gòu)以及各部分結(jié)構(gòu)的數(shù)據(jù)所代表的意義?,F(xiàn)階段,物聯(lián)網(wǎng)設(shè)備廠商采用的獲取或發(fā)送數(shù)據(jù)的方式基本可分為兩類(lèi),第一類(lèi)提供明確的通信協(xié)議、數(shù)據(jù)傳輸格式與數(shù)據(jù)包具體字段含義,如DFRobot公司生產(chǎn)的溫度/濕度傳感器,該傳感器通過(guò)Intel Edison開(kāi)發(fā)板接入網(wǎng)絡(luò),使用HTTP通信協(xié)議,數(shù)據(jù)以JSON的形式傳輸,且協(xié)議明確說(shuō)明JSON中包含溫度或濕度數(shù)據(jù)字段;第二類(lèi)將所有數(shù)據(jù)交互的相關(guān)邏輯封裝為SDK,提供對(duì)應(yīng)的接口供使用者調(diào)用,如南京物聯(lián)公司的物聯(lián)網(wǎng)設(shè)備,該公司未說(shuō)明其設(shè)備的數(shù)據(jù)交互細(xì)節(jié),只是提供了C++和Java兩個(gè)版本的SDK。
針對(duì)上述兩類(lèi)不同的協(xié)議形式,分別采用不同的封裝方法。對(duì)于第一類(lèi)方式,傳入數(shù)據(jù)包的主要差異是通信協(xié)議(如HTTP、TCP等)和傳輸格式(如JSON、XML等)。中間件同時(shí)監(jiān)聽(tīng)各常用通信協(xié)議端口,監(jiān)聽(tīng)到有數(shù)據(jù)包進(jìn)入后,根據(jù)連接類(lèi)型、數(shù)據(jù)包長(zhǎng)度和數(shù)據(jù)特性搜索并匹配其對(duì)應(yīng)的協(xié)議封裝類(lèi),最后協(xié)議封裝類(lèi)需要實(shí)現(xiàn)數(shù)據(jù)提取函數(shù)。對(duì)于第二類(lèi)方式,基于代理模式調(diào)用其SDK數(shù)據(jù)解析方法并將其與第一類(lèi)協(xié)議封裝為統(tǒng)一的調(diào)用接口,從而利用Java語(yǔ)言的多態(tài)特性完成協(xié)議。
協(xié)議解析模塊的結(jié)構(gòu)圖如圖5所示,協(xié)議解析采用“單例+策略”的設(shè)計(jì)模式。雖然各類(lèi)異構(gòu)設(shè)備的協(xié)議互不相同,但協(xié)議本身較為穩(wěn)定,在短時(shí)間內(nèi)不會(huì)發(fā)生變化,因此在實(shí)例化某一協(xié)議封裝類(lèi)后,基本不需要在運(yùn)行時(shí)有任何調(diào)整。此外,接入中間件平臺(tái)的某些設(shè)備可能采用相同的協(xié)議,可以提高代碼復(fù)用性,避免系統(tǒng)資源的浪費(fèi)。策略模式是將多組算法封裝起來(lái),在運(yùn)行時(shí)可以根據(jù)需要相互替代,類(lèi)似于面向切片編程(Aspect Oriented Programming,AOP)。協(xié)議解析就是一個(gè)切片,在探測(cè)到接入設(shè)備的協(xié)議類(lèi)型后,中間件平臺(tái)使用策略模式將相應(yīng)協(xié)議封裝類(lèi)單例傳入?yún)f(xié)議加載器進(jìn)行解析。
圖5 協(xié)議解析流程
當(dāng)中間件平臺(tái)需要兼容新的協(xié)議時(shí),需要實(shí)現(xiàn)協(xié)議接口成為新的封裝類(lèi),寫(xiě)入?yún)f(xié)議配置文件后在運(yùn)行時(shí)利用反射機(jī)制得到相應(yīng)解析實(shí)例。而策略模式使得協(xié)議封裝類(lèi)和協(xié)議加載類(lèi)解耦,新添加的協(xié)議封裝類(lèi)可以單獨(dú)進(jìn)行單元測(cè)試后再加入中間件平臺(tái)部署。該過(guò)程不會(huì)影響中間件平臺(tái)的正常運(yùn)行,實(shí)現(xiàn)了動(dòng)態(tài)注冊(cè)。
如圖6所示,當(dāng)外部設(shè)備將數(shù)據(jù)發(fā)送至中間件,首先遍歷緩存,根據(jù)握手包頭識(shí)別其通信協(xié)議,若不能識(shí)別則拒絕連接,否則識(shí)別后判斷該通信協(xié)議在協(xié)議倉(cāng)庫(kù)中是否已經(jīng)注冊(cè)。如果已注冊(cè),則根據(jù)協(xié)議類(lèi)型創(chuàng)建相應(yīng)的協(xié)議適配器解析該數(shù)據(jù)包,得到發(fā)送方設(shè)備標(biāo)識(shí)符以及數(shù)據(jù)實(shí)體。若該設(shè)備編號(hào)已注冊(cè)至系統(tǒng)配置文件,則將解析后的數(shù)據(jù)流輸出到上層應(yīng)用,否則,系統(tǒng)將丟棄該設(shè)備發(fā)送的數(shù)據(jù)。
圖6 協(xié)議適配流程
在本中間件系統(tǒng)中,通過(guò)為每一種類(lèi)型的協(xié)議創(chuàng)建協(xié)議描述文件并綁定對(duì)應(yīng)的適配器來(lái)完成數(shù)據(jù)包解析工作,適配器由服務(wù)提供商接口(SPI)和協(xié)議適配引擎組成。指令可以通過(guò)SPI發(fā)送到異構(gòu)設(shè)備。設(shè)計(jì)SPI的目的是使系統(tǒng)的其他部分可以方便地調(diào)用接口。SPI分為查詢接口和控制接口。查詢接口包括獲取某設(shè)備的一個(gè)指標(biāo)、獲取某設(shè)備的所有指標(biāo)、獲取某網(wǎng)關(guān)下所有設(shè)備的所有指標(biāo);控制接口可根據(jù)不同類(lèi)型的設(shè)備的不同的復(fù)雜程度分為通用的打開(kāi)設(shè)備、關(guān)閉設(shè)備,以及個(gè)性化的報(bào)警、設(shè)置設(shè)備等。
物聯(lián)網(wǎng)數(shù)據(jù)具有以下四個(gè)特征:傳感器類(lèi)型指標(biāo)及通信協(xié)議不同帶來(lái)的異構(gòu)性;精確及時(shí)感知物理世界狀態(tài)帶來(lái)的數(shù)據(jù)海量性;采樣頻率較高帶來(lái)的數(shù)據(jù)冗余性;某些業(yè)務(wù)如安防所帶來(lái)的數(shù)據(jù)實(shí)時(shí)性和連續(xù)性。
物聯(lián)網(wǎng)中的數(shù)據(jù)由感知設(shè)備采集,是某物理空間中特定環(huán)境指標(biāo)的狀態(tài)體現(xiàn);感知設(shè)備的一次數(shù)據(jù)采集包含一個(gè)或多個(gè)環(huán)境指標(biāo)數(shù)值;感知設(shè)備部署在物理空間中,由唯一的設(shè)備控制服務(wù)器向外傳遞感知信息。在開(kāi)環(huán)的網(wǎng)絡(luò)環(huán)境中,描述一個(gè)物理空間通用的方式是提供該環(huán)境所處地理位置的客觀地址(如國(guó)家、城市、街道、門(mén)牌號(hào)等)和GPS經(jīng)緯度精確數(shù)據(jù),或使用GS1(Globe Standard 1)的全球位置編碼GLN(Global Location Number)標(biāo)識(shí)物理地址和法人實(shí)體。GLN標(biāo)定的物理空間可大可小,可以是一張桌子、一個(gè)車(chē)廂,在供應(yīng)鏈中,商品流轉(zhuǎn)的空間有加工車(chē)間、供應(yīng)商倉(cāng)庫(kù)、零售店專(zhuān)柜等;家居場(chǎng)景中的空間有客廳、盥洗室等。
定義3物理空間。針對(duì)時(shí)效性要求高的實(shí)時(shí)感知數(shù)據(jù)處理,以房間的大小為粒度,使用一個(gè)GLN去標(biāo)定一個(gè)感知物理空間ci:
ci∈C=〈id(ci),A(ci)〉
(3)
式中:C代表了感知信息系統(tǒng)中注冊(cè)的物理空間集合;id(ci)代表物理空間ci的唯一標(biāo)識(shí)符,id(ci)∈CID,是GS1的全球位置編碼GLN(Global Location Number);A(ci)代表物理空間具有的屬性集合。A(ci)形式化定義為:
A(ci)?CA={a1,a2,…,an}
(4)
例如,上海愛(ài)森肉食品加工廠冷鮮倉(cāng)庫(kù)SAICWareHouse的形式化定義是:SAICWareHouse=〈6937938310579.{(city,SH),(country,China),(longtitude,121.64),(latitude,30.87)}〉,其中:6937938310579代表SAICWareHouse在物聯(lián)網(wǎng)感知信息系統(tǒng)中的唯一標(biāo)識(shí)符,與全球位置編碼GLN對(duì)應(yīng);屬性列表代表所在城市是上海,所屬國(guó)家是中國(guó),經(jīng)度是121度64分,緯度是30度87分。
定義4感知設(shè)備dj。感知網(wǎng)絡(luò)中的設(shè)備分為有通信功能和無(wú)通信功能兩種。具有通信功能的設(shè)備一般指感知網(wǎng)絡(luò)的網(wǎng)關(guān)和具有直接與設(shè)備控制服務(wù)器通信功能的傳感器。感知設(shè)備常規(guī)屬性有設(shè)備地址、設(shè)備監(jiān)測(cè)指標(biāo)等。dj表示為:
dj∈D=〈id(dj)∈DID,c(dj)∈C,A(dj)〉
(5)
式中:D代表了感知信息系統(tǒng)中感知設(shè)備的集合;id(dj)代表感知設(shè)備dj的唯一標(biāo)識(shí)符;c(dj)代表設(shè)備dj部署物理空間的唯一標(biāo)識(shí)符;A(dj)代表感知設(shè)備具有的屬性集合,其形式化定義與物理空間屬性集合相似。
定義5觀測(cè)ok。一次觀測(cè)包含了信息源標(biāo)識(shí)、觀測(cè)時(shí)間、觀測(cè)指標(biāo)數(shù)據(jù)列表。ok表示為:
ok=〈d(ok)∈D,timestamp,P(ok)〉
(6)
式中:d(ok)代表觀測(cè)ok數(shù)據(jù)來(lái)源傳感器的編碼,即上文中的統(tǒng)一資源標(biāo)識(shí)符;timestamp代表該次觀測(cè)ok發(fā)生的時(shí)間;P(ok)代表觀測(cè)ok包含的環(huán)境指標(biāo)數(shù)據(jù)列表。P(ok)的形式化定義為:
P(ok)={p1(ok),p2(ok),…,pn(ok)}
(7)
pm(ok)被定義為觀測(cè)ok的第m個(gè)環(huán)境指標(biāo),n是觀測(cè)ok的總環(huán)境指標(biāo)數(shù),它的形式化公式為:
pm(ok)=〈typeph,typevalue,value,unit〉
(8)
式中:typeph代表現(xiàn)象的類(lèi)型,如溫度、濕度、光照、房門(mén)開(kāi)關(guān)等;typevalue代表數(shù)據(jù)類(lèi)型,如浮點(diǎn)、整數(shù)、字符串等;value代表環(huán)境指標(biāo)值;unit代表環(huán)境指標(biāo)值單位,是可選項(xiàng),有連續(xù)取值的環(huán)境指標(biāo)需說(shuō)明采樣值單位,離散取值的環(huán)境指標(biāo)是非必需項(xiàng)。
定義6現(xiàn)象事件PE。一個(gè)觀測(cè)進(jìn)入接入分析層之后把環(huán)境指標(biāo)數(shù)據(jù)列表拆分成一個(gè)或多個(gè)PE:
PE=〈UID,timestamp,typeph,typevalue,value,unit〉
(9)
式中:UID是PE數(shù)據(jù)來(lái)源傳感器的統(tǒng)一資源標(biāo)識(shí)符編碼;timestamp是該次現(xiàn)象采集時(shí)間;typeph代表現(xiàn)象類(lèi)型;typevalue表示數(shù)據(jù)類(lèi)型;value是現(xiàn)象采樣值;unit是采樣值對(duì)應(yīng)的單位,是可選項(xiàng)。
物聯(lián)網(wǎng)感知數(shù)據(jù)的值有兩種形式,一種是理論上取值范圍是實(shí)數(shù)域的連續(xù)值,如溫濕度;另一種則是離散值,如標(biāo)識(shí)房門(mén)開(kāi)關(guān)狀態(tài)的布爾值。形式的不同將影響后續(xù)數(shù)據(jù)處理方法數(shù)據(jù)窗口的選擇,以及劃分上下文的判斷指標(biāo),如連續(xù)值需要單位相同而離散值不包含單位屬性。
3.2.1異常值監(jiān)測(cè)
異常值監(jiān)測(cè)分為以下五步:
Step1在錄入物理空間信息時(shí),可以設(shè)置該物理空間待監(jiān)測(cè)的指標(biāo)類(lèi)型與正常值區(qū)間。基于策略模式,通過(guò)配置文件設(shè)置不同檢測(cè)指標(biāo)所對(duì)應(yīng)的監(jiān)測(cè)規(guī)則,包括數(shù)據(jù)源設(shè)備編碼、數(shù)據(jù)對(duì)應(yīng)指標(biāo)類(lèi)型、數(shù)據(jù)區(qū)間、數(shù)據(jù)單位。
Step2將環(huán)境感知數(shù)據(jù)封裝成上文定義的觀測(cè)。該步驟將數(shù)據(jù)流中雜亂無(wú)章的混合數(shù)據(jù)提取成多條細(xì)粒度的觀測(cè)數(shù)據(jù),即某個(gè)空間中用于監(jiān)測(cè)同一指標(biāo)的所有傳感器的數(shù)據(jù)。
Step3將觀測(cè)拆分為多個(gè)現(xiàn)象事件。在Step 2的基礎(chǔ)上進(jìn)一步細(xì)化數(shù)據(jù),即將監(jiān)測(cè)空間中某一指標(biāo)的數(shù)據(jù)綁定到對(duì)應(yīng)的傳感器。
Step4建立基于時(shí)間的數(shù)據(jù)窗口,根據(jù)屬性將現(xiàn)象劃分為不同的上下文。根據(jù)不同算力的機(jī)器對(duì)數(shù)據(jù)窗口設(shè)置不同的時(shí)間長(zhǎng)度,如設(shè)置長(zhǎng)度為三分鐘的基于時(shí)間的滑動(dòng)窗口,則每三分鐘更新窗口內(nèi)數(shù)據(jù)從而重新匹配監(jiān)測(cè),在此三分鐘內(nèi)到達(dá)的PE進(jìn)入該窗口,并依據(jù)數(shù)據(jù)來(lái)源設(shè)備的編碼、現(xiàn)象類(lèi)型(監(jiān)測(cè)的指標(biāo))、數(shù)據(jù)類(lèi)型及數(shù)據(jù)單位(離散數(shù)據(jù)不包含)來(lái)劃分上下文。
Step5篩選同一上下文中的數(shù)據(jù)。通過(guò)Step 4的劃分得到了傳感器在某一時(shí)間窗口的數(shù)據(jù),根據(jù)傳感器設(shè)備編碼可以得到其所監(jiān)測(cè)的物理空間編碼,可以得到該空間規(guī)定的指標(biāo)值的正常區(qū)間,從而判斷當(dāng)前值是否為異常值??紤]到網(wǎng)絡(luò)的不穩(wěn)定性,單次異常值并不具有代表性,因此需要考量時(shí)間窗口中異常值出現(xiàn)的次數(shù),而不同的業(yè)務(wù)對(duì)異常值出現(xiàn)的頻率有不同的容忍程度,因此通過(guò)配置文件來(lái)配置數(shù)據(jù)窗口的時(shí)間長(zhǎng)度和異常值次數(shù)的示警下限。
3.2.2基于粒子群算法的關(guān)鍵值提取
關(guān)鍵值提取是在一個(gè)取值變化頻率較低或者變化幅度較小的數(shù)據(jù)列表中提取在相鄰區(qū)間內(nèi)具有顯著變化的數(shù)值,即數(shù)據(jù)抽稀。物聯(lián)網(wǎng)感知環(huán)境下通過(guò)為數(shù)據(jù)抽稀設(shè)置一個(gè)閾值,以數(shù)據(jù)列表的第一項(xiàng)作為第一個(gè)關(guān)鍵值,與該關(guān)鍵值之間差值的絕對(duì)值小于閾值的數(shù)據(jù)項(xiàng)將會(huì)被視為冗余項(xiàng),大于閾值的數(shù)據(jù)項(xiàng)會(huì)成為新的關(guān)鍵值。為了評(píng)估關(guān)鍵值提取的精度和去冗余度,我們使用幅值誤差A(yù)E(Amplitude Error)和壓縮率CR(Compression Rate)分別量化數(shù)據(jù)去冗余的精確度和去冗余效率。
定義7幅值誤差。實(shí)際采集數(shù)據(jù)序列與去冗余壓縮后恢復(fù)生成的序列相似度的衡量指標(biāo)。AE數(shù)值越小,表示數(shù)據(jù)壓縮后恢復(fù)的精確度越高。有實(shí)際序列IList={u1,u2,…,un},其中ui是IList的第i項(xiàng);有恢復(fù)序列RList={v1,v2,…,vn},其中vi是RList的第i項(xiàng)。RList和IList的幅值誤差A(yù)E計(jì)算公式如下:
(10)
壓縮率CR等于壓縮后序列元素?cái)?shù)與實(shí)際序列的比值,CR越小,壓縮率越高。
關(guān)鍵值提取的目標(biāo)是在盡可能保持?jǐn)?shù)據(jù)高精度還原環(huán)境狀態(tài)的條件下減少數(shù)據(jù)冗余,也就是同時(shí)獲得AE和CR的最小值。然而AE和CR是一對(duì)矛盾的指標(biāo)。如果保留實(shí)際序列的所有數(shù)據(jù),實(shí)際序列等價(jià)于壓縮序列,AE取得最小值0,而此時(shí)CR達(dá)到最大值1;若拋棄實(shí)際序列中所有數(shù)值,壓縮序列為空,CR取得最小值0,而AE則是最大值。因此,本文引入混合粒子群算法來(lái)動(dòng)態(tài)尋找關(guān)鍵值提取閾值,以平衡兩項(xiàng)指標(biāo),得到最優(yōu)解閾值,即在保持高精度的情況下,使壓縮效率最大化。
在算法中,實(shí)際序列的第一個(gè)值被保留在壓縮序列中,作為第一個(gè)參照值,序列中的下一項(xiàng)與參照值比較。只有與參照值之間差值絕對(duì)值超過(guò)該閾值的項(xiàng)才會(huì)被保留在壓縮序列中,并成為新的參照值。關(guān)鍵值提取分為如下7步:
Step1初始化粒子群。根據(jù)設(shè)置初始化大小為m、搜索范圍為[xmin,xmax]的兩個(gè)粒子群AEP={AEP1,AEP2,…,AEPm}和CRP={CRP1,CRP2,…,CRPm}。xmin是粒子群搜索的最小閾值,xmax是粒子群搜索的最大閾值,[xmin,xmax]區(qū)間中每一個(gè)閾值點(diǎn)即為粒子可能到達(dá)的一個(gè)位置點(diǎn)。粒子群AEP以找到使得幅值誤差A(yù)E最小的閾值為目標(biāo),CRP以找到使得壓縮率CR最小的閾值為目標(biāo),兩個(gè)粒子群的優(yōu)化函數(shù)分別為其定義的計(jì)算公式。
Step2找出兩粒子群的全局最優(yōu)解gbest。對(duì)于粒子群AEP每一個(gè)粒子,使用它們的當(dāng)前位置作為閾值生成一個(gè)壓縮序列,同時(shí)以時(shí)間戳為橫坐標(biāo),現(xiàn)象值為縱坐標(biāo),以每一個(gè)壓縮序列中的數(shù)據(jù)項(xiàng)的(timestamp,value)作為坐標(biāo)系中的點(diǎn),依照時(shí)間的先后順序,用直線連接坐標(biāo)系中相鄰的兩點(diǎn),連線上縱坐標(biāo)的值即為該壓縮序列所構(gòu)成的恢復(fù)序列的現(xiàn)象值。使用恢復(fù)序列與實(shí)際序列作為式(10)的兩個(gè)輸入序列,計(jì)算AEP中每一個(gè)粒子的優(yōu)化函數(shù)值A(chǔ)E,選擇獲得最小AE值的粒子當(dāng)前的位置為gbestAEP。同理獲得粒子群CRP的全局最優(yōu)解gbestCRP。
Step3對(duì)于粒子群AEP中第i個(gè)粒子AEPi和粒子群CRP中的第i個(gè)粒子CRPi,其中i∈[1,2,…,m],使用其定義的計(jì)算公式更新AEPi和CRPi的速度和位置。
Step4繁殖后代。以AEPi和CRPi作為“父輩”,繁殖后代粒子nAEPi和nCRPi,并計(jì)算兩個(gè)后代粒子的速度和位置。
Step5粒子替換。用后代粒子nAEPi替換AEPi,用nCRPi替換CRPi。
Step6重復(fù)Step 2-Step 5以求得達(dá)到最大迭代次數(shù),迭代完成后最后獲得的gbest即為最終的最優(yōu)閾值。
Step7關(guān)鍵值提取。使用該序列的最優(yōu)閾值進(jìn)行數(shù)據(jù)關(guān)鍵值提取,以實(shí)際序列的第一個(gè)值被保留在壓縮序列中,作為第一個(gè)參照值,序列中的下一項(xiàng)與參照值比較。與參照值之間差值絕對(duì)值超過(guò)該閾值的項(xiàng)會(huì)被保留在壓縮序列中,并作為新的參照值與下一項(xiàng)進(jìn)行比較,直到到達(dá)序列的最后一項(xiàng)。最后被保留在壓縮序列中的項(xiàng)都是提取出的關(guān)鍵值。該壓縮序列是同一時(shí)間維度內(nèi)進(jìn)入同一數(shù)據(jù)窗口,且由同一傳感器節(jié)點(diǎn)產(chǎn)生的關(guān)于同一指標(biāo)的感知關(guān)鍵數(shù)據(jù)流。
數(shù)據(jù)服務(wù)接口是數(shù)據(jù)流的出口,可根據(jù)不同的需求靈活地定制相應(yīng)接口??紤]到通用數(shù)據(jù)業(yè)務(wù)需求,本中間件實(shí)現(xiàn)了消息訂閱與推送接口,用于向訂閱用戶報(bào)警等業(yè)務(wù)。市面上的第三方推送系統(tǒng)可分為兩類(lèi),分別通過(guò)Restful接口和SDK交互,可將其封裝為統(tǒng)一的接口。
如圖7所示,通過(guò)單例模式和策略模式,系統(tǒng)封裝不同類(lèi)型的推送系統(tǒng)并提供統(tǒng)一的服務(wù)接口,使用JSON文件定義不同的訂閱者使用的服務(wù)類(lèi)型。對(duì)其他模塊而言,策略模式屏蔽了不同推送服務(wù)在接口和調(diào)用方式上的區(qū)別;對(duì)內(nèi)部實(shí)現(xiàn)而言,這樣的設(shè)計(jì)利于獨(dú)立的單元測(cè)試,且在需要添加其他推送服務(wù)時(shí),只需添加相應(yīng)的封裝類(lèi),不用對(duì)整體邏輯進(jìn)行調(diào)整。當(dāng)某一實(shí)體的當(dāng)前狀態(tài)發(fā)生改變時(shí),將該消息推送到多個(gè)訂閱實(shí)體。在實(shí)現(xiàn)上,由推送系統(tǒng)維護(hù)其所屬頻道的訂閱者的列表。每條進(jìn)入推送系統(tǒng)的消息有一個(gè)全局唯一的Token類(lèi)參數(shù),標(biāo)識(shí)了該條消息的身份信息,說(shuō)明了這條消息從屬的頻道,對(duì)于消息的訂閱者來(lái)說(shuō),需要提供該參數(shù)以標(biāo)明自己需要的某個(gè)或多個(gè)頻道。
圖7 消息推送流程
本實(shí)驗(yàn)所用的計(jì)算機(jī)配置為3.40 GHz的Intel Core i7-6700和8 GB內(nèi)存。在實(shí)驗(yàn)中,逐漸增加連接到中間件的設(shè)備數(shù)量。這意味著虛擬實(shí)體的數(shù)量也相應(yīng)增加。
如圖8所示,當(dāng)實(shí)體數(shù)量顯著增長(zhǎng)時(shí),中間件的數(shù)據(jù)轉(zhuǎn)發(fā)延遲維持在較穩(wěn)定水平,因?yàn)檫B接模塊節(jié)省了設(shè)備短時(shí)間斷線重連時(shí)重新創(chuàng)建適配器的時(shí)間。實(shí)驗(yàn)證明,該中間件可以處理大量高并發(fā)數(shù)據(jù)的轉(zhuǎn)發(fā)問(wèn)題,同時(shí)將丟包率保持在較低水平。
圖8 并發(fā)實(shí)驗(yàn)結(jié)果
本次實(shí)驗(yàn)將中間件用于智能溫控項(xiàng)目,旨在通過(guò)分析用戶的歷史數(shù)據(jù)和實(shí)時(shí)位置數(shù)據(jù),預(yù)測(cè)用戶的歸家時(shí)間來(lái)預(yù)先設(shè)置空調(diào)。在該系統(tǒng)中,本中間件為項(xiàng)目提供實(shí)時(shí)數(shù)據(jù)服務(wù)。
實(shí)驗(yàn)涉及的硬件包括DFRobot公司的溫度傳感器、英特爾開(kāi)發(fā)板、南京物聯(lián)公司的智能開(kāi)關(guān)和網(wǎng)關(guān)。這些設(shè)備來(lái)自不同的供應(yīng)商,因此需要使用本文的中間件來(lái)屏蔽異構(gòu)性。軟件包括一款安卓應(yīng)用、一個(gè)Python編寫(xiě)的用戶歸家時(shí)間的預(yù)測(cè)系統(tǒng)及本中間件。
如圖9所示,在該智能溫控項(xiàng)目中,所有物理設(shè)備和外部系統(tǒng)在中間件中都有相應(yīng)的虛擬實(shí)體。當(dāng)傳感器虛擬實(shí)體的狀態(tài)刷新時(shí)(意味著有一個(gè)新的溫度數(shù)據(jù)通過(guò)過(guò)濾器),消息訂閱和推送模塊會(huì)將數(shù)據(jù)推送給訂閱者。訂閱者是安卓應(yīng)用和預(yù)測(cè)控制系統(tǒng),安卓應(yīng)用程序?qū)⑵鋵?shí)時(shí)位置數(shù)據(jù)上傳到預(yù)測(cè)和控制系統(tǒng)。預(yù)測(cè)與控制系統(tǒng)根據(jù)用戶的實(shí)時(shí)位置和歷史位置數(shù)據(jù)預(yù)測(cè)用戶的歸家時(shí)間,然后根據(jù)實(shí)時(shí)室內(nèi)溫度確定是否需要打開(kāi)空調(diào)。
圖9 智能溫控系統(tǒng)流程圖
實(shí)驗(yàn)機(jī)器的配置與上一實(shí)驗(yàn)相同,使用固定路徑的GPS數(shù)據(jù)集作為歷史數(shù)據(jù)。安卓手機(jī)在汽車(chē)中實(shí)時(shí)發(fā)送GPS數(shù)據(jù)。在第一次測(cè)試中閾值被設(shè)置得足夠大,以使中間件不過(guò)濾數(shù)據(jù),在第二次測(cè)試時(shí)將閾值調(diào)整為正常值。
從表1所示的實(shí)驗(yàn)結(jié)果可以看出,在不使用過(guò)濾規(guī)則時(shí)的計(jì)算時(shí)間較長(zhǎng),因?yàn)闇貪穸葌鞲衅骷鞍沧渴謾C(jī)在實(shí)時(shí)發(fā)送傳感和GPS數(shù)據(jù),雖然單次數(shù)據(jù)量較小,但發(fā)送頻率很高,而在這段密集型數(shù)據(jù)中,大部分?jǐn)?shù)據(jù)都是冗余無(wú)用的。在調(diào)整過(guò)濾規(guī)則后,大部分?jǐn)?shù)據(jù)被中間件排除在外,從而計(jì)算時(shí)間得到了顯著的降低,有用的數(shù)據(jù)得到了保留,因此對(duì)預(yù)測(cè)結(jié)果的影響較小。
表1 智能溫控系統(tǒng)實(shí)驗(yàn)結(jié)果
本文設(shè)計(jì)并實(shí)現(xiàn)了家居場(chǎng)景下提供數(shù)據(jù)服務(wù)功能的物聯(lián)網(wǎng)中間件。將設(shè)備抽象成虛擬實(shí)體并利用資源統(tǒng)一描述模型屏蔽設(shè)備的異構(gòu)性,幫助系統(tǒng)有效解析多種通信協(xié)議下的數(shù)據(jù)包,并支持協(xié)議的動(dòng)態(tài)注冊(cè)。此外,本中間件可以過(guò)濾無(wú)用冗余的數(shù)據(jù)、檢測(cè)異常數(shù)據(jù)并提供基本數(shù)據(jù)發(fā)布訂閱接口,以確保中間件的性能和通用性。通過(guò)分層結(jié)構(gòu)以及策略設(shè)計(jì)模式,可以靈活快速地注冊(cè)新的協(xié)議、創(chuàng)建新的數(shù)據(jù)服務(wù)接口,而不會(huì)影響底層的物理設(shè)備和上層應(yīng)用程序?;谠撝虚g件,開(kāi)發(fā)人員可以只關(guān)注項(xiàng)目的業(yè)務(wù)邏輯,而無(wú)須關(guān)心底層設(shè)備通信與交互。
未來(lái)工作將考慮利用該中間件開(kāi)發(fā)一整套智能家居解決方案,不僅支持用戶隨時(shí)監(jiān)控家居環(huán)境、主動(dòng)操作家居設(shè)備,還能通過(guò)預(yù)設(shè)規(guī)則、對(duì)歷史數(shù)據(jù)的自主學(xué)習(xí)來(lái)自動(dòng)維護(hù)家居環(huán)境。