ZCL Advanced Platform (ZAP)

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

ZAP는 Matter 앱과 SDK에 다음 기능을 제공합니다.

  • GUI 인터페이스에서 Matter 엔드포인트, 클러스터, 속성, 기타 기기 기능을 구성합니다.
  • 데이터 모델 정의, 콜백, 기타 Matter 소스 코드를 자동으로 생성하는 템플릿을 만듭니다.
  • SDK에 포함할 사전 구성된 ZAP 파일을 만들고 사용합니다.
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 보조 네트워크 커밋 기기 유형을 포함한 3개의 엔드포인트로 사전 구성되어 있습니다. 이것은 다양한 클러스터 구성을 살펴보기 위한 좋은 예입니다.

실행

  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 속성

명령어를 클릭하여 이 클러스터의 작업을 구성합니다. 예를 들어 조명의 On/off 클러스터에는 On, Off, Toggle 명령어가 포함됩니다. 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. Generate를 클릭합니다.
  2. ZAP 출력을 저장할 폴더를 선택합니다. 예를 들어 lighting-app의 경우 connectedhomeip/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 소스 파일 사용

공통 ZAP 소스 파일(예: zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h)을 사용하여 기기 유형 속성을 가져오고 설정할 수 있습니다.

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

Matter 소스 코드에서 ZAP 파일을 사용하는 방법을 이해한 후에는 여러 가지 방법으로 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)를 참고하세요.