Geräte im Google Home-Ökosystem können mit Cloud-to-cloud, Matter oder beidem implementiert werden. Einige Gerätetypen sind komplexer als andere und stellen eine Herausforderung für die Entwicklung dar, wenn die Home-APIs so verwendet werden, dass eine reibungslose Interaktion mit anderen Geräten im Ökosystem möglich ist.
Eine der Herausforderungen bei der Implementierung einiger dieser Gerätetypen besteht darin, dass die Geräte aus verschiedenen Kombinationen von Merkmalen bestehen können. Nicht alle Kombinationen funktionieren gleich gut. Außerdem wird das Cloud-to-cloud-Datenmodell dem Matter-Datenmodell zugeordnet, aber nicht immer auf klare, eins-zu-eins-Weise. Weitere Informationen zu den Datenmodellen und ihren Zuordnungen finden Sie unter Datenmodell unter Android.
Auf dieser Seite finden Sie weitere Informationen dazu, wie die Datenmodelle für bestimmte Geräte einander zugeordnet werden, sowie einige Hinweise dazu, welche Merkmale Sie verwenden sollten, um diese Gerätetypen zu implementieren.
Herd
Der Gerätetyp „Backofen“ (OvenDevice
) und seine Komponentenmerkmale sind im Vergleich zu anderen Gerätetypen nicht so einfach zu implementieren. Es gibt mehrere Möglichkeiten, einen Backofen in Matter zu implementieren. Allerdings führen nicht alle Ansätze zu einer nahtlosen Interaktion mit anderen Geräten oder mit dem Google Home-Ökosystem.
Zuordnung von Attributen
Anstatt ein Matter-Gerät mit den Clustern „Oven Mode“ (Backofenmodus) und „On Off“ (Ein/Aus) zu implementieren, empfehlen wir die Verwendung des Clusters „Oven Cavity Operational State“ (Betriebszustand des Backofenhohlraums). Dieser Cluster wird in den Home-APIs durch das Merkmal OvenCavityOperationalState
dargestellt und entspricht dem Merkmal Cloud-to-cloud
RunCycle
. Sie definiert Phasen wie „Vorheizen“, „Vorgeheizt“ und „Abkühlen“.
Gebäude-APIs | Cloud-to-cloud |
---|---|
OvenCavityOperationalState
|
RunCycle
|
Das Cloud-to-cloud-Datenmodell für Backöfen unterliegt Einschränkungen. Das Cloud-to-cloud-Ofendatenmodell lässt nur eine Kammer mit einem einzigen RunCycle
zu. Im Gegensatz dazu modelliert Matter einen Mehrkammerofen als Geräteendpunkt mit einem Cluster für den Betriebszustand des Ofenhohlraums für jede Kammer.
Bei einigen Backöfen kann es sinnvoll sein, dass sich die Phasenliste zur Laufzeit ändert. Beispielsweise können Öfen, die das Vorheizen unterstützen, während der Vorheizphase andere Einträge in der Phasenliste haben als während der Heiz- oder Abkühlphasen.
Empfohlene Implementierung
Wie im vorherigen Abschnitt beschrieben, sollte eine Matter-Ofenimplementierung den Cluster „Betriebszustand des Ofenhohlraums“ implementieren, der in den Home APIs als OvenCavityOperationalState
-Eigenschaft modelliert wird.
Damit du optimale Ergebnisse erzielst, muss dein Cloud-to-cloud-Ofen das RunCycle
-Trait implementieren und den aktuellen Status durch Festlegen des Attributs currentRunCycle
veröffentlichen. Dieses Attribut kann über die Home APIs über die Attribute OvenCavityOperationalState.phaseList
und OvenCavityOperationalState.currentPhase
beobachtet werden.
Das Gerät „Oven“ sollte auch eine Benachrichtigung zum Laufzyklus veröffentlichen, indem die Attribute priority
, status
und currentCycleRemainingTime
von RunCycle
aktualisiert werden. Das folgende Beispiel führt dazu, dass das Ereignis OperationalState.OperationCompletion
gesendet wird. Es kann verwendet werden, um anzugeben, dass der Backofen vom Vorheizzyklus zum Zyklus „vorgeheizt“ gewechselt hat:
{
"currentRunCycle": [
{
"currentCycle": "pre-heating",
"nextCycle": "pre-heated",
"lang": "en"
}
],
"currentTotalRemainingTime": 1200,
"currentCycleRemainingTime": 300
}
Backofen in einer Automatisierung verwenden
Wenn Sie eine Automatisierung für einen Backofen erstellen, der mit dem Cluster „Oven Cavity Operational State“ (Betriebszustand des Backofenhohlraums) implementiert wurde, verweisen Sie auf das Attribut currentPhase
, um zu erfahren, in welchem Zyklus sich der Backofen befindet:
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
}
Ein vollständiges Beispiel finden Sie unter Blink the lights and announce when the oven reaches the chosen temperature (Die Lichter blinken lassen und ankündigen, wenn der Backofen die gewählte Temperatur erreicht).