文|祁冬,張建明,沈之浩,李家釗
基于云服務的智能家居系統的設計與實現
文|祁冬,張建明,沈之浩,李家釗
隨著物質水平與精神文明的提高,人們更加追求方便、舒適、節能的家庭生活環境,智能家居也因此受到越來越多的關注。目前智能家居系統主要以本地服務器為中心,實現家電控制和系統數據的存儲計算。但這種系統存在成本高、計算資源有限、系統升級復雜等問題。為有效解決上述問題,本文結合可以動態申請與釋放計算、存儲等資源的云計算服務,設計與實現了基于云服務的智能家居系統。本系統建立了統一的平臺為用戶提供服務,降低了智能家居的成本,可以動態申請與釋放計算資源、存儲資源,方便系統的進一步擴展與升級。
本文所設計的智能家居系統的實現包括兩部分:首先,通過云服務器、客戶端、網關、數據庫的設計實現,完成對家庭硬件設備的控制及對家庭溫度、濕度、二氧化碳濃度的檢測查詢。其次,在對分時電價、天氣信息及各類傳感器數據、社交行為等數據即時獲取的情況下,通過云服務器端的負載調度算法生成負載的調度策略。在提升用戶滿意度與舒適度的情況下,減少用戶所需電費和節省能耗。系統總體框架如圖1。

圖1 系統框圖
本系統主要分為三個部分:云平臺、客戶端、網關。云平臺主要負責用戶管理、傳感器數據處理、家電設備控制、用戶用電規律分析以及用電負載調度等工作。客戶端是整個智能家居系統的控制終端,主要負責家電的遠程控制,以及向用戶展示家庭設備情況。網關是智能家居系統的橋梁,負責家用設備數據向云服務器的提交和云服務器生成的控制命令的傳遞。
系統控制流程如下:(1)控制指令下達:用戶在經過用戶認證后,進入其所擁有的房間,生成控制命令,客戶端將帶有房間ID的控制指令轉換為JSON格式后發送給云服務器。(2)控制指令保存:云服務器將用戶的控制指令保存進數據庫。(3)控制指令輪詢:每個用戶名下的不同房間的網關通過定時向云服務器輪詢該房間的家電設備的控制指令,并將其取出。(4)控制指令執行:取出控制指令后,網關對控制指令進行判斷,根據相應控制指令對相應家電設備發送控制碼進行控制。具體控制流程如圖2。

圖2 基于云服務的智能家居系統控制流程
智能家居網關、客戶端、云平臺之間網絡協議的通信方式,采用較廣泛應用的HTTP協議。網關、客戶端均使用HTTP請求的方式向云平臺請求相關的資源與服務。在云平臺上,設計實現HTTP請求的統一接口,供網關和客戶端調用,執行查詢、保存等相關操作,并使用輕量級的數據表示語法JSON作為云服務器與客戶端、網關之間的數據交互格式。編寫服務器端、網關、客戶端程序,實現用戶認證、用戶房間管理、設備管理、數據管理、優化調度管理等功能。
(一)用戶認證與管理的設計
在基于云服務的智能家居系統下,用戶認證是用戶通過賬號和密碼獲取基于云服務的智能家居系統RESTful接口調用憑證,成功認證后會獲得一個有效的調用憑證,然后對智能家居系統進行操作。為防止用戶私人信息泄露,該系統為每位用戶保存獨一無二的用戶ID。用戶與房間是一對多的關系,一個用戶可以擁有多個房間。在基于云服務的智能家居系統下,每個用戶在云平臺上都擁有自己的用戶信息,而用戶信息在注冊時提交生成,云平臺需要對所有用戶的注冊信息進行管理,以區分不同用戶。此外用戶管理還包括對其所擁有房間的管理。
(二)設備管理
在基于云服務的智能家居系統中,在云平臺上注冊的屬于不同用戶的家電設備都應當歸屬于該用戶的某一房間,不應當出現設備無歸屬的情況。如此,網關才可在數據庫中唯一找到屬于自己房間的家電設備,并進行控制操作。為對不同的設備進行準確的區分,為每個設備設置唯一的房間ID。設備與網關是多對一的映射關系,一個網關可以對多個設備進行控制和數據收集。
1.設備添加
設計相應網關程序以添加房間中不同設備實體的不同資源訪問方法,當網關使用該訪問方法向云平臺家電設備數據表中添加設備實體時,設置設備的相關初始信息,添加成功,云平臺返回結果碼為0,失敗結果碼為1,服務器存在問題結果碼為2。添加設備的序列圖如圖3。

圖3 添加設備序列圖
2.設備控制
在云服務器上,設計根據房間ID查詢所有屬于該房間的設備的功能,并提供外部訪問方法,客戶端調用該方法查詢當前房間下的家電設備實體,存入家電設備數組,返回給客戶端。客戶端根據返回的實體個數,更新家電設備控制界面上家電的數量,對設備進行控制,設備控制序列圖如圖4。
Hand segmentationfrom a single depth image basedonhistogram threshold selection and shallow CNN························XU ZhengzeZHANG Wenjun(5,675)

