Sdílet prostřednictvím


Odesílání zpráv z cloudu do zařízení pomocí ioT Hubu (Node.js)

Azure IoT Hub je plně spravovaná služba, která pomáhá zajistit spolehlivou a zabezpečenou obousměrnou komunikaci mezi miliony zařízení a back-endem řešení.

V tomto článku se dozvíte, jak:

  • Odesílání zpráv typu cloud-zařízení (C2D) z back-endu řešení do jednoho zařízení prostřednictvím IoT Hubu

  • Příjem zpráv typu cloud-zařízení na zařízení

  • Potvrzení o doručení žádosti (zpětná vazba) z back-endu vašeho řešení pro zprávy odeslané do zařízení ze služby IoT Hub

Poznámka:

Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard služby IoT Hub. Další informace o úrovních Služby IoT Hub úrovně Basic a Standard/Free najdete v tématu Volba správné úrovně IoT Hubu pro vaše řešení.

Na konci tohoto článku spustíte dvě Node.js konzolové aplikace:

  • simple_sample_device: Ukázková aplikace zařízení, která je součástí sady Microsoft Azure IoT SDK pro Node.js, která se připojuje k centru IoT a přijímá zprávy typu cloud-zařízení.

  • SendCloudToDevice: aplikace služby, která odešle zprávu typu cloud-zařízení do aplikace zařízení prostřednictvím služby IoT Hub a pak obdrží potvrzení o doručení.

Poznámka:

IoT Hub podporuje řadu platforem a jazyků zařízení (C, Java, Python a JavaScript) prostřednictvím sad SDK pro zařízení Azure IoT.

Další informace o zprávách typu cloud-zařízení najdete v tématu Odesílání zpráv typu cloud-zařízení z centra IoT.

Požadavky

  • Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

  • Centrum IoT ve vašem předplatném Azure Pokud centrum ještě nemáte, můžete postupovat podle kroků v tématu Vytvoření centra IoT.

  • Zařízení zaregistrované ve službě IoT Hub. Pokud ve službě IoT Hub nemáte zařízení, postupujte podle pokynů v části Registrace zařízení.

  • Tento článek používá vzorový kód ze sady Azure IoT SDK pro Node.js.

    • Stáhněte nebo naklonujte úložiště sady SDK z GitHubu do vývojového počítače.
    • Ujistěte se, že na vývojovém počítači je nainstalovaná Node.js verze 10.0.x nebo novější. Příprava vývojového prostředí popisuje, jak nainstalovat Node.js pro tento článek v systému Windows nebo Linux.
  • Ujistěte se, že je v bráně firewall otevřený port 8883. Ukázka zařízení v tomto článku používá protokol MQTT, který komunikuje přes port 8883. Tento port může být blokovaný v některých podnikových a vzdělávacích síťových prostředích. Další informace a způsoby řešení tohoto problému najdete v tématu Připojení ke službě IoT Hub (MQTT).

Získání připojovacího řetězce zařízení

V tomto článku spustíte ukázkovou aplikaci, která simuluje zařízení, které přijímá zprávy typu cloud-zařízení odesílané prostřednictvím služby IoT Hub. Ukázková aplikace simple_sample_device , která je součástí sady Microsoft Azure IoT SDK pro Node.js se připojí k centru IoT a funguje jako simulované zařízení. Ukázka používá primární připojovací řetězec zaregistrovaného zařízení ve službě IoT Hub.

Pokud chcete získat primární připojovací řetězec pro zařízení zaregistrované ve službě IoT Hub, postupujte takto:

  1. Na webu Azure Portal vyberte skupiny prostředků. Vyberte skupinu prostředků, ve které se nachází vaše centrum, a pak vyberte centrum ze seznamu prostředků.

  2. V levém podokně centra IoT v části Správa zařízení vyberte Zařízení.

  3. V seznamu zařízení vyberte příslušné zařízení.

  4. Zkopírujte primární připojovací řetězec a uložte hodnotu.

    Snímek obrazovky, který ukazuje, jak načíst primární připojovací řetězec pro zařízení zaregistrované ve službě IoT Hub na webu Azure Portal

Příjem zpráv v aplikaci zařízení

V této části spusťte simple_sample_device ukázkovou aplikaci zařízení pro příjem zpráv C2D odesílaných prostřednictvím centra IoT. Otevřete nový příkazový řádek a přejděte do složky azure-iot-sdk-node\device\samples\javascript ve složce, do které jste rozbalili sadu Azure IoT Node.js SDK. Spusťte následující příkazy a nahraďte {Your device connection string} zástupnou hodnotu zařízením, připojovací řetězec jste zkopírovali z registrovaného zařízení ve službě IoT Hub.

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

Následující výstup pochází z ukázkové aplikace zařízení po úspěšném spuštění a připojení k centru IoT:

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}

V tomto příkladu zařízení vyvolá úplnou funkci, která upozorní Službu IoT Hub, že zprávu zpracovala a že se dá bezpečně odebrat z fronty zařízení. Pokud používáte přenos MQTT a je možné ho vynechat, není volání dokončeno. Vyžaduje se pro AMQP a HTTPS.

Pomocí AMQP a HTTPS, ale ne MQTT, může zařízení také:

  • Opusťte zprávu, která vede k tomu, že IoT Hub uchovává zprávu ve frontě zařízení pro budoucí spotřebu.
  • Zamítnout zprávu, která trvale odebere zprávu z fronty zařízení.

