Google Home 생태계의 기기는 Cloud-to-cloud, Matter 또는 둘 다를 사용하여 구현할 수 있습니다. 일부 기기 유형은 다른 기기 유형보다 복잡하며, 생태계의 다른 기기와 원활하게 인터페이스할 수 있는 방식으로 Home API를 사용할 때 개발에 어려움이 있습니다.
이러한 기기 유형 중 일부를 구현할 때의 문제점 중 하나는 기기가 다양한 특성 조합으로 구성될 수 있다는 것입니다. 일부 조합은 다른 조합만큼 효과적이지 않습니다. 또한 Cloud-to-cloud 데이터 모델은 Matter 데이터 모델에 매핑되지만 항상 명확한 일대일 방식으로 매핑되는 것은 아닙니다. 데이터 모델과 매핑을 자세히 설명하는 Android의 데이터 모델을 참고하세요.
이 페이지에는 특정 기기의 데이터 모델이 서로 매핑되는 방식에 관한 자세한 정보가 포함되어 있으며 이러한 기기 유형을 구현하는 데 사용할 특성에 관한 안내가 제공됩니다.
오븐
오븐(OvenDevice
) 기기 유형과 구성요소 특성은 다른 기기 유형에 비해 구현이 간단하지 않습니다. Matter에서 오븐을 구현하는 방법은 여러 가지가 있지만, 모든 접근 방식이 다른 기기 또는 Google Home 생태계와의 원활한 상호 운용을 지원하지는 않습니다.
특성 매핑
오븐 모드 및 켜짐/꺼짐 클러스터를 사용하여 Matter 오븐 기기를 구현하는 대신 오븐 캐비티 작동 상태 클러스터를 사용하는 것이 좋습니다. 이 클러스터는 홈 API에서 OvenCavityOperationalState
특성으로 표현되며 Cloud-to-cloud
RunCycle
특성에 매핑됩니다. '예열', '예열됨', '냉각'과 같은 단계를 정의합니다.
Home API | Cloud-to-cloud |
---|---|
OvenCavityOperationalState
|
RunCycle
|
Cloud-to-cloud 오븐 데이터 모델에는 제한사항이 있습니다. Cloud-to-cloud 오븐 데이터 모델은 단일 RunCycle
이 있는 단일 챔버만 허용합니다. 반면 Matter는 각 챔버에 오븐 캐비티 작동 상태 클러스터가 있는 기기 엔드포인트로 다중 챔버 오븐을 모델링합니다.
일부 오븐 기기의 경우 런타임에 단계 목록이 변경되는 것이 적절할 수 있습니다. 예를 들어 예열을 지원하는 오븐은 예열 단계에서 가열 또는 냉각 단계와 다른 항목이 단계 목록에 있을 수 있습니다.
권장되는 구현
이전 섹션에서 설명한 대로 Matter 오븐 구현은 홈 API에서 OvenCavityOperationalState
특성으로 모델링된 오븐 캐비티 작동 상태 클러스터를 구현해야 합니다.
최상의 결과를 얻으려면 Cloud-to-cloud 오븐 기기가 RunCycle
특성을 구현하고 currentRunCycle
속성을 설정하여 현재 상태를 게시해야 합니다. 이 속성은 OvenCavityOperationalState.phaseList
및 OvenCavityOperationalState.currentPhase
속성을 통해 Home API에서 관찰할 수 있습니다.
오븐 기기는 RunCycle
의 priority
, status
, currentCycleRemainingTime
속성을 업데이트하여 실행 주기 기기 알림도 게시해야 합니다. 다음 예시에서는 OperationalState.OperationCompletion
이벤트가 전송되며, 오븐이 '예열' 주기에서 '예열 완료' 주기로 전환되었음을 나타내는 데 사용할 수 있습니다.
{
"currentRunCycle": [
{
"currentCycle": "pre-heating",
"nextCycle": "pre-heated",
"lang": "en"
}
],
"currentTotalRemainingTime": 1200,
"currentCycleRemainingTime": 300
}
자동화에서 오븐 사용하기
오븐 캐비티 작동 상태 클러스터를 사용하여 구현된 오븐의 자동화를 빌드할 때는 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
}
전체 예는 오븐이 선택한 온도에 도달하면 조명을 깜박이고 알림 보내기를 참고하세요.