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

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

Фон

Стандарт ZigBee [1] задает сетевые (NET или NWK) и прикладные (APP) слои низкоскоростных беспроводных персональных сетей. Эти спецификации уровня NET и 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. 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 общих команд. Такие объекты описывают полезную нагрузку General Commands и все применимые свойства.

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

Зигби. Функция 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'

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

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

% load captured payloads
load zigbeeGeneralCommandCaptures

Зигби. Функция GeneralFrameDecoder принимает общее имя команды и ее полезную нагрузку в байтах и выводит zigbee. Объект GeneralFrameConfig, описывающий полезную нагрузку общей команды. Имя команды извлекается из декодирования заголовка ZCL. Смотрите раздел 'Decoding ZCL Header of Home Automation ZigBee Radios' в примере генерации и декодирования систем координат домашней автоматизации 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 для протокола ZigBee генерирует и декодирует системы координат в соответствии со стандартом.

PCAP- файла необходимо, чтобы полезные нагрузки ZCL были заключены в заголовки из всех других слоев и подслоев (MAC, NET, APS, ZCL). Следующие команды генерируют файл для полезных нагрузок 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 Alliance, Технический документ ZigBee 053474r17, 2007

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

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

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

Для просмотра документации необходимо авторизоваться на сайте