Interoperabilidade no Android

Os dispositivos no ecossistema do Google Home podem ser implementados usando Cloud-to-cloud, Matter ou ambos. Alguns tipos de dispositivos são mais complexos que outros e apresentam um desafio para desenvolver ao usar as APIs Home de uma forma que permita uma interface suave com outros dispositivos no ecossistema.

Um dos desafios na implementação de alguns desses tipos de dispositivos é que eles podem ser compostos de diferentes combinações de traits. Nem todas as combinações funcionam tão bem quanto outras. Além disso, o modelo de dados Cloud-to-cloud é mapeado para o modelo de dados Matter, mas nem sempre de maneira clara e um para um. Consulte Modelo de dados no Android, que discute os modelos de dados e seus mapeamentos com mais profundidade.

Esta página contém mais informações sobre como os modelos de dados para dispositivos específicos se mapeiam entre si e oferece algumas orientações sobre quais características usar para implementar esses tipos de dispositivos.

Forno

O tipo de dispositivo Forno (OvenDevice) e os traços dos componentes dele não são tão simples de implementar em comparação com outros tipos de dispositivos. Há várias maneiras de implementar um forno em Matter, mas nem todas as abordagens resultam em uma interoperação perfeita com outros dispositivos ou com o ecossistema do Google Home.

Mapeamento de traços

Em vez de implementar um dispositivo Matter Oven usando os clusters Oven Mode e On Off, recomendamos usar o cluster Oven Cavity Operational State. Esse cluster é representado nas APIs Home pela característica OvenCavityOperationalState e mapeia para a característica Cloud-to-cloud RunCycle. Ele define fases como "aquecimento programado", "pré-aquecido" e "resfriamento".

APIs do Google Home Cloud-to-cloud
OvenCavityOperationalState RunCycle

Há limitações no modelo de dados do Cloud-to-cloud Oven. Ele permite apenas uma câmara, com um único RunCycle. Já o Matter modela um forno com várias câmaras como um endpoint de dispositivo com um cluster de estado operacional da cavidade do forno para cada câmara.Cloud-to-cloud

Para alguns dispositivos, pode ser adequado que a lista de fases mude durante a execução. Por exemplo, fornos que oferecem suporte ao pré-aquecimento podem ter entradas diferentes na lista de fases durante o pré-aquecimento e durante as fases de aquecimento ou resfriamento.

Conforme discutido na seção anterior, uma implementação de Matter Oven precisa implementar o cluster de estado operacional da cavidade do forno, que é modelado nas APIs Home como a característica OvenCavityOperationalState.

Para ter os melhores resultados, verifique se o dispositivo Cloud-to-cloud Oven implementa o traço RunCycle e publique o estado atual definindo o atributo currentRunCycle. Esse atributo pode ser observado pelas APIs Home usando os atributos OvenCavityOperationalState.phaseList e OvenCavityOperationalState.currentPhase.

O dispositivo Oven também precisa publicar uma notificação de ciclo de execução atualizando os atributos priority, status e currentCycleRemainingTime de RunCycle. O exemplo a seguir resulta no envio de um evento OperationalState.OperationCompletion e pode ser usado para indicar que o forno passou do ciclo de aquecimento programado para o ciclo de aquecimento:

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

Usar um forno em uma automação

Ao criar uma automação para um forno implementado usando o cluster Oven Cavity Operational State, faça referência ao atributo currentPhase para saber em qual ciclo o forno está:

   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 um exemplo completo, consulte Piscar as luzes e anunciar quando o forno atingir a temperatura escolhida.