我花了很多时间试图在多于一台设备上实时更新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);
});
答案 0 :(得分:0)
Google Home应用程序用户界面并不直接绑定到智能家居集成中的报表状态功能,因此它不是验证集成行为的最佳方法。我建议使用report state dashboard和test suite for smart home之类的工具来验证您要发布到Home Graph的数据。如果您使用这些工具看到正确的结果,则表明您的报表状态实现是正确的。