Connettere il dispositivo alla soluzione preconfigurata per il monitoraggio remoto (Node.js)Connect your device to the remote monitoring preconfigured solution (Node.js)

In questa esercitazione viene implementato un dispositivo Chiller che invia i dati di telemetria seguenti alla soluzione di monitoraggio remoto preconfigurata:In this tutorial, you implement a Chiller device that sends the following telemetry to the remote monitoring preconfigured solution:

  • TemperaturaTemperature
  • PressionePressure
  • UmiditàHumidity

Per semplicità, il codice genera valori di telemetria di esempio per il chiller.For simplicity, the code generates sample telemetry values for the Chiller. È possibile estendere l'esempio connettendo sensori reali al dispositivo e inviando dati di telemetria reali.You could extend the sample by connecting real sensors to your device and sending real telemetry.

Il dispositivo di esempio inoltre:The sample device also:

  • Invia i metadati alla soluzione per descrivere le proprie funzionalità.Sends metadata to the solution to describe its capabilities.
  • Risponde alle azioni attivate dalla pagina Dispositivi della soluzione.Responds to actions triggered from the Devices page in the solution.
  • Risponde alle modifiche di configurazione inviate dalla pagina Dispositivi della soluzione.Responds to configuration changes send from the Devices page in the solution.

Per completare l'esercitazione, è necessario un account Azure attivo.To complete this tutorial, you need an active Azure account. Se non si dispone di un account, è possibile creare un account di valutazione gratuita in pochi minuti.If you don't have an account, you can create a free trial account in just a couple of minutes. Per informazioni dettagliate, vedere la pagina relativa alla versione di valutazione gratuita di Azure.For details, see Azure Free Trial.

Prima di iniziareBefore you start

Prima di scrivere un codice per il dispositivo, occorre eseguire la soluzione preconfigurata di monitoraggio remoto e poi effettuare il provisioning di un nuovo dispositivo personalizzato all'interno della soluzione in questione.Before you write any code for your device, you must provision your remote monitoring preconfigured solution and provision a new custom device in that solution.

Eseguire il provisioning della soluzione preconfigurata per il monitoraggio remotoProvision your remote monitoring preconfigured solution

Il dispositivo Chiller creato in questa esercitazione invia dati a un'istanza della soluzione preconfigurata per il monitoraggio remoto.The Chiller device you create in this tutorial sends data to an instance of the remote monitoring preconfigured solution. Se nel proprio account Azure non è già stato effettuato il provisioning della soluzione preconfigurata per il monitoraggio remoto, vedere Distribuire la soluzione preconfigurata di monitoraggio remotoIf you haven't already provisioned the remote monitoring preconfigured solution in your Azure account, see Deploy the remote monitoring preconfigured solution

Al termine del processo di provisioning della soluzione di monitoraggio remoto, fare clic su Avvia per aprire il dashboard della soluzione nel browser.When the provisioning process for the remote monitoring solution finishes, click Launch to open the solution dashboard in your browser.

Dashboard della soluzione

Effettuare il provisioning del dispositivo nella soluzione di monitoraggio remotoProvision your device in the remote monitoring solution

Nota

Se è già stato eseguito il provisioning di un dispositivo nella soluzione, è possibile saltare questo passaggio.If you have already provisioned a device in your solution, you can skip this step. Sono necessarie le credenziali del dispositivo quando si crea l'applicazione client.You need the device credentials when you create the client application.

Per connettere un dispositivo alla soluzione preconfigurata, è necessario che identifichi se stesso nell'hub IoT mediante delle credenziali valide.For a device to connect to the preconfigured solution, it must identify itself to IoT Hub using valid credentials. È possibile recuperare le credenziali del dispositivo dalla pagina Dispositivi della soluzione.You can retrieve the device credentials from the solution Devices page. Le istruzioni per includere le credenziali del dispositivo nell'applicazione client sono illustrate più avanti in questa esercitazione.You include the device credentials in your client application later in this tutorial.

