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