1. 程式人生 > >ZigBee中Profile(規範),Cluster(簇)

ZigBee中Profile(規範),Cluster(簇)

在zigbee規範中,引入了profile, cluster的概念。profile和cluster的翻譯沒有統一的標準,這裡暫時定為規範和簇。個人認為,ZigBee引入profile,cluster的概念,是為了統一應用,使不同廠家、不同設計者的產品可以相容使用。

Profile說明

ZigBee網路進行資料傳輸都是建立在應用規範的基礎上。規範profile可以理解成一套規定,每個應用應該是對應一個profile ID,每個profile ID可以應用於某項具體的應用,例如自動家居、樓宇自動化等。。

ZigBee聯盟已經規定了profile的使用,整個應用規範可以分為公共規範(Public profile)和製造商規範(Manufacturer Specific profile)。公共規範的ID號為:0x0000-0x7FFF,製造商的為:0xBF00-0xFFFF。

其中公共規範已經規定了常見的各種應用,以下是摘錄的部分公共規範。

Profile ID Profile Name 應用名稱(翻譯)
0101 Industial Plant Monitoring(IPM) 工業用植物檢測
0104 Home Automation(HA) 家居自動化
0105 Commercial Building Automation(CBA) 商業樓宇自動化
0107 Telecom Applications(TA) 電信應用
0108 Personal Home&hospital Care(PHHC) 個人家庭醫院護理
0109 Advanced Metering Initiative(AMI)
先進的計量倡議??

比如home automation public profile就規定了智慧家居都要做什麼,當然使用者也可以規定一個自己的profile。

     協議棧本身也有一個profile,就是Zigbee Device Profile,也就是ZDP了,這裡規範了一個zigbee節點都要具備那些功能,比如路由能力啊,網路發現能力啊,各個協議層都要做什麼啊。——摘抄

Cluster說明

ZigBee在一個profile的規範下,又提出了cluster的概念。

綜合profile和cluster,可以這樣理解,一個具體的應用(例如智慧家居系統)有大量細節上的小規範(例如電燈的控制:開燈、關燈等),這個規範即成為簇(cluster)。

舉例說明,home automation 的public profile已經規定了調光器應該有哪些cluster,如:Color Control Cluster,Ballast Configuration Cluster 等。不同的cluster有不同的命令:

  1. /*****************************************/  
  2. /* Color Control Cluster Commands   */  
  3. /*****************************************/  
  4. #define COMMAND_LIGHTING_MOVE_TO_HUE                    0x00  
  5. #define COMMAND_LIGHTING_MOVE_HUE                           0x01  
  6. #define COMMAND_LIGHTING_STEP_HUE                           0x02  
  7. #define COMMAND_LIGHTING_MOVE_TO_SATURATION                     0x03  
  8. #define COMMAND_LIGHTING_MOVE_SATURATION                    0x04  
  9. #define COMMAND_LIGHTING_STEP_SATURATION                        0x05  
  10. #define COMMAND_LIGHTING_MOVE_TO_HUE_AND_SATURATION     <span style="white-space:pre">      </span>0x06  
  11. #define COMMAND_LIGHTING_MOVE_TO_COLOR                          0x07  
  12. #define COMMAND_LIGHTING_MOVE_COLOR                             0x08  
  13. #define COMMAND_LIGHTING_STEP_COLOR                             0x09  
  14. #define COMMAND_LIGHTING_MOVE_TO_COLOR_TEMPERATURE          <span style="white-space:pre">  </span>0x0a  

除了命令之外,每一個cluster還會定義一些屬性,比如color control cluster有一下屬性:

  1. #define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_HUE           0x0000  
  2. #define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_SATURATION    0x0001  
  3. #define ATTRID_LIGHTING_COLOR_CONTROL_REMAINING_TIME            0x0002  
  4. #define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_X                 0x0003  
  5. #define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_Y             0x0004  
  6. #define ATTRID_LIGHTING_COLOR_CONTROL_DRIFT_COMPENSATION        0x0005  
  7. #define ATTRID_LIGHTING_COLOR_CONTROL_COMPENSATION_TEXT         0x0006  
  8. #define ATTRID_LIGHTING_COLOR_CONTROL_COLOR_TEMPERATURE     0x0007  
  9. #define ATTRID_LIGHTING_COLOR_CONTROL_COLOR_MODE            0x0008  

而Ballast Configuration Cluster 則有一下屬性:
  1. // Ballast Information attribute set  
  2. #define ATTRID_LIGHTING_BALLAST_CONFIG_PHYSICAL_MIN_LEVEL   0x0000  
  3. #define ATTRID_LIGHTING_BALLAST_CONFIG_PHYSICAL_MAX_LEVEL   0x0001  
  4. #define ATTRID_LIGHTING_BALLAST_BALLAST_STATUS              0x0002  

這些屬性反映了這個cluster下裝置的狀態,可以通過讀寫這些屬性來改變其值。
總結說來,Profile規範了應該包括哪些cluster,一個cluster會有一個ID,在一個cluster下又會有很多command,也會有很多attibute,在一個cluster下面command 和attribute的ID要唯一,不同的cluster下可以重複,不同的profile下clusterID也可以重複。

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會讓事情變得簡單。

再延伸一點兒,zigbee聯盟在協議棧之外又增加了一部分操作cluster的函式,那就是zigbee cluster library,(ZCL),這裡邊已經以原始碼的形式提供了操作聯盟規範的那些public profile下的函式,主要功能包括一些command的transmit,response,indicate以及confirm等,還有讀寫attribute的一些操作函式。所以在理解了ZCL的工作機制基礎上,通過呼叫ZCL的函式實際上會讓應用程式設計變得簡單