Smart Home Report Состояние в режиме реального времени на 2 или более устройств - PullRequest
3 голосов
/ 26 октября 2019

Я потратил много часов, пытаясь обновить Home Graph в режиме реального времени на более чем на 1 устройстве .

На самом деле в этом проекте есть 2 устройства: 1 шайба и 1 лампа.

Идеально подходит для обновления в режиме реального времени, когда я делаю изменения непосредственно в базе данных.

Проблема с лампой. Если я вносю изменения непосредственно в базу данных, она просто обновляется, если я закрываю страницу устройства и открываюсь снова (конечно, в Google Home App). Он не обновляется в режиме реального времени.

Я считаю, что проблема в этом коде ниже, потому что я не знаю, сколько устройств он вызывает в [context.params.deviceId], но яне уверен, если это проблема или как ее решить.

Пожалуйста, помогите мне с этим. Я провел всю ночь в этом ни за что.

Заранее большое спасибо.

PS: я следовал этому руководству, чтобы заставить шайбу работать идеально. https://codelabs.developers.google.com/codelabs/smarthome-washer/


ОБНОВЛЕНИЕ:

Я попробовал что-то новое:

Я использовал весь код в точности как учебник по ссылке выше и изменил только устройство действиянаберите action.devices.types.WASHER до action.devices.types.LIGHT или action.devices.types.SWITCH

После этого теста я понял, что ReportState в реальном времени работает только с омывателем и не работает со светом или переключателемдаже изменяя только одну строку кода.

Так что похоже, что проблема в Google, а не в коде. Кто-нибудь согласен?

/**
 * Send a REPORT STATE call to the homegraph when data for any device id
 * has been changed.
 */
exports.reportstate = functions.database.ref('{deviceId}').onWrite(async (change, context) => {
  console.info('Firebase write event triggered this cloud function');
  const snapshot = change.after.val();

  const requestBody = {
    requestId: 'ff36a3cc', /* Any unique ID */
    agentUserId: '123', /* Hardcoded user ID */
    payload: {
      devices: {
        states: {         
          [context.params.deviceId]: {
            on: snapshot.OnOff.on,          
          },          
        },
      },
    },
  };

  const res = await homegraph.devices.reportStateAndNotification({
    requestBody
  });
  console.info('Report state response:', res.status, res.data);
});

1 Ответ

0 голосов
/ 30 октября 2019

Пользовательский интерфейс приложения Google Home не связан напрямую с функциональностью состояния отчета в вашей интеграции с умным домом, поэтому это не лучший способ проверки поведения вашей интеграции. Я бы предложил использовать такие инструменты, как панель состояния отчетов и набор тестов для умного дома , чтобы вместо этого проверить данные, которые вы публикуете в Home Graph. Если вы видите правильные результаты, используя эти инструменты, это означает, что ваша реализация состояния отчета верна.

...