Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

一般コマンドのための ZigBee フレームの生成と復号化

この例では、Communications Toolbox™ Library for the ZigBee Protocol を使用して、ZigBee® 仕様 [1] の一般的なコマンド フレームを生成および復号化する方法を説明します。

背景

ZigBee 規格 [1] は、低速無線パーソナル エリア ネットワークのネットワーク (NET または NWK) 層とアプリケーション (APP) 層を規定します。この NET 層および APP 層の仕様は、IEEE® 802.15.4™ [2] の PHY 仕様および MAC 仕様に基づいて作成されています。ZigBee デバイスは、ホーム オートメーションやセンサー ネットワーキングに使用例があり、Internet of Things (IoT) の流行にも密接に関連しています。

ZigBee アプリケーション層は、(i) Application Support Sublayer (APS)、(ii) ZigBee Cluster Library (ZCL) という複数の下位層で構成されます。

APS および ZCL ヘッダーはすべてのアプリケーション プロファイルと ZigBee クラスター/コマンドに共通の形式 (それぞれ、Clause 2.2.5 [1] および 2.4 [3] を参照) に従います。APS ヘッダーはフレームのクラスターを宣言し、ZCL ヘッダーはフレームのコマンドを宣言します。ZCL ペイロードは、一部のクラスター/コマンドのみのために存在し、コマンド固有の形式に従います。

一部のコマンドは特定のクラスターにしか利用できませんが、その他の一部の (一般的な) コマンドはすべてのクラスターに使用できます。一般的なコマンド フレームは、個々のクラスターに固有ではない属性およびその他の一般的なタスクを操作するために使用されます (Clause 2.5 [3] を参照)。この例では、このような一般的な、ライブラリ全体にわたる ZigBee コマンドの ZCL ペイロードを生成および復号化する方法を説明します。一般的な APS および ZCL ヘッダーの生成と復号化は、ZigBee ホーム オートメーション フレームの生成と復号化の例で説明しています。

コマンド

この例では、次の一般的なコマンドのフレームの生成と復号化を説明します。

  1. Read Attributes: このコマンドは、異なるデバイスにおける属性値を問い合わせます。

  2. Read Attributes Response: このコマンドは、属性値をもつ応答を返します。

  3. Write Attributes: このコマンドは、異なるデバイスにおける属性値を変更します。

  4. Write Attributes Response: このコマンドは、Write Attributes コマンドの結果をもつ応答を返します。

さらにこの例では、次のコマンドの実装を提供します (これらは例示されていません)。

  1. Write Attributes Undivided: このコマンドは、他のすべての指定した属性も更新可能な場合にのみ属性が更新されることを除いて "Write Attributes" と同じです。

  2. Write Attributes No Response: このコマンドは、応答フレームが不要であることを除いて "Write Attributes" と同じです。

  3. Report Attributes: このコマンドは、すべての属性とその値をレポートします。

  4. Default Response: このコマンドは、汎用形式の応答フレームを生成します。

zigbee.GeneralFrameConfig 構成オブジェクトは、一般的なコマンドの ZCL ペイロードの生成と復号化の両方で使用されます。このようなオブジェクトは、一般的なコマンドのペイロードと適用可能なすべてのプロパティを表します。

一般的なコマンドの ZCL ペイロードの生成

関数 zigbee.GeneralFrameGenerator は、一般的なコマンドのペイロードを表す zigbee.GeneralFrameConfig オブジェクトを受け入れ、ペイロードをバイト単位で生成します。次のコードは、Read/Write Attribute コマンドとその応答のペイロードを作成します。

% Read Attributes command:
readConfigTx = zigbee.GeneralFrameConfig('CommandType', 'Read Attributes', 'AttributeID', '0000')
readPayload = zigbee.GeneralFrameGenerator(readConfigTx);

% Read Attributes Response command:
readResponseConfigTx = zigbee.GeneralFrameConfig('CommandType', 'Read Attributes Response', ...
                            'AttributeID', '0000', 'Status', 'Success', 'AttributeType', 'boolean', 'AttributeValue', false)
readResponsePayload = zigbee.GeneralFrameGenerator(readResponseConfigTx);

% Write Attributes command:
writeConfigTx = zigbee.GeneralFrameConfig('CommandType', 'Write Attributes', 'AttributeID', '0000', 'AttributeType', 'boolean', 'AttributeValue', true)
writePayload = zigbee.GeneralFrameGenerator(writeConfigTx);

% % Write Attributes Response command:
writeResponseConfigTx = zigbee.GeneralFrameConfig('CommandType', 'Write Attributes Response', 'Status', 'Success')
writeResponsePayload = zigbee.GeneralFrameGenerator(writeResponseConfigTx);
readConfigTx = 

  GeneralFrameConfig with properties:

    CommandType: 'Read Attributes'
    AttributeID: '0000'


readResponseConfigTx = 

  GeneralFrameConfig with properties:

       CommandType: 'Read Attributes Response'
       AttributeID: '0000'
            Status: 'Success'
     AttributeType: 'Boolean'
    AttributeValue: 0


writeConfigTx = 

  GeneralFrameConfig with properties:

       CommandType: 'Write Attributes'
       AttributeID: '0000'
     AttributeType: 'Boolean'
    AttributeValue: 1


