ZCL Advanced Platform (ZAP)

ZCL Advanced Platform (ZAP)은 Matter 클러스터를 기반으로 하는 node.js 템플릿 엔진입니다.

ZAP은 Matter 앱과 SDK에 대해 다음과 같은 기능을 제공합니다.

  • GUI 인터페이스에서 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로 끝납니다. 예를 들어, connectedhomeip/examples/lighting-app/lighting-commonlighting-app.zap입니다.

connectedhomeip/examples/all-clusters-app/all-clusters-common에 있는 all-clusters-app.zap 파일은 공통 Matter 클러스터와 Matter 보조 네트워크 시운전 장치 유형을 포함한 세 개의 엔드포인트로 미리 구성되어 있습니다. 이는 다양한 클러스터 구성을 탐색하는 데 좋은 예입니다.

실행

  1. Matter 예제 중 하나에서 ZAP 파일을 선택하세요.
  2. Matter 저장소의 루트 디렉토리 (connectedhomeip)에서 run_zaptool.sh 래퍼 스크립트를 실행하고 .zap 파일 경로를 전달합니다.

예를 들면 다음과 같습니다.

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

설정

설정에서 밝은 테마나 어두운 테마 선택, 개발자 도구 활성화 또는 비활성화를 포함하여 ZAP 사용자 인터페이스를 구성할 수 있습니다.

옵션을 클릭하면 제품 제조업체, 기본 응답 정책을 선택하고 명령 검색을 활성화하거나 비활성화할 수 있습니다.

ZAP 글로벌 옵션

확장을 클릭하여 Zigbee 클러스터 구성기에 사용자 정의 ZCL 클러스터 또는 명령을 추가합니다.

사용

엔드포인트

lighting-app.zap 파일은 Matter 루트 노드 (엔드포인트 - 0)와 Matter 조광 가능 조명(엔드포인트 - 1)으로 미리 구성되어 있습니다.

엔드포인트 - 0에는 네트워킹, 커미셔닝, 설명자, 운영 자격 증명, OTA 클러스터 등 전체 노드와 관련된 일반 클러스터가 포함됩니다.

ZAP 엔드포인트 0

다음 단계에서는 예시 lighting-app에서 엔드포인트 - 1 Matter 조광 가능 조명을 검토하고 구성합니다.

  1. Matter 저장소 connectedhomeip에서 ZAP를 실행합니다.

    scripts/tools/zap/run_zaptool.sh \
    examples/lighting-app/lighting-common/lighting-app.zap
  2. 엔드포인트 - 1을 클릭한 다음 편집을 클릭합니다.

  3. 선택 사항: Matter는 다양한 기기 유형을 지원합니다. 기기 드롭다운에서 matter를 입력하여 기기를 변경한 다음 저장을 클릭합니다.

    ZAP 기기 선택

자세한 내용은 Matter 기본사항의 기기 및 엔드포인트를 참고하세요.

클러스터

사전 정의된 클러스터, 속성, 보고 옵션은 기본적으로 엔드포인트 - 1에서 사용 설정됩니다.

사용 설정된 클러스터만 표시하려면 엔드포인트 - 1을 클릭하고 표시 메뉴에서 사용 설정된 클러스터를 선택합니다. 클러스터를 이름으로 검색할 수도 있습니다(예: on).

ZAP 사용 설정 클러스터

클러스터를 클라이언트, 서버 또는 클라이언트 및 서버로 사용 설정하려면 사용 설정 드롭다운을 사용하세요. 사용 설정 안 함을 선택하여 기기 유형에 적용되지 않는 사전 구성된 클러스터를 사용 중지할 수도 있습니다.

ZAP 클러스터 비활성화

자세한 내용은 Matter 기본 사항의 클러스터를 참고하세요.

속성 및 명령어

속성과 명령을 구성하려면 다음 단계를 완료하세요.

  1. On/Off 클러스터를 찾습니다.
  2. 동일한 행에서 구성 아이콘 을 클릭합니다.

    ZAP 구성

여기에서 속성을 사용 설정 또는 중지하고, 다양한 속성 옵션을 설정하고, 이름으로 속성을 검색 할 수 있습니다.

ZAP 속성

명령을 클릭하여 이 클러스터에 대한 작업을 구성합니다. 예를 들어 조명의 켜기/끄기 클러스터에는 켜기, 끄기, 전환 명령어가 포함됩니다. Temperature Measurement 클러스터와 같은 일부 클러스터에는 연결된 명령어가 없을 수 있습니다.

ZAP 명령어

자세한 내용은 Matter 기본 사항의 속성 및 명령어를 참고하세요.

ZAP 소스 파일 생성

Matter 예에서는 connectedhomeip/zzz_generated 디렉터리에서 사용할 수 있는 ZAP 생성 소스 코드를 사용합니다. 일부 파일은 앱에 특화되어 있고 다른 일반 ZAP 파일은 app-common에 그룹화됩니다.

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

엔드포인트가 구성되면 프로젝트에 통합할 소스 파일을 생성할 수 있습니다.

  1. 생성을 클릭합니다.
  2. ZAP 출력을 저장할 폴더를 선택하세요. 예를 들어 lighting-appconnectedhomeip/zzz_generated/lighting-app/zap-generated로 이동합니다.
  3. 선택사항. 원하는 IDE에서 파일을 엽니다.

ZAP은 사용자의 장치 유형과 ZAP 구성에 맞게 정의, 기능 및 기타 소스 코드를 생성합니다.

ZAP 생성 파일

예를 들어, callback-stub.cpp에는 사용자가 활성화한 클러스터만 포함하는 클러스터 콜백 메서드가 포함되어 있습니다.

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

ZAP 소스 파일 사용

예를 들어 zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h와 같은 일반적인 ZAP 소스 파일은 장치 유형 속성을 가져오고 설정하는 데 사용할 수 있습니다.

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

ZAP 파일을 Matter 소스 코드에서 사용하는 방법을 이해하면 ZAP을 통합할 수 있는 여러 가지 방법이 있습니다.

  • 기존 zzz_generated 파일을 사용하여 장치 유형에 맞는 새로운 예를 만듭니다.
  • 프로젝트에 맞는 사용자 정의 .zap 파일을 만듭니다.

맞춤설정

ZAP 파일은 ZAP 템플릿에서 생성됩니다. run_zaptool.sh를 사용하여 ZAP을 시작하면 이 스크립트는 다음 템플릿을 전달합니다.

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.jsonMatter 예제에서 사용되는 Matter 템플릿 이름과 해당 출력 파일을 정의합니다.

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

Matter 솔루션을 사용자 지정하려면 ZAP을 사용할 때 다음 단계를 수행할 수 있습니다.

리소스

추가 ZAP 리소스는 GitHub의 ZAP 저장소(zap)를 참조하세요.