Расширенная платформа ZCL (ZAP)

ZCL Advanced Platform (ZAP) — это шаблонизатор node.js, основанный на Matter Clusters .

ZAP предоставляет следующие функции для приложений и SDK Matter :

  • Настройте конечные точки Matter , кластеры, атрибуты и другие функции устройства с помощью графического интерфейса.
  • Создавайте шаблоны, которые автоматически генерируют определения модели данных, обратные вызовы и другой исходный код Matter .
  • Создавайте и используйте предварительно настроенные ZAP-файлы для включения в ваши SDK.
Инструмент ZAP

Установить

  1. Перейдите на страницу релизов ZAP .

  2. Найдите релиз с тегом «Последний» (большинство будут иметь тег «Предварительный релиз»).

  3. В этом выпуске под заголовком Активы выберите пакет, предназначенный для вашей операционной системы, и загрузите его.

  4. На машине под управлением Debian или Ubuntu установите ZAP, выполнив следующую команду:

    sudo dpkg -i path/to/zap_installation_package

В Debian или Ubuntu Linux исполняемый файл zap устанавливается в /usr/bin/ . В других операционных системах исполняемый файл может быть установлен в другом месте. В любом случае, убедитесь, что путь к исполняемому файлу указан в переменной окружения PATH .

ZAP-файлы

ZAP использует файлы шаблонов, называемые ZAP-файлами. ZAP-файл — это JSON-файл, определяющий конечные точки, команды, атрибуты и другие функции устройства. Имена ZAP-файлов заканчиваются на .zap . Например, lighting-app.zap находится в connectedhomeip/examples/lighting-app/lighting-common .

Файл all-clusters-app.zap , находящийся в connectedhomeip/examples/all-clusters-app/all-clusters-common , предварительно настроен на использование стандартных кластеров Matter и трёх конечных точек, включая устройство Matter Secondary Network Commissioning Device. Это хороший пример для изучения различных конфигураций кластера.

Бегать

  1. Выберите ZAP-файл из одного из примеров Matter .
  2. Из корневого каталога репозитория Matter ( connectedhomeip ) запустите скрипт-оболочку run_zaptool.sh , передав ему путь к файлу .zap .

Например:

./scripts/tools/zap/run_zaptool.sh ./examples/lighting-app/lighting-common/lighting-app.zap

Настраивать

В настройках можете настроить пользовательский интерфейс ZAP, включая выбор светлой или темной темы, а также включить или отключить инструменты разработчика.

Нажав «Параметры , вы можете выбрать производителя продукта , политику реагирования по умолчанию , а также включить или отключить обнаружение команд.

Глобальные опции ZAP

Щелкните расширение , чтобы добавить пользовательские кластеры ZCL или команды в конфигуратор кластеров Zigbee.

Использовать

Конечные точки

Файл lighting-app.zap предварительно настроен с использованием корневого узла Matter ( конечная точка - 0 ) и регулируемого светильника Matter ( конечная точка - 1 ).

Конечная точка - 0 включает общие кластеры, которые относятся ко всему узлу, например, сетевые, ввод в эксплуатацию, дескрипторные, эксплуатационные учетные данные и кластеры OTA.

Конечная точка ZAP 0

На следующих этапах вы рассмотрите и настроите Endpoint - 1 Matter Dimmable Light из примера lighting-app .

  1. Из репозитория Matter connectedhomeip запустите ZAP.

    scripts/tools/zap/run_zaptool.sh \
    examples/lighting-app/lighting-common/lighting-app.zap
  2. Нажмите Конечная точка - 1 , затем EDIT .

  3. Необязательно: Matter поддерживает различные типы устройств. В раскрывающемся списке «Устройство» начните вводить matter , чтобы изменить устройство, затем нажмите «СОХРАНИТЬ» .

    ZAP Выберите устройство

Более подробную информацию см. в разделе «Устройства и конечные точки» руководства Matter Primer.

Кластеры

Предопределенные параметры кластеров, атрибутов и отчетов включены в конечной точке 1 по умолчанию.

Чтобы отобразить только включённые кластеры, нажмите «Конечная точка - 1» и выберите «Включённые кластеры» в меню «Показать» . Вы также можете выполнить кластеров по имени, например, on .

Кластеры с поддержкой ZAP

Чтобы включить любой кластер как клиент , сервер или клиент-сервер , используйте раскрывающийся список «Включить» . Вы также можете выбрать «Не включен» , чтобы отключить предварительно настроенный кластер, не соответствующий вашему типу устройства.

ZAP отключить кластер

Более подробную информацию можно найти в книге « Кластеры в Matter ».

Атрибуты и команды

