1. Prima di iniziare
In qualità di sviluppatore di internet of things (IoT), puoi creare integrazioni cloud-to-cloud 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 utilizzare gli strumenti di debug per le integrazioni cloud-to-cloud è un passaggio importante per creare un'integrazione con l'Assistente Google di qualità di produzione. Per semplificare il monitoraggio e il debug, sono disponibili Metriche e Logging della piattaforma Google Cloud (GCP) e la Suite di test per la smart home per aiutarti a identificare e risolvere i problemi relativi alle integrazioni.
Prerequisiti
- Leggi la guida per gli sviluppatori Creare un'integrazione cloud-to-cloud
- Esegui il codelab Collegare i dispositivi per la smart home all'Assistente Google
Cosa creerai
In questo codelab, eseguirai il deployment di un'integrazione cloud-to-cloud con due difetti e la collegherai all'assistente, quindi eseguirai il debug dei difetti dell'integrazione tramite la suite di test per le metriche e i log della smart home e della piattaforma Google Cloud (GCP).
Cosa imparerai a fare
- Come utilizzare le metriche e la registrazione di Google Cloud per identificare e risolvere i problemi di produzione
- Come utilizzare Test Suite per la smart home per identificare i problemi relativi a funzionalità e API
Che cosa ti serve
- Un browser web, ad esempio Google Chrome
- Un dispositivo iOS o Android con l'app Google Home installata
- Node.js versione 10.16 o successive
- Un account di fatturazione Google Cloud.
2. Esegui l'app con problemi
Ottieni il codice sorgente
Fai clic sul seguente link per scaricare il Sample per questo codelab sulla tua macchina di sviluppo:
In alternativa, puoi clonare il repository GitHub dalla riga di comando:
$ git clone https://github.com/google-home/smarthome-debug.git
Informazioni sul progetto
L'app della 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 per Firebase e Firebase Realtime Database.
Connettersi a Firebase
Apri il terminale sulla tua macchina di sviluppo. Vai alla directory washer-faulty
, quindi configura Firebase CLI con il progetto di integrazione creato nel codelab Collegare i dispositivi per la smart home all'Assistente Google:
$ cd washer-faulty $ firebase use <firebase-project-id>
Esegui il deployment in Firebase
Vai alla cartella functions
e installa tutte le dipendenze necessarie utilizzando npm.
$ cd functions $ npm install
Nota:se vedi il messaggio riportato di seguito, 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 della lavatrice difettosa.
$ firebase deploy
Questo è l'output della console che dovresti vedere:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<Firebase-project-id>/overview Hosting URL: https://<Firebase-project-id>.firebaseapp.com
Aggiornare HomeGraph
Apri l'URL di hosting nel browser (https://<firebase-project-id>.firebaseapp.com
) per visualizzare l'app web. Nell'interfaccia utente web, fai clic sul pulsante Aggiorna per aggiornare HomeGraph tramite Richiedi sincronizzazione con i metadati del dispositivo più recenti dell'app della lavatrice difettosa:
Apri l'app Google Home e verifica di poter vedere il dispositivo della lavatrice denominato Asciugatrice difettosa.
3. Testa l'integrazione
Dopo aver eseguito il deployment del progetto, verifica che l'integrazione controlli la lavatrice.
Testa la lavatrice
Controlla 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, l'assistente risponde che c'è un problema tramite comandi vocali:
"Mi dispiace, non è stato possibile contattare <nome visualizzato del progetto>."
Per eseguire il debug di questo problema, devi prima avere ulteriori informazioni sull'errore per restringere il campo di ricerca e identificare la causa principale.
Dashboard di Smarthome Analytics
Un buon posto per controllare gli errori è la dashboard di Smarthome Analytics, che aggrega i grafici delle metriche di utilizzo e integrità per l'implementazione sul cloud:
- Le metriche Utilizzo riflettono la tendenza di utilizzo dell'integrazione cloud-to-cloud, incluso il numero di utenti attivi giornalieri e il numero totale di richieste al tuo sistema di evasione degli ordini.
- Le metriche Integrità ti aiutano a monitorare l'occorrenza di anomalie nell'integrazione cloud-to-cloud, 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.
- In Developer Console, vai alla pagina Progetti.
- Seleziona il tuo progetto per la smart home.
- Fai clic sulla scheda Analytics nel menu a sinistra.
- Verrà visualizzato un elenco di dashboard per il tuo progetto su Google Cloud. Seleziona la dashboard Google Home Analytics - Cloud Integration (Google Home Analytics - Integrazione cloud).
- Scorri verso il basso fino al grafico Errori di adempimento cloud - 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. Successivamente, recupera i log degli eventi in base al codice di errore per ulteriori dettagli.
Accedere ai log eventi
Per maggiori dettagli sull'errore, accedi ai log eventi per l'integrazione cloud-to-cloud tramite Cloud Logging.
Apri il menu di navigazione nella piattaforma Google Cloud e seleziona Logging > Esplora log in Operazioni per accedere ai log eventi del tuo progetto. In alternativa, puoi cercare Esplora log nella casella di ricerca.
Nel campo di immissione Cerca in tutti i campi, inserisci la query PARTNER_RESPONSE_MISSING_DEVICE
e fai clic su Esegui query. I log corrispondenti alla query vengono visualizzati nella sezione Risultati.
Il log degli errori mostra un evento per la smart home con i dettagli dell'errore che indicano:
- L'azione dell'utente è "riprendi lavatrice" (
actionType:
"STARTSTOP_UNPAUSE
"), corrispondente al comando vocale non riuscito recente. - Il messaggio di debug associato è "
JSON response does not include device.
"
In base al messaggio di debug, devi verificare perché l'app della lavatrice non include il dispositivo corretto nella risposta EXECUTE
.
Identifica la causa principale dell'errore
In functions/index.js
, trova l'handler 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 come la funzione updateDevice
gestisce la messa in pausa / la ripresa sulla lavatrice e scoprirai che la stringa da abbinare al comando di pausa / ripresa 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 / ripristino:
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);
};
Testare la correzione
Esegui il deployment del codice aggiornato utilizzando l'interfaccia a riga di comando di Firebase:
firebase deploy --only functions
Riprova i seguenti comandi vocali e vedrai che 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, riavvio la lavatrice."
Puoi anche verificare lo stato attuale della lavatrice ponendo delle domande.
"Hey Google, la mia lavatrice è accesa?"
"Hey Google, la mia lavatrice è in funzione?"
"Hey Google, qual è il ciclo della mia lavatrice?"
4. Testa l'integrazione con Test Suite
Oltre a eseguire i test manualmente, puoi utilizzare la Test Suite per la smart home automatica per convalidare i casi d'uso in base ai tipi di dispositivi e ai tratti associati all'integrazione. La suite di test esegue una serie di test per rilevare i problemi nell'integrazione e mostra messaggi informativi per i casi di test non riusciti per velocizzare il debug prima di esaminare i log degli eventi.
Eseguire la suite di test per la smart home
Segui queste istruzioni per testare l'integrazione cloud-to-cloud tramite 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, la suite di test può inviare i comandi direttamente all'Assistente Google.
- Nel campo ID progetto, inserisci l'ID progetto dell'integrazione cloud-to-cloud. Poi fai clic su AVANTI per continuare.
- Nel passaggio Impostazioni test, vedrai che la suite di test elenca il tipo di dispositivo e le caratteristiche della lavatrice.
- Disattiva l'opzione Testa la sincronizzazione delle richieste poiché l'app della lavatrice di esempio non ha un'interfaccia utente per aggiungere / rimuovere / rinominare la 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 suite di test, visualizza i risultati dei casi di test. Noterai due casi di test non riusciti rilevati con il rispettivo messaggio di errore:
Per eseguire il debug dell'integrazione cloud-to-cloud per l'errore, devi identificare la causa principale dell'errore analizzando prima il messaggio di errore.
Analizzare il messaggio di errore
Per aiutare gli sviluppatori a identificare la causa principale, la suite di test mostra messaggi di errore per ogni test case non riuscito che indicano il motivo dell'errore.
Per il primo caso di test non riuscito riportato sopra,
il messaggio di errore indica che Test Suite si aspetta "isPause": true
negli stati segnalati dall'integrazione cloud-to-cloud, ma gli stati effettivi includono solo "isPause": false
.
Inoltre, il messaggio di errore del secondo caso di test non riuscito indica che gli stati nella risposta QUERY
dell'integrazione cloud-to-cloud includono "isPause": true
, che è diverso da "isPause": false
negli stati segnalati dall'integrazione cloud-to-cloud:
In base a entrambi i messaggi di errore, devi verificare se i report di integrazione indicano isPaused
con il valore corretto.
Identifica la causa principale dell'errore
Apri functions/index.js
, che contiene la funzione reportstate
che pubblica le modifiche dello stato nel grafo della casa tramite lo stato del report. Controlla il payload dello stato del report e vedrai che manca lo stato isPaused
, che è esattamente ciò che la suite di test ha controllato nei casi 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,
},
},
},
},
};
...
});
Testare 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 suite di test per la smart home e vedrai che tutti gli scenari di test sono stati superati.
5. Complimenti
Complimenti! Hai imparato a risolvere i problemi di integrazione cloud-to-cloud tramite Test Suite per la smart home e le metriche e i log di Google Cloud.
Scopri di più
A partire da questo Codelab, prova i seguenti esercizi ed esplora risorse aggiuntive:
- Aggiungi altri attributi supportati al tuo dispositivo e testali con la suite di test.
- Crea dashboard, configura avvisi e accedi ai dati delle metriche in modo programmatico per ottenere metriche di utilizzo utili sulla tua integrazione.
- Scopri la distribuzione locale per la smart home.
- Dai un'occhiata al nostro esempio GitHub per saperne di più.
Puoi anche scoprire di più su come testare e inviare un'integrazione per la revisione, inclusa la procedura di certificazione per pubblicare l'integrazione per gli utenti.