Interopérabilité sur iOS

Les appareils de l'écosystème Google Home peuvent être implémentés à l'aide de Cloud-to-cloud, de Matter ou des deux. Certains types d'appareils sont plus complexes que d'autres et présentent un défi de développement lors de l'utilisation des API Home d'une manière qui permet une interface fluide avec d'autres appareils de l'écosystème.

L'un des défis de l'implémentation de certains de ces types d'appareils est qu'ils peuvent être composés de différentes combinaisons de caractéristiques. Certaines combinaisons fonctionnent mieux que d'autres. De plus, le modèle de données Cloud-to-cloud est mappé au modèle de données Matter, mais pas toujours de manière claire et univoque. Consultez Modèle de données sur iOS, qui traite plus en détail des modèles de données et de leurs mappages.

Cette page contient plus d'informations sur la mise en correspondance des modèles de données pour des appareils spécifiques et propose des conseils sur les caractéristiques à utiliser pour implémenter ces types d'appareils.

Four

Le type d'appareil Four (OvenDeviceType) et ses caractéristiques ne sont pas aussi simples à implémenter que d'autres types d'appareils. Il existe plusieurs façons d'implémenter un four dans Matter, mais toutes ne permettent pas une interopérabilité fluide avec d'autres appareils ou avec l'écosystème Google Home.

Mappage des traits

Plutôt que d'implémenter un appareil Matter (Four) à l'aide des clusters OvenMode et OnOff, nous vous recommandons d'utiliser le cluster OvenCavityOperationalState. Ce cluster est représenté dans les API Home par la caractéristique OvenCavityOperationalStateTrait et correspond à la caractéristique Cloud-to-cloud RunCycle. Il définit des phases telles que "préchauffage", "préchauffé" et "refroidissement".

API Home Cloud-to-cloud
OvenCavityOperationalState RunCycle

Le modèle de données Cloud-to-cloud Oven présente des limites. Le modèle de données Cloud-to-cloud Oven n'autorise qu'une seule chambre, avec un seul RunCycle. En revanche, Matter modélise un four à plusieurs chambres comme un point de terminaison d'appareil avec un cluster d'état opérationnel de la cavité du four pour chaque chambre.

Pour certains appareils de type Oven, il peut être approprié de modifier la liste des phases au moment de l'exécution. Par exemple, les fours compatibles avec le préchauffage peuvent avoir des entrées différentes dans la liste des phases pendant la phase de préchauffage que pendant les phases de chauffage ou de refroidissement.

Comme indiqué dans la section précédente, une implémentation de four Matter doit implémenter le cluster Oven Cavity Operational State, qui est modélisé dans les API Home en tant que caractéristique OvenCavityOperationalStateTrait.

Pour des résultats optimaux, assurez-vous que votre appareil Cloud-to-cloud Oven implémente le trait RunCycle et publie l'état actuel en définissant l'attribut currentRunCycle. Cet attribut est observable par les API Home via les attributs OvenCavityOperationalStateTrait.phaseList et OvenCavityOperationalStateTrait.currentPhase.

Le four doit également publier une notification d'appareil de cycle d'exécution en mettant à jour les attributs priority, status et currentCycleRemainingTime de RunCycle. L'exemple suivant entraîne l'envoi d'un événement OperationalStateTrait.OperationCompletion et peut être utilisé pour indiquer que le four est passé du cycle de préchauffage au cycle préchauffé :

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

Utiliser un four dans une automatisation

Lorsque vous créez une automatisation pour un four implémenté à l'aide du cluster d'état opérationnel de la cavité du four, référencez l'attribut currentPhase pour savoir dans quel cycle se trouve le four :

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")
    }
  }
}

Pour obtenir un exemple complet, consultez Si le téléviseur est allumé lorsque le cycle du four se termine, les lumières du salon clignotent et l'enceinte intelligente diffuse "Cycle du four terminé".