Fehler im Smart Home beheben

1. Hinweis

Als Entwickler des Internets der Dinge (IoT) können Sie Smart-Home-Aktionen entwickeln, mit denen Ihre Nutzer ihre Geräte über die Touchbedienung in der Google Home App und Sprachbefehle mit Google Assistant steuern können.

a4657871181b5ad2.gif

Das Erlernen der Debugging-Tools für Smart-Home-Aktionen ist ein wichtiger Schritt bei der Integration von Google Assistant in Produktionsqualität. Für eine einfache Überwachung und Fehlerbehebung stehen Messwerte der Google Cloud Platform (GCP), Logging und die Test-Suite für Smart Homes zur Verfügung, um Probleme in Aktionen zu erkennen und zu beheben.

Voraussetzungen

Inhalt

In diesem Codelab stellst du eine Smart-Home-Aktion mit 2 Fehlern bereit und verbindest sie mit Assistant. Dann behebst du die Fehler in der Test-Suite für Smart Home und Messwerte und Logging der Google Cloud Platform (GCP)

Aufgaben in diesem Lab

  • GCP-Messwerte und Logging verwenden, um Produktionsprobleme zu erkennen und zu beheben
  • Test-Suite für Smart Home verwenden, um Funktions- und API-Probleme zu identifizieren

Voraussetzungen

2. Fehlerhafte App ausführen

Quellcode abrufen

Klicken Sie auf den folgenden Link, um das Beispiel für dieses Codelab auf Ihren Entwicklungscomputer herunterzuladen:

Oder Sie klonen das GitHub-Repository über die Befehlszeile:

$ git clone https://github.com/google-home/smarthome-debug.git

Über das Projekt

Die Waschmaschinen-App enthält die folgenden Unterverzeichnisse:

  • public: Eine Front-End-Benutzeroberfläche zur einfachen Steuerung und Überwachung des Status der intelligenten Waschmaschine.
  • functions: Ein vollständig implementierter Cloud-Dienst, der die intelligente Waschmaschine mit Cloud Functions for Firebase und Firebase Realtime Database verwaltet.

Mit Firebase verbinden

Öffnen Sie das Terminal auf dem Entwicklungscomputer. Rufen Sie das Verzeichnis washer-faulty auf und richten Sie die Firebase CLI mit Ihrem Actions-Projekt ein, das im Smart-Home-Gerät mit dem Google Assistant-Codelab verbinden erstellt wurde:

$ cd washer-faulty
$ firebase use <project-id>

In Firebase bereitstellen

Rufen Sie den Ordner functions auf und installieren Sie mit npm. alle erforderlichen Abhängigkeiten.

$ cd functions
$ npm install

Hinweis:Wenn die Meldung unten angezeigt wird, können Sie diese ignorieren und fortfahren. Diese Warnung geht auf einige ältere Abhängigkeiten zurück. Weitere Informationen finden Sie hier.

found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

Nachdem Sie nun die Abhängigkeiten installiert und das Projekt konfiguriert haben, können Sie die fehlerhafte Wasch-App bereitstellen.

$ firebase deploy

Die Ausgabe der Konsole sollte so aussehen:

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<project-id>/overview
Hosting URL: https://<project-id>.firebaseapp.com

HomeGraph aktualisieren

