ZCL Advanced Platform(ZAP)は、Matter クラスタに基づく node.js テンプレート エンジンです。
ZAP は、Matter アプリと SDK 用に以下の機能を提供します。
- GUI インターフェースから、Matter エンドポイント、クラスタ、属性、その他のデバイス機能を構成します。
- データモデル定義、コールバック、その他の Matter ソースコードを自動的に生成するテンプレートを作成します。
- 事前構成済みの ZAP ファイルを作成して使用し、SDK に組み込みます。
インストール
ZAP のリリースページに移動します。
「最新」というタグが付けられたリリースを探します(多くは「プレリリース」というタグが付けられています)。
このリリースの [Assets] という見出しで、ご使用のオペレーティング システム用のパッケージを選択してダウンロードします。
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 クラスタと、Matter セカンダリ ネットワーク コミッショニング デバイスタイプを含む 3 つのエンドポイントで事前構成されています。これは、さまざまなクラスタ構成を確認する良い例です。
実行
- Matter のいずれかの例から ZAP ファイルを選択します。
- Matter リポジトリのルート ディレクトリ(
connectedhomeip
)からrun_zaptool.sh
ラッパー スクリプトを実行し、.zap
ファイルのパスを渡します。
例:
./scripts/tools/zap/run_zaptool.sh ./examples/lighting-app/lighting-common/lighting-app.zap
設定
の [設定] では、ライトモードまたはダークモードの選択や、デベロッパー ツールの有効化または無効化など、ZAP ユーザー インターフェースを構成できます。
[オプション] をクリックすると、[プロダクト メーカー]、[デフォルトのレスポンス ポリシー] を選択し、コマンド検出を有効または無効にできます。
[拡張機能] をクリックして、カスタム ZCL クラスタまたはコマンドを Zigbee Clusters Configurator に追加します。
使用
エンドポイント
lighting-app.zap
ファイルは、Matter ルートノード(Endpoint - 0)と Matter 調光可能ライト(Endpoint - 1)で事前構成されています。
エンドポイント - 0 には、ネットワーキング、コミッショニング、記述子、オペレーション認証情報、OTA クラスタなど、ノード全体に関連する一般的なクラスタが含まれます。
次のステップでは、エンドポイント - 1
Matter 調光可能ライト(例 lighting-app
を参照)を確認して構成します。
Matter リポジトリ
connectedhomeip
から ZAP を実行します。scripts/tools/zap/run_zaptool.sh \ examples/lighting-app/lighting-common/lighting-app.zap
[エンドポイント - 1] をクリックし、[
編集] をクリックします。省略可: Matter はさまざまなデバイスタイプをサポートしています。[デバイス] プルダウンで、デバイスの変更のために「
matter
」と入力し、[保存] をクリックします。
詳細については、Matter Primer のデバイスとエンドポイントをご覧ください。
クラスタ
エンドポイント - 1 では、事前定義されたクラスタ、属性、レポート オプションがデフォルトで有効になっています。
有効なクラスタのみを表示するには、[エンドポイント - 1] をクリックし、[表示] メニューから [有効なクラスタ] を選択します。on
など)で検索することもできます。
任意のクラスタを [クライアント]、[サーバー]、または [クライアントとサーバー] として有効にするには、[有効にする] プルダウンを使用します。[無効] を選択して、デバイスタイプに適用されない事前構成済みのクラスタを無効にすることもできます。
詳細については、Matter Primer のクラスタをご覧ください。
属性とコマンド
属性とコマンドを構成する手順は次のとおりです。
On/Off
クラスタを見つけます。同じ行で、設定アイコン
をクリックします。
ここでは、属性の有効 / 無効を切り替えたり、さまざまな属性オプションを設定したり、検索属性
を名前で指定したりできます。[コマンド] をクリックして、このクラスタのアクションを構成します。たとえば、照明のオン/オフ クラスタには、オン、オフ、切り替えのコマンドがあります。Temperature Measurement
クラスタなど、一部のクラスタにはコマンドが関連付けられていない場合があります。
詳細については、Matter Primer の属性とコマンドをご覧ください。
ZAP ソースファイルを生成する
Matter の例では、connectedhomeip/zzz_generated
ディレクトリにある ZAP で生成されたソースコードを使用しています。アプリ固有のファイルもあれば、app-common
でグループ化されている汎用 ZAP ファイルもあります。
#include <app-common/zap-generated/ids/Attributes.h>
#include <app-common/zap-generated/ids/Clusters.h>
エンドポイントを構成したら、プロジェクトに統合するソースファイルを生成できます。
- [ 生成] をクリックします。
- ZAP の出力を保存するフォルダを選択します。たとえば、
lighting-app
のconnectedhomeip/zzz_generated/lighting-app/zap-generated
に移動します。 - 省略可。お好みの IDE でファイルを開きます。
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.json
は、Matter の例で使用される Matter テンプレート名とそれに対応する出力ファイルを定義します。
{
"path": "templates/app/callback-stub-src.zapt",
"name": "ZCL callback-stub source",
"output": "callback-stub.cpp"
}
Matter ソリューションをカスタマイズするには、ZAP を使用して次の手順を実施する必要があります。
- ZAP テンプレートを作成します。
- ZAP を SDK に統合します。
関連情報
その他の ZAP リソースについては、GitHub の ZAP リポジトリ(zap
)をご覧ください。