概述
Zigbee学习(二)认识Profile和Cluster
文章目录
- Zigbee学习(二)认识Profile和Cluster
- 前言
- 一、zigbee的江湖发展
- 二、ZigBee Profile
- 三、ZigBee 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,继续努力学习吧!
最后
以上就是疯狂巨人为你收集整理的Zigbee学习(二)认识Profile和ClusterZigbee学习(二)认识Profile和Cluster前言一、zigbee的江湖发展二、ZigBee Profile三、ZigBee Cluster四、小结的全部内容,希望文章能够帮你解决Zigbee学习(二)认识Profile和ClusterZigbee学习(二)认识Profile和Cluster前言一、zigbee的江湖发展二、ZigBee Profile三、ZigBee Cluster四、小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复