Zigbee学习(二)认识Profile和Cluster

Zigbee学习(二)认识Profile和Cluster



前言

    上回书说到Zigbee的架构以及入网,这次我们来再深入了解应用层的两个重要概念,这篇文档不是实战开发手册,但是可以让我们将标准文档和代码连起来,有一些编程逻辑感。
注:本次博客参考规范文档是ZigBee联盟公开的Profile和Cluster相关的文档,想下载的小伙伴可以百度搜搜,不行的话谷歌搜索。各凭本事吧!


一、zigbee的江湖发展

    不同的zigbee芯片有不同的协议栈代码实现,近十年来,随着zigbee江湖的并购重组等操作,三大主流技术方案商值得关注:

2005 年年底,美国德州仪器公司TI并购了Chipcon;
2010 年 7月份,荷兰恩智浦半导体公司NXP收购了 Jennic; 2012 年, 美国芯科实验室Silicon Labs ,并购了Ember;
2015年3月2日,NXP又以118亿美元的现金加股票的方式收购了Freescale。

zigbee联盟至今发行的标准规范版本也发生了变革:

  • zigbee 1.0——2004年
    MSG/KVP结构

  • zigbee 2006
    Cluster Library,不兼容2004,这是一个分水岭,至此之后zigbee都向后兼容,比如2007就兼容2006。

  • zigbee 2007
    (1)定义了两套高级的功能指令集(Feature Set)分别是zigbee功能命令集和zigbee pro功能命令集。2004和2006版本都不兼容这两套新命令集。
    (2)包含两个协议栈模板ZDP(和应用profile不同):
        zibgee协议栈模板:Stack Profile 1,目标是消费电子产品和灯光商业应用环境,小于300个节点的网络中。
        zigbee pro协议栈模板:Stack Profile 2,目标是商业和工业环境,支持1000个以上网络节点。支持多播、多对一路由,更高安全性。

    在这里插入图片描述
    到2019年,zigbee联盟已经官宣zigbee3.0啦!
    图片摘自百度文库:ZigBee各版本规范比较

    小编觉得比较有趣的是,从zigbee2007版本后就支持持续干扰检测,在zigbee pro的应用层部分,新增加了分割传输功能,数据量超过有效载荷时可以分割组装。反正用最新的叭!

    要进行应用开发的小伙伴首先得明白profile和cluster的概念,不清楚基础概念的小伙伴可以自行百度,或者回顾一下小编的上一篇博文: Zigbee学习(一)架构及入网

二、ZigBee Profile

    每一个应用根据应用场景不同划分,当然,也可以自己定义一个profile。需要注意的是,协议栈也有自己的profile,即ZDP(Zigbee Device Profile),定义zigbee节点的功能,如路由能力、网络发现能力等。这和应用层的profile不同。

    zigbee应用层有许多文档,看各个zigbee产品的应用场景,这里以HA(智能家居Home Automation)为例子。除此之外还有:
ZigBee HA(ZigBee Home Automation) → 智能家居
ZigBee LL(ZigBee Light Link)→ 智能照明
ZigBee HC(ZigBee Health Care) → 智能健康
ZigBee RS(ZigBee Retail Services)→ 智能零售
ZigBee BA(ZigBee Building Automation)→ 智能建筑
ZigBee TS(ZigBee Telecommunication services)→ 智能通信服务
每一种应用场景都有一个Profile ID,以HA举个栗子:
以下是HA文档的下载链接,直接点击就可以下载。
《AFG-Home_Automation_Profile_for_Public_Download》
HA(智能家居)是一个应用场景,在这个场景的文档中描述了许多场景相关的设备,每个设备有不同的设备ID(Device ID)
在这里插入图片描述
对应到Zstack代码中,在zcl_ha.h文件中有定义这些ID如下:

// Zigbee Home Automation Profile Identification
#define ZCL_HA_PROFILE_ID 0x0104

