Пример приложения
Если у вас возникли проблемы при использовании 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 , Cloud Logging и другим инструментам для упрощения процесса разработки вашего smart home .
Используйте этот инструмент совместно с adb
для дальнейшего анализа журналов устройств Matter .
Чтобы узнать больше и получить инструмент, ознакомьтесь с Google Home Plugin for Android Studio .
Информация о версии
Мы рекомендуем собирать всю информацию о версии, связанную с вашей настройкой, всякий раз, когда вы решите собирать логи. Это необходимо, если вам нужно поделиться проблемами с Google.
- Получите идентификатор вашего мобильного устройства:
adb devices
List 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 "" >> $versionfile
echo "Home Module version:" >> $versionfile echo $homemoduleinfo >> $versionfile echo "" >> $versionfile
echo "Optional Home Module version:" >> $versionfile echo $optionalhomemoduleinfo >> $versionfile echo "" >> $versionfile
echo "Policy Home Module version:" >> $versionfile echo $policyhomemoduleinfo >> $versionfile echo "" >> $versionfile
echo "Thread Module version:" >> $versionfile echo $threadinfo >> $versionfile echo "" >> $versionfile
echo "GHA version:" >> $versionfile echo $ghainfo >> $versionfile echo "" >> $versionfile
echo "Android version: " >> $versionfile echo $androidversion >> $versionfile echo "" >> $versionfile
echo "Android API version: " >> $versionfile echo $androidapiversion >> $versionfile echo "" >> $versionfile
echo "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.1
Android version: 13
Android API version: 33
Found 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 -l
List of devices attached device-id device
- Запустите скрипт
get_logs.sh
:./scripts/get_logs.sh device-id
Cleared 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 Hub, выполнив следующие действия:
- Настройте Android Debug Bridge .
Получите IP-адрес вашего концентратора:
- С концентратора, если у него есть экран:
- Проведите пальцем вниз от верхней части экрана.
- Нажмите на значок «Настройки
- Найдите IP-адрес устройства: на Nest Hub (2nd gen) перейдите в раздел «Информация об устройстве» > «Техническая информация» > «IP-адрес».
- От GHA на вашем телефоне:
- Нажмите на устройство, чтобы открыть страницу с его сведениями.
- Нажмите значок «Настройки , чтобы открыть страницу настроек.
- Найдите IP-адрес устройства: перейдите в раздел Информация об устройстве > Техническая информация > IP-адрес.
- С концентратора, если у него есть экран:
На компьютере, подключенном к той же сети Wi-Fi, что и устройство:
adb connect ip-address
adb logcat
Чтобы предоставить кому-либо журналы, выполните операцию, которая не удалась, и перенаправьте вывод в текстовый файл:
adb logcat -d > platform-logs.txt
Автоматизация
Обнаружение краев
Автоматизация в экосистеме Google Home включает функцию обнаружения границ , которая представляет собой логику, гарантирующую, что стартер активируется только при фактическом изменении состояния, в отличие от обновления состояния, которое просто повторяет предыдущее состояние устройства.
Например, если включение света является стартером, обнаружение края гарантирует, что стартер активируется только в том случае, если световой прибор переходит из выключенного состояния во включенное, а не из включенного во включенное (без изменений).
Автоматизация не ведет себя так, как ожидалось
Если после учета обнаружения краев автоматика ведет себя не так, как ожидалось:
Проверьте каждое устройство, чтобы убедиться, что оно функционирует правильно независимо от вашей автоматизации.
Взгляните на график автоматизации вашей системы и сравните его с вашим DSL-диапазоном автоматизации, чтобы выявить любые потенциально неверные предположения с вашей стороны.
Наблюдайте за состоянием устройства в приложении Google Home во время выполнения автоматизации.
Проверьте, что все устройства, на которые ссылается автоматизация, присутствуют в структуре, где вы ожидаете их присутствия. Удаление устройства, от которого зависит автоматизация, может иметь непредвиденные последствия. См. Влияние удаления устройства на автоматизацию .
Автоматизация работает, когда не должна
Если ваша автоматизация запускается, когда не должна, проверьте критерии запуска. Возможно, потребуется добавить дополнительную логику, чтобы гарантировать, что изменение состояния фиксируется только один раз и запускает автоматизацию только один раз.
Автоматизация не компилируется
Убедитесь, что ваше приложение содержит все необходимые импорты, включая каждый класс, соответствующий различным типам узлов, а также характеристики, на которые вы ссылаетесь.
Создание автоматизации не проходит проверку
Если создание автоматизации не проходит проверку, предупреждение или сообщение об ошибке предоставляет информацию о проблеме. Для получения дополнительной информации обратитесь к справочнику ValidationIssueType
.
Функция списка выдает исключения
При вызове функции Automation API List обработчики чтения могут выдавать исключения из-за отсутствующих функций 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"))
Discovery 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 для опубликованного приложения, вы можете использовать существующий клиент OAuth для тестирования API Home.
Регистрация Google Home Developer Console не требуется для тестирования и использования API Home. Однако вам все равно понадобится одобренная регистрация Developer Console для публикации вашего приложения, даже если у вас есть проверенный клиент OAuth из другой интеграции.
При этом следует учитывать следующие соображения:
При использовании существующего клиента OAuth существует ограничение в 100 пользователей. Для получения информации о добавлении тестовых пользователей см.Настройте экран согласия OAuth .Независимо от проверки OAuth, существует ограничение Home APIs в 100 пользователей, которые могут предоставить разрешения вашему приложению. Это ограничение снимается после завершения регистрации в Developer Console .
Регистрация Developer Console следует отправить на утверждение, когда вы будете готовы ограничить предоставление разрешений типам устройств через OAuth в рамках подготовки к обновлению вашего приложения с помощью API Home.
Для приложений Google Cloud , которые все еще ожидают проверки OAuth, пользователи не могут завершить поток OAuth, пока проверка не будет завершена. Попытки предоставить разрешения завершатся ошибкой со следующей ошибкой:
Access blocked: <Project Name> has not completed the Google verification process.