Attivare l'evasione degli ordini locali per le integrazioni cloud-to-cloud

1. Prima di iniziare

Le integrazioni per la smart home consentono all'Assistente Google di controllare i dispositivi connessi nelle case degli utenti. Per creare un'integrazione cloud-to-cloud, devi fornire un endpoint webhook cloud in grado di gestire gli intent per la smart home. Ad esempio, quando un utente dice "Hey Google, accendi le luci", l'assistente invia il comando al tuo cloud fulfillment per aggiornare lo stato del dispositivo.

L'SDK Local Home migliora l'integrazione della tua smart home aggiungendo un percorso locale per instradare gli intent della smart home direttamente a un dispositivo Google Home, il che migliora l'affidabilità e riduce la latenza nell'elaborazione dei comandi degli utenti. Ti consente di scrivere ed eseguire il deployment di un'app di evasione degli ordini locale in TypeScript o JavaScript che identifica i dispositivi ed esegue i comandi su qualsiasi smart speaker Google Home o smart display Google Nest. L'app comunica quindi direttamente con gli smart device esistenti degli utenti tramite la rete locale utilizzando i protocolli standard esistenti per eseguire i comandi.

72ffb320986092c.png

Prerequisiti

Cosa creerai

In questo codelab, eseguirai il deployment di un'integrazione per la smart home creata in precedenza con Firebase, poi applicherai una configurazione di scansione nella Console per gli sviluppatori e creerai un'app locale utilizzando TypeScript per inviare comandi scritti in Node.js a un dispositivo lavatrice virtuale.

Cosa imparerai a fare

  • Come attivare e configurare l'evasione degli ordini locali nella Console dello sviluppatore.
  • Come utilizzare l'SDK Local Home per scrivere un'app di evasione degli ordini locale.
  • Come eseguire il debug dell'app di evasione degli ordini locale caricata sullo speaker Google Home o sullo smart display Google Nest.

Che cosa ti serve

2. Per iniziare

Abilitare Gestione attività

Per utilizzare l'Assistente Google, devi condividere determinati dati sulle tue attività con Google. L'Assistente Google ha bisogno di questi dati per funzionare correttamente, ma il requisito di condivisione dei dati non è specifico per l'SDK. Per condividere questi dati, crea un Account Google, se non ne hai già uno. Puoi utilizzare qualsiasi Account Google, non deve essere il tuo account sviluppatore.

Apri la pagina Gestione attività per l'Account Google che vuoi utilizzare con l'assistente.

Assicurati che i seguenti pulsanti di attivazione/disattivazione siano attivati:

  • Attività web e app: inoltre, assicurati di selezionare la casella di controllo Includi la cronologia di Chrome e le attività svolte su siti, app e dispositivi che usano i servizi Google.
  • Informazioni sul dispositivo
  • Attività vocale e audio

Creare un progetto di integrazione cloud-to-cloud

  1. Vai a Developer Console.
  2. Fai clic su Crea progetto, inserisci un nome per il progetto e fai clic su Crea progetto.

Assegna un nome al progetto

Seleziona l'integrazione cloud-to-cloud

Nella home page del progetto nella Console per gli sviluppatori, seleziona Aggiungi integrazione cloud-to-cloud in Cloud-to-cloud.

Aggiungi l'integrazione cloud-to-cloud

Installa l'interfaccia a riga di comando di Firebase

L'interfaccia a riga di comando (CLI) di Firebase ti consente di pubblicare le app web localmente e di eseguire il deployment delle app web su Firebase Hosting.

Per installare l'interfaccia a riga di comando, esegui il seguente comando npm dal terminale:

npm install -g firebase-tools

Per verificare che la CLI sia stata installata correttamente, esegui:

firebase --version

Autorizza l'interfaccia a riga di comando di Firebase con il tuo Account Google eseguendo:

firebase login

Abilita l'API HomeGraph

