1. Prima di iniziare
In qualità di sviluppatore di internet of Things (IoT), puoi creare azioni per la smart home che offrono agli utenti la possibilità di controllare i propri dispositivi tramite i controlli touch nell'app Google Home e i comandi vocali con l'Assistente Google.
Imparare a conoscere gli strumenti di debug per le azioni della smart home è un passaggio importante per creare un'integrazione di qualità della produzione con l'Assistente Google. Per facilitare il monitoraggio e il debug, puoi utilizzare le metriche di Google Cloud Platform (Google Cloud), Logging e la Test Suite per la smart home per aiutarti a identificare e risolvere i problemi relativi alle tue azioni.
Prerequisiti
- Leggi la guida per gli sviluppatori nell'articolo Creare un'azione per la smart home
- Eseguire il codelab Connettere i 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 e la collegherai all'assistente, quindi eseguirai il debug dei difetti dell'azione tramite Test Suite per la smart home e Metriche e logging di Google Cloud Platform (Google Cloud).
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 per 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 sia 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 link seguente per scaricare l'esempio per questo codelab sul tuo computer di sviluppo:
...oppure clonare il repository GitHub dalla riga di comando:
$ git clone https://github.com/google-home/smarthome-debug.git
Informazioni sul progetto
L'app lavatrice contiene le seguenti sottodirectory:
public
: un'interfaccia utente frontend per controllare e monitorare facilmente lo stato della lavatrice smart.functions
: un servizio cloud completamente implementato che gestisce la lavatrice smart con Cloud Functions for Firebase e Firebase Realtime Database.
Connettersi a Firebase
Apri il terminale sul computer di sviluppo. Vai alla directory washer-faulty
, quindi configura l'interfaccia a riga di comando di Firebase con il progetto Actions integrato in Collegare i 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 precedenti e 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 lavatrice errata.
$ 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 Hosting URL (URL di hosting) nel browser (https://<project-id>.firebaseapp.com
) per visualizzare l'app web. Nella UI web, fai clic sul pulsante Aggiorna per aggiornare HomeGraph tramite Richiedi sincronizzazione con i metadati del dispositivo più recenti dall'app lavatrice difettosa:
Apri l'app Google Home e verifica di vedere la lavatrice denominata Lavatrice malfunzionante.
3. Testa l'azione
Dopo aver distribuito il progetto, verifica che l'azione controlli la lavatrice.
Prova la lavatrice
Verifica la variazione del valore quando provi uno dei seguenti comandi vocali tramite lo smartphone:
"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 / riprendi la lavatrice noterai che l'assistente risponde che qualcosa non va tramite comandi vocali:
"Spiacenti, non ho potuto raggiungere <nome visualizzato del progetto>."
Per eseguire il debug di questo problema, hai prima bisogno di ulteriori informazioni sull'errore per restringere e identificare la causa principale.
Dashboard di analisi Smarthome
Un buon posto per esaminare gli errori è la dashboard di Analytics Smarthome, che aggrega i grafici delle metriche di utilizzo e integrità per il tuo fulfillment cloud:
- Le metriche Utilizzo riflettono la tendenza di utilizzo dell'azione per la smart home, inclusi il numero di utenti attivi giornalieri e il conteggio totale delle richieste per soddisfare la tua richiesta.
- Le metriche relative alla Salute ti aiutano a monitorare la presenza di anomalie nell'azione per la smart home, coprendo la latenza delle richieste, la percentuale di successo e la suddivisione degli errori.
Per restringere la causa dell'errore, segui i passaggi riportati di seguito per accedere alla dashboard del progetto.
- Nella console Actions, vai alla pagina Progetti.
- Seleziona il tuo progetto per la smart home.
- Scegli la scheda Analytics e fai clic su Vai alla piattaforma Google Cloud.
- Verrà visualizzato un elenco di dashboard per il tuo progetto su Google Cloud. Seleziona la dashboard Analisi della home page di Google - Integrazione Cloud.
- Scorri verso il basso fino al grafico Errori Cloud Fulfillment - Ripartizione 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 per la causa principale. Successivamente, recupera i log eventi in base al codice di errore per ulteriori dettagli.
Accedere ai log eventi
Per ottenere maggiori dettagli sull'errore, accedi ai log eventi delle azioni della 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 intrapresa dall'utente è "ripresa la 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, dovresti verificare perché l'app lavatrice non include il dispositivo corretto nella risposta EXECUTE
.
Identificare 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 / riprendi sulla lavatrice e riscontrerai che la stringa corrispondente 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 del comando pause / riprendi:
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 ora l'assistente risponde correttamente quando metti in pausa / 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 testare lo stato attuale della lavatrice ponendo delle domande.
"Hey Google, la lavatrice è accesa?"
"Hey Google, la lavatrice funziona?"
"Hey Google, a che ciclo è la lavatrice?"
4. Testa l'azione con Test Suite
Oltre ai test manuali, puoi utilizzare la Test Suite per la smart home automatica per convalidare i casi d'uso in base ai tipi di dispositivi e ai trait associati all'Azione. La Test Suite esegue una serie di test per rilevare i problemi dell'azione e mostra messaggi informativi per gli scenari di test non riusciti per accelerare il debug prima di analizzare i log eventi.
Esegui la Test Suite per la smart home
Segui queste istruzioni per testare l'Azione della tua smart home tramite Test Suite:
- Nel browser web, apri la Test Suite per la smart home.
- Accedi a Google utilizzando il pulsante nell'angolo in alto a destra. In questo modo la Test Suite può inviare i comandi direttamente all'Assistente Google.
- Nel campo ID progetto, inserisci l'ID progetto dell'azione per la smart home. e fai clic su AVANTI per continuare.
- Nel passaggio Impostazioni di test, il Test Suite elenca il tipo di dispositivo e le caratteristiche della lavatrice.
- Disattiva l'opzione Test Request Sync (Richiesta di prova di sincronizzazione), poiché l'app di esempio per la lavatrice non ha UI per aggiungere, rimuovere o rinominare la lavatrice. In un sistema di produzione, devi attivare l'opzione Richiedi sincronizzazione ogni volta che l'utente aggiunge, rimuove o rinomina 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. Noterai due scenari di test non riusciti rilevati con il rispettivo messaggio di errore:
Per eseguire il debug dell'azione per la smart home per individuare l'errore, devi prima identificare la causa principale analizzando il messaggio di errore.
Analizzare 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 riportato sopra,
il suo messaggio di errore indica Test Suite prevede che "isPause": true
negli stati segnalati dall'azione per la smart home, ma 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
all'azione per la smart home includono "isPause": true
, che differisce da "isPause": false
negli stati segnalati dall'azione per la smart home:
In base a entrambi i messaggi di errore, devi verificare se i report sulle azioni mostrano lo stato isPaused
con il valore corretto.
Identificare la causa principale dell'errore
Apri functions/index.js
, che contiene la funzione reportstate
che invia le modifiche di stato al Grafico domestico tramite lo stato del report. Esamina il payload dello stato del report e scoprirai che al payload manca lo stato isPaused
, che è esattamente quello che la Test Suite ha verificato 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 la Test Suite per la smart home e tutti gli scenari di test sono stati superati.
5. Complimenti
Complimenti! Hai imparato a risolvere i problemi di azione per la smart home tramite la Test Suite per la smart home e Metriche Google Cloud e logging.
Scopri di più
Partendo da questo codelab, prova i seguenti esercizi ed esplora risorse aggiuntive:
- Aggiungi altri trait supportati al tuo dispositivo e testali con la Test Suite.
- Crea dashboard, imposta avvisi e accedi ai dati delle metriche in modo programmatico per ricevere utili metriche di utilizzo relative all'Azione.
- Esplora la distribuzione locale per la smart home.
- Dai un'occhiata all'esempio di GitHub per saperne di più.
Puoi anche scoprire di più su come testare e inviare un'azione per la revisione, inclusa la procedura di certificazione per pubblicare l'azione per gli utenti.