ZigBee домашняя генерация кадра автоматизации и декодирование

Этот пример показывает, как сгенерировать и декодировать кадры прикладного уровня для Домашнего профиля приложений Автоматизации [1] из спецификации [2] ZigBee®, пользующейся Библиотекой Communications Toolbox™ для Протокола ZigBee.

Фон

Стандарт ZigBee [2] задает сеть (СЕТЕВОЙ или NWK) и приложение (APP или APL) слои для беспроводных персональных сетей области с низкой ставкой. Они СЕТЕВЫЕ - и спецификации слоя APP полагаются на PHY и спецификации MAC IEEE® 802.15.4™ [3]. Устройства ZigBee находят применение в домашней автоматизации и организации сети датчика и очень относятся к тренду Интернета вещей (IoT).

Прикладной уровень ZigBee состоит из нескольких подуровней: (i) Подуровень Поддержки приложений (APS) и (ii) Библиотека кластера ZigBee (ZCL). Подуровень APS следует за форматом, который характерен для всех профилей приложений и кластеров ZigBee (см. Пункт 2.2.5 в [2]). Заголовок ZCL следует за форматом, который характерен для всех кластеров (см. Пункт 2.4 в [4]). Полезная нагрузка ZCL используется только некоторыми кластерами, и она следует за кластерно-специфичным форматом.

Кластеры и получения кадра

Из всех кластеров, используемых в домашнем профиле приложений Автоматизации, этот пример декодирует и генерирует кадры для: (i) кластера Включения - выключения (используемый легкими устройствами) и (ii) кластера Зоны Системы сигнализации злоумышленника (IAS) (используемый датчиками движения) [4]. Кластер Включения - выключения не использует полезную нагрузку ZCL, но кластер Зоны IAS делает.

Кадры этих кластеров были получены от коммерческих радио ZigBee, разрешающих домашнюю автоматизацию, с помощью USRP® B200-мини-радио и Пакет Поддержки Communications Toolbox для радио USRP®. ZigBee может использовать безопасность или в сети или в прикладном уровне. Полученные кадры использовали безопасность на сетевом слое и были позже дешифрованы. Этот пример декодирует прикладной уровень дешифрованных полезных нагрузок СЕТЕВОГО слоя.

load zigbeeAPPCaptures

Декодирование кадров APS домашней автоматизации радио ZigBee

zigbee. Объект настройки APSFrameConfig используется и в генерации и в декодировании кадров ZigBee APS. Такие объекты описывают кадр слоя APS и задают его тип кадра и все применимые свойства. zigbee. Функция APSFrameDecoder принимает Модуль данных о протоколе APS (APDU) в байтах и выводит zigbee. Объект APSFrameConfig, описывающий кадр и возможно ZCL, структурирует в байтах. Пункт 2.2.5.1 в [2] описывает форматы кадра APS.

Затем, подуровень APS полученного кадра Зоны IAS декодируется:

[apsConfig, apsPayload] = zigbee.APSFrameDecoder(motionDetectedFrame);
apsConfig
apsConfig = 

  APSFrameConfig with properties:

                FrameType: 'Data'
               APSCounter: 230
    AcknowledgmentRequest: 1

   Addressing:
             DeliveryMode: 'Unicast'
      DestinationEndpoint: '01'
                ClusterID: '0500'
                ProfileID: '0104'
           SourceEndpoint: '01'

   Extended header:
           ExtendedHeader: 0

   Security:
                 Security: 0

Декодирование заголовка ZCL домашней автоматизации радио ZigBee

zigbee. Объект настройки ZCLFrameConfig используется и в генерации и в декодировании заголовков ZigBee ZCL. Такие объекты описывают кадр ZCL-слоя и задают его тип кадра и все применимые свойства.

zigbee. Функция ZCLFrameDecoder принимает кадр ZCL в байтах и выводит zigbee. Объект ZCLFrameConfig, описывающий заголовок и возможно полезную нагрузку ZCL в байтах. Пункт 2.4.1 в [4] описывает форматы кадра заголовка ZCL. Обратите внимание на то, что заголовок ZCL может или задать 'Всей библиотеки' или 'Кластерно-специфичный' тип команды. В последнем случае, zigbee. ZCLFrameDecoder также нужен кластерный ID, который присутствует в заголовке APS в порядке декодировать кластерно-специфичный ID команды в тип команды. Например, следующая команда декодирует заголовок ZCL полученного кадра Зоны IAS.

