Ismerkedés az eszközkezeléssel (Node.js)
A háttéralkalmazások Azure IoT Hub primitívek, például az ikereszközök és a közvetlen metódusok használatával távolról elindíthatják és monitorozhatják az eszközfelügyeleti műveleteket az eszközökön. Ez a cikk bemutatja, hogyan működhet együtt egy háttéralkalmazás és egy eszközalkalmazás a távoli eszköz-újraindítás kezdeményezéséhez és monitorozásához a IoT Hub használatával.
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.
Közvetlen módszerrel eszközfelügyeleti műveleteket (például újraindítást, gyári alaphelyzetbe állítást és belső vezérlőprogram-frissítést) kezdeményezhet egy háttéralkalmazásból a felhőben. Az eszköz a következőket végzi el:
A IoT Hub által küldött metóduskérés kezelése.
A megfelelő eszközspecifikus művelet kezdeményezése az eszközön.
Állapotfrissítések biztosítása jelentett tulajdonságokon keresztül a IoT Hub.
A felhőben egy háttéralkalmazással ikereszköz-lekérdezéseket futtathat az eszközfelügyeleti műveletek előrehaladásának jelentéséhez.
Ez a cikk bemutatja, hogyan hozhat létre:
dmpatterns_getstarted_device.js: egy szimulált eszközalkalmazás közvetlen módszerrel, amely újraindítja az eszközt, és jelenti az utolsó újraindítás időpontját. A közvetlen metódusok a felhőből hívhatók meg.
dmpatterns_getstarted_service.js: egy .NET-konzolalkalmazás, amely az IoT Hubon keresztül hívja meg a szimulált eszközalkalmazás közvetlen metódusát. Megjeleníti a választ és frissítette a jelentett tulajdonságokat.
Előfeltételek
Egy IoT Hub. Hozzon létre egyet a parancssori felülettel vagy a Azure Portal.
Regisztrált eszköz. Regisztráljon egyet a Azure Portal.
Node.js 10.0.x vagy újabb verziót. A fejlesztési környezet előkészítése ismerteti, hogyan telepítheti a 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örnyezetekben blokkolható. További információkért és a probléma megoldásának módjaiért lásd: Csatlakozás IoT Hub (MQTT)-hez.
Eszközalkalmazás létrehozása közvetlen módszerrel
Ebben a szakaszban:
Hozzon létre egy Node.js-konzolalkalmazást, amely válaszol a felhő által meghívott közvetlen metódusra.
Szimulált eszköz újraindításának aktiválása.
A jelentett tulajdonságok használatával engedélyezheti az ikereszköz-lekérdezések számára az eszközök azonosítását és az utolsó újraindításuk időpontjának azonosítását.
Hozzon létre egy felügyelt eszköz nevű üres mappát. A managed-device mappában hozzon létre egy package.json fájlt a parancssorban található alábbi paranccsal. Fogadja el az összes alapértelmezett beállítást:
npm init
A managed-device mappában található parancssorban futtassa a következő parancsot az azure-iot-device Device SDK-csomag és az azure-iot-device-mqtt csomag telepítéséhez:
npm install azure-iot-device azure-iot-device-mqtt --save
Szövegszerkesztővel hozzon létre egy dmpatterns_getstarted_device.js fájlt a managed-device mappában.
Adja hozzá a következő "require" utasításokat a dmpatterns_getstarted_device.js fájl elején:
'use strict'; var Client = require('azure-iot-device').Client; var Protocol = require('azure-iot-device-mqtt').Mqtt;
Adjon hozzá egy connectionString változót, és ezzel hozzon létre egy Ügyfél példányt. Cserélje le a
{yourdeviceconnectionstring}
helyőrző értéket arra az eszközre, kapcsolati sztring, amikor regisztrált egy eszközt a IoT Hub:var connectionString = '{yourdeviceconnectionstring}'; var client = Client.fromConnectionString(connectionString, Protocol);
Adja hozzá a következő függvényt a közvetlen metódus implementálásához az eszközön
var onReboot = function(request, response) { // Respond the cloud app for the direct method response.send(200, 'Reboot started', function(err) { if (err) { console.error('An error occurred when sending a method response:\n' + err.toString()); } else { console.log('Response to method \'' + request.methodName + '\' sent successfully.'); } }); // Report the reboot before the physical restart var date = new Date(); var patch = { iothubDM : { reboot : { lastReboot : date.toISOString(), } } }; // Get device Twin client.getTwin(function(err, twin) { if (err) { console.error('could not get twin'); } else { console.log('twin acquired'); twin.properties.reported.update(patch, function(err) { if (err) throw err; console.log('Device reboot twin state reported') }); } }); // Add your device's reboot API for physical restart. console.log('Rebooting!'); };
Nyissa meg az IoT Hubhoz való kapcsolatot, és indítsa el a közvetlen metódusfigyelőt:
client.open(function(err) { if (err) { console.error('Could not open IotHub client'); } else { console.log('Client opened. Waiting for reboot method.'); client.onDeviceMethod('reboot', onReboot); } });
Mentse és zárja be a dmpatterns_getstarted_device.js fájlt.
Megjegyzés
Az egyszerűség érdekében ez a cikk nem implementál ú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.
Az IoT Hub kapcsolati sztring lekérése
Ebben a cikkben egy olyan háttérszolgáltatást hoz létre, amely közvetlen metódust hív meg egy eszközön. Ha közvetlen metódust szeretne meghívni egy eszközön IoT Hub keresztül, a szolgáltatásnak szolgáltatáscsatlakozási engedéllyel kell rendelkeznie. Alapértelmezés szerint minden IoT Hub egy szolgáltatás nevű megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja.
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ából 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.
Szolgáltatásalkalmazás létrehozása újraindítás indításához
Ebben a szakaszban egy Node.js konzolalkalmazást hoz létre, amely közvetlen módszerrel indít távoli újraindítást egy eszközön. Az alkalmazás ikereszköz-lekérdezésekkel deríti fel az eszköz legutóbbi újraindítási idejét.
Hozzon létre egy trigger-reboot-on-device nevű üres mappát. A trigger-reboot-on-device mappában hozzon létre egy package.json fájlt a parancssorban található alábbi paranccsal. Fogadja el az összes alapértelmezett beállítást:
npm init
A trigger-reboot-on-device mappában található parancssorban futtassa a következő parancsot az azure-iothub Device SDK-csomag és az azure-iot-device-mqtt csomag telepítéséhez:
npm install azure-iothub --save
Szövegszerkesztővel hozzon létre egy dmpatterns_getstarted_service.js fájlt a trigger-reboot-on-device mappában.
Adja hozzá a következő "require" utasításokat a dmpatterns_getstarted_service.js fájl elején:
'use strict'; var Registry = require('azure-iothub').Registry; var Client = require('azure-iothub').Client;
Adja hozzá a következő változódeklarációkat, és cserélje le a
{iothubconnectionstring}
helyőrző értéket az IoT Hubra, kapcsolati sztring korábban kimásolta az IoT Hub lekérése kapcsolati sztring:var connectionString = '{iothubconnectionstring}'; var registry = Registry.fromConnectionString(connectionString); var client = Client.fromConnectionString(connectionString); var deviceToReboot = 'myDeviceId';
Adja hozzá a következő függvényt az eszközmetódus meghívásához a céleszköz újraindításához:
var startRebootDevice = function(twin) { var methodName = "reboot"; var methodParams = { methodName: methodName, payload: null, timeoutInSeconds: 30 }; client.invokeDeviceMethod(deviceToReboot, methodParams, function(err, result) { if (err) { console.error("Direct method error: "+err.message); } else { console.log("Successfully invoked the device to reboot."); } }); };
Adja hozzá a következő függvényt az eszköz lekérdezéséhez és az utolsó újraindítás időpontjának lekéréséhez:
var queryTwinLastReboot = function() { registry.getTwin(deviceToReboot, function(err, twin){ if (twin.properties.reported.iothubDM != null) { if (err) { console.error('Could not query twins: ' + err.constructor.name + ': ' + err.message); } else { var lastRebootTime = twin.properties.reported.iothubDM.reboot.lastReboot; console.log('Last reboot time: ' + JSON.stringify(lastRebootTime, null, 2)); } } else console.log('Waiting for device to report last reboot time.'); }); };
Adja hozzá a következő kódot a közvetlen újraindítási metódust kiváltó függvények meghívásához, és az utolsó újraindítási időpont lekérdezéséhez:
startRebootDevice(); setInterval(queryTwinLastReboot, 2000);
Mentse és zárja be a dmpatterns_getstarted_service.js fájlt.
Az alkalmazások futtatása
Most már készen áll az alkalmazások futtatására.
A managed-device mappában található parancssorban futtassa a következő parancsot a közvetlen újraindítási módszer figyeléséhez.
node dmpatterns_getstarted_device.js
A trigger-reboot-on-device mappában található parancssorban futtassa a következő parancsot a távoli újraindítás elindításához, és kérdezze le az ikereszközt az utolsó újraindítás időpontjának megkereséséhez.
node dmpatterns_getstarted_service.js
A konzolon megjelenik az eszköz válasza a közvetlen újraindítási módszerre és az újraindítás állapotára.
Az alábbiakban a szolgáltatás által küldött közvetlen újraindítási módszerre adott eszközválasz látható:
Az alábbiakban az újraindítást aktiváló szolgáltatás látható, és lekérdezi az ikereszközt az utolsó újraindítási időpontra:
Az eszközfelügyeleti műveletek testreszabása és kiterjesztése
Az IoT-megoldások kibővíthetik az eszközfelügyeleti minták definiált készletét, vagy egyéni mintákat engedélyezhetnek az ikereszköz-alapú és a felhőből az eszközre irányuló módszer primitívjeivel. Az eszközfelügyeleti műveletek további példái a gyári beállítások visszaállítása, a belső vezérlőprogram frissítése, a szoftverfrissítés, az energiagazdálkodás, a hálózat- és kapcsolatkezelés, valamint az adattitkosítás.
Eszközkarbantartási időszakok
Általában úgy konfigurálja az eszközöket, hogy olyan műveleteket hajtsanak végre, amelyek minimálisra csökkentik a megszakításokat és az állásidőt. Az eszközkarbantartási ablakokat gyakran használják annak meghatározására, hogy mikor kell frissíteni az eszköz konfigurációját. A háttérmegoldások az ikereszköz kívánt tulajdonságaival definiálhatnak és aktiválhatnak olyan szabályzatot az eszközön, amely lehetővé teszi a karbantartási időszakot. Amikor egy eszköz megkapja a karbantartási időszak szabályzatát, az ikereszköz jelentett tulajdonságával jelentheti a szabályzat állapotát. A háttéralkalmazás ezután ikereszköz-lekérdezésekkel igazolhatja az eszközök és az egyes szabályzatok megfelelőségét.
Következő lépések
Ebben a cikkben egy közvetlen módszerrel aktivált távoli újraindítást egy eszközön. A jelentett tulajdonságok használatával jelentette az eszköz utolsó újraindítási idejét, és lekérdezte az ikereszközt, hogy felderítse az eszköz legutóbbi újraindítási idejét a felhőből.
ToTo A Raspberry Pi 3 B+ referenciarendszerképet használó Azure IoT Hub cikk IoT Hub és eszközfelügyeleti mintáinak, például a végpontok közötti képalapú frissítésnek a használatának folytatásához.
Az IoT-megoldás kiterjesztéséről és a metódushívások ütemezéséről több eszközön: Feladatok ütemezése és szórása.