[Zigbee 科普系列】 - 3 数据模型

Zigbee 子设备开发


Post Reply
zeso
Posts: 132

1.Zigbee 3.0 Profile规范

Zigbee 3.0针对不同的应用场景推出了不同的Zigbee应用协议规范。

flowchart LR A(Zigbee应用层协议) --> B(Zigbee Home Automation-Zigbee HA) A --> C(Zigbee Light Link-Zigbee LL) A --> D(Zigbee Building Automation-Zigbee BA) A --> E(Zigbee Retail Services-Zigbee RS) A --> F(Zigbee Health Care-Zigbee HC) A --> G(Zigbee Telecommunication Service-Zigbee TS)

这意味着使用这些协议的各种智能设备之间可以无缝地进行互操作,从而带来创新的物联网解决方案。

2.Zigbee 3.0数据模型

为了方便管理,Zigbee联盟引入了一套概念:Profile,Cluster,Attribute,Command。它们的关系如下:

Image

如果学过面向对象编程的思想,可以理解为:

  • 应用层协议(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;

Image

4.ZCL工作模式

ZCL采用客户端/服务器模式,如下图。一般将储存状态、属性、参数的cluster归为一类,这类cluster成为服务器(Server)模式的cluster;将储存动作(如打开、关闭等)、影响状态的操作(如可识别、可被发现等)的cluster归为一类,这类cluster成为客户端(Client)模式的cluster。如果有需要,一个cluster也可以同时被设置为服务器模式和客户端模式。

Image

5.ZCL标识

ZCL定义了众多应用层协议、cluster、属性、命令和设备等,为了区分分别为他们设定了一个标识。

5.1.profile ID范围

应用层协议标识符 profile ID说明
0x0000-0x7fffZigbee规范定义的标准应用层协议
0xc00-0xffff厂家自定义的应用层协议
其余ID保留

5.2.cluster ID范围

cluster标识符 cluster ID说明
0x0000-0x7fffZigbee规范定义的标准cluster
0xfc00-0xffff厂家自定义的cluster
其余ID保留

5.3.attribute ID范围

属性标识符 attribute ID说明
0x0000-0x4fffZigbee规范定义的标准属性
0xf000-0xfffe厂家自定义的应用层协议
其余ID保留

5.5.command ID范围

命令标识符 command ID说明
0x00-0x7f由Zigbee规范定义的标准命令和厂家自定义的命令,根据ZCL帧头的frame control字段来确定是哪类命令
其余ID保留

5.6.device ID范围

设备标识符 device ID说明
0x0000-0xbfffZigbee规范定义的标准设备
其余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

我的栈溢不出。

Post Reply