Пример приложения
Если при использовании Home API у вас возникнут проблемы, вы можете собрать журналы для дальнейшей отладки. Для сбора журналов с мобильного устройства требуется Android Debug Bridge (adb). Если вам нужна помощь от Google, соберите журналы с устройств Android и концентратора и создайте запрос в системе отслеживания ошибок, указав нужную информацию и прикрепив журналы.
Как собрать журналы Android
Для выполнения всех действий, связанных с adb, мобильное устройство должно быть подключено к локальному компьютеру.
Установите ADB
Если вы ещё не настроили Android Debug Bridge на локальном компьютере, сделайте следующее:
- Установите на компьютер инструмент adb.
- Включите режим «Для разработчиков» и отладку по USB на телефоне Android.
Как получить идентификатор мобильного устройства
- Как узнать идентификатор мобильного устройства:
adb devicesList of devices attached device-id device
- Сохранить это значение в переменной
phoneid:phoneid=device-id
Информация о версии.
Рекомендуем собирать всю информацию о версиях, связанную с вашей настройкой, каждый раз, когда вы решаете собирать журналы. Это необходимо, если вы хотите сообщить о проблемах в Google.
- Сохраните в переменных различные сведения об устройстве:
containerinfo=$(adb -s $phoneid shell dumpsys package com.google.android.gms | grep -m 1 "versionName" || true); ghainfo=$(adb -s $phoneid shell dumpsys package com.google.android.apps.chromecast.app | grep -m 1 "versionName" || true); androidversion=$(adb -s $phoneid shell getprop ro.build.version.release || true); androidapiversion=$(adb -s $phoneid shell getprop ro.build.version.sdk || true); chimeradump=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider || true); homemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.home" || true); optionalhomemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.optional_home" || true); threadinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.threadnetwork" || true); enabledfeatures=$(echo "$chimeradump" | grep "Enabled features" | grep -i "home" | sort -u || true) - Сохраните все переменные в файле с названием
_versions.txt:Развернуть, чтобы показать команды для сохранения переменных в файл
Весь блок можно скопировать и вставить в терминал за один раз.
versionfile="_versions.txt" echo "Saving version info to $versionfile" echo "Container version: $containerinfo" > $versionfile echo "Home Module version: $homemoduleinfo" >> $versionfile echo "Optional Home Module version: $optionalhomemoduleinfo" >> $versionfile echo "Thread Module version: $threadinfo" >> $versionfile echo "GHA version: $ghainfo" >> $versionfile echo "Android version: $androidversion" >> $versionfile echo "Android API version: $androidapiversion" >> $versionfile echo "Found enabled features: $enabledfeatures" >> $versionfile
- Проверьте содержимое файла
_versions.txt:cat _versions.txtТеперь этот файл можно предоставить Google для устранения неполадок.Развернуть, чтобы посмотреть пример файла
Container version: versionName=26.26.34 (190400-945364269) Home Module version: com.google.android.gms.home [v262634001] Optional Home Module version: com.google.android.gms.optional_home [262634025] ... Thread Module version: com.google.android.gms.threadnetwork [v262634001] GHA version: versionName=4.22.28.0 Android version: 14 Android API version: 34 Found enabled features: Enabled features: appsearch_impl, brella_dynamite, dck_management...
Включить подробные флаги отладки
Прежде чем собирать журналы устройства Android или запускать отчет об ошибке, настройте размер буфера регистратора и включите подробные теги отладки для Google Home и компонентов GMS.
# Clear existing device logs and expand logger buffer size
adb -s $phoneid logcat -b all -c
adb -s $phoneid logcat -G 8M
# Enable displaying seconds on the screen
adb -s $phoneid shell settings put secure clock_seconds 1
# Enable GMS Service ID verbose flags
adb -s $phoneid shell setprop log.tag.gms_svc_id:168 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:304 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:305 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:319 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:336 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:360 VERBOSE
# Enable GHP and Matter log tags
adb -s $phoneid shell setprop log.tag.CameraCommissioningPlugin VERBOSE
adb -s $phoneid shell setprop log.tag.HomeSdk VERBOSE
adb -s $phoneid shell setprop log.tag.HomeClient VERBOSE
adb -s $phoneid shell setprop log.tag.InteractionApiChimeraService VERBOSE
adb -s $phoneid shell setprop log.tag.MatterCommissioner VERBOSE
adb -s $phoneid shell setprop log.tag.SampleApp VERBOSEКак собрать журналы Android с помощью скриптов
Чтобы получить журналы устройства Android в реальном времени во время сеанса отладки, выполните следующие действия:
- Следуйте инструкциям в разделе Как включить подробную отладку, чтобы очистить существующие журналы, увеличить размер буфера и установить теги подробного ведения журнала.
- Закройте все приложения, запущенные на мобильном устройстве.
- Перед началом тестирования очистите буфер журнала от лишних данных:
adb -s $phoneid logcat -c - Запустите процесс сбора журналов в окне терминала:
Не закрывайте окно терминала. Пока процесс выполняется, будут собираться журналы с вашего устройства.adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt - Запустите приложение и выполните все действия в пользовательском интерфейсе, необходимые для воспроизведения проблемы.
- Затем остановите процесс
logcatв терминале, нажав Ctrl + C (или Cmd + C на Mac). - Журналы этого сеанса сохранены в файле
android-logs_YYYYMMDDmmss.txt. Прикрепите оба файла (android-logs_YYYYMMDDmmss.txtи_versions.txt) к отчету об ошибке.
Как собрать журналы Android с помощью adb bugreport
Полный отчет об ошибке в Android содержит подробную диагностическую информацию о проблемах на уровне системы, аварийных дампах, а также отладке сети и Bluetooth на низком уровне. Чтобы создать такой отчет, выполните следующие действия:
- Ввод в эксплуатацию Matter BLE. Если вы хотите сообщить о проблеме с вводом в эксплуатацию Matter, связанной с BLE, перед воспроизведением проблемы включите журнал отслеживания Bluetooth HCI в разделе "Для разработчиков" (Настройки > Для разработчиков > Включить журнал отслеживания Bluetooth HCI).
- Подготовка к тестированию. Перед началом тестирования выполните действия, описанные в разделе Включение подробных флагов отладки, чтобы включить подробные свойства отладки на устройстве.
- Создайте отчет об ошибке. После выполнения теста и воспроизведения проблемы выполните следующую команду, чтобы создать полный архив отчетов об ошибках:
adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip - Расширенная информация для отладки. Сгенерированный файл
android-bugreport_YYYYMMDDmmss.zipсодержит подробные диагностические данные на уровне системы, включая полные дампы системы, статистику памяти, диагностику батареи и трассировку низкоуровневых подсистем.
Журналы устройства Cast Hub
Вы можете посмотреть журналы устройств для контроллера Google Nest, используя этот метод, который поддерживается для следующих моделей:
- Google Home
- Google Nest Audio
- Google Nest Hub
- Google Nest Mini
Чтобы включить Cast Hub для получения локальных журналов:
- Настройте 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 выдает исключения
При вызове функции List в Automation 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"))
Discovery API регистрирует предупреждение, когда свойство не зарегистрировано
Если Discovery API регистрирует предупреждение для Trait not found, это означает, что API пытается использовать типаж для кандидатов на обнаружение, но это не удастся, поскольку типаж не был зарегистрирован во время инициализации. Пример:
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 для опубликованного приложения, вы можете использовать его для тестирования Home API.
Для тестирования и использования Home API регистрироваться в Google Home Developer Console не нужно. Однако для публикации приложения вам все равно потребуется одобренная регистрация Developer Console, даже если у вас есть подтвержденный клиент OAuth из другой интеграции.
При этом необходимо учитывать следующее:
При использовании существующего клиента OAuth действует ограничение в 100 пользователей. Информацию о том, как добавить тестовых пользователей, можно найти в разделеНастройте окно запроса доступа OAuth. Независимо от проверки OAuth, Home API накладывает ограничение на количество пользователей, которые могут предоставлять разрешения вашему приложению. Их должно быть не более 100. Это ограничение будет снято после завершения регистрации в Developer Console.
Developer Console регистрации следует отправить на одобрение, когда вы будете готовы ограничить разрешения для типов устройств с помощью OAuth, чтобы подготовиться к обновлению приложения с помощью Home API.
Для Google Cloud приложений, которые ещё не прошли проверку OAuth, пользователи не смогут завершить процесс OAuth, пока проверка не будет завершена. Если вы попытаетесь это сделать, появится следующее сообщение об ошибке:
Access blocked: <Project Name> has not completed the Google verification process.