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