Devices in the Google Home ecosystem can be implemented using Cloud-to-cloud, Matter, or both. Some device types are more complex than others, and present a challenge to develop when using the Home APIs in a way that permits smooth interfacing with other devices in the ecosystem.
One of the challenges in implementing some of these device types is that the devices can be composed of different combinations of traits. Not all combinations work as well as others. Also, the Cloud-to-cloud data model maps to the Matter data model, but not always in a clear, one-to-one fashion. See Data model, which discusses the data models and their mappings in more depth.
This page contains more information the data models for specific devices map to one another, and offers some guidance on which traits to use to implement those device types.
Oven
The Oven
(OvenDevice
)
device type and its component traits are not as straightforward to implement
compared to other device types. There are multiple ways to implement an Oven in
Matter, but not all approaches result in seamless
interoperation with other devices or with the Google Home ecosystem.
Trait mapping
Rather than implementing a Matter Oven device using the
Oven Mode and On Off clusters, we recommend using the Oven Cavity Operational
State cluster. This cluster is represented in the Home APIs by the
OvenCavityOperationalState
trait, and maps to the Cloud-to-cloud
RunCycle
trait. It defines phases such as
"pre-heating", "pre-heated", and "cooling down".
Home APIs | Cloud-to-cloud |
---|---|
OvenCavityOperationalState
|
RunCycle
|
There are limitations to the Cloud-to-cloud Oven data model. The
Cloud-to-cloud Oven data model only allows for a single chamber,
with a single RunCycle
. In contrast, Matter models a
multi-chamber Oven as a device endpoint with an Oven Cavity Operational State
cluster for each chamber.
For some Oven devices, it may be appropriate for the phase list to change at runtime. For example, Ovens that support preheating could have different entries in the phase list during the preheating phase than during the heating or cooldown phases.
Recommended implementation
As discussed in the previous section, a Matter Oven
implementation should implement the Oven Cavity Operational State cluster, which
is modeled in the Home APIs as the
OvenCavityOperationalState
trait.
For best results, ensure that your Cloud-to-cloud Oven device
implements the RunCycle
trait and publish
the current state by setting the currentRunCycle
attribute. This attribute is
observable by the Home APIs through the
OvenCavityOperationalState.phaseList
and
OvenCavityOperationalState.currentPhase
attributes.
The Oven device should also publish a run cycle device notification by updating
the priority
, status
, and currentCycleRemainingTime
attributes of
RunCycle
. The following example results in an
OperationalState.OperationCompletion
event being sent, and can be used
to indicate that the oven has transitioned from the 'pre-heating' cycle to the
'pre-heated' cycle:
{
"currentRunCycle": [
{
"currentCycle": "pre-heating",
"nextCycle": "pre-heated",
"lang": "en"
}
],
"currentTotalRemainingTime": 1200,
"currentCycleRemainingTime": 300
}
Use an Oven in an automation
When building an automation for an Oven implemented using the
Oven Cavity Operational State cluster, reference the currentPhase
attribute to
know what cycle the oven is in:
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
}
For a complete example, see Blink the lights and announce when the oven reaches the chosen temperature.