Interoperabilität

Geräte im Google Home-System können mit Cloud-to-cloud, Matter oder beiden implementiert werden. Einige Gerätetypen sind komplexer als andere und stellen eine Herausforderung bei der Entwicklung dar, wenn die Smart-Home-APIs so verwendet werden, dass eine reibungslose Verknüpfung mit anderen Geräten im System 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 eindeutige Weise. Weitere Informationen zu Datenmodellen und ihren Zuordnungen finden Sie unter Datenmodell.

Auf dieser Seite finden Sie weitere Informationen dazu, wie die Datenmodelle für bestimmte Geräte aufeinander abgestimmt sind, und eine Anleitung dazu, welche Merkmale Sie für die Implementierung dieser Gerätetypen verwenden sollten.

Herd

Der Gerätetyp „Backofen“ (OvenDevice) und seine Komponentenmerkmale sind im Vergleich zu anderen Gerätetypen nicht ganz so einfach zu implementieren. Es gibt mehrere Möglichkeiten, einen Backofen in Matter zu implementieren. Nicht alle Ansätze führen jedoch zu einer reibungslosen Interkonnektivität mit anderen Geräten oder mit dem Google Home-System.

Merkmalszuordnung

Anstatt ein Matter-Backofengerät mit den Clustern „Backofenmodus“ und „An/Aus“ zu implementieren, empfehlen wir den Cluster „Backofeninnenraum – Betriebsstatus“. Dieser Cluster wird in den Home APIs durch das Attribut OvenCavityOperationalState dargestellt und entspricht dem Attribut Cloud-to-cloud RunCycle. Es definiert Phasen wie „Vorheizen“, „Vorgeheizt“ und „Abkühlen“.

Home APIs Cloud-to-cloud
OvenCavityOperationalState RunCycle

Das Datenmodell Cloud-to-cloud für Öfen hat Einschränkungen. Das Datenmodell für den Ofen Cloud-to-cloud erlaubt nur eine einzige Kammer mit einer einzigen RunCycle. Im Gegensatz dazu modelliert Matter einen Ofen mit mehreren Kammern als Geräteendpunkt mit einem Cluster für den Betriebsstatus der Ofenkammer für jede Kammer.

Bei einigen Ofengeräten kann es angebracht sein, die Phasenliste zur Laufzeit zu ändern. Bei Öfen mit Vorheizfunktion 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 erläutert, sollte eine Matter-Ofenimplementierung den Cluster „Oven Cavity Operational State“ implementieren, der in den Home APIs als Merkmal OvenCavityOperationalState modelliert wird.

Die besten Ergebnisse erzielen Sie, wenn Ihr Cloud-to-cloud-Backofen die Eigenschaft RunCycle implementiert und den aktuellen Status veröffentlicht, indem Sie das Attribut currentRunCycle festlegen. Dieses Attribut kann von den Home APIs über die Attribute OvenCavityOperationalState.phaseList und OvenCavityOperationalState.currentPhase beobachtet werden.

Das Ofengerät sollte auch eine Gerätebenachrichtigung zum Ablauf des Zyklus veröffentlichen, indem die Attribute priority, status und currentCycleRemainingTime von RunCycle aktualisiert werden. Im folgenden Beispiel wird das Ereignis OperationalState.OperationCompletion gesendet. Es kann verwendet werden, um anzugeben, dass der Ofen vom Vorheizzyklus in den vorgeheizten Zyklus gewechselt ist:

{
  "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 „Backofen – Betriebsstatus der Backofenhöhle“ implementiert ist, können Sie anhand des Attributs currentPhase ermitteln, 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 Lampen blinken lassen und ansagen, wenn der Ofen die gewünschte Temperatur erreicht.