Rozwiązywanie problemów

Przykładowa aplikacja

Jeśli podczas korzystania z interfejsów API Home napotkasz jakiekolwiek problemy, możesz zebrać dzienniki na potrzeby dalszego debugowania. Aby zebrać logi z urządzenia mobilnego, musisz użyć mostu debugowania Androida (adb). Jeśli potrzebujesz pomocy Google, zbierz logi z urządzeń z Androidem i z huba, a następnie otwórz zgłoszenie w systemie śledzenia problemów, dołączając do niego odpowiednie informacje i powiązane z nimi logi.

Pobieranie dzienników Androida

Podczas wszystkich czynności związanych z adb urządzenie mobilne musi być połączone z lokalnym komputerem.

Instalowanie adb

Jeśli jeszcze tego nie zrobiono, skonfiguruj Android Debug Bridge na komputerze lokalnym:

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

Wtyczka Google Home do Android Studio

Google Home Plugin for Android Studio to przydatne narzędzie do zbierania i analizowania logów, które zostało stworzone specjalnie dla deweloperów Google Home platform. Ten wtyczek zapewnia dostęp do Google Assistant Simulator, Cloud Logging i innych narzędzi, które upraszczają proces smart home.

Użyj tego narzędzia w połączeniu z adb, aby dokładniej przeanalizować logi urządzenia Matter.

Więcej informacji o tym narzędziu znajdziesz w artykule Google Home Plugin for Android Studio.

Informacje o wersji

Zalecamy zbieranie wszystkich informacji o wersjach związanych z Twoim konfiguracją, gdy tylko zdecydujesz się na zbieranie dzienników. Jest to wymagane, jeśli chcesz zgłosić problemy Google.

  1. Aby poznać 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
  3. Zapisywanie różnych informacji o urządzeniu w zmiennych:
    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. 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.

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

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

    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):
    Ten plik możesz teraz przesłać do Google w razie potrzeby, aby rozwiązać problem.

Zbieranie logów

Aby zebrać dzienniki, zamknij wszystkie aplikacje działające na urządzeniu mobilnym. Następnie:

  1. Otwórz okno terminala i wyczyść istniejące dzienniki urządzenia:
    adb logcat -b all -c
  2. Rozpocznij proces zbierania logów:
    adb logcat >> _logs.txt
    Nie zamykaj tego terminala. W trakcie trwania tego procesu będą zbierane dzienniki z urządzenia.
  3. Uruchom przykładową aplikację i zapisz wszystkie działania w interfejsie. Gdy skończysz, zatrzymaj proces logcat działający w terminalu, naciskając Ctrl + C (lub Cmd + C na Macu).
  4. Dzienniki z tej sesji są zapisywane w pliku o nazwie _logs.txt.

Informacje z tego pliku możesz analizować na różne sposoby, m.in. wyszukiwać słowa kluczowe takie jak error, exception lub crash.

Skrypty logowania

Dla wygody użytkowników przykładowa aplikacja zawiera skrypty do pobierania odpowiednich dzienników i skompilowania ich w pliku tekstowym. Aby zapewnić jak najlepsze debugowanie, te dzienniki należy dołączać do zgłaszanych błędów, aby ułatwić Google analizę przyczyny źródłowej.

Te dzienniki znajdują się w katalogu scripts w drzewie źródłowym przykładowej aplikacji. Aby je wykonać, wykonaj te czynności w katalogu głównym projektu:

  1. Aby poznać identyfikator urządzenia mobilnego:
    adb devices -l
    List of devices attached
    device-id device
  2. Uruchom skrypt 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. Odtwórz problem.
  4. Aby zatrzymać skrypt, naciśnij CTRL+C.

Skrypt wygeneruje plik dziennika z dodatkiem sygnatury czasowej, który zawiera wszystkie istotne informacje. Dołącz je do wszystkich raportów o napotkanych błędach.

Dzienniki urządzeń w Centrum przesyłania

Aby wyświetlić logi urządzenia dotyczące Google Home, wykonaj te czynności:

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

    • Na ekranie koncentratora (jeśli jest on wyposażony w 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) otwórz Informacje o urządzeniu > Informacje techniczne > Adres IP.
    • Na telefonie w aplikacji GHA:
      1. Kliknij urządzenie, aby otworzyć stronę z informacjami o nim.
      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 w tej samej sieci Wi-Fi co urządzenie:

      adb connect ip-address
      adb logcat
    

  4. Aby udostępnić dzienniki innej osobie, wykonaj operację, która powoduje błąd, i przeprowadź dane wyjściowe do pliku tekstowego:

      adb logcat -d > platform-logs.txt
    

