ZHA Coordinator 如何控制ZLL Light/Philips Hue Light
縮寫:
ZHA: ZigBee Home Automation profile
ZLL: ZigBee Light Link profile
TCLK: Trust Center Link Key
-
為什么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網絡中。
-
ZLL燈如何加入到ZHA網絡中
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
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 燈的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進行控制。
-
對ZLL燈進行控制
[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










