RustでMatterゲートウェイを作る:Apple Homeにデバイスを表示する
rs-matterを使った試作で、エンドポイント、機器の対応表、操作、状態通知、保存を整理します。
前回は、開発ボードを待たずにパソコンとスマホでゲートウェイを試し、Apple Homeとのペアリングを確認しました。今回はRustのrs-matterを使ったMatter側を見ていきます。実機のBluetooth Mesh相互接続、Linuxボード、大規模構成はまだ未検証です。
ゲートウェイの中に複数の機器を置く
ゲートウェイは一つのMatterノードとして現れます。エンドポイント0は基本機能、1はアグリゲーターで、その先のライトにはそれぞれ別のエンドポイントを割り当てます。端点の種類に加え、Descriptor、On/Off、Bridged Device Basic Information、Groupsの各クラスターで機能と状態を表します。
機器の対応表
試作では、エンドポイント番号、デバイスアドレス、名前、オン・オフ状態、到達可能かどうかを表で管理します。Apple Homeから端点2をオンにする命令が届いたら、対応表からアドレスを調べ、下位側へ命令を送ります。実製品では配網、セキュリティ、復旧などの情報も必要です。
操作と状態通知
命令を受けた試作プログラムは、まずローカル状態を楽観的に更新してから命令を送ります。その後、機器から状態が返ればその値で修正します。返事がなければ画面表示と実機が一時的にずれる可能性があり、タイムアウト、再送、状態確認、オフライン判定は今後の課題です。
逆方向も重要です。壁のスイッチを押した場合、ゲートウェイは通知元のアドレスから端点を探し、状態を更新してMatterの購読者に通知します。スマホのデモでは同じ広告が繰り返されるため、古い状態に戻らないよう重複を除外しています。これは平文BLE広告によるデモで、実際のMesh通信の検証ではありません。
増減と再起動
試作では稼働中に機器を追加・削除できます。端点番号は増加させ、削除直後に再利用しません。コントローラーの古い情報との混同を減らすためですが、長期的な番号管理は引き続き検討が必要です。
端点番号、アドレス、名前の対応はファイルに保存し、Matter自体のデータはrs-matterの永続ストアを使います。対応表は一時ファイルに書いてから置き換えますが、これだけであらゆる停電への安全が保証されるわけではありません。実機の状態再確認やMesh鍵の安全な保存・バックアップも必要です。
検証できたことと次の一歩
Apple Homeとのペアリング、模擬デバイスの表示と操作、状態の返送、追加・削除と再起動の基本動作はデモで確認しました。実Mesh、Linuxボード、障害復旧、多数の同時接続は未検証です。テスト用証明書は製品認証を意味しません。
release設定ではサイズ最適化、LTO、シンボル削除を使っています。過去のPC向けビルドは約2.3 MBでしたが、対象や構成を変えれば再計測が必要です。次はシミュレーターを実機に置き換えて検証します。