Öffnen Sie die Hosting-URL in Ihrem Browser (https://<project-id>.firebaseapp.com), um die Web-App aufzurufen. Klicken Sie in der Weboberfläche auf die Schaltfläche Aktualisieren ae8d3b25777a5e30.png, um HomeGraph über Synchronisierung anfordern mit den neuesten Gerätemetadaten aus der defekten Waschmaschine-App zu aktualisieren:

6f2b1344179977cf.png

Öffnen Sie die Google Home App und sehen Sie nach, ob die Waschmaschine mit dem Namen Fehlerhafte Waschmaschine angezeigt wird.

e357de6a7faff925.png

3. Aktion testen

Nachdem Sie das Projekt bereitgestellt haben, testen Sie, ob Ihre Aktion die Waschmaschine steuert.

Waschmaschine testen

Prüfen Sie die Änderung des Werts, wenn Sie einen der folgenden Sprachbefehle über Ihr Smartphone ausführen:

„Hey Google, schalte meine Waschmaschine ein.“

„Hey Google, starte meine Waschmaschine.“

„Hey Google, pausiere die Waschmaschine.“

„Hey Google, fahre meine Waschmaschine fort.“

„Hey Google, stopp die Waschmaschine.“

Sie werden feststellen, dass Assistant per Sprachbefehl reagiert, wenn Sie die Waschmaschine pausieren oder fortsetzen:

„Ich konnte <Projektanzeigename> leider nicht erreichen.“

Um dieses Problem zu beheben, benötigen Sie zuerst weitere Informationen über den Fehler, um die Ursache einzugrenzen und die Ursache zu ermitteln.

Dashboard für Smart-Home-Analysen

Ein guter Ort zum Prüfen von Fehlern ist das Dashboard für Smart-Home-Analysen, in dem Diagramme mit Nutzungs- und Zustandsmesswerten für Ihre Cloud-Auftragsausführung zusammengefasst werden:

  • Die Nutzungsmesswerte spiegeln den Nutzungstrend Ihrer Smart-Home-Aktion wider, einschließlich der Anzahl der aktiven Nutzer pro Tag und der Gesamtzahl der Anfragen bis zur Ausführung.
  • Mit den Gesundheitsmesswerten können Sie das Auftreten von Anomalien in Ihrer Smart-Home-Aktion im Blick behalten. Sie umfassen die Anfragelatenz, den Erfolgsprozentsatz und die Fehleraufschlüsselung.

Um die Fehlerursache einzugrenzen, öffnen Sie das Projekt-Dashboard mit den folgenden Schritten.

  1. Rufen Sie in der Actions Console die Seite „Projekte“ auf.
  2. Wählen Sie Ihr Smart-Home-Projekt aus.
  3. Wählen Sie den Tab Analytics aus und klicken Sie auf Go to Google Cloud Platform (Zur Google Cloud Platform).

b1735bbe11a7aff8.png

  1. Dadurch gelangen Sie zu einer Liste der Dashboards für Ihr Projekt in Google Cloud. Wählen Sie das Dashboard Google Home Analytics – Cloud-Integration aus.

8d3751323176dd.png

  1. Scrollen Sie nach unten zum Diagramm Fehler in der Cloud-Ausführung – Statusaufschlüsselung, um die Fehlercodes für den hervorgehobenen Zeitraum anzusehen.

c468743c20a11c15.png

Der Fehlercode PARTNER_RESPONSE_MISSING_DEVICE gibt einen Hinweis auf die Ursache. Rufen Sie als Nächstes Ereignisprotokolle basierend auf dem Fehlercode ab, um weitere Details zu erhalten.

Auf Ereignisprotokolle zugreifen

Um weitere Details zum Fehler zu erhalten, greifen Sie über Cloud Logging auf Ereignisprotokolle für Ihre Smart-Home-Aktionen zu.

Öffnen Sie in der Google Cloud Platform das Navigationsmenü und wählen Sie unter Vorgänge die Option Logging aus. Log-Explorer für den Zugriff auf die Ereignisprotokolle für Ihr Projekt Alternativ können Sie im Suchfeld nach Log-Explorer suchen.

Geben Sie im Abschnitt Abfrage die Abfrage PARTNER_RESPONSE_MISSING_DEVICE ein und klicken Sie auf Abfrage ausführen. Die mit der Abfrage übereinstimmenden Logs werden im Abschnitt Abfrageergebnisse angezeigt.

747cca0f1249a5a.png

Das Fehlerprotokoll enthält ein Smart-Home-Ereignis mit folgenden Fehlerdetails:

  • Die durchgeführte Nutzeraktion ist „Waschen wird fortgesetzt“ (actionType:STARTSTOP_UNPAUSE“) entspricht dem letzten fehlgeschlagenen Sprachbefehl.
  • Die zugehörige Debugging-Meldung lautet „JSON response does not include device.

Anhand der Debugging-Meldung sollten Sie prüfen, warum die Waschmaschinen-App nicht das richtige Gerät in die EXECUTE-Antwort einfügt.

Ursache des Fehlers ermitteln

Suchen Sie in functions/index.js nach dem EXECUTE-Handler (im Array onExecute), der den Status jedes Befehls und den neuen Gerätestatus zurückgibt. Das Einfügen von Geräte-IDs in eine EXECUTE-Antwort hängt davon ab, ob die updateDevice-Funktion aufgelöst wird:

index.js

app.onExecute(async (body) => {
 ...

 for (const command of intent.payload.commands) {
   for (const device of command.devices) {
     for (const execution of command.execution) {
       executePromises.push(
           updateDevice(execution, device.id)
               .then((data) => {
                 result.ids.push(device.id);
                 Object.assign(result.states, data);
               })
               .catch((e) =>
                 functions.logger.error('EXECUTE',
                     device.id, e.message)));
     }
   }
 }

Prüfen Sie außerdem, wie die Funktion updateDevice das Pausieren / Fortsetzen in der Waschmaschine handhabt. Sie werden feststellen, dass die Zeichenfolge für den Befehl zum Pausieren / Fortsetzen falsch ist:

index.js

const updateDevice = async (execution, deviceId) => {
 const {params, command} = execution;
 let state; let ref;
 switch (command) {
   ...
   case 'action.devices.commands.PauseUnpausePause':
     state = {isPaused: params.pause};
     if (params.pause) state.isRunning = false;
     ref = firebaseRef.child(deviceId).child('StartStop');
     break;
 }

 return ref.update(state)
     .then(() => state);
};

Fehler beheben

Nachdem Sie nun die Ursache des Fehlers ermittelt haben, können Sie den String für den Befehl „pause“/„pause“ korrigieren:

index.js

const updateDevice = async (execution, deviceId) => {
 const {params, command} = execution;
 let state; let ref;
 switch (command) {
   ...
   case 'action.devices.commands.PauseUnpause':
     state = {isPaused: params.pause};
     if (params.pause) state.isRunning = false;
     ref = firebaseRef.child(deviceId).child('StartStop');
     break;
 }

 return ref.update(state)
     .then(() => state);
};

Korrektur testen

Stellen Sie den aktualisierten Code mit der Firebase CLI bereit:

firebase deploy --only functions

Wiederholen Sie die folgenden Sprachbefehle und Sie werden feststellen, dass Assistant jetzt korrekt reagiert, wenn Sie die Waschmaschine pausieren bzw. fortsetzen.

„Hey Google, pausiere die Waschmaschine.“

=&gt;

„Okay, die Waschmaschine wird pausiert.“

„Hey Google, fahre meine Waschmaschine fort.“

=&gt;

„Ok, ich starte die Pause für die Waschmaschine.“

Sie können auch den aktuellen Zustand Ihrer Waschmaschine prüfen, indem Sie Fragen stellen.

„Hey Google, ist meine Waschmaschine an?“

„Hey Google, läuft meine Waschmaschine?“

„Hey Google, in welchem Waschgang ist meine Waschmaschine?“

4. Action mit der Test-Suite testen

Neben manuellen Tests kannst du die automatisierte Test-Suite für Smart Home verwenden, um Anwendungsfälle auf Grundlage der Gerätetypen und Eigenschaften, die mit deiner Aktion verknüpft sind, zu validieren. Die Test-Suite führt eine Reihe von Tests aus, um Probleme in deiner Aktion zu erkennen, und zeigt bei fehlgeschlagenen Testfällen informative Meldungen an, um die Fehlerbehebung zu beschleunigen, bevor du die Ereignisprotokolle aufrufst.

Test-Suite für Smart Home ausführen

So kannst du die Action by Test Suite für dein Smart Home testen:

  1. Öffnen Sie in Ihrem Webbrowser die Test Suite für Smart Home.
  2. Melden Sie sich über die Schaltfläche oben rechts in Google an. Dadurch kann die Test-Suite die Befehle direkt an Google Assistant senden.
  3. Gib im Feld Projekt-ID die Projekt-ID deiner Smart-Home-Aktion ein. Klicken Sie dann auf WEITER, um fortzufahren.
  4. Im Schritt Test Settings (Testeinstellungen) werden in der Test-Suite der Gerätetyp und die Merkmale der Waschmaschine aufgelistet.

78ed6a1ebdb581bf.png

  1. Deaktivieren Sie die Option Test Request Sync (Synchronisierung der Testanfrage), da die Beispiel-Wasch-App keine Benutzeroberfläche zum Hinzufügen, Entfernen oder Umbenennen der Waschmaschine hat. In einem Produktionssystem müssen Sie jedes Mal die Option Synchronisierung anfordern auslösen, wenn der Nutzer Geräte hinzufügt, entfernt oder umbenennt.
  2. Klicken Sie auf WEITER, um den Test zu starten.

Nachdem die Test-Suite ausgeführt wurde, können Sie sich die Ergebnisse der Testläufe ansehen. Sie sehen zwei fehlgeschlagene Testfälle mit der entsprechenden Fehlermeldung:

5838d10631c98ed2.png

Wenn Sie die Fehler in Ihrer Smart-Home-Aktion beheben möchten, müssen Sie zuerst die Fehlermeldung analysieren, um die Ursache des Fehlers zu ermitteln.

Fehlermeldung analysieren

Damit Entwickler die Ursache leichter identifizieren können, zeigt die Test-Suite für jeden fehlgeschlagenen Testlauf Fehlermeldungen an, die den Grund für den Fehler angeben.

Für den ersten fehlgeschlagenen Testfall oben

99e4e5d06965a8a7.png

In der Fehlermeldung wird angegeben, dass die Test-Suite in den von deiner Smart-Home-Aktion gemeldeten Status "isPause": true erwartet. Der tatsächliche Status enthält jedoch nur "isPause": false.

Außerdem zeigt die Fehlermeldung des zweiten fehlgeschlagenen Testlaufs an, dass der Status in der QUERY-Antwort deiner Smart-Home-Aktion "isPause": true enthält. Dieser Status unterscheidet sich von "isPause": false in den Status, die von deiner Smart-Home-Aktion gemeldet werden:

fdb5124102e3a37.png

Gemäß beiden Fehlermeldungen solltest du dann prüfen, ob in deinen Aktionberichten isPaused mit dem richtigen Wert angezeigt wird.

Ursache des Fehlers ermitteln

Öffnen Sie functions/index.js. Dort finden Sie die reportstate-Funktion, die Statusänderungen über den Berichtsstatus an Home Graph sendet. Untersuchen Sie die Nutzlast des Berichtsstatus. Sie werden feststellen, dass in der Nutzlast der Status isPaused fehlt. Dies ist genau das, was die Test-Suite in den fehlgeschlagenen Testfällen überprüft hat.

index.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      ...

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
             [context.params.deviceId]: {
                online: true,
                on: snapshot.OnOff.on,
                isRunning: snapshot.StartStop.isRunning,
                currentRunCycle: [{
                  currentCycle: 'rinse',
                  nextCycle: 'spin',
                  lang: 'en',
                }],
                currentTotalRemainingTime: 1212,
                currentCycleRemainingTime: 301,
              },
            },
          },
        },
      };

      const res = await homegraph.devices.reportStateAndNotification({
        requestBody,
      });
      ...
    });

