# Matter

> Matter のドライバーの手引き。機器が参加する Wi-Fi と Thread のネットワーク、Bluetooth によるローカルの Fabric へのコミッショニング、機器をペアリングの流れ、ノードの識別、機器から来るタグと、それぞれへの書き込みが何をするか。

Matter のドライバーは、**Matter** の現場設備を読みます。Matter の標準に適合したスマートなセンサー、プラグ、照明などの機器で、ネットワークへの参加が **Wi-Fi** でも **Thread** でもかまいません。ドライバーは両方で 1 つです。ネットワークは入り口にすぎず、機器がそこに入ったあとは、Ganter Lab はどちらもローカルのネットワーク越しに同じように読みます。

Ganter Lab は、**自分のローカルの Fabric を持つ Matter のコントローラー**としてふるまいます。機器ごとに 1 度、このコンピューターの **Bluetooth Low Energy** でコミッショニングし、ドライバーの**ネットワーク**のカードに登録されたネットワークの資格情報を渡します。それ以降はローカルのネットワーク越しに話します。Wi-Fi の機器ならお使いのルーターを通じて、Thread の機器ならお使いの Thread の Border Router を通じてです。

機器が Wi-Fi なのか Thread なのかを、Ganter Lab に伝える必要はありません。**機器が自分で伝えます。**Bluetooth のセッションが開くと、Ganter Lab は機器に何かを書き込む前に、その機器がどちらの種類のネットワークに参加するのかを機器から読み、選んだネットワークがもう一方の種類なら、それを伝えるメッセージを出して止まります。

これは、ふだんの設定の順序をひっくり返します。Matter の機器はホストとポートから始まりません。**ペアリングの儀式**から始まり、そのあとで保存されるのは、コミッショニングしたノードの安定した識別だけです。

ペアリングの前に必要なものです。

- このコンピューターの **Bluetooth Low Energy のアダプター**。オンになっていて、Windows が Ganter Lab にその使用を許していること。
- 機器が参加するネットワークを、**ネットワーク**のカードに登録してあること。Wi-Fi の機器なら Wi-Fi の名前とそのパスワード、Thread の機器なら Border Router のある既存の Thread ネットワークと、その完全な**有効な運用データセット**です。Ganter Lab は機器をお使いのネットワークに参加させます。そのネットワークの資格情報を作り出すことはできません。
- 機器かその箱に印刷されている、その機器の**セットアップコード**。そして、ペアリングモードにした機器。

## ネットワーク {#networks}

Matter のドライバーのパネルには、**ネットワーク**という題のカードがあります。機器が参加する Wi-Fi と Thread のネットワークで、1 行に 1 つです。ネットワークは**最初の機器より前に 1 度だけ**登録し、そこにペアリングするすべての機器に使います。同じ Wi-Fi に 2 つ目の照明をペアリングするときには、もう何も聞かれません。このカードは、Connector を構成できるロールにだけ描かれます。ネットワークの秘密を持ち、ペアリングのほかには何にも使わないからです。

カードの見出しには、そのコマンドがこの順に並びます。

| コマンド | すること | しないこと |
|---|---|---|
| **Wi-Fi ネットワークを追加** | Wi-Fi のネットワークを 1 つ追加して選択します。このコンピューターがつながっている Wi-Fi の名前がまだ登録されていなければ、新しいネットワークはその名前になります。そうでなければ名前のない状態で始まり、名前はご自分で入力します。Windows が渡すのは名前だけで、それもアプリにこのコンピューターの位置を知らせるのを許しているときだけです（Windows 11 はその許可を求めます）。パスワードはいつもご自分で入力します。 | Windows からパスワードを読むことも、そのネットワークが実在するか確かめることもしません。 |
| **Thread ネットワークを追加** | Thread のネットワークを 1 つ追加して選択します。名前を付けるまでは仮の名前（すでに使われていれば番号付き）で、データセットの入力を待ちます。 | Border Router とは話しません。Ganter Lab が使うのは、Border Router が作ったネットワークのデータセットだけです。 |
| **ネットワークを削除** | 選択したネットワークを削除します。その前に、そのネットワークの名前を挙げ、ペアリング済みの機器には影響しないと述べる確認が出ます。ネットワークを選択していないときは、描かれたまま淡色になり、ツールチップがその理由を述べます。 | そのネットワークにペアリング済みの機器には触れません。機器は動き続け、その名前を自分の**ネットワーク**の項目に残します。 |

表には、ネットワークごとに**名前**、**ネットワークの種類**（**Wi-Fi ネットワーク**か **Thread ネットワーク**）、**状態**が並びます。状態は**ペアリングできます**か、そのネットワークにまだ足りないものです。名前がまだ書かれていないネットワークは**名前のないネットワーク**と表示されます。

