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 Weise. Weitere Informationen zu den Datenmodellen und ihren Zuordnungen finden Sie unter Datenmodell auf iOS.
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“
(OvenDeviceType)
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.
Merkmalszuordnung
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
OvenCavityOperationalStateTrait
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 einzigen 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 eine Matter Herd
Implementierung den Cluster „Oven Cavity Operational State“ implementieren, der
in den Home APIs als
OvenCavityOperationalStateTrait
Merkmal modelliert wird.
Um optimale Ergebnisse zu erzielen, muss Ihr Cloud-to-cloud Herdgerät
das RunCycle Merkmal implementieren und den aktuellen Status veröffentlichen, indem Sie das currentRunCycle Attribut festlegen. Dieses Attribut kann
von den Home APIs über die
OvenCavityOperationalStateTrait.phaseList
und
OvenCavityOperationalStateTrait.currentPhase
Attribute beobachtet werden.
Das Herdgerät sollte auch eine Gerätebenachrichtigung für den Zyklus veröffentlichen, indem die Attribute priority, status und currentCycleRemainingTime von RunCycle aktualisiert werden. Das folgende Beispiel führt dazu, dass ein
OperationalStateTrait.OperationCompletion
Ereignis gesendet wird. Es kann verwendet werden, um anzugeben, 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 {
let operationalState = starter(
oven,
OvenDeviceType.self,
OvenCavityOperationalStateTrait.self
)
operationalState
condition {
operationalState.phaseList[operationalState.currentPhase.toUInt()].equals("pre-heated")
}
for speaker in speakers {
action(speaker, SpeakerDeviceType.self) {
Google.AssistantBroadcastTrait.broadcast(msg: "Oven Cycle Complete")
}
}
}
Ein vollständiges Beispiel finden Sie unter If TV is on when oven cycle completes, living room lights blink and smart speaker broadcasts "Oven Cycle Complete".