В этом примере показано, как сгенерировать и декодировать Общекомандные системы координат спецификации [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 Домашний пример Генерации и Декодирования Системы координат Автоматизации.
Это примеры иллюстрирует генерацию системы координат и декодирующий для следующих общих команд:
Считайте Атрибуты: Эта команда запрашивает значение атрибута в различном устройстве.
Считайте Ответ Атрибутов: Эта команда отвечает значением атрибута.
Запишите Атрибуты: Эта команда изменяет значение атрибута в различном устройстве.
Ответ Атрибутов записи: Эта команда отвечает результатом команды Атрибутов Записи.
Кроме того, этот пример обеспечивает реализацию для следующих команд (которые не проиллюстрированы):
Запишите Неразделенные Атрибуты: Эта команда является тем же самым с "Атрибутами Записи" за единственным исключением, что атрибут обновляется, только если все другие заданные атрибуты могут также быть обновлены.
Атрибуты записи Никакой Ответ: Эта команда является тем же самым с "Атрибутами Записи" за единственным исключением, что система координат ответа не требуется.
Сообщите об Атрибутах: Эта команда сообщает обо всех атрибутах и их значениях.
Ответ по умолчанию: Эта команда генерирует системы координат ответа типового формата.
zigbee.GeneralFrameConfig объект настройки используется и в генерации и в декодировании полезные нагрузки ZCL Общих Команд. Такие объекты описывают Общую полезную нагрузку Команд и все применимые свойства.
Функция zigbee.GeneralFrameGenerator принимает zigbee.GeneralFrameConfig object, описывающий полезную нагрузку общекомандного, и генерирует полезную нагрузку в байтах. Следующий код создает полезную нагрузку команд Атрибута Чтения-записи и их ответов.
% 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> с USRP® B200-мини-радио и Пакет Поддержки Communications Toolbox для радио USRP®. Для получения дополнительной информации смотрите раздел 'Clusters and Frame Captures' в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации.
% load captured payloads load zigbeeGeneralCommandCaptures
Функция zigbee.GeneralFrameDecoder принимает общекомандное имя и его полезную нагрузку в байтах и выводит zigbee.GeneralFrameConfig object, описывающий полезную нагрузку общекомандного. Название команды получено из декодирования заголовка 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'
Этот раздел иллюстрирует декодирование остающихся сгенерированных общих команд (i.e., 'Атрибуты Записи', 'Ответ Атрибутов Записи').
% 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, СЕТЕВОЙ, 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, документ 053474r17, 2007 спецификации ZigBee
IEEE 802.15.4-2011 - Стандарт IEEE для Локальных сетей и городских компьютерных сетей - Часть 15.4: Беспроводные Персональные Сети области С низкой ставкой (LR-WPANs)
Союз ZigBee, спецификация библиотеки кластера ZigBee, версия 6, январь 2016.
Программное обеспечение Wireshark: https://www.wireshark.org /