В этом примере показано, как сгенерировать и декодировать системы координат профиля приложений ZigBee® Light Link [1] пользование Библиотекой Communications Toolbox™ для протокола ZigBee.
Стандарт ZigBee [2] задает сеть (СЕТЕВОЙ или NWK) и приложение (APP или APL) слои беспроводных персональных сетей области с низкой ставкой (LR-WPANs). Они СЕТЕВЫЕ - и технические требования слоя APP полагаются на PHY и технические требования MAC IEEE® 802.15.4™ [3]. Устройства ZigBee находят применение в домашней автоматизации и организации сети датчика и очень относятся к тренду Интернета вещей (IoT).
Прикладной уровень ZigBee состоит из нескольких подуровней: (i) Подуровень Поддержки приложений (APS) и (ii) Библиотека кластера ZigBee (ZCL).
APS и заголовки ZCL следуют за форматом, который характерен для всех профилей приложений и кластеров ZigBee (см. Пункты 2.2.5 в [2] и 2.4 в [4], соответственно). Полезная нагрузка ZCL используется только некоторыми кластерами, и она следует за кластерно-специфичным форматом. Типовой APS и генерация заголовка ZCL и декодирование проиллюстрированы в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации. Этот пример иллюстрирует кластерно-специфичную генерацию и декодирование Ссылки Света ZigBee полезные нагрузки ZCL.
Из этих 7 кластеров, заданных в профиле приложений светового сигнала Link [1], этот пример генерирует и декодирует системы координат для следующих кластеров:
Идентифицируйте кластер: Этот кластер устанавливает устройство в идентификационный режим (e.g., высвечивая свет). Этот пример иллюстрирует генерацию системы координат и декодирующий для Идентифицировать команды (описанный в Пункте 3.5 [4]).
Кластер Управления цветом: Этот кластер изменяет цвет устройства подсветки. Этот пример иллюстрирует генерацию системы координат и декодирующий для Перемещения, чтобы Окрасить команду (описанной в Пункте 5.2 [4]).
Кластер Контроля уровня: Этот кластер изменяет уровень устройства, e.g., интенсивность лампочки, насколько закрытый дверь, или интенсивность нагревателя. Этот пример иллюстрирует генерацию системы координат и декодирующий для Перемещения к команде Уровня (описанный в Пункте 3.10 [4]).
Кластер сцен: кластер сцен настраивает и вспоминает сцены (i.e., наборы сохраненных значений атрибута для других кластеров в том же устройстве). Этот пример иллюстрирует генерацию системы координат и декодирующий для команды Сцены Представления (описанный в Пункте 3.7 [4]).
Кластер группы: Этот кластер управляет группами устройств, e.g., путем создания или удаления группы, или путем обнаружения состава группы. Этот пример иллюстрирует генерацию системы координат и декодирующий для Добавить команды группы (описанный в Пункте 3.6 [4]).
В дополнение к проиллюстрированным командам этот пример обеспечивает реализацию для генерации и декодирования систем координат для всех команд пяти упомянутых кластеров (см. Дальнейшее Исследование для полного списка).
zigbee.IdentifyFrameConfig объект настройки используется и в генерации и в декодировании полезные нагрузки ZCL Идентифицировать кластера. Такие объекты описывают Идентифицировать кластерную полезную нагрузку и все применимые свойства. Функция zigbee.IdentifyFrameGenerator принимает zigbee.IdentifyFrameConfig object, описывающий Идентифицировать кластерную полезную нагрузку, и выводит сгенерированную полезную нагрузку в байтах. Следующий код создает полезную нагрузку ZCL для команды, прося, чтобы устройство идентифицировало в течение 4 секунд.
% Creation of configuration object for Identify cluster identifyConfigTx = zigbee.IdentifyFrameConfig('CommandType', 'Identify', ... 'IdentifyTime', 4); % Frame generation (ZCL payload) for Identify cluster identifyPayload = zigbee.IdentifyFrameGenerator(identifyConfigTx);
Функция zigbee.IdentifyFrameDecoder принимает название команды и Идентифицировать кластерную полезную нагрузку в байтах и выводит zigbee.IdentifyFrameConfig object, описывающий Идентифицировать кластерную полезную нагрузку. Название команды получено из декодирования заголовка ZCL. Смотрите раздел 'Decoding ZCL Header of Home Automation ZigBee Radios' в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации.
identifyConfigRx = zigbee.IdentifyFrameDecoder('Identify', identifyPayload)
identifyConfigRx = IdentifyFrameConfig with properties: CommandType: 'Identify' IdentifyTime: 4
Следующий код визуализирует "лампу программного обеспечения", которая иллюстрирует идентификационный эффект, заданный в принятом кадре.
bulb = plotBulb('white');
zigbeeIdentifyBulb(bulb, identifyConfigRx.IdentifyTime);
close(bulb);
zigbee.ColorControlFrameConfig объект настройки используется и в генерации и в декодировании полезные нагрузки ZCL кластера Управления цветом. Такие объекты описывают полезную нагрузку кластера Управления цветом и все применимые свойства. Функция zigbee.ColorControlFrameGenerator принимает zigbee.ColorControlFrameConfig object, описывающий полезную нагрузку кластера Управления цветом, и выводит сгенерированную полезную нагрузку в байтах. Следующий код генерирует полезную нагрузку кластера Управления цветом, которая дает устройству подсветки команду прогрессивно изменять свой текущий цвет (красный) в различное значение (зеленое) в 50 deciseconds (i.e., 5 секунд). Цвет описан в терминах x, y значения согласно цветовому пространству CIE 1931, установленному Международной комиссией по Освещению (CIE) [5].
bulb = plotBulb('red');
% Creation of configuration object for Color Control cluster colorCtrlConfigTx = zigbee.ColorControlFrameConfig('CommandType', 'Move to Color', ... 'ColorX', 16384, 'ColorY', 39322, 'Time', 50); % Frame generation (ZCL payload) for Color Control cluster colorControlPayload = zigbee.ColorControlFrameGenerator(colorCtrlConfigTx);
Функция zigbee.ColorControlFrameDecoder принимает название команды и полезную нагрузку кластера Управления цветом в байтах и выводит zigbee.ColorControlFrameConfig object, описывающий полезную нагрузку кластера Управления цветом. Название команды получено из декодирования заголовка ZCL. Смотрите раздел 'Decoding ZCL Header of Home Automation ZigBee Radios' в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации.
colorCtrlConfigRx = zigbee.ColorControlFrameDecoder('Move to Color', colorControlPayload)
colorCtrlConfigRx = ColorControlFrameConfig with properties: CommandType: 'Move to Color' ColorX: 16384 ColorY: 39322 Time: 50
Следующая команда использует "лампу программного обеспечения", чтобы визуализировать эффект Управления цветом, заданный в принятом кадре. А именно, цвет лампы прогрессивно изменяется от красного до зеленого в течение 5 секунд.
zigbeeMoveBulbColor(bulb, colorCtrlConfigRx.ColorX, colorCtrlConfigRx.ColorY, colorCtrlConfigRx.Time);
Затем тот же эффект происходит на различной цветной траектории (от зеленого до фиолетового).
colorCtrlConfigTx2 = zigbee.ColorControlFrameConfig('CommandType', 'Move to Color', ... 'ColorX', 19661, 'ColorY', 6554, 'Time', 50); colorControlPayload2 = zigbee.ColorControlFrameGenerator(colorCtrlConfigTx2); colorCtrlConfigRx2 = zigbee.ColorControlFrameDecoder('Move to Color', colorControlPayload2); zigbeeMoveBulbColor(bulb, colorCtrlConfigRx2.ColorX, colorCtrlConfigRx2.ColorY, colorCtrlConfigRx2.Time); pause(1.5);
zigbee.LevelControlFrameConfig объект настройки используется и в генерации и в декодировании кластера Контроля уровня полезные нагрузки ZCL. Такие объекты описывают полезную нагрузку кластера Контроля уровня и все применимые свойства. Функция zigbee.LevelControlFrameGenerator принимает zigbee.LevelControlFrameConfig object, описывающий полезную нагрузку кластера Контроля уровня, и выводит сгенерированную полезную нагрузку в байтах. Следующий код создает полезную нагрузку кластера Контроля уровня, которая дает устройству команду изменять свой текущий уровень в заданное значение.
% Creation of Level Control cluster configuration object levelCtrlConfigTx = zigbee.LevelControlFrameConfig('CommandType', 'Move to Level', ... 'Level', 20, 'TransitionTime', 1); % Level Control cluster frame generation (ZCL payload) levelControlPayload = zigbee.LevelControlFrameGenerator(levelCtrlConfigTx);
Функция zigbee.LevelControlFrameDecoder принимает название команды и полезную нагрузку кластера Контроля уровня в байтах и выводит zigbee.LevelControlFrameConfig object, описывающий полезную нагрузку кластера Контроля уровня. Название команды получено из декодирования заголовка ZCL. Смотрите раздел 'Decoding ZCL Header of Home Automation ZigBee Radios' в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации.
levelCtrlConfigRx = zigbee.LevelControlFrameDecoder('Move to Level', levelControlPayload)
levelCtrlConfigRx = LevelControlFrameConfig with properties: CommandType: 'Move to Level' Level: 20 TransitionTime: 1
В то время как кластер Контроля уровня может использоваться, чтобы отрегулировать интенсивность света, кластер Управления цветом предоставляет кластеру Контроля уровня право управлять яркостью цвета устройства подсветки. Следующий пример использует принятый кадр Контроля уровня, чтобы увеличить уровень яркости лампочки.
zigbeeMoveBulbColor(bulb, colorCtrlConfigRx2.ColorX, colorCtrlConfigRx2.ColorY, 1, levelCtrlConfigRx.Level);
zigbee.SceneFrameConfig объект настройки используется и в генерации и в декодировании кластера Сцен полезные нагрузки ZCL. Такие объекты описывают полезную нагрузку кластера Сцен и все применимые свойства. Функция zigbee.ScenesFrameGenerator принимает zigbee.ScenesFrameConfig object, описывающий полезную нагрузку кластера Сцен, и выводит сгенерированную полезную нагрузку в байтах. Следующий код генерирует полезную нагрузку кластера Сцен, которая запрашивает устройство передать различный кадр (Ответ Сцены Представления) описание сцены.
% Creation of Scenes cluster configuration object scenesConfigTx = zigbee.ScenesFrameConfig('CommandType', 'View Scene', ... 'GroupID', '1234', 'SceneID', '56'); % Scenes cluster frame generation (ZCL payload) scenesPayload = zigbee.ScenesFrameGenerator(scenesConfigTx);
Функция zigbee.SceneFrameDecoder принимает название команды и полезную нагрузку кластера Сцен в байтах и выводит zigbee.SceneFrameConfig object, описывающий полезную нагрузку кластера Сцен. Название команды получено из декодирования заголовка ZCL. Смотрите раздел 'Decoding ZCL Header of Home Automation ZigBee Radios' в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации.
scenesConfigRx = zigbee.ScenesFrameDecoder('View Scene', scenesPayload)
scenesConfigRx = ScenesFrameConfig with properties: CommandType: 'View Scene' GroupID: '1234' SceneID: '56'
zigbee.GroupFrameConfig объект настройки используется и в генерации и в декодировании кластера Групп полезные нагрузки ZCL. Такие объекты описывают полезную нагрузку кластера Групп и все применимые свойства. Функция zigbee.GroupsFrameGenerator принимает zigbee.GroupsFrameConfig object, описывающий полезную нагрузку кластера Групп, и выводит сгенерированную полезную нагрузку в байтах. Следующий код создает полезную нагрузку кластера Групп, которая дает устройству команду добавлять заданную группу в свою таблицу Group.
% Creation of Groups cluster configuration object groupsConfigTx = zigbee.GroupsFrameConfig('CommandType', 'Add group', ... 'GroupName', 'Dining Hall', 'GroupID', '1234'); % Groups cluster frame generation (ZCL payload) groupsPayload = zigbee.GroupsFrameGenerator(groupsConfigTx);
Функция zigbee.GroupFrameDecoder принимает название команды и полезную нагрузку кластера Групп в байтах и выводит zigbee.GroupFrameConfig object, описывающий полезную нагрузку кластера Групп. Название команды получено из декодирования заголовка ZCL. Смотрите раздел 'Decoding ZCL Header of Home Automation ZigBee Radios' в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации.
groupsConfigRx = zigbee.GroupsFrameDecoder('Add group', groupsPayload)
groupsConfigRx = GroupsFrameConfig with properties: CommandType: 'Add group' GroupID: '1234' GroupName: 'Dining Hall'
Сгенерированные системы координат могут быть преобразованы в формат PCAP, который может анализироваться и визуализироваться с Wireshark [6]. Этот процесс может служить дополнительным шагом верификации, защищающим, что Библиотека Communications Toolbox для Протокола ZigBee генерирует и декодирует системы координат стандартно-совместимым способом.
Файлу PCAP нужны полезные нагрузки ZCL, которые будут заключены с заголовками от всех других слоев и подуровней (MAC, СЕТЕВОЙ, APS, ZCL). Следующие команды генерируют файл PCAP для полезных нагрузок ZCL, сгенерированных в этом примере, который может загрузиться с Wireshark.
% ZLL profile ID zllProfileID = zigbee.profileID('Light Link'); payloadsWithInfo(1) = struct('Payload', identifyPayload, 'ProfileID', zllProfileID, ... 'ClusterSpecific', true, 'ClusterID', zigbee.clusterID('Identify'), 'CommandType', 'Identify', 'Direction', 'Uplink'); payloadsWithInfo(2) = struct('Payload', colorControlPayload, 'ProfileID', zllProfileID, ... 'ClusterSpecific', true, 'ClusterID', zigbee.clusterID('Color Control'), 'CommandType', 'Move to Color', 'Direction', 'Uplink'); payloadsWithInfo(3) = struct('Payload', levelControlPayload, 'ProfileID', zllProfileID, ... 'ClusterSpecific', true, 'ClusterID', zigbee.clusterID('Level Control'), 'CommandType', 'Move to Level', 'Direction', 'Uplink'); payloadsWithInfo(4) = struct('Payload', scenesPayload, 'ProfileID', zllProfileID, ... 'ClusterSpecific', true, 'ClusterID', zigbee.clusterID('Scenes'), 'CommandType', 'View Scene', 'Direction', 'Uplink'); payloadsWithInfo(5) = struct('Payload', groupsPayload, 'ProfileID', zllProfileID, ... 'ClusterSpecific', true, 'ClusterID', zigbee.clusterID('Groups'), 'CommandType', 'Add group', 'Direction', 'Uplink'); % Add headers from other layers/sublayers: MPDUs = zigbeeAddProtocolHeaders(payloadsWithInfo); % Export MPDUs to a PCAP format zigbeeExportToPcap(MPDUs, 'zigbeeLightLink.pcap'); % Open PCAP file with Wireshark
Можно далее исследовать следующий генератор и декодирующие функции, а также объект настройки:
zigbee.APSFrameConfig, zigbee.APSFrameGenerator, zigbee.APSFrameDecoder
zigbee.ZCLFrameConfig, zigbee.ZCLFrameGenerator, zigbee.ZCLFrameDecoder
zigbee.IdentifyFrameConfig, zigbee.IdentifyFrameGenerator, zigbee.IdentifyFrameDecoder
zigbee.ColorControlFrameConfig, zigbee.ColorControlFrameGenerator, zigbee.ColorControlFrameDecoder
zigbee.LevelControlFrameConfig, zigbee.LevelControlFrameGenerator, zigbee.LevelControlFrameDecoder
zigbee.ScenesFrameConfig, zigbee.ScenesFrameGenerator, zigbee.ScenesFrameDecoder
zigbee.GroupsFrameConfig, zigbee.GroupsFrameGenerator, zigbee.GroupsFrameDecoder
В дополнение к командам, проиллюстрированным в этом примере, предлагаемая реализация также поддерживает команды, перечисленные в следующей таблице. Команды, перечисленные в среднем столбце, могут быть экспортированы в файл PCAP, который может анализироваться с Wireshark.
Союз ZigBee, Стандарт Ссылки Света ZigBee, v. 1.0, 5-го апреля 2012.
Союз ZigBee, документ 053474r17, 2007 спецификации ZigBee
IEEE 802.15.4-2011 - Стандарт IEEE для Локальных сетей и городских компьютерных сетей - Часть 15.4: Беспроводные Персональные Сети области С низкой ставкой (LR-WPANs)
Союз ZigBee, спецификация библиотеки кластера ZigBee, версия 6, январь 2016.
Цветовое пространство CIE 1931. Commission Internationale de l'Eclairage Proceedings. Издательство Кембриджского университета, Кембридж
Программное обеспечение Wireshark: https://www.wireshark.org /