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