TI Zigbee Light Link 參考設計


TI  Zigbee Light Link 參考設計

 

 

 

原文出處:

http://processors.wiki.ti.com/index.php/Category:ZigBee_Light_Link

 

有如下五個部分資料:

§  ZStack-Lighting Kit

§  ZStack-Lighting-1.0.1 FAQ

§  ZStack-Lighting-1.0.1 Host Interface C Examples

§  ZigBee Lighting Gateway

§  ZigBee Lighting Gateway SW


 

 

目錄

1.     ZStack-Lighting Kit3

1.1.           套件概述... 3

1.2.           使用該工具包... 4

1.2.1.        第一次供電時,CC2531EMK ZLL遙控器遠程連接到ZLights. 5

1.2.2.        選擇控制哪個ZLight6

1.2.3.        返回到出廠默認值... 6

1.2.4.        高級控制... 6

1.3.           ZStack-Lighitng-1.0.1版本生成ZStack照明套件固件... 10

1.4.           使用Windows的引導程序工具更新套件固件... 10

2.     ZStack-Lighting-1.0.x FAQ.. 11

2.1.           如何去掉參考平台上Zlight2的按鈕... 11

2.1.1.        不按壓按鈕的情況下,使Zlight2允許其他設備加入網絡的方法... 12

2.1.2.        不按壓按鈕的情況下,Zlight2重置到出廠設置的方法... 12

2.1.3.        不按壓按鈕的情況下,使Zlight2以傳統方式加入Zigbee網絡的方法... 13

2.2.           市場中,ZStack-Lighting-1.0.x的設備能夠和ZLL設備互操作嗎... 13

2.3.           ZStack-Lighitng-1.0.1飛利浦hue兼容嗎... 14

2.3.1.        為了正確的被Hue Hub識別,Zstack-Lighting-1.0.1燈需要做一些改變... 14

3.     ZStack-Lighting-1.0.1_Host_Interface_C_Examples. 16

3.1.           ZStack-Lighting-1.0.1 主機接口限制... 17

3.2.           ZStack-Linghting-1.0.1 主機接口C語言例子... 17

3.2.1.        HW 設置... 18

3.2.2.        使用 Stack-Lighting-1.0.1 主機接口C語言例子... 18

3.2.3.        移植zllSocCmd 模塊到你的應用程序... 20

3.3.           ZStack-Lighting-1.0.1 Host Interface. 21

3.3.1.        Remote Procedure Call21

1.1.1.1.      Frame Check Sequence(幀檢驗序列)... 21

3.3.2.        管理和測試報文... 22

3.3.3.        MT APP... 23

3.3.3.1.      ZLL MT APP報文... 23

3.3.3.2.      3.3.2 ZCL MT APP Message. 27

4.     ZigBee Lighting Gateway. 31

4.1.           Setting Up The ZigBee Lighting Gateway Demo. 31

4.1.1.        獲得必備的硬件組件... 31

4.1.2.        下載並安裝必備軟件... 32

4.1.3.        下載必備的BeagleBone Linux鏡像文件... 32

4.1.4.        BeagleBone創建可引導的SD卡文件... 32

4.1.5.        啟動BeagleBone. 32

4.1.6.        准備ZigBee關功能的CC2531EMK USB Dongle. 35

4.1.6.1.      使用ZLL套件的中CC2531EMK. 35

4.1.6.2.      使用未編程的CC2531EMK. 36

4.1.6.3.      CC2531EMK連接到Beaglebone. 36

4.1.7.        Ninja Blocks門戶網站上創建一個帳戶(只需要一次)... 37

4.1.8.        使BeagleBone/CC2531EMK Block Ninja Blocks Web Portal配對... 37

4.1.9.        ZigBee設備連接到網關... 37

4.1.10.     一旦搭建好... 38

4.1.11.     Ubuntu PC上運行演示... 38

4.2.           客戶端應用程序... 40

4.2.1.        C客戶端應用程序... 40

4.2.1.1.      客戶端應用listDevsCmdLine. 41

4.2.1.2.      客戶端應用lightFlashCmdLine. 41

4.2.2.        Android客戶端應用程序... 42

4.2.2.1.      Android應用程序菜單... 43

4.2.2.2.      Android應用設備列表... 43

4.2.2.3.      Android應用綁定... 43

4.2.2.4.      Android應用組... 44

4.2.2.5.      Android應用場景... 44

4.3.           源代碼和更多詳情... 44

5.     ZigBee Lighting Gateway SW... 45

5.1.           Introduction... 45