Per aggiungere un dispositivo alla soluzione per il monitoraggio remoto, completare i passaggi seguenti nella pagina Dispositivi della soluzione:To add a device to your remote monitoring solution, complete the following steps on the Devices page in the solution:

  1. Passare alla pagina Provisioning e scegliere Fisico per Tipo di dispositivo:Choose Provision, and then choose Physical as the Device type:

    Effettuare il provisioning di un dispositivo fisico

  2. Immettere Fisico-chiller come ID del dispositivo.Enter Physical-chiller as the Device ID. Scegliere le opzioni Chiave simmetrica e Genera chiavi automaticamente:Choose the Symmetric Key and Auto generate keys options:

    Scegliere le opzioni per il dispositivo

Per individuare le credenziali che il dispositivo deve usare per la connessione alla soluzione preconfigurata, passare al portale di Azure nel browser.To locate the credentials your device must use to connect to the preconfigured solution, navigate to the Azure portal in your browser. Accedere alla sottoscrizione.Sign in to your subscription.

  1. Individuare il gruppo di risorse che contiene i servizi di Azure usati dalla soluzione per il monitoraggio remoto.Locate the resource group that contains the Azure services your remote monitoring solution uses. Il nome del gruppo di risorse coincide con quello della soluzione per il monitoraggio remoto della quale si è effettuato il provisioning.The resource group has the same name as the remote monitoring solution you provisioned.

  2. Passare all'hub IoT in questo gruppo di risorse.Navigate to the IoT hub in this resource group. Scegliere quindi Esplora dispositivi:Then choose Device explorer:

    Esplora dispositivi

  3. Scegliere l'ID dispositivocreato nella pagina Dispositivi della soluzione per il monitoraggio remoto.Choose the Device ID you created on the Devices page in the remote monitoring solution.

  4. Prendere nota dei valori di ID dispositivo e Chiave dispositivo.Make a note of the Device ID and Primary key values. Questi valori vengono usati quando si aggiunge codice per connettere il dispositivo alla soluzione.You use these values when you add code to connect your device to the solution.

È stato ora effettuato il provisioning di un dispositivo fisico nella soluzione preconfigurata per il monitoraggio remoto.You have now provisioned a physical device in the remote monitoring preconfigured solution. Nelle sezioni seguenti si implementerà l'applicazione client che usa le credenziali del dispositivo per connettersi alla soluzione.In the following sections, you implement the client application that uses the device credentials to connect to your solution.

L'applicazione client implementa il modello di dispositivo Chiller predefinito.The client application implements the built-in Chiller device model. Un modello di dispositivo per la soluzione preconfigurata specifica le informazioni seguenti per il dispositivo:A preconfigured solution device model specifies the following about a device:

  • Le proprietà che il dispositivo segnala alla soluzione.The properties the device reports to the solution. Ad esempio, un dispositivo Chiller segnala informazioni su firmware e posizione.For example, a Chiller device reports information about its firmware and location.
  • Tipi di dati di telemetria che il dispositivo invia alla soluzione.The types of telemetry the device sends to the solution. Ad esempio, un dispositivo Chiller invia valori di temperatura, umidità e pressione.For example, a Chiller device sends temperature, humidity, and pressure values.
  • I metodi che possono essere pianificati nella soluzione per l'esecuzione nel dispositivo.The methods you can schedule from the solution to run on the device. Un dispositivo Chiller deve ad esempio implementare i metodi Reboot, FirmwareUpdate, EmergencyValveRelease e IncreasePressure.For example, a Chiller device must implement Reboot, FirmwareUpdate, EmergencyValveRelease, and IncreasePressuree methods.

Questa esercitazione mostra come connettere un dispositivo fisico alla soluzione preconfigurata di monitoraggio remoto.This tutorial shows you how to connect a physical device to the remote monitoring preconfigured solution. In questa esercitazione viene usato Node.js, una buona scelta per gli ambienti con vincoli minimi in termine di risorse.In this tutorial, you use Node.js, which is a good option for environments with minimal resource constraints.

Creare una soluzione Node.jsCreate a Node.js solution

