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 mit den Home APIs dar, wenn eine reibungslose Interaktion mit anderen Geräten im Ökosystem ermöglicht werden soll.

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.

Zuordnung von Merkmalen

Anstatt ein Matter Herdgerä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 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.

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 Trait implementieren und den aktuellen Zustand 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 außerdem eine Benachrichtigung zum Laufzyklus 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 von der Vorheizphase zur Phase „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 Wenn der Fernseher eingeschaltet ist, wenn der Herdzyklus abgeschlossen ist, blinkt das Licht im Wohnzimmer und der Smart Speaker gibt „Oven Cycle Complete“ aus.