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 à l'aide de commandes tactiles dans l'application Google Home et de commandes vocales avec l'Assistant Google.
L'apprentissage des outils de débogage des actions pour la maison connectée est une étape importante pour intégrer la qualité de la production avec l'Assistant Google. Pour faciliter la surveillance et le débogage, les outils Métriques Google Cloud Platform (GCP), Logging et Suite de tests pour la maison connectée sont disponibles pour vous aider à identifier et à résoudre les problèmes liés à vos actions.
Prérequis
- Consultez le guide du développeur Créer une action de maison connectée.
- Atelier de programmation Connecter des appareils connectés à l'Assistant Google
Objectifs de l'atelier
Dans cet atelier de programmation, vous allez déployer une action de maison connectée présentant deux défauts et la connecter à l'Assistant, puis déboguer les défauts de l'action via la suite de tests pour la maison connectée et Métriques et journalisation dans Google Cloud Platform (GCP)
Points abordés
- Utiliser les métriques GCP et Logging pour identifier et résoudre les problèmes de production
- Identifier les problèmes fonctionnels et d'API avec la suite Test pour la maison connectée
Prérequis
- Un navigateur Web tel que Google Chrome
- Un appareil iOS ou Android sur lequel l'application Google Home est installée.
- Node.js version 10.16 ou ultérieure
- Un compte de facturation Google Cloud
2. Exécuter l'application défaillante
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/google-home/smarthome-debug.git
À propos du projet
L'application du lave-linge contient les sous-répertoires suivants:
public
: interface utilisateur permettant de contrôler et de surveiller facilement l'état du lave-linge connecté.functions
: service cloud entièrement implémenté qui gère le lave-linge connecté avec Cloud Functions for Firebase et Firebase Realtime Database.
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 créé dans 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 l'ignorer et continuer. Cet avertissement est dû à d'anciennes dépendances. 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éfectueuse.
$ 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 pour mettre à jour HomeGraph via Demander la synchronisation avec les dernières métadonnées de l'appareil de l'application de lave-linge défectueuse:
Ouvrez l'application Google Home et vérifiez que le lave-linge nommé Lave-linge défectueux s'affiche.
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 que la valeur change 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, mets mon lave-linge en pause."
"Hey Google, réactive mon lave-linge."
"Hey Google, arrête mon lave-linge."
Vous remarquerez que l'Assistant répond par commande vocale en cas de problème lorsque vous mettez en pause / redémarrez le lave-linge:
"Désolé, je n'ai pas pu accéder à <nom à afficher du projet>."
Pour déboguer ce problème, vous avez d'abord besoin d'informations supplémentaires sur l'erreur afin d'en déterminer l'origine et d'en identifier la cause.
Tableau de bord Analytics pour la maison connectée
Le tableau de bord Analytics pour la maison connectée est un bon point de départ pour inspecter les erreurs. Il regroupe des graphiques sur les métriques d'utilisation et d'état 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 pour votre traitement.
- Les métriques Santé vous permettent de surveiller les occurrences d'anomalies sur votre action de maison connectée. Elles couvrent la latence des requêtes, le pourcentage de réussite et le détail des erreurs.
Pour identifier la cause de l'erreur, suivez les étapes ci-dessous afin d'accéder au tableau de bord du projet.
- Dans la console Actions, accédez à la page "Projets".
- Sélectionnez votre projet de maison connectée.
- Cliquez sur l'onglet Analyse, puis sur Accéder à Google Cloud Platform.
- Vous accéderez ainsi à une liste de tableaux de bord pour votre projet sur Google Cloud. Sélectionnez le tableau de bord Google Home Analytics - Cloud Integration (Intégration au cloud de Google Home).
- Faites défiler la page vers le bas jusqu'au graphique Cloud Fulfillment errors - Status Répartition (Erreurs de traitement Cloud : répartition de l'état) pour afficher les codes d'erreur pour la période mise en surbrillance.
Le code d'erreur PARTNER_RESPONSE_MISSING_DEVICE
indique l'origine du problème. Ensuite, récupérez les journaux d'événements en fonction du code d'erreur pour en savoir plus.
Accéder aux journaux des événements
Pour en savoir plus sur l'erreur, accédez aux journaux des événements liés aux actions de votre maison connectée via Cloud Logging.
Ouvrez le menu de navigation de Google Cloud Platform, puis, sous Opérations, sélectionnez Journalisation > L'explorateur de journaux vous permet d'accéder aux journaux des é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.
Le journal d'erreurs affiche un événement pour la maison connectée. Les détails de l'erreur indiquent:
- L'action de l'utilisateur est "réactiver 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.
"
En fonction du message de débogage, vous devez vérifier pourquoi l'application du 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'appareils 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)));
}
}
}
Examinez plus en détail la manière dont la fonction updateDevice
gère la mise en pause / reprise sur le lave-linge. Vous constaterez que la chaîne correspondant à la commande pause / reprise 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 de la commande 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 votre correction
Déployez le code mis à jour à l'aide de la CLI Firebase :
firebase deploy --only functions
Essayez de relancer les commandes vocales suivantes. Vous verrez que l'Assistant répond maintenant correctement lorsque vous mettez en pause / redémarrez le lave-linge.
"Hey Google, mets mon lave-linge en pause."
=>
"Très bien, je mets le lave-linge en pause."
"Hey Google, réactive mon lave-linge."
=>
"OK, je relance 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 de tests
En plus des tests manuels, vous pouvez utiliser la suite de test automatisée pour la maison connectée afin de 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 informatifs en cas d'échec des scénarios de test afin d'accélérer le débogage avant de vous plonger dans les journaux d'événements.
Exécuter la suite de tests pour la maison connectée
Suivez ces instructions pour tester la suite Action by Test de votre maison connectée:
- Dans votre navigateur Web, ouvrez Test Suite pour la maison connectée.
- Connectez-vous à Google à l'aide du bouton situé dans l'angle supérieur droit. Cela permet à la suite de tests d'envoyer les commandes directement à l'Assistant Google.
- Dans le champ ID du projet, saisissez l'ID de projet de votre action de maison connectée. Cliquez ensuite sur SUIVANT pour continuer.
- À l'étape Paramètres de test, la suite de tests liste le type et les caractéristiques de l'appareil.
- Désactivez l'option Test Request Sync (Synchronisation des requêtes de test), car l'exemple d'application de lave-linge ne dispose d'aucune UI permettant d'ajouter, de supprimer ou de renommer le lave-linge. Dans un système de production, vous devez déclencher la synchronisation des requêtes chaque fois que l'utilisateur ajoute, supprime ou renomme des appareils.
- Cliquez sur SUIVANT pour lancer le test.
Une fois l'exécution de la suite de tests terminée, affichez les résultats des scénarios de test. Vous remarquerez deux scénarios de test ayant échoué, accompagnés du message d'erreur correspondant:
Pour déboguer votre action de maison connectée en cas d'échec, vous devez identifier la cause racine de l'erreur en analysant d'abord le message d'erreur.
Analyser le message d'erreur
Pour aider les développeurs à identifier l'origine de l'échec, Test Suite affiche des messages d'erreur indiquant la raison pour chaque scénario ayant échoué.
Pour le premier scénario ayant échoué ci-dessus,
son message d'erreur indique que la suite de tests attend "isPause": true
dans les états indiqués par votre action de maison connectée, mais les états réels n'incluent que "isPause": false
.
En outre, le message d'erreur du deuxième scénario ayant échoué indique que les états indiqués dans la réponse QUERY
de votre action pour la maison connectée incluent "isPause": true
, qui diffère de "isPause": false
dans les états indiqués par votre action pour la maison connectée:
Selon les deux messages d'erreur, vous devez ensuite vérifier si vos rapports sur les actions indiquent isPaused
avec la valeur correcte.
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. En inspectant la charge utile de l'état du rapport, vous constaterez que l'état isPaused
est manquant dans la charge utile, ce qui est 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, révisez functions/index.js
en ajoutant l'état isPaused
à la charge utile de l'état du rapport:
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 votre correction
Déployez le code mis à jour à l'aide de la CLI Firebase :
$ firebase deploy --only functions
Si vous réexécutez la suite de tests pour la maison connectée, vous constaterez que tous les scénarios de test ont réussi.
5. Félicitations
Félicitations ! Vous avez appris à résoudre les problèmes liés aux actions de maison connectée via la suite Test Suite pour la maison connectée et Métriques et journalisation GCP
En savoir plus
En complément de cet atelier de programmation, faites ces exercices et découvrez d'autres ressources :
- Ajoutez d'autres caractéristiques compatibles à votre appareil et testez-les avec la suite de tests.
- Créez des tableaux de bord, configurez des alertes et accédez aux données des métriques de manière programmatique pour obtenir des métriques d'utilisation utiles concernant votre action.
- Découvrez le traitement en local pour la maison connectée.
- Consultez notre exemple GitHub pour en savoir plus.
Vous pouvez également découvrir comment tester et envoyer une action pour examen, y compris le processus de certification permettant de la publier auprès des utilisateurs.