Google Home 生態系統中的裝置可使用 Cloud-to-cloud、Matter 或兩者來實作。某些裝置類型較為複雜,使用 Home API 開發時,可能難以與生態系統中的其他裝置順暢互動。
實作部分裝置類型時,其中一項挑戰是裝置可能由不同的特徵組合組成。並非所有組合都能達到相同效果。此外,Cloud-to-cloud 資料模型會對應至 Matter 資料模型,但並非總是明確的一對一對應。請參閱「iOS 上的資料模型」,進一步瞭解資料模型及其對應。
本頁面提供更多資訊,說明特定裝置的資料模型如何相互對應,並提供一些指引,說明應使用哪些特徵來實作這些裝置類型。
烤箱
與其他裝置類型相比,烤箱 (OvenDeviceType) 裝置類型及其元件特性的實作方式較不直觀。在 Matter 中,有多種方式可以實作烤箱,但並非所有方法都能與其他裝置或 Google Home 生態系統順暢互通。
特徵對應
建議您使用烤箱腔體運作狀態叢集,而非使用烤箱模式和開關叢集實作 Matter 烤箱裝置。這個叢集在 Home API 中以 OvenCavityOperationalStateTrait 特性表示,並對應至 Cloud-to-cloud
RunCycle 特性。定義「預先暖房」、「預熱完成」和「冷卻」等階段。
| Home API | Cloud-to-cloud |
|---|---|
OvenCavityOperationalState
|
RunCycle
|
Cloud-to-cloud烤箱資料模型有一些限制。Cloud-to-cloud 烤箱資料模型只允許單一腔室,且只有一個 RunCycle。相較之下,Matter 會將多腔烤箱模擬為裝置端點,每個腔室都有一個烤箱腔室運作狀態叢集。
對於某些烤箱裝置,階段清單可能適合在執行階段變更。舉例來說,支援預熱功能的烤箱在預熱階段的階段清單中,可能會有與加熱或冷卻階段不同的項目。
建議實作方式
如上一節所述,Matter 烤箱實作應實作烤箱腔體運作狀態叢集,在 Home API 中模擬為 OvenCavityOperationalStateTrait 特性。
為獲得最佳效果,請確保Cloud-to-cloud烤箱裝置實作 RunCycle 特性,並設定 currentRunCycle 屬性來發布目前狀態。Home API 可透過 OvenCavityOperationalStateTrait.phaseList 和 OvenCavityOperationalStateTrait.currentPhase 屬性觀測這項屬性。
烤箱裝置也應透過更新 RunCycle 的 priority、status 和 currentCycleRemainingTime 屬性,發布運作週期裝置通知。以下範例會傳送 OperationalStateTrait.OperationCompletion 事件,可用於表示烤箱已從「預先暖房」週期轉換為「預熱完成」週期:
{
"currentRunCycle": [
{
"currentCycle": "pre-heating",
"nextCycle": "pre-heated",
"lang": "en"
}
],
"currentTotalRemainingTime": 1200,
"currentCycleRemainingTime": 300
}
在自動化動作中使用烤箱
如果烤箱是使用烤箱腔體運作狀態叢集,在建構自動化動作時,請參照 currentPhase 屬性,瞭解烤箱處於哪個週期:
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")
}
}
}
如需已完成樣本,請參閱「如果烤箱完成烹調時電視已開啟,Living Room 燈光會閃爍,智慧音箱會廣播『烤箱完成烹調』」。