L'API HomeGraph consente di archiviare e eseguire query sui dispositivi e sui relativi stati all'interno di Home Graph di un utente. Per utilizzare questa API, devi prima aprire la console Google Cloud e attivare l'API HomeGraph.

Nella console Google Cloud, assicurati di selezionare il progetto corrispondente a <project-id>. della tua integrazione. Quindi, nella schermata Libreria API per l'API HomeGraph, fai clic su Abilita.

5SVCzM8IZLi_9DV8M0nEklv16NXkpvM0bIzQK2hSyKyvnFHBxPOz90rbr72ayxzmxd5aNROOqC_Cp4outbdlwJdObDs0DIE_8vYzw6dovoVrP9IZWlWsZxDS7UHOi1jiRbDMG8MqUA

3. Esegui l'app di avvio

Ora che hai configurato l'ambiente di sviluppo, puoi eseguire il deployment del progetto iniziale per verificare che tutto sia configurato correttamente.

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-local.git

Informazioni sul progetto

Il progetto iniziale contiene le seguenti sottodirectory:

  • public: interfaccia utente web frontend per controllare e monitorare la lavatrice smart
  • functions: funzioni Cloud che implementano l'evasione degli ordini cloud per l'integrazione cloud-to-cloud
  • local- Progetto di app di evasione degli ordini locale di base con gestori degli intent simulati index.ts

Il fulfillment cloud fornito include le seguenti funzioni in index.js:

  • fakeauth: endpoint di autorizzazione per il collegamento degli account
  • faketoken: endpoint del token per il collegamento dell'account
  • smarthome: endpoint di adempimento degli intent della smart home
  • reportstate: richiama l'API HomeGraph in caso di modifiche dello stato del dispositivo
  • updateDevice: endpoint utilizzato dal dispositivo virtuale per attivare lo stato del report

Connettersi a Firebase

Vai alla directory app-start, quindi configura l'interfaccia a riga di comando di Firebase con il tuo progetto di integrazione cloud-to-cloud:

cd app-start
firebase use <project-id>

Configura il progetto Firebase

Inizializza un progetto Firebase.

firebase init

Seleziona le funzionalità dell'interfaccia a riga di comando, Realtime Database, Functions e la funzionalità Hosting che include Firebase Hosting.

? Which Firebase CLI features do you want to set up for this directory? Press Space to select features, then
 Enter to confirm your choices.
❯◉ Realtime Database: Configure a security rules file for Realtime Database and (optionally) provision default instance
 ◯ Firestore: Configure security rules and indexes files for Firestore
 ◉ Functions: Configure a Cloud Functions directory and its files
 ◉ Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys
 ◯ Hosting: Set up GitHub Action deploys
 ◯ Storage: Configure a security rules file for Cloud Storage
 ◯ Emulators: Set up local emulators for Firebase products
 ◯ Remote Config: Configure a template file for Remote Config
 ◯ Extensions: Set up an empty Extensions manifest

Verranno inizializzate le API e le funzionalità necessarie per il progetto.

Quando richiesto, inizializza Realtime Database. Puoi utilizzare la posizione predefinita per l'istanza del database.

? It seems like you haven't initialized Realtime Database in your project yet. Do you want to set it up?
Yes

? Please choose the location for your default Realtime Database instance:
us-central1

Poiché utilizzi il codice del progetto iniziale, scegli il file predefinito per le regole di sicurezza e assicurati di non sovrascrivere il file delle regole di database esistente.

? File database.rules.json already exists. Do you want to overwrite it with the Realtime Database Security Rules for <project-ID>-default-rtdb from the Firebase Console?
No

Se stai reinizializzando il progetto, seleziona Sovrascrivi quando ti viene chiesto se vuoi inizializzare o sovrascrivere una base di codice.

? Would you like to initialize a new codebase, or overwrite an existing one?
Overwrite

Quando configuri le funzioni, devi utilizzare i file predefiniti e assicurarti di non sovrascrivere i file index.js e package.json esistenti nel progetto di esempio.

