Генерация кадра ZigBee и декодирующий для общих команд

Этот пример показывает, как сгенерировать и декодировать Общекомандные кадры спецификации [1] ZigBee®, пользующейся Библиотекой Communications Toolbox™ для протокола ZigBee.

Фон

Стандарт ZigBee [1] задает сеть (СЕТЕВОЙ или NWK) и приложение слои (APP) беспроводных персональных сетей области с низкой ставкой. Они СЕТЕВЫЕ - и спецификации слоя APP полагаются на PHY и спецификации MAC IEEE® 802.15.4™ [2]. Устройства ZigBee находят применение в домашней автоматизации и организации сети датчика и очень относятся к тренду Интернета вещей (IoT).

Прикладной уровень ZigBee состоит из нескольких подуровней: (i) Подуровень Поддержки приложений (APS) и (ii) Библиотека кластера ZigBee (ZCL).

APS и заголовки ZCL следуют за форматом, который характерен для всех профилей приложений и кластеров/команд ZigBee (см. Пункты 2.2.5 в [1] и 2.4 в [3], соответственно). Заголовок APS объявляет кластер кадра, и заголовок ZCL объявляет команду кадра. Полезная нагрузка ZCL присутствует только для некоторых кластеров/команд и следует за специфичным для команды форматом.

Некоторые команды только запрашивают определенный кластер, в то время как некоторые другие (общие) команды могут использоваться для всех кластеров. Общекомандные кадры используются для управления атрибутами и другими общими задачами, которые не характерны для отдельного кластера (см. Пункт 2.5 в [3]). Этот пример иллюстрирует, как сгенерировать и декодировать полезные нагрузки ZCL для таких общих, команд ZigBee всей библиотеки. Типичный APS и генерация заголовка ZCL и декодирование проиллюстрированы в ZigBee Домашний пример Генерации и Декодирования Кадра Автоматизации.

Команды

Это примеры иллюстрирует генерацию кадра и декодирующий для следующих общих команд:

  1. Считайте Атрибуты: Эта команда запрашивает значение атрибута в различном устройстве.

  2. Считайте Ответ Атрибутов: Эта команда отвечает значением атрибута.

  3. Запишите Атрибуты: Эта команда изменяет значение атрибута в различном устройстве.

  4. Ответ Атрибутов записи: Эта команда отвечает результатом команды Атрибутов Записи.

Кроме того, этот пример обеспечивает реализацию для следующих команд (которые не проиллюстрированы):

  1. Запишите Неразделенные Атрибуты: Эта команда является тем же самым с "Атрибутами Записи" за единственным исключением, что атрибут обновляется, только если все другие заданные атрибуты могут также быть обновлены.

  2. Атрибуты записи Никакой Ответ: Эта команда является тем же самым с "Атрибутами Записи" за единственным исключением, что кадр ответа не требуется.

  3. Сообщите об Атрибутах: Эта команда сообщает обо всех атрибутах и их значениях.

  4. Ответ по умолчанию: Эта команда генерирует кадры ответа типичного формата.

zigbee. Объект настройки GeneralFrameConfig используется и в генерации и в декодировании полезные нагрузки ZCL Общих Команд. Такие объекты описывают Общую полезную нагрузку Команд и все применимые свойства.

Генерация полезных нагрузок ZCL общих команд

zigbee. Функция GeneralFrameGenerator принимает zigbee. Объект GeneralFrameConfig, описывающий полезную нагрузку общекомандного и, генерирует полезную нагрузку в байтах. Следующий код создает полезную нагрузку команд Атрибута Чтения-записи и их ответов.

% 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'

Декодирование полезных нагрузок ZCL общих команд, полученных от радио ZigBee

Этот раздел декодирует полезные нагрузки ZCL общих команд, полученных от коммерческой Автоматизации Дома радио ZigBee с USRP® B200-мини-радио и Пакет Поддержки Communications Toolbox для радио USRP®.

% 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 :
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 для Протокола ZigBee генерирует и декодирует кадры стандартно-совместимым способом.

Файлу PCAP нужны полезные нагрузки ZCL, которые будут заключены с заголовками от всех других слоев и подуровней (MAC, СЕТЕВОЙ, APS, ZCL). Следующие команды генерируют файл PCAP для полезных нагрузок ZCL, сгенерированных в этом примере, который может загрузиться с Wireshark.

% 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, документ 053474r17, 2007 спецификации ZigBee

  2. IEEE 802.15.4-2011 - Стандарт IEEE для Локальных сетей и городских компьютерных сетей - Часть 15.4: Беспроводные Персональные Сети области С низкой ставкой (LR-WPANs)

  3. Союз ZigBee, спецификация библиотеки кластера ZigBee, версия 6, январь 2016.

  4. Программное обеспечение Wireshark: https://www.wireshark.org/