Пример приложения
Если у вас возникнут какие-либо проблемы при использовании API Home, вы можете собрать логи для дальнейшей отладки. Для сбора логов с мобильного устройства требуется Android Debug Bridge ( adb ). Если вам нужна помощь от Google, соберите логи как с устройств Android, так и с хаба и создайте заявку в системе отслеживания ошибок, указав соответствующую информацию и связанные с ней логи.
Собирайте журналы Android.
Для выполнения всех шагов, связанных с adb , ваше мобильное устройство должно быть подключено к локальному компьютеру.
Установите adb
Если вы еще этого не сделали, настройте Android Debug Bridge на своем локальном компьютере:
- Установите на свой компьютер программу "adb" .
- Включите параметры разработчика и отладку по USB на своем Android телефоне.
Плагин Google Home для Android Studio
Google Home Plugin for Android Studio — это полезный инструмент для сбора и анализа логов, созданный специально для разработчиков Google Home platform . Этот плагин предоставляет доступ к Google Assistant Simulator , облачному логированию и другим инструментам, упрощающим процесс разработки smart home .
Используйте этот инструмент совместно с adb для более детального анализа журналов устройств Matter .
Чтобы узнать больше и получить инструмент, см. Google Home Plugin for Android Studio .
Информация о версии
Мы рекомендуем собирать всю информацию о версиях вашей системы всякий раз, когда вы решаете собирать журналы. Это необходимо, если вам нужно поделиться информацией о проблемах с Google.
- Получите идентификатор вашего мобильного устройства:
adb devicesList of devices attached device-id device
- Сохраните это значение в переменной с именем
phoneid:phoneid=device-id - Сохраняйте различную информацию об устройстве в переменные:
containerinfo=$(adb -s $phoneid shell dumpsys package com.google.android.gms | grep "versionName" || true); homemoduleinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.home " || true); optionalhomemoduleinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.optional_home " || true); policyhomemoduleinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.policy_home" || true); threadinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.threadnetwork" || true); ghainfo=$(adb -s $phoneid shell dumpsys package com.google.android.apps.chromecast.app | grep versionName || true); enabledfeatures=$((adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "Enabled features" | grep -i "home") || true); androidversion=$(adb -s $phoneid shell getprop ro.build.version.release || true); androidapiversion=$(adb -s $phoneid shell getprop ro.build.version.sdk || true) - Сохраните все переменные в файл с именем
_versions.txt:Разверните, чтобы отобразить команды для сохранения переменных в файл.
Весь блок можно скопировать и вставить в терминал одновременно.
versionfile=$logtimestamp"_versions.txt" echo "Saving version info to $versionfile"
echo "Container version:" >> $versionfile echo $containerinfo >> $versionfile echo "" >> $versionfileecho "Home Module version:" >> $versionfile echo $homemoduleinfo >> $versionfile echo "" >> $versionfileecho "Optional Home Module version:" >> $versionfile echo $optionalhomemoduleinfo >> $versionfile echo "" >> $versionfileecho "Policy Home Module version:" >> $versionfile echo $policyhomemoduleinfo >> $versionfile echo "" >> $versionfileecho "Thread Module version:" >> $versionfile echo $threadinfo >> $versionfile echo "" >> $versionfileecho "GHA version:" >> $versionfile echo $ghainfo >> $versionfile echo "" >> $versionfileecho "Android version: " >> $versionfile echo $androidversion >> $versionfile echo "" >> $versionfileecho "Android API version: " >> $versionfile echo $androidapiversion >> $versionfile echo "" >> $versionfileecho "Found enabled features (blank if missing):" >> $versionfile echo $enabledfeatures >> $versionfile echo "" >> $versionfile - Проверьте содержимое файла
_versions.txt:cat _versions.txtТеперь этот файл можно предоставлять Google по мере необходимости для устранения неполадок.Разверните, чтобы показать пример выходного файла.
Container version: versionName=23.19.12 (190400-530524295) versionName=22.46.17 (190408-491726958)
Home Module version: com.google.android.gms.home [v230508900]Optional Home Module version:Policy Home Module version: com.google.android.gms.policy_home [230508900] [230508900065.505615668.505615668] [Download:000003be/dl-Home.integ_230508900100400.apk] [download:/Home.integ/230508900100400:Home.integ:230508900100400]Thread Module version: com.google.android.gms.threadnetwork [v231912000]GHA version: versionName=3.2.32.1Android version: 13Android API version: 33Found enabled features (blank if missing):
Соберите журналы
Для сбора логов закройте все запущенные приложения на мобильном устройстве. Затем:
- Откройте окно терминала и очистите существующие журналы устройства:
adb logcat -b all -c - Запустить процесс сбора логов:
Оставьте этот терминал открытым. Он будет собирать журналы с вашего устройства, пока процесс запущен.adb logcat >> _logs.txt - Запустите демонстрационное приложение и зафиксируйте все действия пользовательского интерфейса. После завершения остановите процесс
logcat, запущенный в терминале, нажав Ctrl+C (или Cmd+C на Mac). - Журналы этой сессии сохраняются в файле с именем
_logs.txt.
Вы можете проанализировать информацию в этом файле различными способами, в том числе путем поиска по ключевым словам, таким как error , exception или crash .
Скрипты логирования
Для вашего удобства в демонстрационном приложении представлены скрипты для получения соответствующих логов и их компиляции в текстовый файл. Для обеспечения наилучшего опыта отладки эти логи следует прикреплять к любым сообщенным ошибкам, чтобы облегчить анализ первопричин со стороны Google.
Эти журналы находятся в каталоге scripts в исходном коде примера приложения. Выполните следующие действия из корневого каталога проекта:
- Получите идентификатор вашего мобильного устройства:
adb devices -lList of devices attached device-id device
- Запустите скрипт
get_logs.sh:./scripts/get_logs.sh device-idCleared previous logs from device. Saving version information to home_api_sample_logs_20240605233243.txt... Saving logs to home_api_sample_logs_20240605233243.txt... (Press CTRL+C to stop the script)
- Воспроизведите проблему.
- Нажмите
CTRL+Cчтобы остановить выполнение скрипта.
Скрипт сгенерирует файл журнала с отметкой времени, содержащий всю необходимую информацию. Прикрепляйте эти файлы к любым отчетам об обнаруженных ошибках.
Журналы устройства Cast Hub
Просматривать журналы работы устройства Google Nest Hub можно следующим способом, который поддерживается для следующих моделей:
- Google Home
- Google Nest Audio
- Google Nest Hub
- Google Nest Mini
Для включения концентратора Cast для получения локальных логов:
- Настройте Android Debug Bridge .
Получите IP-адрес вашего хаба:
- Если у центрального блока есть экран:
- Проведите пальцем вниз от верхнего края экрана.
- Нажмите на «Настройки»
- Найдите IP-адрес устройства: на Nest Hub (2nd gen) перейдите в раздел «Информация об устройстве» > «Техническая информация» > «IP-адрес».
- С сайта GHA на вашем телефоне:
- Коснитесь устройства, чтобы открыть страницу с подробными сведениями о нем.
- Нажмите на значок « », чтобы открыть страницу настроек.
- Чтобы узнать IP-адрес устройства, перейдите в раздел «Информация об устройстве» > «Техническая информация» > «IP-адрес».
- Если у центрального блока есть экран:
На компьютере, подключенном к той же сети Wi-Fi, что и устройство:
adb connect ip-addressadb logcatЧтобы предоставить кому-либо журналы, выполните операцию, которая завершается с ошибкой, и перенаправьте вывод в текстовый файл:
adb logcat -d > platform-logs.txt
Автоматизация
Обнаружение границ
В экосистеме Google Home в функциях автоматизации используется обнаружение изменений состояния , то есть логика, которая проверяет, что запуск устройства происходит только при фактическом изменении состояния, в отличие от обновления состояния, которое просто повторяет предыдущее состояние устройства.
Например, если включение света является запуском, то обнаружение фронта сигнала подтверждает, что запуск срабатывает только в том случае, если световой прибор переходит из выключенного состояния во включенное, а не из включенного в включенное (без изменений).
Автоматизация работает не так, как ожидалось.
Если автоматизация работает не так, как ожидалось, с учетом обнаружения границ, после этого:
Проверьте каждое устройство, чтобы убедиться в его исправной работе независимо от вашей системы автоматизации.
Внимательно изучите график автоматизации для вашей системы автоматизации и сравните его с вашим DSL-языком автоматизации, чтобы выявить любые потенциально неверные предположения с вашей стороны.
Отслеживайте состояние устройства в приложении Google Home во время выполнения автоматизации.
Убедитесь, что все устройства, на которые ссылается автоматизация, присутствуют в структуре там, где вы ожидаете их увидеть. Удаление устройства, от которого зависит автоматизация, может иметь непредвиденные последствия. См. раздел «Влияние удаления устройства на автоматизацию» .
Автоматизация запускается тогда, когда не должна.
Если ваша автоматизация запускается, когда не должна, проверьте критерии запуска. Возможно, потребуется добавить дополнительную логику, чтобы гарантировать, что изменение состояния будет зафиксировано только один раз и запустит автоматизацию только один раз.
Автоматизация не компилируется
Убедитесь, что ваше приложение содержит все необходимые импорты, включая каждый класс, соответствующий различным типам узлов, а также трейты, на которые вы ссылаетесь.
Создание автоматизации не проходит проверку.
Если автоматизация не проходит проверку, появляется предупреждение или сообщение об ошибке, содержащее информацию о проблеме. Для получения дополнительной информации обратитесь к справочнику ValidationIssueType .
Функция List генерирует исключения.
При вызове функции «Список API автоматизации» обработчики чтения могут генерировать исключения из-за отсутствия необходимых функций API. Для предотвращения этого удалите соответствующую автоматизацию.
Для этого:
- Убедитесь, что
adbустановлен. См. раздел «Установка adb» . Получите идентификатор автоматизации из логов Android, вызвав:
adb logcat -s GhpNativeПримеры логов:
adb logcat -s GhpNative level:debug | grep -A 10 -B 10 AutomationManagerTrait\.ListResponse INTERACTION RESPONSE -> SendCommandsResponse: 1 { 1: "automation@global" 3 { 1: "home.internal.traits.automation.AutomationManagerTrait.ListResponse" 2: 5 { 1: "type.googleapis.com/home.internal.traits.automation.AutomationManagerTrait.ListResponse" 1 { 1: "1111-2222-3333-44444-55555" // Automation ID to delete 2: "structure@2222-3333-4444-5555-6666" ...Если необходимо удалить несколько идентификаторов автоматизации, вы можете использовать пейджер терминала для управления выводом:
adb logcat -s GhpNative level:debug | lessУдалите автоматизацию, используя её идентификатор:
structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
API обнаружения регистрирует предупреждение, если признак не зарегистрирован.
Если API Discovery выдает предупреждение " Trait not found , это означает, что API пытается использовать трейт для кандидатов Discovery, но это не удастся, поскольку трейт не был зарегистрирован во время инициализации. Например:
09-03 17:45:20.578 10646 10646 W AutomationSdk: trait_id: "home.matter.6006.clusters.fc43" and Exception occurred com.google.home.HomeException: 18: Trait not found: home.matter.6006.clusters.fc43
09-03 17:45:20.578 10646 10646 W AutomationSdk: While converting candidate: # com.google.home.platform.traits.AutomationCandidateNode@76f0b582
Идентификатор признака — home.matter.6006.clusters.fc43 , что соответствует RelativeHumidityControl . Чтобы определить имя признака по идентификатору, см. индекс признаков .
В этом примере компонент RelativeHumidityControl необходимо зарегистрировать во время инициализации приложения. Для добавления компонента в реестр обратитесь к разделу «Регистрация характеристик» .
OAuth
Если у вас уже есть клиент OAuth
Если у вас уже есть проверенный OAuth-клиент для опубликованного приложения, вы можете использовать его для тестирования API Home.
Регистрация Google Home Developer Console не требуется для тестирования и использования API Home. Однако вам все равно потребуется подтвержденная регистрация Developer Console для публикации вашего приложения, даже если у вас есть проверенный клиент OAuth из другой интеграции.
Принимаются во внимание следующие факторы:
При использовании существующего OAuth-клиента действует ограничение в 100 пользователей. Информацию о добавлении тестовых пользователей см. в соответствующем разделе.Настройте экран согласия OAuth .Независимо от аутентификации OAuth, существует ограничение, установленное Home APIs, — не более 100 пользователей, которые могут предоставлять разрешения вашему приложению. Это ограничение снимается после завершения регистрации в Developer Console .
Регистрация Developer Console Этот документ следует отправить на утверждение, когда вы будете готовы ограничить предоставление доступа к определенным типам устройств через OAuth в рамках подготовки к обновлению вашего приложения с использованием Home API.
Для приложений Google Cloud , ожидающих проверки OAuth, пользователи не смогут завершить процесс OAuth до завершения проверки. Попытки предоставить разрешения завершатся ошибкой:
Access blocked: <Project Name> has not completed the Google verification process.