Bienvenue dans le Centre des développeurs Google Home, la nouvelle destination pour apprendre à développer des actions pour la maison connectée. Remarque : Vous continuerez à créer des actions dans la console Actions.

Déboguer la maison connectée

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

1. Avant de commencer

En tant que développeur de l'Internet des objets (IoT), vous pouvez créer des actions pour la maison connectée qui permettent à vos utilisateurs de contrôler leurs appareils via des commandes tactiles dans l'application Google Home et des commandes vocales avec l'Assistant Google.

A4657871181b5ad2.gif

L'apprentissage des outils de débogage pour les actions de maison connectée est une étape importante pour créer une intégration de qualité de production avec l'Assistant Google. Pour faciliter la surveillance et le débogage, les métriques et la journalisation Google Cloud Platform (GCP) ainsi que la suite de test pour la maison connectée sont disponibles pour vous aider à identifier et à résoudre les problèmes liés à vos actions.

Prérequis

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez déployer une action de maison connectée avec deux défauts et la connecter à l'Assistant, puis déboguer les défauts de l'action via la suite Test pour la maison connectée et les métriques Google Cloud Platform (GCP) et Logging.

Points abordés

  • Identifier et résoudre les problèmes de production à l'aide des métriques et de la journalisation GCP
  • Identifier les problèmes fonctionnels et d'API à l'aide de la suite Test pour la maison connectée

Prérequis

2. Exécuter l'application défectueuse

Obtenir le code source

Cliquez sur le lien suivant pour télécharger l'exemple utilisé dans cet atelier de programmation sur votre ordinateur de développement :

Vous pouvez également cloner le dépôt GitHub à partir de la ligne de commande :

$ git clone https://github.com/googlecodelabs/smarthome-debug.git

À propos du projet

L'application de lave-linge contient les sous-répertoires suivants:

Se connecter à Firebase

Ouvrez le terminal sur votre ordinateur de développement. Accédez au répertoire washer-faulty, puis configurez la CLI Firebase avec votre projet Actions intégré à l'atelier de programmation "Connecter des appareils connectés" à l'Assistant Google:

$ cd washer-faulty
$ firebase use <project-id>

Déployer sur Firebase

Accédez au dossier functions et installez toutes les dépendances nécessaires à l'aide de npm..

$ cd functions
$ npm install

Remarque : Si le message ci-dessous s'affiche, vous pouvez ignorer cette étape et continuer. Cet avertissement est dû à des dépendances plus anciennes. Pour en savoir plus, cliquez ici.

found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

Maintenant que vous avez installé les dépendances et configuré votre projet, vous êtes prêt à déployer l'application de lave-linge défaillant.

$ firebase deploy

La console doit afficher le résultat suivant :

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<project-id>/overview
Hosting URL: https://<project-id>.firebaseapp.com

Mettre à jour HomeGraph

