Beispiel-App
Wenn bei der Verwendung der Home APIs Probleme auftreten, können Sie Protokolle zur weiteren Fehlerbehebung erfassen. Zum Erfassen von Logs vom Mobilgerät ist die Android Debug Bridge (adb) erforderlich. Wenn Sie Unterstützung von Google benötigen, erfassen Sie die Logs von den Android-Geräten und vom Hub und erstellen Sie im Issue Tracker ein Ticket mit den entsprechenden Informationen und Logs.
Android-Logs erfassen
Ihr Mobilgerät muss für alle Schritte, die adb betreffen, mit Ihrem lokalen Computer verbunden sein.
adb installieren
Wenn Sie Android Debug Bridge noch nicht eingerichtet haben, gehen Sie so vor:
- Installieren Sie „adb“ auf Ihrem Computer.
- Aktivieren Sie die Entwickleroptionen und das USB‑Debugging auf Ihrem Android-Smartphone.
Google Home-Plug-in für Android Studio
Das Google Home Plugin for Android Studio ist ein nützliches Tool zum Erfassen und Analysieren von Logs und wurde speziell für Google Home platform-Entwickler entwickelt. Mit diesem Plug-in erhalten Sie Zugriff auf Google Assistant Simulator, Cloud Logging und andere Tools, die den Entwicklungsprozess für smart home vereinfachen.
Verwenden Sie dieses Tool in Verbindung mit adb, um Matter-Gerätelogs weiter zu analysieren.
Weitere Informationen und das Tool finden Sie unter Google Home Plugin for Android Studio.
Versionsinformationen
Wir empfehlen, alle Versionsinformationen zu Ihrer Einrichtung zu erfassen, wenn Sie sich entscheiden, Protokolle zu sammeln. Dies ist erforderlich, wenn Sie Probleme mit Google teilen müssen.
- So rufen Sie die ID Ihres Mobilgeräts ab:
adb devicesList 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:Erweitern, 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 "" >> $versionfileecho "Home Module version:" >> $versionfile echo $homemoduleinfo >> $versionfile echo "" >> $versionfileecho "Optional Home Module version:" >> $versionfile echo $optionalhomemoduleinfo >> $versionfile echo "" >> $versionfileecho "Policy Home Module version:" >> $versionfile echo $policyhomemoduleinfo >> $versionfile echo "" >> $versionfileecho "Thread Module version:" >> $versionfile echo $threadinfo >> $versionfile echo "" >> $versionfileecho "GHA version:" >> $versionfile echo $ghainfo >> $versionfile echo "" >> $versionfileecho "Android version: " >> $versionfile echo $androidversion >> $versionfile echo "" >> $versionfileecho "Android API version: " >> $versionfile echo $androidapiversion >> $versionfile echo "" >> $versionfileecho "Found enabled features (blank if missing):" >> $versionfile echo $enabledfeatures >> $versionfile echo "" >> $versionfile - Prüfen Sie den Inhalt von
_versions.txt:cat _versions.txtDiese Datei kann jetzt bei Bedarf zur Fehlerbehebung an Google gesendet werden.Maximieren, um die Ausgabe der Beispieldatei anzuzeigen
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.1Android version: 13Android API version: 33Found enabled features (blank if missing):
Logs erfassen
Schließen Sie alle Apps, die auf dem Mobilgerät ausgeführt werden, um Logs zu erfassen. Dann:
- Öffnen Sie ein Terminalfenster und löschen Sie die vorhandenen Geräteprotokolle:
adb logcat -b all -c - So starten Sie das Erfassen von Logs:
Lassen Sie dieses Terminal geöffnet. Dadurch werden Protokolle von Ihrem Gerät gesammelt, solange der Prozess läuft.adb logcat >> _logs.txt - Führen Sie die Beispiel-App aus und erfassen Sie alle Aktionen auf der Benutzeroberfläche. Wenn Sie fertig sind, beenden Sie den
logcat-Prozess, der im Terminal ausgeführt wird, indem Sie Strg+C (oder Cmd+C auf dem Mac) drücken. - Protokolle aus dieser Sitzung werden in einer Datei mit dem Namen
_logs.txtgespeichert.
Sie können die Informationen in dieser Datei auf verschiedene Weise analysieren, unter anderem durch die Suche nach Schlüsselwörtern wie error, exception oder crash.
Log-Skripts
Die Beispiel-App enthält Skripts, mit denen Sie die relevanten Logs abrufen und in einer Textdatei zusammenstellen können. Damit Fehlerbehebung so einfach wie möglich ist, sollten diese Protokolle an alle gemeldeten Fehler angehängt werden, um die Ursachenanalyse durch Google zu erleichtern.
Diese Logs befinden sich im Verzeichnis scripts im Quellbaum der Beispiel-App.
Führen Sie die folgenden Schritte im Stammverzeichnis des Projekts aus:
- So rufen Sie die ID Ihres Mobilgeräts ab:
adb devices -lList of devices attached device-id device
- Führen Sie das Skript
get_logs.shaus:./scripts/get_logs.sh device-idCleared 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 Skript zu beenden.
Das Skript generiert eine Logdatei mit Zeitstempel, die alle relevanten Informationen enthält. Hängen Sie diese an alle Berichte für Fehler an, die Sie finden.
Protokolle von Hub-Geräten für die Übertragung
Mit dieser Methode können Sie Gerätestatusprotokolle für Ihren Google Nest Hub aufrufen. Sie wird für die folgenden Modelle unterstützt:
- Google Home
- Google Nest Audio
- Google Nest Hub
- Google Nest Mini
So aktivieren Sie einen Cast-Hub für den Abruf lokaler Protokolle:
- Android Debug Bridge einrichten
Rufen Sie die IP-Adresse Ihres Hubs ab:
- Über den Hub, sofern er ein Display hat:
- Wischen Sie vom oberen Displayrand nach unten.
- Tippe auf das Symbol für die Einstellungen .
- IP-Adresse des Geräts finden: Gehe auf einem Nest Hub (2nd gen) zu Geräteinformationen > Technische Informationen > IP-Adresse.
- Auf Ihrem Smartphone über GHA:
- Tippen Sie auf das Gerät, um die Seite mit den Gerätedetails aufzurufen.
- Tippe auf das Symbol für die Einstellungen , um die Seite mit den Einstellungen aufzurufen.
- IP-Adresse des Geräts finden: Gehe zu Geräteinformationen > Technische Informationen > IP-Adresse.
- Über den Hub, sofern er ein Display hat:
Auf einem Computer, der sich im selben WLAN wie das Gerät befindet:
adb connect ip-addressadb logcatWenn Sie jemandem Logs zur Verfügung stellen möchten, führen Sie den fehlgeschlagenen Vorgang aus und leiten Sie die Ausgabe in eine Textdatei um:
adb logcat -d > platform-logs.txt
Automatisierungen
Kantenerkennung
Automatisierte Abläufe im Google Home-Ökosystem umfassen die Edge-Erkennung. Dabei wird geprüft, ob ein Auslöser nur dann aktiviert wird, wenn sich der Status tatsächlich ändert, und nicht bei einer Statusaktualisierung, bei der der vorherige Status des Geräts wiederholt wird.
Wenn das Einschalten einer Lampe beispielsweise ein Starter ist, wird durch die Kantenerkennung überprüft, ob der Starter nur aktiviert wird, wenn das entsprechende Gerät von „Aus“ zu „Ein“ wechselt und nicht von „Ein“ zu „Ein“ (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üfe jedes Gerät, um sicherzustellen, dass es unabhängig von deiner Automatisierung richtig funktioniert.
Sehen Sie sich das Automatisierungsdiagramm für Ihre Automatisierung an und vergleichen Sie es mit Ihrer Automatisierungs-DSL, um potenzielle falsche Annahmen Ihrerseits aufzudecken.
Beobachten Sie den Gerätestatus in der Google Home App während der Ausführung Ihrer Automatisierung.
Prüfe, ob alle Geräte, auf die sich die Automatisierung bezieht, in der Struktur vorhanden sind, in der du sie erwartest. Das Löschen eines Geräts, von dem eine Automatisierung abhängt, kann unbeabsichtigte Folgen haben. Weitere Informationen findest du unter Auswirkungen des Löschens von Geräten auf Automatisierungen.
Die Automatisierung läuft, wenn sie es nicht sollte.
Wenn Ihre Automatisierung ausgeführt wird, obwohl sie es nicht sollte, prüfen Sie die Auslöserkriterien. Möglicherweise müssen Sie zusätzliche Logik hinzufügen, damit eine Zustandsänderung nur einmal erfasst wird und die Automatisierung nur einmal ausgelöst wird.
Automatisierung wird nicht kompiliert
Stellen Sie sicher, dass Ihre App alle notwendigen Importe enthält, einschließlich jeder Klasse, die den verschiedenen Knotentypen entspricht, sowie der Traits, auf die Sie verweisen.
Automatisierung kann aufgrund von Validierungsfehlern nicht erstellt werden
Wenn die Automatisierungserstellung die Validierung nicht besteht, wird eine Warnung oder Fehlermeldung mit Informationen zum Problem angezeigt. Weitere Informationen finden Sie in der Referenz zu ValidationIssueType.
Die Listenfunktion löst Ausnahmen aus
Beim Aufrufen der Automation API-Funktion „List“ können Lese-Handler aufgrund fehlender API-Funktionen Ausnahmen auslösen. Um dieses Problem zu beheben, löschen Sie die betroffene Automatisierung.
Gehen Sie dazu so vor:
- Prüfen Sie, ob
adbinstalliert ist. Weitere Informationen finden Sie unter adb installieren. Rufen Sie die ID der Automatisierung aus den Android-Logs ab, indem Sie Folgendes aufrufen:
adb logcat -s GhpNativeBeispiellogs:
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 über Ihren Terminal-Pager steuern:
adb logcat -s GhpNative level:debug | lessLöschen Sie die Automatisierung anhand ihrer 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 dies, dass die API versucht, das Trait für Discovery-Kandidaten zu verwenden, dies aber nicht gelingt, da das Trait 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
Der Merkmalsbezeichner ist home.matter.6006.clusters.fc43, was RelativeHumidityControl entspricht. Um den Merkmalsnamen anhand einer ID zu ermitteln, siehe Merkmalsindex.
Aus diesem Beispiel geht hervor, dass RelativeHumidityControl bei der Initialisierung der App registriert werden muss. Siehe Registering traits, um Ihr Merkmal zur Registrierung hinzuzufügen.
OAuth
Wenn Sie einen vorhandenen OAuth-Client haben
Wenn Sie bereits einen verifizierten OAuth-Client für eine veröffentlichte App besitzen, können Sie Ihren bestehenden 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 Verwendung eines bestehenden OAuth-Clients gilt eine Beschränkung auf 100 Benutzer. Informationen zum Hinzufügen von Testnutzern finden Sie unterOAuth-Zustimmungsbildschirm einrichten Unabhängig von der OAuth-Bestätigung gilt für die Home-APIs ein Limit von 100 Nutzern, die Ihrer Anwendung Berechtigungen erteilen können. Diese Einschränkung wird aufgehoben, sobald die Registrierung für Developer Console abgeschlossen ist.
DieDeveloper ConsoleRegistrierung sollte zur Genehmigung gesendet werden, wenn Sie bereit sind, die Gewährung von Gerätetypen über OAuth einzuschränken, um Ihre App mit den Home-APIs zu aktualisieren.
Bei Google Cloud-Apps, bei denen die OAuth-Prüfung noch aussteht, können Nutzer den OAuth-Ablauf erst abschließen, wenn die Prüfung abgeschlossen ist. Versuche, Berechtigungen zu erteilen, schlagen mit folgendem Fehler fehl:
Access blocked: <Project Name> has not completed the Google verification process.