ZigBee умная энергетическая генерация кадра и декодирование

Этот пример показывает, как сгенерировать и декодировать кадры 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 кластеров, используемых в Умном энергетическом профиле приложений, этот пример генерирует и декодирует кадры для следующих кластеров:

  1. Потребуйте Ответа и Управления нагрузкой (DRLC) кластер: Этот кластер рекламирует изменения в энергопотреблении и потреблении. Этот пример иллюстрирует генерацию кадра и декодирующий для команды События Управления нагрузкой (описанный в Пункте 10.3.2.3.1 [4]).

  2. Ценовой кластер: Этот кластер передает энергию, информацию о Газовой или Цене на воду. Этот пример иллюстрирует генерацию кадра и декодирующий за Получить Текущую цену, и Опубликуйте Ценовые команды (описанный в Пункте 10.2.2.3.1 [4]).

  3. Обмен сообщениями кластера: Этот кластер обменивается текстовыми сообщениями между устройствами ZigBee. Этот пример иллюстрирует генерацию кадра и декодирующий для команды сообщения Отображения (описанный в Пункте 10.5.2.3.1 [4]).

В дополнение к проиллюстрированным командам реализация, предлагаемая в этом примере также, генерирует и декодирует кадры следующих команд:

Генерация и декодирование полезной нагрузки ZCL кластера DRLC

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

Генерация и декодирование полезной нагрузки ZCL ценового кластера

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

Генерация и декодирование полезной нагрузки ZCL обмена сообщениями кластера

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

Декодирование Wireshark

Сгенерированные кадры Обмена сообщениями могут быть преобразованы в 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

Дальнейшее исследование

Можно далее исследовать следующий генератор и декодирующие функции, а также объект настройки:

Выбранная библиография

  1. Союз ZigBee, ZigBee умный энергетический стандарт, версия 19, версия 1.2a, 3 декабря 2014.

  2. Союз ZigBee, документ 053474r17, 2007 спецификации ZigBee

  3. IEEE 802.15.4-2011 - Стандарт IEEE для Локальных сетей и городских компьютерных сетей - Часть 15.4: Беспроводные Персональные Сети области С низкой ставкой (LR-WPANs)

  4. Союз ZigBee, спецификация библиотеки кластера ZigBee, версия 6, январь 2016.

  5. Программное обеспечение Wireshark: https://www.wireshark.org/