Google Home 生态系统中的设备可以使用 Cloud-to-cloud、Matter 或两者来实现。某些设备类型比其他设备类型更复杂,在使用 Home API 进行开发时,如何让这些设备与生态系统中的其他设备顺畅对接是一项挑战。
实现其中一些设备类型的挑战之一是,设备可以由不同的特征组合构成。并非所有组合的效果都一样好。此外,Cloud-to-cloud 数据模型会映射到 Matter 数据模型,但并不总是以清晰的一对一方式进行映射。请参阅 Android 上的数据模型,其中更深入地讨论了数据模型及其映射。
本页详细介绍了特定设备的数据模型如何相互映射,并就使用哪些特征来实现这些设备类型提供了一些指导。
烤箱
与其他设备类型相比,烤箱 (OvenDevice) 设备类型及其组件特征的实现不那么简单。在 Matter 中,有多种方法可以实现烤箱,但并非所有方法都能实现与其他设备或 Google Home 生态系统的无缝互操作。
特征映射
我们建议使用 Oven Cavity Operational State 集群,而不是使用 Oven Mode 和 On Off 集群来实现 Matter 烤箱设备。此集群在 Home API 中由 OvenCavityOperationalState 特性表示,并映射到 Cloud-to-cloud
RunCycle 特性。它定义了“预先升温”“预热完成”和“冷却”等阶段。
| Home API | Cloud-to-cloud |
|---|---|
OvenCavityOperationalState
|
RunCycle
|
Cloud-to-cloud 烤箱数据模型存在一些限制。Cloud-to-cloud 烤箱数据模型仅允许使用单个腔室,且仅有一个 RunCycle。相比之下,Matter 将多腔烤箱建模为设备端点,每个腔都有一个烤箱腔操作状态集群。
对于某些烤箱设备,在运行时更改阶段列表可能比较合适。例如,支持预热的烤箱在预热阶段的阶段列表中可能具有与加热或冷却阶段不同的条目。
推荐的实现方式
如上一部分所述,Matter 烤箱实现应实现烤箱腔体运行状态集群,该集群在 Home API 中建模为 OvenCavityOperationalState 特性。
为获得最佳结果,请确保您的 Cloud-to-cloud 烤箱设备实现 RunCycle trait,并通过设置 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 集群实现的烤箱构建自动化操作时,请参考 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
}
如需查看已完成示例,请参阅当烤箱达到所选温度时,让灯闪烁并发出通知。