圖4 設備控制序列圖
(三)數據管理
在基于云服務的智能家居系統中,數據管理主要分為用戶數據管理和用戶房間數據管理。用戶管理功能主要是針對每位用戶特的有數據的管理,比如位置數據、負載使用記錄數據、用戶行為分析數據、用戶需求分析等數據的管理。房間數據管理主要包括數據庫中記錄設備實體、設備狀態、設備數據等的相關數據表的管理,增加房間ID屬性,使不同的設備實體、設備狀態、設備數據唯一地匹配到所屬房間。其他數據管理包括在服務器端收集到諸如天氣信息、電價信息等數據,將其保存于統一的表中,待優化調度及用戶查詢時使用。
(四)優化調度管理
在基于云服務的智能家居系統下,系統云平臺根據收集到的用戶數據、房間數據、天氣數據、電價數據等,通過運行優化調度算法對各種數據進行分析挖掘,為用戶提供更舒適的家庭環境。同時,減少用戶的電費消耗。
(一)數據庫設計實現
首先,根據用戶認證、用戶房間管理所需功能,在數據庫中,應當設計兩張表保存用戶注冊時的用戶和房間信息。所以,首先應該在數據庫中增加用戶信息表、房間表來記錄用戶屬性、房間屬性及用戶和房間之間的所屬關系。同時,根據前面對系統的分析,用戶是可以擁有多個房間,所以在房間表中增加用戶ID表示房間對用戶的滿射關系。
同時,根據設備管理所需功能,建立設備歸屬的管理,在原系統的硬件設備中增加房間ID屬性,建立硬件設備與房間之間的所屬關系。以空調數據表為例,其余硬件表包括插座表、插座數據表、熱水器表、熱水器狀態表、電燈表、電燈狀態表、窗簾表、窗簾狀態表、各類傳感器表、社交活動表、社交活動需求表、位置信息表、位置需求表等。
(二)云平臺實現
云平臺端的程序基于MyEclipse開發環境,采用Maven構建工程項目,主要采用Java語言進行程序編寫。程序架構風格是當下比較流行的表述性狀態傳遞,即REST軟件架構風格,使用Jersey框架構建的REST,并采用了資源層、業務邏輯層和數據訪問層三層結構進行編寫。
1.數據訪問層
數據訪問層采用JPA實現,根據系統要實現的用戶認證、用戶房間管理、設備管理等功能,首先設計所需增加的實體屬性及與數據庫的映射關系,增加用戶與房間實體。根據用戶表、房間表中設計的屬性,在用戶、房間實體中定義相應的私有變量。生成構造函數以提供外部訪問接口。在所有變量的構造函數上方,通過注解的方式實現與數據庫屬性的映射關系。
2.業務邏輯層
業務邏輯層根據資源層所需對數據的操作,設計相應的函數,以對數據訪問層進行調用,對相關數據對象進行增、刪、改、查操作。設計與實現保存用戶注冊信息到數據表的函數public void saveUserInfo(UserInfo userInfo)、根據用戶名取出用戶實體的功能函數public UserInfo queryUserInfo(String username)、根據用戶ID查詢其名下的房間實體功能函數public Room[]queryRoom(Interger id)等功能函數。
3.資源層
資源層是根據客戶端、網關所需的資源,設計提供相應的資源訪問方法,供網關、客戶端使用。根據系統要實現的用戶認證、用戶房間管理、設備管理等功能,設計相應資源層所需提供的資源訪問功能,根據房間ID保存智能插座實體的功能public Response saveSheSwitch(@PathParam("id") Integer id),根據房間ID查詢智能插座狀態信息的功能public Response querySheSwitchStatus(@PathParam("id") Integer id)等功能函數。同時,在設計完所有的資源類后,還需要在JAXRSApplication類文件中注冊新建的資源類,在系統啟動加載資源類時,對新設計的資源類進行加載。
4.客戶端實現
客戶端在安卓平臺上設計實現。目前,安卓程序的開發是在Android Studio中完成的,使用谷歌開發設計的MVC(模型-視圖-控制器)設計模式。
視圖層部分主要是Android中的XML文件,文件中主要實現客戶端界面的展示效果。根據用戶認證、用戶房間管理功能的需求,設計用戶注冊界面、用戶登錄界面、新建房間界面并修改界面FamilyFragment布局。界面控制層實現用戶輸入活動的響應,用戶信息的提交,界面控件的初始化、監聽與觸發。設計實現界面與服務器的通信函數,完成數據的提交與對服務器資源的請求。安卓端模型層與服務器端類似,增加用戶信息實體表和房間實體,并增加所有用戶相關、房間相關數據表的屬性,增加房間表、用戶信息表以及對家電設備、電力數據、傳感器數據表增加房間ID屬性。客戶端設計示意圖如圖5。

圖5 客戶端設計示意圖
(四)網關實現
網關是智能家居系統連接家庭內部和外部的橋梁,負責將Arduino板采集到的房間數據保存到服務器的數據庫中,以及從服務器數據庫中輪訓各家電設備狀態表,并對家電設備進行控制。程序在MyEclipse開發環境,采用Java語言編寫,運行在本地PC上。主要包括設備添加功能,家電控制功能,實現家電與服務器之間的交互。
本文設計與實現的系統在阿里云上部署實現,智能家居系統服務端通過MyEclipse部署在Apache Tomcat服務器中運行,同時部署有MySQL5.5供服務器操作數據。
本系統結合云計算服務平臺,設計與實現了基于云服務的智能家居系統,該系統實現了家用設備的智能化控制與集中控制,使家庭生活更加快捷方便。該系統可以有效地降低智能家居的成本,利用云計算平臺動態申請與釋放計算、存儲等資源的優勢,方便系統的進一步擴展與升級,云計算在智能家居上的應用也會成為未來的一種發展趨勢。
作者單位:祁 冬,中國聯合網絡通信有限公司山東省分公司張建明,中國聯合網絡通信有限公司山東省分公司沈之浩,西安交通大學李家釗,西安交通大學