智能家居系統(tǒng)中網(wǎng)關(guān)與服務(wù)器的連接 2016年09月27日09:55 來(lái)源:|
在新型家居系統(tǒng)中,家庭網(wǎng)關(guān)將取代PC機(jī)作為家庭控制中心。傳統(tǒng)客戶(hù)端/服務(wù)器模式不能保持家庭網(wǎng)關(guān)與遠(yuǎn)程服務(wù)器實(shí)時(shí)連接?;诎偃f(wàn)級(jí)的家庭網(wǎng)關(guān)與服務(wù)器保持長(zhǎng)連接的目的,采用主從服務(wù)器框架進(jìn)行負(fù)載均衡,心跳機(jī)制保障網(wǎng)關(guān)與服務(wù)器實(shí)時(shí)連接的方案。
1、新型智能家居系統(tǒng)整體框架
基于傳統(tǒng)C/S架構(gòu)的智能家居系統(tǒng)需要保持一臺(tái)PC機(jī)運(yùn)行中間件才能達(dá)到隨時(shí)控制的目的,這與智能家居綠色的理念相違背。在光纖到戶(hù)的推動(dòng)下,PON上行家庭網(wǎng)關(guān)在全國(guó)得到普及,并且有低功耗保持長(zhǎng)時(shí)間工作的特點(diǎn),適合用于智能家居系統(tǒng)中。
本方案設(shè)計(jì)一種新型智能家居系統(tǒng),由家庭網(wǎng)關(guān)替代PC成為家庭網(wǎng)絡(luò)控制中心。圍繞家庭網(wǎng)關(guān)與遠(yuǎn)程服務(wù)器互聯(lián)問(wèn)題展開(kāi),探討一種適合家庭網(wǎng)關(guān)與遠(yuǎn)程服務(wù)器的連接方案。基于家庭網(wǎng)關(guān)的智能家居系統(tǒng)整體框架如圖1所示。智能家居系統(tǒng)由傳感器網(wǎng)絡(luò),家庭控制中心,遠(yuǎn)程服務(wù)器,手機(jī)終端組成。其中傳感器網(wǎng)絡(luò)通過(guò)ZigBee、Wi-Fi等無(wú)線(xiàn)技術(shù)組建。
傳統(tǒng)的智能家居系統(tǒng)中控制中心采用家用PC和協(xié)調(diào)器等設(shè)備,新型的智能家居系統(tǒng)如圖1所示,采用家庭網(wǎng)關(guān)充當(dāng)家庭控制中心的角色。
2、新型智能家居系統(tǒng)中家庭網(wǎng)關(guān)與服務(wù)器連接的設(shè)計(jì)與實(shí)現(xiàn)
2.1遠(yuǎn)程服務(wù)器方案設(shè)計(jì)
傳統(tǒng)的服務(wù)器方案往往使用單一服務(wù)器模式,傳統(tǒng)業(yè)務(wù)不需要客戶(hù)端與服務(wù)器保持長(zhǎng)連接,客戶(hù)端獲取數(shù)據(jù)時(shí)發(fā)送一個(gè)連接即可。并且客戶(hù)端運(yùn)行在PC機(jī)上,客戶(hù)端對(duì)服務(wù)器發(fā)起連接后,服務(wù)器可暫存客戶(hù)端的IP地址和端口,當(dāng)服務(wù)器需要給客戶(hù)端發(fā)送數(shù)據(jù)時(shí)直接用客戶(hù)端的IP地址和端口號(hào)即可。所以用單一服務(wù)器即能滿(mǎn)足傳統(tǒng)業(yè)務(wù)的需求。
當(dāng)業(yè)務(wù)量大的時(shí)候,傳統(tǒng)服務(wù)器采用服務(wù)器集群技術(shù)來(lái)保證服務(wù)器不因業(yè)務(wù)量過(guò)大而癱瘓。隨著智能家居網(wǎng)關(guān)用戶(hù)逐步上升,用戶(hù)將達(dá)到百萬(wàn)級(jí)。每個(gè)網(wǎng)關(guān)都要與服務(wù)器保持長(zhǎng)連接,同時(shí)服務(wù)器還要與手機(jī)端通信。為了保證服務(wù)器的負(fù)載會(huì)達(dá)到百萬(wàn)級(jí)時(shí),其仍能正常其正常工作,本方案采用主從服務(wù)器框架來(lái)實(shí)現(xiàn)負(fù)載均衡。主服務(wù)器負(fù)責(zé)網(wǎng)關(guān)與服務(wù)器首次建立連接,然后根據(jù)地理位置等因素為網(wǎng)關(guān)分配一個(gè)從服務(wù)器并告知其IP等信息,網(wǎng)關(guān)再根據(jù)從服務(wù)器信息對(duì)從服務(wù)器發(fā)起連接,建立連接后網(wǎng)關(guān)與從服務(wù)器保持長(zhǎng)連接并斷開(kāi)與主服務(wù)器的連接。
主服務(wù)器對(duì)手機(jī)終端也是如此,只負(fù)責(zé)首次建立連接,判斷該手機(jī)號(hào)控制的網(wǎng)關(guān)分配到哪個(gè)從服務(wù)器,然后讓其對(duì)從服務(wù)器進(jìn)行連接。
本方案設(shè)計(jì)的服務(wù)器框架如圖2所示,由主服務(wù)器和從服務(wù)器組成,網(wǎng)關(guān)第一次連接或者與服務(wù)器連接中斷后重連都是對(duì)主服務(wù)器發(fā)起,主服務(wù)器收到網(wǎng)關(guān)發(fā)起的連接信息后進(jìn)行,查看是否在服務(wù)網(wǎng)關(guān)列表,認(rèn)證成功后分配從服務(wù)器IP和服務(wù)號(hào)給網(wǎng)關(guān)。從服務(wù)器用于保持與網(wǎng)關(guān)的長(zhǎng)連接,一方面可以對(duì)網(wǎng)關(guān)發(fā)送控制命令,一方面可接收網(wǎng)關(guān)上報(bào)的信息。備用主服務(wù)器用于主服務(wù)器故障時(shí)切換使用。
2.2家庭網(wǎng)關(guān)與遠(yuǎn)程服務(wù)器連接方案的設(shè)計(jì)
家庭網(wǎng)關(guān)所屬的網(wǎng)絡(luò)為電信運(yùn)營(yíng)商的子網(wǎng)環(huán)境,IP動(dòng)態(tài)更改,并且經(jīng)過(guò)了多層NAT轉(zhuǎn)換,服務(wù)器無(wú)法對(duì)網(wǎng)關(guān)發(fā)起主動(dòng)連接。而用戶(hù)需要隨時(shí)對(duì)家庭設(shè)備進(jìn)行控制,服務(wù)器必須隨時(shí)能夠?qū)W(wǎng)關(guān)發(fā)起連接。為了實(shí)現(xiàn)家庭網(wǎng)關(guān)與遠(yuǎn)程服務(wù)器互相通信。
本方案采用socket長(zhǎng)連接模式實(shí)現(xiàn),服務(wù)器配置固定IP,網(wǎng)關(guān)上電后發(fā)起對(duì)服務(wù)器的socket連接,連接成功后保持連接不中斷,服務(wù)器可通過(guò)此socket連接收發(fā)網(wǎng)關(guān)的信息。
2.2.1網(wǎng)關(guān)與服務(wù)器長(zhǎng)連接及意外中斷恢復(fù)的設(shè)計(jì)實(shí)現(xiàn)
用戶(hù)需要隨時(shí)遠(yuǎn)程監(jiān)控家庭信息,例如回家路上打開(kāi)空調(diào),離開(kāi)的路上關(guān)掉電源等,網(wǎng)關(guān)也需要隨時(shí)向用戶(hù)反饋家庭異常,例如煙霧信息,所以家庭網(wǎng)關(guān)必須與服務(wù)器隨時(shí)保持連接。
本方案采用心跳包監(jiān)控網(wǎng)關(guān)與服務(wù)器之間的長(zhǎng)連接,當(dāng)網(wǎng)關(guān)與服務(wù)器連接成功后,服務(wù)器每隔一段時(shí)間(暫時(shí)設(shè)置為15s)向網(wǎng)關(guān)發(fā)送心跳包,網(wǎng)關(guān)接收到心跳包后需立即回應(yīng)心跳包給服務(wù)器。若超過(guò)5次無(wú)回應(yīng),則判定為連接斷。
服務(wù)器會(huì)將次網(wǎng)關(guān)在線(xiàn)標(biāo)志位置為0,同樣家庭網(wǎng)關(guān)上線(xiàn)后會(huì)有監(jiān)控心跳線(xiàn)程,若連續(xù)75s內(nèi)無(wú)心跳信息,則會(huì)判定已與服務(wù)器斷開(kāi)連接,網(wǎng)關(guān)會(huì)自動(dòng)重啟連接服務(wù)器線(xiàn)程。
2.2.2家庭網(wǎng)關(guān)控制權(quán)安全性的設(shè)計(jì)
家庭網(wǎng)關(guān)的控制權(quán)必須是保證是家庭成員,不能讓陌生人取得控制權(quán),否則會(huì)帶來(lái)不可估量的后果。家庭網(wǎng)關(guān)存儲(chǔ)有一個(gè)可控手機(jī)號(hào)列表,必須通過(guò)本地web連接后才能更改,不能遠(yuǎn)程更改(防止等利用漏洞遠(yuǎn)程添加控制權(quán))。網(wǎng)關(guān)連接服務(wù)器后會(huì)上報(bào)可控手機(jī)號(hào)列表,只有在列表中的號(hào)碼才能遠(yuǎn)程登錄服務(wù)器,并且手機(jī)遠(yuǎn)程登錄服務(wù)器還要短信驗(yàn)證碼配合,防止他人偽裝登錄。手機(jī)登錄服務(wù)器后,發(fā)送控制家庭網(wǎng)關(guān)的命令時(shí)會(huì)在消息頭部增加手機(jī)號(hào)信息,網(wǎng)關(guān)收到信息后會(huì)核對(duì)該手機(jī)號(hào)是否在本地可控手機(jī)號(hào)列表中(防止服務(wù)器的手機(jī)號(hào)列表與網(wǎng)關(guān)本地手機(jī)號(hào)列表不一致)。
2.3家庭網(wǎng)關(guān)連接控制模塊工作流程
家庭網(wǎng)關(guān)的軟件流程如圖4所示,上電后初始化,然后向主服務(wù)器發(fā)送連接信息,若無(wú)法連接主服務(wù)器則向備用主服務(wù)器發(fā)送連接信息。連接上主服務(wù)器后會(huì)上報(bào)自身的一些信息,包括可控手機(jī)號(hào)列表,主服務(wù)器會(huì)根據(jù)地理位置等信息返回一個(gè)最近的從服務(wù)器序號(hào)和IP地址等信息,然后網(wǎng)關(guān)連接從服務(wù)器。
若連接從服務(wù)器連接不上,則會(huì)反饋給主服務(wù)器,主服務(wù)器會(huì)返回另一個(gè)從服務(wù)器的序號(hào)和IP地址信息用于連接。連接好從服務(wù)器后,家庭網(wǎng)關(guān)即可實(shí)現(xiàn)遠(yuǎn)程監(jiān)控,但必須與從服務(wù)器保持心跳連接,才能保證其是可控狀態(tài)。
2.4模擬測(cè)試的測(cè)試步驟和結(jié)果
本模擬測(cè)試方案中,為使數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)效率滿(mǎn)足性能要求,且PC遠(yuǎn)程控制可直接用瀏覽器實(shí)現(xiàn),主服務(wù)器采用PHP的YII框架搭建的web服務(wù)器,手機(jī)等終端和家庭網(wǎng)關(guān)連接主服務(wù)器則需要建立一個(gè)socket連接并把數(shù)據(jù)封裝為https協(xié)議。主服務(wù)器負(fù)責(zé)存儲(chǔ)網(wǎng)關(guān)信息,可控手機(jī)號(hào)列表等信息,并負(fù)責(zé)分發(fā)從服務(wù)器序號(hào)和IP給網(wǎng)關(guān),查找與手機(jī)號(hào)配對(duì)的網(wǎng)關(guān)所在的從服務(wù)器序號(hào)和IP并發(fā)送給認(rèn)證后的手機(jī)。
從服務(wù)器則采用PHP的Workerman框架來(lái)搭建,此框架是一個(gè)基于PHP的socket服務(wù)框架。網(wǎng)關(guān)與從服務(wù)器連接后保持心跳,手機(jī)獲取從服務(wù)器序號(hào)和IP后連接從服務(wù)器,根據(jù)網(wǎng)關(guān)服務(wù)號(hào)綁定與網(wǎng)關(guān)在同一個(gè)服務(wù)號(hào)里,在一個(gè)服務(wù)號(hào)里可包含多個(gè)手機(jī),但只能一個(gè)網(wǎng)關(guān),手機(jī)和網(wǎng)關(guān)之間可以互相通信。服務(wù)器端打開(kāi)workerman的進(jìn)程,開(kāi)啟服務(wù),如圖5所示。
網(wǎng)關(guān)遠(yuǎn)程登錄到服務(wù)器,id為67,服務(wù)號(hào)為1,與服務(wù)器保持心跳連接,如圖6所示。瀏覽器遠(yuǎn)程登錄,服務(wù)器認(rèn)證后分配其id為68,匹配到網(wǎng)關(guān)所在服務(wù)號(hào)為1,向網(wǎng)關(guān)(id為67)發(fā)出指令“l(fā)ight1turnon”,服務(wù)器將指令轉(zhuǎn)發(fā)給網(wǎng)關(guān)。
結(jié)語(yǔ)
模擬實(shí)現(xiàn)結(jié)果表明,通過(guò)心跳保持家庭網(wǎng)關(guān)與遠(yuǎn)程服務(wù)器長(zhǎng)連接,分配服務(wù)號(hào)保證手機(jī)與家庭網(wǎng)關(guān)相關(guān)聯(lián)的方案可行。用家庭網(wǎng)關(guān)代替?zhèn)鹘y(tǒng)PC作為智能家居系統(tǒng)中家庭的控制中心,能充分利用現(xiàn)有家庭網(wǎng)關(guān)資源。
責(zé)任編輯:姚泓澤