Matter 08 · クラスタとデバイスタイプ — 実際に使う部品のカタログ

Chapter 08

クラスタとデバイスタイプ — 実際に使う部品のカタログ

この章がなぜ必要なのか——「何を実装すればよいか」は Device Library が決めている.

「調光できる電球を作る」と決めたとき、実装すべきクラスタは自分で選ぶものではない。 Device Library Specification が「Dimmable Light なら On/Off と Level Control は必須」と規定している。

必須のものを 1 つでも欠けば認証は通らない。 逆に、必須でないものを実装する自由はある。

この章は、よく使うクラスタとデバイスタイプの実務的なカタログである。 正確な定義は必ず仕様書で確認すること——ここは地図であって領土ではない。

この章で使う既出の用語(定義は各リンク先). コミッショニング(01 章 3 節)、ネットワーク(01 章 3 節)、相互運用性(01 章 2 節)、ACL(02 章 4 節)、Administrator(02 章 5 節)、Attribute(02 章 2 節)、Client(02 章 5 節)、Cluster(02 章 2 節)、Command(02 章 2 節)、Endpoint(02 章 2 節)、Wi-Fi(04 章 9 節)、Group(06 章 4 節)、FeatureMap(07 章 2 節)、ミレッド(07 章 6 節)

1. ユーティリティクラスタ(Endpoint 0)

機器全体に関わるもの。Root Node に載る。

IDクラスタ役割必須
0x001DDescriptorEndpoint の目次全 Endpoint で必須
0x0028Basic InformationVID/PID、製品名、シリアル、ソフトウェアバージョン必須
0x001FAccess ControlACL(14 章)必須
0x003EOperational Credentials証明書・Fabric 管理(12 章〜14 章)必須
0x003FGroup Key Managementグループ鍵必須
0x0030General Commissioningコミッショニングの進行・Fail-Safe必須
0x0031Network CommissioningWi-Fi/Thread の設定ネットワーク種別に応じて
0x0033General Diagnostics再起動理由、ネットワーク状態必須
0x0034Software Diagnosticsヒープ使用量など任意
0x0035Thread Network DiagnosticsThread の統計Thread なら
0x0036WiFi Network DiagnosticsWi-Fi の統計Wi-Fi なら
0x002AOTA Software Update Requestor更新を受ける側(18 章)OTA 対応なら
0x0029OTA Software Update Provider更新を配る側Provider なら
0x002BLocalization Configuration言語任意
0x002CTime Format Localization時刻表示任意
0x002EPower Source Configuration電源構成任意
0x002FPower Source電池残量など電池機器なら推奨
0x0038Time Synchronization時刻同期任意
0x0046ICD Management間欠動作の管理(17 章)ICD なら
0x003CAdministrator CommissioningCommissioning Window の開閉(14 章)必須

Basic Information の主な属性

ID属性内容
0x0001VendorNameメーカー名
0x0002VendorIDCSA 割り当ての VID
0x0003ProductName製品名
0x0004ProductIDメーカーが決める PID
0x0005NodeLabelユーザーが付ける名前(書き込み可)
0x0006Location国コード
0x0007HardwareVersionハードのバージョン
0x0009SoftwareVersionソフトのバージョン(OTA の判定に使う)
0x000FSerialNumberシリアル番号
0x0012UniqueID機器固有の識別子
0x0013CapabilityMinima対応する最小のサブスクリプション数など

SoftwareVersion は単調増加の整数でなければならない. OTA では「Provider の版がこれより大きいか」で更新を判断する(18 章)。 1.2.3 のような文字列は SoftwareVersionString の方で、 数値の SoftwareVersion とは別物である。両方を整合させること。

UniqueID は個体ごとに違う値にすること. エコシステムが機器を追跡・再認識するのに使う。全個体同じにすると、 「同じ機器を 2 台登録できない」といった不具合が出る。

2. 汎用アプリケーションクラスタ

