亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Android平臺(tái)智能家居客戶端的設(shè)計(jì)與實(shí)現(xiàn)

        2016-11-09 01:11:27秦利紅秦會(huì)斌諸堅(jiān)彬曹曙光
        關(guān)鍵詞:界面用戶設(shè)備

        秦利紅 秦會(huì)斌 諸堅(jiān)彬 曹曙光

        1(杭州電子科技大學(xué)電子信息學(xué)院 浙江 杭州 310000)2(浙江和惠照明科技有限公司 浙江 余姚 315408)

        ?

        基于Android平臺(tái)智能家居客戶端的設(shè)計(jì)與實(shí)現(xiàn)

        秦利紅1秦會(huì)斌1諸堅(jiān)彬1曹曙光2

        1(杭州電子科技大學(xué)電子信息學(xué)院浙江 杭州 310000)2(浙江和惠照明科技有限公司浙江 余姚 315408)

        為改善傳統(tǒng)智能家居客戶端功能單一、操作繁瑣、不易推廣等不足,設(shè)計(jì)并實(shí)現(xiàn)了基于Android系統(tǒng)平臺(tái)集內(nèi)外網(wǎng)對(duì)智能家居控制、智能配對(duì)、動(dòng)態(tài)添加設(shè)備和房間、多用戶共享數(shù)據(jù)、消息推送等關(guān)鍵技術(shù)的智能家居客戶端。通過云服務(wù)器轉(zhuǎn)發(fā)消息,客戶端實(shí)現(xiàn)了外網(wǎng)與網(wǎng)關(guān)通信。網(wǎng)關(guān)保存所有智能家居信息,客戶端通過查詢網(wǎng)關(guān)獲取信息,實(shí)現(xiàn)多用戶數(shù)據(jù)共享。采用基于MQTT協(xié)議的消息推送機(jī)制,實(shí)現(xiàn)當(dāng)設(shè)備狀態(tài)改變時(shí),設(shè)備信息能被及時(shí)推送給每一個(gè)用戶。經(jīng)測(cè)試,多用戶均可從網(wǎng)關(guān)獲取設(shè)備等信息,并對(duì)設(shè)備進(jìn)行控制,是一款性能良好、界面友善的智能家居客戶端軟件。

        智能家居Android云服務(wù)器數(shù)據(jù)共享消息推送

        0 引 言

        智能家居是以住宅為平臺(tái),通過先進(jìn)的自動(dòng)控制技術(shù)、網(wǎng)絡(luò)通信技術(shù)、計(jì)算機(jī)技術(shù)將家居生活環(huán)境中的相關(guān)設(shè)備連接起來,實(shí)現(xiàn)家居生活環(huán)境的智能化控制,提供一個(gè)更加人性化的居住環(huán)境[1,2]。隨著人們對(duì)家居智能化的需求不斷增大,如何實(shí)現(xiàn)用戶隨時(shí)隨地控制家居,獲取智能家居信息,成為迫切需求[3,4]。傳統(tǒng)智能家居系統(tǒng)中設(shè)備信息存在客戶端本地,不支持?jǐn)?shù)據(jù)共享;系統(tǒng)中控制的設(shè)備只能是指定設(shè)備,不能根據(jù)用戶的不同需求動(dòng)態(tài)地添加設(shè)備和房間,使得系統(tǒng)適應(yīng)性不強(qiáng)、操作不靈活,也不能很好地實(shí)現(xiàn)遠(yuǎn)程控制設(shè)備。

        針對(duì)以上問題,本文設(shè)計(jì)基于Android平臺(tái)的智能家居控制客戶端實(shí)現(xiàn)了動(dòng)態(tài)添加設(shè)備和房間,并將設(shè)備、房間等信息存在網(wǎng)關(guān)端,客戶端通過查詢獲取信息,實(shí)現(xiàn)了智能家居信息多用戶共享。在外網(wǎng),客戶端能通過云服務(wù)器轉(zhuǎn)發(fā)消息給網(wǎng)關(guān),真正實(shí)現(xiàn)用戶隨時(shí)隨地遠(yuǎn)程控制智能家居。采用基于MQTT的消息推送機(jī)制,實(shí)現(xiàn)多用戶同時(shí)操作設(shè)備時(shí),能及時(shí)獲取設(shè)備信息。

        1 智能家居系統(tǒng)概述

        本文中,作為研究對(duì)象的智能家居系統(tǒng)總體可分為4部分:基于Android平臺(tái)的客戶端、云服務(wù)器、嵌入式網(wǎng)關(guān)、智能家居設(shè)備。系統(tǒng)總體框圖根據(jù)所處的網(wǎng)絡(luò)環(huán)境分為兩種情況,具體如圖1所示。

        圖1 智能家居控制系統(tǒng)框圖

        圖1中,(a)表示系統(tǒng)處于局域網(wǎng)內(nèi),控制終端直接與網(wǎng)關(guān)通信,進(jìn)行數(shù)據(jù)的交互,實(shí)現(xiàn)對(duì)智能設(shè)備的控制;(b)表示系統(tǒng)處于外網(wǎng)環(huán)境,控制終端無法直接與網(wǎng)關(guān)通信,必須通過云服務(wù)器轉(zhuǎn)發(fā)消息給網(wǎng)關(guān),網(wǎng)關(guān)控制智能設(shè)備。

        控制終端提供人機(jī)交互界面,與云服務(wù)器的交互是核心,為APP提供了外網(wǎng)接入功能[5]。網(wǎng)關(guān)存儲(chǔ)設(shè)備信息,接受客戶端命令并控制設(shè)備??蛻舳送ㄟ^與網(wǎng)關(guān)間接或直接通信,查詢房間設(shè)備信息,最終顯示這些信息。設(shè)備為雙向設(shè)備,及時(shí)返回設(shè)備信息給網(wǎng)關(guān),因此客戶端能實(shí)時(shí)查詢?cè)O(shè)備信息。

        2 客戶端的設(shè)計(jì)與實(shí)現(xiàn)

        2.1客戶端實(shí)現(xiàn)框架和功能說明

        客戶端各功能模塊劃分如圖2所示。

        圖2 智能家居控制客戶端系統(tǒng)框圖

        (1) 登錄模塊:用戶第一次使用時(shí),需要注冊(cè)賬號(hào),并保存到云服務(wù)器,使得用戶下次登錄時(shí)能進(jìn)行安全驗(yàn)證。

        (2) 設(shè)置模塊:包括用戶管理、設(shè)備管理、預(yù)約管理、情景管理、主控設(shè)置等主要模塊。用戶管理主要是用戶賬戶切換與修改密碼。設(shè)備管理是核心模塊,主要涉及房間、設(shè)備的動(dòng)態(tài)添加、刪除和修改,用戶可根據(jù)自己的需求自定義房間、設(shè)備名稱和圖片,圖片從默認(rèn)圖片、拍照和相冊(cè)中獲取。預(yù)約管理,用戶可以添加定時(shí)操作,關(guān)聯(lián)設(shè)備和設(shè)備動(dòng)作,設(shè)置一周重復(fù)的天數(shù)。情景設(shè)置,用戶可動(dòng)態(tài)添加和刪除情景,自定義情景名稱和圖片,關(guān)聯(lián)設(shè)備和設(shè)備動(dòng)作,這樣用戶可以一鍵操作想要控制的各種設(shè)備,而不是一個(gè)一個(gè)控制。主控設(shè)置,包括智能配對(duì)和時(shí)間校準(zhǔn)。智能配對(duì)指客戶端提供界面輸入指定WiFi的SSID和密碼,通過一定的協(xié)議的數(shù)據(jù)發(fā)送,網(wǎng)關(guān)端進(jìn)行抓包處理,分析出WiFi的SSID和密碼,使得網(wǎng)關(guān)能在無輸入的情況下連上指定的WiFi;時(shí)間校準(zhǔn)是設(shè)置網(wǎng)關(guān)時(shí)間。

        (3) 控制模塊:對(duì)卷簾、百葉、燈光、開關(guān)等設(shè)備進(jìn)行單個(gè)設(shè)備控制,支持對(duì)同一房間內(nèi)所有設(shè)備同時(shí)控制開和關(guān),也支持對(duì)同一類型的所有設(shè)備同時(shí)控制開和關(guān),用戶不用一個(gè)一個(gè)地控制設(shè)備,使得智能家居的控制更加人性化,操作更加簡(jiǎn)單。

        2.2通信模塊的設(shè)計(jì)與實(shí)現(xiàn)

        Android客戶端主要實(shí)現(xiàn)與云服務(wù)器和網(wǎng)關(guān)的通信?,F(xiàn)在手機(jī)客戶端的通信網(wǎng)絡(luò)主要有移動(dòng)網(wǎng)絡(luò)(2G/3G/4G)和WiFi[6]。因此需正確地判斷客戶端所處的網(wǎng)絡(luò)環(huán)境和選擇正確的通信方式,確保數(shù)據(jù)的發(fā)送和接收,實(shí)現(xiàn)用戶隨時(shí)隨地對(duì)智能設(shè)備的控制。

        2.2.1客戶端通信模塊的設(shè)計(jì)與實(shí)現(xiàn)

        客戶端通信模塊為本設(shè)計(jì)的核心模塊,當(dāng)客戶端需要發(fā)送數(shù)據(jù)時(shí),首先判斷所處的網(wǎng)絡(luò)環(huán)境,如果與網(wǎng)關(guān)處于同一局域網(wǎng)內(nèi),則使用Socket與網(wǎng)關(guān)進(jìn)行通信;若客戶端處于手機(jī)網(wǎng)絡(luò)或不是與網(wǎng)關(guān)在同一WiFi下,則通過HTTP與云服務(wù)器通信,云服務(wù)器轉(zhuǎn)發(fā)消息給網(wǎng)關(guān)。通信模塊流程如圖3所示。

        圖3 客戶端通信模塊流程圖

        主要流程解析如下:

        (1) 發(fā)送廣播,查找網(wǎng)關(guān),判斷與網(wǎng)關(guān)是否處于同一局域網(wǎng)。通過UDP的Socket發(fā)送廣播的方式來查找網(wǎng)關(guān)。UDP通信不需要事先建立連接,只需要?jiǎng)?chuàng)建一個(gè)發(fā)送和接收的套接字便可以實(shí)現(xiàn)數(shù)據(jù)的處理和發(fā)送。廣播地址“255.255.255.255”是一種特殊的廣播地址,表示向全世界進(jìn)行廣播,一般情況下不會(huì)被路由器路由。當(dāng)網(wǎng)關(guān)與客戶端處于同一局域網(wǎng)時(shí),會(huì)接收到此廣播,并返回信息,包括網(wǎng)關(guān)ID和進(jìn)行TCP通信的端口號(hào),客戶端接收返回信息,獲得網(wǎng)關(guān)IP和端口號(hào),為與網(wǎng)關(guān)進(jìn)行TCP通信創(chuàng)造條件。

        反之,當(dāng)網(wǎng)關(guān)與客戶端不處于同一網(wǎng)絡(luò)時(shí),如客戶端處于3G/4G網(wǎng)絡(luò)時(shí),網(wǎng)關(guān)接收不到廣播,也不會(huì)返回信息,客戶端設(shè)置接收超時(shí)時(shí)間,超過這段時(shí)間沒有接收到回復(fù)信息就退出,判斷與網(wǎng)關(guān)不處于同一網(wǎng)絡(luò)。具體核心代碼如下:

        client = new DatagramSocket(10000);

        //創(chuàng)建UDP套接字對(duì)

        client.setBroadcast(true);

        //設(shè)置對(duì)象可以進(jìn)行廣播

        sendPacket = new DatagramPacket(sendbuf, sendbuf.length, new InetSocketAddress(″255.255.255.255″, 8000));

        //創(chuàng)建發(fā)送數(shù)據(jù)的數(shù)據(jù)包,并指定廣播地址與端口號(hào)

        client.send(sendPacket);

        //發(fā)送廣播

        client.setSoTimeout(10000);

        //設(shè)置接收超時(shí)時(shí)間

        recvPacket = new DatagramPacket(recvbuf, recvbuf.length);

        //創(chuàng)建接收數(shù)據(jù)數(shù)據(jù)包

        client.receive(recvPacket);

        //接收廣播

        String ip = recvPacket.getAddress().toString().substring(1);

        //提取網(wǎng)關(guān)IP

        (2) 與網(wǎng)關(guān)通信。與網(wǎng)關(guān)端建立可靠的TCP連接,采用多線程機(jī)制進(jìn)行數(shù)據(jù)的發(fā)送和接收??蛻舳讼蚓W(wǎng)關(guān)發(fā)送查詢、添加等命令,接收和解析網(wǎng)關(guān)發(fā)送的相關(guān)信息,并在界面上顯示出來。

        (3) 用戶注冊(cè)和登錄。當(dāng)用戶查找不到網(wǎng)關(guān)時(shí),需要登錄云服務(wù)器,通過云服務(wù)器轉(zhuǎn)發(fā)消息給網(wǎng)關(guān)。采用Apache提供的HttpClient接口的post請(qǐng)求來實(shí)現(xiàn)與云服務(wù)器的通信,添加了連接超時(shí)等異常處理,并采用多線程機(jī)制接收云服務(wù)器端的返回?cái)?shù)據(jù)。Http通信需對(duì)返回的數(shù)據(jù)先進(jìn)行JSON格式解析,才能使用。當(dāng)用戶為新用戶時(shí),需要先注冊(cè)賬號(hào),用post請(qǐng)求提交參數(shù)為用戶名、密碼和郵箱,如果注冊(cè)成功,云服務(wù)器返回用戶ID和登錄成功標(biāo)志。用戶登錄時(shí)post請(qǐng)求參數(shù)為用戶名和密碼,登錄成功進(jìn)入系統(tǒng)控制界面,反之,返回到系統(tǒng)首頁(yè)。

        (4) 向云服務(wù)器發(fā)送查詢指令,判斷用戶是否綁定網(wǎng)關(guān),及判斷云服務(wù)器是否能找客戶端所綁定的網(wǎng)關(guān),能否進(jìn)行消息的轉(zhuǎn)發(fā)。這里也是采用HttpClient接口的post請(qǐng)求與云服務(wù)器通信,請(qǐng)求參數(shù)為用戶名、密碼和網(wǎng)關(guān)識(shí)別碼。用JSON格式解析返回?cái)?shù)據(jù),判斷云服務(wù)器中是否有記錄用戶綁定的網(wǎng)關(guān)。

        (5) 綁定網(wǎng)關(guān)。本設(shè)計(jì)規(guī)定一個(gè)用戶只能綁定一個(gè)網(wǎng)關(guān),而一個(gè)網(wǎng)關(guān)可以綁定多個(gè)用戶,即實(shí)現(xiàn)多用戶操作。客戶端用HttpClient接口的post請(qǐng)求向云端提交想要綁定的網(wǎng)關(guān)ID,云端保存用戶ID和網(wǎng)關(guān)ID,以便查詢和轉(zhuǎn)發(fā)消息。

        (6) 與云服務(wù)器通信。當(dāng)用戶成功綁定網(wǎng)關(guān)后,向云端發(fā)送消息有數(shù)據(jù)返回,即實(shí)現(xiàn)外網(wǎng)通信。采用Apache提供的HttpClient接口的post請(qǐng)求來實(shí)現(xiàn)與云服務(wù)器的通信,采用多線程機(jī)制進(jìn)行數(shù)據(jù)的發(fā)送和接收??蛻舳讼蛟品?wù)器發(fā)送查詢、添加等命令,接收和解析云服務(wù)器發(fā)送的相關(guān)信息,并在界面上顯示出來。

        (7) 用戶處理。當(dāng)用戶已成功綁定網(wǎng)關(guān)時(shí),向云端發(fā)送數(shù)據(jù)沒有返回。提示有兩種可能:網(wǎng)關(guān)未連上路由器;路由器未連上外網(wǎng)。用戶根據(jù)所處的環(huán)境進(jìn)行相應(yīng)的處理。若是網(wǎng)關(guān)未連上路由器則進(jìn)行智能配對(duì),提示用戶開啟WiFi,進(jìn)入智能配對(duì)界面,輸入指定WiFi的SSID和密碼,通過特定協(xié)議發(fā)送數(shù)據(jù)包,數(shù)據(jù)包包含WiFi信息,網(wǎng)關(guān)端進(jìn)行抓包處理,獲取WiFi信息,并連上路由器。若是路由器未連外網(wǎng),用戶必須使路由器連上外網(wǎng),否則無法操作。

        2.2.2客戶端通信協(xié)議的設(shè)計(jì)

        自定義Android客戶端與網(wǎng)關(guān)的通信協(xié)議,并對(duì)發(fā)送的數(shù)據(jù)進(jìn)行MD5加密處理和Base64編碼,提高了系統(tǒng)可擴(kuò)展性和網(wǎng)絡(luò)傳輸?shù)目煽啃?。其中MD5是報(bào)文摘要算法的一種,是根據(jù)報(bào)文的內(nèi)容摘取一部分進(jìn)行加密,可以檢查報(bào)文是否被篡改過。協(xié)議格式如圖4所示。

        圖4通信協(xié)議格式

        起始位、結(jié)束位——分別標(biāo)示一幀數(shù)據(jù)的開始與結(jié)束;

        WID——網(wǎng)關(guān)ID,用于標(biāo)識(shí)網(wǎng)關(guān);

        UID——用戶ID,用于標(biāo)識(shí)用戶,當(dāng)用戶注冊(cè)成功時(shí),由云服務(wù)器分配用戶ID;

        SEQ——請(qǐng)求序列,遞增;

        LEN——一幀數(shù)據(jù)總長(zhǎng)度;

        CMD——標(biāo)示不同的命令;

        MSG——消息內(nèi)容;

        MD5——數(shù)據(jù)經(jīng)MD5加密值。

        客戶端通過與網(wǎng)關(guān)和云服務(wù)器的交互,將房間、設(shè)備、定時(shí)器、情景等信息發(fā)送給網(wǎng)關(guān)端保存,通過查詢網(wǎng)關(guān)獲取信息并顯示在客戶端界面上。這樣只要用戶客戶端擁有此APP并登錄成功后,即可獲得網(wǎng)關(guān)內(nèi)保存的所有智能家居信息,實(shí)現(xiàn)多用戶數(shù)據(jù)共享。

        消息類型主要包括:查找網(wǎng)關(guān)、綁定網(wǎng)關(guān)、添加、刪除、修改、查詢、設(shè)備控制命令。其中添加、刪除和修改命令實(shí)現(xiàn)對(duì)房間、設(shè)備、定時(shí)器、情景的動(dòng)態(tài)添加和刪除。查詢命令獲取房間設(shè)備情景等信息。設(shè)備控制命令實(shí)現(xiàn)對(duì)設(shè)備的控制,如控制卷簾的開、關(guān)和上下停。以設(shè)備相關(guān)命令為例,交互過程如圖5所示。

        圖5 客戶端、云端、網(wǎng)關(guān)(設(shè)備)命令交互圖

        2.3基于MQTT協(xié)議的消息推送的設(shè)計(jì)與實(shí)現(xiàn)

        2.3.1MQTT協(xié)議簡(jiǎn)介和特性分析

        IBM WebSphere MQ Telemetry Transport(MQTT)是一款基于TCP長(zhǎng)連接的輕量級(jí)發(fā)布/訂閱協(xié)議,主要用于連接大量的遠(yuǎn)程控制設(shè)備和傳感器[7]。MQTT的設(shè)計(jì)思想是開發(fā)、簡(jiǎn)單、輕量、易于實(shí)現(xiàn),這些特點(diǎn)使它適用于如網(wǎng)絡(luò)代價(jià)比較昂貴、帶寬相對(duì)較低或者不可靠的環(huán)境。通常應(yīng)用于嵌入式設(shè)備或者內(nèi)存和處理器資源有限的場(chǎng)景[8,9]。常用于智能手機(jī)、手持智能設(shè)備等小型設(shè)備通信中。MQTT協(xié)議的主要特點(diǎn)有:

        (1) 輕巧:傳輸格式最小化,沒有應(yīng)用消息頭,最小的數(shù)據(jù)包只有2 bit。

        (2) 可靠:三種不同的服務(wù)質(zhì)量:“至多一次”,消息發(fā)布完全依賴底層TCP /IP網(wǎng)絡(luò),會(huì)發(fā)生消息丟失或重復(fù)?!爸辽僖淮巍?,確保消息到達(dá),但消息重復(fù)可能發(fā)生?!爸挥幸淮巍?,確保消息到達(dá)一次。

        (3) 簡(jiǎn)單:簡(jiǎn)單體積小的發(fā)布/訂閱消息模式,異步“推送”傳輸,簡(jiǎn)單的使用方式——連接、發(fā)布、訂閱、斷開。

        本設(shè)計(jì)支持多用戶操作,當(dāng)有一用戶控制設(shè)備,改變?cè)O(shè)備狀態(tài)時(shí),其他用戶能否及時(shí)獲取設(shè)備信息并更新設(shè)備狀態(tài)是關(guān)鍵。為解決這個(gè)問題,基于以上特點(diǎn),采用MQTT協(xié)議的推送機(jī)制??蛻舳讼騇QTT消息代理服務(wù)器端訂閱設(shè)備消息,當(dāng)用戶控制設(shè)備,改變?cè)O(shè)備狀態(tài)時(shí),雙向設(shè)備向網(wǎng)關(guān)端發(fā)送新的設(shè)備信息,網(wǎng)關(guān)將消息傳遞給MQTT代理服務(wù)器,服務(wù)器將設(shè)備信息推送給其他客戶端,實(shí)現(xiàn)了多用戶同時(shí)操作設(shè)備時(shí),客戶端能及時(shí)接收設(shè)備信息。

        2.3.2消息推送的工作流程

        IBM提供了實(shí)現(xiàn)MQTT協(xié)議的jar包——wmqtt.jar,首先將此jar包添加到Android工程中。

        客戶端實(shí)現(xiàn)消息推送主要過程包括:連接MQTT代理服務(wù)器、發(fā)送請(qǐng)求、以回調(diào)函數(shù)的形式等待系統(tǒng)返回、接受服務(wù)器推送數(shù)據(jù)并解析,最后轉(zhuǎn)交給前臺(tái)UI線程顯示。

        主要流程如下:

        (1) 創(chuàng)建一個(gè)MqttClient對(duì)象 client 用于連接到遠(yuǎn)程的 MQTT 服務(wù)器。 Client 在連接MQTT服務(wù)器時(shí),要設(shè)定MQTT服務(wù)器IP和監(jiān)聽的端口號(hào),并設(shè)置唯一的客戶端標(biāo)識(shí)。因?yàn)槿绻c前一個(gè)實(shí)例使用同一個(gè)客戶端標(biāo)識(shí),那么表示目前的實(shí)例是同一個(gè)客戶機(jī)的實(shí)例。如果在兩個(gè)正在運(yùn)行的客戶端中重復(fù)使用同一個(gè)客戶機(jī)標(biāo)識(shí),那么這兩個(gè)客戶機(jī)中都會(huì)拋出異常,并且一個(gè)客戶端會(huì)終止。MQTT 服務(wù)器IP為“MQTT_SERVER_IP”,監(jiān)聽的端口號(hào)是1883,“UID”由云服務(wù)器分配,標(biāo)志唯一客戶端,用于標(biāo)識(shí)客戶端名稱。

        MqttClient client =MqttClient(″tcp://MQTT_SERVER_IP :1883″,null);

        //MqttClient對(duì)象,指定連接服務(wù)器IP和端口號(hào)

        (2) 構(gòu)造一個(gè)CallBack對(duì)象接收消息,在構(gòu)建這個(gè)CallBack對(duì)象的時(shí)候傳入了一個(gè) Handler 對(duì)象用于更新主界面 UI ——將消息內(nèi)容顯示在主界面上。

        SimpleCallBack callback = new SimpleCallBack(mhandler);

        client.registerSimpleHandler(callback);

        (3) 調(diào)用client對(duì)象的subscribe()方法使其訂閱主題字符串為WBID的消息,WBID為網(wǎng)關(guān)ID, QOS設(shè)1。這里首先判斷客戶端是否成功連接:

        if((client != null) || (client.isConnected()) != false)

        {

        client.subscribe(new String[]{WBID}, new int[]{1});

        }

        (4) SimpleCallBack繼承MqttSimpleCallback,實(shí)現(xiàn)了兩個(gè)響應(yīng)不同事件的方法connectionLost()和publishArrived()。publishArrived()方法負(fù)責(zé)響應(yīng)收到消息后的事件,構(gòu)建了一個(gè) Message 對(duì)象,最后把這個(gè)包含了消息內(nèi)容的 Message 對(duì)象通過 Handler 發(fā)送給主線程。

        public class SimpleCallBack implements MqttSimpleCallback {

        private Handler handler;

        public SimpleCallBack(Handler handler) {

        this.handler = handler;

        }

        @Override

        public void connectionLost() throws Exception {

        // TODO Auto-generated method stub

        }

        @Override

        public void publishArrived(String topicName, byte[] payload, int Qos,boolean retained) throws Exception {

        // TODO Auto-generated method stub

        Message msg = handler.obtainMessage();

        msg.obj = payload;

        msg.what = 10;

        handler.sendMessage(msg);

        }

        }

        (5) 主線程創(chuàng)建mHandler內(nèi)部類,通過它的handle Message()方法接收 Callback 類通過 mHandler 對(duì)象發(fā)來的消息,根據(jù)Json格式解析數(shù)據(jù),提取設(shè)備信息,根據(jù)設(shè)備狀態(tài)值,設(shè)置設(shè)備狀態(tài)。如根據(jù)消息中傳遞的卷簾位置,設(shè)置設(shè)備動(dòng)畫中卷簾的位置。Json解析如下:

        privateHashMapparseJSONString(String JSONString){

        HashMap resultMap = new HashMap();

        try{

        JSONObject object = new JSONObject(JSONString);

        resultMap.put(″wlinkid″, object.getString(″wlinkid″));

        resultMap.put(″devid″, object.getInt(″devid″));

        ?

        } catch (JSONException e) {

        e.printStackTrace();

        }

        return resultMap;

        }

        通過使用MQTT消息推送,設(shè)備信息能得到及時(shí)推送,使得用戶們能及時(shí)獲取設(shè)備狀態(tài),更有利于對(duì)智能家居的控制。

        2.4UI界面展示和測(cè)試分析

        智能家居客戶端用于人機(jī)交互,界面友善、靈活、精簡(jiǎn)是前提。本設(shè)計(jì)可根據(jù)用戶不同需求動(dòng)態(tài)添加房間、設(shè)備、定時(shí)和情景,用戶可自定義房間名稱和設(shè)備圖片,圖片可從默認(rèn)的圖片或是拍照、相冊(cè)中獲取,如圖6所示。

        圖6 房間、設(shè)備相關(guān)界面

        主設(shè)置界面包括設(shè)備管理、情景管理等設(shè)置,支持動(dòng)態(tài)添加、刪除情景和定時(shí),如圖7所示。

        圖7 主設(shè)置相關(guān)界面

        Android手機(jī)與網(wǎng)關(guān)通信,因?yàn)橥ㄐ艛?shù)據(jù)經(jīng)過MD5加密和base64編碼,通過Socket調(diào)試助手不能直接顯示發(fā)送和接收的指令。網(wǎng)關(guān)端將接收和發(fā)送的指令及下發(fā)給串口的指令通過UDP廣播,Socket調(diào)試助手接收廣播并以十六進(jìn)制顯示,如圖8所示。

        圖8 測(cè)試結(jié)果

        其中包括房間添加、設(shè)備添加、設(shè)備控制等命令,表明客戶端能成功地發(fā)送和接收消息。網(wǎng)關(guān)也能接收消息和將消息下發(fā)給串口,實(shí)現(xiàn)對(duì)設(shè)備的控制。

        3 結(jié) 語(yǔ)

        本設(shè)計(jì)基于Android平臺(tái)的智能家居控制客戶端能正確地判斷客戶端所處的網(wǎng)絡(luò)并選擇正確的通信方式,實(shí)現(xiàn)用戶隨時(shí)隨地對(duì)智能家居的控制。Android客戶端與網(wǎng)關(guān)通信,網(wǎng)關(guān)保存設(shè)備等信息,客戶端通過查詢網(wǎng)關(guān)獲得信息并顯示。這樣避免傳統(tǒng)智能家居控制中信息均存在客戶端本地,不能實(shí)現(xiàn)多用戶共享。客戶端實(shí)現(xiàn)了動(dòng)態(tài)添加房間和設(shè)備,更能適應(yīng)人們的需求,大大提高了智能家居控制系統(tǒng)的靈魂性。并添加定時(shí)器和情景模式,使得用戶對(duì)智能家居的控制更加人性化和方便。同時(shí)采用MQTT消息推送機(jī)制,及時(shí)地更新設(shè)備信息,是一款更加智能化、人性化、操作簡(jiǎn)便、性能良好的智能家居客戶端軟件。

        但客戶端還是存在有待改善的地方:如現(xiàn)在實(shí)現(xiàn)的是對(duì)卷簾、百葉、燈光和插座等設(shè)備的控制,可以添加更多類型的設(shè)備如空調(diào)等設(shè)備,使得智能家居系統(tǒng)更加完善;另一方面,系統(tǒng)和接受MQTT推送的消息時(shí)設(shè)備動(dòng)畫設(shè)置的穩(wěn)定性有待加強(qiáng);最后,UI界面可以做得更加人性化。

        [1] 董立巖,隋鵬,辛?xí)匀A,等.基于Android的智能家居終端控制系統(tǒng)[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2014,32(3):303-307.

        [2] 李濤.基于Android的智能家居APP的設(shè)計(jì)與實(shí)現(xiàn)[D].蘇州大學(xué),2014.

        [3] 郭健儐,蔡雪松.基于Android平臺(tái)的公交信息發(fā)布終端軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(9):322-324,333.

        [4] 周娟.基于Android的智能家居控制系統(tǒng)的研究與實(shí)現(xiàn)[D].西安科技大學(xué),2014.

        [5] 李中平,邱健峰,李璐,等.Android手機(jī)遠(yuǎn)程控制關(guān)鍵技術(shù)分析[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(4):113-115,127.

        [6] 邵保新.云架構(gòu)下的聲控智能家居系統(tǒng)[D].鄭州大學(xué),2014.

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

        [8] 許金喜,張新有.Android平臺(tái)基于MQTT協(xié)議的推送機(jī)制[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2015,24(1):185-190.

        [9] 關(guān)慶余,李鴻彬,于波.MQTT協(xié)議在Android平臺(tái)上的研究與應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014,23(4):197-200.

        DESIGN AND IMPLEMENTATION OF ANDROID PLATFORM-BASED SMART HOME CLIENT

        Qin Lihong1Qin Huibin1Zhu Jianbin1Cao Shuguang2

        1(School of Electronic Information,Hangzhou Dianzi University,Hangzhou 310000,Zhejiang,China)2(ZhejiangHowellIlluminateTechnologyCo.,Ltd.,Yuyao315408,Zhejiang,China)

        To improve the deficiencies of traditional smart home client in signal function, complicated operation and difficult in promotion, we design and implement a smart home client, it is based on Android system platform and integrates the key technologies including the control of smart home from internal and external networks, smart pairing, dynamic rooms and devices adding, multi-user data sharing, and information push, etc. By forwarding messages through cloud server, the client realises the communication between external network and gateway. The gateway reserves all the information about smart home, the client obtaines the information by gateway query to achieve multiuser data sharing. It uses MQTT protocol-based message pushing mechanism, and realises to push devices information to every user when there is the change in devices status. It is tested that the multi-user can get the information of devices or so from the gateway, and can control the devices as well. It is a smart home client software with good performance and friendly UI.

        Smart homeAndroidCloud serverData shareMessage push

        2015-03-27。秦利紅,碩士生,主研領(lǐng)域:基于Android平臺(tái)應(yīng)用軟件開發(fā)。秦會(huì)斌,教授。諸堅(jiān)彬,碩士生。曹曙光,助理研究員。

        TP311

        A

        10.3969/j.issn.1000-386x.2016.09.021

        猜你喜歡
        界面用戶設(shè)備
        諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
        國(guó)企黨委前置研究的“四個(gè)界面”
        基于MPU6050簡(jiǎn)單控制設(shè)備
        電子制作(2018年11期)2018-08-04 03:26:08
        基于FANUC PICTURE的虛擬軸坐標(biāo)顯示界面開發(fā)方法研究
        關(guān)注用戶
        商用汽車(2016年11期)2016-12-19 01:20:16
        人機(jī)交互界面發(fā)展趨勢(shì)研究
        關(guān)注用戶
        商用汽車(2016年6期)2016-06-29 09:18:54
        關(guān)注用戶
        商用汽車(2016年4期)2016-05-09 01:23:12
        500kV輸變電設(shè)備運(yùn)行維護(hù)探討
        手機(jī)界面中圖形符號(hào)的發(fā)展趨向
        新聞傳播(2015年11期)2015-07-18 11:15:04
        97人人模人人爽人人喊电影 | 国产精品女同一区二区| 成人无码网www在线观看| 国产免费一区二区三区三| 日本国产精品久久一线| 免费无码av一区二区三区| 乱码一二三入区口| 丝袜 亚洲 另类 欧美| 亚洲视频一区二区免费看| 丰满少妇a级毛片| 亚洲中文久久精品无码ww16| 高潮社区51视频在线观看| 精品私密av一区二区三区| 无码人妻精品一区二区三区9厂| 国产小受呻吟gv视频在线观看| 99在线无码精品秘 入口九色| 亚洲av色av成人噜噜噜| 国产精品免费av片在线观看| 最新四色米奇影视777在线看| 久久99老妇伦国产熟女高清| 国内自拍视频一区二区三区| 亚洲乱码日产精品一二三| 极品尤物高潮潮喷在线视频 | 日本va欧美va精品发布| 初尝黑人巨砲波多野结衣| 欧美人与物videos另类| 亚洲天堂亚洲天堂亚洲色图| 日本最新免费二区| 特级黄色毛片视频| 国产丝袜在线福利观看| 精品久久久久久综合日本| 日韩精品无码免费专区网站| 亚洲中文欧美日韩在线| 亚洲天堂av黄色在线观看| 国产伦人人人人人人性| 九九99久久精品在免费线18| 蜜桃av福利精品小视频| av天堂午夜精品一区| 欧美大香线蕉线伊人久久| 亚洲av套图一区二区| 精品国产一区二区三区久久女人|