Interoperabilität unter Android

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.

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.