Los dispositivos del ecosistema de Google Home se pueden implementar con Cloud-to-cloud, Matter o ambos. Algunos tipos de dispositivos son más complejos que otros y representan un desafío para el desarrollo cuando se usan las APIs de Home de una manera que permite una interfaz fluida con otros dispositivos del ecosistema.
Uno de los desafíos para implementar algunos de estos tipos de dispositivos es que pueden estar compuestos por diferentes combinaciones de características. No todas las combinaciones funcionan tan bien como otras. Además, el modelo de datos de Cloud-to-cloud se asigna al modelo de datos de Matter, pero no siempre de forma clara y uno a uno. Consulta Modelo de datos en Android, en el que se analizan los modelos de datos y sus asignaciones con mayor profundidad.
En esta página, se incluye más información sobre cómo se correlacionan los modelos de datos para dispositivos específicos y se ofrece orientación sobre qué rasgos usar para implementar esos tipos de dispositivos.
Horno
El tipo de dispositivo Oven (OvenDevice
) y sus rasgos de componente no son tan sencillos de implementar en comparación con otros tipos de dispositivos. Hay varias formas de implementar un objeto Oven en Matter, pero no todos los enfoques permiten una interoperación fluida con otros dispositivos o con el ecosistema de Google Home.
Asignación de rasgos
En lugar de implementar un dispositivo Matter Oven con los clústeres Oven Mode y On Off, te recomendamos que uses el clúster Oven Cavity Operational State. Este clúster se representa en las APIs de Home con el rasgo OvenCavityOperationalState
y se asigna al rasgo Cloud-to-cloud
RunCycle
. Define fases como "precalentamiento", "precalentado" y "enfriamiento".
APIs de Home | Cloud-to-cloud |
---|---|
OvenCavityOperationalState
|
RunCycle
|
El modelo de datos de Cloud-to-cloud Oven tiene limitaciones. El modelo de datos del horno Cloud-to-cloud solo permite una cámara, con un solo RunCycle
. En cambio, Matter modela un horno de varias cavidades como un extremo de dispositivo con un clúster de estado operativo de la cavidad del horno para cada cavidad.
En el caso de algunos dispositivos Oven, puede ser adecuado que la lista de fases cambie en el tiempo de ejecución. Por ejemplo, los hornos que admiten el precalentamiento podrían tener diferentes entradas en la lista de fases durante la fase de precalentamiento que durante las fases de calentamiento o enfriamiento.
Implementación recomendada
Como se explicó en la sección anterior, una implementación de Matter Oven debe implementar el clúster de estado operativo de la cavidad del horno, que se modela en las APIs de Home como el rasgo OvenCavityOperationalState
.
Para obtener mejores resultados, asegúrate de que tu dispositivo Cloud-to-cloud Oven implemente el rasgo RunCycle
y publica el estado actual configurando el atributo currentRunCycle
. Las APIs de Home pueden observar este atributo a través de los atributos OvenCavityOperationalState.phaseList
y OvenCavityOperationalState.currentPhase
.
El dispositivo Oven también debe publicar una notificación del dispositivo de ciclo de ejecución actualizando los atributos priority
, status
y currentCycleRemainingTime
de RunCycle
. El siguiente ejemplo genera el envío de un evento OperationalState.OperationCompletion
y se puede usar para indicar que el horno pasó del ciclo de "precalentamiento" al ciclo de "precalentado":
{
"currentRunCycle": [
{
"currentCycle": "pre-heating",
"nextCycle": "pre-heated",
"lang": "en"
}
],
"currentTotalRemainingTime": 1200,
"currentCycleRemainingTime": 300
}
Cómo usar un horno en una automatización
Cuando compiles una automatización para un horno implementado con el clúster Oven Cavity Operational State, haz referencia al atributo currentPhase
para saber en qué ciclo se encuentra el horno:
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
}
Para ver un ejemplo completo, consulta Cómo parpadear las luces y anunciar cuando el horno alcanza la temperatura elegida.