? What language would you like to use to write Cloud Functions?
JavaScript

? Do you want to use ESLint to catch probable bugs and enforce style?
No

? File functions/package.json already exists. Overwrite?
No

? File functions/index.js already exists. Overwrite?
No

Se stai reinizializzando il progetto, seleziona No quando ti viene chiesto se vuoi inizializzare o sovrascrivere functions/.gitignore.

? File functions/.gitignore already exists. Overwrite?
No
? Do you want to install dependencies with npm now?
Yes

Infine, configura la configurazione di Hosting in modo da utilizzare la directory public nel codice del progetto e utilizza il file index.html esistente. Seleziona No quando ti viene chiesto di utilizzare ESLint.

? What do you want to use as your public directory?
public

? Configure as a single-page app (rewrite all urls to /index.html)?
Yes

? Set up automatic builds and deploys with GitHub?
No

? File public/index.html already exists. Overwrite?
 No

Se ESLint è stato attivato per errore, sono disponibili due metodi per disattivarlo:

  1. Utilizzando la GUI, vai alla cartella ../functions nel progetto, seleziona il file nascosto .eslintrc.js ed eliminalo. Non confonderlo con .eslintrc.json, che ha un nome simile.
  2. Utilizzo della riga di comando:
    cd functions
    rm .eslintrc.js
    

Per assicurarti di avere una configurazione Firebase corretta e completa, copia il file firebase.json dalla directory washer-done alla directory washer-start, sovrascrivendo quello in washer-start.

Nella directory washer-start:

cp -vp ../washer-done/firebase.json .

Esegui il deployment in Firebase

Ora che hai installato le dipendenze e configurato il progetto, puoi eseguire l'app per la prima volta.

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>.web.app

Questo comando esegue il deployment di un'app web e di diverse funzioni Cloud per Firebase.

Apri l'URL di hosting nel browser (https://<project-id>.web.app) per visualizzare l'app web. Vedrai la seguente interfaccia:

L60eA7MOnPmbBMl2XMipT9MdnP-RaVjyjf0Y93Y1b7mEyIsqZrrwczE7D3RQISRs-iusL1g4XbNmGhuA6-5sLcWefnczwNJEPfNLtwBsO4Tb9YvcAZBI6_rX19z8rxbik9Vq8F2fwg

Questa UI web rappresenta una piattaforma di terze parti per visualizzare o modificare gli stati del dispositivo. Per iniziare a compilare il database con le informazioni del dispositivo, fai clic su AGGIORNA. Non vedrai alcuna modifica nella pagina, ma lo stato attuale della lavatrice verrà memorizzato nel database.

Ora è il momento di collegare il servizio cloud di cui hai eseguito il deployment all'Assistente Google utilizzando la Console per gli sviluppatori.

Configurare il progetto Developers Console

Nella scheda Sviluppa, aggiungi un Nome visualizzato per l'interazione. Questo nome verrà visualizzato nell'app Google Home.

Aggiungere un nome visualizzato

In Branding dell'app, carica un file png per l'icona dell'app, con dimensioni di 144 x 144 px e denominato .png.

Aggiungere un&#39;icona dell&#39;app

Per attivare il collegamento degli account, utilizza queste impostazioni:

ID client

ABC123

Client secret

DEF456

URL autorizzazione

https://us-central1-
.cloudfunctions.net/fakeauth

URL token

https://us-central1-
.cloudfunctions.net/faketoken

Aggiornare gli URL di collegamento dell&#39;account

In URL di adempimento cloud, inserisci l'URL della funzione cloud che fornisce l'adempimento per gli intent per la smart home.

https://us-central1--cloudfunctions.net/smarthome

Aggiungi l&#39;URL della funzione cloud

Fai clic su Salva per salvare la configurazione del progetto, poi fai clic su Avanti: test per attivare i test nel progetto.

