ZHA profile與ZLL profile的一個例子


ZHA Coordinator 如何控制ZLL Light/Philips Hue Light

縮寫:

ZHA: ZigBee Home Automation profile

ZLL:  ZigBee Light Link profile

TCLK: Trust Center Link Key

  1. 為什么ZLL 燈加入ZHA網絡

在ZLL網絡中,設備支持兩種方式Join ZigBee網絡,一種是通過Touch Link[1]方式入網,遙控器和燈靠近配對的方式把燈拉入到ZLL網絡中。另外一種是傳統入網,稱為Classic Commission Join的方式加入ZigBee 網絡。傳統入網過程如下,

                                    

(1)         節點以Trust Center(一般是協調器)作為父節點加入到網絡中

(2)         節點以路由器作為父節點加入到網絡中

以上入網過程都是在使能SECURE的情況下測試的,ZLL燈在通過Classic Commission Join的方式入網時,父設備通過發送Transport Key消息將網絡秘鑰發送給子設備,這個秘鑰稱為Network Key,該秘鑰用於對網絡內的通信數據進行加密。Network Key在從父設備發送給子設備的過程中,如果以明文發送,則有可能會被其他設備監聽到,導致Network Key被竊取,使得通信不安全。所以ZigBee協議中使用Trust Center Link Key(TCLK)對通過AES  128bit加密算法對該 Network Key進行加密,過程如下。在TI Z-Stack 協議棧中通過開啟TC_LINKKEY_JOIN宏定義。關於ZigBee網絡的Security說明,詳細參考《Z-Stack Developer's Guide.pdf》 在TI S-Stack 安裝目錄下的Document里面。

                                              

(3)      Network Key加密/解密過程

在ZHA的協議棧中,TCLK是公開的一個Key,在ZHA Specification[3]里面5.3.3中提到

在ZLL協議中規定默認的Trust Center Link Key和ZHA的默認TCLk是一樣,在[1]的8.1.6.2節中,

這也是為什么ZLL的燈能夠成功加入到ZHA的網絡中去,原因是他們使用的TCLK都是一樣的,當然Philips Hue Light也不例外,也可以成功的加入到ZHA網絡中。

  1. ZLL燈如何加入到ZHA網絡中

本節中使用TI的開發板和ZigBee協議棧Z-Stack讓ZLL燈加入到ZHA的網絡中。

  • 硬件:

1)  ZHA Coordinator

2) ZLL Light

http://www.ti.com/tool/cc2530zdk-zll?keyMatch=CC2530%20ZLL&tisearch=Search-EN-Everything

  • 軟件:

1) ZHA Coordinator

Z-Stack Home 1.2.2   http://www.ti.com/tool/z-stack

2) ZLL Light

Z-Stack Lighting 1.0.2 http://www.ti.com/tool/z-stack

  • 相關工具:

1)  Packet Sniffer Tool

http://www.ti.com/tool/cc2531usb-rd?keyMatch=CC2531%20USB%20Dongle&tisearch=Search-EN-Everything

1)  CC Debugger

http://www.ti.com/tool/cc-debugger?keyMatch=CC%20Debugger&tisearch=Search-EN-Everything

3)  SmartRF Flash Programmer

http://www.ti.com/tool/flash-programmer?keyMatch=smart%20flash%20programer&tisearch=Search-EN-Everything

4)  Packet Sniffer

http://www.ti.com/tool/packet-sniffer?keyMatch=packet%20sniffer&tisearch=Search-EN-Everything

安裝Z-Stack Home 1.2.2 協議棧到默認路徑下。

1) 利用IAR for 8051 9.10 打開Smapleswitch工程,選擇CoordinatorEB

在C:\Texas Instruments\Z-Stack Home 1.2.2.42930\Projects\zstack\HomeAutomation\SampleSwitch\CC2530DB

默認情況下已經使能了TC_LINK_JOIN宏定義,打開NV_RESTORE用於保存網絡參數。

編譯並下載到SmartRF05EB開發板,

2) 利用CC Debugger和SmartRF Flash Programmer下載ZllLight-ZLIGHT.hex文件到ZLL Light,hex文件位於C:\Texas Instruments\Z-Stack Lighting 1.0.2\Projects\zstack\ZLL\SampleApp\CC253x\hex 

