[Zigbee 科普系列】 - 4 数据模型
1.Zigbee 3.0 Profile规范
Zigbee 3.0
针对不同的应用场景推出了不同的Zigbee应用协议规范。
这意味着使用这些协议的各种智能设备之间可以无缝地进行互操作,从而带来创新的物联网解决方案。
2.Zigbee 3.0数据模型
为了方便管理,Zigbee联盟引入了一套概念:Profile,Cluster,Attribute,Command。它们的关系如下:
如果学过面向对象编程的思想,可以理解为:
- 应用层协议(Profile)是面向对象编程中的类;
- 簇(Cluster)是面向对象编程中的对象;
- 命令(Command)是每个对象中的方法;
- 状态/属性(Attribute)是每个对象的属性;
Zigbee在协议层面严格定义的这套标准数据规则,称为Zigbee Cluster Library(ZCL)
。
ZCL框架是Zigbee为了实现数据传输标准化而定义的一套基于Cluster功能的数据库,在ZCL工作机制的基础上,调用ZCL的函数会使应用该程序设计变得简单。
《Zigbee Cluster Library Specification.pdf》
文档定义了常用的Cluster及其关联的属性、命令集。
3.ZCL全局命令
ZCL定义了一系列全局命令,对应的ZCL帧格式frame control
域内的frame type
=00;
4.ZCL工作模式
ZCL采用客户端/服务器模式,如下图。一般将储存状态、属性、参数的cluster归为一类,这类cluster成为服务器(Server)模式的cluster;将储存动作(如打开、关闭等)、影响状态的操作(如可识别、可被发现等)的cluster归为一类,这类cluster成为客户端(Client)模式的cluster。如果有需要,一个cluster也可以同时被设置为服务器模式和客户端模式。
5.ZCL标识
ZCL定义了众多应用层协议、cluster、属性、命令和设备等,为了区分分别为他们设定了一个标识。
5.1.profile ID范围
应用层协议标识符 profile ID | 说明 |
---|---|
0x0000-0x7fff | Zigbee规范定义的标准应用层协议 |
0xc00-0xffff | 厂家自定义的应用层协议 |
其余ID | 保留 |
5.2.cluster ID范围
cluster标识符 cluster ID | 说明 |
---|---|
0x0000-0x7fff | Zigbee规范定义的标准cluster |
0xfc00-0xffff | 厂家自定义的cluster |
其余ID | 保留 |
5.3.attribute ID范围
属性标识符 attribute ID | 说明 |
---|---|
0x0000-0x4fff | Zigbee规范定义的标准属性 |
0xf000-0xfffe | 厂家自定义的应用层协议 |
其余ID | 保留 |
5.5.command ID范围
命令标识符 command ID | 说明 |
---|---|
0x00-0x7f | 由Zigbee规范定义的标准命令和厂家自定义的命令,根据ZCL帧头的frame control字段来确定是哪类命令 |
其余ID | 保留 |
5.6.device ID范围
设备标识符 device ID | 说明 |
---|---|
0x0000-0xbfff | Zigbee规范定义的标准设备 |
其余ID | 保留 |
6.ZCL存储
ZCL要求除非是特别说明,否则表示配置数据的cluster的属性和相关的属性配置应该掉电保存。
TuyaOS SDK定义的属性包含以下几种配置选项,开发者可以方便地选择属性的配置方式。
Code: Select all
/*
* attribute mask
*/
#define ATTR_MASK_READABLE (0x00) // readable
#define ATTR_MASK_WRITABLE (0x01) // writable
#define ATTR_MASK_TOKENIZE (0x02) // saved to a native sdk token
#define ATTR_NOT_USE (0x04) //
#define ATTR_MASK_MANUFACTURER_SPECIFIC (0x80) // manufacturer specific
#define ATTR_MASK_RESERVED (0x10) // reserved
#define ATTR_MASK_SINGLETON (0x20) // attribute is singleton
#define ATTR_MASK_CLIENT (0x40) // client attribute
#define ATTR_MASK_TOKEN_FAST (0x80) // saved to a tuya token