В этом примере показано, как сгенерировать и декодировать системы координат ZigBee® Smart Energy, пользующиеся Библиотекой 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 кластеров, используемых в Умном энергетическом профиле приложений, этот пример генерирует и декодирует системы координат для следующих кластеров:
Потребуйте Ответа и Управления нагрузкой (DRLC) кластер: Этот кластер рекламирует изменения в энергопотреблении и потреблении. Этот пример иллюстрирует генерацию системы координат и декодирующий для команды События Управления нагрузкой (описанный в Пункте 10.3.2.3.1 [4]).
Ценовой кластер: Этот кластер передает энергию, информацию о Газовой или Цене на воду. Этот пример иллюстрирует генерацию системы координат и декодирующий за Получить Текущую цену, и Опубликуйте Ценовые команды (описанный в Пункте 10.2.2.3.1 [4]).
Обмен сообщениями кластера: Этот кластер обменивается текстовыми сообщениями между устройствами ZigBee. Этот пример иллюстрирует генерацию системы координат и декодирующий для команды сообщения Отображения (описанный в Пункте 10.5.2.3.1 [4]).
В дополнение к проиллюстрированным командам реализация, предлагаемая в этом примере также, генерирует и декодирует системы координат следующих команд:
zigbee.DRLCFrameConfig объект настройки используется и в генерации и в декодировании полезные нагрузки ZCL для Ответа Спроса и Управления нагрузкой (DRLC) кластер. Такие объекты описывают кластерную полезную нагрузку DRLC и все применимые свойства. Функция zigbee.DRLCFrameGenerator принимает zigbee.DRLCFrameConfig object, описывающий кластерную полезную нагрузку DRLC, и выводит полезную нагрузку в байтах. Следующий код создает полезную нагрузку ZCL для команды, которая устанавливает сетбол нагревающихся устройств к 23.5 C.
% Creation of DRLC cluster configuration object drlcConfigTx = zigbee.DRLCFrameConfig('CommandType', 'Load Control Event', ... 'EventID', '00000001', 'DeviceClass', 'Strip Heaters/Baseboard Heaters', ... 'HeatingSetPoint', 23.5); % DRLC cluster frame generation (ZCL payload) drlcPayload = zigbee.DRLCFrameGenerator(drlcConfigTx);
Функция zigbee.DRLCFrameDecoder принимает название команды и кластерную полезную нагрузку DRLC в байтах и выводит zigbee.DRLCFrameConfig object, описывающий кластерную полезную нагрузку DRLC. Название команды получено из декодирования заголовка ZCL. Смотрите раздел 'Decoding ZCL Header of Home Automation ZigBee Radios' в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации.
drlcConfigRx = zigbee.DRLCFrameDecoder('Load Control Event', drlcPayload)
drlcConfigRx = DRLCFrameConfig with properties: CommandType: 'Load Control Event' EventID: '00000001' DeviceClass: 'Strip Heaters/Baseboard Heaters' DeviceGroup: '00' Time: 0 Duration: 0 CriticalityLevel: 'Green' HeatingSetPoint: 23.5000 RandomStart: 1 RandomEnd: 1
zigbee.PriceFrameConfig объект настройки используется и в генерации и в декодировании полезные нагрузки ZCL для кластера Прайса. Такие объекты описывают полезную нагрузку кластера Прайса и все применимые свойства. Функция zigbee.PriceFrameGenerator принимает zigbee.PriceFrameConfig object, описывающий полезную нагрузку кластера Прайса, и выводит полезную нагрузку в байтах. Следующий код создает полезную нагрузку ZCL для команды, которая запрашивает текущую цену товара.
% Creation of Price cluster configuration object priceConfigTx = zigbee.PriceFrameConfig('CommandType', 'Get Current Price'); % Price cluster frame generation (ZCL payload) pricePayload = zigbee.PriceFrameGenerator(priceConfigTx);
Функция zigbee.PriceFrameDecoder принимает название команды и полезную нагрузку кластера Прайса в байтах и выводит zigbee.PriceFrameConfig object, описывающий полезную нагрузку кластера Прайса. Название команды получено из декодирования заголовка ZCL. Смотрите раздел 'Decoding ZCL Header of Home Automation ZigBee Radios' в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации.
priceConfigRx = zigbee.PriceFrameDecoder('Get Current Price', pricePayload)
priceConfigRx = PriceFrameConfig with properties: CommandType: 'Get Current Price' IdleReceiving: 0
После получения 'Получают Текущую цену' команда, сервер отвечает с, 'Публикуют Цену' команда.
priceConfigTx = zigbee.PriceFrameConfig('CommandType', 'Publish Price', 'Price', 0.4899, 'Duration', 14400); pricePayload = zigbee.PriceFrameGenerator(priceConfigTx);
Клиентское устройство может затем декодировать опубликованную цену:
priceConfigRx = zigbee.PriceFrameDecoder('Publish Price', pricePayload)
priceConfigRx = PriceFrameConfig with properties: CommandType: 'Publish Price' ProviderID: 0 RateLabel: '' EventID: 0 GenerationTime: 0 Unit: 'kW' UnitFormat: 'Binary' Currency: 840 PriceTier: 1 RegisterTier: 1 NumPriceTiers: 0 StartTime: 0 Duration: 14400 Price: 0.4899
zigbee.MessagingFrameConfig объект настройки используется и в генерации и в декодировании полезные нагрузки ZCL для Обменивающегося сообщениями кластера. Такие объекты описывают Обменивающуюся сообщениями кластерную полезную нагрузку и все применимые свойства. Функция zigbee.MessagingFrameGenerator принимает zigbee.MessagingFrameConfig object, описывающий Обменивающуюся сообщениями кластерную полезную нагрузку, и выводит полезную нагрузку в байтах. Следующий код создает полезную нагрузку ZCL для команды, которая отображает сообщение.
% Creation of messaging cluster configuration object messageID = 1234; messagingConfigTx = zigbee.MessagingFrameConfig('CommandType', 'Display Message', ... 'MessageID', messageID, 'Message', 'This is a custom message', 'Duration', 90); % Messaging cluster frame generation (ZCL payload) displayMessagePayload = zigbee.MessagingFrameGenerator(messagingConfigTx);
Функция zigbee.MessagingFrameDecoder принимает название команды и Обменивающуюся сообщениями кластерную полезную нагрузку в байтах и выводит zigbee.MessagingFrameConfig object, описывающий полезную нагрузку Messagingcluster. Название команды получено из декодирования заголовка ZCL. Смотрите раздел 'Decoding ZCL Header of Home Automation ZigBee Radios' в ZigBee Домашний пример Генерации и Декодирования Системы координат Автоматизации.
messagingConfigRx = zigbee.MessagingFrameDecoder('Display Message', displayMessagePayload)
messagingConfigRx = MessagingFrameConfig with properties: CommandType: 'Display Message' MessageID: 1234 TransmissionType: 'Normal Transmission Only' Priority: 'Low' MessageConfirmation: 0 Duration: 90 Message: 'This is a custom message'
Сервер, который отображает сообщение также, имеет способность отменить сообщение с помощью "команды" сообщения Отмены:
cancelMsgConfig = zigbee.MessagingFrameConfig('CommandType', 'Cancel Message', ... 'MessageID', messageID); cancelMessagePayload = zigbee.MessagingFrameGenerator(messagingConfigTx);
Клиенты могут затем декодировать команду сообщения Отмены:
messagingConfigRx = zigbee.MessagingFrameDecoder('Cancel Message', cancelMessagePayload)
messagingConfigRx = MessagingFrameConfig with properties: CommandType: 'Cancel Message' MessageID: 1234 TransmissionType: 'Normal Transmission Only' Priority: 'Low' MessageConfirmation: 0
Сгенерированные системы координат Обмена сообщениями могут быть преобразованы в PCAP-отформатированный файл, который может анализироваться и визуализироваться с Wireshark [5]. Этот процесс может служить дополнительным шагом верификации, защищающим, что Библиотека Communications Toolbox для Протокола ZigBee генерирует и декодирует системы координат стандартно-совместимым способом.
Файлу PCAP нужны полезные нагрузки ZCL, которые будут заключены с заголовками от всех других слоев и подуровней (MAC, СЕТЕВОЙ, APS, ZCL). Эта задача выполняется следующими командами.
zllProfileID = zigbee.profileID('Smart Energy'); % ZLL profile ID msgClusterID = zigbee.clusterID('Messaging'); % Messaging cluster ID payloadsWithInfo(1) = struct('Payload', displayMessagePayload, 'ProfileID', zllProfileID, ... 'ClusterSpecific', true, 'ClusterID', msgClusterID, 'CommandType', 'Display Message', 'Direction', 'Downlink'); payloadsWithInfo(2) = struct('Payload', cancelMessagePayload, 'ProfileID', zllProfileID, ... 'ClusterSpecific', true, 'ClusterID', msgClusterID, 'CommandType', 'Cancel Message', 'Direction', 'Downlink'); % Add headers from other layers/sublayers: MPDUs = zigbeeAddProtocolHeaders(payloadsWithInfo); % Export MPDUs to a PCAP format zigbeeExportToPcap(MPDUs, 'zigbeeSmartEnergy.pcap'); % Open PCAP file with Wireshark
Можно далее исследовать следующий генератор и декодирующие функции, а также объект настройки:
zigbee.DRLCFrameConfig, zigbee.DRLCFrameGenerator, zigbee.DRLCFrameDecoder
zigbee.PriceFrameConfig, zigbee.PriceFrameGenerator, zigbee.PriceFrameDecoder
zigbee.MessagingFrameConfig, zigbee.MessagingFrameGenerator, zigbee.MessagingFrameDecoder
zigbee.APSFrameConfig, zigbee.APSFrameGenerator, zigbee.APSFrameDecoder
zigbee.ZCLFrameConfig, zigbee.ZCLFrameGenerator, zigbee.ZCLFrameDecoder
Союз ZigBee, ZigBee умный энергетический стандарт, версия 19, версия 1.2a, 3 декабря 2014.
Союз ZigBee, документ 053474r17, 2007 спецификации ZigBee
IEEE 802.15.4-2011 - Стандарт IEEE для Локальных сетей и городских компьютерных сетей - Часть 15.4: Беспроводные Персональные Сети области С низкой ставкой (LR-WPANs)
Союз ZigBee, спецификация библиотеки кластера ZigBee, версия 6, январь 2016.
Программное обеспечение Wireshark: https://www.wireshark.org /