Rozwiązywanie problemów

Przykładowa aplikacja

Jeśli podczas korzystania z interfejsów Home API napotkasz problemy, możesz zebrać dzienniki, aby ułatwić debugowanie. Zbieranie logów z urządzenia mobilnego wymaga narzędzia Android Debug Bridge (adb). Jeśli potrzebujesz pomocy od Google, zbierz logi zarówno z urządzeń z Androidem, jak i z huba, a następnie otwórz zgłoszenie w narzędziu Issue Tracker, podając odpowiednie informacje i dołączając powiązane logi.

Zbieranie logów Androida

W przypadku wszystkich kroków związanych z adb urządzenie mobilne musi być połączone z komputerem lokalnym.

Instalowanie adb

Jeśli nie masz jeszcze skonfigurowanego Android Debug Bridge na komputerze lokalnym:

  1. Zainstaluj „adb” na komputerze.
  2. Włącz Opcje programisty i debugowanie USB na telefonie Android.

Uzyskiwanie identyfikatora urządzenia mobilnego

  1. Uzyskaj identyfikator urządzenia mobilnego:
    adb devices
    List of devices attached
    device-id    device
  2. Zapisz tę wartość w zmiennej o nazwie phoneid:
    phoneid=device-id

Informacje o wersji

Zalecamy zebranie wszystkich informacji o wersji związanych z konfiguracją, gdy zdecydujesz się na zbieranie logów. Jest to wymagane, jeśli chcesz udostępniać problemy Google.

  1. Zapisywanie różnych informacji o urządzeniu w zmiennych:
    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. Zapisz wszystkie zmienne w pliku o nazwie _versions.txt:

    Rozwiń, aby wyświetlić polecenia zapisywania zmiennych w pliku

    Cały blok można skopiować i wkleić do terminala jednocześnie.

    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. Sprawdź zawartość pliku _versions.txt:
    cat _versions.txt

    Rozwiń, aby wyświetlić przykładowe dane wyjściowe pliku

    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...
    Ten plik można teraz przekazać Google w celu rozwiązania problemu.

Włączanie flag szczegółowego debugowania

Przed zebraniem dzienników urządzenia z Androidem lub wygenerowaniem raportu o błędach skonfiguruj rozmiar bufora rejestratora i włącz szczegółowe tagi debugowania dla komponentów Google Home i 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

Zbieranie logów Androida za pomocą skryptów

Aby przechwytywać dzienniki urządzenia z Androidem w czasie rzeczywistym podczas sesji debugowania:

  1. Postępuj zgodnie z instrukcjami podanymi w sekcji Włączanie flag szczegółowego debugowania, aby wyczyścić istniejące logi, zwiększyć rozmiar bufora i ustawić tagi szczegółowego rejestrowania.
  2. Zamknij wszystkie aplikacje działające na urządzeniu mobilnym.
  3. Przed rozpoczęciem testu wyczyść istniejący szum bufora logów:
    adb -s $phoneid logcat -c
  4. Rozpocznij proces zbierania dzienników w oknie terminala:
    adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt
    Nie zamykaj tego okna terminala. Dzienniki z urządzenia będą rejestrowane przez cały czas trwania procesu.
  5. Uruchom aplikację i wykonaj wszystkie działania w interfejsie, które są potrzebne do odtworzenia problemu.
  6. Gdy skończysz, zatrzymaj proces logcat w terminalu, naciskając Ctrl+C (lub Cmd+C na Macu).
  7. Logi z tej sesji są zapisywane w: android-logs_YYYYMMDDmmss.txt. Dołącz pliki android-logs_YYYYMMDDmmss.txt i _versions.txt do raportów o błędach.

Zbieranie logów Androida za pomocą adb bugreport

