Felhőből eszközre irányuló üzenetek küldése IoT Hub (Node.js)

Azure IoT Hub egy teljes körűen felügyelt szolgáltatás, amely lehetővé teszi a megbízható és biztonságos kétirányú kommunikációt több millió eszköz és egy megoldás háttérrendszere között.

Ez a cikk a következőkhöz nyújt útmutatást:

  • Felhőből eszközre (C2D) irányuló üzenetek küldése a megoldás háttérrendszeréből egyetlen eszközre a IoT Hub

  • Felhőből eszközre irányuló üzenetek fogadása egy eszközön

  • Kézbesítés nyugtázásának (visszajelzésének) kérése a megoldás háttérrendszeréből az eszközre küldött üzenetekhez IoT Hub

Megjegyzés

A cikkben ismertetett funkciók csak a IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub szintekkel kapcsolatos további információkért lásd: A megoldáshoz megfelelő IoT Hub szint kiválasztása.

A cikk végén két Node.js konzolalkalmazást futtat:

  • simple_sample_device: a Microsoft Azure IoT SDK for Node.jsrészét képező eszközalkalmazás, amely csatlakozik az IoT Hubhoz, és fogadja a felhőből az eszközre irányuló üzeneteket.

  • SendCloudToDevice: olyan szolgáltatásalkalmazás, amely felhőből eszközre irányuló üzenetet küld az eszközalkalmazásnak IoT Hub keresztül, majd megkapja a kézbesítés nyugtázását.

Megjegyzés

IoT Hub számos eszközplatformhoz és nyelvhez (C, Java, Python és JavaScript) támogatja az SDK-t az Azure IoT-eszköz SDK-kon keresztül.

A felhőből az eszközre irányuló üzenetekről további információt a Felhőből eszközre irányuló üzenetek küldése IoT Hubról című témakörben talál.

Előfeltételek

  • Azure-előfizetés. Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

  • Egy IoT Hub az Azure-előfizetésben. Ha még nem rendelkezik központokkal, kövesse az IoT Hub létrehozása című témakör lépéseit.

  • Az IoT Hubon regisztrált eszköz. Ha még nem regisztrált eszközt, regisztráljon egyet a Azure Portal.

  • Ez a cikk a Node.js-hez készült Azure IoT SDK-ból származó mintakódot használja.

    • Töltse le vagy klónozza az SDK-adattárat a GitHubról a fejlesztőgépre.
    • Győződjön meg arról, hogy Node.js 10.0.x vagy újabb verzió van telepítve a fejlesztői gépen. A fejlesztési környezet előkészítése ismerteti, hogyan telepíthet Node.js ehhez a cikkhez Windows vagy Linux rendszeren.
  • Győződjön meg arról, hogy a 8883-as port nyitva van a tűzfalon. A cikkben szereplő eszközminta MQTT protokollt használ, amely a 8883-es porton keresztül kommunikál. Ez a port bizonyos vállalati és oktatási hálózati környezetben blokkolva lehet. További információkért és a probléma megkerülésének módjaiért lásd: Csatlakozás IoT Hub -hez (MQTT).

Az eszköz kapcsolati sztringjének beszerzése

Ebben a cikkben egy olyan mintaalkalmazást futtat, amely szimulál egy eszközt, amely a IoT Hub keresztül küldött felhőből eszközre irányuló üzeneteket fogad. AMicrosoft Azure IoT SDK for Node.js simple_sample_device mintaalkalmazás csatlakozik az IoT Hubhoz, és szimulált eszközként működik. A minta a regisztrált eszköz elsődleges kapcsolati sztring használja az IoT Hubon.

Az IoT Hubon regisztrált eszköz elsődleges kapcsolati sztring az alábbi lépésekkel szerezheti be:

  1. A Azure Portal válassza az Erőforráscsoportok lehetőséget. Válassza ki azt az erőforráscsoportot, ahol a központ található, majd válassza ki a központot az erőforrások listájából.

  2. Az IoT Hub bal oldali paneljén, a Eszközkezelés alatt válassza az Eszközök lehetőséget.

  3. Az eszközök listájában válassza ki a megfelelő eszközt.

  4. Másolja ki az Elsődleges kapcsolati sztring, és mentse az értéket.

    Képernyőkép az IoT Hubon regisztrált eszköz elsődleges kapcsolati sztring lekéréséről a Azure Portal.

