智能家居报告可在2台或更多设备上实时显示状态

时间:2019-10-26 07:33:10

标签: actions-on-google google-assistant-sdk google-home google-smart-home

我花了很多时间试图在多于一台设备上实时更新Home Graph。

实际上,该项目有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 :(得分:0)

Google Home应用程序用户界面并不直接绑定到智能家居集成中的报表状态功能,因此它不是验证集成行为的最佳方法。我建议使用report state dashboardtest suite for smart home之类的工具来验证您要发布到Home Graph的数据。如果您使用这些工具看到正确的结果,则表明您的报表状态实现是正确的。