ZCL Advanced Platform(ZAP)は、Matter クラスタに基づく Node.js テンプレート エンジンです。
ZAP は、Matter アプリと SDK に次の機能を提供します。
- GUI インターフェースから Matter エンドポイント、クラスタ、属性、その他のデバイス機能を構成します。
- データモデル定義、コールバック、その他の Matter ソースコードを自動的に生成するテンプレートを作成します。
- SDK に含める事前構成済みの ZAP ファイルを作成して使用します。
インストール
ZAP リリースのページに移動します。
「最新」というタグが付いたリリースを探します(ほとんどのリリースには「プレリリース」というタグが付けられます)。
このリリースの [アセット] で、オペレーティング システム用に指定されているパッケージを選択してダウンロードします。
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 セカンダリ ネットワーク コミッショニング デバイスタイプを含む)で事前構成されています。これは、さまざまなクラスタ構成を調べる良い例です。
ランニング
- Matter の例のいずれかから ZAP ファイルを選択します。
- Matter リポジトリのルート ディレクトリ(
connectedhomeip
)から、run_zaptool.sh
ラッパー スクリプトを実行し、.zap
ファイルのパスを渡します。
次に例を示します。
./scripts/tools/zap/run_zaptool.sh ./examples/lighting-app/lighting-common/lighting-app.zap
設定
の [設定] で、ライトモードまたはダークモードの選択、デベロッパー ツールの有効化または無効化など、ZAP ユーザー インターフェースを構成できます。
[オプション] をクリックすると、商品メーカーとデフォルトのレスポンス ポリシーを選択し、コマンド検出を有効または無効にできます。
[
Extensions] をクリックして、カスタム ZCL クラスタまたはコマンドを Zigbee Clusters Configurator に追加します。使う
エンドポイント
lighting-app.zap
ファイルは、Matter ルートノード(エンドポイント - 0)と Matter 調光可能ライト(エンドポイント - 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 は、さまざまなデバイスタイプをサポートしています。[Device] プルダウンで、「
matter
」と入力してデバイスを変更し、[SAVE] をクリックします。
詳細については、Matter 入門のデバイスとエンドポイントをご覧ください。
クラスタ
事前定義されたクラスタ、属性、レポートのオプションは、デフォルトで Endpoint - 1 で有効になっています。
有効なクラスタのみを表示するには、[エンドポイント - 1] をクリックし、[表示] メニューから [有効なクラスタ] を選択します。on
など)で検索することもできます。
任意のクラスタを [クライアント]、[サーバー]、[クライアントとサーバー] として有効にするには、[有効にする] プルダウンを使用します。[無効] を選択して、デバイスタイプに適用されない事前構成済みクラスタを無効にすることもできます。
詳細については、Matter 入門のクラスタをご覧ください。
属性とコマンド
属性とコマンドを構成する手順は次のとおりです。
On/Off
クラスタを見つけます。同じ行にある構成アイコン
をクリックします。
ここでは、属性の有効化と無効化、さまざまな属性オプションの設定、名前による属性の検索
を行うことができます。[コマンド] をクリックして、このクラスタのアクションを構成します。たとえば、照明のオン/オフクラスタには、オン、オフ、切り替えのコマンドが含まれます。Temperature Measurement
クラスタなどの一部のクラスタには、関連するコマンドがない場合があります。
詳しくは、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>
エンドポイントを構成したら、プロジェクトに統合するソースファイルを生成できます。
- [ 生成] をクリックします。
- ZAP 出力を保存するフォルダを選択してください。たとえば、
lighting-app
のconnectedhomeip/zzz_generated/lighting-app/zap-generated
に移動します。 - (省略可)お好みの IDE でファイルを開きます。
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 テンプレートを作成します。
- ZAP を SDK に統合します。
リソース
その他の ZAP リソースについては、GitHub の ZAP リポジトリ(zap
)をご覧ください。