《電子技術(shù)應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 設計應用 > 基于Android平臺的智能家居系統(tǒng)設計
基于Android平臺的智能家居系統(tǒng)設計
2015年電子技術(shù)應用第10期
陳 瑋1,秦會斌1,曹曙光2,秦利紅1
(1.杭州電子科技大學 電子信息學院,浙江 杭州310018;2.浙江和惠照明科技有限公司,浙江 余姚315400)
摘要: 為了實現(xiàn)家居生活智能、方便等目的,提出一種基于Android平臺的智能家居系統(tǒng)。采用內(nèi)外網(wǎng)通信方式,使得當家庭寬帶不可用時仍能通過內(nèi)網(wǎng)實現(xiàn)對家居設備的控制。將用戶配置信息、設備信息存在網(wǎng)關(guān)使得不同客戶端能信息共享,實現(xiàn)動態(tài)添加、刪除動作。采用推送而不是輪詢,實時性好??蛻舳薃PP功能齊全,云計算的使用實現(xiàn)了外網(wǎng)控制,同時便于未來的系統(tǒng)擴展。
中圖分類號: TP311
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2015.10.043

中文引用格式: 陳瑋,秦會斌,曹曙光,等. 基于Android平臺的智能家居系統(tǒng)設計[J].電子技術(shù)應用,2015,41(10):158-160,164.
英文引用格式: Chen Wei,Qin Huibin,Cao Shuguang,et al. Design of smart home system based on Android[J].Application of Electronic Technique,2015,41(10):158-160,164.
Design of smart home system based on Android
Chen Wei1,Qin Huibin1,Cao Shuguang2,Qin Lihong1
1.School of Electronics Information,Hangzhou Dianzi University,Hangzhou 310018,China; 2.Zhejiang HeHui Lighting Technology Co.Ltd,Yuyao 315400,China
Abstract: In order to achieve home life become more smart,convenient and other purposes, a smart home system based on Android is proposed.The system has internal and external communicate mode,which makes it possible to control the device by the internal network when the home broadband network is unavailable. The user's configure information and device information are in the gateway,which enables different clients to share information,and realizes the add or delete action dynamically. The status of equipment is obtained by the push technology instead of the polling mode.The APP is designed humanized with complete functions,the use of cloud computing not only realizes the external control,but also facilitates the future system expansion.
Key words : smart home;Android;message push;cloud computing;remote control


0 引言

  智能家居通過物聯(lián)網(wǎng)技術(shù)將家居子系統(tǒng)有機結(jié)合在一起形成高度智能化的智慧家庭[1]。物聯(lián)網(wǎng)、云概念的提出加速了智能家居的發(fā)展,Android智能手機和網(wǎng)絡技術(shù)的發(fā)展也給智能家居帶來了新的思路[2]。本文提出一個基于Android平臺的智能家居系統(tǒng)設計方案。以Android手機作為家居控制終端,通過云平臺轉(zhuǎn)發(fā)消息,真正實現(xiàn)遠程控制,將用戶信息、設備信息存在網(wǎng)關(guān)使不同客戶端能實現(xiàn)信息共享,實現(xiàn)動態(tài)添加、刪除動作。結(jié)合推送技術(shù)獲得良好的實時性。

1 系統(tǒng)總體框架圖

  系統(tǒng)由客戶端、云計算中心、網(wǎng)關(guān)和家庭設備組成。系統(tǒng)框架如圖1所示。

001.jpg

  客戶端實現(xiàn)對底層設備的控制方式包括:(1)內(nèi)網(wǎng)控制:客戶端使用家庭網(wǎng)絡與網(wǎng)關(guān)直接通信,由網(wǎng)關(guān)控制底層設備;(2)外網(wǎng)控制:客戶端與網(wǎng)關(guān)不在同一網(wǎng)段內(nèi),客戶端指令由云服務器轉(zhuǎn)發(fā)給對應的網(wǎng)關(guān),再由網(wǎng)關(guān)控制底層設備。采用內(nèi)外網(wǎng)的通信方式,使得家庭寬帶網(wǎng)絡在不可使用的情況下,仍能通過內(nèi)網(wǎng)通信實現(xiàn)對設備的控制,同時節(jié)省用戶數(shù)據(jù)流量[3]。每次運行客戶端軟件,會自動獲取網(wǎng)關(guān)處的配置信息、設備信息。網(wǎng)關(guān)同步底層設備狀態(tài),當發(fā)生改變時由網(wǎng)關(guān)轉(zhuǎn)發(fā)給客戶端,使用戶能及時獲知底層設備的最新狀態(tài)。