Jeśli chcesz udostępnić szczegółowe informacje diagnostyczne dotyczące problemów na poziomie systemu, zrzutów awaryjnych lub debugowania sieci i Bluetootha na niskim poziomie, utwórz pełny raport o błędach na Androidzie:

  • Uruchamianie Matter BLE: gdy zgłaszasz problem z uruchamianiem Matter dotyczący BLE, przed odtworzeniem problemu włącz dziennik snoop Bluetooth HCI w Opcjach programisty (Ustawienia > Opcje programisty > Włącz dziennik snoop Bluetooth HCI).
  • Konfiguracja przed testem: przed przeprowadzeniem testu wykonaj czynności opisane w sekcji Włączanie flag szczegółowego debugowania, aby włączyć na urządzeniu właściwości szczegółowego debugowania.
  • Przechwytywanie raportu o błędzie: po przeprowadzeniu testu i odtworzeniu problemu uruchom to polecenie, aby wygenerować pełne archiwum raportu o błędzie:
    adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip
  • Zaawansowane informacje na potrzeby debugowania: wygenerowany plik android-bugreport_YYYYMMDDmmss.zip zawiera kompleksowe dane diagnostyczne na poziomie systemu, w tym pełne zrzuty systemu, statystyki pamięci, diagnostykę baterii i ślady podsystemu niskiego poziomu, co zapewnia bardziej zaawansowane informacje na potrzeby debugowania.

Dzienniki urządzenia z centrum przesyłania

Za pomocą tej metody możesz wyświetlać dzienniki urządzenia Google Nest Hub. Jest ona obsługiwana w przypadku tych modeli:

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

Aby włączyć centrum Cast do pobierania lokalnych logów:

  1. Skonfiguruj Android Debug Bridge.
  2. Uzyskaj adres IP koncentratora:

    • Na urządzeniu centralnym, jeśli ma ekran:
      1. Przesuń palcem z góry ekranu w dół
      2. Kliknij ikonę ustawień .
      3. Znajdź adres IP urządzenia: na urządzeniu Nest Hub (2nd gen) kliknij Informacje o urządzeniu > Informacje techniczne > Adres IP.
    • W aplikacji GHA na telefonie:
      1. Kliknij urządzenie, aby wyświetlić stronę z informacjami na jego temat.
      2. Kliknij ikonę Ustawienia , aby otworzyć stronę ustawień.
      3. Znajdź adres IP urządzenia: kliknij Informacje o urządzeniu > Informacje techniczne > Adres IP.
  3. Na komputerze połączonym z tą samą siecią Wi-Fi co urządzenie:

      adb connect ip-address
      adb logcat
    

  4. Aby udostępnić komuś logi, wykonaj operację, która się nie powiodła, i przekieruj dane wyjściowe do pliku tekstowego:

      adb logcat -d > platform-logs.txt
    

Automatyzacja

Wykrywanie krawędzi

Automatyzacje w ekosystemie Google Home obejmują wykrywanie krawędzi, czyli logikę, która sprawdza, czy starter aktywuje się tylko wtedy, gdy następuje rzeczywista zmiana stanu, a nie aktualizacja stanu, która jedynie powtarza poprzedni stan urządzenia.

Jeśli na przykład elementem inicjującym jest włączenie światła, wykrywanie krawędzi sprawdza, czy element inicjujący aktywuje się tylko wtedy, gdy urządzenie oświetleniowe przechodzi ze stanu wyłączenia do stanu włączenia, a nie ze stanu włączenia do stanu włączenia (brak zmiany).

Automatyzacja nie działa zgodnie z oczekiwaniami

Jeśli po uwzględnieniu wykrywania krawędzi automatyzacja nie działa zgodnie z oczekiwaniami:

  1. Sprawdź, czy każde urządzenie działa prawidłowo niezależnie od automatyzacji.

  2. Sprawdź wykres automatyzacji i porównaj go z językiem DSL automatyzacji, aby wykryć potencjalne nieprawidłowe założenia.

  3. Podczas wykonywania automatyzacji obserwuj stan urządzenia w aplikacji Google Home.

  4. Sprawdź, czy wszystkie urządzenia, do których odwołuje się automatyzacja, znajdują się w oczekiwanej strukturze. Usunięcie urządzenia, od którego zależy automatyzacja, może mieć niezamierzone konsekwencje. Zobacz Wpływ usunięcia urządzenia na automatyzacje.

