В этом примере показано, как генерировать и декодировать общие кадры команд спецификации 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.
Эти примеры иллюстрируют формирование и декодирование кадров для следующих общих команд:
Read Attributes: эта команда запрашивает значение атрибута на другом устройстве.
Read Attributes Response: Эта команда отвечает значением атрибута.
Запись атрибутов: эта команда изменяет значение атрибута на другом устройстве.
Write Attributes Response: Эта команда отвечает результатом команды Write Attributes.
Кроме того, этот пример обеспечивает реализацию следующих команд (которые не показаны):
Write Attributes Undivided: эта команда аналогична команде Write Attributes, за исключением того, что атрибут обновляется только в том случае, если все остальные указанные атрибуты также могут быть обновлены.
Write Attributes No Response: эта команда аналогична команде «Write Attributes», за исключением того, что кадр ответа не требуется.
Атрибуты отчета: эта команда сообщает обо всех атрибутах и их значениях.
Ответ по умолчанию: эта команда генерирует кадры ответа общего формата.
Зигби. Объект конфигурации GeneralFrameConfig используется как при генерации, так и при декодировании полезных нагрузок 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 общих команд, полученных от коммерческих радиоприемников 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'
В этом разделе иллюстрируется декодирование остальных сгенерированных общих команд (т.е. «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'
Сгенерированные кадры могут быть преобразованы в формат 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
Далее можно изучить следующие функции генератора и декодирования, а также объект конфигурации:
Альянс ZigBee, Документ спецификации ZigBee 053474r17, 2007
IEEE 802.15.4-2011 - Стандарт IEEE для локальных и городских сетей - Часть 15.4: Низкоскоростные беспроводные персональные сети (LR-WPAN)
Альянс ZigBee, спецификация кластерной библиотеки ZigBee, редакция 6, январь 2016 г.
Программное обеспечение Wireshark: https://www.wireshark.org/