// Generic Device IDs
#define ZCL_HA_DEVICEID_ON_OFF_SWITCH 0x0000
#define ZCL_HA_DEVICEID_LEVEL_CONTROL_SWITCH 0x0001
#define ZCL_HA_DEVICEID_ON_OFF_OUTPUT 0x0002
#define ZCL_HA_DEVICEID_LEVEL_CONTROLLABLE_OUTPUT 0x0003
#define ZCL_HA_DEVICEID_SCENE_SELECTOR 0x0004
#define ZCL_HA_DEVICEID_CONFIGURATION_TOOL 0x0005
#define ZCL_HA_DEVICEID_REMOTE_CONTROL 0x0006
#define ZCL_HA_DEVICEID_COMBINED_INTERFACE 0x0007
#define ZCL_HA_DEVICEID_RANGE_EXTENDER 0x0008

可以看到智能家居(HA)是一个大类的profile id是0x0104,所包含的DEVICE ID按照文档定义。

三、ZigBee Cluster

    相比Profile而言,Cluster的标准文档没有那么多。我们可以从ZigBee联盟提供的应用规范《Zigbee Cluster Library》入手,以下称ZCL
    文档自然是好东西,拿来要怎么看呢?在ZigBee联盟提供的规范中,分为公共规范(Public Profile)和制造商规范(Manufacture Specific Profile),公共规范的ID号为:0x0000-0x7FFF,制造商的为:0xBF00-0xFFFF。
    从文档目录中我们可以看出来,从Chapter 3 General开始,每一章都描述了一类接口对应的Cluster List,然后详述每一个Cluster的属性。
在这里插入图片描述
咱们对应着代码来瞧一瞧,在zcl.h中

// General Clusters
#define ZCL_CLUSTER_ID_GEN_BASIC                             0x0000
#define ZCL_CLUSTER_ID_GEN_POWER_CFG                         0x0001
#define ZCL_CLUSTER_ID_GEN_DEVICE_TEMP_CONFIG                0x0002
#define ZCL_CLUSTER_ID_GEN_IDENTIFY                          0x0003
#define ZCL_CLUSTER_ID_GEN_GROUPS                            0x0004
#define ZCL_CLUSTER_ID_GEN_SCENES                            0x0005
#define ZCL_CLUSTER_ID_GEN_ON_OFF                            0x0006
#define ZCL_CLUSTER_ID_GEN_ON_OFF_SWITCH_CONFIG              0x0007
#define ZCL_CLUSTER_ID_GEN_LEVEL_CONTROL                     0x0008
#define ZCL_CLUSTER_ID_GEN_ALARMS                            0x0009
#define ZCL_CLUSTER_ID_GEN_TIME                              0x000A
#define ZCL_CLUSTER_ID_GEN_LOCATION                          0x000B
#define ZCL_CLUSTER_ID_GEN_KEY_ESTABLISHMENT                 0x0800

进到某个簇Cluster,比如Basic Cluster,发现ZCL支持Client/Server模型,顾名思义:客户端发消息,服务端收消息。

簇Cluster是命令和属性的集合,而命令和属性定义了具体功能的接口。一般地,存储“属性”的实体被定义为server,而作用和操控这些属性的实体称作为client。

命令用于与属性交互,如读、写、发现属性和报告属性。
举个栗子:操作属性用的命令由client发送,被server端接收。server收到命令后的响应(response)由发送至client端接收。
在这里插入图片描述

    所以,小编以为,一个设备中可以有多个实体,不说太多纠结的概念,程序的实现逻辑就是:当我们要执行关灯操作,首先是通过发送命令OFF(有对应接口),接收端收到后执行关灯动作,最后再调用属性操作命令(比如读、写属性的对应接口)去更新OnOff这个属性值。

四、小结

    zigbee 的profile和cluster虽然有标准文档,但是不可能覆盖到所有的场景,所以在做用户定制化需求的时候,还是需要自己写profile,继续努力学习吧!

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值