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:
- Zainstaluj „adb” na komputerze.
- 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.
- Aby poznać identyfikator urządzenia mobilnego:
adb devices
List of devices attached device-id device
- Zapisz tę wartość w zmiennej o nazwie
phoneid
:phoneid=device-id
- 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)
- 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
- Sprawdź zawartość
_versions.txt
:cat _versions.txt
Ten plik możesz teraz przesłać do Google w razie potrzeby, aby rozwiązać problem.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):
Zbieranie logów
Aby zebrać dzienniki, zamknij wszystkie aplikacje działające na urządzeniu mobilnym. Następnie:
- Otwórz okno terminala i wyczyść istniejące dzienniki urządzenia:
adb logcat -b all -c
- Rozpocznij proces zbierania logów:
Nie zamykaj tego terminala. W trakcie trwania tego procesu będą zbierane dzienniki z urządzenia.adb logcat >> _logs.txt
- 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). - 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:
- Aby poznać identyfikator urządzenia mobilnego:
adb devices -l
List of devices attached device-id device
- 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)
- Odtwórz problem.
- 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:
- Skonfiguruj Android Debug Bridge.
Uzyskaj adres IP koncentratora:
- Na ekranie koncentratora (jeśli jest on wyposażony w ekran):
- Przesuń palcem z góry ekranu w dół
- Kliknij ikonę ustawień .
- 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:
- Kliknij urządzenie, aby otworzyć stronę z informacjami o nim.
- Kliknij ikonę Ustawienia , aby otworzyć stronę ustawień.
- Znajdź adres IP urządzenia: kliknij Informacje o urządzeniu > Informacje techniczne > Adres IP.
- Na ekranie koncentratora (jeśli jest on wyposażony w ekran):
Na komputerze w tej samej sieci Wi-Fi co urządzenie:
adb connect ip-address
adb logcat
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:
Sprawdź każde urządzenie, aby upewnić się, że działa prawidłowo niezależnie od automatyzacji.
Sprawdź wykres automatyzacji i porównaj go z automatyzacją DSL, aby wykryć ewentualne błędne założenia.
Obserwuj stan urządzenia w aplikacji Google Home podczas wykonywania automatyzacji.
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ć:
- Upewnij się, że masz zainstalowaną aplikację
adb
. Zobacz Instalowanie adb. 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
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.