мы разработали действие умного дома для Google Assistant, и наше «действие постановки» прошло набор тестов для умного дома. Теперь, когда мы хотели сертифицировать «производственное действие», набор тестов не прошел, ни одна команда не сработала. Состояния устройств изменились правильно, но набор тестов вернул следующую ошибку: AssertionError: ожидаемое состояние, которое будет включать: {"on": true}, фактическое состояние: {}: ожидается, что false будет истинным
У нас уже была проблема с «промежуточным действием», и мы определили, что это проблема HomeGraph Syn c. Мы исправили это, и потом все заработало. Код «производственного действия» такой же, как и «постановочного действия», и настройки также такие же. Итак, мы понятия не имеем, что можно сделать, чтобы пройти набор тестов. Кто-нибудь знает, в чем может быть проблема?
Вот отрывок из нашего кода:
const { smarthome } = require('actions-on-google');
// creating app in constructor
this._app = smarthome({ jwt, debug: this._options.debug || false });
// code-snipped sending state to HomeGraph after creating the state object from our device states
console.info('Report state:');
console.info(inspect(state, {depth: null, showHidden: false}));
this._app.reportState(state)
.then(res => console.info('report state succeeded', res))
.catch(err => console.error('report state failed', err));
И вот соответствующий журнал:
Report state:
{
requestId: 'c82c0c20-a10d-4ded-a456-319109188501',
agentUserId: '730f1842168ade4dcf9be3e40ea279e7ac4e6f21c002c09909f9d9a0341d2214',
payload: {
devices: {
states: {
'500dc011398fd3c191efdfa8e13a1062f7ef4d1c': { on: true, online: true }
}
}
}
}
report state succeeded {
"requestId": "c82c0c20-a10d-4ded-a456-319109188501"
}
В случае ошибки мы ожидаем что-то вроде:
- 404: agentUserId unknown или HomeGraph не включен
- 401: неправильно настроены права доступа
- или любая другая ошибка
, но это удается.
EDITED:
Мы скорректировали наш код, прочитав состояние из HomeGraph сразу после его отправки в HomeGraph, чтобы увидеть, получает ли HomeGraph что-нибудь от нас вообще:
const auth = new google.auth.GoogleAuth({
credentials: jwt,
scopes: ['https://www.googleapis.com/auth/homegraph']
});
this._hg = google.homegraph({
version: 'v1',
auth: auth,
});
this._app = smarthome({ jwt, debug: this._options.debug || false });
this._app.reportState(state).then(async res => {
const request = {
requestBody: {
agentUserId: state.agentUserId,
inputs: [{
payload: {
devices: Object.keys(state.payload.devices.states).map(id => ({id}))
}
}]
}
};
console.info(require('util').inspect(request, {depth: null}));
const readStates = await this._hg.devices.query(request);
console.info('########## STATES in HOMEGRAPH #######################');
console.info(readStates.data);
return res;
})
.catch(err => console.error('report state failed', err));
Состояние пусто.
Мы также реализовали простое приложение node.js для чтения всех состояний устройства через HomeGraph API. Все состояния устройства пусты в любое время.
Главный вопрос: почему вызов this._app.reportState (state) никогда не запускается в обработчике catch? Должно быть что-то не так с нашей отправкой состояния в HomeGraph, но мы не возвращаем никаких ошибок ...?