exponenta event banner

Генерация и декодирование кадров интеллектуальной энергии ZigBee

В этом примере показано, как генерировать и декодировать кадры ZigBee ® Smart Energy с помощью библиотеки Communications Toolbox™ Library для протокола ZigBee.

Фон

Стандарт ZigBee [2] определяет сетевые (NET или NWK) и прикладные (APP или APL) уровни низкоскоростных беспроводных персональных сетей (LR-WPAN). Эти спецификации уровня NET- и APP основаны на спецификациях PHY и MAC IEEE ® 802.15.4™ [3]. Устройства ZigBee находят применение в домашней автоматизации и создании сетей датчиков и имеют большое значение для развития Интернета вещей.

Прикладной уровень ZigBee состоит из нескольких подуровней: (i) подуровня поддержки приложений (APS) и (ii) кластерной библиотеки ZigBee (ZCL).

Заголовки APS и ZCL имеют формат, общий для всех профилей приложений и кластеров ZigBee (см. пункты 2.2.5 в [2] и 2.4 в [4] соответственно). Полезная нагрузка ZCL используется только некоторыми кластерами и соответствует специфичному для кластера формату. Генерация и декодирование общих APS и ZCL заголовков проиллюстрированы в примере генерации и декодирования кадров домашней автоматизации ZigBee. Этот пример иллюстрирует генерацию и декодирование полезных нагрузок ZigBee Smart Energy ZCL для конкретного кластера.

Кластеры и команды

Из 7 кластеров, используемых в профиле приложения Smart Energy, этот пример генерирует и декодирует кадры для следующих кластеров:

  1. Кластер Demand Response and Load Control (DRLC): этот кластер рекламирует изменения спроса и потребления энергии. Этот пример иллюстрирует формирование и декодирование кадров для команды Load Control Event (описано в пункте 10.3.2.3.1 [4]).

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

  3. Кластер обмена сообщениями: этот кластер обменивается текстовыми сообщениями между устройствами ZigBee. В этом примере показано формирование и декодирование кадров для команды Display Message (см. раздел 10.5.2.3.1 в [4]).

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

Формирование и декодирование полезной нагрузки ZCL кластера DRLC

Зигби. Объект конфигурации DRLCFrameConfig используется как при генерации, так и при декодировании полезных нагрузок ZCL для кластера DRLC. Такие объекты описывают полезную нагрузку кластера DRLC и все применимые свойства. Зигби. Функция DRLCFrameGenerator принимает зигби. Объект 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);

Зигби. Функция DRLCFrameDecoder принимает имя команды и полезную нагрузку кластера DRLC в байтах и выводит zigbee. Объект DRLCFrameConfig, описывающий полезную нагрузку кластера DRLC. Имя команды извлекается из декодирования заголовка ZCL. См. раздел «Декодирование заголовка ZCL домашних радиостанций автоматизации ZigBee» в примере генерации и декодирования кадров домашней автоматизации 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

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

Зигби. Объект конфигурации PriceFrameConfig используется как при генерации, так и при декодировании полезных нагрузок ZCL для кластера Price. Такие объекты описывают полезную нагрузку ценового кластера и все применимые свойства. Зигби. Функция PriceFrameGenerator принимает zigbee. Объект PriceFrameConfig, описывающий полезную нагрузку кластера Price и выводящий полезную нагрузку в байтах. Следующий код создает полезную нагрузку ZCL для команды, которая запрашивает текущую цену товара.

% Creation of Price cluster configuration object
priceConfigTx = zigbee.PriceFrameConfig('CommandType', 'Get Current Price');

% Price cluster frame generation (ZCL payload)
pricePayload = zigbee.PriceFrameGenerator(priceConfigTx);

Зигби. Функция PriceFrameDecoder принимает имя команды и полезную нагрузку кластера Price в байтах и выводит zigbee. Объект PriceFrameConfig, описывающий полезную нагрузку кластера Price. Имя команды извлекается из декодирования заголовка ZCL. См. раздел «Декодирование заголовка ZCL домашних радиостанций автоматизации ZigBee» в примере генерации и декодирования кадров домашней автоматизации ZigBee.

priceConfigRx = zigbee.PriceFrameDecoder('Get Current Price', pricePayload)
priceConfigRx = 

  PriceFrameConfig with properties:

      CommandType: 'Get Current Price'
    IdleReceiving: 0

Получив команду «Get Current Price», сервер отвечает командой «Publish Price».

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 кластера обмена сообщениями

Зигби. Объект конфигурации MessagingFrameConfig используется как при генерации, так и при декодировании полезных нагрузок ZCL для кластера Messaging. Такие объекты описывают полезную нагрузку кластера обмена сообщениями и все применимые свойства. Зигби. Функция MessagingFrameGenerator принимает zigbee. Объект MessagingFrameConfig, описывающий полезную нагрузку кластера Messaging и выводящий полезную нагрузку в байтах. Следующий код создает полезную нагрузку 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);

Зигби. Функция MessagingFrameDecoder принимает имя команды и полезную нагрузку кластера Messaging в байтах и выводит zigbee. Объект MessagingFrameConfig, описывающий полезную нагрузку кластера сообщений. Имя команды извлекается из декодирования заголовка ZCL. См. раздел «Декодирование заголовка ZCL домашних радиостанций автоматизации ZigBee» в примере генерации и декодирования кадров домашней автоматизации 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);

Затем клиенты могут декодировать команду Cancel Message:

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 Library для протокола ZigBee генерировала и декодировала кадры в соответствии со стандартами.

Файл PCAP должен содержать полезные нагрузки ZCL с заголовками всех других уровней и подуровней (MAC, NET, 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.2а, 3 декабря 2014 г.

  2. Альянс ZigBee, Документ спецификации ZigBee 053474r17, 2007

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

  4. Альянс ZigBee, спецификация кластерной библиотеки ZigBee, редакция 6, январь 2016 г.

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