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

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

Если при использовании API Home возникнут проблемы, вы можете собрать журналы для дальнейшей отладки. Для сбора журналов с мобильного устройства требуется 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

Чтобы поделиться подробной диагностической информацией о проблемах на уровне системы, дампом памяти или отладкой сети и Bluetooth на низком уровне, создайте полный отчет об ошибке Android:

  • Настройка Matter через Bluetooth Low Energy. Если вы сообщаете о проблеме с настройкой 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 Hub, используя этот метод, который поддерживается следующими моделями:

  • Google Home
  • Google Nest Audio
  • Google Nest Hub
  • Google Nest Mini

Чтобы включить центр Cast для получения локальных журналов:

  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 вызывает исключения

При вызове функции Automation API List обработчики чтения могут вызывать исключения из-за отсутствия функций 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 регистрирует предупреждение

Если 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, API Home устанавливают ограничение в 100 пользователей, которые могут предоставить разрешения вашему приложению. Ограничение снимается после завершения регистрации Developer Console.

  • Developer Console registration следует отправить на проверку, когда вы будете готовы ограничить предоставление разрешений по типу устройства через OAuth в рамках подготовки к обновлению приложения с помощью Home API.

Для приложений Google Cloud, которые ещё не прошли проверку OAuth, пользователи не смогут завершить процесс OAuth, пока проверка не будет завершена. При попытке предоставить разрешения появится следующая ошибка:

Access blocked: <Project Name> has not completed the Google verification process.