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.
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
- Entwicklerleitfaden Smart-Home-Aktion erstellen lesen
- Codelab Smart-Home-Geräte mit Google Assistant verbinden ausführen
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
- Ein Webbrowser wie Google Chrome
- Ein iOS- oder Android-Gerät, auf dem die Google Home App installiert ist
- Node.js Version 10.16 oder höher
- Ein Google Cloud-Rechnungskonto
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 , um HomeGraph über Synchronisierung anfordern mit den neuesten Gerätemetadaten aus der defekten Waschmaschine-App zu aktualisieren:
Öffnen Sie die Google Home App und sehen Sie nach, ob die Waschmaschine mit dem Namen Fehlerhafte Waschmaschine angezeigt wird.
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.
- Rufen Sie in der Actions Console die Seite „Projekte“ auf.
- Wählen Sie Ihr Smart-Home-Projekt aus.
- Wählen Sie den Tab Analytics aus und klicken Sie auf Go to Google Cloud Platform (Zur Google Cloud Platform).
- 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.
- Scrollen Sie nach unten zum Diagramm Fehler in der Cloud-Ausführung – Statusaufschlüsselung, um die Fehlercodes für den hervorgehobenen Zeitraum anzusehen.
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.
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.“
=>
„Okay, die Waschmaschine wird pausiert.“
„Hey Google, fahre meine Waschmaschine fort.“
=>
„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:
- Öffnen Sie in Ihrem Webbrowser die Test Suite für Smart Home.
- Melden Sie sich über die Schaltfläche oben rechts in Google an. Dadurch kann die Test-Suite die Befehle direkt an Google Assistant senden.
- Gib im Feld Projekt-ID die Projekt-ID deiner Smart-Home-Aktion ein. Klicken Sie dann auf WEITER, um fortzufahren.
- Im Schritt Test Settings (Testeinstellungen) werden in der Test-Suite der Gerätetyp und die Merkmale der Waschmaschine aufgelistet.
- 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.
- 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:
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
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:
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.
5. Glückwunsch
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:
- Füge deinem Gerät weitere unterstützte Traits hinzu und teste sie mit der Test-Suite.
- Erstellen Sie Dashboards, richten Sie Warnungen ein und greifen Sie programmatisch auf Messwertdaten zu, um nützliche Nutzungsmesswerte zu Ihrer Aktion zu erhalten.
- Lokale Auftragsabwicklung für Smart Homes
- Sehen Sie sich unser GitHub-Beispiel an, um mehr zu erfahren.
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.