Assicurarsi che nel computer di sviluppo sia installato Node.js 4.0.0 o versioni successive.Ensure that Node.js version 4.0.0 or later is installed on your development machine. Per controllare la versione è possibile eseguire node --version nella riga di comando.You can run node --version at the command line to check the version.

  1. Nel computer di sviluppo creare una cartella denominata RemoteMonitoring.Create a folder called RemoteMonitoring on your development machine. Aprire la cartella nell'ambiente della riga di comando.Navigate to this folder in your command-line environment.

  2. Per scaricare e installare i pacchetti necessari per completare l'app di esempio, eseguire i comandi seguenti:To download and install the packages you need to complete the sample app, run the following commands:

    npm init
    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Nella cartella RemoteMonitoring creare un file denominato remote_monitoring.js.In the RemoteMonitoring folder, create a file called remote_monitoring.js. Aprire il file in un editor di testo.Open this file in a text editor.

  4. Nel file remote_monitoring.js, aggiungere le istruzioni require seguenti:In the remote_monitoring.js file, add the following require statements:

    '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;
    
  5. Aggiungere le seguenti dichiarazioni di variabili dopo le istruzioni require .Add the following variable declarations after the require statements. Sostituire i valori segnaposto {Device Id} e {Device Key} con i valori annotati per il dispositivo di cui è stato effettuato il provisioning nella soluzione di monitoraggio remoto.Replace the placeholder values {Device Id} and {Device Key} with values you noted for the device you provisioned in the remote monitoring solution. Usare il nome host dell'hub IoT nella soluzione per sostituire {IoTHub Name}.Use the IoT Hub Hostname from the solution to replace {IoTHub Name}. Ad esempio, se il nome host dell'hub IoT è contoso.azure-devices.net, sostituire {IoTHub Name} con contoso:For example, if your IoT Hub Hostname is contoso.azure-devices.net, replace {IoTHub Name} with contoso:

    var connectionString = 'HostName={IoTHub Name}.azure-devices.net;DeviceId={Device Id};SharedAccessKey={Device Key}';
    var deviceId = ConnectionString.parse(connectionString).DeviceId;
    
  6. Per definire alcuni dati di telemetria di base, aggiungere le variabili seguenti:To define some base telemetry data, add the following variables:

    var temperature = 50;
    var temperatureUnit = 'F';
    var humidity = 50;
    var humidityUnit = '%';
    var pressure = 55;
    var pressureUnit = 'psig';
    
  7. Per definire alcuni valori di proprietà, aggiungere le variabili seguenti:To define some property values, add the following variables:

    var temperatureSchema = 'chiller-temperature;v1';
    var humiditySchema = 'chiller-humidity;v1';
    var pressureSchema = 'chiller-pressure;v1';
    var interval = "00:00:05";
    var deviceType = "Chiller";
    var deviceFirmware = "1.0.0";
    var deviceFirmwareUpdateStatus = "";
    var deviceLocation = "Building 44";
    var deviceLatitude = 47.638928;
    var deviceLongitude = -122.13476;
    
  8. Aggiungere la variabile seguente per definire le proprietà indicate da inviare alla soluzione.Add the following variable to define the reported properties to send to the solution. Queste proprietà includono i metadati per descrivere i metodi e i dati di telemetria usati dal dispositivo:These properties include metadata to describe the methods and telemetry the device uses:

    var reportedProperties = {
      "Protocol": "MQTT",
      "SupportedMethods": "Reboot,FirmwareUpdate,EmergencyValveRelease,IncreasePressure",
      "Telemetry": {
        "TemperatureSchema": {
          "Interval": interval,
          "MessageTemplate": "{\"temperature\":${temperature},\"temperature_unit\":\"${temperature_unit}\"}",
          "MessageSchema": {
            "Name": temperatureSchema,
            "Format": "JSON",
            "Fields": {
              "temperature": "Double",
              "temperature_unit": "Text"
            }
          }
        },
        "HumiditySchema": {
          "Interval": interval,
          "MessageTemplate": "{\"humidity\":${humidity},\"humidity_unit\":\"${humidity_unit}\"}",
          "MessageSchema": {
            "Name": humiditySchema,
            "Format": "JSON",
            "Fields": {
              "humidity": "Double",
              "humidity_unit": "Text"
            }
          }
        },
        "PressureSchema": {
          "Interval": interval,
          "MessageTemplate": "{\"pressure\":${pressure},\"pressure_unit\":\"${pressure_unit}\"}",
          "MessageSchema": {
            "Name": pressureSchema,
            "Format": "JSON",
            "Fields": {
              "pressure": "Double",
              "pressure_unit": "Text"
            }
          }
        }
      },
      "Type": deviceType,
      "Firmware": deviceFirmware,
      "FirmwareUpdateStatus": deviceFirmwareUpdateStatus,
      "Location": deviceLocation,
      "Latitude": deviceLatitude,
      "Longitude": deviceLongitude
    }
    
  9. Per stampare i risultati dell'operazione, aggiungere la funzione helper seguente:To print operation results, add the following helper function:

    function printErrorFor(op) {
        return function printError(err) {
            if (err) console.log(op + ' error: ' + err.toString());
        };
    }
    
  10. Aggiungere la funzione helper seguente per impostare in modo casuale i valori di telemetria:Add the following helper function to use to randomize the telemetry values:

    function generateRandomIncrement() {
        return ((Math.random() * 2) - 1);
    }
    
  11. Aggiungere la funzione seguente per gestire le chiamate ai metodi diretti dalla soluzione.Add the following function to handle direct method calls from the solution. La soluzione usa metodi diretti per intervenire sui dispositivi:The solution uses direct methods to act on devices:

    function onDirectMethod(request, response) {
      // Implement logic asynchronously here.
      console.log('Simulated ' + request.methodName);
    
      // Complete the response
      response.send(200, request.methodName + ' was called on the device', function (err) {
        if (!!err) {
          console.error('An error ocurred when sending a method response:\n' +
            err.toString());
        } else {
          console.log('Response to method \'' + request.methodName +
            '\' sent successfully.');
        }
      });
    }
    
  12. Aggiungere il codice seguente per inviare dati di telemetria alla soluzione.Add the following code to send telemetry data to the solution. L'app client aggiunge proprietà al messaggio per identificare lo schema del messaggio:The client app adds properties to the message to identify the message schema:

    function sendTelemetry(data, schema) {
      var d = new Date();
      var payload = JSON.stringify(data);
      var message = new Message(payload);
      message.properties.add('$$CreationTimeUtc', d.toISOString());
      message.properties.add('$$MessageSchema', schema);
      message.properties.add('$$ContentType', 'JSON');
    
      console.log('Sending device message data:\n' + payload);
      client.sendEvent(message, printErrorFor('send event'));
    }
    
  13. Aggiungere il codice seguente per creare un'istanza del client:Add the following code to create a client instance:

    var client = Client.fromConnectionString(connectionString, Protocol);
    
  14. Aggiungere il codice seguente a:Add the following code to:

    • Aprire la connessione.Open the connection.
    • Impostare un gestore per le proprietà desiderate.Set up a handler for desired properties.
    • Inviare le proprietà segnalate.Send reported properties.
    • Registrare i gestori dei metodi diretti.Register handlers for the direct methods.
    • Avviare l'invio dei dati di telemetria.Start sending telemetry.

      client.open(function (err) {
      if (err) {
        printErrorFor('open')(err);
      } else {
        // 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) {
              // Handle desired properties set by solution
              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 all the method names we are interested in.
            // Consider separate handlers for each method.
            client.onDeviceMethod('Reboot', onDirectMethod);
            client.onDeviceMethod('FirmwareUpdate', onDirectMethod);
            client.onDeviceMethod('EmergencyValveRelease', onDirectMethod);
            client.onDeviceMethod('IncreasePressure', onDirectMethod);
          }
        });
      
        // Start sending telemetry
        var sendTemperatureInterval = setInterval(function () {
          temperature += generateRandomIncrement();
          var data = {
            'temperature': temperature,
            'temperature_unit': temperatureUnit
          };
          sendTelemetry(data, temperatureSchema)
        }, 5000);
      
        var sendHumidityInterval = setInterval(function () {
          humidity += generateRandomIncrement();
          var data = {
            'humidity': humidity,
            'humidity_unit': humidityUnit
          };
          sendTelemetry(data, humiditySchema)
        }, 5000);
      
        var sendPressureInterval = setInterval(function () {
          pressure += generateRandomIncrement();
          var data = {
            'pressure': pressure,
            'pressure_unit': pressureUnit
          };
          sendTelemetry(data, pressureSchema)
        }, 5000);
      
        client.on('error', function (err) {
          printErrorFor('client')(err);
          if (sendTemperatureInterval) clearInterval(sendTemperatureInterval);
          if (sendHumidityInterval) clearInterval(sendHumidityInterval);
          if (sendPressureInterval) clearInterval(sendPressureInterval);
          client.close(printErrorFor('client.close'));
        });
      }
      });
      
  15. Salvare le modifiche apportate al file remote_monitoring.js.Save the changes to the remote_monitoring.js file.

  16. Per avviare l'applicazione di esempio, eseguire il comando seguente al prompt dei comandi:To launch the sample application, run the following command at a command prompt:

    node remote_monitoring.js
    