Pokud se stane něco, co brání zařízení v dokončení, opuštění nebo odmítnutí zprávy, IoT Hub zařadí zprávu znovu do fronty po uplynutí časového limitu. Z tohoto důvodu musí být logika zpracování zpráv v aplikaci zařízení idempotentní, takže přijetí stejné zprávy několikrát způsobí stejný výsledek.

Další informace o životním cyklu zpráv typu cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy typu cloud-zařízení, najdete v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub.

Poznámka:

Pokud jako přenos použijete protokol HTTPS místo MQTT nebo AMQP, instance klienta kontroluje zprávy ze služby IoT Hub zřídka (minimálně každých 25 minut). Další informace o rozdílech mezi podporou MQTT, AMQP a HTTPS najdete v pokynech ke komunikaci typu Cloud-zařízení a volba komunikačního protokolu.

Získání připojovací řetězec centra IoT

V tomto článku vytvoříte back-endovou službu pro odesílání zpráv typu cloud-zařízení prostřednictvím služby IoT Hub. K odesílání zpráv typu cloud-zařízení potřebuje vaše služba oprávnění pro připojení ke službě. Ve výchozím nastavení se každá služba IoT Hub vytvoří pomocí zásady sdíleného přístupu s názvem služby , která toto oprávnění uděluje.

Pokud chcete získat připojovací řetězec ioT Hubu pro zásady služby, postupujte takto:

  1. Na webu Azure Portal vyberte skupiny prostředků. Vyberte skupinu prostředků, ve které se nachází vaše centrum, a pak vyberte centrum ze seznamu prostředků.

  2. V levém podokně centra IoT vyberte zásady sdíleného přístupu.

  3. V seznamu zásad vyberte zásadu služby .

  4. Zkopírujte primární připojovací řetězec a uložte hodnotu.

Snímek obrazovky znázorňující, jak načíst připojovací řetězec ze služby IoT Hub na webu Azure Portal

Další informace ozásadách

Odeslání zprávy typu cloud-zařízení

V této části vytvoříte konzolovou aplikaci Node.js, která odesílá zprávy typu cloud-zařízení do aplikace simulovaného zařízení. Potřebujete ID zařízení ze svého zařízení a připojovací řetězec ioT Hubu.

  1. Vytvořte prázdnou složku s názvem sendcloudtodevicemessage. Otevřete příkazový řádek, přejděte do složky sendcloudtodevicemessage a spuštěním následujícího příkazu vytvořte package.json v této složce soubor. Stisknutím klávesy Enter na každém řádku zobrazeném npm příkazem přijměte výchozí hodnotu pro tento řádek:

    npm init
    
  2. Na příkazovém řádku ve složce sendcloudtodevicemessage spusťte následující příkaz a nainstalujte balíček azure-iothub :

    npm install azure-iothub --save
    
  3. Pomocí textového editoru vytvořte SendCloudToDeviceMessage.js soubor ve složce sendcloudtodevicemessage .

  4. Na začátek souboru SendCloudToDeviceMessage.js přidejte následující require příkazy:

    'use strict';
    
    var Client = require('azure-iothub').Client;
    var Message = require('azure-iot-common').Message;
    
  5. Do souboru SendCloudToDeviceMessage.js přidejte následující kód. Nahraďte zástupné hodnoty {iot Hub připojovací řetězec} a {ID zařízení za připojovací řetězec služby IoT Hub a ID zařízení, které jste si poznamenali dříve:

    var connectionString = '{iot hub connection string}';
    var targetDevice = '{device id}';
    
    var serviceClient = Client.fromConnectionString(connectionString);
    
  6. Do konzoly přidejte následující funkci pro tisk výsledků operací:

    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. Přidejte následující funkci pro tisk zpráv zpětné vazby k doručení do konzoly:

    function receiveFeedback(err, receiver){
      receiver.on('message', function (msg) {
        console.log('Feedback message:')
        console.log(msg.getData().toString('utf-8'));
      });
    }
    
  8. Přidejte následující kód pro odeslání zprávy do zařízení a zpracování zprávy zpětné vazby, když zařízení potvrdí zprávu typu cloud-zařízení:

    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. Uložte a zavřete SendCloudToDeviceMessage.js soubor.

Spuštění aplikací

Teď jste připraveni spustit aplikace.

  1. Na příkazovém řádku ve složce azure-iot-sdk-node\device\samples\javascript spusťte následující příkaz, který odešle telemetrii do ioT Hubu a naslouchá zprávm cloud-zařízení:

    node simple_sample_device.js
    

    Spuštění aplikace simulovaného zařízení

  2. Na příkazovém řádku ve složce sendcloudtodevicemessage spusťte následující příkaz, který odešle zprávu typu cloud-zařízení a počká na zpětnou vazbu potvrzení:

    node SendCloudToDeviceMessage.js
    

    Spuštěním aplikace odešlete příkaz cloud-zařízení.

    Poznámka:

    Pro zjednodušení tento článek neimplementuje žádné zásady opakování. V produkčním kódu byste měli implementovat zásady opakování (například exponenciální reoff), jak je doporučeno v článku Zpracování přechodných chyb.

Další kroky

V tomto článku jste se dozvěděli, jak odesílat a přijímat zprávy typu cloud-zařízení.