Interoperabilität unter iOS

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 bei der Entwicklung dar, wenn die Home APIs so verwendet werden sollen, 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 Attributen 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 eine klare, eindeutige Weise. Weitere Informationen zu den Datenmodellen und ihren Zuordnungen finden Sie unter Datenmodell unter iOS.

Diese Seite enthält weitere Informationen dazu, wie die Datenmodelle für bestimmte Geräte einander zugeordnet werden, und bietet eine Anleitung dazu, welche Attribute für die Implementierung dieser Gerätetypen verwendet werden sollten.

Ofen

Der Gerätetyp „Ofen“ (OvenDeviceType) und die zugehörigen Komponentenattribute sind im Vergleich zu anderen Gerätetypen nicht so einfach zu implementieren. Es gibt mehrere Möglichkeiten, einen Ofen in Matter zu implementieren. Nicht alle Ansätze führen jedoch zu einer nahtlosen Interaktion mit anderen Geräten oder mit dem Google Home-Ökosystem.

Merkmalzuordnung

Anstatt ein Matter-Ofengerät mit den Clustern „Oven Mode“ und „On Off“ zu implementieren, empfehlen wir die Verwendung des Clusters „Oven Cavity Operational State“. Dieser Cluster wird in den Home APIs durch das Trait OvenCavityOperationalStateTrait dargestellt und dem Cloud-to-cloud-Trait RunCycle zugeordnet. Es werden Phasen wie „Vorheizen“, „Vorgeheizt“ und „Abkühlen“ definiert.

Gebäude-APIs Cloud-to-cloud
OvenCavityOperationalState RunCycle

Für das Datenmodell des Cloud-to-cloud-Ofens gelten Einschränkungen. Das Datenmodell Cloud-to-cloud (Ofen) lässt nur eine einzige Kammer mit einem einzigen RunCycle zu. Im Gegensatz dazu modelliert Matter einen Ofen mit mehreren Kammern als Geräteendpunkt mit einem Cluster für den Betriebszustand der Ofenkammer für jede Kammer.

Bei einigen Ofengeräten kann es sinnvoll sein, die Phasenliste zur Laufzeit zu ändern. 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ühlphase.

Wie im vorherigen Abschnitt beschrieben, sollte eine Matter-Ofen-Implementierung den Cluster „Oven Cavity Operational State“ implementieren, der in den Home APIs als OvenCavityOperationalStateTrait-Trait modelliert wird.

Für optimale Ergebnisse sollte dein Cloud-to-cloud-Ofen das Attribut RunCycle implementieren und den aktuellen Status durch Festlegen des Attributs currentRunCycle veröffentlichen. Dieses Attribut kann von den Home APIs über die Attribute OvenCavityOperationalStateTrait.phaseList und OvenCavityOperationalStateTrait.currentPhase beobachtet werden.

Der Ofen sollte auch eine Gerätebenachrichtigung zum Betriebszyklus veröffentlichen, indem die Attribute priority, status und currentCycleRemainingTime von RunCycle aktualisiert werden. Im folgenden Beispiel wird ein OperationalStateTrait.OperationCompletion-Ereignis gesendet, das darauf hinweist, dass der Ofen vom Vorheizzyklus zum vorgeheizten Zyklus gewechselt ist:

{
  "currentRunCycle": [
    {
      "currentCycle": "pre-heating",
      "nextCycle": "pre-heated",
      "lang": "en"
    }
  ],
  "currentTotalRemainingTime": 1200,
  "currentCycleRemainingTime": 300
}

Ofen in einer Automatisierung verwenden

Wenn du eine Automatisierung für einen Ofen erstellst, der mit dem Cluster „Oven Cavity Operational State“ implementiert wurde, kannst du das Attribut currentPhase verwenden, um zu erfahren, in welchem Zyklus sich der Ofen 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 findest du unter Wenn der Fernseher eingeschaltet ist, wenn der Ofenzyklus abgeschlossen ist, blinken die Wohnzimmerlampen und der Smart Speaker gibt „Ofenzyklus abgeschlossen“ aus.