主要内容

ZigBee家庭自动化帧生成和解码

此示例显示如何为家庭自动化应用程序配置文件生成和解码应用程序层帧[1]ZigBee®规范的应用[2]使用通信工具箱™ ZigBee和UWB图书馆。

背景

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

ZigBee应用层由多个子层组成:(一)APS (Application万博1manbetx Support Sublayer)(ii)ZigBee集群库(ZCL)。APS子层遵循所有应用程序配置文件和ZigBee集群通用的格式(请参阅中的第2.2.5条)[2]).ZCL标题遵循所有集群通用的格式(请参阅中的第2.4条)[4]).ZCL有效载荷仅由某些群集使用,并遵循特定于群集的格式。

集群和帧捕获

在家庭自动化应用程序概要文件中使用的所有集群中,这个示例解码并生成以下帧:(一)开/关集群(由照明设备使用),以及(ii)入侵者警报系统(IAS)区域集群(由运动传感器使用)[4].On/Off集群不使用ZCL有效负载,但是IAS Zone集群使用。

这些集群的帧是从支持家庭自动化的商用ZigBee无线电中捕获的,使用USRP®B200-mini无线电和通讯工具箱支持包的USRP®无线电万博1manbetx.ZigBee可以在网络层或应用层采用安全性。捕获的帧在网络层采用安全性,随后被解密。此示例对解密的网络层有效载荷的应用层进行解码。

负载zigbeeAPPCaptures

家庭自动化ZigBee无线电APS帧解码

一个zigbee.APSFrameConfig配置对象用于生成和解码ZigBee APS帧。此类对象描述APS层帧,并指定其帧类型和所有适用属性zigbee.aps帧解码器函数接受以字节为单位的APS协议数据单元(APDU),并输出描述帧的zigbee.APSFrameConfig对象,可能还输出以字节为单位的ZCL帧。中的第2.2.5.1条[2]描述APS帧格式。

接下来,解码捕获的IAS区域帧的APS子层:

[apsConfig,APSConpayload]=zigbee.APSFrameDecoder(motionDetectedFrame);apsConfig
apsConfig = APSFrameConfig带有属性:FrameType: 'Data' APSCounter: 230鸣信请求:1寻址:DeliveryMode: 'Unicast' DestinationEndpoint: '01' ClusterID: '0500' ProfileID: '0104' SourceEndpoint: '01'扩展头:ExtendedHeader: 0安全:安全:0

家庭自动化ZigBee无线电ZCL报头的解码

一个zigbee.ZCLFrameConfig配置对象用于生成和解码ZigBee ZCL报头。这些对象描述一个zcl层框架,并指定它的框架类型和所有适用的属性。

