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会让事情变得简单。

zigbee中profile,cluster的认识【转】

时间: 2024-08-01 00:57:52

zigbee中profile,cluster的认识【转】的相关文章

Linux中profile(转载)

原文地址:http://www.cnblogs.com/mmfzmd517528/archive/2012/07/05/2577988.html 标黄是个人批注. 环境变量就是一个系统变量,系统配置一个key-value,然后其他程序可以读取到这个key-value,作为配置. Linux /etc/profile文件的改变会涉及到系统的环境,也就是有关Linux环境变量的东西,学习Linux要了解Linux profile文件的相关原理,这里对则以文件进行具体分析.这里修改会对所有用户起作用.

Linux中profile、bashrc、bash_profile之间的区别和联系

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. 英文描述为: # /etc/profile # System wide environment and startup programs, for login setup# Functions and aliases go in /etc/bashrc # It's NOT a good idea to change this f

ZigBee中协调器如何向子节点发消息?

注意:以下所有内容均以TI公司的CC2530和Z-Stack为硬软件平台为实验背景讲述. 在一般的ZigBee教程中,子节点如何向协调器发送消息已经被描述的非常清楚了:即子节点直接使用API向地址为0x0000的协调器发送消息即可.用到的函数如下: afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,uint16 cID, uint16 len, uint8 *buf, uint8 *transID,ui

maven2中profile的使用

使用maven管理项目有一个好处是就是可以针对不同的环境使用不同的编译打包设置,方便了多环境下的打包部署,一般我们开发项目都会有至少开发环境和正式环境两个,针对这两个环境的配置信息也会有所不同,比如数据库的配置等.我们可以使用maven的profile定义来进行区分,比如我们在项目的pom文件中定义如下片段: <project> <modelVersion>4.0.0</modelVersion> <groupId>cc.mzone</groupId&

Linux_linux中profile、bashrc、bash_profile之间的区别和联系(转)

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置. 英文描述为: # /etc/profile # System wide environment and startup programs, for login setup# Functions and aliases Go in /etc/bashrc # It's NOT a good idea to change this

gradle项目中profile的实现

gradle中并没有直接类似maven中的profile支持,只能变通的用其它方法来处理,在打包不同环境的应用时,通常会遇到二类问题: 一.不同的环境依赖的jar包不同 拿web开发来说,生产环境一般会采用weblogic,jboss这类重量级的容器,通常这类web server已经内置了很多第三方的通用jar包,而开发环境,一般采用嵌入式jetty这类轻量级的容器,内置的jar包会少一些,在maven中可以用<scope>provided</scope>来处理,到了gradle中

ZigBee中内存管理(一个内存空间引发的血案)

这个Zigbee的项目好久没有写了,现在对这个项目有点陌生,好多东西都搞不懂了.今天写一个简单的无线发送小程序时,一直出问题,程序调用zstack中的AF_DataRequest函数,如下 AF_DataRequest( &Coor_Addr, &App_epDesc,                        APP_CLUSTERID_ADC,                        sizeof(ADC_Value),                        (uin

【转载】Linux中profile、bashrc、bash_profile之间的区别和联系

如果你想对所有的使用bash的用户修改某个配置并在以后打开的bash都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个bash即可生效.~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件. 此文件类似于/etc/profile,也是需要需要重启才会生效,/etc/profile对所有用户生效,~/.bash_profile只对当前用户生效. ~/.ba

mysql中profile的使用

1.profile在mysql5.0.37及其以上版本中可用 2.查看profile是否可用SELECT @@profiling;来查看是否已经启用profile,如果profilng值为0,可以通过SET profiling = 1;启用mysql>select count(*) from roi_summary; 然后show profiles查看如下: +----------------+------------+----------------------------------+| Q