Share via


Cloud-naar-apparaat-berichten verzenden met IoT Hub (Node.js)

Azure IoT Hub is een volledig beheerde service die betrouwbare en veilige bidirectionele communicatie tussen miljoenen apparaten en een back-end van een oplossing mogelijk maakt.

In dit artikel leest u informatie over:

  • Cloud-naar-apparaat-berichten (C2D) verzenden vanaf de back-end van uw oplossing naar één apparaat via IoT Hub

  • Cloud-naar-apparaat-berichten ontvangen op een apparaat

  • Ontvangstbevestiging (feedback) aanvragen vanuit de back-end van uw oplossing voor berichten die vanaf IoT Hub naar een apparaat worden verzonden

Notitie

De functies die in dit artikel worden beschreven, zijn alleen beschikbaar in de standaardlaag van de IoT Hub. Zie Choose the right IoT Hub tier for your solution (De juiste IoT Hub laag voor uw oplossing kiezen) voor meer informatie over de lagen Basic en Standard/free IoT Hub.

Aan het einde van dit artikel voert u twee Node.js console-apps uit:

  • simple_sample_device: een voorbeeld van een apparaat-app die deel uitmaakt van de Microsoft Azure IoT SDK voor Node.js, die verbinding maakt met uw IoT-hub en cloud-naar-apparaat-berichten ontvangt.

  • SendCloudToDevice: een service-app die een cloud-naar-apparaat-bericht verzendt naar de apparaat-app via IoT Hub en vervolgens de ontvangstbevestiging ontvangt.

Notitie

IoT Hub biedt SDK-ondersteuning voor veel apparaatplatforms en -talen (C, Java, Python en JavaScript) via de Azure IoT-apparaat-SDK's.

Zie Cloud-naar-apparaat-berichten verzenden vanuit een IoT-hub voor meer informatie over cloud-naar-apparaat-berichten.

Vereisten

  • Een Azure-abonnement. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.

  • Een IoT-hub in uw Azure-abonnement. Als u nog geen hub hebt, kunt u de stappen in Een IoT-hub maken volgen.

  • Een apparaat dat is geregistreerd in uw IoT-hub. Als u nog geen apparaat hebt geregistreerd, registreert u er een in de Azure Portal.

  • In dit artikel wordt voorbeeldcode van de Azure IoT SDK gebruikt voor Node.js.

    • Download of kloon de SDK-opslagplaats van GitHub naar uw ontwikkelcomputer.
    • Zorg ervoor dat Node.js versie 10.0.x of hoger is geïnstalleerd op uw ontwikkelcomputer. In Uw ontwikkelomgeving voorbereiden wordt beschreven hoe u Node.js voor dit artikel installeert in Windows of Linux.
  • Zorg ervoor dat de poort 8883 is geopend in de firewall. Het apparaatvoorbeeld in dit artikel maakt gebruik van het MQTT-protocol, dat communiceert via poort 8883. Deze poort is in sommige netwerkomgevingen van bedrijven en onderwijsinstellingen mogelijk geblokkeerd. Zie Verbinding maken met IoT Hub (MQTT) voor meer informatie en manieren om dit probleem te omzeilen.

De verbindingsreeks ophalen

In dit artikel voert u een voorbeeld-app uit waarmee een apparaat wordt gesimuleerd, dat cloud-naar-apparaat-berichten ontvangt die via uw IoT Hub worden verzonden. De simple_sample_device voorbeeld-app die is opgenomen in de Microsoft Azure IoT SDK voor Node.js verbinding maakt met uw IoT-hub en fungeert als uw gesimuleerd apparaat. In het voorbeeld wordt de primaire connection string van het geregistreerde apparaat op uw IoT-hub gebruikt.

Voer de volgende stappen uit om de primaire connection string op te halen voor een apparaat dat is geregistreerd bij uw IoT-hub:

  1. Selecteer Resourcegroepenin de Azure Portal. Selecteer de resourcegroep waar uw hub zich bevindt en selecteer vervolgens uw hub in de lijst met resources.

  2. Selecteer apparaten in het linkerdeelvenster van uw IoT-hub onder Apparaatbeheer.

  3. Selecteer het juiste apparaat in de lijst met apparaten.

  4. Kopieer de Primaire connection string en sla de waarde op.

    Schermopname van het ophalen van de primaire connection string voor een apparaat dat is geregistreerd bij uw IoT-hub in de Azure Portal.

