ZCL Advanced Platform (ZAP)

ZCL Advanced Platform (ZAP) es un motor de plantillas de Node.js basado en clústeres de Matter.

ZAP proporciona las siguientes funciones para las apps y los SDKs de Matter:

  • Configura Matter extremos, clústeres, atributos y otras funciones del dispositivo desde una interfaz gráfica de usuario.
  • Crea plantillas que generen automáticamente definiciones de modelos de datos, devoluciones de llamada y otro código fuente de Matter.
  • Crea y usa archivos ZAP preconfigurados para incluirlos en tus SDKs.
Herramienta de ZAP

Instalar

  1. Ve a la página Versiones de ZAP.

  2. Busca la versión etiquetada como "Latest" (la mayoría estarán etiquetadas como "Pre-release").

  3. En esta versión, en el encabezado Assets, selecciona el paquete designado para tu sistema operativo y descárgalo.

  4. En una máquina que ejecute Debian o Ubuntu, instala ZAP con el siguiente comando:

    sudo dpkg -i path/to/zap_installation_package

En Debian o Ubuntu Linux, el objeto binario zap se instala en /usr/bin/. En otros sistemas operativos, es posible que el archivo binario se instale en otro lugar. En cualquier caso, verifica que la ubicación del archivo ejecutable se encuentre en tu variable de entorno PATH.

Archivos ZAP

ZAP usa archivos de plantilla llamados archivos ZAP. Un archivo ZAP es un archivo JSON que define extremos, comandos, atributos y otras funciones del dispositivo. Los archivos ZAP tienen nombres que terminan en .zap. Por ejemplo, lighting-app.zap en connectedhomeip/examples/lighting-app/lighting-common.

El archivo all-clusters-app.zap, que se encuentra en connectedhomeip/examples/all-clusters-app/all-clusters-common, está preconfigurado con clústeres Matter comunes y tres extremos, incluido un tipo de dispositivo de puesta en marcha de red secundaria Matter. Este es un buen ejemplo para explorar varias configuraciones de clúster.

Ejecutar

  1. Elige un archivo ZAP de uno de los ejemplos de Matter.
  2. Desde el directorio raíz del repositorio de Matter (connectedhomeip), ejecuta la secuencia de comandos de wrapper run_zaptool.sh y pásale la ruta de acceso al archivo .zap.

Por ejemplo:

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

Configurar

En Configuración, puedes configurar la interfaz de usuario de ZAP, incluida tu elección de tema claro u oscuro, y habilitar o inhabilitar las herramientas para desarrolladores.

Si haces clic en Opciones, puedes seleccionar el fabricante del producto, la política de respuesta predeterminada y habilitar o inhabilitar la detección de comandos.

Opciones globales de ZAP

Haz clic en Extensiones para agregar clústeres o comandos de ZCL personalizados al Configurador de clústeres de Zigbee.

Usar

Extremos

El archivo lighting-app.zap ya está configurado previamente con un nodo raíz Matter (Endpoint - 0) y una luz regulable Matter (Endpoint - 1).

El extremo 0 incluye clústeres generales que son relevantes para todo el nodo, por ejemplo, los clústeres de redes, puesta en marcha, descriptor, credenciales operativas y OTA.

Extremo de ZAP 0

En los siguientes pasos, revisarás y configurarás Endpoint - 1 Matter Dimmable Light del ejemplo lighting-app.

  1. Desde el repo Matter connectedhomeip, ejecuta ZAP.

    scripts/tools/zap/run_zaptool.sh \
    examples/lighting-app/lighting-common/lighting-app.zap
  2. Haz clic en Endpoint - 1 y, luego, en EDITAR.

  3. Opcional: Matter admite varios tipos de dispositivos. En el menú desplegable Dispositivo, comienza a escribir matter para cambiar el dispositivo y, luego, haz clic en GUARDAR.

    Selecciona el dispositivo ZAP

Para obtener más información, consulta Dispositivos y extremos en la guía de Matter.

Clústeres

Las opciones de clústeres, atributos y generación de informes predefinidos están habilitadas en Endpoint - 1 de forma predeterminada.

Para mostrar solo los clústeres habilitados, haz clic en Endpoint - 1 y selecciona Enabled Clusters en el menú Show. También puedes buscar clústeres por nombre, por ejemplo, on.

Clústeres con ZAP habilitado

Para habilitar cualquier clúster como Cliente, Servidor o Cliente y servidor, usa el menú desplegable Habilitar. También puedes seleccionar Not Enabled para inhabilitar un clúster preconfigurado que no se aplique a tu tipo de dispositivo.

Inhabilita el clúster de ZAP

Para obtener más información, consulta Clústeres en la guía de Matter.

Atributos y comandos

Para configurar los atributos y los comandos, completa los siguientes pasos:

  1. Ubica el clúster On/Off.
  2. En la misma fila, haz clic en el ícono de configuración .

    Configuración de ZAP

Aquí puedes habilitar o inhabilitar atributos, establecer varias opciones de atributos y buscar atributos por nombre.

Atributos de ZAP

Haz clic en Comandos para configurar acciones para este clúster. Por ejemplo, el clúster Encendido/apagado de una luz incluirá los comandos Encender, Apagar y Alternar. Es posible que algunos clústeres, como el clúster Temperature Measurement, no tengan comandos asociados.

Comandos de ZAP

Para obtener más información, consulta Atributos y comandos en la guía de Matter.

Genera archivos fuente de ZAP

Los ejemplos de Matter usan el código fuente generado por ZAP, que está disponible en el directorio connectedhomeip/zzz_generated. Algunos archivos son específicos de la app, mientras que otros archivos ZAP genéricos se agrupan en app-common.

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

Una vez que configures tus Endpoints, podrás generar archivos fuente para integrarlos en tu proyecto.

  1. Haz clic en Generar .
  2. Selecciona una carpeta para guardar el resultado de ZAP. Por ejemplo, navega a connectedhomeip/zzz_generated/lighting-app/zap-generated para lighting-app.
  3. Opcional. Abre los archivos en tu IDE preferido.

ZAP genera definiciones, funciones y otro código fuente que es personalizado para tu tipo de dispositivo y configuración de ZAP.

Archivos generados por ZAP

Por ejemplo, callback-stub.cpp incluye un método de devolución de llamada de Cluster que incluye solo los clústeres que habilitaste:

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

Usa archivos de origen de ZAP

Los archivos fuente de ZAP comunes, por ejemplo, Attributes.h en zzz_generated/app-common/app-common/zap-generated/ids/, se pueden usar para obtener y establecer atributos de tipo de dispositivo:

Attributes.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");
    }
}

Una vez que comprendas cómo se pueden usar los archivos ZAP en el código fuente de Matter, podrás integrar ZAP de varias maneras:

  • Usa los archivos zzz_generated existentes para crear ejemplos nuevos y únicos para tus tipos de dispositivos.
  • Crea archivos .zap personalizados para tus proyectos.

Personalizar

Los archivos ZAP se generan a partir de plantillas de ZAP. Cuando usas run_zaptool.sh para iniciar ZAP, esta secuencia de comandos pasa las siguientes plantillas:

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 define el nombre de la plantilla Matter y el archivo de salida correspondiente que se usa en los ejemplos de Matter.

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

Para personalizar tus soluciones de Matter, puedes seguir varios pasos cuando trabajes con ZAP:

Recursos

Para obtener recursos adicionales de ZAP, consulta el repositorio de ZAP (zap) en GitHub.