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 dem Hub und erstellen Sie ein Ticket im Issue Tracker mit den entsprechenden Informationen und Logs.
Android-Logs erfassen
Ihr Mobilgerät muss für alle Schritte, die adb
umfassen, 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 hilfreiches 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 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
: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 "" >> $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 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.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 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 Logs von Ihrem Gerät erfasst, solange der Prozess ausgeführt wird.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. - Die Protokolle 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. indem Sie nach Schlüsselwörtern wie error
, exception
oder crash
suchen.
Log-Skripts
Die Beispiel-App enthält Skripts, mit denen Sie die relevanten Logs abrufen und in einer Textdatei zusammenstellen können. Damit Fehlerbehebung optimal 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 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 Skript zu beenden.
Das Skript generiert eine Zeitstempel-Logdatei, 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
So kannst du dir die Geräte-Logs für deinen Google-Hub ansehen:
- Android Debug Bridge einrichten
IP-Adresse des Hubs abrufen:
- Über den Hub, falls 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.
- Über GHA auf Ihrem Smartphone:
- 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, falls er ein Display 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 in eine Textdatei um:
adb logcat -d > platform-logs.txt
Automatisierungen
Kantenerkennung
Automatisierte Abläufe im Google Home-Ökosystem bieten Kantenerkennung. Diese Logik sorgt dafür, dass 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, sorgt die Kantenerkennung dafür, dass der Starter nur aktiviert wird, wenn das Licht von „Aus“ zu „An“ wechselt und nicht von „An“ zu „An“ (keine Änderung).
Automatisierung funktioniert nicht wie erwartet
Wenn eine Automatisierung nach der Berücksichtigung der Kantenerkennung nicht wie erwartet funktioniert, 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 mögliche 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.
Automatisierung wird ausgeführt, wenn sie nicht ausgeführt werden 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
Achten Sie darauf, dass Ihre App alle erforderlichen Importe enthält, einschließlich jeder Klasse, die den verschiedenen Knotentypen entspricht, sowie der Traits, auf die Sie verweisen.
Automatisierung kann nicht erstellt werden, da die Validierung fehlschlägt
Wenn die Erstellung der Automatisierung 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
adb
installiert 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 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 Ihrem Terminal-Pager steuern:
adb logcat -s GhpNative level:debug | less
Lö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 das, dass die API versucht, das Attribut für Discovery-Kandidaten zu verwenden. Das funktioniert jedoch nicht, da das Attribut 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 Attribut-ID ist home.matter.6006.clusters.fc43
, was RelativeHumidityControl
entspricht. Informationen zum Ermitteln des Attributnamens anhand einer ID finden Sie im Attributindex.
In diesem Beispiel muss RelativeHumidityControl
bei der Initialisierung der App registriert werden. Informationen zum Hinzufügen Ihres Traits zur Registrierung finden Sie hier.
OAuth
Wenn Sie einen vorhandenen OAuth-Client haben
Wenn Sie bereits einen bestätigten OAuth-Client für eine veröffentlichte App haben, können Sie ihn zum Testen der Home-APIs verwenden.
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:
Wenn Sie einen vorhandenen OAuth-Client verwenden, gilt eine Beschränkung von 100 Nutzern. Informationen zum Hinzufügen von Testnutzern finden Sie unterOAuth-Zustimmungsbildschirm einrichten Unabhängig von der OAuth-Überprüfung 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 Console sollte zur Genehmigung eingereicht 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 dem folgenden Fehler fehl:
Access blocked: <Project Name> has not completed the Google verification process.