Berichten ontvangen in de apparaat-app

Voer in deze sectie de simple_sample_device voorbeeldapparaat-app uit om C2D-berichten te ontvangen die zijn verzonden via uw IoT-hub. Open een nieuwe opdrachtprompt en navigeer naar de map azure-iot-sdk-node\device\samples\javascript , onder de map waarin u de Azure IoT Node.js SDK hebt uitgevouwen. Voer de volgende opdrachten uit, waarbij u de waarde van de {Your device connection string} tijdelijke aanduiding vervangt door het apparaat connection string u hebt gekopieerd van het geregistreerde apparaat in uw IoT-hub.

set IOTHUB_DEVICE_CONNECTION_STRING={Your device connection string}
node simple_sample_device.js

De volgende uitvoer is afkomstig van de voorbeeldapparaat-app nadat deze is gestart en verbinding heeft gemaakt met uw IoT-hub:

Client connected
Client connected
Client connected
Sending message: {"deviceId":"myFirstDevice","windSpeed":10.949952400617569,"temperature":26.0096515658525,"humidity":72.59398225838534}
Client connected
Client connected
send status: MessageEnqueued
Sending message: {"deviceId":"myFirstDevice","windSpeed":12.917649160180087,"temperature":27.336831253904613,"humidity":77.37300365434534}

In dit voorbeeld roept het apparaat de volledige functie aan om IoT Hub te melden dat het bericht is verwerkt en dat het veilig uit de apparaatwachtrij kan worden verwijderd. De aanroep die moet worden voltooid , is niet vereist als u MQTT-transport gebruikt en kan worden weggelaten. Dit is vereist voor AMQP en HTTPS.

Met AMQP en HTTPS, maar niet MQTT, kan het apparaat ook het volgende doen:

  • Een bericht verlaten, waardoor IoT Hub het bericht in de apparaatwachtrij bewaart voor toekomstig gebruik.
  • Een bericht weigeren, waardoor het bericht definitief uit de apparaatwachtrij wordt verwijderd.

Als er iets gebeurt waardoor het apparaat het bericht niet kan voltooien, afbreken of weigeren, zal IoT Hub na een vaste time-outperiode het bericht opnieuw in de wachtrij plaatsen voor bezorging. Daarom moet de logica voor berichtverwerking in de apparaat-app idempotent zijn, zodat hetzelfde bericht meerdere keren wordt ontvangen hetzelfde resultaat oplevert.

Zie Cloud-naar-apparaat-berichten verzenden vanuit een IoT-hub voor meer informatie over de levenscyclus van cloud-naar-apparaat-berichten en hoe IoT Hub cloud-naar-apparaat-berichten verwerkt.

Notitie

Als u HTTPS gebruikt in plaats van MQTT of AMQP als transport, controleert het clientexemplaar af en toe op berichten van IoT Hub (minimaal elke 25 minuten). Zie Richtlijnen voor cloud-naar-apparaatcommunicatie en Een communicatieprotocol kiezen voor meer informatie over de verschillen tussen MQTT-, AMQP- en HTTPS-ondersteuning.

De IoT Hub-connection string ophalen

In dit artikel maakt u een back-endservice voor het verzenden van cloud-naar-apparaat-berichten via uw IoT Hub. Als u cloud-naar-apparaat-berichten wilt verzenden, heeft uw service de machtiging serviceverbinding nodig. Standaard wordt elke IoT Hub gemaakt met een gedeeld toegangsbeleid met de naam service die deze machtiging verleent.

Volg deze stappen om de IoT Hub connection string voor het servicebeleid op te halen:

  1. Selecteer Resourcegroepenin de Azure Portal. Selecteer de resourcegroep waar uw hub zich bevindt en selecteer vervolgens uw hub in de lijst met resources.

  2. Selecteer in het linkerdeelvenster van uw IoT-hub beleid voor gedeelde toegang.

  3. Selecteer het servicebeleid in de lijst met beleidsregels.

  4. Kopieer de Primaire connection string en sla de waarde op.