Чтобы настроить атрибуты и команды, выполните следующие действия:

  1. Найдите кластер On/Off .
  2. В этой же строке нажмите на значок «Настроить ».

    ZAP Настроить

Здесь вы можете включить или отключить атрибуты, задать различные параметры атрибутов, а также выполнить атрибутов по имени.

Атрибуты ZAP

Нажмите «Команды» , чтобы настроить действия для этого кластера. Например, кластер «Вкл/Выкл» для освещения будет включать команды «Вкл» , «Выкл » и «Переключить» . Некоторые кластеры, например, кластер Temperature Measurement , могут не иметь связанных команд.

Команды ZAP

Более подробную информацию см. в разделе «Атрибуты и команды» в руководстве Matter Primer.

Генерация исходных файлов ZAP

Примеры Matter используют исходный код, сгенерированный ZAP, доступный в каталоге connectedhomeip/zzz_generated . Некоторые файлы относятся к конкретному приложению, а другие общие ZAP-файлы сгруппированы в app-common .

#include <app-common/zap-generated/ids/Attributes.h>
#include <app-common/zap-generated/ids/Clusters.h>

После настройки конечных точек вы можете сгенерировать исходные файлы для интеграции в свой проект.

  1. Нажмите Сгенерировать .
  2. Выберите папку для сохранения выходных данных ZAP. Например, для файла lighting lighting-app перейдите в connectedhomeip/zzz_generated/lighting-app/zap-generated .
  3. Необязательно . Откройте файлы в предпочитаемой вами среде разработки (IDE).

ZAP генерирует определения, функции и другой исходный код, соответствующий типу вашего устройства и конфигурации ZAP.

Файлы, созданные ZAP

Например, callback-stub.cpp включает метод обратного вызова Cluster, который включает только те кластеры, которые вы включили:

void emberAfClusterInitCallback(EndpointId endpoint, ClusterId clusterId)
{
    switch (clusterId)
    {
     ...
     case ZCL_ON_OFF_CLUSTER_ID :
        emberAfOnOffClusterInitCallback(endpoint);
        break;
     ...
    }
}

Использовать исходные файлы ZAP

Общие исходные файлы ZAP, например Attributes.h в zzz_generated/app-common/app-common/zap-generated/ids/ , можно использовать для получения и установки атрибутов типа устройства:

Атрибуты.h

namespace DeviceTemperatureConfiguration {
  namespace Attributes {

  namespace CurrentTemperature {
    static constexpr AttributeId Id = 0x00000000;
    } // namespace CurrentTemperature

  ...

  } // namespace Attributes
} // namespace DeviceTemperatureConfiguration

main.cpp

#include <app-common/zap-generated/att-storage.h>
#include <app-common/zap-generated/attribute-id.h>
#include <app-common/zap-generated/attribute-type.h>
#include <app-common/zap-generated/attributes/Accessors.h>
#include <app-common/zap-generated/callback.h>
#include <app-common/zap-generated/cluster-id.h>
#include <app-common/zap-generated/cluster-objects.h>
#include <app-common/zap-generated/command-id.h>

using namespace ::chip;
using namespace ::chip::app::Clusters;

static void InitServer(intptr_t context)
{
    ...

    // Sets temperature to 20C
    int16_t temperature = 2000;
    auto status         = DeviceTemperatureConfiguration::Attributes::CurrentTemperature::Set(1, temperature);
    if (status != EMBER_ZCL_STATUS_SUCCESS)
    {
        ChipLogError(Shell, "Temp measurement set failed");
    }
}

Как только вы поймете, как использовать файлы ZAP в исходном коде Matter , вы сможете интегрировать ZAP несколькими способами:

  • Используйте существующие файлы zzz_generated для создания новых примеров, уникальных для ваших типов устройств.
  • Создавайте пользовательские файлы .zap для своих проектов.

Настроить

ZAP-файлы генерируются на основе шаблонов ZAP . При запуске ZAP с помощью run_zaptool.sh этот скрипт передаёт следующие шаблоны:

node src-script/zap-start.js --logToStdout \
    --gen "$CHIP_ROOT/src/app/zap-templates/app-templates.json" \
    --zcl "$CHIP_ROOT/src/app/zap-templates/zcl/zcl.json" \
    "${ZAP_ARGS[@]}"

templates.json определяет имя шаблона Matter и соответствующий выходной файл, используемый в примерах Matter .

{
    "path": "templates/app/callback-stub-src.zapt",
    "name": "ZCL callback-stub source",
    "output": "callback-stub.cpp"
}

Чтобы настроить решения Matter , при работе с ZAP вы можете выполнить несколько следующих шагов:

Ресурсы

Дополнительные ресурсы ZAP можно найти в репозитории ZAP ( zap ) на GitHub.