Fehler im Smart Home beheben

1. Hinweis

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

a4657871181b5ad2.gif

Es ist wichtig, dass du dich mit den Tools zur Fehlerbehebung für Smart-Home-Aktionen vertraut machst, um eine Produktionsqualität von Google Assistant zu erreichen. Mit den Messwerten Google Cloud Platform (GCP), Logging und der Test-Suite für Smart Home lassen sich Probleme bei Ihren Aktionen leichter identifizieren und beheben.

Voraussetzungen

Inhalt

In diesem Codelab stellst du eine Smart-Home-Aktion mit zwei Fehlern bereit und verbindest sie mit Assistant. Anschließend behebst du die Fehler der Aktion über die Test-Suite für Messwerte und Logging der Google Cloud Platform (Google Cloud Platform).

Lerninhalte

  • Mit GCP-Messwerten und Logging Produktionsprobleme erkennen und beheben
  • Anleitung zur Verwendung der Test-Suite für Smart Homes zum Erkennen von Funktions- und API-Problemen

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 können das GitHub-Repository über die Befehlszeile klonen:

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

Über das Projekt

Die Waschmaschine-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 Ihrem Entwicklungscomputer. Rufen Sie das Verzeichnis washer-faulty auf und richten Sie die Firebase CLI mit Ihrem Actions-Projekt ein, das Sie im Codelab Smart-Home-Geräte mit dem Google Assistant-Codelab verbinden erstellt haben:

$ 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 die Meldung ignorieren und fortfahren. Die Warnung ist auf ältere Abhängigkeiten zurückzuführen. 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 Ihr Projekt konfiguriert haben, können Sie die fehlerhafte Waschmaschine-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 im Browser (https://<project-id>.firebaseapp.com), um die Web-App aufzurufen. Klicken Sie in der Web-UI auf die Schaltfläche Aktualisierenae8d3b25777a5e30.png, um HomeGraph über Synchronisierung anfordern mit den neuesten Gerätemetadaten aus der fehlerhaften Waschmaschine-App zu aktualisieren:

6f2b1344179977cf.png

Öffnen Sie die Google Home App und prüfen Sie, ob die Waschmaschine mit dem Namen Fehlerhafte Waschmaschine angezeigt wird.

e357de6a7faff925.png

3. Aktion testen

Testen Sie nach der Bereitstellung Ihres Projekts, ob Ihre Aktion die Waschmaschine steuert.

Waschmaschine testen

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

„Hey Google, schalte meine Waschmaschine ein.“

„Hey Google, starte meine Waschmaschine.“

„Hey Google, pausiere meine Waschmaschine.“

„Hey Google, setze meine Waschmaschine fort.“

„Hey Google, halte die Waschmaschine an.“

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

„Tut mir leid, ich konnte <Anzeigename des Projekts> nicht erreichen.“

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

Smart-Home-Analyse-Dashboard

Ein guter Ort zur Prüfung von Fehlern ist das Smart-Home-Analytics-Dashboard, das Diagramme zu Nutzungs- und Gesundheitsmesswerten für Ihre Cloud-Auftragsausführung zusammenfasst:

  • Die Nutzungsmesswerte spiegeln den Nutzungstrend deiner Smart-Home-Aktion wider, einschließlich der Anzahl der aktiven Nutzer pro Tag und der Gesamtzahl der Anfragen für deine Auftragsausführung.
  • Mit den Messwerten zum Status kannst du Anomalien bei deiner Smart-Home-Aktion beobachten. Sie umfassen Anfragelatenz, Erfolgsquote und Fehleraufschlüsselung.

Wenn Sie die Ursache des Fehlers eingrenzen möchten, führen Sie die folgenden Schritte aus, um auf das Projekt-Dashboard zuzugreifen.

  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.

b1735bbe11a7aff8.png

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

5edd3751323176dd.png

  1. Scrollen Sie nach unten zum Diagramm Cloud-Auftragsausführungsfehler – Statusaufschlüsselung, um die Fehlercodes für den markierten Zeitraum anzusehen.

c468743c20a11c15.png

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

Zugriffsereignisprotokolle

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

Öffnen Sie in der Google Cloud Platform das Navigationsmenü und wählen Sie unter Vorgänge die Option Logging > Log-Explorer aus, um auf die Ereignisprotokolle für Ihr Projekt zuzugreifen. Alternativ können Sie in das 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 Logs, die mit der Abfrage übereinstimmen, werden im Abschnitt Abfrageergebnisse angezeigt.

747cca0f1249a5a.png

Das Fehlerprotokoll zeigt ein Smart-Home-Ereignis mit Fehlerdetails, die Folgendes anzeigen:

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

Anhand der Debug-Nachricht sollten Sie prüfen, warum die Waschmaschine-App nicht das richtige Gerät in der EXECUTE-Antwort enthält.

Ursache des Fehlers ermitteln

Suchen Sie in functions/index.js den EXECUTE-Handler (im Array onExecute), der den Status der einzelnen Befehle und den neuen Gerätestatus zurückgibt. Das Einfügen von Geräte-IDs in eine EXECUTE-Antwort hängt von der Auflösung der updateDevice-Funktion ab:

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 weiter, wie die updateDevice-Funktion das Pausieren / Fortsetzen in der Waschmaschine verarbeitet. Der String für den Befehl „Pause“/„Fortsetzen“ ist falsch:

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 identifiziert haben, können Sie den String für den Befehl „Pause“/„Fortsetzen“ 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);
};