選択したネットワークの項目は、表の下でその場で編集でき、自動で保存されます。下の決まりに合わない値は書き込まれず、項目がその理由を述べます。

| 種類 | 項目 | 意味 | 形式 |
|---|---|---|---|
| Wi-Fi | **Wi-Fi の名前** | 機器に渡す名前（SSID）で、ルーターが発信しているとおりに書きます。大文字と小文字は区別されます。Wi-Fi の名前は、それぞれ 1 度だけ登録できます。 | 1 から 32 バイトの文字列（UTF-8）。 |
| Wi-Fi | **パスワード** | 機器に渡す Wi-Fi のパスワード。 | オープンなネットワークなら空。それ以外は、印字できる ASCII の 8 から 63 文字（WPA のパスフレーズ）、またはちょうど 64 桁の 16 進数（生の鍵）。 |
| Thread | **名前** | ペアリングのときと各機器の上でそのネットワークを見分けるための、ご自分で付ける名前。Thread のネットワークの名前は、それぞれ 1 度だけ登録できます。 | 自由記述。 |
| Thread | **Thread の運用データセット** | お使いの Thread ネットワークの完全な有効なデータセットで、ネットワーク管理者かその Border Router から受け取ります。Home Assistant は表示しますが、Alexa と Apple は表示しません。 | 16 進数の文字列（空白と `hex:` の接頭辞は許します）。復号したあとで最大 254 バイトです。データセットは完全でなければなりません。Active Timestamp、Channel、Channel Mask、Extended PAN ID、Mesh-Local Prefix、Network Key、Network Name、PAN ID、PSKc、Security Policy がすべてそろっている必要があり、欠けているものや壊れているデータセットは、足りない要素を名指しして拒否されます。 |

Wi-Fi の機器をそもそもペアリングできるかどうかは、2 つのことで決まります。カードは項目の横にその両方を述べます。

- **ほとんどの機器は 2.4 GHz のネットワークにしか参加しません。**同じ名前を 2.4 GHz と 5 GHz の両方で発信しているルーターなら使えます。5 GHz にしかないネットワークは使えません。
- **このコンピューターと機器は、同じローカルのネットワークにいなければなりません。**ゲスト用のネットワークや、ルーターで有効にした端末間の分離（クライアントの分離）があると、機器が参加したあとで、このコンピューターが機器を見つけられません。

ネットワークがペアリングに使えるのは、その秘密がこの決まりに合っているあいだだけです。Wi-Fi のネットワークなら正しい名前と正しいパスワード（空を含む）、Thread のネットワークなら正しいデータセットです。

ネットワークを編集すると、**次の**ペアリングで渡すものが変わります。機器がすでに受け取ったものは変わりません。別のネットワークに移す必要がある機器や、ルーターのパスワードが変わった機器は、リセットしてからペアリングし直します。

## 機器をペアリングの流れ {#the-pair-device-flow}

Matter のドライバーでは、ほかのドライバーが機器を追加を出す場所に、コマンドバーが**機器をペアリング**を出します。欄の新規…メニューの Matter の項目にも同じものがあります。ペアリングに使えるネットワークが 1 つもないあいだは、描かれたまま淡色で、ツールチップは「先に、機器が参加するネットワークを追加してください。」です。使えるネットワークがあれば、押すと入力欄が開きます。

| 項目 | 意味 | 形式 | 既定 |
|---|---|---|---|
| 機器の名前 | その機器が Connector で持つ、編集できる名前。 | 自由記述 | `Matter 機器` |
| Matter のセットアップコード | 正式な手入力用のペアリングのコード、または QR の内容の全体。伏せ字で入力し、表示に切り替える操作が付きます。 | 11 桁か 21 桁の手入力用コード（ダッシュと空白は無視し、検査数字は検証します）、または `MT:` で始まる QR の内容の全体。Bluetooth によるコミッショニングを名乗らない QR の内容は拒否され、予約された、あるいは範囲の外のパスコードも同じです。 | 空 |
| ネットワーク | 機器が参加する、登録済みのネットワーク。使えるネットワークが 1 つだけなら、入力欄はどのネットワークでどの種類かを 1 行で述べ、選ぶものはありません。2 つ以上なら選択欄になります。 | **ネットワーク**のカードにある、使えるネットワークのどれか | 1 つだけのときはそれ |
| 入れるフォルダー | フォルダーの新しい機器がフォームを開いたときだけ表示されます。ペアリングした機器が入るフォルダーです。機器をペアリングで開いたときはこの行がなく、機器はドライバー自身の階層に入ります。 | 読み取り専用 | フォームを開いたフォルダー |

