Megosztás a következőn keresztül:


Feladatok ütemezése és közvetítése (Node.js)

Az Azure IoT Hub használatával ütemezheti és követheti nyomon az eszközök millióit frissítő feladatokat. Feladatok használata:

  • Eszköz kívánt tulajdonságainak frissítése
  • Címkék frissítése
  • Közvetlen metódusok meghívása

A feladatok elméletileg befuttatják az egyik ilyen műveletet, és nyomon követik a végrehajtás folyamatát egy eszközkészleten, amelyet egy ikereszköz-lekérdezés határoz meg. Egy háttéralkalmazás például egy feladattal meghívhat egy újraindítási metódust 10 000 eszközön, amelyet egy ikereszköz-lekérdezés határoz meg, és amelyet egy későbbi időpontban ütemeznek. Az alkalmazás ezután nyomon követheti az előrehaladást, amint az egyes eszközök megkapják és végrehajtják az újraindítási módszert.

Az alábbi cikkekben további információt talál ezekről a képességekről:

Feljegyzés

A cikkben ismertetett funkciók csak az IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub-szintekről további információt a megoldáshoz megfelelő IoT Hub-szint kiválasztása című témakörben talál.

Ez a cikk bemutatja, hogyan hozhat létre két Node.js alkalmazást:

  • Egy Node.js szimulált eszközalkalmazás, simDevice.js, amely egy lockDoor nevű közvetlen metódust implementál, amelyet a háttéralkalmazás hívhat meg.

  • Egy Node.js konzolalkalmazás, scheduleJobService.js, amely két feladatot hoz létre. Az egyik feladat meghívja a lockDoor közvetlen metódust, egy másik feladat pedig több eszközre küldi a kívánt tulajdonságfrissítéseket.

Feljegyzés

Az eszköz- és háttéralkalmazások készítéséhez elérhető SDK-eszközökről további információt az Azure IoT SDK-kban talál.

Előfeltételek

  • 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örben leírt lépéseket.

  • Az IoT Hubon regisztrált eszköz. Ha nincs eszköze az IoT Hubon, kövesse az eszköz regisztrálása című témakörben leírt lépéseket.

  • Node.js 10.0.x vagy újabb verziót. A fejlesztési környezet előkészítése ismerteti, hogyan telepítheti a jelen cikkhez tartozó Node.js 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 néhány vállalati és oktatási hálózati környezetben blokkolható. További információkért és a probléma megoldásának módjaiért lásd: Csatlakozás az IoT Hubhoz (MQTT).

Szimulált eszközalkalmazás létrehozása

Ebben a szakaszban egy Node.js konzolalkalmazást hoz létre, amely a felhő által hívott közvetlen metódusra válaszol, amely egy szimulált lockDoor metódust aktivál.

Fontos

Ez a cikk az eszközök közös hozzáférésű jogosultságkóddal, más néven szimmetrikus kulcshitelesítéssel való csatlakoztatásának lépéseit tartalmazza. Ez a hitelesítési módszer alkalmas tesztelésre és kiértékeléshez, de az eszköz hitelesítése X.509-tanúsítványokkal biztonságosabb módszer. További információkért tekintse meg a kapcsolatbiztonság ajánlott biztonsági eljárásait>.

  1. Hozzon létre egy új, simDevice nevű üres mappát. A simDevice 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
    
  2. A simDevice mappában található parancssorban futtassa a következő parancsot az azure-iot-device SDK-csomag és az azure-iot-device-mqtt csomag telepítéséhez:

    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Szövegszerkesztővel hozzon létre egy új simDevice.js fájlt a simDevice mappában.

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

    'use strict';
    
    var Client = require('azure-iot-device').Client;
    var Protocol = require('azure-iot-device-mqtt').Mqtt;
    
  5. 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ékét a korábban másolt eszközre kapcsolati sztring.

    var connectionString = '{yourDeviceConnectionString}';
    var client = Client.fromConnectionString(connectionString, Protocol);
    
  6. Adja hozzá a következő függvényt a lockDoor metódus kezeléséhez.

    var onLockDoor = function(request, response) {
    
        // Respond the cloud app for the direct method
        response.send(200, 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.');
            }
        });
    
        console.log('Locking Door!');
    };
    
  7. Adja hozzá a következő kódot a lockDoor metódus kezelőjének regisztrálásához.

    client.open(function(err) {
         if (err) {
             console.error('Could not connect to IotHub client.');
         }  else {
             console.log('Client connected to IoT Hub. Register handler for lockDoor direct method.');
             client.onDeviceMethod('lockDoor', onLockDoor);
         }
    });
    
  8. Mentse és zárja be a simDevice.js fájlt.

Feljegyzés

Az egyszerűség érdekében ez a cikk nem valósít meg ú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, ahogyan azt az Átmeneti hibakezelés című cikk is javasolja.

Az IoT Hub kapcsolati sztring lekérése

Ebben a cikkben egy háttérszolgáltatást hoz létre, amely ütemez egy feladatot egy közvetlen metódus meghívására egy eszközön, ütemez egy feladatot az ikereszköz frissítésére, és figyeli az egyes feladatok előrehaladását. Ezeknek a műveleteknek a végrehajtásához a szolgáltatásnak olvasási és beállításjegyzék-írási engedélyre van szüksége. Alapértelmezés szerint minden IoT Hub egy registryReadWrite nevű megosztott hozzáférési szabályzattal jön létre, amely ezeket az engedélyeket biztosítja.