Ouvrez l'URL d'hébergement dans votre navigateur (https://<project-id>.firebaseapp.com) pour afficher l'application Web. Dans l'UI Web, cliquez sur le bouton Actualiser ae8d3b25777a5e30.png pour mettre à jour HomeGraph via Request Sync avec les dernières métadonnées de l'appareil provenant de l'application de lave-linge défectueux:

6f2b1344179977cf.png

Ouvrez l'application Google Home et vérifiez la présence du lave-linge Défectueux.

e357de6a7faff916.png

3. Tester votre Action

Après avoir déployé votre projet, vérifiez que votre action contrôle le lave-linge.

Tester le lave-linge

Vérifiez la valeur modifiée lorsque vous essayez l'une des commandes vocales suivantes sur votre téléphone:

"Hey Google, allume mon lave-linge."

"Hey Google, démarre mon lave-linge."

"Hey Google, pause mon lave-linge.

"Hey Google, réactive mon lave-linge.

"Hey Google, arrête mon lave-linge."

Vous constaterez que l'Assistant a détecté un problème par commande vocale lorsque vous mettez en pause / réactivez le lave-linge:

Désolé, je n'ai pas pu accéder au nom à afficher du projet.

Pour résoudre ce problème, vous devez d'abord obtenir plus d'informations sur l'erreur afin d'en identifier la cause et d'en identifier la cause.

Tableau de bord d'analyse pour la maison connectée

Un bon endroit pour inspecter les erreurs est le tableau de bord d'analyse pour la maison connectée, qui regroupe les graphiques des métriques d'utilisation et de santé pour votre traitement cloud:

  • Les métriques Utilisation reflètent les tendances d'utilisation de votre action de maison connectée, y compris le nombre d'utilisateurs actifs par jour et le nombre total de requêtes dans votre traitement.
  • Les métriques État vous permettent de surveiller les occurrences d'anomalies sur votre action de maison connectée, en couvrant la latence des requêtes, le pourcentage de réussite et la répartition des erreurs.

Pour identifier la cause de l'erreur, suivez les étapes ci-dessous pour accéder au tableau de bord du projet.

  1. Dans la console Actions, accédez à la page "Projets".
  2. Sélectionnez votre projet de maison connectée.
  3. Sélectionnez l'onglet Analytics, puis cliquez sur Accéder à Google Cloud Platform.

B1735bbe11a7aff8.png

  1. La liste des tableaux de bord de votre projet dans Google Cloud s'affiche. Sélectionnez le tableau de bord Google Home Analytics - Cloud Integration.

5edd3751323176dd.png

  1. Faites défiler la page jusqu'au graphique Erreurs de traitement Cloud – Répartition de l'état pour afficher les codes d'erreur pour la période mise en surbrillance.

C468743c20a11c15.png

Le code d'erreur PARTNER_RESPONSE_MISSING_DEVICE fournit une indication sur la cause première. Ensuite, récupérez les journaux d'événements en fonction du code d'erreur pour en savoir plus.

Accéder aux journaux d'événements

Pour obtenir plus de détails sur l'erreur, accédez aux journaux d'événements de vos actions de maison connectée via Cloud Logging.

Ouvrez le menu de navigation dans Google Cloud Platform, puis sous Opérations, sélectionnez Logging &gt ; Explorateur de journaux pour accéder aux journaux d'événements de votre projet. Vous pouvez également rechercher Explorateur de journaux dans le champ de recherche.

Dans la section Requête, saisissez la requête PARTNER_RESPONSE_MISSING_DEVICE, puis cliquez sur Exécuter la requête. Les journaux correspondant à la requête sont affichés dans la section Résultats de la requête.

747cca0f1249a5a.png

Le journal d'erreurs est un événement de maison connectée avec les détails de l'erreur indiquant les éléments suivants:

  • L'action effectuée par l'utilisateur consiste à reprendre le lave-linge (actionType:) STARTSTOP_UNPAUSE, correspondant à la dernière commande vocale ayant échoué.
  • Le message de débogage associé est "JSON response does not include device."

À partir du message de débogage, vérifiez pourquoi l'application de lave-linge n'inclut pas le bon appareil dans la réponse EXECUTE.

Identifier la cause première de l'erreur

Dans functions/index.js, recherchez le gestionnaire EXECUTE (dans le tableau onExecute) qui renvoie l'état de chaque commande et le nouvel état de l'appareil. L'insertion des ID d'appareil dans une réponse EXECUTE dépend de la résolution de la fonction 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)));
     }
   }
 }

Vérifiez également que la fonction updateDevice gère les commandes de pause et de reprise sur le lave-linge. La chaîne à rechercher pour la commande pause/Resume est incorrecte:

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);
};

Corriger l'erreur

Maintenant que vous avez identifié la cause première de l'erreur, vous pouvez corriger la chaîne pour la commande de pause / reprise:

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);
};

Tester le correctif

Déployez le code mis à jour à l'aide de la CLI Firebase :

firebase deploy --only functions

Essayez de nouveau les commandes vocales ci-dessous. Vous constaterez que l'Assistant répond désormais correctement lorsque vous mettez en pause / reprenez le lave-linge.

"Hey Google, mets mon lave-linge en pause."

\tgt

Merci d'interrompre le lave-linge.

"Hey Google, réactive mon lave-linge."

\tgt

J'ai compris, je réactive le lave-linge.

Vous pouvez également tester l'état actuel de votre lave-linge en posant des questions.

"Hey Google, est-ce que mon lave-linge est allumé ?"

"Hey Google, est-ce que mon lave-linge est en marche ?"

