Interopérabilité sur Android

Les appareils de l'écosystème Google Home peuvent être implémentés à l'aide de Cloud-to-cloud, 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 liés à l'implémentation de certains de ces types d'appareils est que les appareils peuvent être composés de différentes combinaisons de traits. Certaines combinaisons ne fonctionnent pas aussi bien que d'autres. De plus, le modèle de données Cloud-to-cloud est mappé sur le modèle de données Matter, mais pas toujours de manière claire et un-à-un. Consultez Modèle de données sur Android pour en savoir plus sur les modèles de données et leurs mappages.

Cette page contient plus d'informations sur la façon dont les modèles de données pour des appareils spécifiques sont mappés les uns aux autres. Elle fournit également des conseils sur les traits à utiliser pour implémenter ces types d'appareils.

Four

Le type d'appareil Four (OvenDevice) et ses caractéristiques de composant ne sont pas aussi simples à implémenter que les autres types d'appareils. Il existe plusieurs façons d'implémenter un four dans Matter, mais toutes les approches 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 Oven à l'aide des clusters Oven Mode et On Off, nous vous recommandons d'utiliser le cluster Oven Cavity Operational State. Ce cluster est représenté dans les API Home par le trait OvenCavityOperationalState et correspond au trait RunCycle de Cloud-to-cloud. 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 du four Cloud-to-cloud n'autorise qu'une seule chambre, avec un seul RunCycle. En revanche, Matter modélise un four multicompartiment en tant que point de terminaison d'appareil avec un cluster Oven Cavity Operational State pour chaque compartiment.

Pour certains appareils Oven, il peut être approprié que la liste des phases change au moment de l'exécution. Par exemple, les fours qui prennent en charge le préchauffage peuvent avoir des entrées différentes dans la liste des phases pendant la phase de préchauffage par rapport aux phases de chauffage ou de refroidissement.

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

Pour de meilleurs résultats, assurez-vous que votre appareil Cloud-to-cloud 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 OvenCavityOperationalState.phaseList et OvenCavityOperationalState.currentPhase.

Le four doit également publier une notification de cycle de cuisson en mettant à jour les attributs priority, status et currentCycleRemainingTime de RunCycle. L'exemple suivant entraîne l'envoi d'un événement OperationalState.OperationCompletion et peut être utilisé pour indiquer que le four est passé du cycle "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 Oven Cavity Operational State, référencez l'attribut currentPhase pour connaître le cycle dans lequel se trouve le four :

   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
}

Pour obtenir un exemple complet, consultez Faire clignoter les lumières et annoncer quand le four atteint la température choisie.