Az IoT Hub kapcsolati sztring a registryReadWrite szabályzathoz való lekéréséhez kövesse az alábbi lépéseket:

  1. Az Azure Portalon válassza ki az Erőforráscsoportokat. 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. A központ bal oldali ablaktáblájá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 registryReadWrite szabályzatot .

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

    Képernyőfelvétel, amely bemutatja, hogyan kérhető le a kapcsolati sztring

További információ az IoT Hub megosztott hozzáférési szabályzatairól és engedélyeiről: Hozzáférés-vezérlés és engedélyek.

Fontos

Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.

Feladatok ütemezése közvetlen metódus meghívásához és az ikereszköz tulajdonságainak frissítéséhez

Ebben a szakaszban egy Node.js konzolalkalmazást hoz létre, amely egy távoli lockDoort kezdeményez egy eszközön egy közvetlen módszerrel, és frissíti az ikereszköz tulajdonságait.

  1. Hozzon létre egy új, scheduleJobService nevű üres mappát. Az scheduleJobService 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
    
  2. A scheduleJobService 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 uuid --save
    
  3. Szövegszerkesztővel hozzon létre egy új scheduleJobService.js fájlt az scheduleJobService mappában.

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

    'use strict';
    
    var uuid = require('uuid');
    var JobClient = require('azure-iothub').JobClient;
    
  5. Adja hozzá a következő változódeklarációkat. Cserélje le a {iothubconnectionstring} helyőrző értékét az IoT Hub lekérése kapcsolati sztring másolt értékre. Ha a myDeviceId azonosítótól eltérő eszközt regisztrált, mindenképpen módosítsa a lekérdezési feltételben.

    var connectionString = '{iothubconnectionstring}';
    var queryCondition = "deviceId IN ['myDeviceId']";
    var startTime = new Date();
    var maxExecutionTimeInSeconds =  300;
    var jobClient = JobClient.fromConnectionString(connectionString);
    
  6. Adja hozzá a feladat végrehajtásának figyeléséhez használt alábbi függvényt:

    function monitorJob (jobId, callback) {
        var jobMonitorInterval = setInterval(function() {
            jobClient.getJob(jobId, function(err, result) {
            if (err) {
                console.error('Could not get job status: ' + err.message);
            } else {
                console.log('Job: ' + jobId + ' - status: ' + result.status);
                if (result.status === 'completed' || result.status === 'failed' || result.status === 'cancelled') {
                clearInterval(jobMonitorInterval);
                callback(null, result);
                }
            }
            });
        }, 5000);
    }
    
  7. Adja hozzá a következő kódot az eszköz metódusát meghívó feladat ütemezéséhez:

    var methodParams = {
        methodName: 'lockDoor',
        payload: null,
        responseTimeoutInSeconds: 15 // Timeout after 15 seconds if device is unable to process method
    };
    
    var methodJobId = uuid.v4();
    console.log('scheduling Device Method job with id: ' + methodJobId);
    jobClient.scheduleDeviceMethod(methodJobId,
                                queryCondition,
                                methodParams,
                                startTime,
                                maxExecutionTimeInSeconds,
                                function(err) {
        if (err) {
            console.error('Could not schedule device method job: ' + err.message);
        } else {
            monitorJob(methodJobId, function(err, result) {
                if (err) {
                    console.error('Could not monitor device method job: ' + err.message);
                } else {
                    console.log(JSON.stringify(result, null, 2));
                }
            });
        }
    });
    
  8. Adja hozzá a következő kódot a feladat ütemezéséhez az ikereszköz frissítéséhez:

    var twinPatch = {
       etag: '*',
       properties: {
           desired: {
               building: '43',
               floor: 3
           }
       }
    };
    
    var twinJobId = uuid.v4();
    
    console.log('scheduling Twin Update job with id: ' + twinJobId);
    jobClient.scheduleTwinUpdate(twinJobId,
                                queryCondition,
                                twinPatch,
                                startTime,
                                maxExecutionTimeInSeconds,
                                function(err) {
        if (err) {
            console.error('Could not schedule twin update job: ' + err.message);
        } else {
            monitorJob(twinJobId, function(err, result) {
                if (err) {
                    console.error('Could not monitor twin update job: ' + err.message);
                } else {
                    console.log(JSON.stringify(result, null, 2));
                }
            });
        }
    });
    
  9. Mentse és zárja be a scheduleJobService.js fájlt.

Az alkalmazások futtatása

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

  1. A simDevice mappában található parancssorban futtassa a következő parancsot az újraindítás közvetlen metódusának figyeléséhez.

    node simDevice.js
    
  2. A scheduleJobService mappában található parancssorban futtassa a következő parancsot a feladatok aktiválásához az ajtó zárolásához és az ikerpéldány frissítéséhez

    node scheduleJobService.js
    
  3. Megjelenik az eszköz válasza a közvetlen metódusra és a feladat állapotára a konzolon.

    Az alábbiakban az eszköz közvetlen metódusra adott válasza látható:

    Szimulált eszközalkalmazás kimenete

    Az alábbiakban a közvetlen metódus és az ikereszköz-frissítés szolgáltatásütemezési feladatait, valamint a befejezésig futó feladatokat mutatjuk be:

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

Következő lépések

Ebben a cikkben egy közvetlen metódus futtatására és az ikereszköz tulajdonságainak frissítésére ütemezte a feladatokat.

Az IoT Hub és az eszközfelügyeleti minták felderítésének folytatásához frissítsen egy képet az Azure IoT Hub eszközfrissítési oktatóanyagában a Raspberry Pi 3 B+ referenciarendszerkép használatával.