zigbee中profile,cluster的認識【轉】

       在zigbee規範中,引入了profile, cluster的概念。具體說來,假設規範一個profile(可以理解成一套規定),這個profile用來規範智能家居領域的相關產品都要滿足那些要求,那麼home automation public profile就規定了智能家居都要做什麼。當然了,你可以自己規範一個自己的profile,稱爲provite profile,而zigbee聯盟則已經規範了一些profile,比如home automation, smart energy,building automation等,一個public profile也規定了profile 的ID,比如智能家居就規定是0x104。協議棧本身也有一個profile,就是Zigbee Device Profile,也就是ZDP了,這裏規範了一個zigbee節點都要具備那些功能,比如路由能力啊,網絡發現能力啊,各個協議層都要做什麼啊,如此。
   在一個profile的規範下,又提出了cluster的概念,這個cluster要理解成一個大方向下的一個特定對象,比如智能家居下的一個調光器,操作這個調光器就需要一些命令,比如變亮,變暗,關燈,開燈這些,另外,這個調光器也會有一個attribute,也就屬性,比如當前的亮度啊,由亮變暗的過程經歷多長時間啊(一下子變亮視覺感覺沒有漸變效果好喔)。對於home automation 的public profile已經規定了調光器應該有哪些cluster,如:Color Control Cluster,Ballast Configuration Cluster 等。然後,profile也規範了color control cluster 的ID,這個就是clusterID了,在這個cluster下面,要有以下命令:






#define COMMAND_LIGHTING_MOVE_TO_HUE                                     0x00
#define COMMAND_LIGHTING_MOVE_HUE                                        0x01
#define COMMAND_LIGHTING_STEP_HUE                                        0x02
#define COMMAND_LIGHTING_MOVE_TO_SATURATION                              0x03
#define COMMAND_LIGHTING_MOVE_SATURATION                                 0x04
#define COMMAND_LIGHTING_STEP_SATURATION                                 0x05
#define COMMAND_LIGHTING_MOVE_TO_HUE_AND_SATURATION                      0x06
#define COMMAND_LIGHTING_MOVE_TO_COLOR                                   0x07
#define COMMAND_LIGHTING_MOVE_COLOR                                      0x08
#define COMMAND_LIGHTING_STEP_COLOR                                      0x09
#define COMMAND_LIGHTING_MOVE_TO_COLOR_TEMPERATURE                       0x0a


Ballast Configuration Cluster 下面則沒有定義命令。


除了命令之外,每一個cluster還會定義一些屬性,比如color control cluster下有:
#define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_HUE                        0x0000
#define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_SATURATION                 0x0001
#define ATTRID_LIGHTING_COLOR_CONTROL_REMAINING_TIME                     0x0002
#define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_X                          0x0003
#define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_Y                          0x0004
#define ATTRID_LIGHTING_COLOR_CONTROL_DRIFT_COMPENSATION                 0x0005
#define ATTRID_LIGHTING_COLOR_CONTROL_COMPENSATION_TEXT                  0x0006
#define ATTRID_LIGHTING_COLOR_CONTROL_COLOR_TEMPERATURE                  0x0007
#define ATTRID_LIGHTING_COLOR_CONTROL_COLOR_MODE                         0x0008
...........................
這樣的屬性。
而Ballast Configuration Cluster 則有:
  // Ballast Information attribute set
#define ATTRID_LIGHTING_BALLAST_CONFIG_PHYSICAL_MIN_LEVEL                0x0000
#define ATTRID_LIGHTING_BALLAST_CONFIG_PHYSICAL_MAX_LEVEL                0x0001
#define ATTRID_LIGHTING_BALLAST_BALLAST_STATUS                           0x0002
等屬性。
這些屬性反映了這個cluster下設備的狀態,可以通過讀寫這些屬性來改變其值。


總結說來,Profile規範了應該包括哪些cluster,一個cluster會有一個ID,在一個cluster下又會有很多command,也會有很多attibute,在一個cluster下面command 和attribute的ID要唯一,不同的cluster下可以重複,不同的profile下clusterID也可以重複。


再延伸一點兒,zigbee聯盟在協議棧之外又增加了一部分操作cluster的函數,那就是zigbee cluster library,(ZCL),這裏邊已經以源代碼的形式提供了操作聯盟規範的那些public profile下的函數,主要功能包括一些command的transmit,response,indicate以及confirm等,還有讀寫attribute的一些操作函數。所以在理解了ZCL的工作機制基礎上,通過調用ZCL的函數實際上會讓應用程序設計變得簡單(但是學習ZCL倒是很麻煩)。
假設我們要控制一個LED,有一個遠程節點(發命令控制led ),一個本地節點(接受命令並真正的讓led 亮起來),那麼如果引入ZCL的概念,你可以設置這個操作led 的事情是一個cluster,其下包含三個命令,一個open,一個close,一個read attribute,燈還有一個attribute,那就是當前的status,遠程節點可以用ZCL的函數發open和close命令,也可以隨時發一個read attibute命令讀取本地節點led 的狀態。這麼做的好處是不需要再自己設計一個規定(比如:一個數據包的第幾個字節表示什麼。。。),而是直接調用ZCL即可實現,這對於command和attribute數量很少的應用不見得有多大好處,但是當command和attribute數量很多的時候,引入ZCL會讓事情變得簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章