[zclConfig, zclPayload] = zigbee.ZCLFrameDecoder(apsPayload, apsConfig.ClusterID);
zclConfig
zclConfig = 

  ZCLFrameConfig with properties:

                 FrameType: 'Cluster-specific'
               CommandType: 'Zone Status Change Notification'
            SequenceNumber: 9
       ManufacturerCommand: 0
                 Direction: 'Downlink'
    DisableDefaultResponse: 0

Декодирование полезной нагрузки ZCL кадра зоны IAS от радио ZigBee

В отличие от кластера Включения - выключения, Кластер Зоны IAS задает полезную нагрузку ZCL в дополнение к заголовку ZCL. zigbee. Объект настройки IASZoneFrameConfig используется и в генерации и в декодировании Зоны IAS полезные нагрузки ZCL. Такие объекты описывают полезную нагрузку Зоны IAS и все применимые свойства. zigbee. Функция IASZoneFrameDecoder принимает полезную нагрузку Зоны IAS в байтах и выводит zigbee. Объект IASZoneFrameConfig, описывающий Зональную полезную нагрузку IAZ.

iasZoneConfig = zigbee.IASZoneFrameDecoder(zclPayload)
iasZoneConfig = 

  IASZoneFrameConfig with properties:

        CommandType: 'Zone Status Change Notification'
             ZoneID: 0
             Alarm1: 'Not alarmed'
             Alarm2: 'Alarmed'
           Tampered: 0
         LowBattery: 0
    PeriodicReports: 0
     RestoreReports: 1
            Trouble: 0
            ACFault: 0
      BatteryDefect: 0
           TestMode: 0
              Delay: 0

Декодирование инициированной движением автоматизации подсветки радио ZigBee

Автоматизация подсветки была установлена для коммерческой автоматизации дома радио ZigBee, кадры которых получались и декодировались. А именно, если датчик движения обнаруживает движение, это отправляет сигнал в концентратор ZigBee, который в свою очередь отправляет сигнал в лампочку так, чтобы это включило. Когда датчик движения обнаруживает, что движение остановилось (например, после 10 секунд без движения), это отправляет сигнал в концентратор ZigBee, который в свою очередь с помощью беспроводных технологий инициировал лампочку, чтобы выключить. Следующее видео иллюстрирует автоматизацию подсветки.

helperPlaybackVideo('LightingAutomation.mov', 2/5);

Следующий код декодирует фактические кадры, переданные между радио ZigBee. Они были получены с устройством USRP® (также показанный в видео).

apsFrames = {motionDetectedFrame; turnOnFrame; motionStoppedFrame; turnOffFrame};
for idx = 1:length(apsFrames)
  % APS decoding:
  [apsConfig, apsPayload] = zigbee.APSFrameDecoder(apsFrames{idx});
  % ZCL header decoding:
  [zclConfig, zclPayload] = zigbee.ZCLFrameDecoder(apsPayload, apsConfig.ClusterID);
  zclConfig

  % On-off cluster (does not have ZCL payload)
  onOffClusterID = '0006';
  if strcmp(apsConfig.ClusterID, onOffClusterID)
    fprintf(['Turn light bulb ' lower(zclConfig.CommandType) '.\n']);
  end

  % Intruder Alarm System (IAS) Zone cluster has ZCL payload:
  iasZoneClusterID = '0500';
  if ~isempty(zclPayload) && strcmp(apsConfig.ClusterID, iasZoneClusterID)
    iasConfig = zigbee.IASZoneFrameDecoder(zclPayload)

    if any(strcmp('Alarmed', {iasConfig.Alarm1, iasConfig.Alarm2}))
      fprintf('Motion detected.\n');
    else
      fprintf('Motion stopped.\n');
    end
  end
end
zclConfig = 

  ZCLFrameConfig with properties:

                 FrameType: 'Cluster-specific'
               CommandType: 'Zone Status Change Notification'
            SequenceNumber: 9
       ManufacturerCommand: 0
                 Direction: 'Downlink'
    DisableDefaultResponse: 0


iasConfig = 

  IASZoneFrameConfig with properties:

        CommandType: 'Zone Status Change Notification'
             ZoneID: 0
             Alarm1: 'Not alarmed'
             Alarm2: 'Alarmed'
           Tampered: 0
         LowBattery: 0
    PeriodicReports: 0
     RestoreReports: 1
            Trouble: 0
            ACFault: 0
      BatteryDefect: 0
           TestMode: 0
              Delay: 0

Motion detected.

zclConfig = 

  ZCLFrameConfig with properties:

                 FrameType: 'Cluster-specific'
               CommandType: 'On'
            SequenceNumber: 64
       ManufacturerCommand: 0
                 Direction: 'Uplink'
    DisableDefaultResponse: 0

