zigbee ---- profile 和 cluster

zigbee规范中,引入了profile, cluster的概念。具体说来,假设规范一个profile(能够理解成一套规定),这个profile用来规范智能家居领域的相关产品都要知足那些要求,那么home automation public profile就规定了智能家居都要作什么。固然了,你能够本身规范一个本身的profile,称为private 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了。
函数

 

 

 

总结说来,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会让事情变得简单
ui