Beispiel-App
Wenn bei der Verwendung der Home APIs Probleme auftreten, können Sie Protokolle zur weiteren Fehlerbehebung erfassen. Zum Erfassen von Protokollen auf dem Mobilgerät ist die Android Debug Bridge (adb
) erforderlich. Wenn Sie Hilfe von Google benötigen, erfassen Sie die Protokolle sowohl auf den Android-Geräten als auch auf dem Hub und erstellen Sie ein Ticket im Issue Tracker mit den relevanten Informationen und den zugehörigen Protokollen.
Android-Protokolle erfassen
Ihr Mobilgerät muss für alle Schritte, die adb
betreffen, mit Ihrem lokalen Computer verbunden sein.
adb installieren
Richten Sie die Android Debug Bridge auf Ihrem lokalen Computer ein, falls noch nicht geschehen:
- Installieren Sie „adb“ auf Ihrem Computer.
- Aktivieren Sie die Entwickleroptionen und das USB-Debugging auf Ihrem Android.
Google Home-Plug-in für Android Studio
Der Google Home Plugin for Android Studio ist ein hilfreiches Tool zum Erfassen und Analysieren von Protokollen und wurde speziell für Google Home platform-Entwickler entwickelt. Dieses Plug-in bietet Zugriff auf Google Assistant Simulator, Cloud Logging und andere Tools, die den smart home-Entwicklungsprozess vereinfachen.
Verwenden Sie dieses Tool in Verbindung mit adb
, um Matter-Geräteprotokolle weiter zu analysieren.
Weitere Informationen und die Möglichkeit zum Herunterladen des Tools finden Sie unter Google Home Plugin for Android Studio.
Versionsinformationen
Wir empfehlen, alle Versionsinformationen zu Ihrer Konfiguration zu erfassen, wenn Sie Logs erfassen möchten. Dies ist erforderlich, wenn Sie Probleme mit Google teilen möchten.
- So rufen Sie die ID Ihres Mobilgeräts ab:
adb devices
List of devices attached device-id device
- Speichern Sie diesen Wert in einer Variablen namens
phoneid
:phoneid=device-id
- Verschiedene Geräteinformationen in Variablen speichern:
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)
- Speichern Sie alle Variablen in einer Datei mit dem Namen
_versions.txt
:Maximieren, um Befehle zum Speichern von Variablen in einer Datei anzuzeigen
Der gesamte Block kann kopiert und in ein Terminal eingefügt werden.
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
- Prüfen Sie den Inhalt von
_versions.txt
:cat _versions.txt
Diese Datei kann jetzt bei Bedarf zur Fehlerbehebung an Google gesendet werden.Maximieren, um die Beispieldateiausgabe anzusehen
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):
Logs erfassen
Schließen Sie alle Apps, die auf dem Mobilgerät ausgeführt werden, um Protokolle zu erfassen. Dann:
- Öffnen Sie ein Terminalfenster und löschen Sie die vorhandenen Geräteprotokolle:
adb logcat -b all -c
- So starten Sie die Protokollerhebung:
Lassen Sie dieses Terminal geöffnet. Solange der Prozess läuft, werden Protokolle von Ihrem Gerät erfasst.adb logcat >> _logs.txt
- Führen Sie die Beispiel-App aus und erfassen Sie alle Aktionen der Benutzeroberfläche. Wenn Sie fertig sind, beenden Sie den im Terminal laufenden
logcat
-Prozess, indem Sie Strg + C (oder Befehlstaste + C auf einem Mac) drücken. - Die Protokolle aus dieser Sitzung werden in einer Datei mit dem Namen
_logs.txt
gespeichert.
Sie können die Informationen in dieser Datei auf verschiedene Arten analysieren, z. B. nach Keywords wie error
, exception
oder crash
suchen.
Protokollscripts
Für Ihre Bequemlichkeit enthält die Beispielanwendung Scripts, mit denen die relevanten Protokolle abgerufen und in einer Textdatei kompiliert werden. Für eine optimale Fehlerbehebung sollten diese Protokolle an alle gemeldeten Fehler angehängt werden, um die Ursachenanalyse durch Google zu erleichtern.
Diese Protokolle befinden sich im Verzeichnis scripts
im Quellbaum der Beispiel-App.
Führen Sie dazu die folgenden Schritte im Stammverzeichnis des Projekts aus:
- So rufen Sie die ID Ihres Mobilgeräts ab:
adb devices -l
List of devices attached device-id device
- Führen Sie das Skript
get_logs.sh
aus:./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)
- Reproduzieren Sie das Problem.
- Drücken Sie
CTRL+C
, um das Script zu beenden.
Das Script generiert eine Protokolldatei mit Zeitstempel, die alle relevanten Informationen enthält. Hängen Sie diese an alle Berichte zu Fehlern an, die Sie finden.
Geräteprotokolle des Chromecast-Hubs
So rufen Sie Geräteprotokolle für Ihren Google-Hub auf:
- Richte die Android Debug Bridge ein.
Rufen Sie die IP-Adresse Ihres Hubs ab:
- Auf dem Hub, sofern er einen Bildschirm hat:
- Wischen Sie vom oberen Displayrand nach unten.
- Tippe auf das Symbol „Einstellungen“ .
- IP-Adresse des Geräts ermitteln: Gehen Sie auf einem Nest Hub (2nd gen) zu Geräteinformationen > Technische Daten > IP-Adresse.
- Über GHA auf deinem Smartphone:
- Tippen Sie auf das Gerät, um die Detailseite aufzurufen.
- Tippe auf das Symbol für die Einstellungen , um die Seite „Einstellungen“ aufzurufen.
- IP-Adresse des Geräts finden: Gehen Sie zu Geräteinformationen > Technische Informationen > IP-Adresse.
- Auf dem Hub, sofern er einen Bildschirm hat:
Auf einem Computer, der sich im selben WLAN wie das Gerät befindet:
adb connect ip-address
adb logcat
Wenn Sie jemandem Logs zur Verfügung stellen möchten, führen Sie den fehlgeschlagenen Vorgang aus und leiten Sie die Ausgabe an eine Textdatei weiter:
adb logcat -d > platform-logs.txt
Automatisierungen
Kantenerkennung
Automatisierungen im Google Home-System bieten die Kantenerkennung. Dabei wird sichergestellt, dass ein Auslöser nur bei einer tatsächlichen Statusänderung aktiviert wird, im Gegensatz zu einem Statusupdate, bei dem lediglich der vorherige Status des Geräts wiederholt wird.
Wenn das Einschalten einer Lampe beispielsweise ein Auslöser ist, sorgt die Begrenzungserkennung dafür, dass der Auslöser nur aktiviert wird, wenn das Lampengerät von „Aus“ auf „An“ wechselt, nicht aber von „An“ auf „An“ (keine Änderung).
Automatisierung verhält sich nicht wie erwartet
Wenn sich eine Automatisierung nach der Berücksichtigung der Kantenerkennung nicht wie erwartet verhält, gehen Sie so vor:
Prüfen Sie jedes Gerät, um sicherzustellen, dass es unabhängig von Ihrer Automatisierung ordnungsgemäß funktioniert.
Sehen Sie sich das Automatisierungsdiagramm für Ihre Automatisierung an und vergleichen Sie es mit Ihrer Automatisierungs-DSL, um eventuelle falsche Annahmen aufzudecken.
Beobachten Sie den Gerätestatus in der Google Home App während der Ausführung Ihrer Automatisierung.
Prüfen Sie, ob sich alle Geräte, auf die in der Automatisierung verwiesen wird, an der erwarteten Stelle im Gebäude befinden. Das Löschen eines Geräts, von dem eine Automatisierung abhängt, kann unbeabsichtigte Folgen haben. Weitere Informationen finden Sie unter Auswirkungen des Löschens von Geräten auf Automatisierungen.
Automatisierung wird ausgeführt, obwohl das nicht der Fall sein sollte
Wenn Ihre Automatisierung ausgeführt wird, obwohl das nicht der Fall sein sollte, prüfen Sie die Auslöserkriterien. Möglicherweise müssen Sie zusätzliche Logik hinzufügen, damit eine Statusänderung nur einmal erfasst und die Automatisierung nur einmal ausgelöst wird.
Automatisierung wird nicht kompiliert
Achten Sie darauf, dass Ihre App alle erforderlichen Importe enthält, einschließlich aller Klassen, die den verschiedenen Knotentypen entsprechen, sowie der Merkmale, auf die Sie verweisen.
Fehler bei der Validierung bei der Erstellung einer Automatisierung
Wenn die Erstellung der Automatisierung die Validierung nicht besteht, erhalten Sie eine Warn- oder Fehlermeldung mit Informationen zum Problem. Weitere Informationen finden Sie in der Referenz zu ValidationIssueType
.
Die Listenfunktion wirft Ausnahmen
Beim Aufrufen der Listefunktion der Automation API können Lese-Handler aufgrund fehlender API-Funktionen Ausnahmen auslösen. Löschen Sie die betroffene Automatisierung, um dieses Problem zu beheben.
Das geht so:
- Prüfen Sie, ob
adb
installiert ist. Weitere Informationen finden Sie unter adb installieren. Rufen Sie die ID der Automatisierung aus den Android-Protokollen ab:
adb logcat -s GhpNative
Beispiellogs:
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" ...
Wenn mehrere Automatisierungs-IDs gelöscht werden müssen, können Sie die Ausgabe mit dem Terminal-Pager steuern:
adb logcat -s GhpNative level:debug | less
Löschen Sie die Automatisierung anhand der ID:
structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
Die Discovery API protokolliert eine Warnung, wenn ein Merkmal nicht registriert ist
Wenn die Discovery API eine Warnung für Trait not found
protokolliert, bedeutet das, dass die API versucht, das Merkmal für Discovery-Kandidaten zu verwenden, dies aber nicht gelingt, weil das Merkmal bei der Initialisierung nicht registriert wurde. Beispiel:
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
Die Merkmals-ID ist home.matter.6006.clusters.fc43
, was RelativeHumidityControl
entspricht. Informationen zum Ermitteln des Merkmalnamens anhand einer ID finden Sie im Merkmalindex.
In diesem Beispiel muss RelativeHumidityControl
während der App-Initialisierung registriert werden. Weitere Informationen zum Hinzufügen von Merkmalen zum Registry finden Sie unter Merkmale registrieren.
OAuth
Wenn Sie bereits einen OAuth-Client haben
Wenn Sie bereits einen bestätigten OAuth-Client für eine veröffentlichte App haben, können Sie diesen OAuth-Client verwenden, um die Home APIs zu testen.
Die Registrierung von Google Home Developer Console ist nicht erforderlich, um die Home APIs zu testen und zu verwenden. Sie benötigen jedoch weiterhin eine genehmigte Developer Console-Registrierung, um Ihre App zu veröffentlichen, auch wenn Sie einen bestätigten OAuth-Client aus einer anderen Integration haben.
Dabei gilt Folgendes:
Bei der Verwendung eines vorhandenen OAuth-Clients ist die Anzahl der Nutzer auf 100 beschränkt. Informationen zum Hinzufügen von Testnutzern finden Sie unter OAuth-Zustimmungsbildschirm einrichten. Unabhängig von der OAuth-Bestätigung gilt für Home APIs eine Beschränkung auf 100 Nutzer, die Ihrer Anwendung Berechtigungen gewähren können. Diese Einschränkung wird aufgehoben, sobald die Developer Console-Registrierung abgeschlossen ist.
DieDeveloper Console Registrierung sollte zur Genehmigung gesendet werden, wenn Sie bereit sind, die Berechtigungen für Gerätetypen über OAuth einzuschränken, um Ihre App mit den Smart-Home-APIs zu aktualisieren.
Bei Google Cloud Apps, für die die OAuth-Überprüfung noch aussteht, können Nutzer den OAuth-Ablauf erst abschließen, wenn die Überprüfung abgeschlossen ist. Versuche, Berechtigungen zu gewähren, schlagen mit folgendem Fehler fehl:
Access blocked: <Project Name> has not completed the Google verification process.