Testa l&#39;integrazione cloud-to-cloud

Ora puoi iniziare a implementare gli webhook necessari per collegare lo stato del dispositivo all'assistente.

Per testare l'integrazione cloud-to-cloud, devi collegare il tuo progetto a un Account Google. In questo modo puoi eseguire test tramite le piattaforme dell'Assistente Google e l'app Google Home su cui hai eseguito l'accesso allo stesso account.

  1. Apri le impostazioni dell'Assistente Google sullo smartphone. Tieni presente che devi aver eseguito l'accesso con lo stesso account utilizzato nella console.
  2. Vai ad Assistente Google > Impostazioni > Controllo della casa (nella sezione Assistente).
  3. Fai clic sull'icona di ricerca in alto a destra.
  4. Cerca l'app di test utilizzando il prefisso [test] per trovare l'app di test specifica.
  5. Seleziona l'elemento. L'Assistente Google si autenticherà con il tuo servizio e invierà una richiesta SYNC chiedendo al tuo servizio di fornire un elenco di dispositivi per l'utente.

Apri l'app Google Home e verifica di poter vedere la lavatrice.

XcWmBVamBZtPfOFqtsr5I38stPWTqDcMfQwbBjetBgxt0FCjEs285pa9K3QXSASptw0KYN2G8yfkT0-xg664V4PjqMreDDs-HPegHjOc4EVtReYPu-WKZyygq9Xmkf8X8z9177nBjQ

Verifica di poter controllare la lavatrice utilizzando i comandi vocali nell'app Google Home. Dovresti anche vedere la modifica dello stato del dispositivo nell'interfaccia utente web frontend del tuo cloud fulfillment.

Ora puoi iniziare ad aggiungere l'evasione degli ordini locali alla tua integrazione.

4. Aggiornare l'implementazione cloud

Per supportare l'evasione locale, devi aggiungere un nuovo campo per dispositivo denominato otherDeviceIds alla risposta SYNC del cloud contenente un identificatore locale univoco per il dispositivo. Questo campo indica anche la possibilità di controllare il dispositivo localmente.

Aggiungi il campo otherDeviceIds alla risposta SYNC come mostrato nello snippet di codice seguente:

functions/index.js

app.onSync((body) => {
  return {
    requestId: body.requestId,
    payload: {
      agentUserId: '123',
      devices: [{
        id: 'washer',
        type: 'action.devices.types.WASHER',
        traits: [ ... ],
        name: { ... },
        deviceInfo: { ... },
        willReportState: true,
        attributes: {
          pausable: true,
        },
        otherDeviceIds: [{
          deviceId: 'deviceid123',
        }],
      }],
    },
  };
});

Esegui il deployment del progetto aggiornato in Firebase:

firebase deploy --only functions

Al termine del deployment, vai all'interfaccia utente web e fai clic sul pulsante Aggiorna ae8d3b25777a5e30.png nella barra degli strumenti. Viene attivata un'operazione di sincronizzazione della richiesta in modo che l'assistente riceva i dati della risposta SYNC aggiornati.

bf4f6a866160a982.png

5. Configurare l'evasione degli ordini locale

In questa sezione aggiungerai le opzioni di configurazione necessarie per il completamento locale all'integrazione cloud-to-cloud. Durante lo sviluppo, pubblicherai l'app di evasione degli ordini locale su Firebase Hosting, dove il dispositivo Google Home potrà accedervi e scaricarla.

Nella console per sviluppatori Google Home, vai a Progetto > Cloud-to-cloud sul lato sinistro dello schermo, quindi seleziona Modifica per l'integrazione. Nella pagina Impostazione e configurazione, scorri fino a Esecuzione locale e attiva l'impostazione. Inserisci il seguente URL in ogni campo URL di test, inserisci l'ID progetto e fai clic su Salva:

https://<project-id>.web.app/local-home/index.html

local-fulfillment.png

