Google Home 生态系统中的设备可以使用 Cloud-to-cloud、Matter 或同时使用这两种技术来实现。某些设备类型比其他设备类型更复杂,如果使用 Home API 以允许与生态系统中的其他设备顺畅交互的方式进行开发,则会面临挑战。
实现其中一些设备类型的一项挑战是,设备可以由不同的特征组合而成。并非所有组合的效果都一样好。此外,Cloud-to-cloud 数据模型会映射到 Matter 数据模型,但并不总是以清晰的一对一方式进行映射。请参阅有关 Android 的数据模型,其中更深入地讨论了数据模型及其映射。
本页详细介绍了特定设备的数据模型如何相互映射,并提供了一些有关使用哪些特征来实现这些设备类型的指南。
烤箱
与其他设备类型相比,烤箱 (OvenDevice
) 设备类型及其组件特征的实现并不那么简单。在 Matter 中实现烤箱的方法有很多种,但并非所有方法都能与其他设备或 Google Home 生态系统实现无缝互操作。
特征映射
我们建议使用“烤箱腔运行状态”集群,而不是使用“烤箱模式”和“开启/关闭”集群来实现 Matter 烤箱设备。此集群在 Home API 中由 OvenCavityOperationalState
特征表示,并映射到 Cloud-to-cloud
RunCycle
特征。它定义了“预热”“预热完成”和“冷却”等阶段。
Home API | Cloud-to-cloud |
---|---|
OvenCavityOperationalState
|
RunCycle
|
Cloud-to-cloud Oven 数据模型存在一些限制。Cloud-to-cloud 烤箱数据模型仅允许使用单个腔室,并具有单个 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
}
在自动化中使用烤箱
在为使用“烤箱腔体运行状态”集群实现的烤箱构建自动化时,请引用 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
}
如需查看完整示例,请参阅在烤箱达到所选温度时闪烁灯光并发出通知。