デバイスタイプが完全で複雑な機能を表すのに対し、クラスタは単一のシンプルな機能を実装する個別の構成要素です。
例えば、Dimmable Color Temperature Lightデバイスタイプは、複数のクラスタを組み合わせています。照明のオン/オフを制御するOn/Off、調光を行うLevel Control、照明の色を変更するColor Controlなどです。
デバイスタイプと同様に、Matter仕様には記述されたクラスタのリストがあります。新しいクラスタを作成し、未認証ステータスの製品で使用することも、Matter組織に貢献して認証可能なステータスを付与するよう働きかけることも可能です。
仕様に必要なクラスタが含まれていない場合は、カスタムクラスタを作成して使用できます。ただし、カスタム機能は認証を受けることができません。つまり、Connectivity Standard Alliance(CSA)組織はユーザーに対してその品質を保証しません。認証可能なステータスを取得するには、仕様を提供し、承認を得て、少なくとも他の2社のベンダーにサポートを説得する必要があります(合計3社)。
Matter仕様は、いくつかの部分で構成されています。
Matter Core Specificationは、すべてのMatterデバイスタイプに共通し、コアプロトコル機能に関連するクラスタを記述しています。Matter Application Cluster Library Specificationは、特定のアプリケーションユースケースおよびアプリケーションデバイスタイプで使用できるクラスタを記述しています。
Matter Application Cluster Specificationでは、デバイスタイプと同様に、ユースケースに応じてグループ化されたさまざまなクラスタを見つけることができます。各クラスタの説明には、アプリケーションでそのクラスタをサポートするかどうかを決定する際に考慮すべきいくつかのセクションが含まれています。さらに、データモデルの観点から、クラスタは、さまざまな種類のデータ表現に使用される属性、コマンド、イベントで構成されています。

このセクションには、特定のクラスタに使用される改訂のリストと、改訂間の変更の説明を含む表が含まれています。アプリケーションが適切な改訂をサポートしていることを確認することが重要です。そうでない場合、例えば、使用する予定だった一部の機能が利用できない可能性があります。
このセクションには、利用可能なすべてのクラスタ間で一意である必要があるクラスタ識別子と、クラスタ名が含まれています。
このセクションには、クラスタがサポートできる機能がリストされています。クラスタが機能バリアントをサポートしていない場合、このセクションは空になることがあります。機能は、FeatureMap属性(最大32ビット長)の単一ビットとして表され、0は機能が無効、1は機能が有効であることを意味します。
例えば、Door Lockクラスタには、PIN(PIN)、RFID(RID)、指紋(FGP)などの認証情報を挿入する方法を決定する複数の機能があります。Door Lockがこれら3つの機能のみを持ち、PINがビット0、RIDがビット1、FGPがビット2に割り当てられていると仮定します。指紋とRFIDをサポートする構成では、フィーチャーマップの値は0x6(0b110)になります。
1 1 0
FPG RID PIN
各機能には、ビット、コード、および適合性が割り当てられており、必須(M)、オプション(O)、または他の機能値に依存するかどうかを示します。これは、一部の機能が別の機能も有効になっている場合にのみ有効にできる場合や、逆に同時に使用できない相互排他的な機能がある場合があるためです。
特定の機能をサポートすると、追加の属性、コマンド、イベントをサポートできる可能性があります。追加要素は、この機能に対してオプション(角括弧で示される: [FEATURE_CODE])または必須(角括弧なしで示される:FEATURE_CODE)の場合があります。
例えば、Door LockクラスタのDoor Position Sensor(DPS)機能を使用すると、OpenPeriod属性をオプションで([DPS])有効にできますが、DoorState属性の必須(DPS)サポートも必要です。
属性は、クラスタの現在の状態に関する情報を提供します。一部の属性は定数であり、その目的はデバイス機能に関する読み取りと情報提供を可能にすることです。
例えば、Door Lockクラスタには、サポートされるユーザー数の属性があります。
属性のもう1つのユースケースは、時間の経過とともに変化する可能性のある値の現在の状態を保持することです。例えば、Door LockクラスタのLockState属性は、物理的なロック状態に基づいて値を変更します。
すべての属性の最も重要な要素は次のとおりです。
次の表は、Door Lockクラスタの属性の例をいくつか示しています。
| ID | Name | Type | Constraint | Access | Conformance |
|---|---|---|---|---|---|
| 0x0000 | LockState | LockStateEnum | – | R V | M |
| 0x0012 | NumberOfPINUsersSupported | uint16 | all | R V | PIN |
| 0x0021 | Language | string | max 3 | R[W] VM | O |
イベントは、時間の経過に伴う変化に関する情報を提供するために使用される履歴記録です。属性と比較して、デバイスの現在の状態に関する情報を取得するために使用することはできませんが、その状態がどのように変化しているかを監視するために使用されます。
例えば、Thread Network DiagnosticsクラスタにはConnectionStatusイベントがあり、デバイスが接続状態と切断状態の間で接続状態を変更するたびに送信されます。これにより、ネットワークが安定しているかどうかがわかります。これは、現在の接続状態のみに基づいて判断するのは困難です。
すべての属性の最も重要な要素は次のとおりです。
次の表は、Thread Network Diagnosticsクラスタのイベントの例を示しています。
| ID | Name | Priority | Access | Conformance |
|---|---|---|---|---|
| 0x00 | ConnectionStatus | INFO | V | O |
コマンドは、クライアントデバイスがサーバーデバイスに特定のアクションを要求するために送信するトリガーです。コマンド受信に応じて実行されるアクションは、コマンド仕様に応じて、非常にシンプルな場合も、複雑な操作のシーケンスの場合もあります。
構造を考慮すると、最もシンプルなコマンドには追加データが含まれず、受信するだけで何らかの動作をトリガーし、応答として適用されたことの確認以外の追加データを必要としません。例えば、On/OffクラスタのOnコマンドは、OnOff属性の状態を変更します。
追加データを含むコマンドの例は、DoorLockクラスタのSetPINCodeコマンドです。これには、受信デバイスによって設定される特定のユーザーとPINコードに関する情報が含まれています。
一方、DoorLockクラスタのGetPINCodeコマンドは、リクエストとレスポンスの両方で追加データを使用するコマンドの完璧な例です。リクエストでは、クライアントデバイスがユーザーIDを含むデータを提供し、レスポンスでは、サーバーデバイスがユーザーデータとPINコードを提供します。
すべての属性の最も重要な要素は次のとおりです。
次の表は、Door Lockクラスタのイベントの例を示しています。
| ID | Name | Direction | Response | Access | Conformance |
|---|---|---|---|---|---|
| 0x00 | LockDoor | client->server | Y | O T | M |
| 0x05 | SetPINCode | client->server | Y | A T | !USR & PIN |
| 0x06 | GetPINCode | client->server | GetPINCodeResponse | A | !USR & PIN |
| 0x06 | GetPINCodeResponse | client | N | !USR & PIN |