A questo punto, dobbiamo definire in che modo il dispositivo Google Home deve rilevare gli smart device locali. La piattaforma Local Home supporta diversi protocolli per il rilevamento dei dispositivi, tra cui mDNS, UPnP e trasmissione UDP. Utilizzerai la trasmissione UDP per rilevare la lavatrice smart.

Fai clic su + Aggiungi configurazione di scansione in Rilevamento dispositivi per aggiungere una nuova configurazione di scansione. Seleziona UDP come protocollo e compila i seguenti attributi:

Campo

Descrizione

Valore suggerito

Indirizzo discovery

Indirizzo di rilevamento UDP

255.255.255.255

Porta di trasmissione

Porta su cui Google Home invia la trasmissione UDP

3311

Porta di ascolto

Porta su cui Google Home è in ascolto per una risposta

3312

Pacchetto di discovery

Payload dei dati di trasmissione UDP

48656c6c6f4c6f63616c486f6d6553444b

device-discovery.png

Infine, fai clic su Salva nella parte inferiore della finestra per pubblicare le modifiche.

6. Implementare l'evasione degli ordini locale

Svilupperai l'app di completamento locale in TypeScript utilizzando il pacchetto di tipi dell'SDK della casa locale. Esamina lo scheletro fornito nel progetto di avvio:

local/index.ts

/// <reference types="@google/local-home-sdk" />

import App = smarthome.App;
import Constants = smarthome.Constants;
import DataFlow = smarthome.DataFlow;
import Execute = smarthome.Execute;
import Intents = smarthome.Intents;
import IntentFlow = smarthome.IntentFlow;

...

class LocalExecutionApp {

  constructor(private readonly app: App) { }

  identifyHandler(request: IntentFlow.IdentifyRequest):
      Promise<IntentFlow.IdentifyResponse> {
    // TODO: Implement device identification
  }

  executeHandler(request: IntentFlow.ExecuteRequest):
      Promise<IntentFlow.ExecuteResponse> {
    // TODO: Implement local fulfillment
  }

  ...
}

const localHomeSdk = new App('1.0.0');
const localApp = new LocalExecutionApp(localHomeSdk);
localHomeSdk
  .onIdentify(localApp.identifyHandler.bind(localApp))
  .onExecute(localApp.executeHandler.bind(localApp))
  .listen()
  .then(() => console.log('Ready'))
  .catch((e: Error) => console.error(e));

Il componente principale dell'evasione degli ordini locali è la classe smarthome.App. Il progetto iniziale associa gestori per gli intent IDENTIFY e EXECUTE, quindi chiama il metodo listen() per informare l'SDK della casa locale che l'app è pronta.

Aggiungi il gestore IDENTIFY

L'SDK Local Home attiva il gestore IDENTIFY quando il dispositivo Google Home rileva dispositivi non verificati sulla rete locale in base alla configurazione della ricerca fornita nella Console per gli sviluppatori.

Nel frattempo, la piattaforma richiama identifyHandler con i dati di scansione risultanti quando Google rileva un dispositivo corrispondente. Nell'app, la scansione viene eseguita utilizzando una trasmissione UDP e i dati di scansione forniti all'handler IDENTIFY includono il payload di risposta inviato dal dispositivo locale.

Il gestore restituisce un'istanza IdentifyResponse contenente un identificatore univoco per il dispositivo locale. Aggiungi il seguente codice al metodo identifyHandler per elaborare la risposta UDP proveniente dal dispositivo locale e determinare l'ID dispositivo locale appropriato:

local/index .ts

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device ID.
  const localDeviceId = Buffer.from(scanData.data, 'hex');

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

Tieni presente che il campo verificationId deve corrispondere a uno dei valori otherDeviceIds nella risposta SYNC, che segnala il dispositivo come disponibile per il fulfillment locale nel Grafo della casa dell'utente. Una volta trovata una corrispondenza, il dispositivo viene considerato verificato e pronto per l'evasione degli ordini locali.

