Smart Home & Report State: что произойдет, если текущее известное состояние не синхронизируется с реальностью? - программирование
Подтвердить что ты не робот

Smart Home & Report State: что произойдет, если текущее известное состояние не синхронизируется с реальностью?

Я реализовал базовую услугу Smart Home, EXECUTE действия SYNC, EXECUTE и DISCONNECT. В действии SYNC всех устройствах параметр willReportState устанавливается willReportState false.

Однако на https://developers.google.com/actions/smarthome/report-state я прочитал, что нам необходимо сообщать о самих изменениях состояния. Это означает, что все устройства должны иметь значение параметра willReportState true, я полагаю?

Мой главный вопрос: что произойдет, если последнее сообщаемое состояние не синхронизируется с реальностью?

Например, предположим, что мы сообщили 5 минут назад, что определенное устройство (имеющее свойство OnOff) отключено. Несколько секунд назад клиент включил устройство вручную, нажав кнопку включения питания. Предположим, что этот факт еще не сообщается или не известен Smart Smart Graph.

Что произойдет, если клиент попросит помощника: выключите мое устройство? Будет ли отклонено это предложение или нет? То есть, служба выполнения получит этот бэкэнд, хотя служба Graph Home считает, что устройство уже отключено?

Кроме того, мы все еще должны выполнить действие QUERY если мы реализуем состояние отчета? Или оба требуются?

В боковом документе этот документ также не отражает частоту, в которой должны сообщаться изменения состояния. Документировано ли это где-то еще?

4b9b3361

Ответ 1

Да, вам нужно поддерживать ReportState и возвращать willReportState: true для устройств, которые имеют свойства с состояниями. Обратитесь к документации по признакам для состояний, о которых должен сообщить отчет.

Что касается вашего основного вопроса, вы должны иметь возможность сообщать об изменениях в функции OnOff (например, пользователь включает устройство), включая изменения состояния, инициированные с других поверхностей (например, аппаратный коммутатор или любая другая интеллектуальная домашняя платформа). Невозможность сообщить о последнем состоянии может привести к ошибкам, когда пользователи пытаются выполнить команды, если команда зависит от состояния. В этом примере попытка отключить свет будет работать (поскольку вкл/выкл не зависит от состояния), но любая другая зависимая от состояния команда (такая яркость или яркость) может выйти из строя.

Вам все равно нужно выполнить QUERY, так как в любое время Google может запрашивать ваш URL-адрес выполнения вместо использования сообщенного состояния.

Наконец, учитывая частоту, вы должны сообщать о состояниях, как только происходит изменение состояния. Если существует серия быстрых изменений состояния, приводящих к состоянию терминала, например, регулировка диммерного переключателя, пока вы не достигнете желаемой яркости, вы можете подождать, пока не будет достигнуто состояние терминала.