Connettere il dispositivo simulato all'hub IoT usando NodeConnect your simulated device to your IoT hub using Node

IntroduzioneIntroduction

L'hub IoT di Azure è un servizio completamente gestito che consente comunicazioni bidirezionali affidabili e sicure tra milioni di dispositivi IoT (Internet delle cose) e un back-end della soluzione.Azure IoT Hub is a fully managed service that enables reliable and secure bi-directional communications between millions of Internet of Things (IoT) devices and a solution back end. Una delle maggiori difficoltà con i progetti IoT consiste nel connettere in modo affidabile e sicuro i dispositivi al back-end della soluzione.One of the biggest challenges that IoT projects face is how to reliably and securely connect devices to the solution back end. Per affrontare questa sfida, l'hub IoT:To address this challenge, IoT Hub:

  • Offre messaggistica affidabile da dispositivo a cloud e da cloud a dispositivo su vasta scala.Offers reliable device-to-cloud and cloud-to-device hyper-scale messaging.
  • Rende possibili comunicazioni sicure mediante le credenziali di sicurezza per i singoli dispositivi e il controllo di accesso.Enables secure communications using per-device security credentials and access control.
  • Comprende librerie di dispositivi per i linguaggi e le piattaforme più diffusi.Includes device libraries for the most popular languages and platforms.

Questa esercitazione illustra come:This tutorial shows you how to:

  • Usare il portale di Azure per creare un hub IoT.Use the Azure portal to create an IoT hub.
  • Creare un'identità del dispositivo nell'hub IoT.Create a device identity in your IoT hub.
  • Creare un'app per dispositivo simulato che invii dati di telemetria al back-end della soluzione.Create a simulated device app that sends telemetry to your solution back end.

Al termine di questa esercitazione si avranno tre app console Node.js:At the end of this tutorial, you have three Node.js console apps:

  • CreateDeviceIdentity.js, che crea un'identità del dispositivo e la chiave di sicurezza associata per connettere l'app per dispositivo simulato.CreateDeviceIdentity.js, which creates a device identity and associated security key to connect your simulated device app.
  • ReadDeviceToCloudMessages.js, che visualizza i dati di telemetria inviati dall'app per dispositivo simulato.ReadDeviceToCloudMessages.js, which displays the telemetry sent by your simulated device app.
  • SimulatedDevice.js, che si connette all'hub IoT con l'identità del dispositivo creata in precedenza e invia un messaggio di telemetria ogni secondo usando il protocollo MQTT.SimulatedDevice.js, which connects to your IoT hub with the device identity created earlier, and sends a telemetry message every second using the MQTT protocol.

Nota

L'articolo Azure IoT SDK offre informazioni sui vari Azure IoT SDK che è possibile usare per compilare applicazioni da eseguire nei dispositivi e il backend della soluzione.The article Azure IoT SDKs provides information about the Azure IoT SDKs that you can use to build both applications to run on devices and your solution back end.

