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 Daten modell 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 auf Android.
Auf dieser Seite finden Sie weitere Informationen dazu, wie die Datenmodelle für bestimmte Geräte einander zugeordnet werden, und einige Hinweise dazu, welche Merkmale verwendet werden sollten, um diese Gerätetypen zu implementieren.
Herd
Der Gerätetyp „Herd“
(OvenDevice)
und seine Komponentenmerkmale sind im Vergleich zu anderen Gerätetypen nicht so einfach zu implementieren. Es gibt mehrere Möglichkeiten, einen Herd in
Matter zu implementieren, aber nicht alle Ansätze führen zu einer nahtlosen
Interaktion mit anderen Geräten oder mit dem Google Home-Ökosystem.
Zuordnung von Merkmalen
Anstatt ein Matter Herdgerät mit den
Clustern „Oven Mode“ (Herdmodus) und „On Off“ (Ein/Aus) zu implementieren, empfehlen wir die Verwendung des Clusters „Oven Cavity Operational
State“ (Betriebsstatus des Herdinnenraums). Dieser Cluster wird in den Home APIs durch das
OvenCavityOperationalState
Merkmal dargestellt und dem Cloud-to-cloud
RunCycle Merkmal zugeordnet. Er definiert Phasen wie „Vorheizen“, „Vorheizphase abgeschlossen“ und „Abkühlen“.
| Home APIs | Cloud-to-cloud |
|---|---|
OvenCavityOperationalState
|
RunCycle
|
Das Datenmodell für Cloud-to-cloud Herde hat Einschränkungen. Das
Cloud-to-cloud Ofen-Datenmodell lässt nur eine einzelne Kammer zu,
mit einem einzelnen RunCycle. Im Gegensatz dazu modelliert Matter einen Herd mit mehreren Kammern als Geräteendpunkt mit einem Cluster „Oven Cavity Operational State“ für jede Kammer.
Bei einigen Herden kann es sinnvoll sein, dass sich die Phasenliste zur Laufzeit ändert. Bei Herden, die das Vorheizen unterstützen, können beispielsweise während der Vorheizphase andere Einträge in der Phasenliste vorhanden sein als während der Heiz- oder Abkühlphase.
Empfohlene Implementierung
Wie im vorherigen Abschnitt beschrieben, sollte bei einer Matter Herd
Implementierung der Cluster „Oven Cavity Operational State“ implementiert werden, der
in den Home APIs als
OvenCavityOperationalState
Merkmal modelliert wird.
Um optimale Ergebnisse zu erzielen, muss Ihr Cloud-to-cloud Herdgerät das RunCycle Trait implementieren und den aktuellen Status veröffentlichen, indem Sie das currentRunCycle Attribut festlegen. Dieses Attribut kann von den Home APIs über die Attribute
OvenCavityOperationalState.phaseList
und
OvenCavityOperationalState.currentPhase
beobachtet werden.
Das Herdgerät sollte auch eine Gerätebenachrichtigung für den Laufzyklus veröffentlichen, indem die Attribute priority, status und currentCycleRemainingTime von RunCycle aktualisiert werden. Im folgenden Beispiel wird ein
OperationalState.OperationCompletion-Ereignis gesendet. Damit kann angegeben werden, dass der Herd vom Zyklus „Vorheizen“ zum Zyklus „Vorheizphase abgeschlossen“ übergegangen ist:
{
"currentRunCycle": [
{
"currentCycle": "pre-heating",
"nextCycle": "pre-heated",
"lang": "en"
}
],
"currentTotalRemainingTime": 1200,
"currentCycleRemainingTime": 300
}
Herd in einer Automatisierung verwenden
Wenn Sie eine Automatisierung für einen Herd erstellen, der mit dem Cluster „Oven Cavity Operational State“ implementiert wurde, verweisen Sie auf das Attribut currentPhase, um zu ermitteln, in welchem Zyklus sich der Herd 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 Lichter blinken lassen und ankündigen, wenn der Herd die gewünschte Temperatur erreicht hat.