Matter のデバイスには、明確に定義されたデータモデル(DM)があります。これは、デバイスの機能の階層型モデリングです。この階層の最上位には Device があります。
デバイスとエンドポイント
スマートフォンやホーム アシスタントなど、すべてのデバイスは複数のノード1で構成されます。ノードは、ユーザーから見た機能全体であり、ネットワーク内で一意に識別できるアドレス指定可能なリソースです。Matter におけるネットワーク通信は、ノードで開始されノードで終了します。
ノードは エンドポイントのコレクションです。各エンドポイントには、一連の機能が含まれています。たとえば、あるエンドポイントは照明機能に関連し、別のエンドポイントはモーション検知に関連し、別のエンドポイントはデバイス OTA などのユーティリティに関連します。

ノードのロール
ノードロールは、関連する一連の動作です。各ノードには 1 つ以上のロールを設定できます。ノードの役割には次のものがあります。
- コミッショナー: コミッショニングを実行するノード。
- コントローラ: 1 つ以上のノードを制御できるノード。たとえば、Google Home app (GHA)、Google Assistant、Google Nest Hub (2nd gen) などがあります。オン/オフ ライトスイッチなどの一部のデバイスタイプには、コントローラ ロールがあります。
- Controlee: 1 つ以上のノードによって制御できるノード。ほとんどのデバイスタイプは Controlee になることができますが、オン/オフ ライトスイッチなど、Controller の役割を持つ一部のデバイスタイプは除きます。オン/オフ ライトスイッチはコントローラにのみなることができます。Controlee にすることはできません。
- OTA プロバイダ: OTA ソフトウェア アップデートを提供できるノード。
- OTA リクエスタ: OTA ソフトウェア アップデートをリクエストできるノード。
クラスタ
エンドポイント内では、ノードに 1 つ以上のクラスタがあります。これらはデバイス階層のもう 1 つのステップであり、スマートプラグのオン/オフ クラスタや、調光可能なライト エンドポイントのレベル制御クラスタなど、特定の機能をグループ化します。
Node には複数の Endpoint が存在する場合もあります。各 Endpoint は同じ機能のインスタンスを作成します。たとえば、照明器具は個々の照明の独立した制御を公開し、電源タップは個々のソケットの制御を公開する場合があります。
属性
最下位レベルには、ノードが保持する状態である属性があります。たとえば、レベル制御クラスタの現在のレベル属性などです。属性は、uint8、文字列、配列などのさまざまなデータ型として定義できます。

コマンド
クラスタには、属性のほかに、実行可能なアクションであるコマンドもあります。これらは、Matter の DM におけるリモート プロシージャ コールに相当します。コマンドは、Door Lock クラスタの lock door のように、動詞のようなものです。コマンドはレスポンスと結果を生成する場合があります。Matter では、このようなレスポンスも逆方向のコマンドとして定義されます。
イベント
最後に、クラスタには イベントが含まれることもあります。これは、過去の状態遷移の記録と考えることができます。属性は現在の状態を表しますが、イベントは過去のジャーナルであり、単調増加カウンター、タイムスタンプ、優先度が含まれます。これらを使用すると、状態遷移のキャプチャや、属性では簡単に実現できないデータ モデリングが可能になります。