Turn light bulb on.

zclConfig = 

  ZCLFrameConfig with properties:

                 FrameType: 'Cluster-specific'
               CommandType: 'Zone Status Change Notification'
            SequenceNumber: 10
       ManufacturerCommand: 0
                 Direction: 'Downlink'
    DisableDefaultResponse: 0


iasConfig = 

  IASZoneFrameConfig with properties:

        CommandType: 'Zone Status Change Notification'
             ZoneID: 0
             Alarm1: 'Not alarmed'
             Alarm2: 'Not alarmed'
           Tampered: 0
         LowBattery: 0
    PeriodicReports: 0
     RestoreReports: 1
            Trouble: 0
            ACFault: 0
      BatteryDefect: 0
           TestMode: 0
              Delay: 0

Motion stopped.

zclConfig = 

  ZCLFrameConfig with properties:

                 FrameType: 'Cluster-specific'
               CommandType: 'Off'
            SequenceNumber: 70
       ManufacturerCommand: 0
                 Direction: 'Uplink'
    DisableDefaultResponse: 0

Turn light bulb off.

Генерация зоны IAS полезные нагрузки ZCL

zigbee. Функция IASZoneFrameGenerator принимает zigbee. Объект IASZoneFrameConfig, описывающий полезную нагрузку Зоны IAS и выходные параметры полезная нагрузка в байтах. Следующий код создает две полезных нагрузки ZCL для этого кластера, указывающего, что проникновение имеет или не было обнаружено.

iasConfigIntrusion = zigbee.IASZoneFrameConfig('Alarm2', 'Alarmed');
zclPayloadIntrusion = zigbee.IASZoneFrameGenerator(iasConfigIntrusion);

iasConfigNoIntrusion = zigbee.IASZoneFrameConfig('Alarm2', 'Not alarmed');
zclPayloadNoIntrusion = zigbee.IASZoneFrameGenerator(iasConfigNoIntrusion);

Генерация кадры ZCL

zigbee. Функция ZCLFrameGenerator принимает zigbee. Объект ZCLFrameConfig, описывающий кадр, и опционально полезную нагрузку ZCL в байтах (2D символы) и выходные параметры ZCL, структурирует в байтах. Следующий код генерирует кадры ZCL для кластера Включения - выключения (никакая полезная нагрузка) и кластера Зоны IAS (необходимая полезная нагрузка).

% IAS Zone Cluster
zclConfigIntrusion = zigbee.ZCLFrameConfig('FrameType', 'Cluster-specific', ...
                                           'CommandType', 'Zone Status Change Notification', ...
                                           'SequenceNumber', 1, 'Direction', 'Downlink');
zclFrameIntrusion = zigbee.ZCLFrameGenerator(zclConfigIntrusion, zclPayloadIntrusion);

% On/Off Cluster
zclConfigOn = zigbee.ZCLFrameConfig('FrameType', 'Cluster-specific', ...
                                    'CommandType', 'On', ...
                                    'SequenceNumber', 2, 'Direction', 'Uplink');
zclFrameOn = zigbee.ZCLFrameGenerator(zclConfigOn);

Генерация кадров APS

zigbee. Функция APSFrameGenerator принимает zigbee. Объект APSFrameConfig, описывающий кадр, и опционально полезную нагрузку APS (кадр ZCL-слоя) в байтах (2D символы) и выходные параметры кадр APS в байтах. Следующий код иллюстрирует, как сгенерировать кадры APS для кадров ZCL, созданных в предыдущем разделе.

% IAS Zone Cluster
apsConfigIntrusion = zigbee.APSFrameConfig('FrameType', 'Data', ...
                                           'ClusterID', iasZoneClusterID, ...
                                           'ProfileID', zigbee.profileID('Home Automation'), ...
                                           'APSCounter', 1, ...
                                           'AcknowledgmentRequest', true);
apsFrameIntrusion = zigbee.APSFrameGenerator(apsConfigIntrusion, zclFrameIntrusion);

% On/Off cluster
apsConfigOn = zigbee.APSFrameConfig('FrameType', 'Data', ...
                                    'ClusterID', onOffClusterID, ...
                                    'ProfileID', zigbee.profileID('Home Automation'), ...
                                    'APSCounter', 2, ...
                                    'AcknowledgmentRequest', true);
apsFrameOn = zigbee.APSFrameGenerator(apsConfigOn, zclFrameOn);

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

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

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

  1. Союз ZigBee, ZigBee Домашний Профиль приложений Общественности Автоматизации, версия 29, v. 1.2, июнь 2013.

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

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

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