Matter のドライバーのフォルダーには**新しい機器**があります（その機器の表、その右クリックメニュー、新規… > Matter > `<Folder>`）。これは同じフォームを開き、使えるネットワークがないあいだは同じように灰色になり、ペアリングした機器はそのフォルダーに入ります。

入力欄の**機器をペアリング**は、名前とセットアップコードが埋まり、使えるネットワークがあるまで押せません。ペアリングが走っているあいだ、入力欄はその段階を伝えます。**確認**（コードとネットワークの秘密を調べます）、**探索**（Bluetooth で機器を探します）、**ペアリング**（セットアップコードで認証し、機器がどちらの種類のネットワークに参加するかを読みます）、**ネットワークに参加**（ネットワークを機器に送り、そのあとローカルのネットワークで機器が応えるまで問い合わせます。状態の行は、そのネットワークが Wi-Fi か Thread かを述べます）、**保存**（ローカルのネットワーク上の機器と安全なセッションを開き、コミッショニングを完了させて、ノードをローカルの Fabric に記録します）。

**キャンセル**は、物理的な機器がまだ変更されていないあいだ使えます。コミッショニングが機器を変えてしまったあとは、ボタンが Ganter Lab は安全に終了しようとしていると伝え、半分だけコミッショニングされたノードを放り出すのではなく、記録を最後まで進めます。ペアリングは一度に 1 つです。1 つが進んでいるあいだの 2 つ目の試みは拒否されます。

新しい機器は、参加したネットワークの名前を記録し、自分の**ネットワーク**の項目に出します。同じネットワークに次の機器をペアリングするときに聞かれるのは、その名前とセットアップコードだけです。

## ペアリングが失敗したとき {#when-pairing-fails}

ペアリングが失敗したとき、メッセージは原因とすべきことを述べます。

| 原因 | 意味 | 現場設備 | すること |
|---|---|---|---|
| セットアップコードが正しくない | 正式な 11 桁か 21 桁の手入力用コードでも、完全な `MT:` の QR の内容でもありません。 | 手付かず | 印刷されたコードを読み直します。 |
| Thread のデータセットが正しくない | 選んだ Thread のネットワークのデータセットが、完全で正しい形になっていません。 | 手付かず | **ネットワーク**のカードで、そのネットワークに完全な有効なデータセットをもう一度写します。 |
| Wi-Fi の名前かパスワードが正しくない | 選んだ Wi-Fi のネットワークの名前かパスワードが、**ネットワーク**のカードの決まりに合っていません。 | 手付かず | カードで直します。 |
| Bluetooth がない、オフ、または拒否された | このコンピューターに使える Bluetooth Low Energy のアダプターがない、Bluetooth がオフになっている、または Windows が Ganter Lab のアクセスを拒否しました。 | 手付かず | Bluetooth をオンにするか、Windows で Ganter Lab に使用を許してから、もう一度試します。 |
| 一致する機器が見つからない | このセットアップコードに応えた、ペアリングモードの機器がありません。 | 手付かず | 機器をペアリングモードにし、このコンピューターの近くに置いて、もう一度試します。 |
| セットアップコードを拒否された | 機器がコードを拒否しました。 | 手付かず | 印刷されたコードを読み直し、機器をペアリングモードに戻します。 |
| 機器は Wi-Fi で参加する | 選んだネットワークは Thread です。 | 手付かず。読み取っただけで、何も書き込んでいません | 機器が参加する Wi-Fi のネットワークを登録し、それを選んでペアリングし直します。 |
| 機器は Thread で参加する | 選んだネットワークは Wi-Fi です。 | 手付かず。読み取っただけで、何も書き込んでいません | Thread のネットワークを登録し、それを選んでペアリングし直します。 |
| 機器は有線（Ethernet） | Bluetooth によるペアリングは、有線の機器には使えません。 | 手付かず。読み取っただけで、何も書き込んでいません | この機器は Ganter Lab ではペアリングできません。 |
| 機器が自分のネットワークを伝えない | 機器が Wi-Fi、Thread、Ethernet のどれも伝えていません。 | 手付かず。読み取っただけで、何も書き込んでいません | この機器は Ganter Lab ではペアリングできません。 |
| Wi-Fi のネットワークが見つからない | 機器が、その名前の Wi-Fi を見つけられなかったと応えました。綴りや大文字小文字の誤り、5 GHz にしかないネットワーク、または届かない距離にある機器です。 | 何も残しません。受け取ったものを捨てて、ペアリングモードに戻ります。ノード ID はありません。 | **ネットワーク**のカードで名前を直し、ルーターがそれを 2.4 GHz で発信しているのを確かめて、ペアリングし直します。 |
| Wi-Fi のパスワードを拒否された | 機器が、Wi-Fi にパスワードを拒否されたと応えました。 | 何も残しません。受け取ったものを捨てて、ペアリングモードに戻ります。ノード ID はありません。 | **ネットワーク**のカードでパスワードを直し、ペアリングし直します。 |
| 機器がネットワークに参加できなかった | 機器が、上の 2 つ以外の理由でネットワークに参加できなかったと応えました（Thread では、見つからなかったネットワークも含めて、どの拒否もこれです）。 | 何も残しません。受け取ったものを捨てて、ペアリングモードに戻ります。ノード ID はありません。 | **ネットワーク**のカードでネットワークを確かめ（Thread なら、いまの現行データセットを写し直し、Border Router がオンかを確かめます）、ペアリングし直します。 |
| 機器がネットワークに現れなかった | 機器がネットワークについて何も応えなかったか、そのあとローカルのネットワークに一度も現れませんでした。ネットワークに参加するために Bluetooth を離れ、応えることができない機器もあります。 | コミッショニング済み。メッセージがノード ID を見せます | Wi-Fi なら、このコンピューターと機器が同じローカルのネットワークにいて、あいだにゲスト用のネットワークや端末間の分離がないことを確かめます。Thread なら、Border Router がオンで届く状態かを確かめます。そのあとで、機器検出からノードを取り戻します。 |
| セキュアセッションが開かなかった | 機器はネットワークに参加し、そこで見つかりましたが、機器とのセキュアセッション、またはそのセッションでのペアリングの完了に失敗しました。診断ログに、止まった手順と機器の応答が残ります。 | コミッショニング済み。メッセージがノード ID を見せます | 機器検出からノードを取り戻します。機器の電源が入っているのに機器検出で値のないまま見つかる場合は、機器をペアリングモードに戻して、ペアリングし直します。 |
| 別のペアリングが進行中 | ペアリングは一度に 1 つです。 | 手付かず | それが終わるのを待って、もう一度試します。 |
| ローカルの Fabric を保存できなかった | Ganter Lab が Fabric を安全に保存できませんでした。 | ペアリングが始まる前なら手付かず。始まったあとなら、ノード ID 付きでコミッショニング済み | 何かをリセットする前に、保存の問題を解決します。 |