エンドポイント 0 はユーティリティ クラスタ用に予約されています。ユーティリティ クラスタは、検出、アドレス指定、診断、ソフトウェア アップデートなど、エンドポイントのサービス機能を含む特定のクラスタです。一方、アプリケーション クラスタは、オン/オフや温度測定などのメイン アクションをサポートします。
デバイスタイプ
デバイス メーカーが新しいデバイスを計画する際に、どのクラスタの組み合わせを含めるべきですか?
Matter 仕様では、デバイスが 1 つ以上のデバイスタイプを実装または拡張することが求められています。デバイスタイプは、物理デバイスの最上位属性(調光可能なライト、ドアロック、動画プレーヤーなど)を定義する必須クラスタとオプション クラスタの集合です。
デバイスタイプは、Matter 仕様のメイン ドキュメントではなく、付属のドキュメントであるデバイス ライブラリで指定されます。同様に、すべてのアプリケーション クラスタはアプリケーション クラスタ ライブラリで定義されます。これらの 3 つのドキュメントは、Connectivity Standards Alliance (Alliance) メンバーのウェブサイトで確認できます。
デバイスタイプを実装する各エンドポイントは、そのデバイスタイプを定義する必須のクラスタを実装する必要があります。必須のクラスタに加えて、エンドポイントは、デバイスタイプのオプションのクラスタの 1 つ以上、またはデバイスタイプの一部ではないクラスタを含む、追加のクラスタを実装できます。
クライアントとサーバー
クラスタは、クライアント クラスタまたはサーバー クラスタのいずれかになります。サーバーはステートフルで、属性、イベント、コマンドを保持しますが、クライアントはステートレスで、リモート サーバー クラスタとのインタラクションを開始する役割を担います。つまり、次の処理を行います。
- リモート属性から読み取り、リモート属性に書き込みます。
- リモート イベントの 読み取り。
- リモート コマンドの呼び出し。
DM はノード内で階層化されていますが、ノード間の関係は階層化されていません。Matter のノードには、垂直コントローラ/周辺機器またはリーダー/フォロワーの関係はありません。これに対し、関係は水平です。任意のクラスタは、サーバーまたはクライアントのいずれかになります。したがって、ノードは、異なるクラスタと機能に関してサーバーとクライアントの両方になる可能性があります。
たとえば、ノード A と ノード B の 2 つのテーブル ランプがあるとします。両方のノードが On/Off Light(オン / オフ ライト)デバイスタイプを実装しています。このデバイスタイプには、それぞれの物理的な照明出力を制御する On/Off Server クラスタが含まれています。
ただし、一般的なテーブル ランプと同様に、Google の物理デバイスにも、ローカルのオン/オフ スイッチ用の照明のオン/オフ スイッチ デバイスタイプが含まれます。このデバイスタイプは、サーバー クラスタを制御できるように、オン/オフ クライアント クラスタを実装する必要があります。

このサンプルでは、ノード A のオン/オフ クライアント クラスタがノード A とノード B のオン/オフ サーバー クラスタの属性を変更しているのに対し、ノード B のクライアント クラスタはノード B 自体のサーバー クラスタのみを変更しています。
次のセクションでは、クライアント クラスタとサーバー クラスタの相互作用(相互作用モデル)について詳しく説明します。
記述子クラスタ
名前のとおり、Descriptor Cluster Server はイントロスペクション情報を提供します。Endpoint を記述し、次のものを列挙します。
- サーバー クラスタ。
- クライアント クラスタ。
- デバイスタイプ。
- 追加のエンドポイント(パーツ)。
すべてのデバイスタイプで、ディスクリプタ クラスタの実装が必要です。ルート デバイスタイプはエンドポイント 0 で定義されます。Descriptor クラスタを読み取ると、クライアントは使用可能なエンドポイントの完全なツリーをトラバースし、該当するオペレーションを実行できるようになります。
コミッショナーまたは制御デバイス(スマートフォンやハブなど)は、ディスクリプタ クラスタで見つかった情報を使用して、デバイス(照明、スイッチ、ポンプ、サーモスタット)と、そのデバイスの特定のインスタンスによって実装された特定の機能をモデル化し、ユーザーに正しい UI を表示できます。
サーバー クラスタ
ServerList
属性には、エンドポイントのクラスタ サーバーが一覧表示されます。
クライアント クラスタ
ClientList
属性には、エンドポイントのクラスタ クライアントが一覧表示されます。
デバイスタイプ リスト
DeviceTypeList
属性は、エンドポイントでサポートされているデバイスタイプのリストと、それぞれのリビジョンです。少なくとも 1 つのデバイスタイプを含める必要があります。
パーツリスト
PartsList
には、このデバイスタイプの実装に使用されるエンドポイントのリストが含まれます。
エンドポイント 0(ルートノード)の PartsList
には、デバイスのすべてのエンドポイント(エンドポイント 0 を除く)が含まれます。
通常、他のエンドポイントの PartsList
は空です。たとえば、温度センサーは温度測定サーバー クラスタのみを必須とし、それ以外は必須としません。
他のデバイスタイプは、複数の DeviceType インスタンスのツリー構造で構成される場合があります。たとえば、動画プレーヤー デバイスタイプは、テレビ、動画プレーヤー、スピーカー、さまざまなコンテンツ アプリ デバイスタイプで構成され、それぞれが異なるエンドポイントに存在します。
-
Matter 仕様では、デバイスに複数のノードを設定できることが規定されています。たとえば、スマートフォンには複数のアプリがあり、各アプリが異なるノードになります。この入門ガイドでは、すべてのデバイスに単一のノードが含まれていることを前提としています。ほとんどの物理デバイスはこのパターンに従うことが想定されます。 ↩