文|祁冬,張建明,沈之浩,李家釗
基于云服務(wù)的智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
文|祁冬,張建明,沈之浩,李家釗
隨著物質(zhì)水平與精神文明的提高,人們更加追求方便、舒適、節(jié)能的家庭生活環(huán)境,智能家居也因此受到越來越多的關(guān)注。目前智能家居系統(tǒng)主要以本地服務(wù)器為中心,實(shí)現(xiàn)家電控制和系統(tǒng)數(shù)據(jù)的存儲(chǔ)計(jì)算。但這種系統(tǒng)存在成本高、計(jì)算資源有限、系統(tǒng)升級(jí)復(fù)雜等問題。為有效解決上述問題,本文結(jié)合可以動(dòng)態(tài)申請(qǐng)與釋放計(jì)算、存儲(chǔ)等資源的云計(jì)算服務(wù),設(shè)計(jì)與實(shí)現(xiàn)了基于云服務(wù)的智能家居系統(tǒng)。本系統(tǒng)建立了統(tǒng)一的平臺(tái)為用戶提供服務(wù),降低了智能家居的成本,可以動(dòng)態(tài)申請(qǐng)與釋放計(jì)算資源、存儲(chǔ)資源,方便系統(tǒng)的進(jìn)一步擴(kuò)展與升級(jí)。
本文所設(shè)計(jì)的智能家居系統(tǒng)的實(shí)現(xiàn)包括兩部分:首先,通過云服務(wù)器、客戶端、網(wǎng)關(guān)、數(shù)據(jù)庫的設(shè)計(jì)實(shí)現(xiàn),完成對(duì)家庭硬件設(shè)備的控制及對(duì)家庭溫度、濕度、二氧化碳濃度的檢測(cè)查詢。其次,在對(duì)分時(shí)電價(jià)、天氣信息及各類傳感器數(shù)據(jù)、社交行為等數(shù)據(jù)即時(shí)獲取的情況下,通過云服務(wù)器端的負(fù)載調(diào)度算法生成負(fù)載的調(diào)度策略。在提升用戶滿意度與舒適度的情況下,減少用戶所需電費(fèi)和節(jié)省能耗。系統(tǒng)總體框架如圖1。
圖1 系統(tǒng)框圖
本系統(tǒng)主要分為三個(gè)部分:云平臺(tái)、客戶端、網(wǎng)關(guān)。云平臺(tái)主要負(fù)責(zé)用戶管理、傳感器數(shù)據(jù)處理、家電設(shè)備控制、用戶用電規(guī)律分析以及用電負(fù)載調(diào)度等工作。客戶端是整個(gè)智能家居系統(tǒng)的控制終端,主要負(fù)責(zé)家電的遠(yuǎn)程控制,以及向用戶展示家庭設(shè)備情況。網(wǎng)關(guān)是智能家居系統(tǒng)的橋梁,負(fù)責(zé)家用設(shè)備數(shù)據(jù)向云服務(wù)器的提交和云服務(wù)器生成的控制命令的傳遞。
系統(tǒng)控制流程如下:(1)控制指令下達(dá):用戶在經(jīng)過用戶認(rèn)證后,進(jìn)入其所擁有的房間,生成控制命令,客戶端將帶有房間ID的控制指令轉(zhuǎn)換為JSON格式后發(fā)送給云服務(wù)器。(2)控制指令保存:云服務(wù)器將用戶的控制指令保存進(jìn)數(shù)據(jù)庫。(3)控制指令輪詢:每個(gè)用戶名下的不同房間的網(wǎng)關(guān)通過定時(shí)向云服務(wù)器輪詢?cè)摲块g的家電設(shè)備的控制指令,并將其取出。(4)控制指令執(zhí)行:取出控制指令后,網(wǎng)關(guān)對(duì)控制指令進(jìn)行判斷,根據(jù)相應(yīng)控制指令對(duì)相應(yīng)家電設(shè)備發(fā)送控制碼進(jìn)行控制。具體控制流程如圖2。
圖2 基于云服務(wù)的智能家居系統(tǒng)控制流程
智能家居網(wǎng)關(guān)、客戶端、云平臺(tái)之間網(wǎng)絡(luò)協(xié)議的通信方式,采用較廣泛應(yīng)用的HTTP協(xié)議。網(wǎng)關(guān)、客戶端均使用HTTP請(qǐng)求的方式向云平臺(tái)請(qǐng)求相關(guān)的資源與服務(wù)。在云平臺(tái)上,設(shè)計(jì)實(shí)現(xiàn)HTTP請(qǐng)求的統(tǒng)一接口,供網(wǎng)關(guān)和客戶端調(diào)用,執(zhí)行查詢、保存等相關(guān)操作,并使用輕量級(jí)的數(shù)據(jù)表示語法JSON作為云服務(wù)器與客戶端、網(wǎng)關(guān)之間的數(shù)據(jù)交互格式。編寫服務(wù)器端、網(wǎng)關(guān)、客戶端程序,實(shí)現(xiàn)用戶認(rèn)證、用戶房間管理、設(shè)備管理、數(shù)據(jù)管理、優(yōu)化調(diào)度管理等功能。
(一)用戶認(rèn)證與管理的設(shè)計(jì)
在基于云服務(wù)的智能家居系統(tǒng)下,用戶認(rèn)證是用戶通過賬號(hào)和密碼獲取基于云服務(wù)的智能家居系統(tǒng)RESTful接口調(diào)用憑證,成功認(rèn)證后會(huì)獲得一個(gè)有效的調(diào)用憑證,然后對(duì)智能家居系統(tǒng)進(jìn)行操作。為防止用戶私人信息泄露,該系統(tǒng)為每位用戶保存獨(dú)一無二的用戶ID。用戶與房間是一對(duì)多的關(guān)系,一個(gè)用戶可以擁有多個(gè)房間。在基于云服務(wù)的智能家居系統(tǒng)下,每個(gè)用戶在云平臺(tái)上都擁有自己的用戶信息,而用戶信息在注冊(cè)時(shí)提交生成,云平臺(tái)需要對(duì)所有用戶的注冊(cè)信息進(jìn)行管理,以區(qū)分不同用戶。此外用戶管理還包括對(duì)其所擁有房間的管理。
(二)設(shè)備管理
在基于云服務(wù)的智能家居系統(tǒng)中,在云平臺(tái)上注冊(cè)的屬于不同用戶的家電設(shè)備都應(yīng)當(dāng)歸屬于該用戶的某一房間,不應(yīng)當(dāng)出現(xiàn)設(shè)備無歸屬的情況。如此,網(wǎng)關(guān)才可在數(shù)據(jù)庫中唯一找到屬于自己房間的家電設(shè)備,并進(jìn)行控制操作。為對(duì)不同的設(shè)備進(jìn)行準(zhǔn)確的區(qū)分,為每個(gè)設(shè)備設(shè)置唯一的房間ID。設(shè)備與網(wǎng)關(guān)是多對(duì)一的映射關(guān)系,一個(gè)網(wǎng)關(guān)可以對(duì)多個(gè)設(shè)備進(jìn)行控制和數(shù)據(jù)收集。
1.設(shè)備添加
設(shè)計(jì)相應(yīng)網(wǎng)關(guān)程序以添加房間中不同設(shè)備實(shí)體的不同資源訪問方法,當(dāng)網(wǎng)關(guān)使用該訪問方法向云平臺(tái)家電設(shè)備數(shù)據(jù)表中添加設(shè)備實(shí)體時(shí),設(shè)置設(shè)備的相關(guān)初始信息,添加成功,云平臺(tái)返回結(jié)果碼為0,失敗結(jié)果碼為1,服務(wù)器存在問題結(jié)果碼為2。添加設(shè)備的序列圖如圖3。
圖3 添加設(shè)備序列圖
2.設(shè)備控制
在云服務(wù)器上,設(shè)計(jì)根據(jù)房間ID查詢所有屬于該房間的設(shè)備的功能,并提供外部訪問方法,客戶端調(diào)用該方法查詢當(dāng)前房間下的家電設(shè)備實(shí)體,存入家電設(shè)備數(shù)組,返回給客戶端??蛻舳烁鶕?jù)返回的實(shí)體個(gè)數(shù),更新家電設(shè)備控制界面上家電的數(shù)量,對(duì)設(shè)備進(jìn)行控制,設(shè)備控制序列圖如圖4。
Hand segmentationfrom a single depth image basedonhistogram threshold selection and shallow CNN························XU ZhengzeZHANG Wenjun(5,675)
圖4 設(shè)備控制序列圖
(三)數(shù)據(jù)管理
在基于云服務(wù)的智能家居系統(tǒng)中,數(shù)據(jù)管理主要分為用戶數(shù)據(jù)管理和用戶房間數(shù)據(jù)管理。用戶管理功能主要是針對(duì)每位用戶特的有數(shù)據(jù)的管理,比如位置數(shù)據(jù)、負(fù)載使用記錄數(shù)據(jù)、用戶行為分析數(shù)據(jù)、用戶需求分析等數(shù)據(jù)的管理。房間數(shù)據(jù)管理主要包括數(shù)據(jù)庫中記錄設(shè)備實(shí)體、設(shè)備狀態(tài)、設(shè)備數(shù)據(jù)等的相關(guān)數(shù)據(jù)表的管理,增加房間ID屬性,使不同的設(shè)備實(shí)體、設(shè)備狀態(tài)、設(shè)備數(shù)據(jù)唯一地匹配到所屬房間。其他數(shù)據(jù)管理包括在服務(wù)器端收集到諸如天氣信息、電價(jià)信息等數(shù)據(jù),將其保存于統(tǒng)一的表中,待優(yōu)化調(diào)度及用戶查詢時(shí)使用。
(四)優(yōu)化調(diào)度管理
在基于云服務(wù)的智能家居系統(tǒng)下,系統(tǒng)云平臺(tái)根據(jù)收集到的用戶數(shù)據(jù)、房間數(shù)據(jù)、天氣數(shù)據(jù)、電價(jià)數(shù)據(jù)等,通過運(yùn)行優(yōu)化調(diào)度算法對(duì)各種數(shù)據(jù)進(jìn)行分析挖掘,為用戶提供更舒適的家庭環(huán)境。同時(shí),減少用戶的電費(fèi)消耗。
(一)數(shù)據(jù)庫設(shè)計(jì)實(shí)現(xiàn)
首先,根據(jù)用戶認(rèn)證、用戶房間管理所需功能,在數(shù)據(jù)庫中,應(yīng)當(dāng)設(shè)計(jì)兩張表保存用戶注冊(cè)時(shí)的用戶和房間信息。所以,首先應(yīng)該在數(shù)據(jù)庫中增加用戶信息表、房間表來記錄用戶屬性、房間屬性及用戶和房間之間的所屬關(guān)系。同時(shí),根據(jù)前面對(duì)系統(tǒng)的分析,用戶是可以擁有多個(gè)房間,所以在房間表中增加用戶ID表示房間對(duì)用戶的滿射關(guān)系。
同時(shí),根據(jù)設(shè)備管理所需功能,建立設(shè)備歸屬的管理,在原系統(tǒng)的硬件設(shè)備中增加房間ID屬性,建立硬件設(shè)備與房間之間的所屬關(guān)系。以空調(diào)數(shù)據(jù)表為例,其余硬件表包括插座表、插座數(shù)據(jù)表、熱水器表、熱水器狀態(tài)表、電燈表、電燈狀態(tài)表、窗簾表、窗簾狀態(tài)表、各類傳感器表、社交活動(dòng)表、社交活動(dòng)需求表、位置信息表、位置需求表等。
(二)云平臺(tái)實(shí)現(xiàn)
云平臺(tái)端的程序基于MyEclipse開發(fā)環(huán)境,采用Maven構(gòu)建工程項(xiàng)目,主要采用Java語言進(jìn)行程序編寫。程序架構(gòu)風(fēng)格是當(dāng)下比較流行的表述性狀態(tài)傳遞,即REST軟件架構(gòu)風(fēng)格,使用Jersey框架構(gòu)建的REST,并采用了資源層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層三層結(jié)構(gòu)進(jìn)行編寫。
1.數(shù)據(jù)訪問層
數(shù)據(jù)訪問層采用JPA實(shí)現(xiàn),根據(jù)系統(tǒng)要實(shí)現(xiàn)的用戶認(rèn)證、用戶房間管理、設(shè)備管理等功能,首先設(shè)計(jì)所需增加的實(shí)體屬性及與數(shù)據(jù)庫的映射關(guān)系,增加用戶與房間實(shí)體。根據(jù)用戶表、房間表中設(shè)計(jì)的屬性,在用戶、房間實(shí)體中定義相應(yīng)的私有變量。生成構(gòu)造函數(shù)以提供外部訪問接口。在所有變量的構(gòu)造函數(shù)上方,通過注解的方式實(shí)現(xiàn)與數(shù)據(jù)庫屬性的映射關(guān)系。
2.業(yè)務(wù)邏輯層
業(yè)務(wù)邏輯層根據(jù)資源層所需對(duì)數(shù)據(jù)的操作,設(shè)計(jì)相應(yīng)的函數(shù),以對(duì)數(shù)據(jù)訪問層進(jìn)行調(diào)用,對(duì)相關(guān)數(shù)據(jù)對(duì)象進(jìn)行增、刪、改、查操作。設(shè)計(jì)與實(shí)現(xiàn)保存用戶注冊(cè)信息到數(shù)據(jù)表的函數(shù)public void saveUserInfo(UserInfo userInfo)、根據(jù)用戶名取出用戶實(shí)體的功能函數(shù)public UserInfo queryUserInfo(String username)、根據(jù)用戶ID查詢其名下的房間實(shí)體功能函數(shù)public Room[]queryRoom(Interger id)等功能函數(shù)。
3.資源層
資源層是根據(jù)客戶端、網(wǎng)關(guān)所需的資源,設(shè)計(jì)提供相應(yīng)的資源訪問方法,供網(wǎng)關(guān)、客戶端使用。根據(jù)系統(tǒng)要實(shí)現(xiàn)的用戶認(rèn)證、用戶房間管理、設(shè)備管理等功能,設(shè)計(jì)相應(yīng)資源層所需提供的資源訪問功能,根據(jù)房間ID保存智能插座實(shí)體的功能public Response saveSheSwitch(@PathParam("id") Integer id),根據(jù)房間ID查詢智能插座狀態(tài)信息的功能public Response querySheSwitchStatus(@PathParam("id") Integer id)等功能函數(shù)。同時(shí),在設(shè)計(jì)完所有的資源類后,還需要在JAXRSApplication類文件中注冊(cè)新建的資源類,在系統(tǒng)啟動(dòng)加載資源類時(shí),對(duì)新設(shè)計(jì)的資源類進(jìn)行加載。
4.客戶端實(shí)現(xiàn)
客戶端在安卓平臺(tái)上設(shè)計(jì)實(shí)現(xiàn)。目前,安卓程序的開發(fā)是在Android Studio中完成的,使用谷歌開發(fā)設(shè)計(jì)的MVC(模型-視圖-控制器)設(shè)計(jì)模式。
視圖層部分主要是Android中的XML文件,文件中主要實(shí)現(xiàn)客戶端界面的展示效果。根據(jù)用戶認(rèn)證、用戶房間管理功能的需求,設(shè)計(jì)用戶注冊(cè)界面、用戶登錄界面、新建房間界面并修改界面FamilyFragment布局。界面控制層實(shí)現(xiàn)用戶輸入活動(dòng)的響應(yīng),用戶信息的提交,界面控件的初始化、監(jiān)聽與觸發(fā)。設(shè)計(jì)實(shí)現(xiàn)界面與服務(wù)器的通信函數(shù),完成數(shù)據(jù)的提交與對(duì)服務(wù)器資源的請(qǐng)求。安卓端模型層與服務(wù)器端類似,增加用戶信息實(shí)體表和房間實(shí)體,并增加所有用戶相關(guān)、房間相關(guān)數(shù)據(jù)表的屬性,增加房間表、用戶信息表以及對(duì)家電設(shè)備、電力數(shù)據(jù)、傳感器數(shù)據(jù)表增加房間ID屬性??蛻舳嗽O(shè)計(jì)示意圖如圖5。
圖5 客戶端設(shè)計(jì)示意圖
(四)網(wǎng)關(guān)實(shí)現(xiàn)
網(wǎng)關(guān)是智能家居系統(tǒng)連接家庭內(nèi)部和外部的橋梁,負(fù)責(zé)將Arduino板采集到的房間數(shù)據(jù)保存到服務(wù)器的數(shù)據(jù)庫中,以及從服務(wù)器數(shù)據(jù)庫中輪訓(xùn)各家電設(shè)備狀態(tài)表,并對(duì)家電設(shè)備進(jìn)行控制。程序在MyEclipse開發(fā)環(huán)境,采用Java語言編寫,運(yùn)行在本地PC上。主要包括設(shè)備添加功能,家電控制功能,實(shí)現(xiàn)家電與服務(wù)器之間的交互。
本文設(shè)計(jì)與實(shí)現(xiàn)的系統(tǒng)在阿里云上部署實(shí)現(xiàn),智能家居系統(tǒng)服務(wù)端通過MyEclipse部署在Apache Tomcat服務(wù)器中運(yùn)行,同時(shí)部署有MySQL5.5供服務(wù)器操作數(shù)據(jù)。
本系統(tǒng)結(jié)合云計(jì)算服務(wù)平臺(tái),設(shè)計(jì)與實(shí)現(xiàn)了基于云服務(wù)的智能家居系統(tǒng),該系統(tǒng)實(shí)現(xiàn)了家用設(shè)備的智能化控制與集中控制,使家庭生活更加快捷方便。該系統(tǒng)可以有效地降低智能家居的成本,利用云計(jì)算平臺(tái)動(dòng)態(tài)申請(qǐng)與釋放計(jì)算、存儲(chǔ)等資源的優(yōu)勢(shì),方便系統(tǒng)的進(jìn)一步擴(kuò)展與升級(jí),云計(jì)算在智能家居上的應(yīng)用也會(huì)成為未來的一種發(fā)展趨勢(shì)。
作者單位:祁 冬,中國(guó)聯(lián)合網(wǎng)絡(luò)通信有限公司山東省分公司張建明,中國(guó)聯(lián)合網(wǎng)絡(luò)通信有限公司山東省分公司沈之浩,西安交通大學(xué)李家釗,西安交通大學(xué)