現場設備がすでにコミッショニングされたあとで失敗が届いたときは、メッセージがそう述べ、ノード ID を見せます。そのノードは **Fabric に残る**ので、ネットワークに現れたあとで機器検出から追加できます。その場合、機器をリセットしないでください。何も保存されなかったと述べるメッセージだけが、現場設備に手が付いていないという意味です。

ネットワークに参加できなかったと応えた機器は例外で、残しておく価値のあるものを何も持っていません。Ganter Lab は機器上のペアリングを終わらせ、機器は受け取ったものを捨ててすぐにペアリングモードに戻ります。同時にそのノードを Fabric から外すので、メッセージにはノード ID が付かず、機器検出が応えられないノードを並べることもありません。ネットワークを直して、ペアリングし直してください。ノードを残すのは、まったく応えなかった機器だけです。参加できたかどうかは、ローカルのネットワークに現れるまでわからないからです。

## 保存されるもの {#what-is-stored}

| もの | 置き場所 | 方法 |
|---|---|---|
| ネットワークの名前と種類 | ステーションの構成 | 書いたとおり。 |
| Wi-Fi のパスワードと Thread の運用データセット | ステーションの構成 | 機器のパスワードと同じく、入力した Windows のユーザーのために保護されます。別の Windows のアカウントでは空として読まれ、入力し直す必要があります。バックアップには含まれません。[別のコンピューター向けのエクスポート](settings-backups#export-for-another-machine)は、それ自身のパスワードで封をして持ち出します。 |
| セットアップコード | どこにもない | ペアリングが走っているあいだ入力欄にあるだけで、ペアリングが終わったとき、失敗したとき、中止したときに消されます。 |
| 機器が参加したネットワーク | 機器の構成 | その名前で、機器の**ネットワーク**の項目に出ます。 |
| 機器の識別 | 機器の構成とローカルの Fabric | ノード ID。 |

Wi-Fi のパスワードとデータセットは、診断ログにも、機器のアドレスにも、その Thing Description にも出ません。ネットワークとペアリングは、MCP サーバーを通じてエージェントに提供されません。ペアリングには機器のそばにいる人が要り、ネットワークは秘密を持っているからです。

## ノードの識別 {#node-identity}

ペアリングした機器は、その現場設備の安定した 64 ビットの**ノード ID** に結び付いています。ノード ID は「接続」のカードに、機器の状態の隣に、16 桁の 16 進数として読み取り専用で出ます。編集できる表示名は変えてかまいませんが、ノード ID は変えられません。保存した識別をもう読めない機器は、その場所に**再ペアリングが必要**と出します。

機器のパネルには、読み取り専用の**ネットワーク**の項目もあります。ペアリングしたときに機器が参加したネットワークの名前です。それを記録しなかったバージョンでペアリングした機器は、何も記録されていないと述べます。この項目は記録であって設定ではありません。**ネットワーク**のカードでそのネットワークを編集しても削除しても、機器には何も変わりません。

識別がノード ID であるおかげで、Matter の機器は互いに独立した接続の状態を保ちます。1 つのノードを無効にしても、削除しても、失っても、ほかのノードが使えなくなることはありません。そして機器を削除しても、手放すのはその安全なセッションの占有だけで、現場設備がローカルの Fabric から消えることはありません。

## 機器検出 {#discovery}

Matter のドライバーの**機器検出**は、このアプリケーションのローカルの Fabric にすでに参加しているノードを並べ、それぞれから、そのノードが公開する値を読みます。値を読むために各ノードと安全なセッションを開くので、ネットワークにいないノードも、セッションが開けなかったあとで、値のないまま一覧に残ります。機器検出の候補はノードの識別を持ち、セットアップの秘密は持ちません。機器検出の全体の流れは[機器検出](connector-discovery)で説明しています。

| ノード | そのカード | その動詞 |
|---|---|---|
| ここに機器がない：機器が削除されたか、ペアリングが機器を作らずに終わった | 公開する値が、それぞれチェック付きで並びます | **機器を追加**が、チェックした値をタグにして機器を作ります。新しいセレモニーは要りません。 |
| 設定済みの機器で、まだタグのない値がある | 設定済みと示され、公開する値のうちまだタグでないものの数と、その値がチェック付きで並びます | **タグにして追加**がチェックした値をその機器に追加し、**開く**がその機器を開きます。 |
| 設定済みの機器で、すべての値にタグがある | 「設定済みです。機器が公開するすべての値にタグがあります。」 | **開く**がその機器を開きます。 |
| 設定済みの機器で、値を報告しなかった | 「設定済みです。機器から値の報告はありませんでした。機器がオンラインになってから、もう一度機器検出を実行してください。」 | **開く**がその機器を開きます。 |

設定済みの機器の値は、名前ではなく、出力、クラスター、属性でそのタグと比べます。名前を変えたタグも数に入り、同じ値が二度追加されることはありません。

機器自身のページでも、離れずに同じことができます。「タグ」のカードの見出しにある**タグ検出**はそのノードだけを読み、まだタグがない値をチェック済みで一覧にし、**タグにして追加**を添えます（[機器のタグを検出する](connector-discovery#discovering-a-devices-tags)を参照）。

## タグ {#tags}

Matter の機器のタグは機器そのものから来ます。そのためにクラスターや属性の番号を入力する人はいません。うまく終わったペアリングは、そのままタグへ進みます。操作ログ帯には「Matter 機器「キッチンの照明」をペアリングしました。」と出て、ページは Matter のドライバーに開いて新しい機器を機器の表で強調表示し、その機器だけのスキャンがすぐに走ります。ペアリングが作った機器は、公開する値をすべてチェック付きにして**検出した機器**に現れ、スキャンは「「キッチンの照明」でタグにする値にチェックを入れてから、「タグにして追加」を押してください。」で終わります。要らないもののチェックを外して**タグにして追加**を押すと、操作ログ帯には「「キッチンの照明」にタグを 5 件追加しました。」と出ます。まだ応答していない機器は何も報告しません：「「キッチンの照明」からはまだ値の報告がありません。機器がオンラインになってから、もう一度機器検出を実行してください。」同じカードは、そのあとの**機器検出**のたびに、機器にまだタグのない値とともに戻ってきます。

**タグにして追加**は、Connector の構成の権限を持つロールにだけ描かれます。スキャンやペアリングが走っているあいだ、ステーションが変更を拒んでいるあいだ、何もチェックされていないあいだ（「追加する値に 1 つ以上チェックを入れてください。」）は、理由をツールチップにしてグレーのままです。機器がすでに出力、クラスター、属性を読んでいる値は二度と追加されません。チェックした値がすべてすでにあるときは何も保存されません：「チェックした値にはどれも「キッチンの照明」のタグがすでにあるため、何も追加しませんでした。」機器のほかのタグがすでに持っている名前には、明るさ (2) のように後ろに番号が付きます。

スキャンは、機器が公開するものを、Matter の仕様が並べるとおりに読みます。

| 何を | 機器がどこで伝えるか |
|---|---|
| 機器の出力（endpoint） | endpoint 0 の Descriptor クラスター（0x001D）、属性 `PartsList` |
| 各出力のクラスター | その出力の Descriptor、属性 `ServerList` |
| 各クラスターの値 | そのクラスターの属性 `AttributeList`（0xFFFB） |
| 各クラスターが受け付けるコマンド | そのクラスターの属性 `AcceptedCommandList`（0xFFF9） |
| 各クラスターが実装する任意の機能 | そのクラスターの属性 `FeatureMap`（0xFFFC） |
| 各値の今の読み取り値 | 値そのもの。一度だけ読みます |

スキャンが何を、どんな名前で出すか：

| 値 | 出し方 |
|---|---|
| ドライバーが知っている値（次の節） | ステーションの言語でのわかりやすい名前と、仕様が与える型で出します。仕様が定める変え方を機器が受け付けるときだけ書き込めて、そうでなければ読み取り専用です |
| ドライバーが知っている値のうち、クラスターが実装していない機能のもの：Hue and Saturation の機能がない色相と彩度、Color Temperature の機能がない色温度 | 出しません |
| ドライバーが知らない値 | 読み取り専用で、Matter の仕様での名前（`Level Control OnLevel`）か、ドライバーが属性を知らないときはクラスターと属性の番号（`On/Off attribute 0x131B0001`）で出します。型は機器が返した読み取り値の型です |
| 2 つ以上の出力にある同じ値 | 明るさ（出力 2）のように、名前がどの出力かを示します |
| グローバルな属性（0xFFF8 から 0xFFFD）や、ノードそのもの（endpoint 0）の値 | 出しません |
| リストや構造体、ドライバーが扱わない型の値、機器が読み取り値を返さなかった値 | 外して、スキャンを締める行で数えます |

書き込めるとして出したタグは、読み書きのアクセスで届きます。ほかはすべて読み取りのみで届きます。

## ドライバーが知っている値 {#the-values-the-driver-knows}

ドライバーは、Matter の仕様から取った表を 1 つ持っています。名前で知っている値と、それぞれの変わり方の表です。値の変わり方は 3 つのうちのどれかです。ドライバーが送るコマンドで変わる（機器は受け付けるコマンドの中にそれを挙げていなければなりません）、仕様が書き込めるとしていて機器が挙げている属性そのものへの書き込みで変わる、または機器が報告するだけの値で、まったく変わらない、のどれかです。

| 値 | クラスターと属性 | 型 | 書き込むと機器で何が起きるか | 仕様が定める範囲 |
|---|---|---|---|---|
| オン | On/Off（0x0006）、`OnOff`（0x0000） | Boolean | true でコマンド `On`（0x01）、false で `Off`（0x00）を送ります。機器が両方を受け付けるときだけ書き込めます | true か false |
| 明るさ | Level Control（0x0008）、`CurrentLevel`（0x0000） | UInt32 | レベルと、遷移時間 0、オプションの上書きなしで `MoveToLevelWithOnOff`（0x04）を送ります。出力はそのレベルで点き、最小で消えます | 0 から 254 |
| 色相 | Color Control（0x0300）、`CurrentHue`（0x0000） | UInt32 | 最短の向きで、遷移時間 0 の `MoveToHue`（0x00）を送ります。Hue and Saturation の機能があるときだけです | 0 から 254 |
| 彩度 | Color Control（0x0300）、`CurrentSaturation`（0x0001） | UInt32 | 遷移時間 0 の `MoveToSaturation`（0x03）を送ります。Hue and Saturation の機能があるときだけです | 0 から 254 |
| 色温度 | Color Control（0x0300）、`ColorTemperatureMireds`（0x0007） | UInt32 | 遷移時間 0 の `MoveToColorTemperature`（0x0A）を送ります。Color Temperature の機能があるときだけです。機器は値を自分の限界の中に収めます | 0 から 65279、単位はミレッド |
| ブラインドの位置 | Window Covering（0x0102）、`CurrentPositionLiftPercent100ths`（0x000E） | UInt32 | `GoToLiftPercentage`（0x05）を送ります | 0（開）から 10000（閉）、単位は 1/100 パーセント |
| 室温 | Thermostat（0x0201）、`LocalTemperature`（0x0000） | Float（°C） | 何も起きません：読み取り専用 | -27315 から 32767、単位は 1/100 ℃。読み取りは -273.15 から 327.67 °C |
| 冷房の設定値 | Thermostat（0x0201）、`OccupiedCoolingSetpoint`（0x0011） | Float（°C） | 属性に書き込みます。機器は自分の限界の外の設定値を拒みます | -27315 から 32767、単位は 1/100 ℃。読み取りは -273.15 から 327.67 °C |
| 暖房の設定値 | Thermostat（0x0201）、`OccupiedHeatingSetpoint`（0x0012） | Float（°C） | 属性に書き込みます。機器は自分の限界の外の設定値を拒みます | -27315 から 32767、単位は 1/100 ℃。読み取りは -273.15 から 327.67 °C |
| ファンのモード | Fan Control（0x0202）、`FanMode`（0x0000） | UInt32 | 属性に書き込みます | 0 停止、1 弱、2 中、3 強、4 運転、5 自動、6 スマート |
| ファン速度の設定 | Fan Control（0x0202）、`PercentSetting`（0x0002） | UInt32 | 属性に書き込みます | 0 から 100 パーセント |
| ファン速度 | Fan Control（0x0202）、`PercentCurrent`（0x0003） | UInt32 | 何も起きません：読み取り専用 | 0 から 100 パーセント |
| 温度 | Temperature Measurement（0x0402）、`MeasuredValue`（0x0000） | Float（°C） | 何も起きません：読み取り専用 | -27315 から 32767、単位は 1/100 ℃。読み取りは -273.15 から 327.67 °C |
| 湿度 | Relative Humidity Measurement（0x0405）、`MeasuredValue`（0x0000） | Float（%） | 何も起きません：読み取り専用 | 0 から 10000、単位は 1/100 パーセント。読み取りは 0 から 100 % |
| 照度 | Illuminance Measurement（0x0400）、`MeasuredValue`（0x0000） | UInt32 | 何も起きません：読み取り専用 | 0 から 65534。10000 × log10(ルクス) + 1 です |
| 圧力 | Pressure Measurement（0x0403）、`MeasuredValue`（0x0000） | Float（kPa） | 何も起きません：読み取り専用 | -32767 から 32767、単位は 1/10 キロパスカル。読み取りは -3276.7 から 3276.7 kPa |
| 在室 | Occupancy Sensing（0x0406）、`Occupancy`（0x0000） | Boolean | 何も起きません：読み取り専用 | 誰かいるとき true |
| 状態 | Boolean State（0x0045）、`StateValue`（0x0000） | Boolean | 何も起きません：読み取り専用 | true か false |

仕様は温度、湿度、圧力を固定の単位で送ります。1/100 ℃、1/100 %、1/10 キロパスカルです。機器検出はこれらの値を最初から °C、%、kPa で出します。タグはスケールの段階に係数（温度と湿度は 0.01、圧力は 0.1）と単位を持って届くので、機器が 2150 を送れば 21.5 °C と読めます。書き込みは値が出ていく前にその段階を逆にかけるので、21.5 と書いた設定値は 2150 として機器に届きます。照度は対数（10000 × log10(lux) + 1）なので、どの係数でも変換できず、機器が送る数値のまま読めます。そのほかの値も、機器が送るまま読めます。

ドアロック、X と Y の座標による色、シーン、グループ、`Toggle` コマンドは表にありません。Matter の機器には自分のコマンドもありません。変更はすべて、そのタグのどれかへの書き込みです。

## 値を書き込む {#writing-a-value}

アクセスが読み書きの Matter のタグは、書き込まれると機器を変えます。「現在の値」のカード、ダッシュボードの操作部品、Logic、エージェントのどこからでもです。書き込みはどのドライバーとも同じく機器の待ち行列に入り、機器の読み出しと順番に進み、その答えは機器自身の答えです。ドライバーは表から Matter のコマンドか属性への書き込みを選び、コマンドを選ぶ人はいません。書き込めたと数えるのは機器の SUCCESS だけです。それ以外はすべて、理由を添えて拒否されます。

| 何が起きたか | どこで決まるか | 示される理由 |
|---|---|---|
| その点がドライバーの表の値ではない | 何かを送る前 | 機器がその値をどう変えるかをドライバーが知らないので、タグは読むだけです。 |
| その点が、表が読み取り専用とする値である | 何かを送る前 | 機器はその値を報告し、外から設定するものは何もありません。 |
| 書いた値が true でも false でもない（Boolean の値のとき）、または整数でない | 何かを送る前 | 値が受け付けるものと、書かれたもの。 |
| 値が仕様の定める範囲の外にある | 何かを送る前 | 上の表が示す範囲。 |
| タグがクラスターを指していない | 何かを送る前 | Matter の値は出力、クラスター、属性で見つかること。 |
| 機器が SUCCESS 以外の状態で答えた | 機器 | 機器が示したとおりの状態です。仕様での名前と番号で、たとえば CONSTRAINT_ERROR, 0x87（値が機器の受け付ける範囲の外にある）や UNSUPPORTED_COMMAND, 0x81（この値を変えるコマンドを機器が受け付けない）です。クラスターが加える状態はその後に続き（FAILURE, 0x01, cluster 0x02）、仕様が名前を付けていない状態は番号だけで読めます。 |
| 機器が時間内に答えない | 機器 | 応答なし。 |

拒否された書き込みが、書き込めたと伝えられることはなく、現場設備に届かなかったと伝えられることもありません。タグのページでは、機器が拒否したときは状態の行に「現場設備が書き込みを拒否しました：CONSTRAINT_ERROR, 0x87。」と出ます。何かを送る前に決まった拒否では、状態の代わりに理由が入ります。答えが来なかったときは「書き込みを確認できませんでした：現場設備が時間内に応答しませんでした。」と出ます。「書き込みに失敗しました：現場設備に届きませんでした。」は、接続していない機器のためのものです。理由は書き込みと一緒にも運ばれ、その書き込みのログの行が状態の意味とともに示し、エージェントの `tag_write` がそれを返します。

## 手で作るタグ {#a-tag-made-by-hand}

スキャンが出せる形で機器が公開していない、まれな値のために、Matter の機器の**タグを追加**が、手で埋めるタグを作ります。その「信号源」のカードは 3 つの欄を 1 行に並べ、その下のアドレスの予告がそれを 10 進で `<endpoint>/<cluster>/<attribute>` と組み立てます（`1/8/0` は 1 つ目の出力の明るさです）。クラスターを選ぶまでタグは保存されず、パネルはこう伝えます：「このタグが読み取るクラスターを選んでください。クラスターがないと、機器には何も問い合わせません。」

| 欄 | 何をするか | 値 | 既定 |
|---|---|---|---|
| **出力（endpoint）** | タグが機器のどの出力を読むか。 | 0 から 65535。1 が最初の制御できる出力、0 がノードそのもの | 1 |
| **Matter のクラスター** | タグがその出力のどのクラスターを読むか。 | Matter のカタログのクラスターを、仕様での名前と番号で並べます（`Level Control (0x0008)` のように）。カタログが名前を持たず、スキャンで見つかったクラスターは、番号で先頭に並びます | なし |
| **属性** | タグがクラスターのどの属性を読むか。 | 0 以上。0 がクラスター自身の値 | 0 |

タグの名前は自由です。タグに名前を付けるだけで、機器の何も選びません。データ型は Boolean、Int32、UInt32、Float、Double、String から選び、宣言した型で表せない読み取り値は、代わりの数値ではなくエラーとして読めます。値は機器が送るまま届きます。手で作った温度、湿度、圧力のタグは、スケールの段階に上の表の係数と単位を入れるまで、1/100 や 1/10 の単位で読めます。

アクセスの欄は、ドライバーの表が値を変えられる点にだけ書き込みを出します。そうでない点には読み取りのみを出し、その下に理由を示します。

| 点 | アクセスの欄が出すもの | 示す文 |
|---|---|---|
| コマンドか属性の書き込みで変わる、表の値 | 読み取りのみ、書き込みのみ、読み書き | なし |
| クラスターがまだ選ばれていない | 読み取りのみ | 「タグが機器の値を指すまでは読み取り専用です：クラスターを選んでください。」 |
| 表が知らない値 | 読み取りのみ | 「読み取り専用：この値を機器がどう変えるのか、ドライバーは知りません。」 |
| 表が読み取り専用とする値 | 読み取りのみ | 「読み取り専用：この値は機器が報告するもので、外から設定するものではありません。」 |

出力、クラスター、属性を編集してタグがドライバーの書き込めない値を指すと、そのアクセスは読み取りのみに戻ります。機器検出が出したタグは、機器検出が与えたアクセスを保ちます。機器がどのコマンドを受け付けるかを尋ねるのは機器検出だけだからです。機器が挙げなかった値は読み取りのみのままで、欄は書き込みも出します。

## 以前のバージョンが保存したタグ {#tags-saved-by-earlier-versions}

以前のバージョンは、Matter のタグのクラスターをタグの名前だけで示し、アドレスは `<endpoint>/<attribute>` でした。このバージョンが初めて起動すると、名前が Matter のカタログのクラスターである Matter の機器のタグ（最後のコロンのあとの部分を、前後の空白を除き、大文字と小文字を区別せずに見ます）は、そのクラスターを受け取り、それまで読んでいたのとまったく同じ値を読み続けます。名前はそのまま残り、アドレスの予告は `<endpoint>/<cluster>/<attribute>` を示すようになります。名前がどのクラスターにも合わなかったタグは、何も読んだことがありません。クラスターのないまま残り、読み出しはそう伝える理由とともに拒否され、そのページがクラスターを求めます。変換されたタグは、それまでのアクセスである読み取りのみを保ちます。それらのバージョンが出していたのはそれだけでした。書き込むには読み書きを選んでください。上の表の値で使えます。
