1.在zigbee网络中,两个设备之间进行通信的关键是统一一个Profile(域,剖面)
2.Profile的一个例子是智能家居。在这个域中的一系列设备(灯,开关,电视,窗帘,监视 器,门控等)可以互相交换控制消息来构造一个无线智能家庭。
3.Profile在zigbee设备间定义了普通行为:无线网络在网络中依靠自制设备的能力同网络连接和发现其他设备上的服务。
4. Profile支持设备发现和服务发现(注释);
5.Profile分为私有域和公有域,但每个Profile的标识符都是唯一的。一旦获得一个Profile标
识符,我们就可以定义设备描述和cluster标识符
6.Profile标识符是在zigbee协议中的主要枚举量。每一个唯一的Profile标识符定义了设备描述和cluster标识符的一个联合的枚举量。
7。在绑定中会用到对Profile的应用
8.每一个zigbee设备都必须至少有一个zigbee Profile,一个zigbee设备可以支持几个Profile。
注释:设备发现:zigbee设备发现其他设备的过程,有两种形式的设备发现请求:IEEE地址请求和网络地址请求。IEEE地址请求时单播到一个特殊的设备且假定网络地址已经知道。网络地址请求时广播且携带一个已知的IEEE地址作为负载
服务发现:一个已给设备被其他设备发现的过程。服务发现通过向一个已给设备的每一个端点发送询问或通过使用广播,单播来实现。它是基于Profile,输入输出串为基础构成的。
http://hi.baidu.com/bwandmff/item/e0e64a5d16b2df08e7c4a5c3
zigbee中profile,cluster的认识-转载毛毛老师
在zigbee规范中,引入了profile, cluster的概念。具体说来,假设规范一个profile(可以理解成一套规定),这个profile用来规范智能家居领域的相关产品都要满足那些要求,那么homeautomation public profile就规定了智能家居都要做什么。当然了,你可以自己规范一个自己的profile,称为provite profile,而zigbee联盟则已经规范了一些profile,比如home automation, smart energy,buildingautomation等,一个publicprofile也规定了profile的ID,比如智能家居就规定是0x104。协议栈本身也有一个profile,就是Zigbee Device Profile,也就是ZDP了,这里规范了一个zigbee节点都要具备那些功能,比如路由能力啊,网络发现能力啊,各个协议层都要做什么啊,如此。
#define COMMAND_LIGHTING_MOVE_TO_HUE
#define COMMAND_LIGHTING_MOVE_HUE
#define COMMAND_LIGHTING_STEP_HUE
#define COMMAND_LIGHTING_MOVE_TO_SATURATION
#define COMMAND_LIGHTING_MOVE_SATURATION
#define COMMAND_LIGHTING_STEP_SATURATION
#defineCOMMAND_LIGHTING_MOVE_TO_HUE_AND_SATURATION
#define COMMAND_LIGHTING_MOVE_TO_COLOR
#define COMMAND_LIGHTING_MOVE_COLOR
#define COMMAND_LIGHTING_STEP_COLOR
#define COMMAND_LIGHTING_MOVE_TO_COLOR_TEMPERATURE
Ballast Configuration Cluster 下面则没有定义命令。
除了命令之外,每一个cluster还会定义一些属性,比如colorcontrol cluster下有:
#define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_HUE
#defineATTRID_LIGHTING_COLOR_CONTROL_CURRENT_SATURATION
#defineATTRID_LIGHTING_COLOR_CONTROL_REMAINING_TIME
#define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_X
#define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_Y
#defineATTRID_LIGHTING_COLOR_CONTROL_DRIFT_COMPENSATION
#defineATTRID_LIGHTING_COLOR_CONTROL_COMPENSATION_TEXT
#defineATTRID_LIGHTING_COLOR_CONTROL_COLOR_TEMPERATURE
#define ATTRID_LIGHTING_COLOR_CONTROL_COLOR_MODE
...........................
这样的属性。
而Ballast Configuration Cluster 则有:
#defineATTRID_LIGHTING_BALLAST_CONFIG_PHYSICAL_MIN_LEVEL
#defineATTRID_LIGHTING_BALLAST_CONFIG_PHYSICAL_MAX_LEVEL
#define ATTRID_LIGHTING_BALLAST_BALLAST_STATUS
等属性。
这些属性反映了这个cluster下设备的状态,可以通过读写这些属性来改变其值。
总结说来,Profile规范了应该包括哪些cluster,一个cluster会有一个ID,在一个cluster下又会有很多command,也会有很多attibute,在一个cluster下面command 和attribute的ID要唯一,不同的cluster下可以重复,不同的profile下clusterID也可以重复。
再延伸一点儿,zigbee联盟在协议栈之外又增加了一部分操作cluster的函数,那就是zigbee clusterlibrary,(ZCL),这里边已经以源代码的形式提供了操作联盟规范的那些publicprofile下的函数,主要功能包括一些command的transmit,response,indicate以及confirm等,还有读写attribute的一些操作函数。所以在理解了ZCL的工作机制基础上,通过调用ZCL的函数实际上会让应用程序设计变得简单(但是学习ZCL倒是很麻烦)。
假设我们要控制一个LED,有一个远程节点(发命令控制led ),一个本地节点(接受命令并真正的让led 亮起来),那么如果引入ZCL的概念,你可以设置这个操作led 的事情是一个cluster,其下包含三个命令,一个open,一个close,一个read attribute,灯还有一个attribute,那就是当前的status,远程节点可以用ZCL的函数发open和close命令,也可以随时发一个readattibute命令读取本地节点led 的状态。这么做的好处是不需要再自己设计一个规定(比如:一个数据包的第几个字节表示什么。。。),而是直接调用ZCL即可实现,这对于command和attribute数量很少的应用不见得有多大好处,但是当command和attribute数量很多的时候,引入ZCL会让事情变得简单