IDクラスタ用途
0x0003Identify「どれ?」を知らせる。点滅・音など
0x0004Groupsグループへの参加
0x0006On/OffON / OFF
0x0008Level Control明るさ・強さのレベル
0x0300Color Control色(HS / XY / 色温度)
0x0062Scenes Managementシーン(1.4 以降。旧 0x0005)
0x001EBinding機器どうしの直接連携(07 章)
0x0045Boolean State単純な真偽値センサー(接点など)

Identify は軽視されがちだが必須級である. ユーザーが「10 個ある電球のうちどれを設定しているのか」を知る唯一の手段である。 多くのデバイスタイプで必須とされ、認証テストでも確認される。 実装は「LED を点滅させる」程度でよいが、必ず目に見える反応を返すこと。

On/Off (0x0006)

種別ID内容
Attribute0x0000OnOff(bool、読み取り専用)
Attribute0x4003StartUpOnOff(電源投入時の状態)
Command0x00Off
Command0x01On
Command0x02Toggle
Command0x40OffWithEffect(フェードアウトなど)
Command0x42OnWithTimedOff(一定時間後に自動 OFF)

Level Control (0x0008)

種別ID内容
Attribute0x0000CurrentLevel(0〜254)
Attribute0x0002 / 0x0003MinLevel / MaxLevel
Attribute0x0011OnLevel
Command0x00MoveToLevel(レベル + 遷移時間)
Command0x01Move(連続的に増減)
Command0x02Step(一定量ずつ)
Command0x03Stop
Command0x04〜0x07上記の WithOnOff 版

WithOnOff の意味. 「明るさを 0 にしたら、OnOff 属性も false にする」という連動を行う版。 通常版は OnOff を変えない。

ユーザーがスライダーを 0 に下げたとき、電球が「消えた」ことになるべきか—— という UX の話が、そのままコマンドの選択に現れている。

Color Control (0x0300)

FeatureMap で対応方式を宣言する。

ビット機能内容
0HS色相・彩度
1EHUE拡張色相
2CL色ループ
3XYCIE xy 座標
4CT色温度(ミレッド)
属性内容
CurrentHue / CurrentSaturation0〜254
CurrentX / CurrentYCIE xy(16 bit)
ColorTemperatureMiredsミレッド = 1,000,000 / K
ColorMode現在どの方式で色が決まっているか

色温度がミレッドである理由. ケルビンだと 2700K〜6500K の範囲で、 「低い側の 100K の差」と「高い側の 100K の差」の見た目の差が大きく違う。 ミレッド(逆数)にすると知覚的に線形に近くなり、スライダーの操作感がよくなる。

2700K → 370 mired、6500K → 154 mired。大小が逆転するので実装で混乱しやすい。

3. センサークラスタ

IDクラスタ主な属性単位
0x0402Temperature MeasurementMeasuredValue0.01 °C
0x0405Relative Humidity MeasurementMeasuredValue0.01 %
0x0403Pressure MeasurementMeasuredValuekPa
0x0400Illuminance MeasurementMeasuredValue対数スケール
0x0406Occupancy SensingOccupancyビットマップ
0x0045Boolean StateStateValuebool
0x005BAir QualityAirQualityenum
0x005CSmoke CO Alarm各種アラーム状態—

Illuminance は対数である. MeasuredValue = 10000 × log10(lux) + 1。 生の lux を入れると桁が違う値になる。仕様を必ず確認すること。

センサー系はどれも Nullable である(07 章)。 測定できていないときは null を返す。0 を返してはいけない。

4. 主なデバイスタイプ

Device Library Specification が定義する。必須クラスタの組み合わせが本体である。

照明

IDデバイスタイプ必須クラスタ(概略)
0x0100On/Off LightIdentify, Groups, On/Off
0x0101Dimmable Light+ Level Control
0x010CColor Temperature Light+ Color Control (CT)
0x010DExtended Color Light+ Color Control (HS/XY/CT)