Automatyzacja uruchamia się, gdy nie powinna

Jeśli automatyzacja uruchamia się, gdy nie powinna, sprawdź kryteria zdarzenia inicjującego. Może być konieczne dodanie dodatkowej logiki, aby zmiana stanu była rejestrowana tylko raz i tylko raz uruchamiała automatyzację.

Automatyzacja nie kompiluje się

Upewnij się, że aplikacja zawiera wszystkie niezbędne importy, w tym każdą klasę odpowiadającą różnym typom węzłów oraz cechy, do których się odwołujesz.

Tworzenie automatyzacji nie przechodzi weryfikacji

Jeśli utworzenie automatyzacji nie przejdzie weryfikacji, pojawi się komunikat z ostrzeżeniem lub komunikat o błędzie zawierający informacje o problemie. Więcej informacji znajdziesz w dokumentacji ValidationIssueType.

Funkcja List zgłasza wyjątki

Podczas wywoływania funkcji List interfejsu Automation API moduły obsługi odczytu mogą zgłaszać wyjątki z powodu braku funkcji interfejsu API. Aby rozwiązać ten problem, usuń tę automatyzację.

Aby to zrobić:

  1. Sprawdź, czy aplikacja adb jest zainstalowana. Zobacz Instalowanie adb.
  2. Pobierz identyfikator automatyzacji z logów Androida, wywołując:

    adb logcat -s GhpNative

    Przykładowe logi:

    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"
    ...

    Jeśli chcesz usunąć wiele identyfikatorów automatyzacji, możesz użyć pagera terminala, aby kontrolować dane wyjściowe:

    adb logcat -s GhpNative level:debug | less
  3. Usuń automatyzację, używając jej identyfikatora:

    structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
    

Discovery API rejestruje ostrzeżenie, gdy cecha zostanie wyrejestrowana

Jeśli interfejs Discovery API rejestruje ostrzeżenie dotyczące cechy Trait not found, oznacza to, że próbuje użyć tej cechy w przypadku kandydatów do wykrywania, ale nie uda się to, ponieważ cecha nie została zarejestrowana podczas inicjowania. Na przykład:

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

Identyfikator cechy to home.matter.6006.clusters.fc43, co odpowiada RelativeHumidityControl. Aby określić nazwę cechy na podstawie identyfikatora, zapoznaj się z indeksem cech.

W tym przykładzie RelativeHumidityControl musi zostać zarejestrowany podczas inicjowania aplikacji. Aby dodać cechę do rejestru, zapoznaj się z sekcją Rejestrowanie cech.

OAuth

Jeśli masz już klienta OAuth

Jeśli masz już zweryfikowanego klienta OAuth dla opublikowanej aplikacji, możesz go użyć do przetestowania interfejsów Home API.

Rejestracja w Google Home Developer Console nie jest wymagana do testowania i używania interfejsów Home API. Nadal jednak musisz mieć zatwierdzoną rejestrację Developer Console, aby opublikować aplikację, nawet jeśli masz zweryfikowanego klienta OAuth z innej integracji.

Pamiętaj o tych kwestiach:

  • W przypadku korzystania z dotychczasowego klienta OAuth obowiązuje limit 100 użytkowników. Informacje o dodawaniu użytkowników testowych znajdziesz w sekcjiSkonfiguruj ekran zgody OAuth. Niezależnie od weryfikacji OAuth interfejsy Home API nakładają limit 100 użytkowników, którzy mogą przyznać uprawnienia Twojej aplikacji. To ograniczenie zostanie zniesione po zakończeniu rejestracji w Developer Console.

  • Developer Console registration should be sent for approval when you are ready to restrict device-type grants through OAuth in preparation for updating your app with the Home APIs.

W przypadku aplikacji Google Cloud, które nadal oczekują na weryfikację OAuth, użytkownicy nie mogą ukończyć procesu OAuth, dopóki weryfikacja nie zostanie zakończona. Próby przyznania uprawnień zakończą się niepowodzeniem i wyświetli się ten błąd:

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