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

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

Фон

Стандарт 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 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

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

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

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

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

Декодирование 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 /

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