无线个域网。ZCLFrameDecoder函数接受以字节为单位的ZCL帧,并输出一个zigbee.ZCLFrameConfig对象,该对象描述报头,可能还输出以字节为单位的ZCL有效负载[4描述ZCL报头帧格式。注意,ZCL头可以指定“库范围”或“集群特定”命令类型。在后一种情况下,zigbee。ZCLFrameDecoderalso needs the cluster ID, which is present in the APS header, in order to decode the cluster-specific command ID into a command type. For example, the next command decodes the ZCL header of a captured IAS Zone frame.

[zclConfig, zclPayload] = zigbee。ZCLFrameDecoder(apsPayload, apsConfig.ClusterID); zclConfig
zclConfig=ZCLFRAMECONIG,属性为:FrameType:“特定于群集”CommandType:“区域状态更改通知”SequenceNumber:9 ManufacturerCommand:0方向:“下行链路”DisableDefaultResponse:0

从ZigBee无线电解码IAS区域帧的ZCL有效载荷

与开/关集群相比,IAS Zone集群在ZCL头之外指定了一个ZCL负载。一个zigbee.IASZoneFrameConfig配置对象用于生成和解码IAS区域ZCL有效载荷。此类对象描述IAS区域有效载荷和所有适用属性zigbee.IASZoneFrameDecoder函数接受一个以字节为单位的IAS区域有效负载并输出一个zigbee。对象IASZoneFrameConfig,描述IAZ区域有效负载。

iasZoneConfig = zigbee.IASZoneFrameDecoder (zclPayload)
iasZoneConfig=IASZoneFrameConfig,属性:CommandType:“区域状态更改通知”区域ID:0 Alarm1:“未报警”Alarm2:“报警”篡改:0电池电量不足:0周期报告:0恢复报告:1故障:0 ACFault:0电池故障:0测试模式:0延迟:0

解码ZigBee收音机的运动触发照明自动化

已经为商用家庭自动化ZigBee无线电建立了照明自动化,其帧已被捕获并解码。具体来说,一旦运动传感器检测到运动,它就会向ZigBee集线器发送信号,ZigBee集线器再向灯泡发送信号,灯泡就会打开。当运动传感器检测到运动已经停止(例如,在10秒钟没有运动后),它会向ZigBee集线器发送一个信号,然后通过无线方式触发灯泡关闭。下面的视频演示了照明自动化。

helperPlaybackVideo (“LightingAutomation.mp4”, 2/5);

以下代码对ZigBee无线电之间传输的实际帧进行解码。这些帧由USRP®设备捕获(也在视频中显示)。

apsFrames={motionDetectedFrame;turnOnFrame;motionStoppedFrame;turnOffFrame};对于idx=1:长度(帧)%APS解码:[apsConfig,apsppayload]=zigbee.APSFrameDecoder(apsFrames{idx});% ZCL头解码:[zclConfig, zclPayload] = zigbee。ZCLFrameDecoder(apsPayload, apsConfig.ClusterID); zclConfig%开-关群集(没有ZCL有效负载)onOffClusterID =“0006”如果strcmp(apsConfig.ClusterID,onOffClusterID)fprintf([“打开灯泡”低(zclConfig.CommandType)”。\ n”]);终止%入侵者报警系统(IAS)区域群集具有ZCL有效负载:叶绿体='0500'如果& & strcmp (apsConfig ~ isempty (zclPayload)。iasConfig = zigbee.IASZoneFrameDecoder(zclPayload)如果任何(strcmp(“警惕”,{iasConfig.Alarm1,iasConfig.Alarm2})fprintf('检测到运动。\n');其他的流(“运动停止。\ n”);终止终止终止
zclConfig=ZCLFRAMECONIG,属性为:FrameType:“特定于群集”CommandType:“区域状态更改通知”SequenceNumber:9 ManufacturerCommand:0方向:“下行链路”DisableDefaultResponse:0 iasConfig=IASZoneFrameConfig,属性为:CommandType:“区域状态更改通知”ZoneID:0 Alarm1:“未报警”Alarm2:“Ala”rmed“篡改:0电池电量不足:0周期报告:0恢复报告:1故障:0 ACFault:0电池缺陷:0测试模式:0延迟:0检测到运动。zclConfig=ZCLFrameConfig,属性:FrameType:“群集特定”命令类型:“开”序列号:64制造商命令:0方向:“上行”禁用默认响应:0打开灯泡。zclConfig=ZCLFrameConfig,属性为:FrameType:“群集特定”CommandType:“区域状态更改通知”SequenceNumber:10 ManufacturerCommand:0方向:“下行链路”DisableDefaultResponse:0 iasConfig=IASZoneFrameConfig,属性为:CommandType:“区域状态更改通知”ZoneID:0 Alarm1:“未报警”Alarm2:“未报警”larmed“篡改:0电池电量不足:0周期报告:0恢复报告:1故障:0 ACFault:0电池故障:0测试模式:0延迟:0运动停止。zclConfig=ZCLFrameConfig,属性:FrameType:“群集特定”命令类型:“关闭”序列号:70制造商命令:0方向:“上行”禁用默认响应:0关闭灯泡。

生成IAS区域ZCL有效载荷

zigbee.iasZoneFlameGenerator函数接受zigbee。对象IASZoneFrameConfig,描述IAS区域有效负载,并输出以字节为单位的有效负载。下面的代码为这个集群创建了两个ZCL有效负载,以指示是否检测到入侵。

iasConfigIntrusion=zigbee.IASZoneFrameConfig(“警报2”“警惕”);zclPayloadIntrusion=zigbee.iasZoneFlameGenerator(iasConfigIntrusion);iasConfigNoIntrusion=zigbee.iasZoneFlameConfig(“警报2”“不惊慌”);zclPayloadNoIntrusion=zigbee.IASZoneFrameGenerator(iasConfigNoIntrusion);

生成ZCL帧

无线个域网。ZCLFrameGenerator函数接受描述帧的zigbee.ZCLFrameConfig对象,以及可选的以字节(两个字符)为单位的ZCL有效负载,并以字节为单位输出ZCL帧。以下代码为开/关群集(无有效负载)和IAS区域群集(需要有效负载)生成ZCL帧。

%区域集群zclConfigIntrusion=zigbee.ZCLFrameConfig(“框架类型”“群集特定”...“CommandType”“区域状态更改通知”...“SequenceNumber”, 1“方向”“下行链路”);zclFrameIntrusion=zigbee.ZCLFrameGenerator(zclConfigIntrusion,zclPayloadIntrusion);%开/关集群zclConfigOn=zigbee.ZCLFrameConfig(“框架类型”“群集特定”...“CommandType”“上”...“SequenceNumber”2.“方向”“上行”);zclFrameOn=zigbee.ZCLFrameGenerator(zclConfigOn);

生成APS帧

zigbee.aps框架生成器函数接受zigbee。一个PSFrameConfig object describing the frame, and optionally a APS payload (ZCL-layer frame) in bytes (two-characters), and outputs the APS frame in bytes. The following code illustrates how to generate APS frames for the ZCL frames created in the previous section.

%区域集群apsConfigIntrusion =无线个域网。APSFrameConfig (“框架类型”“数据”...“ClusterID”,iasZoneClusterID,...“ProfileID”zigbee.profileID (“家庭自动化”),...“自动计数器”, 1...“AcknowledgmentRequest”,true);apsFrameIntrusion=zigbee.APSFrameGenerator(apsConfigIntrusion,zclFrameIntrusion);%开/关群集apsConfigOn=zigbee.APSFrameConfig(“框架类型”“数据”...“ClusterID”,onOffClusterID,...“ProfileID”zigbee.profileID (“家庭自动化”),...“自动计数器”2....“AcknowledgmentRequest”,真正的);apsFrameOn =无线个域网。一个PSFrameGenerator(apsConfigOn, zclFrameOn);

进一步探索

您可以进一步了解以下生成器和解码功能以及配置对象:

精选书目

  1. ZigBee联盟,《ZigBee家庭自动化公共应用概要》,第29版,第1.2版,2013年6月。

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

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

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