Fehler beheben

Nachdem Sie nun die Ursache des Fehlers gefunden haben, überarbeiten Sie functions/index.js, indem Sie der Nutzlast des Berichtstatus den Status isPaused hinzufügen:

index.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      ...

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
             [context.params.deviceId]: {
                online: true,
                on: snapshot.OnOff.on,
                isPaused: snapshot.StartStop.isPaused,
                isRunning: snapshot.StartStop.isRunning,
                currentRunCycle: [{
                  currentCycle: 'rinse',
                  nextCycle: 'spin',
                  lang: 'en',
                }],
                currentTotalRemainingTime: 1212,
                currentCycleRemainingTime: 301,
              },
            },
          },
        },
      };
      ...
    });

Korrektur testen

Stellen Sie den aktualisierten Code mit der Firebase CLI bereit:

$ firebase deploy --only functions

Wenn Sie die Test-Suite für das Smart Home noch einmal ausführen, werden Sie feststellen, dass alle Testläufe bestanden wurden.

148837f85d377dd6.png

5. Glückwunsch

17d485868a6771bc.png

Glückwunsch! Du hast gelernt, wie du Probleme mit Smart-Home-Aktionen über die Test-Suite für Smart-Home- und GCP-Messwerte und -Logging

Weitere Informationen

Probieren Sie die folgenden Übungen aus und nutzen Sie zusätzliche Ressourcen, die auf diesem Codelab aufbauen:

Weitere Informationen zum Testen und Einreichen einer Aktion zur Überprüfung, einschließlich des Zertifizierungsverfahrens für die Veröffentlichung deiner Aktion für Nutzer, findest du hier.