Visualizzare la telemetria dei dispositiviView device telemetry

È possibile visualizzare i dati di telemetria inviati dal dispositivo nella pagina Dispositivi della soluzione.You can view the telemetry sent from your device on the Devices page in the solution.

  1. Selezionare il dispositivo del quale è stato effettuato il provisioning nell'elenco dei dispositivi della pagina Dispositivi.Select the device you provisioned in the list of devices on the Devices page. Un pannello visualizza le informazioni sul dispositivo, incluso un tracciato dei dati di telemetria del dispositivo:A panel displays information about your device including a plot of the device telemetry:

    Vedere i dettagli del dispositivo

  2. Scegliere Pressione per modificare la visualizzazione dei dati di telemetria:Choose Pressure to change the telemetry display:

    Visualizzare i dati di telemetria per la pressione

  3. Per visualizzare le informazioni di diagnostica sul dispositivo, scorrere fino a Diagnostica:To view diagnostic information about your device, scroll down to Diagnostics:

    Visualizzazione della diagnostica del dispositivo

Agire sul dispositivoAct on your device

Per richiamare i metodi nei dispositivi, usare la pagina Dispositivi della soluzione per il monitoraggio remoto.To invoke methods on your devices, use the Devices page in the remote monitoring solution. Nella soluzione per il monitoraggio remoto, i dispositivi Chiller implementano ad esempio un metodo Reboot.For example, in the remote monitoring solution Chiller devices implement a Reboot method.

  1. Scegliere Dispositivi per passare alla pagina Dispositivi della soluzione.Choose Devices to navigate to the Devices page in the solution.

  2. Selezionare il dispositivo del quale è stato effettuato il provisioning nell'elenco dei dispositivi della pagina Dispositivi:Select the device you provisioned in the list of devices on the Devices page:

    Selezionare il dispositivo fisico

  3. Per visualizzare un elenco dei metodi che è possibile chiamare in un dispositivo, scegliere Pianificazione.To display a list of the methods you can call on your device, choose Schedule. Per pianificare un metodo per l'esecuzione in più dispositivi, è possibile selezionare più dispositivi nell'elenco.To schedule a method to run on multiple devices, you can select multiple devices in the list. Il pannello Pianificazione mostra i tipi di metodi comuni a tutti i dispositivi selezionati.The Schedule panel shows the types of method common to all the devices you selected.

  4. Scegliere Reboot, impostare il nome processo su RebootPhysicalChiller e quindi fare clic su Applica:Choose Reboot, set the job name to RebootPhysicalChiller, and choose Apply:

    Pianificare il riavvio

  5. Viene visualizzato un messaggio nella console che esegue il codice del dispositivo quando il dispositivo gestisce il metodo.A message displays in the console running your device code when the device handles the method.

Nota

Per tenere traccia dello stato del processo nella soluzione, scegliere Visualizza.To track the status of the job in the solution, choose View.

Passaggi successiviNext steps

L'articolo Personalizzare la soluzione preconfigurata di monitoraggio remoto descrive alcuni modi per personalizzare la soluzione preconfigurata.The article Customize the remote monitoring preconfigured solution describes some ways to customize the preconfigured solution.