主要内容

ZigBee光链路帧生成和解码

这个例子展示了如何生成和解码ZigBee®Light Link应用程序配置文件的帧[1使用ZigBee和UWB的通信工具箱™库。

背景

ZigBee标准[2]指定低速率无线个人区域网络(lr - wpan)的网络层(NET或NWK)和应用层(APP或APL)。这些NET和app层规范基于IEEE®802.15.4™的PHY和MAC规范[3.].ZigBee设备应用于家庭自动化和传感器网络,与物联网(IoT)趋势高度相关。

ZigBee应用层由多个子层组成:(我)应用程序支持子层(APS)金宝app(2)ZigBee集群库(ZCL)。

APS和ZCL遵循所有应用程序概要文件和ZigBee集群的通用格式(见[2]及2.4在[4),分别)。的ZCL有效载荷仅由某些集群使用,并且遵循特定于集群的格式。通用APS和ZCL报头的生成和解码在ZigBee家庭自动化帧生成和解码的例子。的特定于集群的生成和解码ZigBee Light Link ZCL有效载荷

集群和命令

在Light Link应用程序概要文件中指定的7个集群中[1],此示例生成并解码以下集群的帧:

  1. 确定集群:该集群将设备设置为识别模式(例如,闪烁灯)。的帧生成和解码识别的命令(详见[第3.5条]4])。

  2. 颜色控制集群:该集群用于改变照明设备的颜色。的帧生成和解码移动到颜色命令(载于[4])。

  3. 液位控制集群:该集群修改设备的级别,例如,灯泡的强度,门的关闭程度,或加热器的强度。的帧生成和解码移动到等级命令(详见[第3.10条]4])。

  4. 场景集群:场景集群设置和召回场景(即同一设备中其他集群的存储属性值集)。的帧生成和解码查看场景命令(详见[第3.7条]4])。

  5. 集团集群:该集群管理设备组,例如创建或删除组,或发现组成员。的帧生成和解码添加组命令(详见[第3.6条]4])。

除了说明的命令之外,这个示例还提供了一个实现,用于为上述五个集群的所有命令生成和解码帧进一步的探索一个完整的列表)。

识别簇ZCL有效载荷的生成与解码

一个无线个域网。IdentifyFrameConfig配置对象用于生成和解码Identify集群的ZCL有效载荷。这些对象描述了Identify集群有效负载和所有适用的属性。的无线个域网。IdentifyFrameGenerator函数接受无线个域网。IdentifyFrameConfig对象,描述识别集群有效负载,并以字节为单位输出生成的有效负载。下面的代码为一个命令创建一个ZCL有效负载,要求设备识别4秒。

创建标识集群的配置对象identifyConfigTx = zigbee。IdentifyFrameConfig (“CommandType”“确定”...“IdentifyTime”4);用于识别集群的帧生成(ZCL有效负载)identifyPayload = zigbee.IdentifyFrameGenerator(identifyConfigTx);

无线个域网。IdentifyFrameDecoder函数接受命令名和以字节为单位的标识集群有效负载,并输出无线个域网。IdentifyFrameConfig对象,描述标识集群有效负载。命令名从ZCL报头的解码中检索。中“解码家庭自动化ZigBee无线电的ZCL报头”部分ZigBee家庭自动化帧生成和解码的例子。

identifyConfigRx = zigbee。IdentifyFrameDecoder (“确定”identifyPayload)
identifyConfigRx = IdentifyFrameConfig with properties: CommandType: 'Identify' IdentifyTime: 4

下面的代码可视化了一个“软件灯泡”,它说明了接收帧中指定的识别效果。

灯泡(“白色”);zigbeeIdentifyBulb(灯泡,identifyConfigRx.IdentifyTime);关闭(灯泡);

色彩控制簇ZCL有效载荷的生成与解码

一个无线个域网。ColorControlFrameConfig配置对象用于生成和解码颜色控制集群的ZCL有效载荷。这些对象描述颜色控制集群有效负载和所有适用的属性。的无线个域网。ColorControlFrameGenerator函数接受无线个域网。ColorControlFrameConfig对象,描述颜色控制集群有效负载,并以字节为单位输出生成的有效负载。下面的代码生成一个颜色控制集群有效负载,指示照明设备在50分秒(即5秒)内逐步将其当前颜色(红色)更改为不同的值(绿色)。颜色是用…来描述的xy根据国际照明委员会(CIE)所订定的CIE 1931色彩空间[5].

灯泡(“红色”);

创建颜色控制集群的配置对象colorCtrlConfigTx = zigbee。ColorControlFrameConfig (“CommandType”“转向彩色”...“颜色清除剂”, 16384,“肤色”, 39322,“时间”, 50);%颜色控制集群的帧生成(ZCL有效负载)colorControlPayload = zigbee.ColorControlFrameGenerator(colorCtrlConfigTx);

