Я потратил много часов, пытаясь обновить 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);
});