1. Prima di iniziare
In qualità di sviluppatore IoT (Internet of Things), puoi creare azioni per la smart home che consentono agli utenti di controllare i propri dispositivi tramite i controlli touch nell'app Google Home e i comandi vocali con l'Assistente Google.
L'apprendimento degli strumenti di debug per le azioni per la smart home è un passaggio importante per creare un'integrazione della qualità di produzione con l'Assistente Google. Per semplificare monitoraggio e debug, sono disponibili le metriche di Google Cloud Platform (GCP), Logging e la Test Suite per la smart home utili per identificare e risolvere i problemi relativi alle tue Azioni.
Prerequisiti
- Leggi la guida per gli sviluppatori Creare un'azione per la smart home
- Esegui il codelab relativo alla connessione dei dispositivi per la smart home all'Assistente Google
Cosa creerai
In questo codelab, eseguirai il deployment di un'Azione per la smart home con due difetti, che collegherai all'assistente, quindi eseguirai il debug dei difetti dell'Azione tramite Test Suite per la smart home, le metriche per la smart home, le metriche della piattaforma Google Cloud e il logging.
Cosa imparerai a fare
- Come utilizzare le metriche e il logging di Google Cloud per identificare e risolvere i problemi di produzione
- Come utilizzare Test Suite per la smart home al fine di identificare problemi funzionali e relativi alle API
Che cosa ti serve
- Un browser web, ad esempio Google Chrome.
- Un dispositivo iOS o Android su cui è installata l'app Google Home.
- Node.js 10.16 o versioni successive
- Un account di fatturazione Google Cloud.
2. Esegui l'app difettosa
Ottieni il codice sorgente
Fai clic sul seguente link per scaricare l'esempio per questo codelab sulla tua macchina di sviluppo:
...oppure clona il repository GitHub dalla riga di comando:
$ git clone https://github.com/google-home/smarthome-debug.git
Informazioni sul progetto
L'app lavasciuga contiene le seguenti sottodirectory:
public
: UI frontend per controllare e monitorare facilmente lo stato della lavatrice smart.functions
: un servizio cloud completamente implementato che gestisce la smartwash con Cloud Functions for Firebase e Firebase Realtime Database.
Connettersi a Firebase
Apri il terminale sulla macchina di sviluppo. Vai alla directory washer-faulty
, quindi configura l'interfaccia a riga di comando di Firebase con il tuo progetto Actions integrato nel connettore dei dispositivi per la smart home al codelab dell'Assistente Google:
$ cd washer-faulty $ firebase use <project-id>
Eseguire il deployment in Firebase
Vai alla cartella functions
e installa tutte le dipendenze necessarie utilizzando npm.
$ cd functions $ npm install
Nota:se viene visualizzato il messaggio seguente, puoi ignorarlo e procedere. L'avviso è dovuto ad alcune dipendenze meno recenti. Puoi trovare ulteriori dettagli qui.
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
Ora che hai installato le dipendenze e configurato il progetto, puoi eseguire il deployment dell'app lavasciuga difettosa.
$ firebase deploy
Questo è l'output della console che dovresti vedere:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.firebaseapp.com
Aggiorna Home Graph
Apri l'URL di hosting nel browser (https://<project-id>.firebaseapp.com
) per visualizzare l'app web. Nell'interfaccia utente web, fai clic sul pulsante Aggiorna per aggiornare Home Graph tramite Richiedi sincronizzazione con i metadati del dispositivo più recenti dall'app della lavatrice difettosa:
Apri l'app Google Home e verifica di vedere il dispositivo della lavatrice denominato Lavatrice difettosa.
3. Testare l'azione
Dopo aver implementato il progetto, verifica che l'Azione controlli la lavatrice.
Prova la lavatrice
Controlla la modifica del valore quando provi uno dei seguenti comandi vocali tramite il telefono:
"Hey Google, accendi la lavatrice."
"Hey Google, avvia la lavatrice."
"Hey Google, metti in pausa la lavatrice."
"Hey Google, riprendi la lavatrice."
"Hey Google, interrompi la lavatrice."
Quando metti in pausa o riprendi la lavatrice, noterai che l'assistente risponde tramite comandi vocali quando c'è qualcosa che non va:
"Spiacenti, non ho potuto raggiungere <nome visualizzato del progetto>."
Per eseguire il debug di questo problema, devi prima disporre di ulteriori informazioni sull'errore per restringere il campo e identificare la causa principale.
Dashboard di dati e analisi per la smart home
Un buon punto per esaminare gli errori è la dashboard di Smarthome Analytics, che aggrega grafici di metriche di utilizzo e salute per Cloud fulfillment:
- Le metriche relative all'utilizzo riflettono la tendenza di utilizzo dell'azione per la smart home, inclusi il numero di utenti attivi giornalieri e il numero totale di richieste per l'evasione dell'ordine.
- Le metriche relative a Salute ti consentono di monitorare un'anomalia nell'azione per la tua smart home, coprendo la latenza delle richieste, la percentuale di successo e l'analisi degli errori.
Per individuare la causa dell'errore, segui i passaggi riportati di seguito per accedere alla dashboard del progetto.
- Nella Console di Actions, vai alla pagina Progetti.
- Seleziona il progetto per la smart home.
- Scegli la scheda Analytics e fai clic su Vai a Google Cloud.
- Verrà visualizzato un elenco di dashboard per il tuo progetto su Google Cloud. Seleziona la dashboard Analisi di Google Home - Integrazione con il cloud.
- Scorri verso il basso fino al grafico Errori di Cloud Fulfillment - Analisi dello stato per visualizzare i codici di errore per l'intervallo di tempo evidenziato.
Il codice di errore PARTNER_RESPONSE_MISSING_DEVICE
fornisce un suggerimento sulla causa principale. Quindi, recupera i log eventi in base al codice di errore per maggiori dettagli.
Accedere ai log eventi
Per ulteriori dettagli sull'errore, accedi ai log eventi per le azioni della tua smart home tramite Cloud Logging.
Apri il menu di navigazione in Google Cloud Platform e, in Operazioni, seleziona Logging > Esplora log per accedere ai log eventi del progetto. In alternativa, puoi cercare Esplora log nella casella di ricerca.
Nella sezione Query, inserisci la query PARTNER_RESPONSE_MISSING_DEVICE
e fai clic su Esegui query. I log corrispondenti alla query vengono visualizzati nella sezione Risultati delle query.
Il log degli errori mostra un evento della smart home con i dettagli dell'errore che indicano:
- L'azione eseguita dall'utente è il "ripreso della lavatrice" (
actionType:
"STARTSTOP_UNPAUSE
"), corrispondente al recente comando vocale non riuscito. - Il messaggio di debug associato è "
JSON response does not include device.
"
In base al messaggio di debug, devi verificare perché l'app lavatrice non include il dispositivo corretto nella risposta EXECUTE
.
Identifica la causa principale dell'errore
In functions/index.js
, trova il gestore EXECUTE
(nell'array onExecute
) che restituisce lo stato di ogni comando e il nuovo stato del dispositivo. L'inserimento degli ID dispositivo in una risposta EXECUTE
dipende dalla risoluzione della funzione updateDevice
:
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)));
}
}
}
Controlla ulteriormente in che modo la funzione updateDevice
gestisce la pausa / ripresa sulla lavatrice. Troverai che la stringa da associare al comando pausa / riprendi non è corretta:
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);
};
Correggere l'errore
Ora che hai identificato la causa principale dell'errore, puoi correggere la stringa per il comando di pausa / ripresa:
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);
};
Verifica la correzione
Esegui il deployment del codice aggiornato utilizzando l'interfaccia a riga di comando di Firebase:
firebase deploy --only functions
Riprova a eseguire i seguenti comandi vocali e vedrai che l'assistente risponde correttamente quando metti in pausa o riprendi la lavatrice.
"Hey Google, metti in pausa la lavatrice."
=>
"Certo, metto in pausa la lavatrice."
"Hey Google, riprendi la lavatrice."
=>
"Ok, riprendo la lavatrice."
Puoi anche verificare lo stato attuale della lavatrice ponendoti delle domande.
"Hey Google, la lavatrice è accesa?"
"Hey Google, la lavatrice è accesa?"
"Hey Google, a che ciclo è la lavatrice?"
4. Testare l'azione con Test Suite
Oltre a eseguire test manuali, puoi utilizzare la Test Suite automatica per la smart home per convalidare i casi d'uso in base ai tipi di dispositivi e ai tratti associati all'Azione. La Test Suite esegue una serie di test per rilevare problemi nell'Azione e mostra messaggi informativi sugli scenari di test non riusciti per accelerare il debug prima di analizzare i log eventi.
Eseguire Test Suite per la smart home
Segui queste istruzioni per testare l'Azione per la smart home con Test Suite:
- Nel browser web, apri la Suite di test per la smart home.
- Accedi a Google utilizzando il pulsante nell'angolo in alto a destra. In questo modo il Test Suite può inviare i comandi direttamente all'Assistente Google.
- Nel campo ID progetto, inserisci l'ID progetto dell'azione per la smart home. Fai clic su AVANTI per continuare.
- Nel passaggio Impostazioni di test, vedrai l'elenco del Test Suite relativo al tipo di dispositivo e alle caratteristiche della lavatrice.
- Disattiva l'opzione Richiesta di sincronizzazione di test poiché l'app della lavatrice di esempio non ha una UI per l'aggiunta, la rimozione o il ridenominazione della lavatrice. In un sistema di produzione, devi attivare Richiedi sincronizzazione ogni volta che l'utente aggiunge / rimuove / rinomina i dispositivi.
- Fai clic su AVANTI per iniziare a eseguire il test.
Al termine dell'esecuzione della Test Suite, visualizza i risultati degli scenari di test. Vedrai due scenari di test non riusciti con il relativo messaggio di errore:
Per eseguire il debug dell'Azione per la smart home, devi prima identificare la causa principale dell'errore analizzando il messaggio.
Analizza il messaggio di errore
Per aiutare gli sviluppatori a identificare la causa principale, Test Suite mostra messaggi di errore per ogni scenario di test non riuscito che indicano il motivo dell'errore.
Per il primo scenario di test non riuscito,
il relativo messaggio di errore indica che il Test Suite prevede "isPause": true
negli stati segnalati dall'azione per la smart home, mentre gli stati effettivi includono solo "isPause": false
.
Inoltre, il messaggio di errore del secondo scenario di test non riuscito indica che gli stati nella risposta QUERY
dell'Azione per la smart home includono "isPause": true
, che è diverso da "isPause": false
negli stati segnalati dall'Azione per la smart home:
In base a entrambi i messaggi di errore, dovresti verificare se nei tuoi report Azioni è indicato il valore isPaused
con il valore corretto.
Identifica la causa principale dell'errore
Apri functions/index.js
, che contiene la funzione reportstate
che pubblica le modifiche di stato nel grafico Home tramite lo stato del report. Esaminando il payload dello stato del report, scoprirai che nel payload manca lo stato isPaused
, che è esattamente quello che il Test Suite ha cercato negli scenari di test non riusciti.
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,
});
...
});
Correggere l'errore
Ora che hai identificato la causa principale dell'errore, rivedi functions/index.js
aggiungendo lo stato isPaused
al payload dello stato del report:
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,
},
},
},
},
};
...
});
Verifica la correzione
Esegui il deployment del codice aggiornato utilizzando l'interfaccia a riga di comando di Firebase:
$ firebase deploy --only functions
Esegui di nuovo il Test Suite per la smart home: vedrai che tutti gli scenari di test sono stati superati.
5. Complimenti
Complimenti! Hai imparato a risolvere i problemi relativi alle azioni per la smart home con la Test Suite per la smart home, le metriche Google Cloud e Logging.
Scopri di più
Partendo da questo codelab, prova gli esercizi seguenti ed esplora risorse aggiuntive:
- Aggiungi altri trait supportati al tuo dispositivo e testali con il Test Suite.
- Crea dashboard, configura gli avvisi e accedi ai dati delle metriche in modo programmatico per ricevere utili metriche di utilizzo relative all'Azione.
- Scopri la distribuzione locale per la smart home.
- Per saperne di più, guarda il nostro esempio di GitHub.
Scopri di più su come testare e inviare un'Azione per la revisione, inclusa la procedura di certificazione per la pubblicazione dell'Azione per gli utenti.