1. Прежде чем начать
Как разработчик Интернета вещей (IoT), вы можете создавать интеграцию между облаками , которая дает вашим пользователям возможность управлять своими устройствами с помощью сенсорного управления в приложении Google Home и голосовых команд с помощью Google Assistant.
Изучение инструментов отладки для интеграции облачных технологий — важный шаг на пути к интеграции качества производства с Google Assistant. Чтобы упростить мониторинг и отладку, доступны метрики Google Cloud Platform (GCP) и пакет ведения журналов и тестов для умного дома, которые помогут вам выявлять и устранять проблемы в вашей интеграции.
Предварительные условия
- Прочтите руководство для разработчиков по созданию интеграции облака в облако.
- Запустите подключение устройств умного дома к лаборатории кода Google Assistant .
Что ты построишь
В этой лаборатории кода вы развернете интеграцию «облако-облако» с двумя дефектами и подключите ее к Ассистенту, а затем отладите дефекты интеграции с помощью набора тестов для «умного дома» и показателей и ведения журнала облачной платформы Google (GCP).
Что вы узнаете
- Как использовать метрики и журналы GCP для выявления и решения производственных проблем
- Как использовать Test Suite для умного дома для выявления функциональных проблем и проблем с API
Что вам понадобится
- Веб-браузер, например Google Chrome.
- Устройство iOS или Android с установленным приложением Google Home.
- Node.js версии 10.16 или новее
- Платежный аккаунт Google Cloud
2. Запустите неисправное приложение.
Получить исходный код
Щелкните следующую ссылку, чтобы загрузить образец этой лаборатории кода на свою машину разработки:
…или вы можете клонировать репозиторий GitHub из командной строки:
$ git clone https://github.com/google-home/smarthome-debug.git
О проекте
Приложение стиральной машины содержит следующие подкаталоги:
-
public
: пользовательский интерфейс, позволяющий легко управлять и отслеживать состояние интеллектуальной стиральной машины. -
functions
: полностью реализованный облачный сервис, который управляет интеллектуальной стиральной машиной с помощью облачных функций для Firebase и базы данных Firebase Realtime .
Подключиться к Firebase
Откройте терминал на вашей машине разработки. Перейдите в каталог washer-faulty
, затем настройте интерфейс командной строки Firebase с помощью вашего проекта интеграции, встроенного в раздел «Подключение устройств умного дома к лаборатории кода Google Assistant» :
$ cd washer-faulty $ firebase use <firebase-project-id>
Развертывание в Firebase
Перейдите в папку functions
и установите все необходимые зависимости с помощью npm.
$ cd functions $ npm install
Примечание. Если вы видите сообщение ниже, вы можете проигнорировать его и продолжить. Предупреждение связано с некоторыми более старыми зависимостями, более подробную информацию можно найти здесь .
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
Теперь, когда вы установили зависимости и настроили свой проект, вы готовы развернуть неисправное приложение для стирки.
$ firebase deploy
Это вывод консоли, который вы должны увидеть:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<Firebase-project-id>/overview Hosting URL: https://<Firebase-project-id>.firebaseapp.com
Обновить домашний график
Откройте URL-адрес хостинга в своем браузере ( https://<firebase-project-id>.firebaseapp.com
), чтобы просмотреть веб-приложение. В веб-интерфейсе нажмите кнопку «Обновить». Кнопка для обновления HomeGraph через Request Sync с использованием последних метаданных устройства из неисправного приложения стиральной машины:
Откройте приложение Google Home и убедитесь, что вы видите стиральную машину с именем Faulty Washer .
3. Проверьте свою интеграцию
После развертывания проекта проверьте, контролирует ли ваша интеграция стиральную машину.
Проверьте стиральную машину
Проверьте изменение значения, попробовав любую из следующих голосовых команд через телефон:
«Эй, Google, включи мою стиральную машину».
«Окей, Google, включи мою стиральную машину».
«Окей, Google, приостанови мою стиральную машину».
«Окей, Google, возобнови работу стиральной машины».
«Эй, Google, останови мою стиральную машину».
Вы заметите, что Ассистент отвечает голосом, что что-то не так, когда вы приостанавливаете/возобновляете работу стиральной машины:
«К сожалению, мне не удалось связаться с <отображаемым именем проекта>».
Чтобы устранить эту проблему, сначала вам понадобится дополнительная информация об ошибке, чтобы сузить круг вопросов и определить основную причину.
Аналитическая панель умного дома
Хорошим местом для проверки ошибок является панель мониторинга Smarthome Analytics , которая объединяет диаграммы показателей использования и работоспособности для выполнения вашего облака:
- Метрики использования отражают тенденцию использования вашей интеграции между облаками, включая количество активных пользователей в день и общее количество запросов к вашему выполнению.
- Метрики работоспособности помогают отслеживать возникновение аномалий при интеграции облака с облаком, охватывая задержку запроса, процент успеха и разбивку ошибок.
Чтобы сузить причину ошибки, выполните следующие действия, чтобы получить доступ к панели мониторинга проекта.
- В консоли разработчика перейдите на страницу «Проекты».
- Выберите проект умного дома.
- Откройте вкладку «Аналитика» в меню слева.
- Это приведет вас к списку панелей мониторинга вашего проекта в Google Cloud. Выберите панель Google Home Analytics — интеграция с облаком .
- Прокрутите вниз до пункта «Ошибки выполнения облака — диаграмма состояния», чтобы просмотреть коды ошибок для выделенного диапазона времени.
Код ошибки PARTNER_RESPONSE_MISSING_DEVICE
указывает на основную причину. Затем получите журналы событий на основе кода ошибки для получения более подробной информации.
Доступ к журналам событий
Чтобы получить более подробную информацию об ошибке, получите доступ к журналам событий для вашей интеграции между облаками с помощью Cloud Logging .
Откройте меню навигации в Google Cloud Platform и в разделе «Операции » выберите «Ведение журналов» > «Обозреватель журналов», чтобы получить доступ к журналам событий вашего проекта. Кроме того, вы можете выполнить поиск по запросу Logs Explorer в поле поиска.
В поле ввода «Искать по всем полям» введите запрос PARTNER_RESPONSE_MISSING_DEVICE
и нажмите «Выполнить запрос» . Журналы, соответствующие запросу, отображаются в разделе «Результаты» .
В журнале ошибок отображается событие умного дома с подробной информацией об ошибке, указывающей:
- Предпринятое пользователем действие — «возобновление стирки» (
actionType:
«STARTSTOP_UNPAUSE
»), соответствующее недавней неудачной голосовой команде. - Соответствующее сообщение отладки: «
JSON response does not include device.
На основании сообщения отладки вам следует проверить, почему приложение стиральной машины не включает правильное устройство в ответ EXECUTE
.
Определите основную причину ошибки
В functions/index.js
найдите обработчик EXECUTE
(в массиве onExecute
), который возвращает статус каждой команды и состояние нового устройства. Вставка идентификаторов устройств в ответ EXECUTE
зависит от разрешения функции updateDevice
:
index.js
app.onExecute(async (body) => {
...
for (const command of intent.payload.commands) {
for (const device of command.devices) {
for (const execution of command.execution) {
executePromises.push(
updateDevice(execution, device.id)
.then((data) => {
result.ids.push(device.id);
Object.assign(result.states, data);
})
.catch((e) =>
functions.logger.error('EXECUTE',
device.id, e.message)));
}
}
}
Далее проверьте, как функция updateDevice
обрабатывает паузу/возобновление на стиральной машине, и вы обнаружите, что строка, соответствующая команде паузы/возобновления, неверна:
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
...
case 'action.devices.commands.PauseUnpausePause':
state = {isPaused: params.pause};
if (params.pause) state.isRunning = false;
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
Исправьте ошибку
Теперь, когда вы определили основную причину ошибки, вы можете исправить строку для команды паузы/возобновления:
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
...
case 'action.devices.commands.PauseUnpause':
state = {isPaused: params.pause};
if (params.pause) state.isRunning = false;
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
Проверьте свое исправление
Разверните обновленный код с помощью Firebase CLI:
firebase deploy --only functions
Повторите следующие голосовые команды, и вы увидите, что Ассистент теперь реагирует правильно, когда вы приостанавливаете/возобновляете работу стиральной машины.
«Окей, Google, приостанови мою стиральную машину».
=>
«Конечно, ставлю стирку на паузу».
«Окей, Google, возобнови работу стиральной машины».
=>
«Понял, возобновляю стирку».
Вы также можете проверить текущее состояние вашей стиральной машины, задавая вопросы.
«Окей, Google, моя стиральная машина включена?»
«Окей, Google, моя стиральная машина работает?»
«Окей, Google, на каком цикле работает моя стиральная машина?»
4. Проверьте свою интеграцию с помощью Test Suite.
Помимо тестирования вручную, вы можете использовать автоматизированный набор тестов для умного дома для проверки вариантов использования на основе типов устройств и характеристик, связанных с вашей интеграцией. Test Suite запускает серию тестов для обнаружения проблем в вашей интеграции и отображает информационные сообщения о неудачных тестовых случаях, чтобы ускорить отладку перед погружением в журналы событий.
Запустите Test Suite для умного дома
Следуйте этим инструкциям, чтобы протестировать интеграцию облака в облако с помощью Test Suite:
- В веб-браузере откройте Test Suite для умного дома .
- Войдите в Google, используя кнопку в правом верхнем углу. Это позволяет Test Suite отправлять команды непосредственно в Google Assistant.
- В поле «Идентификатор проекта » введите идентификатор проекта вашей облачной интеграции. Затем нажмите «ДАЛЕЕ» , чтобы продолжить.
- На этапе «Настройки тестирования» вы увидите, что в Test Suite указан тип устройства и характеристики стиральной машины.
- Отключите параметр «Синхронизация тестового запроса» , поскольку в примере приложения стиральной машины нет пользовательского интерфейса для добавления, удаления или переименования стиральной машины. В производственной системе вы должны запускать Request Sync каждый раз, когда пользователь добавляет, удаляет или переименовывает устройства.
- Нажмите «ДАЛЕЕ» , чтобы начать выполнение теста.
После завершения работы Test Suite просмотрите результаты тестовых случаев. Вы заметите два неудачных тестовых случая с соответствующим сообщением об ошибке:
Чтобы отладить интеграцию «облако-облако» на предмет сбоя, вам необходимо определить основную причину ошибки, сначала проанализировав сообщение об ошибке.
Анализ сообщения об ошибке
Чтобы помочь разработчикам определить основную причину, Test Suite отображает сообщения об ошибках для каждого неудачного тестового примера, в которых указывается причина сбоя.
Для первого неудачного тестового примера выше:
его сообщение об ошибке указывает, что Test Suite ожидает "isPause": true
в состояниях, о которых сообщает ваша интеграция Cloud-to-Cloud, но фактические состояния включают только "isPause": false
.
Кроме того, сообщение об ошибке второго неудачного тестового примера указывает на то, что состояния в ответе QUERY
от вашей интеграции «облако-облако» включают "isPause": true
, которое отличается от "isPause": false
в состояниях, сообщаемых из вашей облачной среды. интеграция:
Согласно обоим сообщениям об ошибках, вам следует проверить, указано ли в отчетах об интеграции правильное значение isPaused
.
Определите основную причину ошибки
Откройте functions/index.js
, который содержит функцию reportstate
, которая публикует изменения состояния в Home Graph через Report State. Проверьте полезную нагрузку состояния отчета, и вы обнаружите, что в ней отсутствует состояние isPaused
, а это именно то, что Test Suite проверял в неудачных тестовых случаях.
index.js
exports.reportstate = functions.database.ref('{deviceId}').onWrite(
async (change, context) => {
...
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of our washer */
[context.params.deviceId]: {
online: true,
on: snapshot.OnOff.on,
isRunning: snapshot.StartStop.isRunning,
currentRunCycle: [{
currentCycle: 'rinse',
nextCycle: 'spin',
lang: 'en',
}],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
},
},
},
},
};
const res = await homegraph.devices.reportStateAndNotification({
requestBody,
});
...
});
Исправьте ошибку
Теперь, когда вы определили основную причину ошибки, внесите изменения в functions/index.js
, добавив состояние isPaused
в полезные данные состояния отчета:
index.js
exports.reportstate = functions.database.ref('{deviceId}').onWrite(
async (change, context) => {
...
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of our washer */
[context.params.deviceId]: {
online: true,
on: snapshot.OnOff.on,
isPaused: snapshot.StartStop.isPaused,
isRunning: snapshot.StartStop.isRunning,
currentRunCycle: [{
currentCycle: 'rinse',
nextCycle: 'spin',
lang: 'en',
}],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
},
},
},
},
};
...
});
Проверьте свое исправление
Разверните обновленный код с помощью Firebase CLI:
$ firebase deploy --only functions
Перезапустите набор тестов для умного дома, и вы обнаружите, что все тестовые примеры пройдены.
5. Поздравления
Поздравляем! Вы успешно научились устранять проблемы интеграции облака в облако с помощью Test Suite для умного дома, а также показателей и ведения журналов GCP.
Узнать больше
На основе этой Codelab попробуйте выполнить следующие упражнения и изучите дополнительные ресурсы:
- Добавьте на свое устройство больше поддерживаемых характеристик и протестируйте их с помощью Test Suite.
- Создавайте информационные панели , настраивайте оповещения и программно получайте доступ к данным метрик, чтобы получать полезные показатели использования для вашей интеграции.
- Ознакомьтесь с местными возможностями для умного дома.
- Чтобы узнать больше, ознакомьтесь с нашим образцом на GitHub .
Вы также можете узнать больше о тестировании и отправке интеграции на рассмотрение, включая процесс сертификации для публикации вашей интеграции для пользователей.