Aggiungi il gestore EXECUTE

L'SDK della casa locale attiva il gestore EXECUTE quando un dispositivo che supporta il completamento locale riceve un comando. I contenuti dell'intent locale sono equivalenti all'intent EXECUTE inviato al tuo fulfillment cloud, pertanto la logica per l'elaborazione locale dell'intent è simile a come la gestisci nel cloud.

L'app può utilizzare socket TCP/UDP o richieste HTTP(S) per comunicare con i dispositivi locali. In questo codelab, HTTP funge da protocollo utilizzato per controllare il dispositivo virtuale. Il numero di porta è definito in index.ts come variabile SERVER_PORT.

Aggiungi il seguente codice al metodo executeHandler per elaborare i comandi in arrivo e inviarli al dispositivo locale tramite HTTP:

local/index.ts

executeHandler(request: IntentFlow.ExecuteRequest):
    Promise<IntentFlow.ExecuteResponse> {
  console.log("EXECUTE intent: " + JSON.stringify(request, null, 2));

  const command = request.inputs[0].payload.commands[0];
  const execution = command.execution[0];
  const response = new Execute.Response.Builder()
    .setRequestId(request.requestId);

  const promises: Array<Promise<void>> = command.devices.map((device) => {
    console.log("Handling EXECUTE intent for device: " + JSON.stringify(device));

    // Convert execution params to a string for the local device
    const params = execution.params as IWasherParams;
    const payload = this.getDataForCommand(execution.command, params);

    // Create a command to send over the local network
    const radioCommand = new DataFlow.HttpRequestData();
    radioCommand.requestId = request.requestId;
    radioCommand.deviceId = device.id;
    radioCommand.data = JSON.stringify(payload);
    radioCommand.dataType = 'application/json';
    radioCommand.port = SERVER_PORT;
    radioCommand.method = Constants.HttpOperation.POST;
    radioCommand.isSecure = false;

    console.log("Sending request to the smart home device:", payload);

    return this.app.getDeviceManager()
      .send(radioCommand)
      .then(() => {
        const state = {online: true};
        response.setSuccessState(device.id, Object.assign(state, params));
        console.log(`Command successfully sent to ${device.id}`);
      })
      .catch((e: IntentFlow.HandlerError) => {
        e.errorCode = e.errorCode || 'invalid_request';
        response.setErrorState(device.id, e.errorCode);
        console.error('An error occurred sending the command', e.errorCode);
      });
  });

  return Promise.all(promises)
    .then(() => {
      return response.build();
    })
    .catch((e) => {
      const err = new IntentFlow.HandlerError(request.requestId,
          'invalid_request', e.message);
      return Promise.reject(err);
    });
}

Compila l'app TypeScript

Vai alla directory local/ ed esegui i comandi seguenti per scaricare il compilatore TypeScript e compilare l'app:

cd local
npm install
npm run build

Verrà compilato il codice sorgente index.ts (TypeScript) e i seguenti contenuti verranno inseriti nella directory public/local-home/:

  • bundle.js: output JavaScript compilato contenente l'app locale e le dipendenze.
  • index.html: pagina di hosting locale utilizzata per pubblicare l'app per i test sul dispositivo.

Eseguire il deployment del progetto di test

Esegui il deployment dei file di progetto aggiornati in Firebase Hosting in modo da potervi accedere dal dispositivo Google Home.

firebase deploy --only hosting

7. Avvia la lavatrice smart

Ora è il momento di testare la comunicazione tra l'app di evasione degli ordini locale e la lavatrice smart. Il progetto iniziale del codelab include una lavatrice intelligente virtuale, scritta in Node.js, che simula una lavatrice intelligente che gli utenti possono controllare localmente.

Configurare il dispositivo

