Fehlerbehebung

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:

  1. Installiere „adb“ auf deinem Computer.
  2. Aktiviere die Entwickleroptionen und das USB-Debugging auf deinem Android-Smartphone.

Mobilgeräte-ID abrufen

  1. So rufen Sie die ID Ihres Mobilgeräts ab:
    adb devices
    List of devices attached
    device-id    device
  2. 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.

  1. 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)
  2. 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
  3. Prüfen Sie den Inhalt von _versions.txt:
    cat _versions.txt

    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...
    Diese Datei kann jetzt bei Bedarf zur Fehlerbehebung an Google gesendet werden.

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 VERBOSE

Android-Logs mithilfe von Skripts erfassen

So erfassen Sie während einer Debugging-Sitzung Live-Geräteprotokolle von Android-Geräten:

  1. 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.
  2. Schließen Sie alle Anwendungen, die auf dem Mobilgerät ausgeführt werden.
  3. Löschen Sie vorhandenes Rauschen im Protokollpuffer, bevor Sie den Test starten:
    adb -s $phoneid logcat -c
  4. Starten Sie die Protokollerfassung in einem Terminalfenster:
    adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt
    Lassen Sie dieses Terminalfenster geöffnet. Dadurch werden Protokolle von Ihrem Gerät erfasst, solange der Prozess ausgeführt wird.
  5. Führen Sie Ihre App aus und führen Sie alle Aktionen auf der Benutzeroberfläche aus, die zum Reproduzieren des Problems erforderlich sind.
  6. Beenden Sie anschließend den logcat-Prozess im Terminal, indem Sie Strg + C (oder Cmd + C auf einem Mac) drücken.
  7. Protokolle aus dieser Sitzung werden in android-logs_YYYYMMDDmmss.txt gespeichert. Hängen Sie sowohl android-logs_YYYYMMDDmmss.txt als auch _versions.txt an 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:

  1. Android Debug Bridge einrichten
  2. Rufen Sie die IP-Adresse Ihres Hubs ab:

    • Über den Hub, wenn er ein Display hat:
      1. Wischen Sie vom oberen Displayrand nach unten.
      2. Tippe auf das Symbol für die Einstellungen .
      3. 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:
      1. Tippe auf das Gerät, um die Seite mit den Gerätedetails aufzurufen.
      2. Tippe auf das Symbol für die Einstellungen , um die Seite „Einstellungen“ aufzurufen.
      3. IP-Adresse des Geräts ermitteln: Gehe zu Geräteinformationen > Technische Informationen > IP-Adresse.
  3. Auf einem Computer im selben WLAN wie das Gerät:

      adb connect ip-address
      adb logcat
    

  4. 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 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:

  1. Prüfe, ob jedes Gerät unabhängig von deinem automatisierten Ablauf ordnungsgemäß funktioniert.

  2. Sieh dir das Automatisierungsdiagramm für deine Automatisierung an und vergleiche es mit deiner Automatisierungs-DSL, um mögliche falsche Annahmen deinerseits zu erkennen.

  3. Beobachte den Gerätestatus in der Google Home App während der Ausführung deiner Automatisierung.

  4. 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:

  1. Prüfen Sie, ob adb installiert ist. Weitere Informationen finden Sie unter adb installieren.
  2. Rufe die ID der Automatisierung aus den Android-Logs ab, indem du Folgendes aufrufst:

    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
  3. Lö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.