ZCL Advanced Platform(ZAP)

ZCL Advanced Platform(ZAP)は、Matter クラスタをベースにした node.js テンプレート エンジンです。

ZAP は、Matter アプリと SDK に次の機能を提供します。

  • GUI インターフェースから Matter エンドポイント、クラスタ、属性、その他のデバイス機能を構成します。
  • データモデル定義、コールバック、その他の Matter ソースコードを自動的に生成するテンプレートを作成します。
  • SDK に含める事前構成済みの ZAP ファイルを作成して使用します。
ZAP ツール

インストール

  1. [ZAP リリース] ページに移動します。

  2. 「Latest」というタグが付いたリリースを探します(ほとんどのリリースには「Pre-release」というタグが付いています)。

  3. このリリースの [Assets] で、オペレーティング システム用に指定されたパッケージを選択してダウンロードします。

  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-common の lighting-app.zap です。

connectedhomeip/examples/all-clusters-app/all-clusters-common にある all-clusters-app.zap ファイルは、一般的な Matter クラスタと 3 つのエンドポイント(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

設定

の [Settings] では、ZAP ユーザー インターフェースを構成できます。たとえば、ライトモードまたはダークモードの選択、デベロッパー ツールの有効化または無効化などを行うことができます。

[Options] をクリックすると、[Product Manufacturer]、[Default Response Policy] を選択し、コマンド検出を有効または無効にできます。

ZAP のグローバル オプション

[Extensions] をクリックして、カスタム ZCL クラスタまたはコマンドを Zigbee Clusters Configurator に追加します。

使用

エンドポイント

lighting-app.zap ファイルは、Matter ルートノード(エンドポイント - 0)と Matter 調光ライト(エンドポイント - 1)で事前構成されています。

エンドポイント - 0 には、ノード全体に関連する一般的なクラスタ(ネットワーキング、コミッショニング、記述子、運用認証情報、OTA クラスタなど)が含まれます。

ZAP エンドポイント 0

次のステップでは、lighting-app の例から Endpoint - 1 Matter Dimmable Light を確認して構成します。

  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 が有効なクラスタ

クラスタをクライアント、サーバー、クライアントとサーバーとして有効にするには、[有効にする] プルダウンを使用します。[Not Enabled] を選択して、デバイスタイプに適用されない事前構成済みのクラスタを無効にすることもできます。

ZAP クラスタを無効にする

詳細については、Matter 入門ガイドのクラスタをご覧ください。

属性とコマンド

属性とコマンドを構成する手順は次のとおりです。

  1. On/Off クラスタを見つけます。
  2. 同じ行で、[構成] アイコン をクリックします。

    ZAP の構成

ここで、属性の有効化または無効化、さまざまな属性オプションの設定、名前による属性の検索 を行うことができます。

ZAP 属性

[コマンド] をクリックして、このクラスタのアクションを構成します。たとえば、照明のオン/オフ クラスタには、オン、オフ、切り替えのコマンドが含まれます。Temperature Measurement クラスタなど、一部のクラスタには関連付けられたコマンドがない場合があります。

ZAP コマンド

詳細については、Matter 入門ガイドの属性とコマンドをご覧ください。

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>

Endpoints を構成したら、プロジェクトに統合するソースファイルを生成できます。

  1. [生成] をクリックします。
  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.json は、Matter テンプレート名と、Matter の例で使用される対応する出力ファイルを定義します。

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

Matter ソリューションをカスタマイズするには、ZAP を使用する際に次の手順を行います。

リソース

その他の ZAP リソースについては、GitHub の ZAP リポジトリ(zap)をご覧ください。