NXP ZigBee如何增加自定义Cluster
(shaozhong.liang)
基本概念
在ZigBee规范中有Profile, Cluster,Attribute,Endpoint等概念。Profile用来规范ZigBee相关产品需要要满足那些要求。ZigBee联盟则已经规范了一些Profile,如Home Automation(0x0104),Smart Energy(0x0109),Building Automation(0x0105)等。其中Home Automation Profile就规定了智能家居都要做什么,HA Profile ID是0x0104。
在一个Profile的规范下,一个Cluster实际上是一组属性和命令的集合,是设备之间的一个通信接口。Cluster并不是只存在单独某一个设备之上,而是联系两个设备的纽带。因此,对于一个设备,有“Input Cluster”和“Output Cluster”之分。也可以描述为一个Cluster包括Server 端和Client端。一个Cluster被定义好之后,它包含的命令是固定的。例如用于“控制器”和“开关”之间的一个Cluster,包含一条命令“Toggle”,含义是“改变开关状态”。则该Cluster对于控制器而言是Output Cluster(发出“Toggle”命令),对于开关而言是Input Cluster(接收“Toggle”命令)。智能家居HA下的一个调光器,操作这个调光器就需要一些命令,比如变亮,变暗,关灯,开灯这些,另外,这个调光器也会有一些Attribute 属性,比如当前的亮度,由亮变暗的时长。HA Profile已经规定了调光器应该有哪些Cluster,如Color Cont
澳桔
rol Cluster,Ballast Configuration Cluster 等。每个Cluster 被分配一个唯一16位Cluster ID,从0xFC00开始是厂家自定义Cluster ID。
一个Cluster包含多个Attribute。Attribute定义了设备的物理特性或当前状态。例如开关的状态或温度计值等皆可称为属性。每个属性具有唯一的Attribute ID值。例如ZHA Profile的Basic Cluster(0x0000)有下面Attribute属性:
总结说来,Profile规范了应该包括哪些Cluster;一个Cluster会有一个Cluster ID;在一个Cluster下有多个Command和多个Attribute;在一个Cluster下面Command 和Attribute的ID要唯一。Command 和Attribute在不同的Cluster下可以重复,不同的Profile下Cluster也可以重复。
下面是ZHA Profile 下安防IAS设备支持的Cluster列表:
高铁带白酒增加自定义Manufacture Specific Cluster
NXP ZigBee协议栈本身包含了大量符合ZigBee联盟制定的协议规范的Cluster 定义,能满足大部分应用,这些Cluster可以与其它符合ZigBee标准协议的厂商直接对接使用。但是针对不同公司,需要有自己的特色即产品差异化,就需要针对自己产品增加独特的Manufacture Specific Cluster。NXP ZigBee协议栈提供很好的Cluster扩展性,可以满足客户的定制化要求。以下介绍如何增加自定义Cluster 的步骤。
例如某一厂家需要开发一款通过ZigBee控制厨房的燃气炉。由于在ZHA Profile 中没有定义燃气炉Cooker的Cluster,客户开发人员可以需要根据Cooker的功能特点和需求自定义Manufacture Specific Cluster,Cluster ID使用0xFC00。下面是Cooker Cluster需要定义的Attribute属性。
在$sdk\JN-SW-4168\Components\ZCL\Profiles\HA\Lighting\Source\CookerControl.c 文件中定义Cooker Cluster的Attribute属性数组。
七步诗曹植Data Types E_ZCL_NULL
E_ZCL_BOOL
E_ZCL_UINT8 E_ZCL_UINT16 E_ZCL_UINT32 E_ZCL_UINT64 E_ZCL_INT8
E_ZCL_INT16 E_ZCL_INT32 E_ZCL_INT64 E_ZCL_ENUM8 Attribute Flags
E_ZCL_AF_RD // Readable
E_ZCL_AF_WR // Writable
在思想上的自我评价
E_ZCL_AF_RP // Report attribute
E_ZCL_AF_MS // Manufacturer specific
E_ZCL_AF_CA // Client attribute
E_ZCL_AF_SE // Scenes extension
E_ZCL_AF_MR // Mirrored attribute
/
红掌可以水养吗
* Attribute Control Bits */
E_ZCL_ACF_RS // Attribute Request Status */
E_ZCL_ACF_RP // Is attribute reportable */
E_ZCL_ACF_MR // Is attribute value is Mirrored attribute */
在$sdk\JN-SW-4168\Components\ZCL\Profiles\HA\Lighting\Include和Source目录中分别修改CookerControl.h、CookerControl.c、dimmable_light.h、dimmable_light.c 四个文件,加入Cooker Cluster的定义。
万年青叶
大理天气15天Add Cooker Cluster definition in the cluster header file:
$sdk\JN-SW-4168\Components\ZCL\Profiles\HA\Lighting\Include\dimmable_light.h
Add the cluster instance into the cluster instance structure inside device.
做水果沙拉Add the shared attribute structure into the main device structure
Add the CookerControlCreateCookerControl function into the DimmableLight register function:
$sdk\JN-SW-4168\Components\ZCL\Profiles\HA\Lighting\Source\dimmable_light.c Include the cluster header file.
Call the ‘Create Cluster’ f unction which will initialize the cluster and any attributes to their default value
Add the cluster macros that are associated with the Cooker Control Cluster.
•Right click on “End Point ‘LIGHT’ (1)” in DimmableLight.
•Right click on the HOME_AUTOMATION profile.
•Select New Child -> Input Cluster.
•Select the undefined cluster.
•Select the Properties tab.
•In the Cluster tab, lect the CookerControl cluster. Set Cluster ID as 0xFC00 •Leave Discoverable as “true”.
•Select the “apduZCL” for the receive APDU.