Automatyzacja

Wykrywanie krawędzi

Automatyzacje w ekosystemie Google Home korzystają z wykrywania krawędzi, czyli logiki, która zapewnia, że starter aktywuje się tylko wtedy, gdy nastąpi rzeczywista zmiana stanu, a nie aktualizacja stanu, która tylko powtarza poprzedni stan urządzenia.

Jeśli na przykład włączanie światła jest starterem, wykrywanie krawędzi sprawia, że starter aktywuje się tylko wtedy, gdy światło zmieni się z wyłączonego na włączone, a nie z włączonego na włączone (bez 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ź każde urządzenie, aby upewnić się, że działa prawidłowo niezależnie od automatyzacji.

  2. Sprawdź wykres automatyzacji i porównaj go z automatyzacją DSL, aby wykryć ewentualne błędne założenia.

  3. Obserwuj stan urządzenia w aplikacji Google Home podczas wykonywania automatyzacji.

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

Automatyzacja działa, gdy nie powinna

Jeśli automatyzacja działa, gdy nie powinna, sprawdź kryteria uruchamiania. Może być konieczne dodanie dodatkowej logiki, aby zapewnić, że zmiana stanu zostanie zarejestrowana tylko raz i wywoła automatyzację tylko raz.

automatyzacja nie kompiluje się,

Upewnij się, że aplikacja zawiera wszystkie niezbędne importy, w tym wszystkie klasy odpowiadające różnym typom węzłów, a także atrybuty, do których się odwołujesz.

Nie udało się zweryfikować automatyzacji

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

Funkcja list wyrzuca wyjątki

Podczas wywoływania funkcji Automation API List moduły obsługi odczytu mogą zgłaszać wyjątki z powodu braku funkcji interfejsu API. Aby temu zapobiec, usuń automatyzację, która powoduje problem.

Aby to zrobić:

  1. Upewnij się, że masz zainstalowaną aplikację adb. Zobacz Instalowanie adb.
  2. Aby pobrać identyfikator automatyzacji z logów Androida, wykonaj te czynności:

    adb logcat -s GhpNative

    Przykładowe dzienniki:

    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 trzeba usunąć wiele identyfikatorów automatyzacji, możesz użyć terminala, aby kontrolować dane wyjściowe:

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

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

Interfejs Discovery API rejestruje ostrzeżenie, gdy cecha nie jest zarejestrowana

Jeśli interfejs Discovery API zarejestruje ostrzeżenie dotyczące Trait not found, oznacza to, że próbuje on używać cechy dla kandydatów na Discovery, ale nie uda mu się to, ponieważ cecha nie została zarejestrowana podczas inicjalizacji. 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, który odpowiada RelativeHumidityControl. Aby określić nazwę cechy na podstawie identyfikatora, zapoznaj się z indeksem cech.

W tym przykładzie funkcja RelativeHumidityControl musi zostać zarejestrowana podczas inicjowania aplikacji. Aby dodać cechę do rejestru, zapoznaj się z artykułem Rejestrowanie cech.

OAuth

Jeśli masz już klienta OAuth

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

Aby testować interfejsy API Home i z nich korzystać, nie musisz rejestrować aplikacji Google Home Developer Console. Aby opublikować aplikację, musisz jednak mieć zatwierdzone konto Developer Console, nawet jeśli masz zweryfikowanego klienta OAuth z innej integracji.

Należy wziąć pod uwagę te kwestie:

  • Jeśli używasz istniejącego klienta OAuth, obowiązuje limit 100 użytkowników. Informacje o dodawaniu użytkowników testowych znajdziesz w artykule Konfigurowanie ekranu zgody OAuth. Niezależnie od weryfikacji OAuth, interfejsy API Google Home nakładają limit 100 użytkowników, którzy mogą przyznać uprawnienia Twojej aplikacji. Ograniczenie zostanie zniesione po zakończeniu rejestracji Developer Console.

  • Developer Console rejestracji należy przesłać do zatwierdzenia, gdy będziesz gotowy do ograniczenia uprawnień typu urządzenie za pomocą OAuth w ramach przygotowań do aktualizacji aplikacji za pomocą interfejsów Home API.

W przypadku aplikacji Google Cloud, które czekają na weryfikację OAuth, użytkownicy nie mogą dokończyć procesu OAuth, dopóki nie zostanie ona zakończona. Próby przyznania uprawnień nie powiedzie się i wyświetli się ten komunikat o błędzie:

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