ZCL Advanced Platform (ZAP)

ZCL 고급 플랫폼 (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. Endpoint - 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에는 사용 설정한 클러스터만 포함하는 Cluster 콜백 메서드가 포함되어 있습니다.

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)를 참고하세요.