Fehler im Smart Home beheben

1. Hinweis

Als IoT-Entwickler können Sie Cloud-zu-Cloud-Integrationen erstellen, mit denen Ihre Nutzer ihre Geräte über Touchbedienung in der Google Home App und Sprachbefehle mit Google Assistant steuern können.

a4657871181b5ad2.gif

Die De-Bug-Tools für Cloud-zu-Cloud-Integrationen zu lernen, ist ein wichtiger Schritt, um eine Integration mit Google Assistant in Produktionsqualität zu erstellen. Für eine einfache Überwachung und Fehlerbehebung stehen Ihnen die Messwerte der Google Cloud Platform (GCP), Logging und die Testsuite für Smart Home zur Verfügung, mit denen Sie Probleme bei Ihren Integrationen erkennen und beheben können.

Voraussetzungen

Umfang

In diesem Codelab stellen Sie eine Cloud-zu-Cloud-Integration mit zwei Fehlern bereit und verbinden sie mit Assistant. Anschließend beheben Sie die Fehler der Integration mithilfe der Test Suite für Smart Home und der Google Cloud Platform (GCP)-Messwerte und ‑Protokolle.

Aufgaben in diesem Lab

  • Produktionsprobleme mithilfe von GCP-Messwerten und ‑Protokollen erkennen und beheben
  • Test Suite für Smart Home zur Identifizierung von Funktions- und API-Problemen verwenden

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:

Sie können das GitHub-Repository auch über die Befehlszeile klonen:

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

Informationen zum Projekt

Die App für die Waschmaschine enthält die folgenden Unterverzeichnisse:

  • public: Eine Frontend-Benutzeroberfläche, mit der sich der Status der intelligenten Waschmaschine ganz einfach steuern und beobachten lässt.
  • 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 ein Terminal auf Ihrem Entwicklungscomputer. Rufen Sie das Verzeichnis washer-faulty auf und richten Sie die Firebase CLI mit Ihrem Integrationsprojekt ein, das Sie im Codelab „Smart-Home-Geräte mit Google Assistant verbinden“ erstellt haben:

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

In Firebase bereitstellen

Rufe den Ordner functions auf und installiere alle erforderlichen Abhängigkeiten mit npm..

$ cd functions
$ npm install

Hinweis:Wenn Sie die folgende Meldung sehen, können Sie sie ignorieren und fortfahren. Die Warnung ist auf einige ältere Abhängigkeiten zurückzuführen. Weitere Informationen

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

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

$ firebase deploy

Die Ausgabe der Konsole sollte so aussehen:

...

✔ Deploy complete!

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

HomeGraph aktualisieren

