exponenta event banner

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

В этом примере показано, как генерировать и декодировать общие кадры команд спецификации ZigBee ® [1] с использованием библиотеки Communications Toolbox™ Library для протокола ZigBee.

Фон

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

Прикладной уровень 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. Read Attributes: эта команда запрашивает значение атрибута на другом устройстве.

  2. Read Attributes Response: Эта команда отвечает значением атрибута.

  3. Запись атрибутов: эта команда изменяет значение атрибута на другом устройстве.

  4. Write Attributes Response: Эта команда отвечает результатом команды Write Attributes.

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

  1. Write Attributes Undivided: эта команда аналогична команде Write Attributes, за исключением того, что атрибут обновляется только в том случае, если все остальные указанные атрибуты также могут быть обновлены.

  2. Write Attributes No Response: эта команда аналогична команде «Write Attributes», за исключением того, что кадр ответа не требуется.

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

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

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

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

Зигби. Функция GeneralFrameGenerator принимает зигби. Объект 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'

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

В этом разделе выполняется декодирование полезной нагрузки ZCL общих команд, полученных от коммерческих радиоприемников Home-Automation ZigBee > с помощью радиоприемника USRP ® B200-mini и пакета поддержки Communications Toolbox для радиоприемника USRP ®. Дополнительные сведения см. в разделе «Кластеры и захвата кадров» в примере создания и декодирования кадров домашней автоматизации ZigBee.

% load captured payloads
load zigbeeGeneralCommandCaptures

Зигби. Функция GeneralFrameDecoder принимает общее имя команды и ее полезную нагрузку в байтах и выводит zigbee. Объект GeneralFrameConfig, описывающий полезную нагрузку общей команды. Имя команды извлекается из декодирования заголовка ZCL. См. раздел «Декодирование заголовка ZCL домашних радиостанций автоматизации ZigBee» в примере генерации и декодирования кадров домашней автоматизации ZigBee.

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

Файл PCAP должен содержать полезные нагрузки ZCL с заголовками всех других уровней и подуровней (MAC, NET, 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, Документ спецификации ZigBee 053474r17, 2007

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

  3. Альянс ZigBee, спецификация кластерной библиотеки ZigBee, редакция 6, январь 2016 г.

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