无线个域网。ColorControlFrameDecoder函数接受命令名和以字节为单位的颜色控制集群有效负载,并输出一个无线个域网。ColorControlFrameConfig对象,描述颜色控制集群有效负载。命令名从ZCL报头的解码中检索。中“解码家庭自动化ZigBee无线电的ZCL报头”部分ZigBee家庭自动化帧生成和解码的例子。

colorCtrlConfigRx = zigbee。ColorControlFrameDecoder (“转向彩色”colorControlPayload)
colorCtrlConfigRx = ColorControlFrameConfig with properties: CommandType: 'Move to Color' ColorX: 16384 ColorY: 39322 Time: 50

下面的命令使用“软件灯泡”来可视化接收帧中指定的颜色控制效果。具体来说,灯泡的颜色在5秒内逐渐从红色变成绿色。

zigbeeMoveBulbColor(灯泡,colorCtrlConfigRx。颜色清除剂,colorCtrlConfigRx。肤色,colorCtrlConfigRx.Time);

接下来,同样的效果发生在不同的颜色轨迹上(从绿色到紫色)。

colorCtrlConfigTx2 = zigbee。ColorControlFrameConfig (“CommandType”“转向彩色”...“颜色清除剂”, 19661,“肤色”, 6554,“时间”, 50);colorControlPayload2 = zigbee.ColorControlFrameGenerator(colorCtrlConfigTx2);colorCtrlConfigRx2 = zigbee。ColorControlFrameDecoder (“转向彩色”, colorControlPayload2);zigbeeMoveBulbColor(灯泡,colorCtrlConfigRx2。颜色清除剂,colorCtrlConfigRx2。肤色,colorCtrlConfigRx2.Time);暂停(1.5);

电平控制簇ZCL有效载荷的生成与解码

一个无线个域网。LevelControlFrameConfig配置对象用于生成和解码Level Control集群ZCL有效载荷。这些对象描述了关卡控制集群有效负载和所有适用的属性。的无线个域网。LevelControlFrameGenerator函数接受无线个域网。LevelControlFrameConfig描述级别控制集群有效负载的对象,并以字节为单位输出生成的有效负载。下面的代码创建一个Level Control集群有效负载,指示设备将其当前级别更改为指定值。

创建Level控制集群配置对象levelCtrlConfigTx = zigbee。LevelControlFrameConfig (“CommandType”“升级”...“水平”, 20岁,“过渡”1);控制集群帧生成(ZCL有效负载)levelControlPayload = zigbee.LevelControlFrameGenerator(levelCtrlConfigTx);

无线个域网。LevelControlFrameDecoder函数接受命令名和以字节为单位的Level Control集群有效负载,并输出zigbee。描述关卡控制集群有效负载的LevelControlFrameConfig对象。命令名从ZCL报头的解码中检索。中“解码家庭自动化ZigBee无线电的ZCL报头”部分ZigBee家庭自动化帧生成和解码的例子。

levelCtrlConfigRx = zigbee。LevelControlFrameDecoder (“升级”levelControlPayload)
levelCtrlConfigRx = LevelControlFrameConfig with properties: CommandType: 'Move to Level'级别:20 TransitionTime: 1

虽然级别控制集群可用于调节光的强度,但颜色控制集群将其留给级别控制集群来控制亮度照明设备的颜色。下面的例子使用接收到的电平控制帧来增加灯泡的亮度电平。

zigbeeMoveBulbColor(灯泡,colorCtrlConfigRx2。颜色清除剂,colorCtrlConfigRx2。colorory, 1, levelCtrlConfigRx.Level);

场景集群ZCL有效载荷的生成与解码

一个无线个域网。SceneFrameConfig配置对象用于生成和解码场景集群ZCL有效载荷。这些对象描述了一个Scenes集群有效负载和所有适用的属性。的无线个域网。ScenesFrameGenerator函数接受无线个域网。ScenesFrameConfig对象,描述场景集群有效负载,并以字节为单位输出生成的有效负载。下面的代码生成一个Scenes集群有效负载,请求设备传输描述场景的不同帧(View Scene Response)。

%创建场景集群配置对象scenesConfigTx = zigbee。ScenesFrameConfig (“CommandType”“场景”...“GroupID”“1234”“SceneID”“56”);%场景集群帧生成(ZCL有效载荷)scenesPayload = zigbee.ScenesFrameGenerator(scenesConfigTx);

无线个域网。SceneFrameDecoder函数接受命令名和以字节为单位的场景集群有效负载,并输出一个zigbee。描述场景集群有效负载的SceneFrameConfig对象。命令名从ZCL报头的解码中检索。中“解码家庭自动化ZigBee无线电的ZCL报头”部分ZigBee家庭自动化帧生成和解码的例子。

