Устранение неполадок

Пример приложения

Если при использовании Home API у вас возникнут проблемы, вы можете собрать журналы для дальнейшей отладки. Для сбора журналов с мобильного устройства требуется Android Debug Bridge (adb). Если вам нужна помощь от Google, соберите журналы с устройств Android и концентратора и создайте запрос в системе отслеживания ошибок, указав нужную информацию и прикрепив журналы.

Как собрать журналы Android

Для выполнения всех действий, связанных с adb, мобильное устройство должно быть подключено к локальному компьютеру.

Установите ADB

Если вы ещё не настроили Android Debug Bridge на локальном компьютере, сделайте следующее:

  1. Установите на компьютер инструмент adb.
  2. Включите режим «Для разработчиков» и отладку по USB на телефоне Android.

Как получить идентификатор мобильного устройства

  1. Как узнать идентификатор мобильного устройства:
    adb devices
    List of devices attached
    device-id    device
  2. Сохранить это значение в переменной phoneid:
    phoneid=device-id

Информация о версии.

Рекомендуем собирать всю информацию о версиях, связанную с вашей настройкой, каждый раз, когда вы решаете собирать журналы. Это необходимо, если вы хотите сообщить о проблемах в Google.

  1. Сохраните в переменных различные сведения об устройстве:
    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)
  2. Сохраните все переменные в файле с названием _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
  3. Проверьте содержимое файла _versions.txt:
    cat _versions.txt

    Развернуть, чтобы посмотреть пример файла

    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...
    Теперь этот файл можно предоставить Google для устранения неполадок.

Включить подробные флаги отладки

Прежде чем собирать журналы устройства 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 в реальном времени во время сеанса отладки, выполните следующие действия:

  1. Следуйте инструкциям в разделе Как включить подробную отладку, чтобы очистить существующие журналы, увеличить размер буфера и установить теги подробного ведения журнала.
  2. Закройте все приложения, запущенные на мобильном устройстве.
  3. Перед началом тестирования очистите буфер журнала от лишних данных:
    adb -s $phoneid logcat -c
  4. Запустите процесс сбора журналов в окне терминала:
    adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt
    Не закрывайте окно терминала. Пока процесс выполняется, будут собираться журналы с вашего устройства.
  5. Запустите приложение и выполните все действия в пользовательском интерфейсе, необходимые для воспроизведения проблемы.
  6. Затем остановите процесс logcat в терминале, нажав Ctrl + C (или Cmd + C на Mac).
  7. Журналы этого сеанса сохранены в файле 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 для получения локальных журналов:

  1. Настройте Android Debug Bridge.
  2. Узнайте IP-адрес контроллера:

    • На экране хаба:
      1. Проведите по экрану сверху вниз.
      2. Нажмите на значок настроек .
      3. Найдите IP-адрес устройства. На Nest Hub (2nd gen) выберите Информация об устройстве > Техническая информация > IP-адрес.
    • В приложении "GHA" на телефоне:
      1. Нажмите на устройство, чтобы открыть страницу сведений о нем.
      2. Нажмите на значок настроек , чтобы открыть страницу настроек.
      3. Найдите IP-адрес устройства. Для этого выберите Информация об устройстве > Техническая информация > IP-адрес.
  3. На компьютере, подключенном к той же сети Wi-Fi, что и устройство:

      adb connect ip-address
      adb logcat
    

  4. Чтобы предоставить журналы, выполните операцию, которая завершается сбоем, и перенаправьте выходные данные в текстовый файл:

      adb logcat -d > platform-logs.txt
    

Автоматизации

Обнаружение краев

В автоматизациях экосистемы Google Home используется обнаружение изменений. Это логика, которая проверяет, что условие активируется только при фактическом изменении состояния, а не при обновлении состояния, которое просто повторяет предыдущее состояние устройства.

Например, если условием запуска является включение света, то детектор фронта сигнала проверяет, что условие запуска активируется только в том случае, если свет переходит из выключенного состояния во включенное, а не из включенного во включенное (без изменений).

Автоматизация работает не так, как ожидалось

Если вы учли обнаружение границ, но автоматизация все равно работает не так, как ожидалось:

  1. Проверьте, правильно ли работает каждое устройство независимо от автоматизации.

  2. Посмотрите на график автоматизации и сравните его с DSL-скриптом. Это поможет выявить возможные ошибки.

  3. Проверьте состояние устройства в приложении Google Home во время выполнения автоматизации.

  4. Убедитесь, что все устройства, указанные в автоматизации, находятся в нужной структуре. Удаление устройства, от которого зависит автоматизация, может привести к непредвиденным последствиям. Подробнее о том, как удаление устройства влияет на автоматизации…

Автоматизация запускается, когда не должна

Если автоматизация запускается, когда не должна, проверьте условия запуска. Возможно, потребуется добавить дополнительную логику, чтобы изменение состояния фиксировалось только один раз и запускало автоматизацию только один раз.

Не удается скомпилировать автоматизацию

Убедитесь, что в приложении есть все необходимые импорты, включая каждый класс, соответствующий разным типам узлов, а также свойства, на которые вы ссылаетесь.

Ошибка проверки при создании автоматизации

Если автоматизация не проходит проверку, вы увидите предупреждение или сообщение об ошибке. Дополнительную информацию можно найти в справочнике по ValidationIssueType.

Функция List выдает исключения

При вызове функции List в Automation API обработчики чтения могут выдавать исключения из-за отсутствия функций API. Чтобы устранить проблему, удалите затронутую автоматизацию.

Вот как это сделать:

  1. Убедитесь, что у вас установлено приложение adb. Подробнее о том, как установить adb…
  2. Получите идентификатор автоматизации из журналов 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
  3. Удалите автоматизацию, используя ее идентификатор:

    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.