Этот пример показывает, как сгенерировать и декодировать кадры 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, описывающий кластерную полезную нагрузку 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, описывающий кластерную полезную нагрузку DRLC. Название команды получено из декодирования заголовка ZCL.
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, описывающий полезную нагрузку кластера Прайса и выходные параметры полезная нагрузка в байтах. Следующий код создает полезную нагрузку 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, описывающий полезную нагрузку кластера Прайса. Название команды получено из декодирования заголовка ZCL.
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, описывающий Обменивающуюся сообщениями кластерную полезную нагрузку и выходные параметры полезная нагрузка в байтах. Следующий код создает полезную нагрузку 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, описывающий полезную нагрузку Messagingcluster. Название команды получено из декодирования заголовка ZCL.
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/