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:
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ů.
V levém podokně centra IoT v části Správa zařízení vyberte Zařízení.
V seznamu zařízení vyberte příslušné zařízení.
Zkopírujte primární připojovací řetězec a uložte hodnotu.
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:
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ů.
V levém podokně centra IoT vyberte zásady sdíleného přístupu.
V seznamu zásad vyberte zásadu služby .
Zkopírujte primární připojovací řetězec a uložte hodnotu.
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.
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émnpm
příkazem přijměte výchozí hodnotu pro tento řádek:npm init
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
Pomocí textového editoru vytvořte SendCloudToDeviceMessage.js soubor ve složce sendcloudtodevicemessage .
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;
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);
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); }; }
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')); }); }
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')); } });
Uložte a zavřete SendCloudToDeviceMessage.js soubor.
Spuštění aplikací
Teď jste připraveni spustit aplikace.
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
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
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í.
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.
Další informace o formátech zpráv ioT Hubu najdete v tématu Vytváření a čtení zpráv ioT Hubu.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro