【发布时间】:2019-10-26 07:33:10
【问题描述】:
我花了很多时间尝试在超过 1 台设备上实时更新 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);
});
【问题讨论】:
-
你能澄清几件事吗?报告状态方法是在任何情况下都返回错误还是总是返回成功?另外,当您说“实时更新”时,您是指更新 Google Home 应用中的 UI,还是使用其他方法来验证数据是否已保存到 Home Graph?
-
当然,感谢您的帮助。 1 - ReportState 总是成功返回。 2 - 当我说“实时更新”时,是的,我指的是我的 Android 智能手机上 Google Home 应用中的 UI。
标签: actions-on-google google-assistant-sdk google-home google-smart-home