Beispiel-App
Wenn bei der Verwendung der Home APIs Probleme auftreten, kannst du Logs für die weitere Fehlerbehebung erfassen. Zum Erfassen von Protokollen vom Mobilgerät ist die Android Debug Bridge (adb) erforderlich. Wenn du Unterstützung von Google benötigst, erfasse die Protokolle sowohl von den Android-Geräten als auch vom Hub und öffne 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
Falls noch nicht geschehen, richten Sie die Android Debug Bridge auf Ihrem lokalen Computer ein:
- Installiere „adb“ auf deinem Computer.
- Aktiviere die Entwickleroptionen und das USB-Debugging auf deinem Android-Smartphone.
Mobilgeräte-ID abrufen
- 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
Versionsinformationen
Wir empfehlen, alle Versionsinformationen zu Ihrer Einrichtung zu erfassen, wenn Sie Logs erfassen möchten. Dies ist erforderlich, wenn Sie Probleme mit Google teilen müssen.
- Speichere verschiedene Geräteinformationen in Variablen:
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) - 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 auf einmal kopiert und in ein Terminal eingefügt werden.
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
- 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=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...
Ausführliche Debugging-Flags aktivieren
Bevor du Android-Geräteprotokolle erstellst oder einen Fehlerbericht ausführst, konfiguriere die Größe des Logger-Puffers und aktiviere ausführliche Debugging-Tags für Google Home- und GMS-Komponenten:
# 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 VERBOSEAndroid-Logs mithilfe von Skripts erfassen
So erfassen Sie während einer Debugging-Sitzung Live-Geräteprotokolle von Android-Geräten:
- Folgen Sie der Anleitung unter Ausführliche Debugging-Flags aktivieren, um vorhandene Protokolle zu löschen, die Puffergröße zu erhöhen und Tags für das ausführliche Logging festzulegen.
- Schließen Sie alle Anwendungen, die auf dem Mobilgerät ausgeführt werden.
- Löschen Sie vorhandenes Rauschen im Protokollpuffer, bevor Sie den Test starten:
adb -s $phoneid logcat -c - Starten Sie die Protokollerfassung in einem Terminalfenster:
Lassen Sie dieses Terminalfenster geöffnet. Dadurch werden Protokolle von Ihrem Gerät erfasst, solange der Prozess ausgeführt wird.adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt - Führen Sie Ihre App aus und führen Sie alle Aktionen auf der Benutzeroberfläche aus, die zum Reproduzieren des Problems erforderlich sind.
- Beenden Sie anschließend den
logcat-Prozess im Terminal, indem Sie Strg + C (oder Cmd + C auf einem Mac) drücken. - Protokolle aus dieser Sitzung werden in
android-logs_YYYYMMDDmmss.txtgespeichert. Hängen Sie sowohlandroid-logs_YYYYMMDDmmss.txtals auch_versions.txtan alle Fehlerberichte an.
Android-Logs mit „adb bugreport“ erfassen
Erstellen Sie einen vollständigen Android-Fehlerbericht, wenn Sie detaillierte Diagnoseinformationen zu Problemen auf Systemebene, Crash-Dumps oder Low-Level-Debugging für Netzwerk und Bluetooth teilen möchten:
- Matter-BLE-Inbetriebnahme:Wenn du ein Problem mit der Matter-Inbetriebnahme im Zusammenhang mit BLE meldest, aktiviere in den Entwickleroptionen das Bluetooth HCI-Snoop-Protokoll (Einstellungen > Entwickleroptionen > Bluetooth HCI-Snoop-Protokoll aktivieren), bevor du das Problem reproduzierst.
- Einrichtung vor dem Test:Bevor Sie den Test ausführen, folgen Sie der Anleitung unter Ausführliche Debugging-Flags aktivieren, um die ausführlichen Debugging-Eigenschaften auf Ihrem Gerät zu aktivieren.
- Fehlerbericht erstellen:Nachdem Sie den Test ausgeführt und das Problem reproduziert haben, führen Sie den folgenden Befehl aus, um ein vollständiges Fehlerberichtsarchiv zu generieren:
adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip - Erweiterte Debugging-Informationen:Die generierte
android-bugreport_YYYYMMDDmmss.zip-Datei enthält umfassende Diagnosedaten auf Systemebene, darunter vollständige System-Dumps, Speicherstatistiken, Akkudiagnosen und Low-Level-Subsystem-Traces. Diese bieten erweiterte Informationen für das Debugging.
Cast-Hub-Geräteprotokolle
Mit dieser Methode kannst du Geräteprotokolle für deinen 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 aktivierst du einen Cast-Hub für den Abruf lokaler Protokolle:
- Android Debug Bridge einrichten
Rufen Sie die IP-Adresse Ihres Hubs ab:
- Über den Hub, wenn er ein Display hat:
- Wischen Sie vom oberen Displayrand nach unten.
- Tippe auf das Symbol für die Einstellungen .
- IP-Adresse des Geräts ermitteln: Rufe auf einem Nest Hub (2nd gen) Geräteinformationen > Technische Informationen > IP-Adresse auf.
- In GHA auf deinem Smartphone:
- Tippe auf das Gerät, um die Seite mit den Gerätedetails aufzurufen.
- Tippe auf das Symbol für die Einstellungen , um die Seite „Einstellungen“ aufzurufen.
- IP-Adresse des Geräts ermitteln: Gehe zu Geräteinformationen > Technische Informationen > IP-Adresse.
- Über den Hub, wenn er ein Display hat:
Auf einem Computer im selben WLAN wie das Gerät:
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 weiter:
adb logcat -d > platform-logs.txt
Automatisierungen
Kantenerkennung
Automatisierte Abläufe im Google Home-Ökosystem verfügen über eine Flankenerkennung. Diese Logik sorgt dafür, dass ein Auslöser nur dann aktiviert wird, wenn sich der Zustand tatsächlich ändert, und nicht bei einer Zustandsaktualisierung, die lediglich den vorherigen Zustand des Geräts wiederholt.
Wenn beispielsweise das Einschalten einer Lampe ein Auslöser ist, wird durch die Flankenerkennung geprüft, ob der Auslöser nur aktiviert wird, wenn die Lampe von „Aus“ zu „An“ wechselt, und nicht von „An“ zu „An“ (keine Änderung).
Automatisierung verhält sich nicht wie erwartet
Wenn ein automatisierter Ablauf nach Berücksichtigung der Flankenerkennung nicht wie erwartet funktioniert, gehe so vor:
Prüfe, ob jedes Gerät unabhängig von deinem automatisierten Ablauf ordnungsgemäß funktioniert.
Sieh dir das Automatisierungsdiagramm für deine Automatisierung an und vergleiche es mit deiner Automatisierungs-DSL, um mögliche falsche Annahmen deinerseits zu erkennen.
Beobachte den Gerätestatus in der Google Home App während der Ausführung deiner Automatisierung.
Prüfe, ob alle Geräte, auf die sich die Automatisierung bezieht, im Gebäude vorhanden sind, in dem 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.
Automatisierung wird ausgeführt, obwohl sie es nicht sollte
Wenn deine Automatisierung ausgeführt wird, obwohl sie es nicht sollte, überprüfe die Auslöserkriterien. Möglicherweise muss zusätzliche Logik hinzugefügt werden, damit eine Statusänderung nur einmal erfasst wird und die Automatisierung nur einmal auslöst.
Automatisierung wird nicht kompiliert
Achten Sie darauf, dass Ihre App alle erforderlichen Importe enthält, einschließlich der Klassen, die den verschiedenen Knotentypen entsprechen, sowie der Attribute, auf die Sie verweisen.
Die Erstellung der Automatisierung schlägt bei der Validierung fehl
Wenn die Automatisierung die Validierung nicht besteht, wird eine Warn- oder Fehlermeldung mit Informationen zum Problem angezeigt. Weitere Informationen finden Sie in der Referenz zu ValidationIssueType.
Listenfunktion löst Ausnahmen aus
Beim Aufrufen der List-Funktion 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.
Gehen Sie dazu so vor:
- Prüfen Sie, ob
adbinstalliert ist. Weitere Informationen finden Sie unter adb installieren. Rufe die ID der Automatisierung aus den Android-Logs ab, indem du Folgendes aufrufst:
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 mit dem Terminal-Pager steuern:
adb logcat -s GhpNative level:debug | lessLösche die Automatisierung mithilfe ihrer ID:
structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
Die Discovery API protokolliert eine Warnung, wenn ein Trait nicht registriert ist
Wenn die Discovery API eine Warnung für Trait not found protokolliert, bedeutet dies, dass die API versucht, das Merkmal für Discovery-Kandidaten zu verwenden. Dies ist jedoch nicht möglich, da das Merkmal während 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 Merkmal-ID ist home.matter.6006.clusters.fc43, was RelativeHumidityControl entspricht. Informationen zum Ermitteln des Attributnamens anhand einer ID findest du im Attributindex.
In diesem Beispiel muss RelativeHumidityControl während der App-Initialisierung registriert werden. Informationen zum Hinzufügen deines Traits zur Registry findest du unter Traits registrieren.
OAuth
Wenn Sie einen vorhandenen OAuth-Client haben
Wenn du bereits einen bestätigten OAuth-Client für eine veröffentlichte App hast, kannst du diesen zum Testen der Home APIs verwenden.
Für das Testen und Verwenden der Home-APIs ist keine Google Home Developer Console-Registrierung erforderlich. 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 vorhandenen OAuth-Clients gilt ein Limit von 100 Nutzern. Informationen zum Hinzufügen von Testnutzern finden Sie unterOAuth-Zustimmungsbildschirm einrichten Unabhängig von der OAuth-Überprüfung gibt es ein von den Home APIs auferlegtes Limit von 100 Nutzern, die deiner Anwendung Berechtigungen erteilen können. Diese Einschränkung wird nach Abschluss der Developer Console-Registrierung aufgehoben.
DieDeveloper Console-Registrierung sollte zur Genehmigung gesendet werden, wenn du bereit bist, die Berechtigungen für Gerätetypen über OAuth einzuschränken, um deine App mit den Home APIs zu aktualisieren.
Bei Google Cloud-Apps, für die die OAuth-Überprüfung noch aussteht, können Nutzer den OAuth-Vorgang erst abschließen, wenn die Überprüfung abgeschlossen ist. Versuche, Berechtigungen zu gewähren, schlagen mit dem folgenden Fehler fehl:
Access blocked: <Project Name> has not completed the Google verification process.