ZigBee Smart Energy Системы координат генерация и декодирование

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

Фон

Стандарт ZigBee [2] задает сетевые (NET или NWK) и прикладные (APP или APL) слои низкоскоростных беспроводных персональных вычислительных сетей (LR-WPAN). Эти спецификации уровня NET и 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 Smart Energy ZCL.

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

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

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

  2. Ценовой кластер: Этот кластер передает информацию о ценах на энергию, газ или воду. Этот пример иллюстрирует генерацию и декодирование систем координат для команд Get Current Price и Publish Price (описанные в пункте 10.2.2.3.1 [4]).

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

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

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

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

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

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

Зигби. Объект строения PriceFrameConfig используется как при генерации, так и при декодировании полезных данных ZCL для кластера Price. Такие объекты описывают полезную нагрузку кластера 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. Смотрите раздел '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

Получив команду '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, описывающий полезную нагрузку Messagingclauster. Имя команды извлекается из декодирования заголовка 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

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

Сгенерированные системы координат обмена сообщениями могут быть преобразованы в PCAP-форматированный файл, который можно анализировать и визуализировать с помощью Wireshark [5]. Этот процесс может служить дополнительным шагом верификации, пропагандируя то, что библиотека Communications Toolbox для протокола 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 Alliance, ZigBee Smart Energy Standard, редакция 19, версия 1.2a, 3 декабря 2014 г.

  2. ZigBee Alliance, Технический документ ZigBee 053474r17, 2007

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

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

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

Для просмотра документации необходимо авторизоваться на сайте