상호 운용성

Google Home 생태계의 기기는 Cloud-to-cloud, Matter 또는 둘 다를 사용하여 구현할 수 있습니다. 일부 기기 유형은 다른 기기 유형보다 복잡하며, 생태계의 다른 기기와 원활하게 상호작용할 수 있는 방식으로 Home API를 사용할 때 개발에 어려움이 있습니다.

이러한 기기 유형 중 일부를 구현할 때의 한 가지 문제는 기기가 다양한 트레잇 조합으로 구성될 수 있다는 점입니다. 모든 조합이 다른 조합만큼 잘 작동하는 것은 아닙니다. 또한 Cloud-to-cloud 데이터 모델은 Matter 데이터 모델에 매핑되지만 항상 명확한 일대일 방식으로 매핑되는 것은 아닙니다. 데이터 모델 및 매핑에 대해 자세히 설명하는 데이터 모델을 참고하세요.

이 페이지에는 특정 기기의 데이터 모델이 서로 매핑되는 방식에 관한 자세한 내용이 포함되어 있으며 이러한 기기 유형을 구현하는 데 사용할 트레잇에 관한 안내가 제공됩니다.

오븐

오븐(OvenDevice) 기기 유형 및 구성요소 트레잇은 다른 기기 유형에 비해 구현하기가 쉽지 않습니다. Matter에서 오븐을 구현하는 방법에는 여러 가지가 있지만 모든 접근 방식이 다른 기기 또는 Google Home 생태계와 원활하게 상호 운용되는 것은 아닙니다.

트레잇 매핑

오븐 모드 및 켜기/끄기 클러스터를 사용하여 Matter 오븐 기기를 구현하는 대신 오븐 내부 작동 상태 클러스터를 사용하는 것이 좋습니다. 이 클러스터는 Home API에서 OvenCavityOperationalState 트레잇으로 표현되며 Cloud-to-cloud RunCycle 트레잇에 매핑됩니다. '예열', '예열됨', '냉각 중'과 같은 단계를 정의합니다.

Home API Cloud-to-cloud
OvenCavityOperationalState RunCycle

Cloud-to-cloud 오븐 데이터 모델에는 제한사항이 있습니다. Cloud-to-cloud 오븐 데이터 모델은 RunCycle가 하나인 단일 챔버만 허용합니다. 반면 Matter는 다중 챔버 오븐을 각 챔버의 오븐 캐비티 작동 상태 클러스터가 있는 기기 엔드포인트로 모델링합니다.

일부 Oven 기기의 경우 런타임에 단계 목록을 변경하는 것이 적절할 수 있습니다. 예를 들어 예열을 지원하는 오븐의 경우 예열 단계에서 단계 목록에 열 또는 냉각 단계와 다른 항목이 포함될 수 있습니다.

이전 섹션에서 설명한 대로 Matter 오븐 구현은 Home API에서 OvenCavityOperationalState 트레잇으로 모델링된 오븐 내부 작동 상태 클러스터를 구현해야 합니다.

최상의 결과를 얻으려면 Cloud-to-cloud 오븐 기기가 RunCycle 트레잇을 구현하고 currentRunCycle 속성을 설정하여 현재 상태를 게시해야 합니다. 이 속성은 Home API에서 OvenCavityOperationalState.phaseListOvenCavityOperationalState.currentPhase 속성을 통해 관찰할 수 있습니다.

오븐 기기는 RunCyclepriority, status, currentCycleRemainingTime 속성을 업데이트하여 실행 주기 기기 알림도 게시해야 합니다. 다음 예에서는 OperationalState.OperationCompletion 이벤트가 전송되며 오븐이 '예열' 주기에서 '예열됨' 주기로 전환되었음을 나타내는 데 사용할 수 있습니다.

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

자동화에서 오븐 사용

Oven Cavity Operational State 클러스터를 사용하여 구현된 오븐의 자동화를 빌드할 때 currentPhase 속성을 참조하여 오븐이 어떤 주기에 있는지 확인합니다.

   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
}

전체 예는 오븐이 선택한 온도에 도달하면 조명을 깜박이고 알림을 전송을 참고하세요.