Öffne die Hosting-URL in deinem Browser (https://<firebase-project-id>.firebaseapp.com), um die Web-App aufzurufen. Klicke in der Web-UI auf die Schaltfläche Aktualisierenae8d3b25777a5e30.png, um HomeGraph über Synchronisierung anfordern mit den neuesten Gerätemetadaten aus der fehlerhaften Waschmaschinen-App zu aktualisieren:

6f2b1344179977cf.png

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

e357de6a7faff925.png

3. Integration testen

Testen Sie nach dem Bereitstellen Ihres Projekts, ob Ihre Integration die Waschmaschine steuert.

Waschmaschine testen

Prüfen Sie die Wertänderung, wenn Sie einen der folgenden Sprachbefehle über Ihr Smartphone geben:

„Hey Google, schalte meine Waschmaschine ein.“

„Hey Google, starte meine Waschmaschine.“

„Hey Google, pausiere meine Waschmaschine.“

„Hey Google, setze den Waschvorgang fort.“

„Hey Google, schalte meine Waschmaschine aus.“

Wenn Sie die Waschmaschine pausieren oder fortsetzen, antwortet Assistant per Sprachausgabe, dass ein Problem vorliegt:

„Es tut mir leid, aber ich konnte <Anzeigename des Projekts> nicht erreichen.“

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

Smarthome Analytics-Dashboard

Im Smarthome Analytics-Dashboard finden Sie Diagramme mit Nutzungs- und Fehlermesswerten für die Cloud-Ausführung:

  • Die Messwerte unter Nutzung spiegeln den Nutzungstrend Ihrer Cloud-zu-Cloud-Integration wider, einschließlich der Anzahl der täglich aktiven Nutzer und der Gesamtzahl der Anfragen an die Auftragsausführung.
  • Mit den Messwerten für den Zustand können Sie Anomalien bei Ihrer Cloud-zu-Cloud-Integration im Hinblick auf Anfragelatenz, Erfolgsprozentsatz und Fehleraufschlüsselung im Blick behalten.

Wenn Sie die Ursache des Fehlers eingrenzen möchten, greifen Sie wie unten beschrieben auf das Projekt-Dashboard zu.

  1. Rufen Sie in der Developer Console die Seite „Projekte“ auf.
  2. Wählen Sie Ihr Smart-Home-Projekt aus.
  3. Klicken Sie im Menü auf der linken Seite auf den Tab Analytics.

b1735bbe11a7aff8.png

  1. Daraufhin wird eine Liste der Dashboards für Ihr Projekt in Google Cloud angezeigt. Wählen Sie das Dashboard Google Home Analytics – Cloud-Integration aus.

5edd3751323176dd.png

  1. Scrollen Sie nach unten zum Diagramm Cloud Fulfillment Errors – Status Breakdown (Cloud-Ausführungsfehler – Statusaufschlüsselung), um die Fehlercodes für den markierten Zeitraum aufzurufen.

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 Informationen zu erhalten.

Zugriff auf Ereignisprotokolle

Wenn Sie weitere Informationen zum Fehler benötigen, rufen Sie über Cloud Logging die Ereignisprotokolle für Ihre Cloud-zu-Cloud-Integration auf.

Öffnen Sie das Navigationsmenü in der Google Cloud-Plattform 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 im Suchfeld nach Log-Explorer suchen.

Geben Sie im Eingabefeld Alle Felder durchsuchen die Abfrage PARTNER_RESPONSE_MISSING_DEVICE ein und klicken Sie auf Abfrage ausführen. Die mit der Abfrage übereinstimmenden Protokolle werden im Bereich Ergebnisse angezeigt.

747cca0f1249a5a.png

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

  • Die vom Nutzer ausgeführte Aktion ist „Waschmaschine fortsetzen“ (actionType:STARTSTOP_UNPAUSE“), was dem kürzlich fehlgeschlagenen Sprachbefehl entspricht.
  • Die zugehörige Fehlerbehebungsmeldung lautet „JSON response does not include device.“.

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

Ursache des Fehlers ermitteln

Suche in functions/index.js den EXECUTE-Handler (im onExecute-Array), 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 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)));
     }
   }
 }

Wenn Sie prüfen, wie die Funktion updateDevice die Pause / Wiederaufnahme der Waschmaschine verarbeitet, stellen Sie fest, dass der String, der mit dem Befehl „Pause / Wiederaufnahme“ abgeglichen werden soll, 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 die Ursache des Fehlers ermittelt haben, können Sie den String für den Befehl „pausieren / 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 antwortet jetzt richtig, wenn Sie die Waschmaschine pausieren oder fortsetzen.

„Hey Google, pausiere meine Waschmaschine.“

=>

„Klar, ich halte die Waschmaschine an.“

„Hey Google, setze den Waschvorgang fort.“

=>

„Verstanden, ich setze die Waschmaschine fort.“

Sie können auch Fragen zum aktuellen Status Ihrer Waschmaschine stellen.

„Hey Google, ist meine Waschmaschine an?“

„Hey Google, läuft meine Waschmaschine?“

„Hey Google, welchen Zyklus läuft meine Waschmaschine gerade?“

4. Integration mit der Test-Suite testen