writeResponseConfigTx = 

  GeneralFrameConfig with properties:

    CommandType: 'Write Attributes Response'
         Status: 'Success'

ZigBee 無線機から取得した一般的なコマンドの ZCL ペイロードの復号化

この節では、USRP® B200-mini 無線機と Communications Toolbox Support Package for USRP® radio を使用して市販のホーム オートメーション ZigBee 無線機から取得した、一般的なコマンドの ZCL ペイロードを復号化します。

% load captured payloads
load zigbeeGeneralCommandCaptures

関数 zigbee.GeneralFrameDecoder は、一般的なコマンド名とバイト単位のそのペイロードを受け入れ、一般的なコマンドのペイロードを表す zigbee.GeneralFrameConfig オブジェクトを出力します。コマンド名は、ZCL ヘッダーの復号化から取得します。

% Read Attributes :
readConfigRx = zigbee.GeneralFrameDecoder('Read Attributes', capturedReadPayload)

% Read Attributes Response:
readResponseRx = zigbee.GeneralFrameDecoder('Read Attributes Response', capturedReadResponsePayload)

% Default Response
defaultResponseRx = zigbee.GeneralFrameDecoder('Default Response', capturedDefaultResponsePayload)
readConfigRx = 

  GeneralFrameConfig with properties:

    CommandType: 'Read Attributes'
    AttributeID: '0000'


readResponseRx = 

  GeneralFrameConfig with properties:

       CommandType: 'Read Attributes Response'
       AttributeID: '0000'
            Status: 'Success'
     AttributeType: 'Boolean'
    AttributeValue: 1


defaultResponseRx = 

  GeneralFrameConfig with properties:

         CommandType: 'Default Response'
              Status: 'Success'
    CommandToRespond: '01'

生成された一般的なコマンドの ZCL ペイロードの復号化

この節では、生成された残りの一般的なコマンド (すなわち 'Write Attributes'、'Write Attributes Response') の復号化を説明します。

% Write Attributes :
writeConfigRx = zigbee.GeneralFrameDecoder('Write Attributes', writePayload)

% Write Attributes Response:
writeResponseRx = zigbee.GeneralFrameDecoder('Write Attributes Response', writeResponsePayload)
writeConfigRx = 

  GeneralFrameConfig with properties:

       CommandType: 'Write Attributes'
       AttributeID: '0000'
     AttributeType: 'Boolean'
    AttributeValue: 1


writeResponseRx = 

  GeneralFrameConfig with properties:

    CommandType: 'Write Attributes Response'
         Status: 'Success'

Wireshark 復号化

生成したフレームは PCAP 形式に変換することができます。この形式は Wireshark で解析および可視化できます [4]。このプロセスは、Communications Toolbox Library for the ZigBee Protocol により規格に準拠した方法でフレームを生成および復号化することを支持する追加の検証手順として機能します。

PCAP ファイルでは、ZCL ペイロードがすべての他の層およびサブ層 (MAC、NET、APS、ZCL) のヘッダーと共に封入される必要があります。次のコマンドは、Wireshark で読み込み可能な、この例で生成された ZCL ペイロードの PCAP ファイルを生成します。

% Profile ID
profileID = zigbee.profileID('Home Automation');
onOffID      = zigbee.clusterID('On/Off');

payloadsWithInfo(1) = struct('Payload',   readPayload,           'ProfileID',  profileID, ...
                             'ClusterSpecific', false,           'ClusterID',  onOffID,      'CommandType', 'Read Attributes',            'Direction', 'Downlink');
payloadsWithInfo(2) = struct('Payload',   readResponsePayload,   'ProfileID',  profileID, ...
                             'ClusterSpecific', false,           'ClusterID',  onOffID,      'CommandType', 'Read Attributes Response',   'Direction', 'Uplink');
payloadsWithInfo(3) = struct('Payload',   writePayload,          'ProfileID',  profileID, ...
                             'ClusterSpecific', false,           'ClusterID',  onOffID,      'CommandType', 'Write Attributes',           'Direction', 'Downlink');
payloadsWithInfo(4) = struct('Payload',   writeResponsePayload,  'ProfileID',  profileID, ...
                             'ClusterSpecific', false,           'ClusterID',  onOffID,      'CommandType', 'Write Attributes Response',  'Direction', 'Uplink');


% Add headers from other layers/sublayers:
MPDUs = zigbeeAddProtocolHeaders(payloadsWithInfo);

% Export MPDUs to a PCAP format
zigbeeExportToPcap(MPDUs, 'zigbeeGeneralCommands.pcap');

% Open PCAP file with Wireshark

その他の調査

ジェネレーター関数と復号化関数、および構成オブジェクトの詳細については、次の情報を参照してください。

参考文献

  1. ZigBee Alliance, ZigBee Specification Document 053474r17, 2007

  2. IEEE 802.15.4-2011 - IEEE Standard for Local and metropolitan area networks--Part 15.4: Low-Rate Wireless Personal Area Networks (LR-WPANs)

  3. ZigBee Alliance, ZigBee Cluster Library Specification, Revision 6, Jan. 2016.

  4. Wireshark software: https://www.wireshark.org/