電源・スイッチ

IDデバイスタイプ
0x010AOn/Off Plug-in Unit
0x010BDimmable Plug-in Unit
0x0103On/Off Light Switch(Client 側)
0x0104Dimmer Switch(Client 側)
0x0105Color Dimmer Switch(Client 側)
0x000FGeneric Switch(ボタン。イベントで通知)

センサー

IDデバイスタイプ
0x0015Contact Sensor
0x0106Light Sensor
0x0107Occupancy Sensor
0x0302Temperature Sensor
0x0307Humidity Sensor
0x0305Pressure Sensor
0x0303Pump(など、機器系)
0x0076Smoke CO Alarm
0x002CAir Quality Sensor

住宅設備

IDデバイスタイプ
0x000ADoor Lock
0x0202Window Covering
0x0301Thermostat
0x002BFan
0x002DAir Purifier
0x0072Room Air Conditioner

システム系

IDデバイスタイプ用途
0x0016Root NodeEndpoint 0
0x000EAggregatorブリッジの親(19 章)
0x0013Bridged Nodeブリッジされた機器(19 章)
0x0011Power Source電源情報
0x0012OTA Requestor
0x0014OTA Provider

Generic Switch (0x000F) が「ボタン」の正解である. 壁スイッチやリモコンのボタンは、状態(ON/OFF)ではなく 「押された」というイベントを通知する。 Switch クラスタ (0x003B) の InitialPress / ShortRelease / MultiPressComplete / LongPress などのイベントで、 シングルクリック・ダブルクリック・長押しを区別できる。

これを On/Off Light Switch(Client)と混同しないこと。前者は「イベントを上げる」、 後者は「他の機器にコマンドを送る」である。両方を実装することも多い。

5. Conformance(適合性)の読み方

Device Library の表には、各クラスタ・属性に適合性の記号が付く。

記号意味
MMandatory(必須)
OOptional(任意)
PProvisional(暫定。将来変わりうる)
DDeprecated(非推奨)
XDisallowed(禁止)
[FEATURE]その FeatureMap ビットが立っているなら必須
A, B条件付き(A または B のとき)

Provisional (P) には手を出さないのが安全である. 仕様が固まっておらず、次のバージョンで変わる可能性がある。 認証テストの対象外でもあり、実装しても他社が対応していないことが多い。

6. 実装の進め方

1. 作りたい製品に最も近い Device Type を Device Library から選ぶ
       ↓
2. その必須クラスタ(M)をリストアップ
       ↓
3. Application Cluster Specification で各クラスタの必須属性・コマンドを確認
       ↓
4. FeatureMap で「どの機能を宣言するか」を決める
   (宣言したら必ず動かす)
       ↓
5. ZAP で構成を作る([16 章](16_ZAPとクラスタ実装.md))
       ↓
6. 生成コードのコールバックを実装
       ↓
7. Device Library に照らして実装漏れをチェック

Step 1 で「近いものがない」場合が難所である. 標準に存在しないカテゴリの製品なら、

という選択になる。3 番目は時間がかかるが、 市場を作る立場なら検討する価値がある。実際、1.2 以降の追加は こうした提案の積み重ねである。

7. 落とし穴

落とし穴内容
必須クラスタの実装漏れ認証で落ちる。Device Library でチェック
FeatureMap の過剰宣言宣言したが動かない機能は確実に落ちる
単位の誤り温度 0.01 °C、明るさ 0〜254、色温度ミレッド、照度は対数
Nullable の未対応センサー異常時に 0 を返してしまう
Identify の未実装ユーザーが機器を特定できない
SoftwareVersion の非単調OTA が正しく動かない
UniqueID の重複複数台登録で問題が出る
Client 側クラスタの忘れスイッチが何も制御できない
独自クラスタへの依存他社エコシステムで主要機能が使えない

8. まとめ