Devi configurare il dispositivo virtuale in modo che utilizzi gli stessi parametri UDP che hai applicato alla configurazione della ricerca per il rilevamento dei dispositivi in Play Console. Inoltre, devi indicare al dispositivo virtuale quale ID dispositivo locale segnalare e l'ID progetto dell'integrazione cloud-to-cloud da utilizzare per gli eventi Report State quando cambia lo stato del dispositivo.

Parametro

Valore suggerito

deviceId

deviceid123

discoveryPortOut

3311

discoveryPacket

HelloLocalHomeSDK

projectId

L'ID progetto dell'integrazione cloud-to-cloud

Avvia il dispositivo

Vai alla directory virtual-device/ ed esegui lo script del dispositivo, passando i parametri di configurazione come argomenti:

cd virtual-device
npm install
npm start -- \
  --deviceId=deviceid123 --projectId=<project-id> \
  --discoveryPortOut=3311 --discoveryPacket=HelloLocalHomeSDK

Verifica che lo script del dispositivo venga eseguito con i parametri previsti:

(...): UDP Server listening on 3311
(...): Device listening on port 3388
(...): Report State successful

8. Eseguire il debug dell'app TypeScript

Nella sezione seguente, verificherai che il dispositivo Google Home possa scansionare, identificare e inviare correttamente i comandi alla lavatrice smart virtuale tramite la rete locale. Puoi utilizzare gli strumenti per sviluppatori di Google Chrome per connetterti al dispositivo Google Home, visualizzare i log della console e eseguire il debug dell'app TypeScript.

Collegare gli Strumenti per sviluppatori di Chrome

Per collegare il debugger all'app di evasione degli ordini locale:

  1. Assicurati di aver collegato il tuo dispositivo Google Home a un utente con l'autorizzazione ad accedere al progetto Developer Console.
  2. Riavvia il dispositivo Google Home, in modo che possa recuperare l'URL del codice HTML e la configurazione della scansione inserita in Play Console.
  3. Avvia Chrome sulla tua macchina di sviluppo.
  4. Apri una nuova scheda di Chrome e inserisci chrome://inspect nel campo dell'indirizzo per avviare l'ispezione.

Nella pagina dovresti vedere un elenco di dispositivi e l'URL dell'app dovrebbe essere visualizzato sotto il nome del dispositivo Google Home.

567f97789a7d8846.png

Avvia lo strumento di controllo

Fai clic su Controlla sotto l'URL dell'app per avviare gli Strumenti per sviluppatori di Chrome. Seleziona la scheda Console e verifica di poter vedere i contenuti dell'intent IDENTIFY stampati dall'app TypeScript.

6b67ded470a4c8be.png

Questo output indica che l'app di evasione degli ordini locale ha rilevato e identificato correttamente il dispositivo virtuale.

Testare l'evasione degli ordini locali

Invia comandi al dispositivo utilizzando i controlli touch nell'app Google Home o i comandi vocali al dispositivo Google Home, ad esempio:

"Hey Google, accendi la lavatrice."

"Hey Google, avvia la lavatrice."

"Hey Google, interrompi la lavatrice."

In questo modo, la piattaforma dovrebbe inviare un'intenzione EXECUTE alla tua app TypeScript.

bc030517dacc3ac9.png

Verifica di poter vedere la modifica dello stato della lavatrice smart locale con ogni comando.

...
***** The washer is RUNNING *****
...
***** The washer is STOPPED *****

9. Complimenti

764dbc83b95782a.png

Complimenti! Hai utilizzato l'SDK della casa locale per integrare il completamento locale in un'integrazione cloud-to-cloud.

Scopri di più

Ecco alcune altre cose che puoi provare a fare:

  • Modifica la configurazione della scansione e falla funzionare. Ad esempio, prova a utilizzare una porta UDP o un pacchetto di rilevamento diverso.
  • Modifica la base di codice dello smart device virtuale in modo che venga eseguita su un dispositivo embedded, ad esempio un Raspberry Pi, e utilizza LED o un display per visualizzare lo stato corrente.