Per completare l'esercitazione, sono necessari gli elementi seguenti:To complete this tutorial, you need the following:

  • Node.js 4.0.x o versione successiva.Node.js version 4.0.x or later.
  • Un account Azure attivo.An active Azure account. Se non si ha un account, è possibile creare un account gratuito in pochi minuti.(If you don't have an account, you can create a free account in just a couple of minutes.)

Creare un hub IoTCreate an IoT hub

Creare un hub IoT per connettere l'app per dispositivo simulato.Create an IoT hub for your simulated device app to connect to. La procedura seguente illustra come completare questa attività usando il portale di Azure.The following steps show you how to complete this task by using the Azure portal.

  1. Accedere al portale di Azure.Sign in to the Azure portal.
  2. Selezionare Nuovo > Internet delle cose > Hub IoT.Select New > Internet of Things > IoT Hub.

    Indice del portale di Azure

  3. Nel riquadro Hub IoT immettere le informazioni seguenti per l'hub IoT:In the IoT hub pane, enter the following information for your IoT hub:

    • Nome: creare un nome per l'hub IoT.Name: Create a name for your IoT hub. Se il nome immesso è valido, viene visualizzato un segno di spunta verde.If the name you enter is valid, a green check mark appears.

    Importante

    L'hub IoT sarà individuabile pubblicamente come endpoint DNS, quindi evitare di indicare informazioni riservate nell'assegnazione del nome.The IoT hub will be publicly discoverable as a DNS endpoint, so make sure to avoid any sensitive information while naming it.

    • Piano tariffario e livello di scalabilità: per questa esercitazione selezionare il livello F1 gratuito.Pricing and scale tier: For this tutorial, select the F1 - Free tier. Per altre informazioni, vedere la pagina relativa a piano tariffario e livello di scalabilità.For more information, see the Pricing and scale tier.

    • Gruppo di risorse: creare un gruppo di risorse per ospitare l'hub IoT o usarne uno esistente.Resource group: Create a resource group to host the IoT hub or use an existing one. Per altre informazioni, vedere l'articolo su come usare i gruppi di risorse per gestire le risorse di Azure.For more information, see Use resource groups to manage your Azure resources

    • Località: selezionare la località più vicina.Location: Select the closest location to you.

    • Aggiungi al dashboard: selezionare questa opzione per semplificare l'accesso all'hub IoT dal dashboard.Pin to dashboard: Check this option for easy access to your IoT hub from the dashboard.

      Finestra Hub IoT

  4. Fare clic su Crea.Click Create. La creazione dell'hub IoT può richiedere alcuni minuti.Your IoT hub might take a few minutes to create. È possibile monitorare lo stato di avanzamento nel riquadro Notifiche.You can monitor the progress in the Notifications pane.

Ora che è stato creato un hub IoT, individuare le informazioni importanti che consentono di connettere dispositivi e applicazioni all'hub IoT.Now that you have created an IoT hub, locate the important information that you use to connect devices and applications to your IoT hub.

  1. Dopo avere creato l'hub IoT, fare clic sul nuovo riquadro dell'hub IoT nel portale di Azure per aprire la finestra delle proprietà.When the IoT hub has been created successfully, click the new tile for your IoT hub in the Azure portal to open the properties window for the new IoT hub. Annotare il Nome host, quindi fare clic su Criteri di accesso condiviso.Make a note of the Hostname, and then click Shared access policies.

    Finestra del nuovo hub IoT

  2. In Criteri di accesso condivisi fare clic sul criterio iothubowner, quindi copiare e annotare la stringa di connessione dell'hub IoT nella finestra iothubowner.In Shared access policies, click the iothubowner policy, and then copy and make note of the IoT Hub connection string in the iothubowner window. Per altre informazioni, vedere Controllo di accesso nella "Guida per gli sviluppatori dell'hub IoT".For more information, see Access control in the "IoT Hub developer guide."

    Criteri di accesso condivisi

L'hub IoT è stato creato.You have now created your IoT hub. Ora sono disponibili il nome host e la stringa di connessione dell'hub IoT necessari per completare il resto di questa esercitazione.You have the IoT Hub host name and the IoT Hub connection string that you need to complete the rest of this tutorial.

Creare un'identità del dispositivoCreate a device identity

In questa sezione si scriverà un'app console Node.js che crea un'identità del dispositivo nel registro delle identità dell'hub IoT.In this section, you create a Node.js console app that creates a device identity in the identity registry in your IoT hub. Un dispositivo può connettersi all'hub IoT solo se ha una voce nel registro delle identità.A device can only connect to IoT hub if it has an entry in the identity registry. Per altre informazioni, vedere la sezione Registro di identità della Guida per gli sviluppatori dell'hub IoT.For more information, see the Identity Registry section of the IoT Hub developer guide. Eseguire questa app per generare l'ID dispositivo univoco e la chiave usati dal dispositivo per identificarsi quando invia messaggi da dispositivo a cloud.Run this app to generate the unique device ID and key your device uses to identify itself when it sends device-to-cloud messages.

  1. Creare una nuova cartella vuota denominata createdeviceidentity.Create a new empty folder called createdeviceidentity. Nella cartella createdeviceidentity creare un file package.json eseguendo questo comando al prompt dei comandi.In the createdeviceidentity folder, create a package.json file using the following command at your command prompt. Accettare tutte le impostazioni predefinite:Accept all the defaults:

    npm init
    
  2. Eseguire questo comando al prompt dei comandi nella cartella createdeviceidentity per installare il pacchetto SDK del servizio azure-iothub:At your command prompt in the createdeviceidentity folder, run the following command to install the azure-iothub Service SDK package:

    npm install azure-iothub --save
    
  3. Con un editor di testo creare un file CreateDeviceIdentity.js nella cartella createdeviceidentity.Using a text editor, create a CreateDeviceIdentity.js file in the createdeviceidentity folder.

  4. Aggiungere l'istruzione require seguente all'inizio del file CreateDeviceIdentity.js :Add the following require statement at the start of the CreateDeviceIdentity.js file:

    'use strict';
    
    var iothub = require('azure-iothub');
    
  5. Aggiungere il codice seguente al file CreateDeviceIdentity.js.Add the following code to the CreateDeviceIdentity.js file. Sostituire il valore del segnaposto con la stringa di connessione dell'hub IoT creato nella sezione precedente:Replace the placeholder value with the IoT Hub connection string for the hub you created in the previous section:

    var connectionString = '{iothub connection string}';
    
    var registry = iothub.Registry.fromConnectionString(connectionString);
    
  6. Aggiungere il codice seguente per creare una definizione di dispositivo nel registro di identità dell'hub IoT.Add the following code to create a device definition in the identity registry in your IoT hub. .Se l'ID del dispositivo non esiste nel registro delle identità dei dispositivi il codice crea un dispositivo, in caso contrario restituisce la chiave di quello esistente:This code creates a device if the device ID does not exist in the identity registry, otherwise it returns the key of the existing device:

    var device = {
      deviceId: 'myFirstNodeDevice'
    }
    registry.create(device, function(err, deviceInfo, res) {
      if (err) {
        registry.get(device.deviceId, printDeviceInfo);
      }
      if (deviceInfo) {
        printDeviceInfo(err, deviceInfo, res)
      }
    });
    
    function printDeviceInfo(err, deviceInfo, res) {
      if (deviceInfo) {
        console.log('Device ID: ' + deviceInfo.deviceId);
        console.log('Device key: ' + deviceInfo.authentication.symmetricKey.primaryKey);
      }
    }
    

    Importante

    L'ID dispositivo può essere visibile nei log raccolti per il supporto tecnico e la risoluzione dei problemi, quindi evitare di indicare informazioni riservate nell'assegnazione del nome.The device ID may be visible in the logs collected for customer support and troubleshooting, so make sure to avoid any sensitive information while naming it.

  7. Salvare e chiudere il file CreateDeviceIdentity.js .Save and close CreateDeviceIdentity.js file.

  8. Per eseguire l'applicazione createdeviceidentity, eseguire questo comando al prompt dei comandi nella cartella createdeviceidentity:To run the createdeviceidentity application, execute the following command at the command prompt in the createdeviceidentity folder:

    node CreateDeviceIdentity.js 
    
  9. Prendere nota dei valori di Device ID e Device key,Make a note of the Device ID and Device key. che saranno necessari più avanti quando si creerà un'applicazione che si connette all'hub IoT come dispositivo.You need these values later when you create an application that connects to IoT Hub as a device.

Nota

Il registro di identità dell'hub IoT archivia solo le identità del dispositivo per abilitare l'accesso sicuro all'hub.The IoT Hub identity registry only stores device identities to enable secure access to the IoT hub. Archivia le chiavi e gli ID dispositivo da usare come credenziali di sicurezza e un flag di abilitazione/disabilitazione che consente di disabilitare l'accesso per un singolo dispositivo.It stores device IDs and keys to use as security credentials and an enabled/disabled flag that you can use to disable access for an individual device. Se l'applicazione deve archiviare altri metadati specifici del dispositivo, dovrà usare un archivio specifico dell'applicazione.If your application needs to store other device-specific metadata, it should use an application-specific store. Per altre informazioni, vedere la Guida per gli sviluppatori dell'hub IoT.For more information, see the IoT Hub developer guide.

Ricezione di messaggi da dispositivo a cloudReceive device-to-cloud messages

In questa sezione si creerà un'app console di Node.js che legge i messaggi da dispositivo a cloud dall'hub IoT.In this section, you create a Node.js console app that reads device-to-cloud messages from IoT Hub. L'hub IoT espone un endpoint compatibile con l'hub eventi per abilitare la lettura dei messaggi dispositivo a cloud.An IoT hub exposes an Event Hubs-compatible endpoint to enable you to read device-to-cloud messages. Per semplicità, questa esercitazione crea un lettore di base non adatto per una distribuzione con velocità effettiva elevata.To keep things simple, this tutorial creates a basic reader that is not suitable for a high throughput deployment. L'esercitazione Elaborare messaggi dispositivo a cloud illustra come elaborare i messaggi dispositivo a cloud su vasta scala.The Process device-to-cloud messages tutorial shows you how to process device-to-cloud messages at scale. L'esercitazione Introduzione all'hub eventi offre altre informazioni applicabili agli endpoint compatibili con l'hub eventi dell'hub IoT.The Get Started with Event Hubs tutorial provides further information that is applicable to the IoT Hub Event Hub-compatible endpoints.

Nota

L'endpoint compatibile con Hub eventi per la lettura di messaggi da dispositivo a cloud usa sempre il protocollo AMQP.The Event Hub-compatible endpoint for reading device-to-cloud messages always uses the AMQP protocol.

  1. Creare una cartella vuota denominata readdevicetocloudmessages.Create an empty folder called readdevicetocloudmessages. Nella cartella readdevicetocloudmessages creare un file package.json eseguendo questo comando al prompt dei comandi.In the readdevicetocloudmessages folder, create a package.json file using the following command at your command prompt. Accettare tutte le impostazioni predefinite:Accept all the defaults:

    npm init
    
  2. Eseguire questo comando al prompt dei comandi nella cartella readdevicetocloudmessages per installare il pacchetto azure-event-hubs:At your command prompt in the readdevicetocloudmessages folder, run the following command to install the azure-event-hubs package:

    npm install azure-event-hubs --save
    
  3. Con un editor di testo creare un file ReadDeviceToCloudMessages.js nella cartella readdevicetocloudmessages.Using a text editor, create a ReadDeviceToCloudMessages.js file in the readdevicetocloudmessages folder.

  4. Aggiungere le istruzioni require seguenti all'inizio del file ReadDeviceToCloudMessages.js :Add the following require statements at the start of the ReadDeviceToCloudMessages.js file:

    'use strict';
    
    var EventHubClient = require('azure-event-hubs').Client;
    
  5. Aggiungere la dichiarazione di variabile seguente e sostituire il valore del segnaposto con la stringa di connessione per l'hub IoT:Add the following variable declaration and replace the placeholder value with the IoT Hub connection string for your hub:

    var connectionString = '{iothub connection string}';
    
  6. Aggiungere le due funzioni seguenti che stampano l'output nella console:Add the following two functions that print output to the console:

    var printError = function (err) {
      console.log(err.message);
    };
    
    var printMessage = function (message) {
      console.log('Message received: ');
      console.log(JSON.stringify(message.body));
      console.log('');
    };
    
  7. Aggiungere il codice seguente per creare EventHubClient, aprire la connessione all'hub IoT e creare un ricevitore per ogni partizione.Add the following code to create the EventHubClient, open the connection to your IoT Hub, and create a receiver for each partition. Questa applicazione usa un filtro quando crea un ricevitore, in modo che il ricevitore legga i messaggi inviati all'hub IoT soltanto dopo l'avvio dell'esecuzione del ricevitore.This application uses a filter when it creates a receiver so that the receiver only reads messages sent to IoT Hub after the receiver starts running. Questo filtro è utile in un ambiente di test perché consente di visualizzare solo il set di messaggi corrente.This filter is useful in a test environment so you see just the current set of messages. In un ambiente di produzione, il codice deve verificare di avere elaborato tutti i messaggi.In a production environment, your code should make sure that it processes all the messages. Per altre informazioni, vedere l'esercitazione Elaborare messaggi da dispositivo a cloud dell'hub IoT:For more information, see the How to process IoT Hub device-to-cloud messages tutorial:

    var client = EventHubClient.fromConnectionString(connectionString);
    client.open()
        .then(client.getPartitionIds.bind(client))
        .then(function (partitionIds) {
            return partitionIds.map(function (partitionId) {
                return client.createReceiver('$Default', partitionId, { 'startAfterTime' : Date.now()}).then(function(receiver) {
                    console.log('Created partition receiver: ' + partitionId)
                    receiver.on('errorReceived', printError);
                    receiver.on('message', printMessage);
                });
            });
        })
        .catch(printError);
    
  8. Salvare e chiudere il file ReadDeviceToCloudMessages.js .Save and close the ReadDeviceToCloudMessages.js file.

Creare un'app di dispositivo simulatoCreate a simulated device app

In questa sezione si creerà un'app console Node.js che simula un dispositivo che invia messaggi da dispositivo a cloud a un hub IoT.In this section, you create a Node.js console app that simulates a device that sends device-to-cloud messages to an IoT hub.

  1. Creare una cartella vuota denominata simulateddevice.Create an empty folder called simulateddevice. Nella cartella simulateddevice creare un file package.json eseguendo questo comando al prompt dei comandi.In the simulateddevice folder, create a package.json file using the following command at your command prompt. Accettare tutte le impostazioni predefinite:Accept all the defaults:

    npm init
    
  2. Eseguire questo comando al prompt dei comandi nella cartella simulateddevice per installare il pacchetto SDK per dispositivi azure-iot-device e il pacchetto azure-iot-device-mqtt:At your command prompt in the simulateddevice folder, run the following command to install the azure-iot-device Device SDK package and azure-iot-device-mqtt package:

    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Con un editor di testo creare un file SimulatedDevice.js nella cartella simulateddevice.Using a text editor, create a SimulatedDevice.js file in the simulateddevice folder.

  4. Aggiungere le istruzioni require seguenti all'inizio del file SimulatedDevice.js :Add the following require statements at the start of the SimulatedDevice.js file:

    'use strict';
    
    var clientFromConnectionString = require('azure-iot-device-mqtt').clientFromConnectionString;
    var Message = require('azure-iot-device').Message;
    
  5. Aggiungere una variabile connectionString e usarla per creare un'istanza Client.Add a connectionString variable and use it to create a Client instance. Sostituire il valore di {youriothostname} con il nome dell'hub IoT creato nella sezione Creare un hub IoT.Replace {youriothostname} with the name of the IoT hub you created the Create an IoT Hub section. Sostituire {yourdevicekey} con il valore della chiave del dispositivo generato nella sezione Creare un'identità del dispositivo:Replace {yourdevicekey} with the device key value you generated in the Create a device identity section:

    var connectionString = 'HostName={youriothostname};DeviceId=myFirstNodeDevice;SharedAccessKey={yourdevicekey}';
    
    var client = clientFromConnectionString(connectionString);
    
  6. Aggiungere la funzione seguente per visualizzare l'output dell'applicazione:Add the following function to display output from the application:

    function printResultFor(op) {
      return function printResult(err, res) {
        if (err) console.log(op + ' error: ' + err.toString());
        if (res) console.log(op + ' status: ' + res.constructor.name);
      };
    }
    
  7. Creare un callback e usare la funzione setInterval per inviare un messaggio all'hub IoT ogni secondo:Create a callback and use the setInterval function to send a message to your IoT hub every second:

    var connectCallback = function (err) {
      if (err) {
        console.log('Could not connect: ' + err);
      } else {
        console.log('Client connected');
    
        // Create a message and send it to the IoT Hub every second
        setInterval(function(){
            var temperature = 20 + (Math.random() * 15);
            var humidity = 60 + (Math.random() * 20);            
            var data = JSON.stringify({ deviceId: 'myFirstNodeDevice', temperature: temperature, humidity: humidity });
            var message = new Message(data);
            message.properties.add('temperatureAlert', (temperature > 30) ? 'true' : 'false');
            console.log("Sending message: " + message.getData());
            client.sendEvent(message, printResultFor('send'));
        }, 1000);
      }
    };
    
  8. Aprire la connessione all'hub IoT e iniziare a inviare messaggi:Open the connection to your IoT Hub and start sending messages:

    client.open(connectCallback);
    
  9. Salvare e chiudere il file SimulatedDevice.js .Save and close the SimulatedDevice.js file.

Nota

Per semplicità, in questa esercitazione non si implementa alcun criterio di ripetizione dei tentativi.To keep things simple, this tutorial does not implement any retry policy. Nel codice di produzione è consigliabile implementare criteri per i tentativi, ad esempio un backoff esponenziale, come illustrato nell'articolo di MSDN Transient Fault Handling (Gestione degli errori temporanei).In production code, you should implement retry policies (such as an exponential backoff), as suggested in the MSDN article Transient Fault Handling.

Eseguire le appRun the apps

A questo punto è possibile eseguire le app.You are now ready to run the apps.

  1. Al prompt dei comandi nella cartella readdevicetocloudmessages eseguire questo comando per iniziare a monitorare l'hub IoT:At a command prompt in the readdevicetocloudmessages folder, run the following command to begin monitoring your IoT hub:

    node ReadDeviceToCloudMessages.js 
    

    App del servizio hub IoT per Node.js per monitorare i messaggi dispositivo a cloud

  2. Eseguire questo comando al prompt dei comandi nella cartella simulateddevice per iniziare a inviare dati di telemetria all'hub IoT:At a command prompt in the simulateddevice folder, run the following command to begin sending telemetry data to your IoT hub:

    node SimulatedDevice.js
    

    App del dispositivo hub IoT per Node.js per inviare i messaggi da dispositivo a cloud

  3. Il riquadro Utilizzo nel portale di Azure mostra il numero di messaggi inviati all'hub IoT:The Usage tile in the Azure portal shows the number of messages sent to the IoT hub:

    Riquadro Utilizzo del portale di Azure con il numero dei messaggi inviati all'hub IoT

Passaggi successiviNext steps

In questa esercitazione è stato configurato un nuovo hub IoT nel Portale di Azure ed è stata quindi creata un'identità del dispositivo nel registro di identità dell'hub IoT.In this tutorial, you configured a new IoT hub in the Azure portal, and then created a device identity in the IoT hub's identity registry. Questa identità del dispositivo è stata usata per consentire all'app per dispositivo simulato di inviare all'hub IoT messaggi dispositivo a cloud.You used this device identity to enable the simulated device app to send device-to-cloud messages to the IoT hub. È stata anche creata un'app che visualizza i messaggi ricevuti dall'hub IoT.You also created an app that displays the messages received by the IoT hub.

Per altre informazioni sulle attività iniziali con l'hub IoT e per esplorare altri scenari IoT, vedere:To continue getting started with IoT Hub and to explore other IoT scenarios, see:

Per informazioni sull'estensione della soluzione IoT e l'elaborazione di messaggi dispositivo a cloud su vasta scala, vedere l'esercitazione Elaborare messaggi dispositivo a cloud.To learn how to extend your IoT solution and process device-to-cloud messages at scale, see the Process device-to-cloud messages tutorial.

Per altre informazioni sulle attività iniziali con l'hub IoT di Azure e per esplorare altri scenari IoT, vedere:To continue to get started with Azure IoT Hub and to explore other IoT scenarios, see the following: