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

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

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

Собирайте логи Android

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

Установить 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 , Cloud Logging и другим инструментам для упрощения процесса разработки вашего 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 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 .

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

При вызове функции 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 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.