Schermopname van het ophalen van de connection string van uw IoT Hub in de Azure Portal.

Zie Toegangsbeheer en machtigingen voor meer informatie over IoT Hub gedeelde toegangsbeleid en -machtigingen.

Een cloud-naar-apparaat-bericht verzenden

In deze sectie maakt u een Node.js console-app waarmee cloud-naar-apparaat-berichten worden verzonden naar de gesimuleerde apparaat-app. U hebt de apparaat-id van uw apparaat en uw IoT Hub connection string nodig.

  1. Maak een lege map met de naam sendcloudtodevicemessage. Open een opdrachtprompt, navigeer naar de map sendcloudtodevicemessage en voer de volgende opdracht uit om een package.json bestand in die map te maken. Druk op Enter bij elke prompt die door de npm opdracht wordt weergegeven om de standaardwaarde voor die prompt te accepteren:

    npm init
    
  2. Voer bij de opdrachtprompt in de map sendcloudtodevicemessage de volgende opdracht uit om het pakket azure-iothub te installeren:

    npm install azure-iothub --save
    
  3. Maak met een teksteditor een SendCloudToDeviceMessage.js-bestand in de map sendcloudtodevicemessage .

  4. Voeg de volgende require instructies toe aan het begin van het SendCloudToDeviceMessage.js-bestand :

    'use strict';
    
    var Client = require('azure-iothub').Client;
    var Message = require('azure-iot-common').Message;
    
  5. Voeg de volgende code toe aan SendCloudToDeviceMessage.js bestand. Vervang de tijdelijke aanduidingen {iot hub connection string} en {device ID} door de ioT-hub-connection string en apparaat-id die u eerder hebt genoteerd:

    var connectionString = '{iot hub connection string}';
    var targetDevice = '{device id}';
    
    var serviceClient = Client.fromConnectionString(connectionString);
    
  6. Voeg de volgende functie toe om bewerkingsresultaten af te drukken op de console:

    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. Voeg de volgende functie toe om feedbackberichten over bezorging naar de console af te drukken:

    function receiveFeedback(err, receiver){
      receiver.on('message', function (msg) {
        console.log('Feedback message:')
        console.log(msg.getData().toString('utf-8'));
      });
    }
    
  8. Voeg de volgende code toe om een bericht naar uw apparaat te verzenden en het feedbackbericht te verwerken wanneer het apparaat het cloud-naar-apparaat-bericht bevestigt:

    serviceClient.open(function (err) {
      if (err) {
        console.error('Could not connect: ' + err.message);
      } else {
        console.log('Service client connected');
        serviceClient.getFeedbackReceiver(receiveFeedback);
        var message = new Message('Cloud to device message.');
        message.ack = 'full';
        message.messageId = "My Message ID";
        console.log('Sending message: ' + message.getData());
        serviceClient.send(targetDevice, message, printResultFor('send'));
      }
    });
    
  9. SlaSendCloudToDeviceMessage.jsbestand op en sluit het.

De toepassingen uitvoeren

U bent nu klaar om de toepassingen uit te voeren.

  1. Voer bij de opdrachtprompt in de map azure-iot-sdk-node\device\samples\javascript de volgende opdracht uit om telemetrie te verzenden naar IoT Hub en om te luisteren naar cloud-naar-apparaat-berichten:

    node simple_sample_device.js
    

    De app voor een gesimuleerd apparaat uitvoeren

  2. Voer bij een opdrachtprompt in de map sendcloudtodevicemessage de volgende opdracht uit om een cloud-naar-apparaat-bericht te verzenden en te wachten op de bevestigingsfeedback:

    node SendCloudToDeviceMessage.js
    

    De app uitvoeren om de cloud-naar-apparaat-opdracht te verzenden

    Notitie

    Ter vereenvoudiging wordt in dit artikel geen beleid voor opnieuw proberen geïmplementeerd. In productiecode moet u beleid voor opnieuw proberen implementeren (zoals exponentieel uitstel), zoals wordt voorgesteld in het artikel Tijdelijke foutafhandeling.

Volgende stappen

In dit artikel hebt u geleerd hoe u cloud-naar-apparaat-berichten kunt verzenden en ontvangen.