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 lorsque vous utilisez les API Home de manière à permettre 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 iOS, qui aborde plus en détail 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 (OvenDeviceType
) 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 OvenCavityOperationalStateTrait
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.
Implémentation recommandée
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 OvenCavityOperationalStateTrait
.
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 OvenCavityOperationalStateTrait.phaseList
et OvenCavityOperationalStateTrait.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 OperationalStateTrait.OperationCompletion
et peut être utilisé pour indiquer que le four est passé du cycle de préchauffage au cycle de préchauffage terminé :
{
"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 {
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 un exemple complet, consultez Si le téléviseur est allumé à la fin du cycle du four, les lumières du salon clignotent et l'enceinte connectée diffuse "Cycle du four terminé".