注: 如果是從TI購買的ZLL 開發套件,出廠時是已經燒寫過該程序的,所以不需要再重復燒寫。

1) 將SmartRF05EB上電,Coordinator會建議一個Zigbee PAN 網絡

2) 將ZLL Light 上電,按住ZLL Light上按鍵,保持>10s松開,ZLL Light會觸發Classic Commission Join的方式開始加網過程。

3) 將整個過程利用CC2531 USB Dongle和Packet Sniifer抓包如下,

 
這樣ZLL Light就通過Classic Commission Join的方式成功加入到ZHA的網絡中
  1. ZLL 燈的Service Discovery 過程

雖然ZLL Light已經成功的加入到ZHA網絡中了,現在需要通過ZHA Coordinator對ZLL Light實現控制,包括on/off,Level, Color 等方面的控制。但是此時ZHA Coordinator只知道有一個子設備(Router)加入了網絡,並不知道這個是個什么設備,也不知道他支持哪些功能,他工作在什么EndPoint上面,每個EndPoint 支持哪些cluster等等。所以這時ZHA Coordinator需要開始Service Discovery過程,去獲得該設備應用層面的信息。

這個Service Discovery的過程主要是調用ZDO層的相關API函數,在ZigBee Specification 2.5.5.6 Device and Service Discovery節[4]中也有說明。

1) 利用Active Endpoints Request獲取ZLL Light支持的EndPoint

當ZLL Light 成功入網以后,ZHA Coordinator 調用ZDP_ActiveEPReq() API發送Active_EP_req命令給ZLL Light。 ZLL Light在收到Active_EP_req 命令以后,會在ZDP_IncomingData調用call back函數 ZDO_ProcessActiveEPReq,最后調用ZDP_ActiveEPRsp回復Active_EP_rsp,ZHA Coordinator在收到Active_EP_rsp以后,會調用ZDApp_ProcessMsgCBs函數,最后在Switch-Case下面,通過ZDO_ParseEPListRsp對這個消息進行解析。

2) 利用Simple Descriptor Request獲取ZLL Light在每個EndPoint下的Cluster

通過以上步驟ZHA Coordinator獲得了ZLL Light工作在哪幾個EndPoint上面,現在需要對每個Endpoint進行請求獲得EndPoint上面支持的In Cluster和Out Cluster。 ZHA Coordinator調用ZDP_SimpleDescReq API發送Simple_Desc_req命令給ZLL Light, ZLL Light在收到命令以后會在ZDP_IncomingData調用call back函數ZDO_ProcessSimpleDescReq,最后調用ZDP_SimpleDescMsg回復Simple_Desc_rsp,ZHA Coordinator在收到Simple_Desc_rsp以后,會調用ZDApp_ProcessMsgCBs函數,最后在Switch-Case下面,通過ZDO_ParseSimpleDescRsp對這個消息進行解析。

3) ZHA Coordinator在收到ZLL Light的device announce以后,開始進入Service Discovery過程,具體實現的程序見附件代碼中,搜索ZHAZLL關鍵字。

在節點入網成功(Device Announce),1s后對該節點發起Service Discovery過程,完成Service Discovery以后,通過CC2530EB開發板上的Joystick-Center,可以實現對ZLL Light的On/Off Toggle, 當然對Level,Color也是類似的。

對於Philips Hue Light也不例外,可以通過同樣的方式對Philips Hue Light進行控制。


  1. 對ZLL燈進行控制

1) 節點成功入網
2)Service Discovery
3)Toggle LED
 
測試代碼(基於Z-Stack Home 1.2.2)
zcl_SampleSwitch.c
zcl_SampleSwitch.h
 
在IAR定義宏定義 ZHAZLL
 
Reference:

[1] docs-11-0037-10-0zll-zigbee-light-link-zll-profile-specification.pdf

[2] 2654.Z-Stack Developer's Guide.pdf

[3] ZB_AFG-Home_Automation_Profile_for_Public_Download.pdf

[4] docs-05-3474-20-0csg-zigbee-specification.pdf

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM