Fehlerbehebung

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:

  1. Installieren Sie „adb“ auf Ihrem Computer.
  2. Entwickleroptionen und USB-Debugging aktivieren auf Ihrem 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 sich entscheiden, Protokolle zu sammeln. Dies ist erforderlich, wenn Sie Probleme mit Google teilen müssen.

  1. Verschiedene Geräteinformationen in Variablen speichern:
    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:

    Erweitern, um Befehle zum Speichern von Variablen in einer Datei anzuzeigen

    Der gesamte Block kann 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 Sie Android-Gerätelogs erfassen oder einen Fehlerbericht erstellen, konfigurieren Sie die Größe des Logger-Puffers und aktivieren Sie 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 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 mit Skripts erfassen

So erfassen Sie Live-Android-Gerätelogs während einer Debugging-Sitzung:

  1. Folgen Sie der Anleitung unter Ausführliche Debugging-Flags aktivieren, um vorhandene Logs zu löschen, die Puffergröße zu maximieren und ausführliche Logging-Tags festzulegen.
  2. Schließen Sie alle auf dem Mobilgerät ausgeführten Anwendungen.
  3. Entfernen Sie vorhandene Störungen im Logpuffer, bevor Sie mit dem Test beginnen:
    adb -s $phoneid logcat -c
  4. Starten Sie das Erfassen von Logs 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 Logs von Ihrem Gerät erfasst, solange der Prozess läuft.
  5. Führen Sie Ihre App aus und führen Sie alle Benutzeroberflächenaktionen aus, die zum Reproduzieren des Problems erforderlich sind.
  6. Wenn Sie fertig sind, beenden Sie den logcat-Prozess im Terminal, indem Sie Strg+C (oder Cmd+C auf dem Mac) drücken.
  7. Protokolle aus dieser Sitzung werden in android-logs_YYYYMMDDmmss.txt gespeichert. Hängen Sie beide Dateien (android-logs_YYYYMMDDmmss.txt und _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, Absturzberichte oder Low-Level-Debugging für Netzwerk und Bluetooth teilen möchten:

  • Matter-Inbetriebnahme über BLE:Wenn du ein Problem bei der Matter-Inbetriebnahme über BLE meldest, aktiviere vor dem Reproduzieren des Problems das Bluetooth HCI-Snoop-Protokoll in den Entwickleroptionen (Einstellungen > Entwickleroptionen > Bluetooth HCI-Snoop-Protokoll aktivieren).
  • Einrichtung für den Pre-Test:Bevor Sie den Test ausführen, folgen Sie der Anleitung unter Ausführliche Debugging-Flags aktivieren, um die ausführlichen Debugging-Properties auf Ihrem Gerät zu aktivieren.
  • Fehlerbericht erfassen:Nachdem Sie den Test ausgeführt und das Problem reproduziert haben, führen Sie den folgenden Befehl aus, um ein vollständiges Fehlerberichtarchiv 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 Systemdumps, Speicherstatistiken, Akkudiagnosen und Subsystem-Traces auf niedriger Ebene. So erhalten Sie erweiterte Informationen für das Debugging.

Protokolle von Hub-Geräten für die Übertragung

Mit dieser Methode können Sie sich Gerätelogs für Ihren Google Nest Hub ansehen. 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 Logs:

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

    • Über den Hub, sofern 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 finden: Gehe auf einem Nest Hub (2nd gen) zu Geräteinformationen > Technische Informationen > IP-Adresse.
    • Auf Ihrem Smartphone in GHA:
      1. Tippen Sie auf das Gerät, um die Seite mit den Gerätedetails aufzurufen.
      2. Tippe auf das Symbol für die Einstellungen , um die Seite mit den Einstellungen aufzurufen.
      3. IP-Adresse des Geräts finden: Gehe zu Geräteinformationen > Technische Informationen > IP-Adresse.
  3. Auf einem Computer, der sich im selben WLAN wie das Gerät befindet:

      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 um:

      adb logcat -d > platform-logs.txt
    

Automatisierungen

Kantenerkennung

Automatisierte Abläufe im Google Home-Ökosystem umfassen die Edge-Erkennung. Dabei handelt es sich um eine Logik, die dafür sorgt, 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, 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 funktioniert nicht wie erwartet

Wenn sich ein automatisierter Ablauf nach der Berücksichtigung der Kantenerkennung nicht wie erwartet verhält, gehen Sie so vor:

  1. Prüfe jedes Gerät, um sicherzustellen, dass es unabhängig von deiner Automatisierung richtig funktioniert.

  2. Sehen Sie sich das Automatisierungsdiagramm für Ihre Automatisierung an und vergleichen Sie es mit Ihrer Automatisierungs-DSL, um potenzielle falsche Annahmen Ihrerseits aufzudecken.

  3. Beobachten Sie den Gerätestatus in der Google Home App während der Ausführung Ihres automatisierten Ablaufs.

  4. Prüfe, ob alle Geräte, auf die sich die Automatisierung bezieht, in dem 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 finden Sie 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 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-Listenfunktion 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:

  1. Prüfen Sie, ob adb installiert ist. Weitere Informationen finden Sie unter adb installieren.
  2. 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
  3. 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 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.