Sie können nicht nur manuell testen, sondern auch die automatisierte Test-Suite für Smart Home verwenden, um Anwendungsfälle basierend auf den Gerätetypen und -merkmalen zu validieren, die mit Ihrer Integration verknüpft sind. Die Testsuite führt eine Reihe von Tests durch, um Probleme in Ihrer Integration zu erkennen. Bei fehlgeschlagenen Testfällen werden informative Meldungen angezeigt, um das Beheben von Fehlern zu beschleunigen, bevor Sie sich mit den Ereignisprotokollen befassen.

Testsuite für Smart Home ausführen

So testen Sie Ihre Cloud-zu-Cloud-Integration mit der Test-Suite:

  1. Öffnen Sie in Ihrem Webbrowser die Testsuite für Smart Home.
  2. Melden Sie sich über die Schaltfläche rechts oben bei Google an. So kann die Testsuite die Befehle direkt an Google Assistant senden.
  3. Geben Sie im Feld Projekt-ID die Projekt-ID Ihrer Cloud-zu-Cloud-Integration ein. Klicken Sie dann auf WEITER, um fortzufahren.
  4. Im Schritt Testeinstellungen sehen Sie in der Testsuite den Gerätetyp und die Eigenschaften der Waschmaschine.

78ed6a1ebdb581bf.png

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

Sehen Sie sich nach Abschluss der Testsuite die Ergebnisse der Testfälle an. Sie sehen zwei fehlgeschlagene Testfälle mit der entsprechenden Fehlermeldung:

5838d10631c98ed2.png

Wenn Sie die Cloud-zu-Cloud-Integration auf Fehler prüfen möchten, müssen Sie zuerst die Fehlermeldung analysieren, um die Ursache des Fehlers zu ermitteln.

Fehlermeldung analysieren

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

Für den ersten fehlgeschlagenen Testfall oben:

99e4e5d06965a8a7.png

Die Fehlermeldung gibt an, dass in der Test Suite "isPause": true in den Statusmeldungen Ihrer Cloud-zu-Cloud-Integration erwartet wird, die tatsächlichen Status enthalten jedoch nur "isPause": false.

Außerdem wird in der Fehlermeldung des zweiten fehlgeschlagenen Testfalls angegeben, dass die Status in der QUERY-Antwort Ihrer Cloud-zu-Cloud-Integration "isPause": true enthalten, was sich von "isPause": false in den Status unterscheidet, die von Ihrer Cloud-zu-Cloud-Integration gemeldet wurden:

fdb5124102e3a37.png

Gemäß beiden Fehlermeldungen sollten Sie dann prüfen, ob in Ihren Integrationsberichten isPaused mit dem richtigen Wert angegeben ist.

Ursache des Fehlers ermitteln

Öffnen Sie functions/index.js, die die Funktion reportstate enthält, die Statusänderungen über „Status melden“ in den Home Graph postet. Wenn Sie die Nutzlast für den Berichtsstatus prüfen, stellen Sie fest, dass der Status isPaused fehlt. Genau danach hat die Test Suite in den fehlgeschlagenen Testfällen gesucht.

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 die Ursache des Fehlers ermittelt haben, ändern Sie functions/index.js, indem Sie der Berichtsstatus-Nutzlast 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 alle Testfälle bestanden.

148837f85d377dd6.png

5. Glückwunsch

17d485868a6771bc.png

Glückwunsch! Sie haben gelernt, wie Sie Probleme bei der Cloud-zu-Cloud-Integration über die Test Suite für Smart Home und GCP-Messwerte und ‑Protokolle beheben.

Weitere Informationen

Als Nächstes können Sie die folgenden Übungen ausprobieren und sich zusätzliche Ressourcen ansehen:

Außerdem erfährst du mehr darüber, wie du eine Integration testen und zur Überprüfung einreichen kannst, einschließlich des Zertifizierungsverfahrens, um deine Integration für Nutzer zu veröffentlichen.