周成明,鄔春學,李 銳,楊桂松,吳志剛
(1.上海理工大學 光電信息與計算機工程學院,上?!?00093;2.東莞銨輝電子有限公司,廣東 東莞 523000)
?
自主安全的智能家居服務器系統(tǒng)設計
周成明1,鄔春學1,李銳1,楊桂松1,吳志剛2
(1.上海理工大學 光電信息與計算機工程學院,上海200093;2.東莞銨輝電子有限公司,廣東 東莞523000)
摘要為實現(xiàn)實時對家居環(huán)境的監(jiān)控以及滿足人們對家居環(huán)境安全性的要求,設計一種結(jié)合ARM,Android,ZigBee,GSM,Redis以及BOA技術的安全智能家庭系統(tǒng)。家電節(jié)點傳感器負責家電設備信息收集,ZigBee網(wǎng)絡負責傳輸這些信息,ARM服務器進行處理,GSM模塊發(fā)送報警信息,Android客戶端進行信息顯示并控制。針對實時性以及安全性要求,重點研究服務器的硬件通信、守護進程、數(shù)據(jù)接收以及解析、消息隊列管理等。實驗結(jié)果表明,系統(tǒng)通過手機端可隨時隨地對家居環(huán)境進行監(jiān)控,操作幾乎無延遲;服務器自主安全運行,無需人工干預;數(shù)據(jù)存儲在本地服務器,不經(jīng)過第三方;手機端每次登錄比對號碼,密碼以及IMEI,安全性得到保障。
關鍵詞智能家居;自主安全;服務器;數(shù)據(jù)解析;消息隊列管理
現(xiàn)有智能家庭研究方案[1-2]:ARM作為服務器,以ZigBee網(wǎng)絡實現(xiàn)數(shù)據(jù)收集,PC端實現(xiàn)系統(tǒng)的控制與數(shù)據(jù)顯示,用戶可在PC端對節(jié)點進行配置[3]。但這種方式?jīng)]有做到實時的監(jiān)控,手機端仍只是一個附屬平臺,只完成少量的監(jiān)測,同時在發(fā)生突發(fā)情況時無法及時的通知用戶,致使智能家居的安全防護功能降低。一些研究方案提出控制平臺,這也是目前多數(shù)智能家居廠商的做法[1-5],諸如設備狀態(tài),服務器信息等數(shù)據(jù)存儲在第三方平臺上,用戶訪問平臺獲取各種信息或者設備數(shù)據(jù)后再去訪問自身的家居情況,這大幅降低了系統(tǒng)的安全性以及私密性。智能家居的協(xié)議設計很重要,目前的一些研究方案中的協(xié)議設計過于簡單,無法適應大量節(jié)點的監(jiān)控要求[6-7],易導致數(shù)據(jù)接收延遲時間變大。同時過于簡單的協(xié)議也使得通信安全性大幅降低[8-9],易造成數(shù)據(jù)丟失或錯發(fā)[10-13]。
為提高系統(tǒng)的自主性和安全性,設計了基于Android、ARM、ZigBee、Redis以及傳感器技術的嵌入式智能家居系統(tǒng)。系統(tǒng)自主運行,無需人工參與,同時在運行過程中服務器會以不同的指示燈告知用戶運行情況;用戶隨時隨地通過手機客戶端監(jiān)測家電節(jié)點;同時在發(fā)生火災或其他一些突發(fā)情況時,服務器會發(fā)送報警短信給用戶;根據(jù)設置的場景模式,系統(tǒng)智能調(diào)節(jié)各節(jié)點運行;設置安全的數(shù)據(jù)協(xié)議,確保數(shù)據(jù)正確傳輸與接收;采用了改進的消息管理機制以及結(jié)合數(shù)據(jù)庫隊列讀取機制,減少節(jié)點控制延遲時間;手機號與IMEI以及用戶名進行綁定,拒絕非法客戶端的登入;家電節(jié)點信息存放在自己服務器,不從第三方平臺獲取,提高了安全性。
1智能家居系統(tǒng)總體框架
智能家居系統(tǒng)主要由用戶端、嵌入式服務器端和家居設備終端3個部分組成,如圖1所示。攝像頭以及家電節(jié)點同屬家居設備終端,家電節(jié)點通過ZigBee網(wǎng)絡與服務器端進行數(shù)據(jù)傳輸,而攝像頭通過Internet與服務器端進行通信。用戶終端可通過Internet來訪問服務器從而實現(xiàn)對家電節(jié)點的配置或控制。
圖1 智能家居系統(tǒng)總體框架
2嵌入式服務器硬件通信設計
智能家居采用Cubieboard作為嵌入式服務器進行數(shù)據(jù)接收和處理,系統(tǒng)采用Lubuntu。服務器與ZigBee網(wǎng)絡協(xié)調(diào)器之間的通信,以及驅(qū)動外載LED燈亮都是通過GPIO接口來實現(xiàn)數(shù)據(jù)傳輸。由于系統(tǒng)默認沒有打開串口,首先打開GPIO接口,然后才可通過其進行數(shù)據(jù)通信。
2.1端口配置文件的修改
打開GPIO口首先需要修改script.bin文件。script.bin是被全志SoC內(nèi)核驅(qū)動或LiveSuit使用的針對特定目標板的二進制配置文件,包含如何設置基于A10目標版的各種外設、端口和I/O針腳信息。要修改script.bin首先需要通過fex2bin工具將其變成文本格式script.fex:
./bin2fex script.bin>./script.fex? 主要修改內(nèi)容為:
[uart_para3]
uart_used=1
uart_port=3
uart_type=2
uart_para3代表修改的串口是com4,uart_used代表此串口是否使用,使用為‘1’。重新生成script.bin文件,最后將其拷貝至原位置,重啟系統(tǒng)。
2.2GPIO接口驅(qū)動LED
通過下載GPIO庫來調(diào)用GPIO接口,在下載安裝成功后,便可在程序中調(diào)用庫中的程序從而驅(qū)動GPIO。程序在讀寫GPIO口之前首先需調(diào)用sunxi_gpio_init()初始化GPIO口,初始化成功后將端口(port代表端口號)設置為寫或讀sunxi_gpio_set_cfgpin(SUNXI_GPE(port),OUTPUT),sunxi_gpio_set_cfgpin(SUNXI_GPI(port),INTPUT),在設置成功后便可調(diào)sunxi_gpio_output(SUNXI_GPE(port),LOW/HIGH),sunxi_gpio_input(SUNXI_GPI(port),對port端口進行寫和讀。
3智能家居服務器守護進程
嵌入式服務器軟件的主要工作是對各平臺傳過來的數(shù)據(jù)進行解析并進行相應的處理。在服務器運行兩個守護進程來分別實現(xiàn),對協(xié)調(diào)器傳輸來的數(shù)據(jù)進行接收處理并發(fā)送命令給協(xié)調(diào)器:parent進程和child進程。
3.1parent進程接收數(shù)據(jù)流程
parent主要是對協(xié)調(diào)器傳過來的數(shù)據(jù)進行處理(圖2)。parent進程反復讀取串口,若有數(shù)據(jù)則解析出命令類型字段,再根據(jù)命令類型進行相應的處理。
圖2 parent進程數(shù)據(jù)處理流程圖
3.2child進程發(fā)送數(shù)據(jù)流程
child進程主要是將服務器生成的數(shù)據(jù)發(fā)送給協(xié)調(diào)器,如圖3所示。child進程以堵塞方式讀取redis數(shù)據(jù)庫中名為server的隊列,讀取到數(shù)據(jù)則將其轉(zhuǎn)發(fā)到串口并刪除此數(shù)據(jù)。
圖3 child進程流程圖
4智能家居服務器的關鍵技術
4.1數(shù)據(jù)的解析與生成
系統(tǒng)主要是與ZigBee協(xié)調(diào)器以及手機通信,因此要解析兩個平臺的通信數(shù)據(jù)需要分別與各平臺約定數(shù)據(jù)協(xié)議格式從而實現(xiàn)對不同平臺的數(shù)據(jù)進行解析與生成。
4.1.1服務器與協(xié)調(diào)器通信
服務器與協(xié)調(diào)器的通信是整個系統(tǒng)的最重要的部分,為確保安全性以及滿足大量節(jié)點的通信需求,將協(xié)議制定如圖4所示。
目標節(jié)點號源節(jié)點號命令特征字內(nèi)容MAC地址#網(wǎng)絡地址校驗碼
圖4通信協(xié)議
為保證數(shù)據(jù)傳輸?shù)陌踩砸约罢_解析與生成,采用3個標識來識別一個家電節(jié)點,分別是:目標節(jié)點號,MAC,網(wǎng)絡地址,確保所發(fā)送的數(shù)據(jù),可正確傳輸給目標節(jié)點,同時校驗碼用來保證只有正確的數(shù)據(jù)才會被接收。命令特征字包括:WE,KZ,BJ,ZJ,WL,WS分別代表寫配置信息,控制節(jié)點,報警,刷新數(shù)據(jù),確認網(wǎng)絡地址和握手信息?!皟?nèi)容”根據(jù)不同的控制字分別是不同的數(shù)據(jù)內(nèi)容。服務器在收到協(xié)調(diào)器發(fā)來的數(shù)據(jù)后,首先檢測校驗碼,若校驗碼正確,則將數(shù)據(jù)按照數(shù)據(jù)協(xié)議格式轉(zhuǎn)換成程序中的結(jié)構(gòu)體,結(jié)構(gòu)體格式如下:
struct cmd_struct{
char dst_id6〗;
char src_id[6];
char cmd_type[6];
char cmd_data[34];
char cmd_tail[6];
}
各個數(shù)組分別代表了目標號,源節(jié)點號,控制字,數(shù)據(jù)內(nèi)容,校驗碼。接下來程序根據(jù)不同的控制字調(diào)用不同的程序?qū)?shù)據(jù)進行處理。算法如下:服務器最初收到的數(shù)據(jù)是十六進制的,要將其轉(zhuǎn)換為字符串后,再將其轉(zhuǎn)換成結(jié)構(gòu)體。
輸入:收到的十六進制數(shù)據(jù)hex
輸出:結(jié)構(gòu)體str
if(verify(hex)==0)
{hex_to_string(cmdch,hex,31);
cmd_to_struct(cmdch,str);
}
Switch(str→cmd_type){
Case “ZJ”:
Case “WE”:
…}
當發(fā)數(shù)據(jù)給協(xié)調(diào)器時,首先需要得到各個結(jié)構(gòu)體中數(shù)組中的內(nèi)容,接著按照數(shù)據(jù)協(xié)議格式生成數(shù)據(jù)字符串,算法如下:
輸入:命令結(jié)構(gòu)體str
輸出:命令字符串cmdch
memcpy(string,str,62);
verify_string(string,rt);//生成校驗碼
memcpy(str→cmd-_tail+4,rt,2);
memcpy(str→cmd_tail+6,”0D0A”,4);
memcpy(cmd,str,sizeof(*str));
4.1.2服務器與手機通信
服務器與手機客戶端采用Http協(xié)議進行通信,客戶端直接通過調(diào)用服務器的CGI程序來對家電節(jié)點進行監(jiān)控。服務器與手機之間的數(shù)據(jù)傳輸采用JSON數(shù)據(jù)格式。服務器與手機之間的JSON格式如下:
發(fā)送JSON數(shù)據(jù)格式
{“telephoneID”:“xxx”,//手機ID
“phoneNumber”:“xxx”,//手機號
“imei”:”xxx”,//手機IMEI
“versionID”:“xxx”,//服務器數(shù)據(jù)版本號
“deviceID”:”xxx”,//要操控的設備ID
“commandType”:”XX”,//操作類型編碼
“command”:”xx”//操作碼
}
服務器回復格式
{“telephoneID”:“xxx”,
“versionID”:“xxx”,
“deviceID”:”xxx”,
“commandType”:” XX”,
“result”:”xxx”//返回值
}
4.2消息隊列管理技術
手機控制節(jié)點,服務器在將手機端傳過來的JSON數(shù)據(jù)按照協(xié)議格式生成命令字符串后,會先將字符串存儲到數(shù)據(jù)庫中名為server的隊列中,然后子進程再去讀取,子進程讀取到數(shù)據(jù)后等待串口空閑的時候再將其發(fā)送到串口,最后傳給協(xié)調(diào)器。由于此種辦法會造成較大的延遲,同時當有多個操作時,數(shù)據(jù)庫里會有多個操作命令隊列,會造成一定的操作混亂,因此系統(tǒng)采用改進的隊列管理方法。首先服務器采用了堵塞方式去發(fā)送隊列。當兩條隊列數(shù)據(jù)發(fā)送時間間隔過小時,則暫緩發(fā)送下一條數(shù)據(jù),只有當一條隊列數(shù)據(jù)完全發(fā)送出去后才會發(fā)送下一條隊列,這能減少數(shù)據(jù)庫的訪問次數(shù),從而有效減小操作延遲時間。其次每次從隊列中讀取到一條數(shù)據(jù)后,就將這條數(shù)據(jù)保存在本地,同時從數(shù)據(jù)庫server隊列中刪除這條數(shù)據(jù),保證隊列中只有一條數(shù)據(jù),這樣操作就不會產(chǎn)生混亂。算法如下:采用Linux中time函數(shù)來獲取當前系統(tǒng)時間。
輸入:數(shù)據(jù)庫指針C,串口號portno
輸出:無
static time_t t_now,t_old=0;
char sf[63];
time(&t_now);
if(Readlist(c,”server”,1,sf)==0)//從隊列中讀取數(shù)據(jù)
{
if((t_now-t_old)<1) usleep(200000);
ComWrt(portno,sf,31);//發(fā)送到串口
t_old=t_now;
}
5智能家居服務器實現(xiàn)與測試
智能家居服務器采用Cubieboard;系統(tǒng)使用Lubuntu系統(tǒng),數(shù)據(jù)庫采用Redis數(shù)據(jù)庫,Beb服務器使用小巧的Boa服務器;手機客戶端基于Android系統(tǒng)編寫;網(wǎng)頁采用HTML語言編寫。測試采用華為Android手機。在整個測試運行過程中,外接LED正常閃爍提示用戶運行情況。
5.1網(wǎng)頁端的實現(xiàn)
5.1.1系統(tǒng)家電顯示
在瀏覽器中輸入智能家居服務器的網(wǎng)絡地址,便可以訪問服務器,網(wǎng)頁每隔5 s便可刷新一次,實時顯示當前系統(tǒng)中所有的家電節(jié)點的詳細信息,并可對斷線的家電節(jié)點以及剛上線的節(jié)點以不同顏色顯示。用戶可以對各個節(jié)點進行修改,刪除以及恢復出廠設置。
圖5 家電節(jié)點顯示
5.1.2配置節(jié)點
在網(wǎng)頁上可對家電節(jié)點的信息進行修改以及配置,如圖6所示。
圖6 系統(tǒng)配置界面
5.2手機端實現(xiàn)
5.2.1手機端數(shù)據(jù)顯示
手機客戶端登錄時,會先獲取服務器中所有已有節(jié)點的最新的狀態(tài)信息,并在客戶端界面上予以顯示,如圖7所示。在手機客戶端可控制各個在線節(jié)點,并在收到服務器返回的反饋信息后,顯示節(jié)點當前狀態(tài)。
圖7 手機端實現(xiàn)
5.2.2手機端時間測試
智能家居系統(tǒng)優(yōu)劣的一個主要標準是手機控制所產(chǎn)生的延遲時間,在未采用消息隊列管理機制前,延遲時間較大,改進后,經(jīng)過測試發(fā)現(xiàn),延遲時間明顯變小,兩次10組測試數(shù)據(jù)如表1和表2所示。
表1 原節(jié)點延遲時間表 s
表2 改進后節(jié)點延遲時間表 s
將兩次10組測試數(shù)據(jù)計算出平均值,畫出折線圖如圖8所示。
圖8 改進前后延遲時間比較
從表2及圖8可看出,經(jīng)過改進后,控制延遲時間明顯減小。
6結(jié)束語
本文基于ARM,ZigBee,GSM等技術,對智能家居嵌入式服務器技術進行了設計與研究。服務器自主運行無需人工干預;手機客戶端隨時隨地監(jiān)控家電節(jié)點;根據(jù)場景模式,系統(tǒng)根據(jù)家庭情況智能調(diào)節(jié)家電節(jié)點;改進了消息隊列管理方式,使得操作延遲時間大幅減小;在安全性方面,設計了安全的數(shù)據(jù)協(xié)議,保證了命令字符串安全正確的送達;節(jié)點所有數(shù)據(jù)存放在本地服務器,不依賴于第三方平臺;每個訪問服務器的手機端都需要先在網(wǎng)頁端注冊,拒絕非法訪問。實驗結(jié)果表明,該嵌入式軟件系統(tǒng)基本完成了智能家居服務器的功能,具有很好的實用價值。下一步的工作是優(yōu)化場景控制模式,完善智能控制策略,實現(xiàn)無錯控制;繼續(xù)提高安全性,對傳輸數(shù)據(jù)采用加密傳輸。
參考文獻
[1]寧煥生,徐群玉.全球物聯(lián)網(wǎng)發(fā)展及中國物聯(lián)網(wǎng)建設若干思考[J].電子學報,2010,38(11):2590-2599.
[2]尹紀庭,袁佳,焦志曼,等.基于ARM和ZigBee的智能家居控制系統(tǒng)研究與開發(fā)[J].計算機測量與控制,2013,21(9):2451-2454.
[3]閔麗娟,盧捍華,王亞石.智能開關照明控制系統(tǒng)中的上位機軟件設計[J].計算機工程,2011,37(22):290-293.
[4]陳超,羅楠稀,馮璐.智能家居無線傳感器網(wǎng)絡網(wǎng)關設計與開發(fā)[J].現(xiàn)代電信科技,2012(5):11-15.
[5]Durrett J B,Burnell L J,Priest J W.A hybrid analysis and architectural design method of development of smart home components[J].IEEE Transactions on Wireless Communications,2002,9(6):85-91.
[6]李治斌,鄧小芳,張余明,等.基于ZigBee技術的智能調(diào)光開關設計[J].傳感器與微系統(tǒng),2014,33(1):60-63.
[7]陳帥,鐘先信,劉積學,等.基于GPRS的智能家居安全監(jiān)控[J].計算機測量與控制,2011,19(2):326-328.
[8]宋冬,廖杰,陳星,等.基于ZigBee和GPRS的智能家居系統(tǒng)設計[J].計算機工程,2012,38(23):243-246.
[9]吳佳興,李愛國.基于云計算的智能家居系統(tǒng)[J].計算機應用與軟件,2013,30(7):240-243.
[10]陳慕君,張劍鋒,李春雨.一種云平臺智能家居系統(tǒng)設計與實現(xiàn)[J].計算機測量與控制,2014,22(10):3392-3395.
[11]陳海旺,張振娟,黃明.智能家居中無線智能插座系統(tǒng)設計[J].電視技術,2013,37(21):80-83.
[12]Yuan X R,Peng S G.A research on secure smart home based on the Internet of things[C].Wuhan:IEEE International Conference on Information Science and Technology,IEEE,2012.
[13]張榮榮,李彬,鄒小平,等.基于BOA服務器的智能家居控制系統(tǒng)設計[J].北京信息科技大學學報,2013,28(4):88-92.
Design of and Research on Independent and Security Intelligent Home Server System
ZHOU Chengming1,WU Chunxue1,LI Rui1,YANG Guisong1,WU Zhigang2
(1.School of Optical-Electrical and Computer Engineering,University of Shanghai for Science and Technology,Shanghai 200093,China;2.Dongguan Anhui Electronics Co.,Ltd.,Dongguan 523000,China)
AbstractA secure intelligent home system combining Android,ZigBee,GSM and sensor technology is designed.The sensor node is responsible for collecting information of home appliances,ZigBee for the transmission and the ARM server for processing the information,the GSM module for sending alarm message,while the Android client for displaying the status of appliances and control home appliances.With the real-time and security requirements in mind,we focus on the server’s hardware communication,guardian process,data receiving and parsing,and message queue management.The experimental results show that household appliances control can be realized mobile phone with little delay.The system run on its own without human intervention.The data is stored in the local server,not through the others;each time the user logs on to the server,the server will check the number,password and IMEI,and thus security is guaranteed.
Keywordsintelligent home;customize security;server;data analysis;message queue management
中圖分類號TP273.5;TP368.2
文獻標識碼A
文章編號1007-7820(2016)04-079-05
doi:10.16180/j.cnki.issn1007-7820.2016.04.021
作者簡介:周成明(1991—),男,碩士研究生。研究方向:物聯(lián)網(wǎng)與嵌入式。鄔春學(1964—),男,教授。研究方向:物聯(lián)網(wǎng)與計算機控制技術。
基金項目:國家自然科學基金資助項目(61202376);上海市教委晨光計劃基金資助項目(10CG49);上海市研究生創(chuàng)新基金資助項目(JWCXSL1402)
收稿日期:2015- 08- 16