2 客戶端設計與實現(xiàn)

  2.1 客戶端功能說明

  Android客戶端功能模塊如圖2所示。

002.jpg

  設備管理是核心模塊,包括自定義房間和設備??商砑?、刪除、修改房間,房間下可添加設備。點擊設備管理,通過后臺獲取當前用戶下的所有房間并以JSON格式返回,客戶端完成解析并顯示在界面上,點擊添加圖標進入添加房間界面,填寫房間名稱并將用戶ID與房間名稱發(fā)往網(wǎng)關(guān)并保存至數(shù)據(jù)庫。通過長按房間界面實現(xiàn)刪除與修改動作。點擊房間會顯示該房間下的所有設備,可添加設備,長按刪除設備,不提供修改設備動作??梢钥刂茊蝹€設備或區(qū)域內(nèi)的所有設備,也可以對某個情景模式關(guān)聯(lián)的設備進行聯(lián)動控制。

  2.2 客戶端框架

  在Eclipse開發(fā)環(huán)境下,采用java語言,基于MVC模式對客戶端進行設計。視圖層View負責生成用戶界面,接收輸入并顯示結(jié)果??刂茖覥ontroller用于監(jiān)聽用戶操作并作出反應。模型層Model定義了各種功能模塊,包括通信模塊、數(shù)據(jù)庫模塊、數(shù)據(jù)格式的封裝和解析模塊等[4],其中通信模塊是核心。

  2.3 通信模塊

  通信模塊負責客戶端和服務器或網(wǎng)關(guān)間的消息通信和鏈路維護。通信方式有:TCP/UDP、Http、MQTT推送。系統(tǒng)的通信協(xié)議如圖3。過程如下:

