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

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

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

Сбор журналов Android

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

Установить адб

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

  1. Установите «adb» на свой компьютер .
  2. Включите «Параметры разработчика» и «Отладку по 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.

  1. Получите идентификатор вашего мобильного устройства:
    adb devices
    List of devices attached
    device-id    device
  2. Сохраните это значение в переменной с именем phoneid :
    phoneid=device-id
  3. Сохраняйте различную информацию об устройстве в переменных:
    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)
  4. Сохраните все переменные в файле с именем _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
  5. Проверьте содержимое _versions.txt :
    cat _versions.txt

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

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

Сбор журналов

Чтобы собрать журналы, закройте все приложения, работающие на мобильном устройстве. Затем:

  1. Откройте окно терминала и очистите существующие журналы устройства:
    adb logcat -b all -c
  2. Запустите процесс сбора журналов:
    adb logcat >> _logs.txt
    Оставьте этот терминал открытым. Это будет собирать журналы с вашего устройства, пока процесс запущен.
  3. Запустите пример приложения и запишите все действия пользовательского интерфейса. Когда вы закончите, остановите процесс logcat , запущенный на терминале, нажав Ctrl+C (или Cmd+C на Mac).
  4. Журналы этого сеанса сохраняются в файле с именем _logs.txt .

Вы можете проанализировать информацию об этом файле различными способами, включая поиск по таким ключевым словам, как error , exception или crash .

Скрипты журнала

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

Эти журналы расположены в каталоге scripts в дереве исходного кода примера приложения. Чтобы выполнить их, выполните следующие действия из корневого каталога проекта:

  1. Получите идентификатор вашего мобильного устройства:
    adb devices -l
    List of devices attached
    device-id device
  2. Запустите скрипт 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)
  3. Воспроизведите проблему.
  4. Нажмите CTRL+C чтобы остановить скрипт.

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

Журналы устройств Cast Hub

Вы можете просмотреть журналы устройств для своего концентратора Google, выполнив следующие действия:

  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 .

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

При вызове функции списка 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 регистрирует предупреждение, когда признак не зарегистрирован.

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

Регистрация Google Home Developer Console не требуется для тестирования и использования Home API. Однако для публикации приложения вам все равно потребуется одобренная регистрация 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.