scenesConfigRx = zigbee。ScenesFrameDecoder (“场景”scenesPayload)
CommandType: 'View Scene' GroupID: '1234' scenesConfigRx = ScenesFrameConfig with properties:

分组聚类ZCL有效载荷的生成与解码

一个无线个域网。GroupFrameConfig配置对象用于生成和解码Groups集群ZCL有效载荷。这些对象描述Groups集群有效负载和所有适用的属性。的无线个域网。GroupsFrameGenerator函数接受无线个域网。GroupsFrameConfig对象,描述Groups集群有效负载,并以字节为单位输出生成的有效负载。下面的代码创建Groups集群有效负载,指示设备将指定的组添加到其group表中。

创建组集群配置对象groupsConfigTx = zigbee。GroupsFrameConfig (“CommandType”“添加组”...“GroupName”“食堂”“GroupID”“1234”);分组集群帧生成(ZCL有效负载)groupsPayload = zigbee.GroupsFrameGenerator(groupsConfigTx);

无线个域网。GroupFrameDecoder函数接受命令名和以字节为单位的Groups集群有效负载,并输出一个zigbee。对象,描述Groups集群有效负载。命令名从ZCL报头的解码中检索。中“解码家庭自动化ZigBee无线电的ZCL报头”部分ZigBee家庭自动化帧生成和解码的例子。

groupsConfigRx = zigbee。GroupsFrameDecoder (“添加组”groupsPayload)
groupsConfigRx = GroupsFrameConfig属性:CommandType: '添加组' GroupID: '1234' GroupName: '餐厅'

Wireshark解码

生成的帧可以转换为PCAP格式,可以用Wireshark进行分析和可视化[6].这个过程可以作为额外的验证步骤,倡导ZigBee和UWB通信工具箱库以符合标准的方式生成和解码帧。

PCAP文件需要用来自所有其他层和子层(MAC、NET、APS、ZCL)的头文件封装ZCL有效载荷。下面的命令为本例中生成的ZCL有效载荷生成一个PCAP文件,该文件可以用Wireshark加载。

% ZLL配置文件IDzllProfileID = zigbee.profileID(“光链接”);payloadsWithInfo(1) =结构(“有效载荷”identifyPayload,“ProfileID”zllProfileID,...“ClusterSpecific”,真的,“ClusterID”zigbee.clusterID (“确定”),“CommandType”“确定”“方向”“上行”);payloadsWithInfo(2) = struct(“有效载荷”colorControlPayload,“ProfileID”zllProfileID,...“ClusterSpecific”,真的,“ClusterID”zigbee.clusterID (“颜色控制”),“CommandType”“转向彩色”“方向”“上行”);payloadsWithInfo(3) = struct(“有效载荷”levelControlPayload,“ProfileID”zllProfileID,...“ClusterSpecific”,真的,“ClusterID”zigbee.clusterID (液位控制的),“CommandType”“升级”“方向”“上行”);payloadsWithInfo(4) = struct(“有效载荷”scenesPayload,“ProfileID”zllProfileID,...“ClusterSpecific”,真的,“ClusterID”zigbee.clusterID (“场景”),“CommandType”“场景”“方向”“上行”);payloadsWithInfo(5) = struct(“有效载荷”groupsPayload,“ProfileID”zllProfileID,...“ClusterSpecific”,真的,“ClusterID”zigbee.clusterID (“组织”),“CommandType”“添加组”“方向”“上行”);从其他层/子层添加头文件:MPDUs = zigbeeAddProtocolHeaders(payloadsWithInfo);将mpdu导出为PCAP格式zigbeeExportToPcap (MPDUs“zigbeeLightLink.pcap”);使用Wireshark打开PCAP文件

进一步的探索

您可以进一步探索以下生成器和解码函数,以及配置对象:

除了本例中演示的命令外,提供的实现还支持下表中列出的命令。金宝app中间列列出的命令可以导出为PCAP文件,以便Wireshark对这些命令进行分析。

选定的参考书目

  1. ZigBee联盟,ZigBee Light Link标准,v. 1.0, 2012年4月5日。

  2. ZigBee联盟,ZigBee规范文档053474r17, 2007

  3. IEEE 802.15.4-2011局域网和城域网IEEE标准第15.4部分:低速率无线个人区域网络(lr - wpan)

  4. ZigBee联盟,ZigBee集群库规范,修订版6,2016年1月。

  5. CIE 1931色彩空间。国际克莱尔诉讼委员会。剑桥大学出版社,剑桥

  6. Wireshark软件:https://www.wireshark.org/