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:
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.
Az IoT Hub bal oldali paneljén, a Eszközkezelés alatt válassza az Eszközök lehetőséget.
Az eszközök listájában válassza ki a megfelelő eszközt.
Másolja ki az Elsődleges kapcsolati sztring, és mentse az értéket.
Ü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:
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.
Az IoT Hub bal oldali paneljén válassza a Megosztott hozzáférési szabályzatok lehetőséget.
A szabályzatok listájában válassza ki a szolgáltatásházirendet.
Másolja ki az Elsődleges kapcsolati sztring, és mentse az értéket.
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.
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 anpm
parancs által bemutatott minden egyes kérdésnél az alapértelmezett kérés elfogadásához:npm init
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
Szövegszerkesztővel hozzon létre egy SendCloudToDeviceMessage.js fájlt a sendcloudtodevicemessage mappában.
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;
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);
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); }; }
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')); }); }
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')); } });
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.
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 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
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.
Ha többet szeretne megtudni a felhőből az eszközre irányuló üzenetekről, olvassa el A felhőből az eszközre irányuló üzenetek küldése IoT Hubról című témakört.
Az IoT Hub üzenetformátumokkal kapcsolatos további információkért lásd: IoT Hub üzenetek létrehozása és olvasása.