接跳到步驟S307,也可以進(jìn)一步執(zhí)行步驟S305。
[0077]步驟S305:也可以在客戶端當(dāng)前選取當(dāng)前網(wǎng)關(guān)作為從網(wǎng)關(guān)后,再選取一個已設(shè)置的從網(wǎng)關(guān)作為該當(dāng)如網(wǎng)關(guān)的上一級網(wǎng)關(guān),該上一級網(wǎng)關(guān)就是一個中繼網(wǎng)關(guān)。
[0078]步驟S306:如果該上一級網(wǎng)關(guān)的級數(shù)大于2,則返回上一步重新選擇其他已設(shè)置的從網(wǎng)關(guān)作為當(dāng)前網(wǎng)關(guān)的上一級網(wǎng)關(guān),否則客戶端獲取該上一級網(wǎng)關(guān)的令牌,進(jìn)入下一步。本步驟可以限制所述組網(wǎng)網(wǎng)關(guān)的樹狀結(jié)構(gòu)的最大級數(shù)為3。
[0079]所述中繼網(wǎng)關(guān)是一個相對的網(wǎng)關(guān),即中繼網(wǎng)關(guān)是其下級網(wǎng)關(guān)的主網(wǎng)關(guān),同時又是其上級網(wǎng)關(guān)的從網(wǎng)關(guān)。中繼網(wǎng)關(guān)與其上級網(wǎng)關(guān)的通信方式可采用從網(wǎng)關(guān)與其主網(wǎng)關(guān)的通信方式,中繼網(wǎng)關(guān)與其下級網(wǎng)關(guān)的通信方式可采用主網(wǎng)關(guān)與其從網(wǎng)關(guān)的通信方式。
[0080]步驟S307:客戶端發(fā)送從網(wǎng)關(guān)設(shè)置指令(也稱為slave命令)給該當(dāng)前網(wǎng)關(guān),該從網(wǎng)關(guān)設(shè)置指令中攜帶當(dāng)前網(wǎng)關(guān)上一級網(wǎng)關(guān)的令牌,可以是主網(wǎng)關(guān)令牌或所述中繼網(wǎng)關(guān)的令牌。接收到從網(wǎng)關(guān)設(shè)置指令的當(dāng)前網(wǎng)關(guān)將自身模式設(shè)置為從網(wǎng)關(guān),存儲上一級網(wǎng)關(guān)的令牌,并返回從網(wǎng)關(guān)的令牌給客戶端,客戶端接收該從網(wǎng)關(guān)的令牌,將該從網(wǎng)關(guān)的令牌發(fā)送給上一級網(wǎng)關(guān)(即該從網(wǎng)關(guān)的主網(wǎng)關(guān))存儲,從網(wǎng)關(guān)設(shè)置成功。
[0081]步驟S308:從網(wǎng)關(guān)將自身信息同步到主網(wǎng)關(guān),所述自身信息包括自身檢測到的所轄設(shè)備信息以及自身網(wǎng)關(guān)配置信息,如果上一級是中繼網(wǎng)關(guān)則通過中繼網(wǎng)關(guān)繼續(xù)向上一級網(wǎng)關(guān)上報所述信息,直到到達(dá)主網(wǎng)關(guān);所述從網(wǎng)關(guān)將自身信息同步到主網(wǎng)關(guān),其中還包括在后續(xù)過程中,如果該從網(wǎng)關(guān)自身更新或所轄設(shè)備更新時向主網(wǎng)關(guān)上報對應(yīng)的更新信息。所述所轄設(shè)備信息例如包括設(shè)備標(biāo)識、設(shè)備狀態(tài)、設(shè)備具體參數(shù)數(shù)據(jù)等。例如對于圖2所述的燈光智能開關(guān),可以包括具體的光強(qiáng)參數(shù)等數(shù)據(jù)。
[0082]步驟S309:如果還有剩余網(wǎng)關(guān)需要設(shè)置,則返回步驟S304繼續(xù)設(shè)置網(wǎng)關(guān)模式;否則網(wǎng)關(guān)模式設(shè)置結(jié)束。
[0083]下面介紹本發(fā)明網(wǎng)關(guān)間的通信方式。
[0084]本發(fā)明所述網(wǎng)關(guān)之間通過IP協(xié)議進(jìn)行網(wǎng)絡(luò)通信,通信時將以網(wǎng)關(guān)唯一標(biāo)示映射為目標(biāo)地址。所述網(wǎng)關(guān)唯一標(biāo)示符例如可以是IP地址、jabber id、或者其它唯一標(biāo)示符如Samsung account中的peer_id等。從而使通信距離可以不局限于局域網(wǎng),可以擴(kuò)展至廣域網(wǎng),故而網(wǎng)關(guān)間的通信可能需要網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT,Network Address Translat1n)技術(shù)來處理。
[0085]主網(wǎng)關(guān)和從網(wǎng)關(guān)之間的交互主要包括:主網(wǎng)關(guān)向從網(wǎng)關(guān)發(fā)送用戶控制命令,以及從網(wǎng)關(guān)向主網(wǎng)關(guān)發(fā)送自身信息和通知消息;從網(wǎng)關(guān)之間不需要交互。從網(wǎng)關(guān)除了向主網(wǎng)關(guān)匯報設(shè)備消息外,還周期性的向主網(wǎng)關(guān)發(fā)送可靠性報文,主網(wǎng)關(guān)接收從網(wǎng)關(guān)周期發(fā)送的可靠性報文,通過解析該可靠性報文判斷該從網(wǎng)關(guān)是否異常。這樣可以及時發(fā)現(xiàn)出錯的網(wǎng)關(guān),提尚系統(tǒng)穩(wěn)定性。
[0086]主網(wǎng)關(guān)與從網(wǎng)關(guān)之間交互信息時,需要攜帶自身的令牌。從網(wǎng)關(guān)接收主網(wǎng)關(guān)的控制命令時,驗證令牌是否與網(wǎng)關(guān)模式設(shè)置時獲得并存儲的主網(wǎng)關(guān)令牌一致,在令牌一致的情況下,從網(wǎng)關(guān)才接受該控制命令;主網(wǎng)關(guān)在接收從網(wǎng)關(guān)的更新消息時,也需要驗證該從網(wǎng)關(guān)的令牌是否與所存儲的該從網(wǎng)關(guān)的令牌一致,在令牌一致的情況下才接受更新消息。
[0087]因此,在一種具體實施例中,網(wǎng)關(guān)在作為從網(wǎng)關(guān)的情況下,周期性地向主網(wǎng)關(guān)發(fā)送可靠性報文;網(wǎng)關(guān)在作為主網(wǎng)關(guān)的情況下,接收從網(wǎng)關(guān)周期發(fā)送的可靠性報文,通過解析該可靠性報文判斷該從網(wǎng)關(guān)是否異常。
[0088]進(jìn)一步的,在客戶端與各個網(wǎng)關(guān)之間,還有通過動態(tài)發(fā)現(xiàn)協(xié)議繼續(xù)保持通信,通過動態(tài)發(fā)現(xiàn)協(xié)議,客戶端也可以及時的檢測到出錯或掉線的網(wǎng)關(guān)。
[0089]下面介紹本發(fā)明所述網(wǎng)關(guān)的設(shè)備管理方法。
[0090]在本發(fā)明中,主網(wǎng)關(guān)上展示的設(shè)備是所有網(wǎng)關(guān)上設(shè)備的并集,但是同一設(shè)備不會重復(fù)展示??蛻舳藦闹骶W(wǎng)關(guān)上查看所有設(shè)備,客戶端不用在意設(shè)備的網(wǎng)關(guān)擁有者;如果多個網(wǎng)關(guān)都檢測到了同一個設(shè)備,主網(wǎng)關(guān)只展示最先發(fā)現(xiàn)的設(shè)備,而不是將相同設(shè)備重復(fù)展示。要達(dá)到這以目標(biāo)要有兩個條件:1.設(shè)備需要通過設(shè)備ID唯一標(biāo)示;2.只將新發(fā)現(xiàn)的用戶展示給用戶,如果該設(shè)備在系統(tǒng)中已經(jīng)能查到,則標(biāo)示該設(shè)備已經(jīng)發(fā)現(xiàn)了,則只是記錄下這個設(shè)備,并不展示給用戶;
[0091]因此在具體實施中,當(dāng)網(wǎng)關(guān)作為主網(wǎng)關(guān)的情況下,所述向客戶端展示所記錄的設(shè)備信息時,進(jìn)一步包括:主網(wǎng)關(guān)會記錄設(shè)備標(biāo)識,對于至少兩個網(wǎng)關(guān)所轄的設(shè)備標(biāo)識相同的設(shè)備,只向客戶端展示一個該設(shè)備的信息。
[0092]圖4為當(dāng)多個網(wǎng)關(guān)發(fā)現(xiàn)同一設(shè)備時,主網(wǎng)關(guān)根據(jù)發(fā)現(xiàn)設(shè)備時間,選擇設(shè)備的網(wǎng)關(guān)擁有者的舉例說明示意圖。參見圖4,
[0093]I)從網(wǎng)關(guān)I發(fā)現(xiàn)設(shè)備A,通知主網(wǎng)關(guān),主網(wǎng)關(guān)記錄下設(shè)備的ID以及網(wǎng)關(guān)擁有者(即從網(wǎng)關(guān)I),主網(wǎng)關(guān)查找該設(shè)備ID,如果不能查找到該ID,則將該設(shè)備標(biāo)志為新發(fā)現(xiàn)設(shè)備;如果發(fā)現(xiàn)該設(shè)備已經(jīng)存在,則忽略該設(shè)備;例如在圖4的例子中,主網(wǎng)關(guān)查找不到該設(shè)備ID,因此把該設(shè)備標(biāo)記為新發(fā)現(xiàn)設(shè)備,并通知客戶端。
[0094]2)從網(wǎng)關(guān)2發(fā)現(xiàn)設(shè)備A,通知主網(wǎng)關(guān),主網(wǎng)關(guān)記錄下設(shè)備的ID以及網(wǎng)關(guān)擁有者(即從網(wǎng)關(guān)2);主網(wǎng)關(guān)查找該設(shè)備ID,如果不能查找到該ID,則將該設(shè)備標(biāo)志為新發(fā)現(xiàn)設(shè)備;如果發(fā)現(xiàn)該設(shè)備已經(jīng)存在,則忽略該設(shè)備。在圖4的例子中,因為該設(shè)備在步驟I)中已經(jīng)發(fā)現(xiàn)了,主網(wǎng)關(guān)不把該設(shè)備標(biāo)記為新發(fā)現(xiàn)設(shè)備。
[0095]本發(fā)明還可以進(jìn)一步實現(xiàn)設(shè)備擁有者網(wǎng)關(guān)的熱切換:當(dāng)某個從網(wǎng)關(guān)故障或掉線后,自動把該從網(wǎng)關(guān)所轄的設(shè)備切換到鄰近從網(wǎng)關(guān)。也就是說,當(dāng)所述網(wǎng)關(guān)作為主網(wǎng)關(guān)的情況下,該方法進(jìn)一步包括:保存從網(wǎng)關(guān)和其所轄設(shè)備之間的映射關(guān)系,當(dāng)檢測到某個從網(wǎng)關(guān)失效時,根據(jù)所述映射關(guān)系,查找該從網(wǎng)關(guān)的所轄設(shè)備,再查找所述所轄設(shè)備的所屬的有效從網(wǎng)關(guān),將所述有效從網(wǎng)關(guān)設(shè)置為對應(yīng)所轄設(shè)備的有效管理從網(wǎng)關(guān),即該設(shè)備所屬的有效從網(wǎng)關(guān)。
[0096]本發(fā)明所述網(wǎng)關(guān)組網(wǎng)方法中,對設(shè)備的控制方法包括:
[0097]I)當(dāng)客戶端控制主網(wǎng)關(guān)所轄的設(shè)備時,主網(wǎng)關(guān)直接轉(zhuǎn)發(fā)命令給該設(shè)備。
[0098]2)當(dāng)客戶端控制從網(wǎng)關(guān)所轄的設(shè)備時,控制命令先發(fā)送到主網(wǎng)關(guān),主網(wǎng)關(guān)轉(zhuǎn)發(fā)命令至設(shè)備所屬的從網(wǎng)關(guān),從網(wǎng)關(guān)再轉(zhuǎn)發(fā)該控制命令給對應(yīng)的設(shè)備。
[0099]3)當(dāng)主網(wǎng)關(guān)所轄的設(shè)備發(fā)生更新時,設(shè)備直接將更新信息發(fā)送到主網(wǎng)關(guān)。
[0100]4)當(dāng)從網(wǎng)關(guān)所轄的設(shè)備發(fā)生更新時,或者從網(wǎng)關(guān)本身發(fā)生更新時,從網(wǎng)關(guān)將相關(guān)更新消息發(fā)送到主網(wǎng)關(guān),主網(wǎng)關(guān)接收更新消息,做預(yù)處理后(解析從網(wǎng)關(guān)消息,將緩存設(shè)備狀態(tài)更新等)后,再展示給客戶端。
[0101]本發(fā)明所述網(wǎng)關(guān)組網(wǎng)方法中,還涉及到對網(wǎng)關(guān)的管理,具體包括:
[0102]為方便眾多網(wǎng)關(guān)的管理,當(dāng)多個網(wǎng)關(guān)通過多網(wǎng)關(guān)策略連接起來后,主網(wǎng)關(guān)對從網(wǎng)關(guān)有控制功能,控制包括:網(wǎng)關(guān)重啟、關(guān)閉、更新等操作。
[0103]具體的,在網(wǎng)關(guān)作為從網(wǎng)關(guān)的情況下,接收來自主網(wǎng)關(guān)的對本從網(wǎng)關(guān)的控制命令,根據(jù)該控制命令執(zhí)行對應(yīng)的操作。例如,本從網(wǎng)關(guān)的重啟、關(guān)閉、更新、軟件升級等操作。從網(wǎng)關(guān)向主網(wǎng)關(guān)上報自身網(wǎng)關(guān)配置信息、自身檢測到的所轄設(shè)備信息以及所轄設(shè)備更新信息。
[0104]本發(fā)明對網(wǎng)關(guān)也可以軟件升級,升級時,主網(wǎng)關(guān)上先存儲好升級時需要的數(shù)據(jù);之后在主網(wǎng)關(guān)選擇需要升級的從網(wǎng)關(guān),發(fā)送命令給從網(wǎng)關(guān),從網(wǎng)關(guān)從主網(wǎng)關(guān)下載更新數(shù)據(jù),從網(wǎng)關(guān)更新后,通知主網(wǎng)關(guān)更新完成或者失?。?br>[0105]與上述方法對應(yīng),本發(fā)明還公開了一種智能家居網(wǎng)關(guān),用于執(zhí)行上述方法,圖5為本發(fā)明所述一種智能家居網(wǎng)關(guān)的組成示意圖,參見圖5,該智能家居網(wǎng)關(guān),包括:
[0106]自動發(fā)現(xiàn)協(xié)議模塊501,用于接收客戶端的自動發(fā)現(xiàn)請求,并返回響應(yīng)給所述客戶端;該模塊也可用于主網(wǎng)關(guān),從網(wǎng)關(guān)之間的發(fā)現(xiàn)處理:主網(wǎng)關(guān)監(jiān)測從網(wǎng)關(guān)的上線與離線;
[0107]網(wǎng)關(guān)設(shè)置模塊502,用于接收客戶端的主網(wǎng)關(guān)設(shè)置指令,將自身模式設(shè)置為主網(wǎng)關(guān);或者,接收客戶端的從網(wǎng)關(guān)設(shè)置指令,將自身模式設(shè)置為從網(wǎng)關(guān);
[0108]從網(wǎng)關(guān)模塊503,用于當(dāng)作為從網(wǎng)關(guān)的情況下,向主網(wǎng)關(guān)上報自身網(wǎng)關(guān)配置信息和自身檢測到的所轄設(shè)備信息,接收來自主網(wǎng)關(guān)的對所轄設(shè)備的控制命令并轉(zhuǎn)發(fā)給該所轄設(shè)備;
[0109]主網(wǎng)關(guān)模塊504,用于當(dāng)作為主網(wǎng)關(guān)的情況下,記錄自身檢測到的所轄設(shè)備信息,記錄從網(wǎng)關(guān)上報的從網(wǎng)關(guān)配置信息及其所轄設(shè)備信息;向客戶端展示所記錄的設(shè)備信息,接收來自客戶端的對設(shè)備的控制命令,如果是對本主網(wǎng)關(guān)所轄設(shè)備的控制命令則發(fā)送給該所轄設(shè)備,如果是對從網(wǎng)關(guān)所轄設(shè)備的控制命令則發(fā)送給從網(wǎng)關(guān)。
[0110]所述主網(wǎng)關(guān)模塊也需要記錄緩存現(xiàn)有網(wǎng)絡(luò)中的所有設(shè)備,以及設(shè)備的擁有網(wǎng)關(guān),同時主網(wǎng)關(guān)也需要緩存現(xiàn)有設(shè)備的狀態(tài),這樣在查詢設(shè)備時可以減少網(wǎng)關(guān)之間的交互。緩存設(shè)備狀態(tài)對于大量的查詢請求尤其有用。
[0111]在一種優(yōu)選實施例中,所述網(wǎng)關(guān)設(shè)置模塊502進(jìn)一步用于:接收客戶端的中繼網(wǎng)關(guān)設(shè)置指令,將自身模式設(shè)置為中繼網(wǎng)關(guān),并確定其上一級網(wǎng)關(guān)和下一級網(wǎng)關(guān);該中繼網(wǎng)關(guān)為上一級網(wǎng)關(guān)的從網(wǎng)關(guān);
[0112]該網(wǎng)關(guān)進(jìn)一步包括中繼網(wǎng)關(guān)模塊,用于當(dāng)作為中繼網(wǎng)關(guān)的情況下,向上一級網(wǎng)關(guān)上報自身網(wǎng)關(guān)配置信息和自身檢測到的所轄設(shè)備信息,將下一級網(wǎng)關(guān)上報的網(wǎng)關(guān)配置信息和所轄設(shè)備信息上報給上一級網(wǎng)關(guān);接收來自上一級網(wǎng)關(guān)的對設(shè)備的控制命令,如果是對本中繼網(wǎng)關(guān)所轄設(shè)備的控制命令則發(fā)送給該所轄設(shè)備,如果是對下一級網(wǎng)關(guān)所轄設(shè)備的控制命令