"Hey Google, quel est le cycle défini sur mon lave-linge ?"

4. Tester votre action avec la suite Test

En plus d'effectuer des tests manuels, vous pouvez utiliser la suite de test automatisée pour la maison connectée pour valider des cas d'utilisation en fonction des types d'appareils et des caractéristiques associés à votre action. La suite de tests exécute une série de tests pour détecter les problèmes dans votre action et affiche des messages d'information pour les scénarios de test ayant échoué afin d'accélérer votre débogage avant de plonger dans les journaux d'événements.

Exécuter la suite Test pour la maison connectée

Suivez ces instructions pour tester votre Action Home par Test Suite:

  1. Dans votre navigateur Web, ouvrez la suite Test pour la maison connectée.
  2. Connectez-vous à Google à l'aide du bouton situé en haut à droite. La suite Test peut ainsi envoyer les commandes directement à l'Assistant Google.
  3. Dans le champ ID du projet, saisissez l'ID de votre action de maison connectée. Ensuite, cliquez sur SUIVANT pour continuer.
  4. À l'étape Paramètres de test, vous verrez la suite de tests lister le type d'appareil et les caractéristiques du lave-linge.

78ed6a1ebdb581bf.png

  1. Désactivez l'option Test Request Sync (Tester la synchronisation des requêtes), car l'exemple d'application de lave-linge ne comporte pas d'interface utilisateur pour ajouter/supprimer/renommer le lave-linge. Dans un système de production, vous devez déclencher Request Sync chaque fois que l'utilisateur ajoute, supprime ou renomme des appareils.
  2. Cliquez sur SUIVANT pour commencer à exécuter le test.

Une fois l'exécution de la suite de tests terminée, consultez les résultats des scénarios de test. Deux scénarios de test ayant échoué sont détectés et associés à un message d'erreur:

5838d10631c98ed2.png

Pour résoudre le problème de votre action de maison connectée, vous devez d'abord identifier l'origine de l'erreur en analysant le message d'erreur.

Message d'erreur d'analyse

Pour aider les développeurs à identifier l'origine du problème, la suite Test affiche un message d'erreur pour chaque scénario de test ayant échoué.

Pour le premier scénario de test ayant échoué ci-dessus,

99e4e5d06966a8a7.png

son message d'erreur indique que la suite Test attend "isPause": true dans les états signalés par votre action de maison connectée, mais les états réels n'incluent que "isPause": false.

En outre, le deuxième message d'erreur du scénario de test indique que les états indiqués dans la réponse QUERY de votre action de maison connectée incluent "isPause": true, qui est différent de "isPause": false dans les États indiqués dans votre action de maison connectée:

fdb5124102e3a37.png

En fonction des deux messages d'erreur, vous devez ensuite vérifier si vos rapports sur l'action indiquent isPaused avec la bonne valeur.

Identifier la cause première de l'erreur

Ouvrez functions/index.js, qui contient la fonction reportstate qui publie les changements d'état dans Home Graph via l'état du rapport. Si vous inspectez la charge utile de l'état du rapport, vous constaterez qu'elle ne contient pas l'état isPaused, qui correspond exactement à ce que la suite de tests a vérifié dans les scénarios de test ayant échoué.

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,
      });
      ...
    });

Corriger l'erreur

Maintenant que vous avez identifié la cause première de l'erreur, modifiez functions/index.js en ajoutant l'état isPaused à la charge utile Report State:

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,
              },
            },
          },
        },
      };
      ...
    });

Tester le correctif

Déployez le code mis à jour à l'aide de la CLI Firebase :

$ firebase deploy --only functions

Si vous exécutez à nouveau la suite de tests pour la maison connectée, tous les scénarios de test auront été validés.

148837f85d377jj6.png

5. Félicitations

17d485866a6771bc.png

Félicitations ! Vous avez appris à résoudre les problèmes liés aux actions dans la maison connectée via la suite Test pour la maison connectée et les métriques et la journalisation GCP.

En savoir plus

En complément de cet atelier de programmation, faites ces exercices et découvrez d'autres ressources :

Vous pouvez également en apprendre davantage sur le test et l'envoi d'une Action pour examen, y compris le processus de certification permettant de publier votre Action auprès des utilisateurs.