5.2.           ZigBee照明網關固件(ZigBee Lighting Gateway FW... 46

5.2.1.        ZigBee照明網關固件的開關和LED分配... 46

5.2.2.        ZigBee Lighting Gateway Host Interface. 47

5.2.2.1.      MT APP... 47

5.2.2.2.      傳入的(從主機發出)MT APP消息... 48

5.2.2.3.      MT APP消息傳出(到主機)... 51

5.3.           Linux Lighting Gateway SW... 53

5.3.1.        Linux照明網關的ZigBee驅動程序... 53

5.3.2.        Linux照明網關的ZigBee抽象... 56

5.3.3.        Linux照明網關的數據文件... 56

5.3.3.1.      設備數據文件(  Device Data File  )56

5.3.3.2.      組數據文件(Group Data File)57

5.3.3.3.      場景數據文件(Scene Data File... 57

5.3.4.        照明網關插座API   (Lighting Gateway Socket API)58

5.3.4.1.      發送到照明網關的命令... 58

5.3.4.2.      從照明網關發送的命令... 71

5.4.           Client Examples. 79

 

 

 

1.  ZStack-Lighting Kit

1.1.  套件概述

ZStack-Lighting 1.0.1套件包括2個按照ZigBee Light Link 彩燈的標准編程的彩燈和一個按照ZLL color scene Remote標准[c1] 編程的CC2531EMK USB轉換器。 遠程(遙控器)的基本功能可以通過2個按鈕來實現,遠程只需要由USB連接器供電即可完成這些基本功能。Windows控制台應用程序可以通過USB接口完成更多高級的功能。

套件FW是基於ZStack-Lighting-1.0.1的示例應用程序而成的,只不過要對這些例程做一些修改。

§  ZLight ZLL彩燈:

§  Zlight硬件平台得到了ZStack-Lighting-1.0.1和認證的ZLL硬件平台的支持。

§  由於安全因素,我們做了一個修改,添加了一個熱關斷。

§  RSSI濾波器非常嚴格,最初的測試是在SmartRF05 +CC2530EM硬件平台進行的,這個平台有一個高性能的天線。

§  添加一個引導程序,就不需要CC-Debugger來進行固件的更新。

§  CC2531EMK ZLL遠程USB轉換器:

§  這並不是一個被ZStack-lighting-1.0.1支持的平台,所以這個硬件目標是作為一個新的配置加入到遠程項目中。

§  CC2531EMK ZLL遠程USB轉換器只有2個按鈕,改變按鈕的邏輯能讓它完成更多的功能。

§  改變LED的行為表現,來提供更好的用戶反饋。

§  改變RSSI濾波器,以適應該硬件的天線的性能。

§  添加一個引導程序,就可以在不需要CC-Debugger情況下更新固件。

1.2.  使用該工具包

CC2531EMK ZLL遠程中公開了以下功能,通過按鍵S1S2

ZStack-Lighting-1.0.1 CC2531EMK按鈕分配

功能

S1

按下

TouchLink(通信連接)

S1

松開

TouchLink(通信連接)中止

S2

短按(<1S

打開命令和關閉命令之間的切換

S2

中按(>2S

選擇下一個設備(選擇組的最后一個設備)

S1 + S2

長按(> 10S

重新置為出廠設置

CC2531EMK ZLL遠程用戶反饋通過LED,具有以下含義:

ZStack-Lighting-1.0.1LED分配

LED

狀態

功能

紅色LED

啟動時閃爍

遠程廠新

綠色LED

啟動時閃爍

遠程端不是廠新

紅色LED

按下按鈕

紅色LED

松開按鈕

綠色LED

啟動后閃爍

通信連接成功

紅色和綠色LED

啟動后閃爍

重置為出廠設置

開發包中的Zlight(也就是LED燈)的按鈕的功能:

ZStack-Lighting-1.0.1 ZLight的按鈕分配

功能

短按(<2S

允許加入(高級功能)

中按(> 2s<5秒)

重設出廠設置

長按(> 10秒)

傳統加入(高級功能)

1.2.1.   第一次供電時,CC2531EMK ZLL遙控器遠程連接到ZLights

收到包后,只要按照這些指示操作:

1. 接通電源CC2531EMK的的ZlightsUSB轉換器。

2. 按住按鈕> 10Zlight恢復出廠設置。

§  Zlight復位后,閃爍5秒。

3. 長按S1S2超過10s后將CC2531EMK恢復出廠設置。

§  5秒后,紅色LED應該閃爍4次,以表明它恢復為出廠設置。

4.把其中一個Zlight放在CC2530EMK USB 轉換器很近的地方,大約在0.3m的范圍內。與其他ZLight放在離CC2530EMK USB 轉換器很遠的地方,約0.6m.

5按住S1后, Zlight將會閃爍,然后CC2531EMK上的綠色指示燈會閃爍,然后釋放S1(而不是之前)。

6. 現在,您可以按S2開啟/關閉ZLight,確保它是一個快速的按壓(按的時候一定要快速)。

7. 將其他Zlights移近到離CC2530EMK USB 轉換器 0.3m的范圍內,其他的ZLight的距離依舊保持為0.6m

8.按住S1 Zlight將會閃爍,然后CC2531EMK上的綠色指示燈會閃爍,現在你可以釋放S1(而不是之前)。

§  如果不是自己所希望的那個Zlight燈在閃爍[c2] ,簡單地釋放的S1按鈕和重新定位所需的ZlightCC2531EMK來讓ZLightCC2531EMK更近。

9. 現在,您可以按S2開啟/關閉ZLight的,確保它是一個快速的按壓。

10. 按住S2>2s)來選擇要控制的Zlights 被選定的燈將會閃爍,表示被選擇。

§  這樣按下一次會選擇第一ZLight

§  按下第二次會選擇兩個ZLights

§  按下第三次會再次選擇第二Zlight

§  選擇將會循環遍歷這些連接了的Zlight燈泡;[c3] 

§  注:如果一個燈已經重置為出廠設置和重新和CC2531EMK建立了連接,但是沒有重置CC2531EMK,通信連接選擇列表中會出現冗余的設備,有可能會造成會選擇並沒有和CC2531EMK連接的設備。

電源接通,通信連接將會一直保持,而且這個過程並不需要重復一遍,除非該設備需要被重新編程或重置為出廠設置(稍后介紹)。

1.2.2.   選擇控制哪個ZLight

Zlight建立連接以后,這個燈就可以被控制了,如果想要改變選擇,去控制另一個先前已經被控制過的燈,需要按住S2超過1S的時間。 松開S2時,被選的ZLight會閃爍,當依次在和剩下的燈建立連接,被選的對象也在依次變化,當選擇繞回到第一個燈之前,所有的燈都被選擇過了。

1.2.3.   返回到出廠默認值

要使套件返回到默認狀態(假設你沒有重新編程),你需要重設為出廠設置。 要執行一個復位使之重置為出廠設置:

§  關於ZLight:按下ZLight上較高位置的開關多於5S的時間(但小於10S)。 5秒后,它會閃爍,表明它已經重置了。

§  關於CC2531EMK ZLL遙控器[c4] :按下S1S2多余5S(但小於10S)。 遠程的紅色和綠色的LED均閃爍5秒鍾,然后短暫閃爍的紅色LED,表明它被復位了。

1.2.4.   高級控制

Zlight是一種彩燈, CC2531EMK一個有彩色屏幕的遠程,但到現在為止,你還只是控制燈的亮滅。 為了實現更多的功能,你需要使用ZStack-Lighting-1.0.1遠程的主機接口 LinuxWindows命令行應用程序的完整源代碼可以在這里到: https://git.ti.com/zllhostinterfaceexample/zllhostinterfaceexample/archive-tarball/master

要使用ZStack-Lighting-1.0.1遠程主機接口和CC2531EMK ZLL遠程,需要做的是:

1.下載Windows ZLL命令行控制器。  

https://git.ti.com/zllhostinterfaceexample/zllhostinterfaceexample/blobs/master/Win32/zllCmdLine/Release/zllCmdLine.exe

2.usb_cdc_driver_cc2531.infzllCmdLine.exe提取到同一個目錄下。

3.CC2531EMK遠程的USB轉換器插入你的電腦中。

4 當系統提示需要驅動程序時:FileUsb cdc driver cc2531.zip 

5 查找Windows已經分配給它的COM端口號:

a .打開設備管理器:Windows“開始菜單 - >右鍵單擊我的電腦” - >管理 - >設備管理器

b. 在端口列表中找到CC2531

ZStack照明套件WindowsComPort.png

http://processors.wiki.ti.com/skins/common/images/magnify-clip.png

6 啟動Windows控制台應用程序zllCmdLine.exe

a . 單擊Windows“開始菜單后,在搜索框中輸入RUN,然后輸入你在第二個步驟中提取的zllCmdLine.exe的文件的路徑以及設備的COM端口號:

ZStack照明套件WindowsConsoleApp.png

http://processors.wiki.ti.com/skins/common/images/magnify-clip.png

7.將其中一個Zlight移近到CC2530EMK USB 轉換器0.5米的范圍內。

8.在控制台中鍵入“TouchLink”。就算這個Zlight之前已經和CC2531EMK遠程建立了通信連接也沒有關系。(CC2531EMK ZLL遠程連接到ZLights他們第一次供電)

9.Zlight應閃爍,控制台應出現以下信息:

C:\Users\a0741319\Documents\temp\zllCmdLine.exe-- Mar 24201317:02:45

touchlink

touchlink command executed

 

processRpcSysApp: Command Received Successfully

 

tlIndicationCb:

    Network Addr :0x0002

    End Point    :0x0b

    Profile ID   :0xc05e

    Device ID    :0x0200

    Version      :0x02

    Status       :0x57

記下“Network Addr :0x0002”和“End Point:0x0b”。

10.燈的類型的控制:

  SETSTATE - n0x0002 - e0x0b - M2 - V1

你應該會看到控制台顯示下面的內容,而且Zlight亮起。

 

setstate -n0x0002 -e0x0b -m2 -v1

setstate command executed with params:

    Network Addr    :0x0002

    End Point       :0x0b

    Addr Mode       :0x02

    Value           :0x01

 

processRpcSysApp: Command Received Successfully

第一行是執行的命令,第二行顯示命令執行時的參數:

網絡地址:0x0002

終端節點:0x0b

尋址模式:0x02

值:0x01

最后一行返回命令執行的情況。

11. 現在把飽和度調到最大(你現在可以忽略其他參數,因為你控制的是還是之前那盞燈):

setsat -v0xfe

setsat command executed with params:

    Network Addr    :0x0002

    End Point       :0x0b

    Addr Mode       :0x02

    Value           :0xfe

    Transition Time :0x0001

 

processRpcSysApp: Command Received Successfully

 第一行是執行的命令,由於是同一盞燈,所以只用寫出命令值:0xfe,其他參數可以省略

 第二行表示命令所攜帶的參數:

    網絡地址:0x0002

    終端節點:0X0b

    尋址模式:0X02

    值:0XFE

轉換時間:0X0001

最后一行是返回命令執行的狀態

12.現在把hue調成紅色(色調0):

sethue -v0

sethue command executed with params:

    Network Addr    :0x0002

    End Point       :0x0b

    Addr Mode       :0x02

    Value           :0x00

    Transition Time :0x0001

 

processRpcSysApp: Command Received Successfully

執行的命令是:sethue - V0

命令執行時的參數:

    網絡地址:0x0002

    終端節點:0X0b

    尋址模式:0X02

    值:0x00

    轉換時間:0X0001

返回命令執行情況:processRpcSysApp:命令成功接收

12.現在將hue的色調轉換到藍色(0xAA),持續時間大於3秒:

 sethue -v0xAA -t30

sethue command executed with params:

    Network Addr    :0x0002

    End Point       :0x0b

    Addr Mode       :0x02

    Value           :0xaa

    Transition Time :0x001e

 

processRpcSysApp: Command Received Successfully 

§  我們可以通過和其它燈建立通信連接並記錄它們的網絡地​​終端節點編號來控制它們。

§  我們可以通過把所有的燈划分到一組中並對這個組定義一個地址,從而來控制所有的燈,使用-m1來選擇組模式-n0x0001代表的是1,所有的燈在建立通信連接之后會被默認添加到組1中。當你想控制的是ZLL Lights而不是TI ZStack-Lighting-1.0.1 Lights時,需要使用廣播終端節點(-e0xff)。

1.3.  ZStack-Lighitng-1.0.1版本生成ZStack照明套件固件

ZStack-Lighting-1.0.1版本可以在http://www.ti.com/tool/z-stack 下載到。 要更新此版本生成固件預編程套件需要一個補丁。 這個補丁可以在這里找到:

 File-Z-Stack-Lighting-add-on-lighting-kit.zip 

1.4.  使用Windows的引導程序工具更新套件固件

要更新Zlight或遠程FW,我們要做的是:

1. 下載Windows串行引導: Fil:SBDemo.zip

2. usb_cdc_driver_cc2531.infSBDemo.exe提取到一個目錄下。

3.  在按着按鍵不放的情況下將Zlight插入PC,或按着S1鍵不放將CC2531EMKZLL遙控器插入PC

a .按住按鈕的同時給設備供電,設備會進入bootloader模式。 當它在等待一個新的固件的時候,綠色的LED會不停的閃爍。

4. 當系統提示的驅動程序使用FileUsb cdc drive cc2531.zip

5. 查找Windows已分配給它的COM端口號:

a . 打開設備管理器:Windows“開始菜單 - >右鍵單擊我的電腦” - >管理 - >設備管理器

b. 查找CC2531COM端口號:

ZStack照明套件WindowsComPort.png

http://processors.wiki.ti.com/skins/common/images/magnify-clip.png

6 啟動SBDemo.exe

a. 選擇要更新的文件。

b. 選擇的COM端口。

c. 點擊加載固件。

ZStack照明套件SBDemo.png

http://processors.wiki.ti.com/skins/common/images/magnify-clip.png

7.過程中,綠色LED會在一段很短的時間間隔里快速閃爍。

8.一旦更新完成,紅色和綠色的LED閃爍,將啟動的新固件。

2.  ZStack-Lighting-1.0.x FAQ

2.1.  如何去掉參考平台上Zlight2的按鈕

ZLight2板有一個用於簡單開發的按鈕,它有三個功能,這些功能由於不再需要ZLL/Zigbee設備發送命令而使開發更為簡單,這些功能包括:

●按壓按鈕(<2S):允許加入60S.

●按壓按鈕(2S-10S):重置為出廠設置.

●按壓按鈕(>10S):嘗試以傳統方式加入一個zigbee網絡.

所有這些功能都可以通過其他方式來實現。

2.1.1.   不按壓按鈕的情況下,使Zlight2允許其他設備加入網絡的方法

允許加入要求其他的ZigBee設備通過ZLight2和網絡關聯。在一個典型的用例中,一個網關上有一個按鈕,通過用戶按壓按鈕,新的設備會被添加到網絡中。其中包括在網關上按下此按鈕后,可以將消息發送到所有設備,並指示他們將被允許加入一個指定的時間長度,從而免除了此按鈕在ZLight2上的功能。借助TI ZStack,這可以用下面的代碼實現:

static void enablePermitJoin( byte duration )

{

  zAddrType_t dstAddr;

  //only needs to be done once, can be moved to init code只需要執行一次,可以移到初始化代碼中

  ZDSecMgrPermitJoining( 0xFF );

 

  //permit join on the device允許加入的設備

  NLME_PermitJoiningRequest( duration );

 

  //Permit join to network允許加入到網絡

  dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVZCZR;

  dstAddr.addrMode = Addr16Bit;

  ZDP_MgmtPermitJoinReq( &dstAddr, duration, 1, 0 );

}

2.1.2.   不按壓按鈕的情況下,Zlight2重置到出廠設置的方法

這個問題可以通過一個編程有ZLL認證密鑰的ZLL初始化來實現,比如ZStack-Lighting-1.0.x 中提供的ZLL遠程例程。啟動一個TouchLink並確保燈和遠程是在鄰近的范圍內是TouchLink成功所需要做到的:

static void enablePermitJoin( byte duration )

zllInitiator_StartDevDisc();

ZLight處於閃爍識別狀態時,發送重置為出廠設置的互聯個域網命令:

static void enablePermitJoin( byte duration )

zllInitiator_ResetToFNSelectedTarget();

2.1.3.   不按壓按鈕的情況下,使Zlight2以傳統方式加入Zigbee網絡的方法

ZLight2通電同時處於出廠設置時,會自動盡可能的加入一個ZigBee網絡,這意味着當它第一次通電后,它會搜索並加入一個ZigBee網絡,如果沒有找到ZigBee網絡,它會等待TouchLink。在隨后的供電周期,它會一直重復這些工作,直到發現一個ZigBee網絡,或ZLight2已經建立了通信連接。如果ZLight2重置為出廠設置,那么它也會重復這些動作。這個功能可以通過在Projects\zstack\ZLL\SampleLight\Source\zll_samplelight.c添加下面的代碼來實現:

在文件頂端的INCLUDE部分,#include "zll_target.h"的下方添加下面的代碼

#include "zll_target.h"

#include "zll.h"

在函數void zllSampleLight_Init( byte task_id )的末尾,加上下面的代碼:

if( zll_IsFactoryNew() )

  {

zllTarget_ClassicalCommissioningStart();

  }

 

2.2.  市場中,ZStack-Lighting-1.0.x的設備能夠和ZLL設備互操作嗎

可以,但是需要我們理解這些限制。

市場上的ZLL產品都經歷了相同的ZigBee Light Link認證過程(ZStack-Lighting-1.0.0),這個過程中使用了公開的ZLL認證密鑰。然而,產品制造商已采取其他的行動從Zigbee聯盟獲得秘密的ZLL主秘鑰[c5] ,而這個主秘鑰,由於ZLL主秘鑰的保密性,TI沒有將其公開,也沒有將它放入ZStack-Lighting版本中

ZLLTouchLink過程中采用密鑰的位掩碼的方式來讓設備知道其他設備支持什么秘鑰。一個隨機產生的網絡鑰密匙由Touchlink的發起者用ZLL秘鑰加密后,從秘鑰的位掩碼上看,遠程和燈的秘鑰是很相似的。然后ZLL target(ZLL Light)使用同樣的ZLL秘鑰將隨機產生的網絡密鑰解碼。

在認證過程,開發和運間事件中,ZLL設備的密鑰位掩碼被設定為ZLL認證密鑰,ZLL認證密鑰被存儲在設備中來對TouchLink過程中傳輸的隨機網絡秘鑰進行編碼/解碼。ZLL產品秘鑰的位掩碼中沒有設置ZLL認證密鑰位,而是設置ZLL主密鑰位,有ZLL的主密鑰存儲在設備。

這意味着,包含有ZLL認證秘鑰的ZStack-Lighting-1.0.x設備將無法與現有市場上的ZLL產品建立通信連接和加入同一個網絡。然而,在ZLL有一個傳統配置的概念,它被包括在HA 運行期間。一旦兩個設備建立通信連接並創建一個“ZLL網絡,其他設備可以采用不需要建立連接的一般的ZigBee聯通的方式加入該網絡,但是,這個ZLL的網絡中沒有協調器,設備以傳統方式加入網絡,使用一個ZLL 秘鑰以一種類似的方式在HA作為trustcentre鏈路秘鑰。所以即使在這種情況下,ZStack-Lighting-1.0.x 設備還是不能以傳統方式和ZLL網絡聯通。

ZStack-Lighting-1.0.x 設備能和ZLL產品一起工作的方法是:讓ZLL產品以傳統方式與HA網絡聯通。現在,他們使用眾所周知的的HA trustcentre鏈路密鑰,ZStack-Lighting-1.0.x設備也可以采用傳統方式加入同一個網絡。既然ZLL產品和ZStack-Lighting-1.0.x的設備現在在同一網絡中,他們就可以使用的TouchLinkZStack-Lighting-1.0.x遠程將會添加ZLL Light產品到目標列表中並且控制這些燈,同樣的,ZLL產品遠程也能夠進行Touchlink。完成以上過程之后,ZStack-Lighting-1.0.x遠程能夠發送ZLL lighting commandsZLL light product,反之亦然。

如何讓市場上現有的ZLL設備加入HA網絡

ZLL規范強制規定ZLL設備必須加入HA網絡。但是具體以何種方式加入是由制造商決定的,如何做到這一點可從ZLL產品工廠得到詳細的信息。對於ZLL遙控器,這很可能是由一些按鈕組成,對於燈(由於燈一般沒有按鈕)按鈕,當他們通電且還沒有加入一個HA網絡時,它們將會搜索一個HA網絡,這是一種很常見的方式。

如何使用ZStack-Lighting-1.0.1遠程重置認證的ZLL產品,使它離開舊的網絡

現在市場上的ZLL產品可以被ZStack-Light-1.0.1設備重置為出廠設置,前提啟用主秘鑰,實際的秘鑰在復位過程中並不使用,只是在TouchLink初始階段你需要正確的秘鑰位掩碼。如何啟用主秘鑰,詳情請見“ZStack Lighting Developers Guide.pdf”3.1節。為了從ZStack-Lighting 遠程發送一個reset命令,你需要使用zllInitiator_StartDevDisc()來啟動一個通信連接,然后當ZLL燈閃爍時,再發送zllInitiator_ResetToFNSelectedTarget()。

2.3.  ZStack-Lighitng-1.0.1飛利浦hue兼容嗎

ZStack-Lighting-1.0.x經過ZigBee-Light-Link認證,但是默認設置時不能與飛利浦的Hue Hub進行互操作。ZigBee-Light-Link的主密鑰有一些難點,而偏偏主密鑰是保密的,所以不能包含在TI公開的版本中,這個問題在上面的常見問題解答有所討論,但是,還有一些其他的要點需要我們去理解。

注意:ZStack-Lighitng-1.0.1中有一個重要的參數需要被改變,這個參數是ZStack-Lighitng-1.0.1燈的默認值,只有改變這個參數后,才可以被Hue Hub識別。 ZStack-Lighitng-1.0.1中的簡單描述符的形成是通過使用HA文檔和當前定義的HA照明設備ID,這是為了讓它能夠被ZLLHA網關識別,同時代價是ZLL網關將不會發送增強的ZLL命令(因為設備顯示為HA設備)。然而,Hue Hub並不會在當前檢查Profile ID並認為連接的設備就是ZLL設備(因為它形成的是一個ZLL網絡),基於這個原因,默認情況下,使用一個ZStack-Lighitng-1.0.1 HA設備ID將不會被Hue Hub所識別。

2.3.1.   為了正確的被Hue Hub識別,Zstack-Lighting-1.0.1燈需要做一些改變

對於一個ZStack-Lighitng-1.0.1的燈而言,要想被Hue Hub識別,你需要修改zll_samplelight.c,使HA設備ID變為ZLL設備ID

#define ZLL_HUB_COMPATIBILITY

 

#ifndef ZLL_DEVICEID

  #ifdef ZCL_COLOR_CTRL

    #define ZLL_DEVICEID  ZLL_DEVICEID_COLOR_LIGHT

    #ifdef ZLL_HUB_COMPATIBILITY

      #define HA_DEVICEID   ZLL_DEVICEID

    #else

      #define HA_DEVICEID   ZCL_HA_DEVICEID_COLORED_DIMMABLE_LIGHT

    #endif

  #else

    #ifdef ZCL_LEVEL_CTRL

      #define ZLL_DEVICEID  ZLL_DEVICEID_DIMMABLE_LIGHT

      #ifdef ZLL_HUB_COMPATIBILITY

        #define HA_DEVICEID  ZLL_DEVICEID 

      #else

        #define HA_DEVICEID   ZCL_HA_DEVICEID_DIMMABLE_LIGHT

      #endif

    #else

      #define ZLL_DEVICEID  ZLL_DEVICEID_ON_OFF_LIGHT

      #ifdef ZLL_HUB_COMPATIBILITY

        #define HA_DEVICEID  ZLL_DEVICEID 

      #else

        #define HA_DEVICEID   ZCL_HA_DEVICEID_ON_OFF_LIGHT

      #endif

    #endif

  #endif

#endif

ZLL/關光燈,電平控制燈的設備IDHA設備ID相互沖突,如上述的變化對一個試圖識別HAZLL的設備(僅適用於ZLL/關燈與電平控制燈)造成麻煩。ZLL 1.1規范和HA 1.2規范將ZLL設備ID一致化,ZLL/關燈和電平控制燈設備的ID號將會改變來避免今天所出現的沖突。

Changing the Profile ID for the Application end point to be the ZLL Profile ID is not trivial and should not be attempted.

TouchLink端點設備ID也應改變,以避免ZLL控制器不檢查看到的TouchLink端點的可控裝置的簡單描述符(包括Hue Hub)。要做到這一點,改變zll_target.c中的AppDeviceId

SimpleDescriptionFormat_t zllTarget_SimpleDesc =

{

  ZLL_TARGET_ENDPOINT,              //  int Endpoint;

  ZLL_PROFILE_ID,                   //  uint16 AppProfId[2];

 

#ifdef ZLL_HUB_COMPATIBILITY

  0x2BEE,                           //  uint16 AppDeviceId[2] - set to an invalid device ID;

#else

  ZLL_DEVICEID_COLOR_LIGHT,         //  uint16 AppDeviceId[2];

#endif //ZLL_HUB_COMPATIBILITY

 

  ZLL_TARGET_DEVICE_VERSION,        //  int   AppDevVer:4;

  ZLL_TARGET_FLAGS,                 //  int   AppFlags:4;

  ZLL_TARGET_MAX_INCLUSTERS,        //  byte  AppNumInClusters;

  (cId_t *)zllTarget_InClusterList, //  byte *pAppInClusterList;

  ZLL_TARGET_MAX_OUTCLUSTERS,       //  bytAppNumInClusters;

  (cId_t *)zllTarget_OutClusterList //  byte *pAppInClusterList;

 

3.  ZStack-Lighting-1.0.1_Host_Interface_C_Examples

ZStack-Lighting-1.0.1遠程工程包括一個主機接口,通過UART允許主處理器通過UATR連接到一個CC253x和使用一個抽象的ZLL  API 控制ZLL網絡。這個主機接口的說明,在第六節有關"Z-Stack Lighting API.pdf"中,可以在 "Z-Stack Lighting 1.0.1\Documents\API"文件夾里找到。Z-Stack-Lighting-1.0.1 的安裝程序可以在 http://www.ti.com/tool/z-stack 下載。

這個wiki詳細的描述了ZLL主機接口,提供了在一個linux主處理器上C語言的例子。可以很容易的被移植到其他的操作系統。當開發一個基於ZStacking-lighting-1.0.1ZLL 遠程設備的主機應用程序時,這些代碼可以作為開發起點的參考代碼被共享。

3.1.  ZStack-Lighting-1.0.1 主機接口限制

下面是有人想創造一個zll主機的兩個原因:

·一個便捷式高端ZLL遠程。

·一個固定的ZLL控制器

ZStack-lighting-1.0.1主機接口用於一個ZLL遙控的實施,也就是一個高端的遙控. 需要強調的是實施一個使用 ZStack-Lighting- 1.0.1 遠程示例應用程序的ZLL主機控制器存在一定的局限性。

§  ZLL遠程示例應用程序僅僅作為終端設備被實施。因此它不能創建一個網絡鏈接或作為一個路由器

§  ZLL示例應用程序必需觸動連接燈,為了發現網絡地址和終端,這是需要控制燈。這個需要接近觸摸連接網絡上所有的燈。

對於不開發高端遙控器的用戶,而是開發固定ZLL控制設備,這些局限性是不可接受的,可以通過以下方式克服:

1)     使用HA協調器照明網關[c6] ZLL 設備采用經典的配置模式能夠加入HA網關)。在這個wiki 頁面

http://processors.wiki.ti.com/index.php/ZigBee_Lighting_Gateway. 這個工作已經完成。這個wiki 提供:

§  CC2530 HA 協調器 FW 實現設備和 ZStack-lighting-1.0.1 主機接口。

§  Linux 主機ZigBee 網關服器SW

§  雲服務鏈接控制燈

§  Android 應用程序控制燈,綁定一個HA燈控制設備(HA 開關和感應器)。

2)      ZStack-Lighting-1.0.1 里創建一個ZLL控制橋應用。在未來的版本中將會解決這個問題。

3.2.  ZStack-Linghting-1.0.1 主機接口C語言例子

基於Linux 系統的C語言例子實現 ZStack-Linghting-1.0.1 主機接口C語言例子的例子已經被創造。ZStack-Linghting-1.0.1主機接口 C語言例子的完整源代碼在一個 git 上,可以在這兒下載壓縮文件。

例子中包含兩個模塊:

1)     ·zllSocCmd.c/h  這個模塊包含ZStack-Linghting-1.0.1的主機接口的主函數功能。主機接口和公開的抽象的API發送命令和控制ZLL設備。

2)     ·zll_controller.c  這個使用zllSocCmd 模塊的示例應程序。它通過命令行公開zllSocCmd函數。

3.2.1.   HW 設置

運行這些例子你需要:[c7] 

(1)        ZStack-Lighting Remote:

§  1 x SmartRF05+CC2530EM for programming as a ZStack-Lighting Remote and Light, available as part of the CC2530DK from here.

(2)        ZStack-Lighting Light(s):

§  SmartRF05+CC2530EM(s) for programming as a ZStack-Lighting Light(s) (2 available in above kit).

AND/OR

(1)        ZLight(s) for programming as a ZStack-Lighting Light(s), HW available soon.

(2)            Linux 機器或者 VM用於構建和運行主機接口 C語言例子。

(3)            一個串口USB轉換線如果 Linux 機器上沒有串行接口。

A SmartRF05-EB+CC2530EM must be programmed with the ZStack-Lighting-1.0.1 Remote FW and the SmartRF05-EB+CC2530EM(s)/Zlight(s) must be programmed with the ZStack-Lighting-1.0.1 Light FW.關於說明在第三節的the Z-Stack Lighting Sample Application Users Guide.pdf ,可以在 "Z-Stack Lighting 1.0.1\Documents" 文件中找到。

The SmartRF05-EB+CC2530EM 程序作為the ZStack-Lighting remote 必須通過一個USB 串口線連接到Linux機器(除非Linux機器有一個 UART 接口然后可以直接鏈接串行線)

3.2.2.   使用 Stack-Lighting-1.0.1 主機接口C語言例子

ZLL 控制器應用程序提供命令行允許你控制ZLL設備在網絡上。

你首先創建Linux應用程序的例子,如果本機編譯器的Linux機器被使用,和運行Makefile 一樣簡單,在實例中提供:

如果本地編譯不能使用,你應該改寫 gcc 命令在生成文件中去調用交叉編譯器。

一旦應用程序創建,你應該啟動命令行和指定設備,the ZStack-Lighting Remote 出現在你的系統。如果你使用USB轉串口線這通常是/dev/ttyUSB0:

在控制燈之前,你必須線先配對ZLL燈控制器。這通過Touchlink[c8] 是可以做到的。

一旦經過連接的設備可以被控制了,多個設備可以進行連接,設備選擇使用通過the -n<network address paramter>,可利用的命令是:

參數是:

一個成功的觸摸連接會設置網絡地址和新配對的設備的端點。新配對的燈用下面的命令打開:

下面的例子將會發送一個 MoveToHue命令到網絡地址 0x003端點0xb,這將導致設備移動到紅色調超過3秒(飽和度設置為高,看到變化):

參數被記住,鍵入下面的命令后就會變為藍色調:

色調的值范圍0x0-0xFF代表the 360Deg color wheel,這里:

飽和度的值是 0x0-0xFE ,這里:

3.2.3.   移植zllSocCmd 模塊到你的應用程序

首先主機需要打開串口到CC253x,在zllSocOpen函數中被執行。

返回字符文件以便應用程序可以poll(輪詢) the CC253x device。這樣可以用來poll(輪詢)在串口上的輸入,當數據可用時,CC253x 處理函數必須調用讀取和解析的消息。

Messages from the CC253x are then transalted to call back functions. The host application can then register the following callback functions

這是通過填充回調表中的回調,應用程序有興趣接受,那些不需要設置為空,把它傳遞到下面的回調注銷函數:

一旦串行口打開,主機可以發送命令,使用下面的函數:

3.3.  ZStack-Lighting-1.0.1 Host Interface

ZStack-Lighting-1.0.1主機接口公開使用的是MT(管理和測試)接口,此接口允許UART的數據包(be routed to發送到運行在ZStack上的應用程序上。包含MT報文的UART數據包按照2.1節中“Z-Stack Monitor and Test API.pdf”說明的RPCRemote Procedure Call,遠程過程調用)協議(are formatted來規范;在RPC數據包里有一個MTheader標頭指定這個報文在ZStack內(be routed)連接的位置,在這種情況下,MTheader標頭需要以報文發送給運行在CC253x ZStack FW上的應用程序的方式(are formatted來規范

數據包的結構,如下所示:

RPC Message Format RPC報文格式

RPC標頭

 MT標頭

MT_APP標頭

ZLL_MT_APP / ZCL_MT_APP命令

RPC幀校驗序列

3.3.1.   Remote Procedure Call

RPC數據包包含一個SOF(幀開始)字節幫助實現UART發送的數據包同步,接着是RPC的有效載荷(在這種情況下是MT報文)最后以FCS(幀校驗序列)結束。

RPC Packet Format

SOF

Payload

FCS

1 Byte

3 - 256 Bytes

1 Byte

·         SOF:必須設置為0xFE

·         有效載荷:在這種情況下,它是MT報文,請參閱第XXX \ N

·         FCS:請參閱XXX

1.1.1.1.       Frame Check Sequence幀檢驗序列

The FCS can be calculated by the below C code:FCS由下面的C代碼,可以計算:

/*********************************************************************
 * @fn      calcFcs
 *
 * @brief   populates the Frame Check Sequence of the RPC payload.
 *
 * @param   msg - pointer to the RPC message
 *
 * @return  none
 */
void calcFcs(unsignedchar*msg,int size)
{
        unsignedchar result =0;
        int idx =1; //skip SOF
        int len =(size - 1);  // skip FCS
 
        while((len--)!= 0){
               result ^= msg[idx++];
        }
 
        msg[(size-1)]= result;
}

3.3.2.   管理和測試報文

MT報文組成了RPC數據包的有效載荷。MT報文的格式在下面的表中所示:

MT報文格式

長度

CMD0

CMD1

數據

1字節

1字節

1字節

0 - 251字節

·         長度:MT數據的長度(0 - 251

·         CMD07-5位是指令類型,4-0位是子系統ID

o    對於MT_APP指令,指令方式:SREQ是將報文發送給CC253xAREQ是報文從CC253x送出。

o    對於MT_APP報文,子系統ID應設置為0x09

指令類型

Type類型

Value

POLL

0X00

SREQ

0X20

AREQ

0X40

SRSP

0X60

·         CMD1:這是MT_APP的指令ID,應該被設置為0

3.3.3.   MT APP報文

MTAPP照明ZStack-1.0.1主機接口中使用的消息有2種類型:

·         ZLL_MT_APP報文

·         ZCL_MT_APP報文

3.3.3.1.       ZLL MT APP報文

ZLL_MT_APP報文公開一個接口發送命令,指定ZLL的(profile)配置文件。這些消息可以被認為是(control plane控制層面消息,他們在網絡上控制設備的(behavior)狀態(例如加入或離開網絡)。

ZLL_MT_APP報文的結構如下所示:

ZLL_MT_APP報文格式

應用程序端點

保留的

集群ID

日期長度

保留的

ZLL_MT_APP命令ID

保留的

ZLL_MT_APP命令有效載荷

1字節

3個字節

 2個字節

 1字節

3個字節

1字節

2個字節

X字節(定義命令)

·         應用程序端點: ZLL的應用程序端點,應設置為0x0B

·         Reserved)保留字:所有保留的字節應設置為0x00

·         ZLL_MT_APP集群ID:應設置為0xFFFF

·         日期長度:這應該是6+)加上 ZLL_MT_APP命令參數的數量

·         命令ID:見下文支持的命令

ZLL MT APP報文目前支持ZLL控制器應用程序是:

ZLL MT APP發送給CC253x的命令

ZLL_MT_APP命令

參數(1個字節)

ZLL_MT_APP_RPC_CMD_TOUCHLINK

0X01

N / A

ZLL_MT_APP_RPC_CMD_RESET_TO_FN

0X02

N / A

ZLL_MT_APP_RPC_CMD_CH_CHANNEL

 0X03

目標通道

ZLL_MT_APP_RPC_CMD_JOIN_HA

0x04

N / A

ZLL_MT_APP_RPC_CMD_SEND_RESET_TO_FN

0X06

N / A

 

CC253x 發送的ZLL MT APP命令

命令

參數

MT_APP_ZLL_TL_IND

0X81

EpInfo結構,EEE在下面。

 

ZLL_MT_APP_RPC_CMD_TOUCHLINK

此命令將(cause)觸發CC253x ZLL控制器開始Touch Link事務。 TouchLink is proximity based, so for a succulence TouchLink the traget light must be close the the controller.TouchLink是接近為基礎的,所以對於一個TouchLink,目標燈必須靠近控制器。一個典型的距離為小於2米,但是這依賴於天線的質量和環境。

這是限制一節中詳細討論。

ZLL_MT_APP_RPC_CMD_RESET_TO_FN

此命令將觸發CC253x ZLL控制器恢復出廠設置。控制器將發出一個網絡離開報文告知其他設備,它將離開網絡。然后,它會在5秒后重置。

 

ZLL_MT_APP_RPC_CMD_CH_CHANNEL

This command will cause the CC253x ZLL controller to initiate a channel change procedure the move the network to a new channel defined by the "Target Channel" parameter.

此命令將導致列出CC253x ZLL控制器來啟動一個通道來改變程序-移動網絡為一個定義為“Target Channel”參數的新通道。

ZLL_MT_APP_RPC_CMD_JOIN_HA

This command will cause the CC253x ZLL controller to initiate a "Classical Join" procedure. The CC253x ZLL controller will scan for a ZigBee network and attempt to association in the classical ZigBee way.

此命令將導致列出CC253xZLL控制器啟動“Classical Join”程序。ZLL控制器將掃描一個ZigBee網絡,並嘗試以傳統的ZigBee方式連接。

 

ZLL_MT_APP_RPC_CMD_SEND_RESET_TO_FN

 

此命令將觸發的CC253x ZLL控制器發送一個“Reset To Factory New”命令。當前的實現需要發送上下文中的TouchLink事務,所以首先,用戶必須啟動TouchLink,那么當目標指示燈標識別“Reset To Factory New”,命令必須發送。一旦“Reset To Factory New”命令被一個ZLL燈接收,將停留在TouchLink事務,燈將恢復出廠設置。TI的一個ZLL燈的實現,這意味着燈將發送網絡離開命令,然后5s后復位。其他實現可能稍有不同的時間,但最終的結果將是相同的。

 

ZLL_MT_APP_CMD示例

一個規范和發送的ZLL_MT_APP_CMD例子如下所示。在這個例子中它是一個ZLL_MT_APP_RPC_CMD_TOUCHLINK的命令:

/*********************************************************************
 * MACROS
 */
 
#define APPCMDHEADER(len) \
0xFE,                                                                             \
len,   /*RPC payload Len                                      */     \
0x29, /*MT_RPC_CMD_AREQ + MT_RPC_SYS_APP        */     \
0x00, /*MT_APP_MSG                                                   */     \
0x0B, /*Application Endpoint                                  */     \
0x02, /*short Addr 0x0002                                     */     \
0x00, /*short Addr 0x0002                                     */     \
0x0B, /*Dst EP                                                             */     \
0xFF, /*Cluster ID 0xFFFF invalid, used for key */     \
0xFF, /*Cluster ID 0xFFFF invalid, used for key */     \
 
#define BUILD_UINT16(loByte, hiByte) \
          ((uint16_t)(((loByte) & 0x00FF) + (((hiByte) & 0x00FF) << 8)))
 
/*********************************************************************
 * CONSTANTS
 */
#define ZLL_MT_APP_RPC_CMD_TOUCHLINK          0x01
 
...
 
/*********************************************************************
 * @fn      zllSocTouchLink
 *
 * @brief   Send the touchLink command to the CC253x.
 *
 * @param   none
 *
 * @return  none
 */
void zllSocTouchLink(void)
{  
        uint8_t tlCmd[]={
               APPCMDHEADER(13)
               0x06, //Data Len
               0x02, //Address Mode
               0x00, //2dummy bytes
               0x00,
               ZLL_MT_APP_RPC_CMD_TOUCHLINK,
               0x00,     //
               0x00,     //
               0x00       //FCS - fill in later
    };
 
    calcFcs(tlCmd,sizeof(tlCmd));
    write(serialPortFd,tlCmd,sizeof(tlCmd));
    tcflush(serialPortFd, TCOFLUSH);   
}
MT_APP_ZLL_TL_IND

該命令將被CC253x ZLL控制器發送在(a successful TouchLink)配置好的TouchLink。該報文將包含目標設備的端點信息。

MT報文格式

網絡地址

端點

配置 ID

 ID設備ID

版本

2個字節

1字節

2個字節

 1字節

 1字節

·         網絡地址:16位目標設備的網絡地址

·         端點:端點目標設備

·         配置編號:資料編號的目標設備

·         設備ID:目標設備的設備ID

·         版本:目標設備的版本:

ZLL控制器應用程序必須存儲端點信息來發送ZCL_MT_APP的報文在網絡上控制燈光。

3.3.3.2.       3.3.2 ZCL MT APP Message

ZCL_MT_APP報文公開一個接口發送ZCL部分的命令。這些消息可以被認為是數據平台消息,它們控制在網絡中的燈(例如,開/關,水平等)。該接口可用於任何ZCL命令,開發人員應該查閱ZCL規格來決定哪些命令應該被產品支持。

如下所示的ZCL_MT_APP消息的結構:

MT Message Format MT消息格式

Application End Point應用程序端點

Network Address網絡地址

Destination End Point目的地端點

ZCL Cluster ID ZCL集群ID

Date Len日期長度

Address Mode地址模式

ZCL Frame Control Field ZCL幀控制字段

ZCL Transaction Sequence Number ZCL事務序列號

ZCL Command ID ZCL命令ID

ZCL Command Payload ZCL命令有效載荷

1字節

2字節

1字節

2字節

 1字節

1字節

1字節

1字節

 1字節

X字節(定義命令)

·         應用程序端點:這是應用的端點ZLL的應用程序,應設置到0x0B

·         保留字:所有保留的字節應設置為0x00

·         網絡地址:發送ZCL報文的設備的網絡地址(或groupId取決於地址mmode),設備的TouchLink的網絡地址發送在MT_APP_ZLL_TL_IND報文。

·         目標端點:發送ZCL報文的設備的端點,端點設備的TouchLinkMT_APP_ZLL_TL_IND報文中發送。

·         ZCL集群ID:集群ID ZCL命令的發送。請參閱ZCL規范

·         日期長度:這應該是6+)加上ZCL命令參數的數量

·         地址模式:ZCL報文地址模式

Address Mode地址模式

AddrNotPresent 

0

AddrGroup

1  

Addr16Bit

2  

Addr64Bit

3  

AddrBroadcast 

15

對大多數的應用程序,僅僅單點傳播報文有一個16位的地址模式,其他的(groupcast多點傳播報文需要一個AddrGroup地址模式。

·         ZCL幀控制字段:定義ZCL框架的特點:

ZCL幀控制字節

7 .. 5

4

3

2

1 .. 0

Reserved保留字

Disable Default Response禁用默認響應

Direction (Client/Server)

方向(客戶端/服務器)

Manufacturer Specific

制造商專用

ZCL Command Type

ZCL命令類型

·         ZCL幀控制字段:

o    保留字:應該是0x0

o    禁用默認響應:定義是否接收器收到ZCL消息應該發送一個默認的響應。

o    方向(客戶端/服務器):定義是否將消息發往客戶端或服務器的集群。

o    制造商專用:定義它是一個ZCL消息ZCL規格,或者它是一個制造商特定的擴展。

o    ZCL命令類型:定義特定於一個集群命令。例如,一個/的消息是特定的/群集,但一個ZCL讀的開/關屬性不是。

·         ZCL事務序列號:事務ID應該為每個ZCL報文增加。

·         ZCL指令IDZCL的指令ID要發送的指令。請參閱ZCL規范

·         ZCL命令有效載荷:有效載荷的ZCL命令發送。請參閱ZCL規范

ZCL_MT_APP_CMD示例

下面的例子顯示,格式化並發送ZCL_MT_APP_CMD消息。在這種情況下,它是一個MoveToLevel命令:

#define COMMAND_LEVEL_MOVE_TO_LEVEL          0x00
#define ZCL_CLUSTER_ID_GEN_LEVEL_CONTROL     0x0008
 
...
 
/*********************************************************************
 * @fn      zllSocSetLevel
 *
 * @brief   Send the level command to a ZLL light.
 *
 * @param   level - 0-128 = 0-100%
 * @param   dstAddr - Nwk Addr or Group ID of the Light(s) to be controled.
 * @param   endpoint - endpoint of the Light.
 * @param   addrMode - Unicast or Group cast.
 *
 * @return  none
 */
void zllSocSetLevel(uint8_t level, uint16_t time, uint16_t dstAddr, uint8_t endpoint, uint8_t addrMode)
{
        uint8_t cmd[]={
               0xFE,                                                                                                                                                                                    
               14,   //RPC payload Len
               0x29, //MT_RPC_CMD_AREQ + MT_RPC_SYS_APP
               0x00, //MT_APP_MSG
               0x0B, //Application Endpoint
               (dstAddr & 0x00ff),
               (dstAddr & 0xff00)>>8,
               endpoint,//Dst EP
               (ZCL_CLUSTER_ID_GEN_LEVEL_CONTROL & 0x00ff),
               (ZCL_CLUSTER_ID_GEN_LEVEL_CONTROL & 0xff00)>>8,      
               0x07, //Data Len
               addrMode,
               0x01, //0x01 ZCL frame control field.  (send to the light cluster only)
               transSeqNumber++,
               COMMAND_LEVEL_MOVE_TO_LEVEL,
               (level & 0xff),
               (time & 0xff),
               (time & 0xff00)>>8,
               0x00       //FCS - fill in later
        };    
 
    calcFcs(cmd,sizeof(cmd));
 
    write(serialPortFd,cmd,sizeof(cmd));
    tcflush(serialPortFd, TCOFLUSH);
}

 

4.  ZigBee Lighting Gateway

4.1.  Setting Up The ZigBee Lighting Gateway Demo

此過程將包含TI ZigBee照明網關演示所需的所有步驟。大多數步驟只需要完成一次。設置完成后,示例可以很容易多次運行。

該演示允許雲服務器上的一個web應用程序或連接到同一個局域網網關的Android設備上的Android應用程序來控制ZigBee照明設備。

除了可以在BEAGLEBONE上進行完整的演示,ZigBee服務器可以運行在任何支持Android應用程序來控制燈的Linux機器上。點擊這里有更多細節。

4.1.1.   獲得必備的硬件組件

(1)        http://www.beagleboard.org訂購BEAGLEBONE 

(2)        獲取一個4GBMicro-SD卡。

(3)        TI訂購ZLL HW參考套件

https://estore.ti.com/CC2530ZDK-ZLL-CC2530-ZigBee-Light-Link-Development-Kit-P4539.aspx)的。這里有如何使用這個工具包的更多信息。然而CC2531EMK將被重新編程作為HAhome automation)協調器使用而不是作為ZLL遙控器使用。

(4)        (可選),建議您還要為BEAGLEBONE購買一個5V電源。

(5)        (可選)獲得ZLL 認證的設備。重要注意事項:確保它們為出廠新品或者你知道如何恢復出廠設置。在這里可以找到更多將ZLL認證設備恢復出廠設置的信息

(6)        (可選)從TITI分銷商訂購一個CC調試器:http://www.ti.com/tool/CC-Debugger

(7)        注意:如果你想嘗試ZigBee服務器和Android應用程序,你可以僅使用LinuxPC / VM。請參閱這里的指示。

4.1.2.   下載並安裝必備軟件

Windows PC上開始安裝步驟之前,下面的軟件需要下載並安裝:

1.     下載並安裝7-Zip。這是一個可以支持很大文件的文件解壓工具。 http://www.7-zip.org/download.html

2.     下載並安裝寫鏡像軟件。這將用於創建SD卡文件用於引導BeagleBone https://sourceforge.net/projects/win32diskimager/files/latest/download

3.     下載並安裝TeraTerm。這將被用來建立一個控制台終端到BeagleBone的連接。 http://en.sourceforge.jp/projects/ttssh2/releases/

4.     下載並安裝BeagleBone驅動http://beagleboard.org/static/beaglebone/latest/README.htm  

4.1.3.   下載必備的BeagleBone Linux鏡像文件

1.    從這個頁面下載最新的BeagleBone原始鏡像,This is just a safety net for getting back to ground zerohttp://beagleboard.org/latest-images/

2.    http://wiki.ninjablocks.com/imagesBEAGLEBONE下載BeagleBone Ninja Blocks SD卡鏡像,該鏡像已經經過測試,但可能有更新的鏡像可以使用。

4.1.4.   BeagleBone創建可引導的SD卡文件

1.    使用7-ZIP從剛剛下載的palladium.img.zip文件解壓縮出img文件。(解壓后大約4GB

2.    使用寫鏡像工具,將img文件寫入到一個4GBmicro-SD卡。

3.    標記這個SDNinja,使它可以與原始工廠SD卡區分開來。

4.1.5.   啟動BeagleBone

1.    將一根以太網電纜連接到BeagleBone以太網插孔

2.    將新創建的SD卡插入到BeagleBone插槽。

3.    重要注意事項: 應從5V電源或帶電”USB端口為BeagleBone供電。如果直接使用您的PCUSB插頭供電它可能無法正常運行。

4.    BeagleBone 板子自帶的USB線插入PC,另一端插到BeagleBone上的Mini-USB接口

 

5.    現在使用TeraTerm連接到BeagleBone的控制台端口

§  檢查“設備管理器”中端口(COMLPT,現在應該有一個新的USB串行端口。記下端口號(如COM12)。如果它沒有出現在設備管理器中,那么需要安裝beaglebone USB驅動程序,按照這里的提示.

§  啟動TeraTerm,執行 文件 - >新建連接,File->New連接到上面的串行端口。

§  TeraTerm上執行設置 - >串行端口,Setup->Serial Port...設置通信設置為115200波特,8位,無奇偶校驗位,1個停止位,無流量控制。

6.    登錄到BeagleBone控制台端口

§  TeraTerm窗口,按下回車鍵,你應該看到:

Ubuntu 12.04 LTS ninjablock ttyO0

 

ninjablock    login

1.      

§  輸入“ubuntu”的用戶名(不帶引號)

§  密碼輸入'temppwd'(不帶引號)

§  您應該看到:

 

Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.18-psp14 armv7l)

 

 * Documentation:  https://help.ubuntu.com/

 * Ninja Block Help: http://help.ninjablocks.com/

 

  MMMMMMMMMMMMMMMMMM       -----------------------------------------

MMMMMMMMMMMMMMMMMMMMMM     |                                       |

MM                  MM     |                                       |

MM    MMMM     MMMM    MM  |           Serial:xxxxxxxxxxxx         |

MM    MMMM     MMMM    MM  |                                       |        MM    MMMM     MMMM    MM  |              HACK ME

MM    MMMM     MMMM    MM -----------------------------------------                                     

 MM                   MM                                          

  MMMMMMMMMMMMMMMMMMMMMM                       

  MMMMMMMMMMMMMMMMMMMMMM    

        MMMMMMMMMMMMMM

       MMMMMMMMMMMMM

MMMMMMMMMMMMMMMMMMMMMMM

   MMMMMMMMMMMMMMMMMMMMMM

   MMMMMMMMMMMMMMMMMMMMMMM

       MMMMMMMMMMMM

         MMMMMMMMMMMM

         MMMMMMMMMMMM

        MMMMMMMMMMMMMM

        MMMMM    MMMMM

       MMMMM      MMMMM

       MMMMM      MMMMM

 

ubuntu@ninjablock:~$

1.    注意框內HACK ME.上面的序列號Serial number,稍后您將需要用到。它也應該與BeagleBone上的以太網插孔標簽上的序列號相匹配。

2.    查看NinjaBlocks日志文件,在控制台中鍵入:

tail -f /var/log/ninjablock.log

1.    f NinjaBlock第一次啟動並連接到互聯網的NinjaBlock鏡像將被更新。一旦更新,它會自動重新啟動。

2.    一旦beaglebone NinjaBlock已更新,你會看到下面的日志:

3.  ubuntu@ninjablock:~$ tail -f /var/log/ninjablock.log

4.  [Thu, 06 Jun 2013 10:00:54 GMT] (info) Express server listening on port 8000

5.  [Thu, 06 Jun 2013 10:00:54 GMT] (info) platform: Device connection established (/dev/ttyO1)

6.  [Thu, 06 Jun 2013 10:00:54 GMT] (info) loadModule: ninja-limitlessLED

7.  [Thu, 06 Jun 2013 10:00:54 GMT] (info) loadModule: ninja-usbcam

8.  [Thu, 06 Jun 2013 10:00:55 GMT] (info) loadModule: network

9.  [Thu, 06 Jun 2013 10:00:55 GMT] (info) loadModule: ninja-zwave

10.[Thu, 06 Jun 2013 10:00:55 GMT] (info) loadModule: ninja-ipcam

11.[Thu, 06 Jun 2013 10:00:56 GMT] (info) loadModule: ninja-philips-hue

12.[Thu, 06 Jun 2013 10:00:56 GMT] (info) usbcam: No camera detected

13.[Thu, 06 Jun 2013 10:01:01 GMT] (info) Attempting to activate...

1.    現在,你需要更新ninja-zigbee的驅動程序。在這個階段你需要確保beaglebone外部Internet連接。在BeagleBone控制台窗口類型:

git clone -b zigbee-lighting https://github.com/ninjablocks/ninja-zigbee /opt/ninja/drivers/ninja-zigbee

輸出應該是這個樣子:

ubuntu@ninjablock:~$ sudo git clone -b zigbee-lighting https://github.com/ninjablocks/ninja-zigbee /opt/ninja/drivers/ninja-zigbee

Cloning into 'ninja-zigbee'...

remote: Counting objects: 201, done.

remote: Compressing objects: 100% (142/142), done.

remote: Total 201 (delta 120), reused 123 (delta 51)

Receiving objects: 100% (201/201), 138.66 KiB | 250 KiB/s, done.

Resolving deltas: 100% (120/120), done.

4.1.6.   准備ZigBee關功能的CC2531EMK USB Dongle

4.1.6.1.       使用ZLL套件的中CC2531EMK

這個步驟將重新對ZLL套件提供的CC2531EMK進行編程,實現遠程遙控,得到擁有一個主機接口HA協調器。如果需要,可以將其重新編程成一個ZLL遙控器。

1.    ZLL參考硬件(HW)套件中的CC2531EMK插到您的PC上的USB插槽中。

2.    重要注意事項:串行引導裝載程序不會刪除存儲在閃存中的網絡參數。這樣一個固件更新時就不需要對ZigBee網絡上的任何設備進行重新調試。但是當CC2531EMK已被編程為一個ZLL遙控器(終端設備)時,我們現在要將其編程為HA協調器,我們就需要重新設置存儲在閃存中的網絡參數。要做到這一點,保持CC2531EMK上的S1 + S2按鈕按下大於10s。紅色和綠色LED會閃爍5秒鍾,CC2531EMK將重新啟動。CC2531EMK按鈕功能的更多信息,可在這里查看。重要的是,CC2531EMK保持在出廠狀態,在編程為HA協調器之前,未曾touchlinked ..

3.    下載文件:LightingGateway USB.zip提取SampleGateway-USB-SBL.bin

4.    使用SampleGateway-USB-SBL.bin更新CC2531EMK的固件(FW),參考下面的指導http://processors.wiki.ti.com/index.php/ZStack-Lighting_Kit#Updating_the_Kit_FW_images_using_the_Windows_bootloader_tool.

4.1.6.2.       使用未編程的CC2531EMK

另外,如果你有一個CC調試器和一塊未編程的CC2531EMK,你可以按照下面的說明操作:

  1. CC調試線連接到CC2531EMK 請特別注意距離CC2531EMK上連接器引腳1最近的紅線(即距離USB接口最遠的)。. Pay careful attention to have the red line on the cable nearest pin 1 of the connector on the CC2531EMK (i.e. furthest away from the USB connector).

2.    CC2531EMK插入到PC上的一個USB接口用來供電。

3.    CC調試器的USB調試線將PCCC調試器連接起來。CC調試器上應該有一個綠燈是亮的。如果沒有,請檢查CC2531EMK的電源供電和引腳1電纜的走線。並嘗試推CC調試器上的按鈕。

4.    使用SmartRF閃存編程器對CC2531EMK進行編程。

§  下載文件:LightingGateway USB.zip,提取SampleGateway-USB-ProdSBL..hex 

§  What do you want to program?” 窗口中,選擇CCxxxx SoCMSP430

§  在閃存鏡像窗口,使用“...” 按鈕來選擇SampleGateway-USB-ProdSBL.hex文件。

§  在動作部分選擇擦除,編程和驗證。

§  單擊執行操作按鈕。

§  經過30秒左右的時間,底部的狀態窗口會提示成功。

4.1.6.3.       CC2531EMK連接到Beaglebone

1.    PC中移除CC2531EMK

2. CC2531 EMK上移除CC調試線(如果使用了)。

3.CC2531EMK插入到BeagleBone上的USB-A插座。

4.推動BeagleBone上的S1 (以太網插孔旁的微小按鈕開關)重新啟動Linux

BeagleBoneCC2531EMK  ZigBee照明網關現在應該可以運作了。在Ninja Blocks 協議中現在被稱為一個NinjaBlockIn Ninja Blocks terms this is now called a NinjaBlock.

4.1.7.   Ninja Blocks門戶網站上創建一個帳戶(只需要一次)

要創建一個NinjaBlocks帳戶:

1.    瀏覽http://a.ninja.is/home

2.    使用beaglebone序列號的5位(數字)作為邀請碼。

4.1.8.   使BeagleBone/CC2531EMK Block Ninja Blocks Web Portal配對

1.    瀏覽http://a.ninja.is/home

2.    登錄到一個帳戶。

3.    進入到儀表板,點擊配對塊。然后就應該詢問塊的序列號。輸入BeagleBone以太網插孔上的號碼(在之前的步驟中已經指出)。

現在,BeagleBone Block應該成功與Ninja Blocks portal.配對了。

The BeagleBone Block should now be successfully paired with the Ninja Blocks portal

 

4.1.9.   ZigBee設備連接到網關

1.    按下CC2531EMK dongle上的S1按鈕,紅色LED將閃爍60秒,在這期間,設備將連接到網絡。

2.    其它ZigBee設備按照設備的具體說明,讓它們加入ZigBee網絡。

§  對於Zlights您需要:

§  按住按鈕3秒,重設恢復出廠設置,並等待5秒,直至LED閃爍(這一步可以跳過,如果ZLight已經恢復出廠設置)。

§  按住按鈕大於10s,使其加入網絡。

3.    一旦加入,燈設備將出現在Ninja儀表板。

4.    設備測試以及正常工作過程是:

§  TIZigBee光鏈路Zlight:https://estore.ti.com/CC2530ZDK-ZLL-CC2530-ZigBee-Light-Link-Development-Kit-P4539.aspx

§  飛利浦色調燈泡:Bulbs:http://store.apple.com/uk/product/HA780ZM/A/philips-hue-connected-bulb-single-pack?fnode=6f

§  Cleode SmartPlughttp://www.cleode.fr/en/produits.php?page=zplug

§  Cleode ZRC(開關):http://www.cleode.fr/en/produits.php?page=zrc

§  Cleode ZMOVE(動作感應器):http://www.cleode.fr/en/produits.php?page=zmove

一旦加入,該設備在NinjaBlocks儀表板上應該有相關的部件。

一旦加入,該設備在NinjaBlocks儀表板上應該有相關的部件。

替換文本

 

4.1.10.         一旦搭建好

示例一旦搭建好,BeagleBone 和燈的電源可以關閉,重新供電時,無需重復上述步驟就可以重新運行。但是目前也發現到一些錯誤,為避免出現問題,先斷開ZLights的電源和再斷開網關的電源。當系統加電時,先給beaglebone加電再給ZLights供電。在添加新設備之前,確保beaglebone上的軟件正在運行,在a.ninja.isWeb應用程序執行設置 - >塊。to do the got to settings->blocks on the a.ninja.is web application.

4.1.11.         Ubuntu PC上運行演示

ZigBee服務器可以運行在任何Linux機器上,在Linux PC上運行演示,下從這里下載zip源文件或在服務器/目錄克隆這個git。您使用的是:您將需要改變你使用的Linux機器的server/i486-linux-gnumakefile中的GCC線目標為GCC編譯器: SBU_REV =“0.1”

 

You will need to change the GCC line in makefile in server/i486-linux-gnu to target the gcc compiler for the Linux Machine you are using: SBU_REV= "0.1"

 

GCC=/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc

CFLAGS = -Wall -DVERSION_NUMBER=${SBU_REV} ....

然后可以從命令行創建ZigBee服務器。

root@tony-VirtualBox:/media/sf_VM-Ubuntu-11.04-Share/Linux_ZLLGateway/server/i486-linux-gnu# make clean

rm -rf *.o zllGateway.bin

root@tony-VirtualBox:/media/sf_VM-Ubuntu-11.04-Share/Linux_ZLLGateway/server/i486-linux-gnu# make

gcc -Wall -DVERSION_NUMBER="0.1"  -D_GNU_SOURCE -c -o zll_controller.o ../Source/zll_controller.c

gcc -Wall -DVERSION_NUMBER="0.1"  -D_GNU_SOURCE -c -o zllSocCmd.o ../Source/zllSocCmd.c

gcc -Wall -DVERSION_NUMBER="0.1"  -D_GNU_SOURCE -c -o interface_devicelist.o ../Source/interface_devicelist.c

gcc -Wall -DVERSION_NUMBER="0.1"  -D_GNU_SOURCE -c -o interface_grouplist.o ../Source/interface_grouplist.c

gcc -Wall -DVERSION_NUMBER="0.1"  -D_GNU_SOURCE -c -o interface_scenelist.o ../Source/interface_scenelist.c

gcc -Wall -DVERSION_NUMBER="0.1"  -D_GNU_SOURCE -c -o interface_srpcserver.o ../Source/interface_srpcserver.c

gcc -Wall -DVERSION_NUMBER="0.1"  -D_GNU_SOURCE -c -o socket_server.o ../Source/socket_server.c

一旦建成,應用程序可能需要改變權限才能夠執行:

root@tony-VirtualBox:/media/sf_VM-Ubuntu-11.04-Share/Linux_ZLLGateway/server/i486-linux-gnu# chmod +x zllGateway.bin

然后服務器可以從命令行起動,它會等待客戶端連的接:

root@tony-VirtualBox:/media/sf_VM-Ubuntu-11.04-Share/Linux_ZLLGateway/server/i486-linux-gnu# ./zllGateway.bin

./zllGateway.bin -- Jun  7 2013 08:27:24

Usage: ././zllGateway.bin <port>

Eample: ././zllGateway.bin /dev/ttyACM0

attempting to use /dev/ttyACM0

zllMain: waiting for poll()

 

4.2.      客戶端應用程序

 

除了Java腳本的NinjaBlocks驅動NinjaBlocks drivers,還有一些由TI開發的CJAVA(安卓)客戶端應用程序示例。

 

4.2.1.   C客戶端應用程序

C客戶端應用程序壓縮文件在這里,或克隆這個 git,在client/CClients/ directory。已提供了2個例子。它們應該使用client\CClients\<app>CmdLine\i486-linux-gnu提供的制作文件在Linux機器上搭建。當打開本地套接字(127.0.0.1)時可以在作為服務器的Linux機器上運行C客戶端的例程,要構建示例,您將需要改變你使用的Linux機器的server/i486-linux-gnumakefile中的GCC線目標為GCC編譯器: SBU_REV =“0.1”

You will need to change the GCC line in makefile in server/i486-linux-gnu to target the gcc compiler for the Linux Machine you are using: SBU_REV= "0.1"

GCC=/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc

CFLAGS = -Wall -DVERSION_NUMBER=${SBU_REV} ....

然后就可以搭建客戶端的例子:

root@tony-VirtualBox:/media/sf_VM-Ubuntu-11.04-Share/Linux_ZLLGateway/client/CClients/lightFlashCmdLine/i486-linux-gnu# make clean

/bin/rm -f flashled.bin *.o

root@tony-VirtualBox:/media/sf_VM-Ubuntu-11.04-Share/Linux_ZLLGateway/client/CClients/lightFlashCmdLine/i486-linux-gnu# make

gcc -c -Wall -g -std=gnu99 -I../../../../server/Source  -I../../Source -I../Source  ../Source/flashled.c

gcc -c -Wall -g -std=gnu99 -I../../../../server/Source  -I../../Source -I../Source  ../../Source/socket_client.c

gcc flashled.o socket_client.o -lpthread -o flashled.bin

root@tony-VirtualBox:/media/sf_VM-Ubuntu-11.04-Share/Linux_ZLLGateway/client/CClients/lightFlashCmdLine/i486-linux-gnu#

一旦建成,應用程序將需要被復制到服務器正在運行的機器上並修改運行的權限:

ubuntu@ninjablock:~$ chmod +x flashled.bin 

4.2.1.1.       客戶端應用listDevsCmdLine

當運行示例時,打印出目前在服務器設備列表中的設備:

IP addresses for 127.0.0.1:

 

  IPv4: 127.0.0.1

Trying to connect...

Connected.

RPSC_ZLL_NewDevice[0]: 2b4f:b

該示例將繼續運行並報告新的設備加入網絡,直到有按鍵按下。

4.2.1.2.       客戶端應用lightFlashCmdLine

這個例子允許你點亮一個燈。其用法如下:

./flashled.bin <device/group addr> <addr mode> <ep> <periodms> <loops>

下面的操作將使由listDevsCmdLine報告的燈以每秒一次開關的速度閃爍10次:

./flashled.bin 0x2b4f 2 0xb 1000 10

Port: 11235

 

IP addresses for 127.0.0.1:

 

  IPv4: 127.0.0.1

Trying to connect...

Toggling Light 2b4f:b - 0

Toggling Light 2b4f:b - 1

Toggling Light 2b4f:b - 2

Toggling Light 2b4f:b - 3

Toggling Light 2b4f:b - 4

Toggling Light 2b4f:b - 5

Toggling Light 2b4f:b - 6

Toggling Light 2b4f:b - 7

Toggling Light 2b4f:b - 8

Toggling Light 2b4f:b - 9

4.2.2.   Android客戶端應用程序

要安裝一個Android設備上的應用程序,從這里獲取apk文件,將其復制到手機內存卡,並在文件瀏覽器打開,,或選擇發送到手機上的一個帳戶,並打開附件。

應用程序需要你在beagleBone所在的同一網絡上,輸入beagleBoneIP地址[c9] 。這可以從雲服務的Web界面 設置 - >塊中(settings->block獲得,或在BeagleBone的控制台窗口中鍵入'ifconfig<enter>',,應該輸出下面的信息:

ubuntu@ninjablock:~$ ifconfig

eth0      Link encap:Ethernet  HWaddr 78:c5:e5:d9:ba:f7

          inet addr:192.168.1.12  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::7ac5:e5ff:fed9:baf7/64 Scope:Link

          UP BROADCAST RUNNING ALLMULTI MULTICAST  MTU:1500  Metric:1

          RX packets:12241 errors:0 dropped:0 overruns:0 frame:0

          TX packets:3827 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:2024982 (2.0 MB)  TX bytes:627017 (627.0 KB)

上面的例子獲得的IP地址是192.168.1.12

照明控制器應用程序允許您選擇一盞燈,並使用APP控制它。您還可以綁定開關(如:Cleode ZRC with 5 switches)或運動傳感器(如Cleode ZMOVE),以便開關/或運動傳感器可以直接控制燈。

該應用程序還支持其他功能,如:

§  顯示網絡上的設備列表

§  捆綁

§  創建組

§  存儲和調用場景。

Android應用程序完整的源代碼和Eclipse項目可以在這里的下載或克隆thisgit

 

4.2.2.1.       Android應用程序菜單

這些功能都可以通過菜單進入,可以通過按下硬鍵盤軟鍵盤菜單鍵,具體取決於Andr​​oid設備的型號和版本:

替換文本

AndroidAppMenu

我們試圖使這項工作對所有品牌的Android設備和所有版本的Android都能使用,但如果你發現一個不允許你選擇菜單的設備或Android版本,請報告E2E - http://e2e.ti.com/support/的的low_power_rf/f/158.aspx,使用“ZigBee網關作為標記。

4.2.2.2.       Android應用設備列表

下面的菜單選項被選中時,會顯示一個設備列表。

替換文本

AndroidAppMenuList

4.2.2.3.       Android應用綁定

選擇綁定菜單項:

替換文本

AndroidAppMenuBind

4.2.2.4.       Android應用組

選擇菜單項:

替換文本

AndroidAppMenuGroups

4.2.2.5.       Android應用場景

選擇場景菜單項:

替換文本

AndroidAppMenuScenes

4.3.      源代碼和更多詳情

接口和源更詳細的信息可以在這里找到。

 

 

 

 

 

 

 

 

 

 

 

 

5.  ZigBee Lighting Gateway SW

5.1.      Introduction

wiki描述了zigbee 點燈網關的軟件層及其接口

軟件系統結構框圖如下所示:

主要有一下幾層:

l  提供了許多的客戶端例程:

n  基於javaScriptNinja zigbee 用戶驅動,用於與NinjaBlock提供的雲端服務進行連接。

n  基於javaZigbee 用戶驅動,用於android應用程序中

n  基於Czigbee用戶驅動,用於Linux命令行例程

l  Linux下的點燈網關軟件提供:

Socket API:高度抽象的socket接口,用於通知zigbee網絡上的更高層設備和通過TCP/IP實現與zigbee設備間信息的收發

ZigBee 抽象層:為了讓網絡上設備相關的信息在系統重啟后依然存在,該層以文件的形式維護和存儲了設備列表、分組、情景模式。

Zigbee驅動:定義網關與連接的Zigbee芯片間的USB/UART接口,實現了一系列的函數:

n    實現物理層傳輸協議

n    實現到高層軟件模塊的ZCL信息抽象。實現了像“發送顏色命令”這樣的高層Zigbee API,以及解析接收到的ZCL幀數據和收到諸如“報警指示”等消息時去調用回調函數。

l  Zigbee 點燈網關固件:

實現了Zigbee協議棧-Home Automation Profile。通過為主機提供一個簡單的Zigbee點燈網關主機接口,固件庫使上層主機有效避免了直接實現復雜Zigbee協議的問題。

ZStack-Lighting-1.0.1 Host Interface C Examples

5.2.  ZigBee照明網關固件(ZigBee Lighting Gateway FW

現在提供的ZigBee照明網關是基於ZStack CCC2530-2.5.1a家庭自動化示例應用程序。 主機接口是從實施的ZStack-Lighting-1.0.1遠程移植過來的。

ZigBee照明網關固件的特點是:

  • 建立一個ZigBee網絡作為協調器。
  • HA網關主機接口是通過USB / UART來實現的。
  • 發現設備加入網絡和傳遞信息到主機。
  • 新設備加入時,使用開關S1打開網絡。
  • 從主機的串行引導更新固件。

ZigBee網關固件的源代碼是以一個ZStack-CC2530-2.5.1a版本補丁來提供的。

5.2.1.   ZigBee照明網關固件的開關和LED分配

§  目前只使用了S1按鈕, 2個功能:

§   

§                         簡單照明網關的開關分配

 

開關

按壓

功能

S1

上電時按下按鈕。

將設備設置成bootloader模式。 具體描述在這里

S1

運行的ZigBee照明網關時的任何按壓

打開網絡為60s 在這期間,新設備可以連接。

§   

§  CC2531評估包中有兩個LED燈,分別為紅色和綠色,這些燈的狀態的意思是:

§   

§                         簡單照明網關的LED分配    

 

LED

狀態

功能

綠色

啟動時閃爍

正在進行初始化

綠色

常亮

已完成初始化

紅色

閃爍(每隔1s短閃)

網絡對新的設備的加入開放。

綠色

閃爍(在2秒的時間內8次快速閃爍)

發現了新的設備。

 

5.2.2.   ZigBee Lighting Gateway Host Interface

ZigBee照明網關主機接口暴露使用的MT(管理和測試)接口。 MT子系統常常給這些消息是規定路線的是MT_APP,這個通常被測試團隊所使用,並且MT包允許在ZStack應用和UART之間傳遞。 這種機制第一次被使用在ZStack-Lighting-1.0.1主機接口上,並已經被移植到了ZigBee照明網關中。

5.2.2.1.       MT APP

MT APP頭由2個命令字節和有效載荷組成:

MT_APP

LEN

CMD0

CMD1

有效載荷

1字節

1字節

1字節

LEN字節

 

CMD0 總是被設置為0X49MT_RPC_CMD_AREQ | MT_RPC_SYS_APP),代表MT_APP 

CMD1總是被設置為0x0,代表主機接口消息。

 

5.2.2.2.       傳入的(從主機發出)MT APP消息

2種類型的傳入MT_APP的消息,控制平面和數據平面。 消息類型是數據平面型或者控制平面型是由MT_APP消息中的集群 ID來決定的,如果cluster ID0xFFFF,那么它是一個控制平面的消息。 如果cluster ID不是OxFFFF,那么它是一個數據平面消息,這將永遠是一個的ZCL幀,並有有效的(非0xFFFFcluster ID

傳入的(從主機發出)MT APP控制平面消息

MT_APP控制平面消息的結構如下所示:

MT消息格式

應用的終端節點

保留的

ZLL_MT_APP集群ID

Date長度

保留的

ZLL_MT_APP

命令ID

保留的

ZLL_MT_APP命令

有效載荷

1字節

3個字節

2個字節

1字節

3個字節

1字節

2個字節

X字節(命令定義)

  • 應用程序終端節點:這是應用程序的應用程序的終端節點,它應該被設置為0x0B
  • 保留的:所有保留的字節應設置為0x00
  • MT_APP集群ID:應設置為0xFFFF
  • Date長度:這應該是6 +MT_APP命令中參數的個數
  • MT_APP命令ID:見下文支持的命令

ZigBee照明網關目前支持的MT APP消息是:

發送給CC253xMT APP命令

ZLL_MT_APP命令ID

參數(1個字節)

保留(用於ZLL_MT_APP_RPC_CMD_TOUCHLINK

0X01

N / A

MT_APP_RPC_CMD_RESET_TO_FN

0X02

N / A

保留(ZLL_MT_APP_RPC_CMD_CH_CHANNEL

0X03

目標通道

保留(用於ZLL_MT_APP_RPC_CMD_JOIN_HA

0x04

N / A

MT_APP_RPC_CMD_PERMIT_JOIN

0X05

持續時間,發送允許連接

保留(用於ZLL_MT_APP_RPC_CMD_SEND_RESET_TO_FN

0X06

N / A

 

MT_APP_RPC_CMD_RESET_TO_FN

這個命令被發送到照明網關。 這將導致CC253xZigBee照明網關復位到出廠新,它會清除NV(非易失性存儲器)並在5s后復位。

MT_APP_RPC_CMD_PERMIT_JOIN

這個命令被發送到照明網關。 這個命令將導致的CC253x ZigBee照明網關為新設備的加入打開網絡。 這個命令有2個參數:

MT_APP_RPC_CMD_PERMIT_JOIN參數

1字節

1字節

持續時間

發送允許加入

  • 持續時間(可選):打開網絡的時間(以秒為單位)。 默認為60秒。
  • 發送允許加入(可選):如果為真,ZigBee照明網關將允許設備與之連接,同時廣播一個允許加入信息,連接設備可通過網絡與其他設備關聯。 因此,連接並不僅僅局限於ZigBee照明網關設備的范圍。如果為假,只有ZigBee照明網關被允許加入網絡而且也不會有消息被廣播到其它設備。 默認為真。

 

傳入(從主機發出)MT APP數據平面消息

ZCL_MT_APP消息產生一個接口發送ZCL命令。 這些消息控制網絡中設備的屬性(如:開/關,電平等),ZCL消息並不能告知一個設備離開網絡。 該接口可用於支持任何ZCL命令,開發人員應研讀ZCL 規范來決定主機應該支持何種命令。

 

如果Cluster ID是有效的,那么CMD1字節就可以被忽略。 由於集群ID是可以改變的,所以CMD1是用來區分數據平面和控制平面。對於傳入的消息,一個單一CMD1值可以以同樣的方式來指定數據平面。來自ZStack-Lighting-1.0.1 執行情況並在審查過程中被錯過了。

如下所示的是ZCL_MT_APP消息的結構:

 

MT APP ZCL消息格式

應用終端節點

網絡地址

目的終端節點

ZCL

集群ID

Date

長度

地址模式

ZCL

幀控制域

ZCL業務序列號

ZCL

命令ID

ZCL命令

有效載荷

1字節

2個字節

1字節

2個字節

1字節

1字節

1字節

1字節

1字節

X字節(由命令定義)

  • 應用程序終端節點:這是應用的終端節點ZLL的應用程序,應設置為0x0B
  • 保留的:所有保留的字節應設置為0x00
  • 網絡地址:ZCL消息發送到該設備的網絡地址(或GROUP ID取決於地址模式),TouchLink時發送MT_APP_ZLL_TL_IND消息到設備的網絡地址。
  • 目標終端節點:ZCL消息發送到該設備的終端節點, TouchLink時發送T_APP_ZLL_TL_IND消息到設備的終端節點。
  • ZCL集群ID:命令所要發送的集群的ID 請參閱ZCL規范 
  • Date長度:這應該是6 +ZCL命令中參數的個數。
  • 地址模式:ZCL消息尋址模式:

 

 

地址模式

AddrNotPresent

0

AddrGroup

1

Addr16Bit

2

Addr64Bit

3

AddrBroadcast

15

對於大多數應用程序而言,一個16位的單播地址或者一個地址模式為AddrGroup模式的組播地址是必需的。

  • ZCL幀控制域:定義ZCL幀的特點:

幀控制字節

7 - 5

4

3

2

1 .. 0

保留的

禁用默認響應

方向(客戶端/服務器)

制造商專用

ZCL命令類型

 

  • ZCL幀控制域的位:
    • 保留的:應該為0x0
    • 禁用默認響應:定義接收器收到ZCL消息是否應該發送一個默認的響應。
    • 方向(客戶端/服務器):定義消息被發往客戶端或服務器的集群。
    • 制造商專用:定義一個ZCL消息是由ZCL規格定義,或者它是一個制造商的特定的擴展。
    • ZCL命令類型:定義的是具體到群集的命令。 例如,一個開/關的消息是特定的/群集,但不讀出的開/關的屬性是一個ZCL
  • ZCL事務序列號:每個ZCL消息的業務序列號應該是遞增的。
  • ZCL命令ID:要發送的的ZCL命令的命令ID 請參閱ZCL規范 
  • ZCL命令有效載荷:被發送的的ZCL命令的有效載荷。 請參閱ZCL規范 

5.2.2.3.       MT APP消息傳出(到主機)

同樣的,傳出的MT_APP消息也分為兩種,控制平面和數據平面。 然而,不再使用的集群ID來識別消息類型,所有的消息都是相同的格式並使用CMD1MT_APP的標頭來區分消息類型。

 

數據平面消息都使用命令IDMT_APP_RSP0X80),其他所有的命令ID為控制平面消息。

MT APP命令發送的CC253x

命令

參數

控制(c)或數據(d)平面

MT_APP_RSP

0X80

ZCL有效載荷,見下文。

           d

保留(MT_APP_ZLL_TL_IND

0X81

N / A

 

MT_APP_ZLL_NEW_DEV_IND

0X81

見下文。

           c

 

MT_APP_RSP

有效載荷MT_APP_RSP 和傳入(從主機發出)MT APP數據平面消息一樣。

MT_APP_ZLL_NEW_DEV_IND

當一個設備加入該網絡時,CC253x ZigBee家庭自動化網關發送該命令。

MT消息格式

網絡地址

終端節點

文檔編號

設備ID

版本

IEEE地址

2個字節

1字節

2個字節

1字節

1字節

8個字節

  • 網絡地址:16b目標設備的網絡地址
  • 終端節點:目標設備的終端節點
  • 文檔編號:目標設備的文檔編號
  • 設備ID:目標設備的設備ID
  • 版本:目標設備的版本
  • IEEE地址:64b目標設備的IEEE地址

ZigBee照明網關主機的應用程序必須存儲網絡地址和端點的信息,以便於發送ZCL_MT_APP消息來控制網絡上的設備。IEEE地址也要被 存儲來綁定請求消息。

 

物理傳送

UART數據包中含有的MT消息,消息是按照2.1節中的“Z-Stack Monitor and Test API.pdf”解釋的RPCRemote Procedure Call,遠程過程調用)協議格式形成的,RPC數據包中有一個指定路由的MT頭消息,在這種情況下,MT header需要改變其格式,改變格式是依據消息傳到運行在CC253x ZStack FWZLL應用程序的路由決定

 

數據包的結構如下所示:

RPC報文格式

RPC

MT

MT_APP

ZLL_MT_APP / ZCL_MT_APP的命令

RPC幀校驗序列

 

遠程過程調用

RPC數據包包含一個SOF(幀開始)字節來同步UART發送的數據包,然后由RPC有效載荷(這個情況下是MT消息)和最后的FCS(幀校驗序列)。

 

RPC數據包格式

SOF

有效載荷

FCS

1字節

3 - 256字節

1字節

 

  • SOF:必須設置為0xFE
  • 有效載荷:在這種情況下,它是MT消息,請參閱第XXX \ N
  • FCS:參閱第XXX

 

 

幀檢驗序列

FCS可以由下面的C代碼計算:

 /*********************************************************************

 * @fn      calcFcs

 *

 * @brief   populates the Frame Check Sequence of the RPC payload.

 *

 * @param   msg - pointer to the RPC message

 *

 * @return  none

 */

void calcFcs(unsignedchar*msg,int size)

{

      unsignedchar result =0;

      int idx =1;//skip SOF

      int len =(size - 1);  // skip FCS

 

      while((len--)!= 0){

            result ^= msg[idx++];

      }

 

      msg[(size-1)]= result;

}

 

5.3.      Linux Lighting Gateway SW

Linux網關源代碼在這里,在下面的章節中將更詳細的描述。

5.3.1.   Linux照明網關的ZigBee驅動程序

ZigBee的驅動程序連接到CC2531EMK的主機接口並將主機接口的消息翻譯成功能活動。

主機首先需要打開到CC253x的串口,這個功能在zllSocOpen中實現

zllSoc_fd = zllSocOpen( argv[1]);

函數返回一個文件描述符,以便應用程序可以測試CC253x設備。這可以用來監測串行端口上的輸入,當有來自於CC253x的數據時,必須調用消息處理函數進行來數據讀取和解析。

zllSocProcessRpc ();

CC253x傳送來消息,接下來被轉化為回調函數。主機應用程序注冊的回調函數如下:

§  zllSocTlIndicationCb -TouchLink觸摸指示回調(用於ZLL控制的橋梁,而不是關於HA照明網關)

§  newDevIndicationCb -新設備指示回調

§  zllSocZclGetStateCb –ZCL狀態響應回調

§  zllSocZclGetLevelCb –ZCL等級響應回調

§  zllSocZclGetHueCb –ZCL色調響應回調

§  zllSocZclGetSatCb –ZCL飽和度響應回調   // saturation

這是通過填充有興趣接收消息的回調函數表中的回調函數來完成的,設置那些不為空的回調函數,並把它傳遞給下面的回調注冊函數:

static zllSocCallbacks_t zllSocCbs =
{
  null,                  // pfnTlIndicationCb - TouchLink Indication callback (used for ZLL control bridge, not relevant for HA Lighting Gateway)
  newDevIndicationCb,    // pfnNewDevIndicationCb - New Device Indication callback
  zclGetStateCb,         // pfnZclGetHueCb - ZCL response callback for get Hue
  zclGetLevelCb,         // pfnZclGetSatCb - ZCL response callback for get Sat
  zclGetHueCb,           // pfnZclGetLevelCb_t - ZCL response callback for get Level
  zclGetSatCb            // pfnZclGetStateCb - ZCL response callback for get State
};
 
...zllSocRegisterCallbacks( zllSocCbs );
 

一旦打開串行端口,主機可以使用以下函數發送命令:

/ ///Control API's

void zllSocResetToFn(void);     //Resets the Gateway to its Factory New state.

void zllSocSendResetToFn(void);//Reserved for use with ZLL Controller

void zllSocOpenNwk(void);       //Opens the network for 60s for new devices to join.

//ZCL Set API's

void zllSocSetState(uint8_t state, uint16_t dstAddr, uint8_t endpoint, uint8_t addrMode);

void zllSocSetLevel(uint8_t level, uint16_t time, uint16_t dstAddr, uint8_t endpoint, uint8_t addrMode);

void zllSocSetHue(uint8_t hue, uint16_t time, uint16_t dstAddr, uint8_t endpoint, uint8_t addrMode);

void zllSocSetSat(uint8_t sat, uint16_t time, uint16_t dstAddr, uint8_t  endpoint, uint8_t addrMode);

void zllSocSetHueSat(uint8_t hue, uint8_t sat, uint16_t time, uint16_t dstAddr, uint8_t endpoint, uint8_t addrMode);

//ZCL Get API's

void zllSocGetState(uint16_t dstAddr, uint8_t endpoint, uint8_t addrMode);

void zllSocGetLevel(uint16_t dstAddr, uint8_t endpoint, uint8_t addrMode);

void zllSocGetHue(uint16_t dstAddr, uint8_t endpoint, uint8_t addrMode);

void zllSocGetSat(uint16_t dstAddr, uint8_t endpoint, uint8_t addrMode);

 

5.3.2.   Linux照明網關的ZigBee抽象

“ZigBee抽象層用來存儲設備,組和ZigBee網絡上存在的場景列表。

5.3.3.   Linux照明網關的數據文件

Linux照明網關創建和維護.dat文件來存儲信息,這些信息需要持續一個電源周期。此信息是:

§  已經加入ZigBee網絡的設備。

§  已創建的群組。

§  已創建的場景。

5.3.3.1.       設備數據文件(  Device Data File  )

Linux照明網關在同一目錄下創建一個設備列表的可執行文件,文件被稱為interface_devicelist.dat,是一個二進制文件。當zllSocCmd模塊接收到一個MT_APP_ZLL_NEW_DEV_IND,它增加了一個設備到列表中。列表中的設備用';'分隔;設備信息存儲的格式是:

Linux照明網關的設備清單格式

 字節Bytes

描述Description

8

IEEE地址 IEEE Address

2

網絡地址 Network Address

1

端點     Endpoint

2

配置文件ID   profile ID

2

設備ID   Device ID

1

版本  Version

1

設備名稱長度 nDevice name length n.

n

設備名稱       Device name

1

狀態(以供將來使用)  status (for future use)

5.3.3.2.       組數據文件(Group Data File)

Linux照明網關在同一目錄下創建一個組列表的可執行文件,文件被稱為interface_grouplist.dat,是一個二進制文件。當Linux照明網關模塊接收到一個創建組的TCP / IP命令時,它發送相關的ZigBee消息來創建組,並將組添加到列表中。此ZigBee消息會引起ZigBee網絡中設備將它們自己添加到列表中,該列表中的成員不存儲在interface_grouplist.dat文件中,在文件中僅組被創建。列表中的每個組用';'分隔。組信息存儲的格式是:

Linux的照明網關設備清單格式

字節

描述

2

ID    Group ID

1

組名稱長度 n  Group name length n.

n

組名稱   Group name

5.3.3.3.       場景數據文件(Scene Data File

Linux照明網關在同一目錄下創建一個場景列表的可執行文件,文件被稱為interface_scenelist.dat,是一個二進制文件。當Linux照明網關模塊接收到創建一個場景TCP / IP命令時,它會發送相關的ZigBee消息來創建場景,並將其添加到列表中。ZigBee消息會導致ZigBee網絡上的設備創建和存儲一個場景,場景的設置存儲在ZigBee設備中而不是用interface_scenelist.dat文件存儲的。列表中的每一個場景用';'分隔;。場景信息存儲的格式是:

Linux的照明網關設備清單格式

字節

描述

2

ID   Group ID

1

場景ID  Scene ID

1

場景名稱長度      Scene name length n             

n

場景名稱

5.3.4.   照明網關插座API   (Lighting Gateway Socket API)

經過TCP / IP套接字發送的命令是二進制命令,消息的結構引用了一個Socket遠程過程調用,其格式如下表所示:

SRPC消息格式

CMD字節

命令長度(N

數據

1字節

1字節

n個字節

5.3.4.1.       發送到照明網關的命令

可以發送到照明網關的命令是:

SRPC發送的命令

描述

CMD ID

0X80

RPCS_CLOSE

0X81

RPCS_GET_DEVICES

0X82

RPCS_SET_DEV_STATE

0X83

RPCS_SET_DEV_LEVEL

0X84

RPCS_SET_DEV_COLOR

0X85

RPCS_GET_DEV_STATE

0x86

RPCS_GET_DEV_LEVEL

0x87

RPCS_GET_DEV_HUE

0x88

RPCS_GET_DEV_SAT

0x89

RPCS_BIND_DEVICES

0x8a

Reserved

0x8b

Reserved

0x8c

Reserved

0x8d

Reserved

0x8E

RPCS_GET_GROUPS

0x8f

RPCS_ADD_GROUP

0x90

RPCS_GET_SCENES

0x91

RPCS_STORE_SCENE

0x92

RPCS_RECALL_SCENE

0x93

RPCS_IDENTIFY_DEVICETBD

0x94

RPCS_CHANGE_DEVICE_NAMETBD

0x95

RPCS_REMOVE_DEVICETBD

0x96

Reserved

RPCS_CLOSE

此命令將關閉ZigBee HA Gateway SW Linux應用。為了避免錯誤地關閉應用程序,這個命令的有效負載是一個2字節的幻數

(c語言中,把直接使用的常數叫做幻數。在編程時,應盡量避免使用幻數,因為當常數需要改變時,要修改所有使用它的代碼,工作量巨大,還可能有遺漏。因此通常把幻數定義為宏或枚舉。建議使用枚舉,因為它是編譯階段存在的符號,編譯器的提示會更清晰、更准確。

#define ARRAY_SIZE 10

enum{ARRY_SIZE = 10}

)

RPCS_CLOSE消息格式

字節Bytes

描述Description

Value

1

命令ID  Command ID

0X80

1

長度    Length

0X2

2

幻數值 Magic Value

0x2536

RPCS_GET_DEVICES

該命令將被用來請求設備列表。這將導致的ZigBee HA網關為列表中每個設備發送RPCS_NEW_ZLL_DEVICE消息。

RPCS_GET_DEVICES消息格式

字節

描述

1

命令ID  Command ID

0X81

1

長度    Length

0

RPCS_SET_DEV_STATE

此命令是用來改變一個設備或一組設備的狀態。它有兩個模式,單播,針對一個特定的設備;組播,針對先前已通過RPCS_ADD_GROUP命令創建的一組設備。

RPCS_SET_DEV_STATE消息格式

字節

描述

1

命令ID    Command ID

0X82

1

長度    Length

13

1

地址模式  Address Mode

1 = 組播或2 =單播     1=groupcast OR 2=unicast                     

2

網絡地址  Network Address

NwkAddr或組ID      NwkAddr OR Group ID

6

保留的   Reserved

0

1

端點     Endpoint

設備端點或為0xFF       Devices Endpoint OR 0xFF

2

保留的   Reserved

0

1

狀態    State

01(開啟或關閉)  0 or 1 (on or off)

RPCS_SET_DEV_LEVEL

此命令是用來改變一個設備或一組設備的光的水平。它有2個模式,單播,針對一個特定的設備;組播,針對先前已通過RPCS_ADD_GROUP命令創建的一組設備。

RPCS_SET_DEV_LEVEL消息格式

字節

描述

1

命令ID  Command ID

0X83

1

長度  Length

15

2

地址模式  Address Mode

1 = 組播或2 =單播   1=groupcast OR 2=unicast

2

網絡地址 Network Address

NwkAddr或組ID    NwkAddr OR Group ID

6

保留的   Reserved

0

2

端點     Endpoint

端點或為0xFF     Endpoint OR 0xFF

2

Reserved

0

2

轉換時間    Transition time

0-0xFFFF的(100ms單位)

1

水平   Level

0-0xFF

RPCS_SET_DEV_COLOR

此命令是用來改變一個設備或一組設備的光的顏色。它有兩個模式,單播,針對一個特定的設備;組播,針對先前已通過RPCS_ADD_GROUP命令創建的一組設備。

RPCS_SET_DEV_COLOR消息格式

字節

描述

1

命令ID  Command ID

0X84

1

長度  Length

16

2

地址模式   Address Mode

1 = 組播或2 =單播  1=groupcast OR 2=unicast

2

網絡地址   Network Address

NwkAddr或組ID   NwkAddr OR Group ID

6

保留的  Reserved

0

1

端點    Endpoint

端點或為0xFF      Endpoint OR 0xFF

2

保留的   Reserved

0

1

色調     Hue

0-255

1

飽和度   Saturation

0-255

RPCS_GET_DEV_STATE

此命令用於請求設備的開/關狀態。當命令發送到支持開/關狀態讀取的設備時,響應將導致ZigBee HA Gateway SW發送RPCS_GET_DEV_STATE_RSP消息。

RPCS_GET_DEV_STATE消息格式

字節

描述

1

命令ID  Command ID

0X85

1

長度   Length

0

RPCS_GET_DEV_LEVEL

此命令用於請求設備的光照水平。當命令發送到支持光照水平讀取的設備時,響應將導致ZigBee HA Gateway SW發送RPCS_GET_DEV_LEVEL_RSP消息。

RPCS_GET_DEV_LEVEL消息格式

字節

描述

1

命令ID  Command ID

0x86

1

長度   Length

0

RPCS_GET_DEV_HUE

此命令用來請求設備色調。當發送到支持色調讀取的設備時,響應將導致ZigBee HA Gateway SW發送RPCS_GET_DEV_HUE_RSP消息。

RPCS_GET_DEV_HUE消息格式

字節

描述

1

命令ID  Command ID

87H

1

長度   Length

0

RPCS_GET_DEV_SAT

此命令用來請求設備的色飽和度。當發送到支持色飽和度讀取的設備時,響應將導致ZigBee HA Gateway SW發送RPCS_GET_DEV_SAT_RSP消息。

RPCS_GET_DEV_SAT消息格式

字節

描述

1

命令ID  Command ID

0x88

1

長度   Length

0

RPCS_BIND_DEVICES

This command is used to request a devices add another device to its binding table. When sent to the source device supports the output cluster of the ClusterID specified the source device will add the desitnation device to its binding table. The will result in the source device sending cluster specific messages to the distination device. an example use case would be a PIR sensor as the source device binding its on/off cluster to a Light to turn the light on/off based on motion detect or not detected.

此命令是用來請求一個設備添加其他設備到其綁定列表。當該命令發送到支持集群ID為“ClusterID輸出簇的源設備時,指定的的源設備將添加目的設備到其綁定表。這將導致源設備發送集群特定消息給目的設備。一個示例如:將一個紅外傳感器作為源設備將其開/關集群綁定到一個燈,是否有運動偵測到決定燈的亮/滅。

RPCS_BIND_DEVICES消息格式

字節

描述

1

命令ID  Command ID

0x88

1

長度   Length

0

RPCS_GET_GROUPS

此命令將用於請求組列表。這將導致ZigBee HA Gateway SW為組列表中每個組(由RPCS_ADD_GROUP創建)發送RPCS_GET_GROUPS_RSP消息。

RPCS_GET_GROUPS消息格式

字節

描述

1

命令ID  Command ID

0x8e

1

長度  Length

0

2

源網絡地址  Source Network Address

NWK地址  Nwk Addr

1

源端點   Source Endpoint

端點   Endpoint

8

IEEE地址   Source IEEE Addr

IEEE地址  IEEE Addr

1

目標端點   Destination Endpoint

端點  Endpoint

8

目的地IEEE地址  Destination IEEE Addr

IEEE地址  IEEE Addr

2

集群ID     Cluster ID

集群ID   ClusterID

RPCS_ADD_GROUP

此命令用來發送一個ZigBee消息將一個設備添加到一個組,如果該組不存在,則在組列表中創建該組。它有兩個模式,單播,針對一個特定的設備;組播,針對先前已通過RPCS_ADD_GROUP命令創建的一組設備。此命令將得到一個含有該組的組IDRPCS_ADD_GROUP_RSP

RPCS_ADD_GROUP消息格式

字節

描述

1

命令ID  Command ID

0x8f

1

長度   Length

13 + n

1

地址模式   Address Mode

1 = 組播或2 =單播    1=groupcast OR 2=unicast

2

網絡地址   Network Address

NwkAddr或組ID   NwkAddr OR Group ID

6

保留的    Reserved

0

1

端點     Endpoint

設備端點或為0xFF   Devices Endpoint OR 0xFF

2

保留的   Reserved

0

1

組名稱長度    Group name length

n

Ñ

組名稱字符串

例如:飯廳”   "Dinning Room"

RPCS_GET_SCENES

該命令將被用來請求一個場景列表。它會導致ZigBee HA Gateway SW為場景列表中的每個場景(由RPCS_STORE_SCENE創建)發送RPCS_GET_SCENE_RSP消息。

RPCS_GET_SCENES消息格式

字節

描述

1

命令ID   Command ID

0x90

1

長度    Length

0

RPCS_STORE_SCENE

This command is used to send a ZigBee message to store a scene to a group and to create the scene in the scene list if it does not yet exist. It has 2 modes, unicast to target a particular device or groupcast to target a group of devices that has previously been created a previous RPCS_ADD_GROUP command. It is highly recommended that this is only used in groupcast mode to store a scene to the entire group that it applies to rather than individual devices. This command will result in a RPCS_ADD_SCENE_RSP containing the Group ID and Scene ID of the scene.

 

此命令是用來發送一個ZigBee消息將一個場景儲存到一個組,如果該場景不存在,則新建該場景。它有兩個模式,單播,針對一個特定的設備;組播,針對先前已通過RPCS_ADD_GROUP命令創建的一組設備。強烈建議,這個命令僅使用組播模式來存儲整個組的一個場景而不是單個設備。此命令將產生包含該場景的組ID和場景ID  RPCS_ADD_SCENE_RSP命令。

RPCS_STORE_SCENE消息格式

字節

描述

1

命令ID   Command ID

0x8f

1

長度   Length

13 + n

1

地址模式  Address Mode

1 = 組播或2 =單播    1=groupcast OR 2=unicast

2

網絡地址   Network Address

NwkAddr或組ID     NwkAddr OR Group ID

6

保留的    Reserved

0

1

端點   Endpoint

設備端點或為0xFF   Devices Endpoint OR 0xFF

2

保留的   Reserved

0

2

ID(該組RPCS_ADD_GROUP_RSP返回)

Group ID(returned in the RPCS_ADD_GROUP_RSP for that group)

0

1

場景名稱長度    Scene name length

n

n

場景名稱字符串

例如:放松”   "Relax"

RPCS_RECALL_SCENE

此命令用來發送一個ZigBee消息來回憶一個組的場景This command is used to send a ZigBee message to recall a scene to a group。它有兩個模式,單播,針對一個特定的設備;組播,針對先前已通過RPCS_ADD_GROUP命令創建的一組設備。強烈建議此命令僅用在組播模式下來重新調用整個組一個場景,它適用於整個組,而不是單個設備。

RPCS_RECALL_SCENE消息格式

字節

描述

1

命令ID    Command ID

0x8f

1

長度     Length

13 + n

1

地址模式    Address Mode

1 = 組播或2 =單播    1=groupcast OR 2=unicast

2

網絡地址    Network Address

NwkAddr或組ID  NwkAddr OR Group ID

6

保留的    Reserved

0

1

端點   Endpoint

設備端點或為0xFF    Devices Endpoint OR 0xFF

2

保留的   Reserved

0

2

ID(該組RPCS_ADD_GROUP_RSP返回)

Group ID (returned in the RPCS_ADD_GROUP_RSP for that group)

0

1

組名稱長度    Group name length

n

n

組名稱字符串   Group name string 

組名

5.3.4.2.       從照明網關發送的命令

從照明網關發送的命令如下表:

SRPC commands sent

Description

CMD ID

0x01

RPCS_NEW_ZLL_DEVICE

0x02

reserved (was for RPCS_DEV_ANNCE in Linux ZAP)

0x03

reserved (was for RPCS_SIMPLE_DESC in Linux ZAP)

0x04

RPCS_TEMP_READING

0x05

RPCS_POWER_READING

0x06

resevered

0x07

RPCS_GET_DEV_STATE_RSP

0x08

RPCS_GET_DEV_LEVEL_RSP

0x09

RPCS_GET_DEV_HUE_RSP

0x0a

RPCS_GET_DEV_SAT_RSP

0x0b

RPCS_ADD_GROUP_RSP

0x0c

RPCS_GET_GROUP_RSP

0x0d

RPCS_ADD_SCENE_RSP

0x0e

RPCS_GET_SCENE_RSP

0x0f

Reserved

0x10

Reserved

 

RPCS_NEW_ZLL_DEVICE

該命令跟隨RPCS_GET_DEVICES將被發送到ZigBee網絡中的每個設備的客戶端。This command will be sent to the client for each device in the ZigBee network following a RPCS_GET_DEVICES.當一個新的設備加入網絡時,消息也將被發送。

RPCS_NEW_ZLL_DEVICE消息格式

字節

描述

1

命令ID  Command ID

0X01

1

長度   Length

0x7

2

網絡地址 Network Address

0x1234

1

端點 End Point

0X56

2

資料編號   Profile ID

0x0104

2

設備ID   Device ID

0x0102

RPCS_TEMP_READING

當照明網關接收到一個溫度讀數時,該命令將被發送到所有客戶端。溫度是在DEGC * 100 The temperature is in DegC * 100-273.15°C <=溫度<= 327.67ºC,相應的測量值在0x954d0x7FFF之間。這種格式允許的最高分辨率為0.01°C

RPCS_TEMP_READING消息格式

字節

描述

1

命令ID    Command ID

0x04

1

長度      Length

0X5

2

網絡地址   Network Address

0x1234

1

端點     End Point

0X56

2

溫度    Temperature

0x89ab

RPCS_POWER_READING

當照明網關接收到功率讀數時,該命令將被發送到所有客戶端。該電源是在W * 100The power is in W * 100用一個24b的數字表示(在這個消息的數據包中打包成32b的數字)。

RPCS_POWER_READING消息格式

字節

描述

1

命令ID  Command ID

0X05

1

長度    Length

0x7

2

網絡地址   Network Address

0x1234

1

端點    End Point

0X56

4

功率   Power

0x0089abcd

RPCS_GET_DEV_STATE_RSP

當照明網關接收到一個狀態讀數時,該命令將被發送到所有客戶端。該狀態是00xFF,反映設備的開/關狀態。

RPCS_GET_DEV_STATE_RSP消息格式

字節

描述

1

命令ID   Command ID

0X07

1

長度    Length

0x4

2

網絡地址  Network Address

0x1234

1

端點   End Point

0X56

2

狀態     state

0X0

RPCS_GET_DEV_LEVEL_RSP

當照明網關接收到一個水平讀數時,該命令將被發送到所有客戶端。該狀態為0-0xFF時,反映設備的光的暗淡級別。

RPCS_GET_DEV_LEVEL_RSP消息格式

字節

描述

1

命令ID     Command ID

0X08

1

長度    Length

0x4

2

網絡地址    Network Address

0x1234

1

端點   End Point

0X56

2

水平   level

0x78

RPCS_GET_DEV_HUE_RSP

當家庭自動化網關接收到一個色調讀數時,該命令將被發送到所有客戶端。狀態為0-0xFF,反映該設備的色調。

RPCS_GET_DEV_HUE_RSP消息格式

字節

描述

1

命令ID  Command ID

0X09

1

長度   Length

0x4

2

網絡地址   Network Address

0x1234

1

端點   End Point

0X56

2

色調    Hue

0x78

RPCS_GET_DEV_SAT_RSP

當照明網關接收到飽和度讀數時,該命令將被發送到所有客戶端。狀態為0-0xFF的,反映了設備的飽和度。

RPCS_GET_DEV_SAT_RSP消息格式

字節

描述

1

命令ID  Command ID

0X0A

1

長度    Length

0x4

2

網絡地址  Network Address

0x1234

1

端點   End Point

0X56

2

飽和度  Saturation

0x78

RPCS_ADD_GROUP_RSP

當照明網關建立一個群組時,該命令將被發送到一個客戶端。客戶端可以使用這個消息將一個組字符串連接到一個組ID。當網關收到一個RPCS_ADD_GROUP命令時將創建一個組。

RPCS_ADD_GROUP_RSP消息格式

字節

描述

1

命令ID   Command ID

0X0B

1

長度      Length

0X3 +組名稱字符串長度

2

ID     Group ID

0x1234

1

組名稱字符串長度  Group Name String Length

x

x

組名稱   Group Name

1

RPCS_GET_GROUP_RSP

當照明網關響應一個RPCS_GET_GROUPS命令時,該命令將被發送到客戶端。此消息將被發送到已在照明網關上創建的每個組。

RPCS_GET_GROUP_RSP消息格式

字節

描述

1

命令ID   Command ID

0X0C

1

長度    Length

0X3 +組名稱字符串長度

2

ID  Group ID

0x1234

1

組名稱字符串長度  Group Name String Length

x

x

組名稱   Group Name

1

RPCS_ADD_SCENE_RSP

當照明的網關創建了一個場景時,該命令將被發送到客戶端,客戶端可以使用這個消息將一個場景字符串連接到一個場景ID和一個組ID。網關收到一個RPCS_ADD_SCENE命令將創建一個場景。

RPCS_ADD_SCENE_RSP消息格式

字節

描述

1

命令ID  Command ID

0x0d

1

長度   Length

0x3+場景名稱字符串長度    0x3 + Scene Name String Length

2

ID  Group ID

0x1234

1

場景ID  Scene ID

0X56

1

場景名稱字符串長度  Scene Name String Length

x

x

場景名稱   Scene Name

場景1”

 

RPCS_GET_SCENE_RSP

照明的網關創建了一個場景時,該命令將被發送到客戶端,客戶端可以使用這個消息將一個場景字符串連接到一個場景ID和一個組ID。此消息將被發送到已在照明網關上創建的每個場景。

RPCS_GET_SCENE_RSP消息格式

字節

描述

1

命令ID  Command ID

0x0d

1

長度  Length

0x3+場景名稱字符串長度   0x3 + Scene Name String Length

2

ID  Group ID

0x1234

1

場景ID  Scene ID

0X56

1

場景名稱字符串長度 Scene Name String Length

x

x

場景名稱  Scene Name

場景1”

 

 

 

5.4.  Client Examples

 


 [c1]

 [c2]之前的翻譯有錯誤。這里的light是指的的燈泡,而不是板子上的指示燈。

 [c3]這里應該是原文中拼寫錯誤,though應該原為throughcycle through,重復循環或遍歷的意思。

 [c4]ZLL Remote,直接翻譯為ZLL遙控器即可。這個CC2531的板子此時就是一個遙控器。

 [c5]之前的翻譯有點問題,這個主密鑰是不公開的。

 [c6]實際上相當於是一種臨時的解決方案。

 [c7]問題:為什么是使用SmartRF05+CC2530EM,而不是直接使用CC2531 dongle 且代碼是使用ZStack-Lighting-1.0.1 Remote FW 而不是使用網關的代碼?

 [c8]TouchlinkZLL定義的一組特定操作,不必翻譯為韓語。

 [c9]從用戶體驗的角度,這個過程會顯得麻煩。





附件列表

 


免責聲明!

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



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