3 Zigbee应用程序框架开发指南 - 应用程序框架目录结构
4 Zigbee应用程序框架开发指南 - 生成应用程序配置文件
5 Zigbee应用程序框架开发指南 - 应用程序框架API
6 Zigbee应用程序框架开发指南 - 应用程序框架Callback接口
11 Zigbee应用程序框架开发指南 - 命令行接口(CLI)
15 Zigbee应用程序框架开发指南 - 应用程序框架插件
16 Zigbee应用程序框架开发指南 - 扩展ZigBee Cluster Library (ZCL)
17 Zigbee应用程序框架开发指南 - 使用Ember AppBuilder设计应用程序
16 扩展ZigBee Cluster Library (ZCL)
16.1 介绍
开发者可以使用以下任何一种技术来扩展ZigBee应用层:
- Private Profile: 配置文件ID是在ZigBee APS框架中的ZigBee消息中传递的一个双字节值。为了让两个ZigBee设备在应用层进行交互,它们必须具有相同的配置文件ID。如果没有,它们将删除彼此的消息。私有配置文件用于完全保护给定系统中的所有交互。如果您计划在您的网络和链接层中使用ZigBee,但是在其他方面计划使用一个封闭的系统,那么您可能希望创建一个私有的ZigBee配置文件。如果您使用私有配置文件,您的设备将不能与使用其他配置文件的任何其他ZigBee设备进行互操作。
- 特定于制造商的Cluster:任何具有范围为0xfc00 - 0xffff的Cluster id的Cluster都被认为是特定于制造商的,并且必须具有相关联的双字节制造商代码。特定于制造商的集群中的所有命令和属性也被认为是特定于制造商的。
示例:在应用程序框架包含的sample-extensions.xml文件中,我们定义了一个特定于制造商的示例Cluster, Cluster ID为0xfc00,制造商代码为0x1002 (Silicon Labs的制造商代码)。 - 特定于制造商的命令:您可以通过向一个标准的ZigBee Cluster添加特定于制造商的命令来扩展该Cluster。标准ZigBee Cluster中特定于制造商的命令可以使用整个命令id范围:0x00 - 0xff。必须为特定于制造商的命令提供一个双字节制造代码,以便能够将该命令与该Cluster中的标准ZigBee命令区分开来。
示例:在应用程序框架包含的sample-extensions.xml文件中,我们定义了三个命令来扩展On/Off Cluster,分别称为OffWithTransition、OnWithTransition和ToggleWithTransition。这些命令与该Cluster中的标准Off、On和Toggle命令共享相同的命令id。然而,它们还包括制造商代码0x1002,这表明它们是Silicon Labs特定于制造商的命令。 - 特定于制造商的属性:可以通过向应用程序添加特定于制造商的属性来扩展标准的ZigBee Cluster。标准ZigBee Cluster中特定于制造商的属性可以使用从0x0000到0xffff的整个属性ID地址空间。每个特定于制造商的属性必须包含一个双字节的制造商代码,以便与非特定于制造商的属性区分开来。
示例:在应用程序框架包含的sample-extensions.xml文件中,我们定义了一个属性转换时间,它与on/off Cluster0x0000中的on/off状态共享相同的属性ID。但是,产品化时间属性还包含制造商代码0x1002,这表明它是Silicon Labs的特定于制造商的属性。
注意:Silicon Labs的制造商代码0x1002是由ZigBee
organization定义的,并包含在制造商代码数据库中(ZigBee文档#053874)。制造商代码用于实现特定于制造商的Cluster、属性和命令。ZigBee为每个请求组织提供唯一的制造商代码。要获得您的组织的制造商代码,请通过http://zigbee.org联系ZigBee。
16.2 局限性考虑
当使用制造商特定的集群、属性和命令扩展应用程序框架时,需要考虑两个明显的限制。
所有Cluster id(包括特定于制造商的Cluster id)在单个设备中必须是唯一的。Zigbee应用程序框架目前不支持在单个设备中重叠特定于制造商的Cluster id。换句话说,您不能在同一设备上用制造商代码0xFEED实现Cluster 0xFC00,用制造商代码0xBEEF实现Cluster 0xFC00。Ember应用程序框架假设所有Cluster id都是唯一的,不管与它们相关联的制造商代码是什么。
特定于制造商的Cluster中的所有属性和命令id必须是惟一的,并且假定它们具有与所在Cluster相同的制造商代码。ZigBee协议不支持在特定于制造商的Cluster中重叠特定于制造商的属性或命令id(具有不同的制造商代码)。原因很简单,在ZigBee应用程序报头中只传递了一个制造商代码。如果所寻址的Cluster位于特定于制造商的范围0xFC00 - 0xFFFF中,则假定制造商代码适用于该Cluster。这使得不可能将属性0x0000与制造商代码0xFEED放在Cluster 0x0000与制造商代码0xBEEF之间。Ember应用程序框架甚至不需要为特定于制造商的Cluster中的属性存储单独的制造商代码,因为Cluster的制造商代码被假定应用于Cluster中的所有属性。
16.3 在应用程序框架和Ember AppBuilder中定义ZCL扩展
整个ZigBee Cluster Library在工具/appbuilder目录中以XML格式定义。除了预期的XML文件(如general.xml或ha.xml,它们描述了Ember应用程序框架使用的与标准ZCL相关联的Cluster、命令和属性)之外,还有一个示例扩展文件,名为sample-extensions. XML,这并不奇怪。这个XML文件包含几个样例ZigBee扩展,包括一个自定义Cluster、添加到on/off Cluster的自定义属性和添加到on/off Cluster的自定义命令。
为了扩展Zigbee cluster library,您必须为您的扩展创建一个类似的扩展文件,并按照AppBuilder在线帮助中“Creating Custom Clusters”一节中包含的说明将它们添加到AppBuilder中。
可以使用Zigbee应用程序框架和AppBuilder的XML模式定义文件(XSD)验证定制的XML配置文件。appbuilder。您的特定simple Studio版本的xsd可以通过转到File | Preferences | App Builder | ZCL Application并单击位于可用堆栈配置列表下的导出xsd文件链接来生成。关于扩展Zigbee应用程序框架的更多文档包含在sample-extensions.xml文件中。
注意:在XML文件中指定的任何多字节数字常量值都应该将完整的数字指定为十六进制,例如“0x000000000000”(对于int48u),而不是简单的“0x00”或“0”。这将确保在生成过程中将适当的默认值添加到_endpoint_config.h文件中定义的GENERATED_DEFAULTS。