003.jpg

  (1)第一次使用軟件,需在云端完成注冊,將用戶名和密碼以Http方式發(fā)到云端,并獲得服務器生成的用戶ID。同時在家庭WiFi環(huán)境下使網(wǎng)關(guān)加入局域網(wǎng):將WiFi的SSID和密碼通過加密算法進行加密,將加密序列生成UDP數(shù)據(jù)包并發(fā)送出去,網(wǎng)關(guān)獲得該包并解析出WiFi相關(guān)信息,實現(xiàn)自動連接到路由器。

  socket=new DatagramSocket();

  sequence=sequence_init(account.toString(),

  pswd.toString());//生成加密序列

  while(flag){

  for(int i=0; i<len; i++){String str = "";

  for(int j = 0; j<sequence[i]; j++){str += "a";}

  outPacket=new

  DatagramPacket(str.getBytes(),str.length(),

  InetAddress.getByName(s_gateway),4000);

  socket.send(outPacket);}

  socket.receive(receive);

  (2)綁定網(wǎng)關(guān)。網(wǎng)關(guān)加入局域網(wǎng)后監(jiān)聽客戶端廣播的數(shù)據(jù)包并返回自己的IP地址和TCP通信端口,客戶端通過TCP的Socket發(fā)送用戶ID到網(wǎng)關(guān)實現(xiàn)和網(wǎng)關(guān)的綁定,同時將用戶和網(wǎng)關(guān)的唯一標識號發(fā)送至云端實現(xiàn)綁定,這樣客戶端通過外網(wǎng)訪問云服務器時,服務器能轉(zhuǎn)發(fā)指令給對應的網(wǎng)關(guān)。

  (3)以后每次使用軟件前,都要判斷當前網(wǎng)絡環(huán)境。即判斷客戶端和網(wǎng)關(guān)是否在同一網(wǎng)段內(nèi)。若客戶端沒有接收到返回信息,說明它們不在一個網(wǎng)段內(nèi),則選擇通過Http方式連接云服務器。

  (4)采用MQTT實現(xiàn)設備狀態(tài)的實時更新。訂閱客戶端所綁定的網(wǎng)關(guān),網(wǎng)關(guān)同步底層設備狀態(tài),當狀態(tài)改變時,由網(wǎng)關(guān)發(fā)送給MQTT server,再推送至客戶端。

  系統(tǒng)的通信模塊活動圖如圖4所示。

004.jpg

  2.4 通信模塊實現(xiàn)

  2.4.1 Http通信

  外網(wǎng)通信方式下,用戶登錄、獲取設備信息等由客戶端采用Http建立主動連接,服務器將結(jié)果以JSON格式返回。模塊中的Http請求用Android-Async-Http網(wǎng)絡請求庫實現(xiàn),它是基于Apache HttpClient庫之上的一個異步網(wǎng)絡請求處理庫,網(wǎng)絡處理均基于Android的非UI線程,不阻塞UI操作,通過回調(diào)方法處理請求結(jié)果。

  Android-Async-Http使用簡單,通過核心類AsyncHttp-

  Client的實例就可以執(zhí)行網(wǎng)絡請求,提供put、post等方法。登陸過程如下:

  (1)創(chuàng)建AsyncHttpClient的實例

  AsyncHttpClient client = new AsyncHttpClient();

  (2)創(chuàng)建請求參數(shù)的封裝對象

  RequestParams params = new RequestParams();

  params.put("username", userName);

  params.put("userpass", userPass);

  (3)執(zhí)行post方法

  client.post(url, params,

  new AsyncHttpResponseHandler (){

  public void onSuccess(int statusCode, Header[] headers,

  byte[] responseBody){

  if(statusCode == 200){//成功

  Toast.makeText(this,new String(responseBody) ).show();}}

  Public void onFailure(int statusCode, Header[] headers,

  byte[] responseBody Throwable error){

  error.printStackTrace();//失敗

  }}…);

  new AsyncHttpResponseHandler()這個實例用于接收請求結(jié)果,一般重寫onSuccess()和onFailure()方法接收請求成功或失敗的消息。onSuccess()方法的參數(shù)responseBody為響應內(nèi)容字節(jié)。

  2.4.2 MQTT推送

  MQTT是基于TCP/IP協(xié)議,專為物聯(lián)網(wǎng)開發(fā)的輕量級通信協(xié)議。該協(xié)議針對網(wǎng)絡差、計算能力低的設備做了特殊處理,使其能適應物聯(lián)網(wǎng)應用場景,有占用寬帶小、耗電量少等優(yōu)勢。協(xié)議里有兩個主要角色:MQTT client和MQTT server。client向server訂閱某個話題就能收到發(fā)布到該話題的所有消息;client發(fā)布消息到某個話題下,則該話題的所有訂閱者都能收到[5]。通信時序圖如圖5所示。

005.jpg

  本文通過MQTT實現(xiàn)客戶端實時獲得設備信息??蛻舳藢狹QTT client,是消息訂閱者。當狀態(tài)改變時,由設備將信息發(fā)送給網(wǎng)關(guān),再由網(wǎng)關(guān)傳遞給MQTT server,再推送至訂閱了該網(wǎng)關(guān)的客戶端。使用MQTT,須將mqttv3.jar包加入Android應用程序中,它是IBM提供的MQTT協(xié)議的實現(xiàn)。APK調(diào)用該jar包提供的API接口,就能建立MQTT client和MQTT server的連接。流程如下[6]:

  (1)創(chuàng)建一個MqttClient對象,參數(shù)包括MQTT server所在的IP地址和端口號、客戶端唯一標識clientid等。

  MqttClient client=new MqttClient("tcp://123.57.219.126:

  1883",

  "test", new MemoryPersistence());

  (2)創(chuàng)建MqttConnectOptions的對象并進行設置。用戶名和密碼用于連接MQTT server時進行驗證,心跳時間用于client定時發(fā)送心跳包,以便和server保持連接。

  MqttConnectOptions options=new MqttConnectOptions();

  options.setUserName(userName);//用戶名

  options.setPassword(passWord.toCharArray());//密碼

  options.setKeepAliveInterval(20);//心跳時間

  (3)給客戶端設置回調(diào)。

  client.setCallback(new MqttCallback() {

  public void connectionLost(Throwable cause) {

  //連接丟失后,進行重連}

  public void deliveryComplete(IMqttDeliveryToken token){

  //publish后會執(zhí)行到這里}

  public void messageArrived(String topicNam e,

  MqttMessage message) throws Exception {

  //subscribe后得到的消息會執(zhí)行到這里面

  Message msg = new Message();

  msg.what = 1;

  msg.obj = topicName+"---"+message.toString();

  //通過handler傳遞給主線程進行UI更新

  handler.sendMessage(msg);}});

  (4)連接到MQTT server。

  client.connect(options);

  (5)訂閱某個網(wǎng)關(guān)的話題,接收網(wǎng)關(guān)發(fā)布到該話題下的消息,即設備信息。TOPICS是客戶端訂閱的話題,設為“gateway-example”。QOS_VALUES代表服務質(zhì)量保證級別,1表示至少會發(fā)送一次消息。

  client. subscribe(TOPICS, QOS_VALUES);

  MQTT技術(shù)可以實現(xiàn)底層設備信息的實時更新,非常適合智能家居這種使用場景。

3 云計算中心

  云計算將計算任務分布在大量計算機構(gòu)成的資源池上,使各種應用系統(tǒng)按需獲取計算力、存儲空間和信息服務[7]。云計算作為一種新技術(shù)受到越來越多的親睞,很多學校、企業(yè)都建立了云計算數(shù)據(jù)中心。本文采用阿里云ECS(Elastic Compute Service)作為云計算中心,它是一種簡單高效、處理能力可彈性伸縮計算服務。服務器開發(fā)框架采用Jquery+SpringMVC+Mybatis+Ehcache。Mybatis是一個基于Java的持久層框架,支持普通SQL查詢。為了提高Mybatis的性能,需要添加第三方緩存組件支持,目前用的比較多的是Ehcache緩存。Ehcache性能強大、快速簡單,具有多種緩存策略。Mybatis與Ehcache整合可以提高性能,提高查詢效率,降低數(shù)據(jù)庫壓力。

4 功能測試

  主要對設備的實時控制和狀態(tài)值的實時刷新進行了驗證。設備用繼電器模擬,使用安裝Android程序的手機作為客戶端進行功能測試。

  在外網(wǎng)環(huán)境下,當客戶端連接服務器后,觸發(fā)設備開關(guān)按鈕,可以將控制命令由云中轉(zhuǎn)至網(wǎng)關(guān),再轉(zhuǎn)發(fā)至底層設備控制繼電器開關(guān),同時設備的最新狀態(tài)和傳感器值也會在客戶端進行實時刷新。測試結(jié)果如圖6,客戶端能保持和網(wǎng)關(guān)信息同步。

006.jpg

5 結(jié)論

  本文簡要介紹了基于Android平臺的智能家居系統(tǒng)設計和關(guān)鍵技術(shù)。該系統(tǒng)結(jié)合了云計算和MQTT技術(shù),實現(xiàn)遠程控制和信息同步,同時提供了內(nèi)網(wǎng)控制,設備信息存在網(wǎng)關(guān)保證用戶信息共享。為市場化應用提供一種參考。

參考文獻

  [1] 岳敬華.基于云服務的智能家居系統(tǒng)的研究與設計[D].杭州:杭州電子科技大學,2014.

  [2] 吳浩權(quán).基于Android的智能家居系統(tǒng)的研究與設計[D].杭州:浙江工業(yè)大學,2013.

  [3] 崔荔.基于Android平臺的智能家居客戶端系統(tǒng)設計與實現(xiàn)[D].西安:長安大學,2013.

  [4] 王運紅,何靈娜.基于Android平臺智能家居客戶端的設計和實現(xiàn)[J].機電工程,2014,31(8);1086-1089,1102.

  [5] 關(guān)慶余.基于MQTT協(xié)議的移動社交網(wǎng)絡客戶端的設計與實現(xiàn)[D].沈陽:中國科學院研究生院(沈陽計算技術(shù)研究所),2014.

  [6] 姜妮,張宇,趙志軍.基于MQTT物聯(lián)網(wǎng)消息推送系統(tǒng)[J].網(wǎng)絡新媒體技術(shù),2014,3(6):62-64.

  [7] 劉鵬.云計算[M].北京:電子工業(yè)出版社,2011.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。