Устройства в экосистеме Google Home можно реализовать с помощью Cloud-to-cloud, Matter или обоих вариантов. Некоторые типы устройств сложнее других, и при разработке с использованием Home API могут возникнуть трудности с обеспечением бесперебойного взаимодействия с другими устройствами в экосистеме.
Одна из проблем при реализации некоторых из этих типов устройств заключается в том, что устройства могут состоять из различных комбинаций признаков. Не все комбинации одинаково эффективны. Кроме того, модель данных Cloud-to-cloud сопоставляется с моделью данных Matter, но не всегда в четком соотношении один к одному. Подробнее о моделях данных и их сопоставлении рассказывается в статье Модель данных в iOS.
На этой странице содержится дополнительная информация о том, как модели данных для определенных устройств сопоставляются друг с другом, и предлагаются некоторые рекомендации по тому, какие характеристики использовать для реализации этих типов устройств.
Духовка
Тип устройства "Духовка" (OvenDeviceType) и его характеристики сложнее реализовать, чем другие типы устройств. Реализовать духовку в Matter можно разными способами, но не все из них обеспечивают бесперебойное взаимодействие с другими устройствами или экосистемой Google Home.
Сопоставление признаков
Вместо того чтобы реализовывать устройство Matter Oven с помощью кластеров Oven Mode и On Off, мы рекомендуем использовать кластер Oven Cavity Operational State. Этот кластер представлен в Home API типажом OvenCavityOperationalStateTrait и сопоставляется с типажом Cloud-to-cloud
RunCycle. Определяет такие фазы, как "подогрев", "предварительно нагрето" и "охлаждение".
| API для дома | Cloud-to-cloud |
|---|---|
OvenCavityOperationalState
|
RunCycle
|
У модели данных Cloud-to-cloud Oven есть ограничения. Модель данных Cloud-to-cloud Oven поддерживает только одну камеру с одним свойством RunCycle. В то же время Matter моделирует многокамерную духовку как конечную точку устройства с кластером рабочего состояния камеры духовки для каждой камеры.
Для некоторых духовок может быть целесообразно изменить список фаз во время работы. Например, у духовок, поддерживающих предварительный нагрев, могут быть разные записи в списке фаз во время предварительного нагрева, нагрева или охлаждения.
Рекомендуемые решения
Как говорилось в предыдущем разделе, в реализации Matter Oven должен быть кластер Oven Cavity Operational State, который в Home API представлен типажом OvenCavityOperationalStateTrait.
Чтобы устройство Cloud-to-cloud Oven работало правильно, реализуйте в нем функцию RunCycle и публикуйте текущее состояние, задав атрибут currentRunCycle. Этот атрибут можно отслеживать с помощью Home API, используя атрибуты OvenCavityOperationalStateTrait.phaseList и OvenCavityOperationalStateTrait.currentPhase.
Духовка также должна публиковать уведомление о цикле работы, обновляя атрибуты priority, status и currentCycleRemainingTime типа RunCycle. В примере ниже отправляется событие OperationalStateTrait.OperationCompletion, которое указывает, что духовка перешла из цикла подогрева в цикл предварительно нагретой духовки.
{
"currentRunCycle": [
{
"currentCycle": "pre-heating",
"nextCycle": "pre-heated",
"lang": "en"
}
],
"currentTotalRemainingTime": 1200,
"currentCycleRemainingTime": 300
}
Как использовать духовку в автоматизации
При создании автоматизации для духовки, реализованной с помощью кластера Oven Cavity Operational State, используйте атрибут 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")
}
}
}
Полный пример можно найти в разделе Если телевизор включен, когда духовка заканчивает работу, свет в гостиной мигает, а умная колонка сообщает, что духовка закончила работу.