Connexion de votre appareil à la solution préconfigurée de surveillance à distance (Node.js)
Présentation du scénario
Dans ce scénario, vous allez créer un appareil qui envoie la télémétrie suivante à la solution préconfigurée de surveillance à distance :
- Température externe
- Température interne
- Humidité
Par souci de simplicité, le code sur l’appareil génère des valeurs d’exemple, mais nous vous encourageons à étendre l'exemple en connectant des capteurs réels à votre appareil et en envoyant une télémétrie réelle.
L’appareil est également en mesure de répondre aux méthodes appelées à partir du tableau de bord de la solution et aux valeurs de propriétés souhaitées définies dans le tableau de bord de la solution.
Pour effectuer ce didacticiel, vous avez besoin d’un compte Azure actif. Si vous ne possédez pas de compte, vous pouvez créer un compte d’évaluation gratuit en quelques minutes. Pour plus d’informations, consultez Essai gratuit Azure.
Avant de commencer
Avant d’écrire du code pour votre appareil, vous devez approvisionner votre solution préconfigurée de surveillance à distance et approvisionner un nouvel appareil personnalisé dans cette solution.
Approvisionner la solution préconfigurée de surveillance à distance
L’appareil que vous créez dans ce didacticiel envoie des données à une instance de la solution préconfigurée de surveillance à distance. Si vous n’avez pas déjà approvisionné la solution préconfigurée de surveillance à distance dans votre compte Azure, procédez comme suit :
- Sur la page https://www.azureiotsolutions.com/, cliquez sur + pour créer une solution.
- Cliquez sur Sélectionner dans le panneau Surveillance à distance pour créer votre solution.
- Sur la page Create Remote monitoring solution (Créer une solution de supervision à distance), entrez le nom de votre choix dans la zone Nom de solution, sélectionnez la Région dans laquelle vous souhaitez procéder au déploiement, puis sélectionnez l’abonnement Azure à utiliser. Cliquez ensuite sur Créer la solution.
- Attendez la fin du processus de configuration.
Avertissement
Les solutions préconfigurées utilisent des services Azure facturables. Veillez à supprimer la solution préconfigurée de votre abonnement lorsque vous avez terminé pour éviter toute facturation inutile. Vous pouvez supprimer complètement une solution préconfigurée de votre abonnement sur la page https://www.azureiotsolutions.com/.
Au terme du processus d’approvisionnement de la solution de supervision à distance, cliquez sur Lancer pour ouvrir le tableau de bord de la solution dans votre navigateur.
Configurer votre appareil dans la solution de supervision à distance
Notes
Si vous avez déjà approvisionné un appareil dans votre solution, vous pouvez ignorer cette étape. Vous devez connaître les informations d'identification de l’appareil lorsque vous créez l'application cliente.
Pour qu’un appareil puisse se connecter à la solution préconfigurée, il doit s’identifier auprès d’IoT Hub à l’aide d’informations d’identification valides. Vous pouvez récupérer les informations d’identification de l’appareil à partir du tableau de bord de la solution. Les informations d’identification de l’appareil seront ajoutées dans votre application cliente dans la suite de ce didacticiel.
Pour ajouter un appareil à votre solution de supervision à distance, procédez comme suit dans le tableau de bord de la solution :
Dans le coin inférieur gauche du tableau de bord, cliquez sur Ajouter un périphérique.
Dans le panneau Appareil personnalisé, cliquez sur Ajouter nouveau.
Choisissez Me laisser définir mon propre ID d'appareil. Entrez un ID d’appareil comme monappareil, cliquez sur Vérifier l’ID pour vous assurer que ce nom n’est pas déjà utilisé, puis cliquez sur Créer pour approvisionner l’appareil.
Prenez note des informations d’identification de l’appareil (ID d’appareil, nom d’hôte IoT Hub et clé d’appareil). Votre application cliente a besoin de ces valeurs pour se connecter à la solution de supervision à distance. Cliquez ensuite sur Terminé.
Sélectionnez votre appareil dans la liste d’appareils du tableau de bord de la solution. Ensuite, dans le panneau Détails de l’appareil, cliquez sur Activer l’appareil. L’état de votre appareil est maintenant En cours d’exécution. La solution de supervision à distance peut désormais recevoir des données de télémétrie à partir de votre appareil et appeler des méthodes sur l’appareil.
Création d’un exemple de solution Node.js
Vérifiez que Node.js version 0.11.5 ou ultérieure est installé sur votre ordinateur de développement. Vous pouvez exécuter node --version
dans la ligne de commande pour vérifier la version.
Créez un dossier nommé RemoteMonitoring sur votre ordinateur de développement. Accédez à ce dossier dans votre environnement de ligne de commande.
Exécutez les commandes suivantes pour télécharger et installer les packages dont vous avez besoin pour terminer l’exemple d’application :
npm init npm install azure-iot-device azure-iot-device-mqtt --save
Dans le dossier RemoteMonitoring, créez un fichier appelé remote_monitoring.js. Ouvrez ce fichier dans un éditeur de texte.
Dans le fichier remote_monitoring.js, ajoutez les instructions
require
suivantes :'use strict'; var Protocol = require('azure-iot-device-mqtt').Mqtt; var Client = require('azure-iot-device').Client; var ConnectionString = require('azure-iot-device').ConnectionString; var Message = require('azure-iot-device').Message;
Ajoutez les déclarations de variables suivantes après les instructions
require
. Remplacez les valeurs d’espace réservé [Id d’appareil] et [Clé d’appareil] par les valeurs que vous avez notées pour votre appareil provenant du tableau de bord de la solution de supervision à distance. Utilisez le nom d’hôte IoT Hub du tableau de bord de la solution pour remplacer [Nom IoTHub]. Par exemple, si votre nom d’hôte IoT Hub est contoso.azure-devices.net, remplacez [Nom Hub IoT] par contoso :var connectionString = 'HostName=[IoTHub Name].azure-devices.net;DeviceId=[Device Id];SharedAccessKey=[Device Key]'; var deviceId = ConnectionString.parse(connectionString).DeviceId;
Ajoutez les variables suivantes pour définir des données de télémétrie de base :
var temperature = 50; var humidity = 50; var externalTemperature = 55;
Ajoutez la fonction d’assistance suivante pour imprimer les résultats de l’opération :
function printErrorFor(op) { return function printError(err) { if (err) console.log(op + ' error: ' + err.toString()); }; }
Ajoutez la fonction d’assistance suivante qui permet de rendre aléatoires les valeurs de télémétrie :
function generateRandomIncrement() { return ((Math.random() * 2) - 1); }
Ajoutez la définition suivante pour l’objet DeviceInfo envoyé par l’appareil au démarrage :
var deviceMetaData = { 'ObjectType': 'DeviceInfo', 'IsSimulatedDevice': 0, 'Version': '1.0', 'DeviceProperties': { 'DeviceID': deviceId, 'HubEnabledState': 1 } };
Ajoutez la définition suivante pour les valeurs signalées du jumeau d’appareil. Cette définition inclut les descriptions des méthodes directes prises en charge par l’appareil :
var reportedProperties = { "Device": { "DeviceState": "normal", "Location": { "Latitude": 47.642877, "Longitude": -122.125497 } }, "Config": { "TemperatureMeanValue": 56.7, "TelemetryInterval": 45 }, "System": { "Manufacturer": "Contoso Inc.", "FirmwareVersion": "2.22", "InstalledRAM": "8 MB", "ModelNumber": "DB-14", "Platform": "Plat 9.75", "Processor": "i3-9", "SerialNumber": "SER99" }, "Location": { "Latitude": 47.642877, "Longitude": -122.125497 }, "SupportedMethods": { "Reboot": "Reboot the device", "InitiateFirmwareUpdate--FwPackageURI-string": "Updates device Firmware. Use parameter FwPackageURI to specifiy the URI of the firmware file" }, }
Ajoutez la fonction suivante pour gérer l’appel de méthode directe Reboot :
function onReboot(request, response) { // Implement actual logic here. console.log('Simulated reboot...'); // Complete the response response.send(200, "Rebooting device", function(err) { if(!!err) { console.error('An error occurred when sending a method response:\n' + err.toString()); } else { console.log('Response to method \'' + request.methodName + '\' sent successfully.' ); } }); }
Ajoutez la fonction suivante pour gérer l’appel de méthode directe InitiateFirmwareUpdate. Cette méthode directe utilise un paramètre pour spécifier l’emplacement de l’image du microprogramme à télécharger, puis lance la mise à jour du microprogramme de façon asynchrone sur l’appareil :
function onInitiateFirmwareUpdate(request, response) { console.log('Simulated firmware update initiated, using: ' + request.payload.FwPackageURI); // Complete the response response.send(200, "Firmware update initiated", function(err) { if(!!err) { console.error('An error occurred when sending a method response:\n' + err.toString()); } else { console.log('Response to method \'' + request.methodName + '\' sent successfully.' ); } }); // Add logic here to perform the firmware update asynchronously }
Ajoutez le code suivant pour créer une instance de client :
var client = Client.fromConnectionString(connectionString, Protocol);
Ajoutez le code suivant à :
- Ouvrir la connexion.
- Envoyer un objet DeviceInfo.
- Définir un gestionnaire pour les propriétés souhaitées.
- Envoyer les propriétés signalées.
- Inscrire des gestionnaires pour les méthodes directes.
- Démarrer l’envoi de la télémétrie.
client.open(function (err) { if (err) { printErrorFor('open')(err); } else { console.log('Sending device metadata:\n' + JSON.stringify(deviceMetaData)); client.sendEvent(new Message(JSON.stringify(deviceMetaData)), printErrorFor('send metadata')); // Create device twin client.getTwin(function(err, twin) { if (err) { console.error('Could not get device twin'); } else { console.log('Device twin created'); twin.on('properties.desired', function(delta) { console.log('Received new desired properties:'); console.log(JSON.stringify(delta)); }); // Send reported properties twin.properties.reported.update(reportedProperties, function(err) { if (err) throw err; console.log('twin state reported'); }); // Register handlers for direct methods client.onDeviceMethod('Reboot', onReboot); client.onDeviceMethod('InitiateFirmwareUpdate', onInitiateFirmwareUpdate); } }); // Start sending telemetry var sendInterval = setInterval(function () { temperature += generateRandomIncrement(); externalTemperature += generateRandomIncrement(); humidity += generateRandomIncrement(); var data = JSON.stringify({ 'DeviceID': deviceId, 'Temperature': temperature, 'Humidity': humidity, 'ExternalTemperature': externalTemperature }); console.log('Sending device event data:\n' + data); client.sendEvent(new Message(data), printErrorFor('send event')); }, 5000); client.on('error', function (err) { printErrorFor('client')(err); if (sendInterval) clearInterval(sendInterval); client.close(printErrorFor('client.close')); }); } });
Enregistrez les modifications dans le fichier remote_monitoring.js.
Exécutez la commande suivante à l’invite de commande pour démarrer l’exemple d’application :
node remote_monitoring.js
Affichage de la télémétrie des appareils dans le tableau de bord
Le tableau de bord de la solution de supervision à distance permet d’afficher la télémétrie que vos appareils envoient au IoT Hub.
Dans votre navigateur, revenez au tableau de bord de la solution de supervision à distance, cliquez sur Périphériques dans le panneau de gauche pour accéder à la Liste de périphériques.
Dans la Liste d’appareils, vous devez voir que l’état de votre appareil est maintenant En cours d’exécution. Sinon, cliquez sur Activer l’appareil dans le panneau Détails de l’appareil.
Cliquez sur Tableau de bord pour revenir au tableau de bord, sélectionnez votre périphérique dans la liste déroulante Périphérique à afficher pour afficher sa télémétrie. La télémétrie de l’exemple d’application est configurée pour envoyer 50 unités correspondant à la température interne, 55 unités correspondant à la température externe et 50 à l’humidité.
Appel d’une méthode sur votre appareil
Le tableau de bord de la solution de supervision à distance vous permet d’appeler des méthodes sur vos appareils via IoT Hub. Par exemple, dans la solution de supervision à distance, vous pouvez appeler une méthode pour simuler le redémarrage d’un appareil.
Dans le tableau de bord de la solution de supervision à distance, cliquez sur Périphériques dans le panneau de gauche pour accéder à la Liste de périphériques.
Cliquez sur ID de périphérique pour votre périphérique dans la Liste de périphériques.
Dans le panneau Détails de l’appareil, cliquez sur Méthodes.
Dans la liste déroulante Méthode, sélectionnez InitiateFirmwareUpdate, puis dans FWPACKAGEURI, saisissez une URL factice. Cliquez sur Appeler une méthode pour appeler la méthode sur l’appareil.
Vous voyez un message dans la console exécutant votre code d’appareil lorsque l’appareil traite la méthode. Les résultats de la méthode sont ajoutés à l’historique dans le portail de solution :
Étapes suivantes
L'article Personnalisation des solutions préconfigurées décrit quelques méthodes pour étendre cet exemple. Les extensions incluent l'utilisation de capteurs réels et l'implémentation de commandes supplémentaires.
Vous pouvez en savoir plus sur les autorisations sur le site azureiotsuite.com.