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:
- Zainstaluj „adb” na komputerze.
- Włącz Opcje programisty i debugowanie USB na telefonie Android.
Uzyskiwanie identyfikatora urządzenia mobilnego
- Uzyskaj identyfikator urządzenia mobilnego:
adb devicesList of devices attached device-id device
- 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.
- 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) - 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
- Sprawdź zawartość pliku
_versions.txt:cat _versions.txtTen plik można teraz przekazać Google w celu rozwiązania problemu.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...
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 VERBOSEZbieranie logów Androida za pomocą skryptów
Aby przechwytywać dzienniki urządzenia z Androidem w czasie rzeczywistym podczas sesji debugowania:
- 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.
- Zamknij wszystkie aplikacje działające na urządzeniu mobilnym.
- Przed rozpoczęciem testu wyczyść istniejący szum bufora logów:
adb -s $phoneid logcat -c - Rozpocznij proces zbierania dzienników w oknie terminala:
Nie zamykaj tego okna terminala. Dzienniki z urządzenia będą rejestrowane przez cały czas trwania procesu.adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt - Uruchom aplikację i wykonaj wszystkie działania w interfejsie, które są potrzebne do odtworzenia problemu.
- Gdy skończysz, zatrzymaj proces
logcatw terminalu, naciskając Ctrl+C (lub Cmd+C na Macu). - Logi z tej sesji są zapisywane w:
android-logs_YYYYMMDDmmss.txt. Dołącz plikiandroid-logs_YYYYMMDDmmss.txti_versions.txtdo 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.zipzawiera 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:
- Skonfiguruj Android Debug Bridge.
Uzyskaj adres IP koncentratora:
- Na urządzeniu centralnym, jeśli ma ekran:
- Przesuń palcem z góry ekranu w dół
- Kliknij ikonę ustawień .
- 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:
- Kliknij urządzenie, aby wyświetlić stronę z informacjami na jego temat.
- Kliknij ikonę Ustawienia , aby otworzyć stronę ustawień.
- Znajdź adres IP urządzenia: kliknij Informacje o urządzeniu > Informacje techniczne > Adres IP.
- Na urządzeniu centralnym, jeśli ma ekran:
Na komputerze połączonym z tą samą siecią Wi-Fi co urządzenie:
adb connect ip-addressadb logcatAby 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:
Sprawdź, czy każde urządzenie działa prawidłowo niezależnie od automatyzacji.
Sprawdź wykres automatyzacji i porównaj go z językiem DSL automatyzacji, aby wykryć potencjalne nieprawidłowe założenia.
Podczas wykonywania automatyzacji obserwuj stan urządzenia w aplikacji Google Home.
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ć:
- Sprawdź, czy aplikacja
adbjest zainstalowana. Zobacz Instalowanie adb. Pobierz identyfikator automatyzacji z logów Androida, wywołując:
adb logcat -s GhpNativePrzykł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 | lessUsuń 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.