Google Home エコシステムのデバイスは、Cloud-to-cloud または Matter のいずれか、またはその両方を使用して実装できます。デバイスタイプによっては、他のデバイスとスムーズにインターフェースできるように Home API を使用すると、開発が困難になる場合があります。
これらのデバイスタイプの実装における課題の 1 つは、デバイスがさまざまなトレイトの組み合わせで構成される可能性があることです。すべての組み合わせが同じように機能するとは限りません。また、Cloud-to-cloud データモデルは Matter データモデルにマッピングされますが、必ずしも明確な 1 対 1 のマッピングとは限りません。データモデルとそのマッピングについて詳しくは、データモデルをご覧ください。
このページでは、特定のデバイスのデータモデルが相互にマッピングされる仕組みについて詳しく説明します。また、これらのデバイスタイプを実装するために使用するべき特性についても説明します。
オーブン
オーブン(OvenDevice
)デバイスタイプとそのコンポーネント トレイトは、他のデバイスタイプと比較して実装が簡単ではありません。Matter にオーブンを実装する方法は複数ありますが、すべてのアプローチで他のデバイスや Google Home エコシステムとのシームレスな相互運用が実現できるわけではありません。
トレイト マッピング
Oven Mode クラスタと On Off クラスタを使用して Matter Oven デバイスを実装するのではなく、Oven Cavity Operational State クラスタを使用することをおすすめします。このクラスタは、Home API では OvenCavityOperationalState
トレイトで表され、Cloud-to-cloud
RunCycle
トレイトにマッピングされます。「予熱」、「予熱済み」、「冷却中」などのフェーズを定義します。
Google Home の API | Cloud-to-cloud |
---|---|
OvenCavityOperationalState
|
RunCycle
|
Cloud-to-cloud Oven データモデルには制限があります。Cloud-to-cloud オーブン データモデルでは、1 つのチャンバーと 1 つの RunCycle
のみが許可されます。対照的に、Matter は、マルチチャンバーのオーブンを、各チャンバーのオーブン キャビティの動作状態クラスタを持つデバイス エンドポイントとしてモデル化します。
一部のオーブン デバイスでは、フェーズリストを実行時に変更することが適切な場合があります。たとえば、予熱をサポートするオーブンでは、予熱フェーズと加熱フェーズまたは冷却フェーズでフェーズリスト内のエントリが異なる場合があります。
おすすめの実装方法
前のセクションで説明したように、Matter オーブンの実装では、オーブン キャビティの動作状態クラスタを実装する必要があります。これは、Home API で OvenCavityOperationalState
トレイトとしてモデル化されています。
最良の結果を得るには、Cloud-to-cloud オーブン デバイスが RunCycle
トレイトを実装し、currentRunCycle
属性を設定して現在の状態を公開するようにしてください。この属性は、Home API の OvenCavityOperationalState.phaseList
属性と OvenCavityOperationalState.currentPhase
属性で検出できます。
オーブン デバイスは、RunCycle
の priority
、status
、currentCycleRemainingTime
属性を更新して、実行サイクルのデバイス通知も公開する必要があります。次の例では、OperationalState.OperationCompletion
イベントが送信されます。これは、オーブンが「予熱」サイクルから「予熱済み」サイクルに移行したことを示すために使用できます。
{
"currentRunCycle": [
{
"currentCycle": "pre-heating",
"nextCycle": "pre-heated",
"lang": "en"
}
],
"currentTotalRemainingTime": 1200,
"currentCycleRemainingTime": 300
}
自動化でオーブンを使用する
Oven Cavity Operational State クラスタを使用して実装された Oven の自動化を構築する場合は、currentPhase
属性を参照して、オーブンがどのサイクルにあるかを確認します。
sequential {
val starterNode =
starter<_>(oven, OvenDevice, OvenCavityOperationalState /* Or OperationalState */)
condition {
expression = starterNode.phaseList[operationalState.currentPhase.toUInt()] equals "pre-heated"
}
action(speaker, SpeakerDevice) {
command(AssistantBroadcast.broadcast("Oven Cycle Complete"))
}
// Additional actions here as needed
}
完全な例については、オーブンが選択した温度に達したときにライトを点滅させて通知するをご覧ください。