Fehlerbehebung testen

Stellen Sie den aktualisierten Code mit der Firebase CLI bereit:

firebase deploy --only functions

Wiederholen Sie die folgenden Sprachbefehle. Assistant reagiert jetzt richtig, wenn Sie die Waschmaschine pausieren oder fortsetzen.

„Hey Google, pausiere meine Waschmaschine.“

=>

„Alles klar, die Waschmaschine wird pausiert.“

„Hey Google, setze meine Waschmaschine fort.“

=>

„Ok, die Wiedergabe der Waschmaschine wird fortgesetzt.“

Sie können auch den aktuellen Zustand Ihrer Waschmaschine testen, indem Sie Fragen stellen.

„Hey Google, ist meine Waschmaschine an?“

„Hey Google, läuft meine Waschmaschine?“

„Hey Google, in welchem Spülgang ist meine Waschmaschine?“

4. Aktion mit der Test-Suite testen

Zusätzlich zu den manuellen Tests kannst du mit der automatisierten Test-Suite für Smart Home Anwendungsfälle anhand der mit deiner Aktion verknüpften Gerätetypen und Traits validieren. Die Test-Suite führt eine Reihe von Tests durch, um Probleme in deiner Aktion zu erkennen, und zeigt informative Meldungen für fehlgeschlagene Testläufe an, um die Fehlerbehebung zu beschleunigen, bevor die Ereignisprotokolle analysiert werden.

Test-Suite für Smart Home ausführen

So testest du deine Smart-Home-Aktion der Test-Suite:

  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 Testeinstellungen wird die Test-Suite angezeigt, in der der Gerätetyp und die Merkmale der Waschmaschine aufgelistet werden.

78ed6a1ebdb581bf.png

  1. Deaktivieren Sie die Option Synchronisierung der Testanfrage synchronisieren, da die Beispiel-Waschmaschine keine Benutzeroberfläche hat, um die Waschmaschine hinzuzufügen, zu entfernen oder umzubenennen. In einem Produktionssystem muss die Synchronisierung anfordern immer ausgelöst werden, wenn der Nutzer Geräte hinzufügt, entfernt oder umbenennt.
  2. Klicken Sie auf WEITER, um mit der Ausführung des Tests zu beginnen.

Nachdem die Test-Suite ausgeführt wurde, kannst du dir die Ergebnisse der Testläufe ansehen. Du wirst zwei fehlgeschlagene Testläufe mit der entsprechenden Fehlermeldung sehen:

5838d10631c98ed2.png

Um die Fehler bei der Smart-Home-Aktion beheben zu können, müssen Sie zuerst die Fehlermeldung analysieren und so die Ursache des Fehlers ermitteln.

Fehlermeldung analysieren

Um Entwicklern bei der Identifizierung der Ursache zu helfen, zeigt die Test-Suite für jeden fehlgeschlagenen Testlauf Fehlermeldungen an, die den Grund für den Fehler angeben.

Für den ersten fehlgeschlagenen Testlauf oben

99e4e5d06965a8a7.png

Die Fehlermeldung zeigt an, dass die Test-Suite in den von deiner Smart-Home-Aktion gemeldeten Status "isPause": true erwartet, die tatsächlichen Status umfassen jedoch nur "isPause": false.

Außerdem gibt die Fehlermeldung des zweiten nicht bestandenen Testlaufs an, dass die Status in der QUERY-Antwort deiner Smart-Home-Aktion „"isPause": true“ enthalten. Diese unterscheidet sich von "isPause": false in den von deiner Smart-Home-Aktion gemeldeten Status:

fdb5124102e3a37.png

Gemäß beiden Fehlermeldungen solltest du anschließend prüfen, ob in deinen Aktionsbericht isPaused mit dem richtigen Wert angegeben ist.

Ursache des Fehlers ermitteln

Öffnen Sie functions/index.js. Sie enthält die reportstate-Funktion, mit der Statusänderungen über den Berichtsstatus an Home Graph übertragen werden. Prüfen Sie die Nutzlast des Berichtsstatus. Sie werden feststellen, dass bei der Nutzlast der Status isPaused fehlt. Das ist genau das, was die Test-Suite in den fehlgeschlagenen Testläufen geprü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 „Berichtsstatus“ 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,
              },
            },
          },
        },
      };
      ...
    });

Fehlerbehebung testen

Stellen Sie den aktualisierten Code mit der Firebase CLI bereit:

$ firebase deploy --only functions

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

148837f85d377dd6.png

5. Glückwunsch

17d485868a6771bc.png

Glückwunsch! Sie haben erfolgreich gelernt, wie Sie Probleme mit Smart-Home-Aktionen mithilfe der Test-Suite für Smart Home sowie mit Google Cloud-Messwerten und -Logging beheben können.

Weitere Informationen

Bauen Sie auf diesem Codelab auf und versuchen Sie es mit den folgenden Übungen und zusätzlichen Ressourcen:

Weitere Informationen zum Testen und Einreichen einer Aktion zur Überprüfung sowie zum Zertifizierungsprozess für die Veröffentlichung deiner Aktion für Nutzer