Üzenetek fogadása az eszközalkalmazásban

Ebben a szakaszban futtassa a simple_sample_device eszközalkalmazást az IoT Hubon keresztül küldött C2D-üzenetek fogadásához. Nyisson meg egy új parancssort, és keresse meg az azure-iot-sdk-node\device\samples\javascript mappát abban a mappában, amelyben kibontotta az Azure IoT Node.js SDK-t. Futtassa az alábbi parancsokat, és cserélje le a {Your device connection string} helyőrző értékét arra az eszközre, kapcsolati sztring az IoT Hub regisztrált eszközéről másolt.

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

A következő kimenet a mintaeszköz-alkalmazásból származik, miután sikeresen elindult és csatlakozott az IoT Hubhoz:

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}

Ebben a példában az eszköz meghívja a teljes függvényt, hogy értesítse IoT Hub, hogy feldolgozta az üzenetet, és hogy biztonságosan eltávolítható az eszközsorból. Ha MQTT-átvitelt használ, és kihagyható, a befejezéshez szükséges hívás nem szükséges. Az AMQP-hez és a HTTPS-hez szükséges.

Az AMQP-vel és a HTTPS-lel, de az MQTT-vel nem, az eszköz a következőket is megteheti:

  • Hagyjon fel egy üzenetet, ami azt eredményezi, hogy IoT Hub megtartja az üzenetet az eszközsorban későbbi felhasználás céljából.
  • Elutasíthat egy üzenetet, amely véglegesen eltávolítja az üzenetet az eszközsorból.

Ha olyan esemény történik, amely megakadályozza, hogy az eszköz befejezi, megszakítsa vagy elutasítsa az üzenetet, IoT Hub egy rögzített időtúllépési időszak után újra kézbesíti az üzenetet. Ezért az eszközalkalmazás üzenetfeldolgozási logikájának idempotensnek kell lennie, hogy ugyanazon üzenet többszöri fogadása ugyanazt az eredményt hozza létre.

A felhőből az eszközre irányuló üzenetek életciklusáról és arról, hogy IoT Hub hogyan dolgozza fel a felhőből az eszközre irányuló üzeneteket, olvassa el A felhőből az eszközre irányuló üzenetek küldése IoT Hubról című témakört.

Megjegyzés

Ha AZ MQTT vagy AMQP helyett HTTPS-t használ átvitelként, az ügyfélpéldány ritkán (legalább 25 percenként) ellenőrzi IoT Hub üzeneteit. Az MQTT, az AMQP és a HTTPS-támogatás közötti különbségekről további információt a Felhőalapú kommunikáció ésa Kommunikációs protokoll kiválasztása című témakörben talál.

Az IoT Hub kapcsolati sztring lekérése

Ebben a cikkben létrehoz egy háttérszolgáltatást, amellyel felhőből eszközre irányuló üzeneteket küldhet a IoT Hub. A felhőből az eszközre irányuló üzenetek küldéséhez a szolgáltatásnak a szolgáltatás csatlakoztatási engedélyére van szüksége. Alapértelmezés szerint minden IoT Hub egy szolgáltatás nevű megosztott hozzáférési szabályzattal jön létre, amely megadja ezt az engedélyt.

A szolgáltatásszabályzathoz tartozó IoT Hub kapcsolati sztring az alábbi lépésekkel szerezheti be:

  1. A Azure Portal válassza az Erőforráscsoportok lehetőséget. Válassza ki azt az erőforráscsoportot, ahol a központ található, majd válassza ki a központot az erőforrások listájából.

  2. Az IoT Hub bal oldali paneljén válassza a Megosztott hozzáférési szabályzatok lehetőséget.

  3. A szabályzatok listájában válassza ki a szolgáltatásházirendet.

  4. Másolja ki az Elsődleges kapcsolati sztring, és mentse az értéket.

