Status Update
Comments
cy...@google.com <cy...@google.com>
ro...@browan.com <ro...@browan.com> #2
cy...@google.com <cy...@google.com> #3
Dear developer,
Thank you for reaching out to us. Please try the following steps for troubleshoot -
-
As indicated in the
, when adding / removing a device, ensure to do this from your third-party app (not from the Google Home app (GHA)). Do not remove the device if there is only one device in your app that is account-linked, as this will cause a sync error.documentation -
Ensure that
has been implemented correctly.Report State is an important feature which lets the Google Home Action proactively report the latest status of the user's device back to Google Home Graph rather than waiting for aReport State QUERY
intent.You can inspect if the device status is correctly synced on
, and check if the status matches what is shown on the Google Home App.HomeGraph Viewer
If the issue persists after troubleshooting, to help us reproduce it, please share the following information with us:
(JSON format)Sync Response - Relevant
.GCP logs - Project ID.
If you have any further questions, please feel free to reach out to us. Thank you.
ro...@browan.com <ro...@browan.com> #4
The issue still persists.
Currently, both the Check Report State and Query Discrepancy tests are functioning correctly and passing. However, when executing the Request Sync test, the issue remains.
As per your suggestion, I have modified my approach:
I now use the Google Assistant app to add/remove devices.
I use the Google Home app (GHA) for updating devices.
Attached are my operation video and logs for your reference. If there are any errors in my peration process, how should I correctly perform the following test scenarios?
1.Check HomeGraph devices after adding a device => failed (video: adding a device process-20250212.mp4 -
2.Check HomeGraph devices after removing a device => passed
3.Check HomeGraph devices after updating a device => failed (video: updating a device process-20250212.mp4 -
Project ID: zephyr-dev-439505
Sync Response:
GCP logs:
Test suite : Report State and Request Sync : timeout is currently set to 15 seconds
Thank you.
cy...@google.com <cy...@google.com> #5
Dear developer,
Thank you for providing the detailed information. Based on the video, it appears that you unlinked and relinked your project in Google Assistant > Home control. However, this is not the correct approach for the Request Sync test cases in the Test Suite.
For the test cases - Check HomeGraph devices after adding / removing / updating a device
, you will need to add or remove other smart home devices to your project, such as a LIGHT or AC_UNIT. When updating a device, you can change its name. Kindly ensure that this is done from your third-party app rather than from the Google Home app (GHA). For more details, please refer to this link.
If you have any further questions, please feel free reach out to us. Thanks.
ro...@browan.com <ro...@browan.com> #6
Thank you for your response. I would like to provide some clarification regarding our product. It is a smart range hood, and we have developed the Zephyr Connect App: Zephyr Connect on App Store (
If so, the app was originally designed to allow a single account to be linked to only one smart range hood. When a device is already linked, adding a new device requires unlinking and relinking, which will rebind the originally linked device. The original design also does not support adding additional smart home devices while an existing device is linked.
The app also does not support updating or renaming devices. Therefore, it is not possible to achieve this through a third-party application. Given this limitation, how should we proceed to pass the required test items?
A few years ago, we successfully passed the Request Sync test (
Based on the above explanation, are we still required to complete the test for adding and updating devices in HomeGraph? If so, how should we implement and proceed with the test if it is completed without using the Google Home application (GHA)?
Thank you
cy...@google.com <cy...@google.com> #7
Dear developer,
Thank you for the update. Yes, you can use your app Zephyr, to add/ delete/ update a device.
The test results you submit must include the
ro...@browan.com <ro...@browan.com> #8
But our APP does not have the features to add a second device(the users are required to add the first device once they login) or to update (which we found the only thing we can do is rename a device) an existing device.
Please let us know how to proceed.
BR
cy...@google.com <cy...@google.com> #9
Dear developer,
Thank you for the update. In this case, please proceed with the review submission, even if the Test Suite results do not pass 100% of the tests.
Kindly add a comment explaining why the Request Sync
test cases failed and include the link of this issue ticket in the developer comment field. Our certification team will review your project and comments and will get back to you with the next steps. Thank you.
Description
Currently, I am using Google Home's Cloud to Cloud integration for the test suite, but I am encountering some issues during the Request Sync phase.
According to the documentation athttps://developers.home.google.com/cloud-to-cloud/integration/request-sync#node.js ,
I have implemented the API call in Node.js as follows:
const { onRequest } = require("firebase-functions/v2/https"); const { google } = require('googleapis'); const auth = new google.auth.GoogleAuth({ keyFile: './smart-home-key.json', scopes: ['https://www.googleapis.com/auth/homegraph'] }) const homegraph = google.homegraph({ version: 'v1', auth: auth })
exports.requestsync = onRequest(async (request, response) => { response.set('Access-Control-Allow-Origin', '*') console.info('Request SYNC for user 123') try { const res = await homegraph.devices.requestSync({ requestBody: { agentUserId: '123', async: false } }) console.info('Request sync response:', res.status, res.data) response.json(res.data) } catch (err) { console.error(err) response.status(500).send(
Error requesting sync: ${err}
) } })The sync template as following:
let template = { requestId: body.requestId, payload: { agentUserId: agentUserId, devices: [{ id: defaultDeviceId, type: 'action.devices.types.HOOD', traits: [ 'action.devices.traits.OnOff', 'action.devices.traits.Toggles', 'action.devices.traits.FanSpeed', 'action.devices.traits.Modes', 'action.devices.traits.Timer' ], name: { defaultNames: ['Zephyr range hood'], name: 'RangeHood', nicknames: ['Zephyr'] }, willReportState: true, attributes: { availableToggles: [{ name: 'CleanAir', name_values: [{ name_synonym: ['clean air function', 'clean air', 'clean function'], lang: 'en' }] }, { name: 'Light', name_values: [{ name_synonym: ['light', 'lights'], lang: 'en' }] }, { name: 'GreaseFilter', name_values: [{ name_synonym: ['grease filter timer', 'grease filter'], lang: 'en' }] }, { name: 'CharcoalFilter', name_values: [{ name_synonym: ['charcoal filter timer', 'charcoal filter'], lang: 'en' }] }], availableFanSpeeds: { speeds: [{ speed_name: 'S1', speed_values: [{ speed_synonym: ['speed 1', 'speed one', 'first speed'], lang: 'en' }, { speed_synonym: ['風速 1'], lang: 'zh' }] }, { speed_name: 'S2', speed_values: [{ speed_synonym: ['speed 2', 'speed two', 'second speed', 'speed to'], lang: 'en' }, { speed_synonym: ['風速 2'], lang: 'zh' }] }, { speed_name: 'S3', speed_values: [{ speed_synonym: ['speed 3', 'speed three', 'third speed'], lang: 'en' }, { speed_synonym: ['風速 3'], lang: 'zh' }] }, { speed_name: 'S4', speed_values: [{ speed_synonym: ['speed 4', 'speed four', 'fourth speed', 'speed for'], lang: 'en' }, { speed_synonym: ['風速 4'], lang: 'zh' }] }, { speed_name: 'S5', speed_values: [{ speed_synonym: ['speed 5', 'speed five', 'fifth speed', 'speed V'], lang: 'en' }, { speed_synonym: ['風速 5'], lang: 'zh' }] }, { speed_name: 'S6', speed_values: [{ speed_synonym: ['speed 6', 'speed six', 'sixth speed'], lang: 'en' }, { speed_synonym: ['風速 6'], lang: 'zh' }] }, { speed_name: 'S7', speed_values: [{ speed_synonym: ['speed 7', 'speed seven', 'seven speed'], lang: 'en' }, { speed_synonym: ['風速 7'], lang: 'zh' }] }, { speed_name: 'S8', speed_values: [{ speed_synonym: ['speed 8', 'speed eight', 'eight speed'], lang: 'en' }, { speed_synonym: ['風速 8'], lang: 'zh' }] }, { speed_name: 'S9', speed_values: [{ speed_synonym: ['speed 9', 'speed nine', 'nine speed'], lang: 'en' }, { speed_synonym: ['風速 9'], lang: 'zh' }] }, { speed_name: 'S10', speed_values: [{ speed_synonym: ['speed 10', 'speed ten', 'ten speed'], lang: 'en' }, { speed_synonym: ['風速 10'], lang: 'zh' }] }, { speed_name: 'maximum', speed_values: [{ speed_synonym: ['maximum speed', 'speed maximum', 'strong wind'], lang: 'en' }, { speed_synonym: ['最大風速'], lang: 'zh' }] }, { speed_name: 'minimum', speed_values: [{ speed_synonym: ['minimum speed', 'speed minimum', 'light wind'], lang: 'en' }, { speed_synonym: ['最小風速'], lang: 'zh' }] }, { speed_name: 'increase', speed_values: [{ speed_synonym: ['increase'], lang: 'en' }, { speed_synonym: ['增加風速'], lang: 'zh' }] }, { speed_name: 'decrease', speed_values: [{ speed_synonym: ['decrease'], lang: 'en' }, { speed_synonym: ['降低風速'], lang: 'zh' }] }], ordered: true }, availableModes: [{ name: 'lightlevel', name_values: [{ name_synonym: ['level', 'light', 'light level', 'lights', 'lights level'], lang: 'en' }], settings: [ { setting_name: 'maximum', setting_values: [{ setting_synonym: ['maximum', 'high', 'bright'], lang: 'en' }] }, { setting_name: 'minimum', setting_values: [{ setting_synonym: ['minimum', 'low', 'dim'], lang: 'en' }] }, { setting_name: 'L1', setting_values: [{ setting_synonym: ['one', '1'], lang: 'en' }] }, { setting_name: 'L2', setting_values: [{ setting_synonym: ['two', '2', 'to'], lang: 'en' }] }, { setting_name: 'L3', setting_values: [{ setting_synonym: ['three', '3'], lang: 'en' }] }, { setting_name: 'L4', setting_values: [{ setting_synonym: ['four', '4', 'for'], lang: 'en' }] }, { setting_name: 'L5', setting_values: [{ setting_synonym: ['five', '5', 'V'], lang: 'en' }] }, { setting_name: 'L6', setting_values: [{ setting_synonym: ['six', '6'], lang: 'en' }] }, { setting_name: 'L7', setting_values: [{ setting_synonym: ['seven', '7'], lang: 'en' }] }, { setting_name: 'L8', setting_values: [{ setting_synonym: ['eight', '8'], lang: 'en' }] }, { setting_name: 'L9', setting_values: [{ setting_synonym: ['nine', '9'], lang: 'en' }] }, { setting_name: 'L10', setting_values: [{ setting_synonym: ['ten', '10'], lang: 'en' }] }], ordered: true }], maxTimerLimitSec: 600, commandOnlyTimer: false, reversible: true }, deviceInfo: { manufacturer: 'Zephyr Co', model: 'zephyr-001', hwVersion: '1.0', swVersion: '1.0.1' }, customData: { } }] } }
When the Test Suite reaches the 'Check HomeGraph devices after adding a device' and 'Check HomeGraph devices after updating a device' steps during the Request Sync, after performing the specified actions in the Google Home app and then click Continue to update in HomeGraph., the Request Sync does not work as expected and pass.
However, the 'Check HomeGraph devices after removing a device' step works fine when performing the removal action in the Google Home app.
Can you help check what part might be causing the issue?
Or do you have any solutions to fix it, even if it requires re-modifying some code?
Where can I find the log information related to Request Sync?
This product is currently live for users, and we hope to have a solution as soon as possible.
Thanks.