Képernyőkép a kapcsolati sztring a Azure Portal IoT Hub való lekéréséről.

A IoT Hub megosztott hozzáférési szabályzatokkal és engedélyekkel kapcsolatos további információkért lásd: Hozzáférés-vezérlés és engedélyek.

Felhőből eszközre irányuló üzenet küldése

Ebben a szakaszban egy Node.js konzolalkalmazást hoz létre, amely felhőből eszközre irányuló üzeneteket küld a szimulált eszközalkalmazásnak. Szüksége van az eszköz azonosítójára és az IoT Hub kapcsolati sztring.

  1. Hozzon létre egy sendcloudtodevicemessage nevű üres mappát. Nyisson meg egy parancssort, keresse meg a sendcloudtodevicemessage mappát, majd futtassa a következő parancsot egy package.json fájl létrehozásához a mappában. Nyomja le az Enter billentyűt a npm parancs által bemutatott minden egyes kérdésnél az alapértelmezett kérés elfogadásához:

    npm init
    
  2. A sendcloudtodevicemessage mappában található parancssorban futtassa a következő parancsot az azure-iothub csomag telepítéséhez:

    npm install azure-iothub --save
    
  3. Szövegszerkesztővel hozzon létre egy SendCloudToDeviceMessage.js fájlt a sendcloudtodevicemessage mappában.

  4. Adja hozzá a következő require utasításokat a SendCloudToDeviceMessage.js fájl elején:

    'use strict';
    
    var Client = require('azure-iothub').Client;
    var Message = require('azure-iot-common').Message;
    
  5. Adja hozzá a következő kódot SendCloudToDeviceMessage.js fájlhoz. Cserélje le az "{iot hub kapcsolati sztring}" és "{device ID}" helyőrző értékeket a korábban feljegyzett IoT Hub kapcsolati sztring és eszközazonosítóra:

    var connectionString = '{iot hub connection string}';
    var targetDevice = '{device id}';
    
    var serviceClient = Client.fromConnectionString(connectionString);
    
  6. Adja hozzá a következő függvényt a művelet eredményeinek a konzolra való nyomtatásához:

    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. Adja hozzá a következő függvényt a kézbesítési visszajelzési üzenetek konzolra való nyomtatásához:

    function receiveFeedback(err, receiver){
      receiver.on('message', function (msg) {
        console.log('Feedback message:')
        console.log(msg.getData().toString('utf-8'));
      });
    }
    
  8. Adja hozzá a következő kódot, hogy üzenetet küldjön az eszköznek, és kezelje a visszajelzési üzenetet, amikor az eszköz nyugtázza a felhőből az eszközre irányuló üzenetet:

    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. Mentse és zárja be SendCloudToDeviceMessage.js fájlt.

Az alkalmazások futtatása

Most már készen áll az alkalmazások futtatására.

  1. Az azure-iot-sdk-node\device\samples\javascript mappában található parancssorban futtassa a következő parancsot a telemetriai adatok IoT Hub való küldéséhez és a felhőalapú üzenetek figyeléséhez:

    node simple_sample_device.js
    

    A szimulált eszközalkalmazás futtatása

  2. A sendcloudtodevicemessage mappában található parancssorban futtassa a következő parancsot egy felhőből eszközre irányuló üzenet küldéséhez, és várja meg a nyugtázási visszajelzést:

    node SendCloudToDeviceMessage.js
    

    Az alkalmazás futtatásával küldje el a felhőből az eszközre parancsot

    Megjegyzés

    Az egyszerűség kedvéért ez a cikk nem alkalmaz újrapróbálkozési szabályzatot. Az éles kódban újrapróbálkozási szabályzatokat (például exponenciális visszalépést) kell implementálnia az Átmeneti hibakezelés című cikkben leírtak szerint.

Következő lépések

Ebben a cikkben megtanulta, hogyan küldhet és fogadhat felhőből eszközre irányuló üzeneteket.