Ismerkedés az ikereszközökkel (Node.js)

Az ikereszközök JSON-dokumentumok, amelyek az eszközök állapotinformációit, például a metaadatokat, konfigurációkat és állapotokat tárolják. Az IoT Hub minden olyan eszközhöz megőrzi az ikereszközt, amely csatlakozik hozzá.

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.

Az ikereszközök használata:

  • Tárolja az eszköz metaadatait a megoldás háttérrendszeréből.

  • Jelentse az aktuális állapotinformációkat, például az elérhető képességeket és feltételeket, például a használt kapcsolati módszert az eszközalkalmazásból.

  • Szinkronizálja a hosszan futó munkafolyamatok állapotát, például a belső vezérlőprogramot és a konfigurációs frissítéseket egy eszközalkalmazás és egy háttéralkalmazás között.

  • Az eszköz metaadatainak, konfigurációjának vagy állapotának lekérdezése.

Az ikereszközök szinkronizálásra, valamint eszközkonfigurációk és feltételek lekérdezésére lettek tervezve. Az ikereszközökkel kapcsolatos további információkért, beleértve az ikereszközök használatát is, olvassa el az ikereszközök ismertetése című témakört.

Az IoT Hubs az ikereszközöket tárolja, amelyek a következő elemeket tartalmazzák:

  • Címkék. Az eszköz metaadatait csak a megoldás háttérrendszere érheti el.

  • Kívánt tulajdonságok. A megoldás háttérrendszere által módosítható és az eszközalkalmazás által megfigyelhető JSON-objektumok.

  • Jelentett tulajdonságok. Az eszközalkalmazás által módosítható és a megoldás háttérrendszere által olvasható JSON-objektumok.

A címkék és tulajdonságok nem tartalmazhatnak tömböket, de beágyazott objektumokat is tartalmazhatnak.

Az alábbi ábra az ikereszközök szervezetét mutatja be:

Képernyőkép egy ikereszköz-koncepciódiagramról.

Emellett a megoldás háttérrendszere az összes fenti adat alapján lekérdezheti az ikereszközöket. Az ikereszközökkel kapcsolatos további információkért tekintse meg az ikereszközökkel kapcsolatos tudnivalókat. A lekérdezéssel kapcsolatos további információkért lásd az IoT Hub lekérdezési nyelvét.

Ez a cikk bemutatja, hogyan:

  • Szimulált eszközalkalmazás használatával jelentse a kapcsolati csatornáját az ikereszköz jelentett tulajdonságaként.

  • Lekérdezheti az eszközöket a háttéralkalmazásból a korábban létrehozott címkék és tulajdonságok szűrőinek használatával.

Ebben a cikkben két Node.js konzolalkalmazást hoz létre:

  • AddTagsAndQuery.js: egy háttéralkalmazás, amely címkéket ad hozzá, és lekérdezi az ikereszközöket.

  • TwinSimulatedDevice.js: szimulált eszközalkalmazás, amely csatlakozik az IoT Hubhoz, és jelenti a kapcsolati állapotát.

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

Az oktatóanyag elvégzéséhez az alábbiakra van szükség:

  • Egy IoT Hub. Hozzon létre egyet a parancssori felülettel vagy az Azure Portallal.

  • Regisztrált eszköz. Regisztráljon egyet az Azure Portalon.

  • Node.js 10.0.x vagy újabb verziót.

  • 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 tekintse meg az IoT Hubra (MQTT) való Csatlakozás.

Az IoT Hub kapcsolati sztring lekérése

Ebben a cikkben egy háttérszolgáltatást hoz létre, amely hozzáadja a kívánt tulajdonságokat egy ikereszközhöz, majd lekérdezi az identitásjegyzéket, hogy megtalálja az összes, ennek megfelelően frissített jelentett tulajdonságokkal rendelkező eszközt. A szolgáltatásnak szüksége van a szolgáltatás csatlakoztatási engedélyére az ikereszköz kívánt tulajdonságainak módosításához, és a beállításjegyzék olvasási engedélyére van szüksége az identitásjegyzék lekérdezéséhez. Nincs olyan alapértelmezett megosztott hozzáférési szabályzat, amely csak ezt a két engedélyt tartalmazza, ezért létre kell hoznia egyet.

Ha olyan megosztott hozzáférési szabályzatot szeretne létrehozni, amely szolgáltatás-kapcsolódási és beállításjegyzék-olvasási engedélyeket biztosít, és kapcsolati sztring szeretne kapni ehhez a szabályzathoz, 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ája feletti felső menüben válassza a Megosztott házirend hozzáférési szabályzat hozzáadása lehetőséget.

  4. A jobb oldali Megosztott hozzáférési szabályzat hozzáadása panelen adjon meg egy leíró nevet a szabályzatnak, például serviceAndRegistryRead. Az Engedélyek területen válassza a Beállításjegyzék olvasása és szolgáltatás Csatlakozás, majd a Hozzáadás lehetőséget.

    Képernyőfelvétel, amely bemutatja, hogyan adhat hozzá új megosztott hozzáférési szabályzatot.

  5. Válassza ki az új szabályzatot a szabályzatok listájából.

  6. Válassza az Elsődleges kapcsolati sztring másolás ikont, és mentse az értéket.

    Képernyőkép a kapcsolati sztring lekéréséről.

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.

Jelentett tulajdonságokat frissíteni kívánó eszközalkalmazás létrehozása

Ebben a szakaszban egy Node.js konzolalkalmazást hoz létre, amely myDeviceId azonosítóként csatlakozik a központhoz, majd frissíti az ikereszköz jelentett tulajdonságait, hogy meggyőződjön arról, hogy mobilhálózattal csatlakozik.

  1. Hozzon létre egy új, jelentésösszekötő nevű üres mappát. A jelentésösszekötő mappában hozzon létre egy új package.json fájlt a parancssorban található alábbi paranccsal. A --yes paraméter minden alapértelmezett értéket elfogad.

    npm init --yes
    
  2. A jelentésösszekötő mappában található parancssorban futtassa az alábbi parancsot az azure-iot-device és az azure-iot-device-mqtt csomagok telepítéséhez:

    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Szövegszerkesztővel hozzon létre egy új jelentést Csatlakozás ivity.js fájlt a jelentésösszekötő mappában.

  4. Adja hozzá a következő kódot a Jelentés Csatlakozás ivity.js fájlhoz. Cserélje le {device connection string} azt az eszközt, kapcsolati sztring, amikor regisztrált egy eszközt az IoT Hubon:

        'use strict';
        var Client = require('azure-iot-device').Client;
        var Protocol = require('azure-iot-device-mqtt').Mqtt;
    
        var connectionString = '{device connection string}';
        var client = Client.fromConnectionString(connectionString, Protocol);
    
        client.open(function(err) {
        if (err) {
            console.error('could not open IotHub client');
        }  else {
            console.log('client opened');
    
            client.getTwin(function(err, twin) {
            if (err) {
                console.error('could not get twin');
            } else {
                var patch = {
                    connectivity: {
                        type: 'cellular'
                    }
                };
    
                twin.properties.reported.update(patch, function(err) {
                    if (err) {
                        console.error('could not update twin');
                    } else {
                        console.log('twin state reported');
                        process.exit();
                    }
                });
            }
            });
        }
        });
    

    Az ügyfélobjektum az eszköz ikereszközeivel való interakcióhoz szükséges összes metódust elérhetővé teszi az eszközről. Az előző kód az ügyfélobjektum inicializálása után lekéri a myDeviceId eszköz ikereszközét, és frissíti a jelentett tulajdonságot a kapcsolati adatokkal.

  5. Az eszközalkalmazás futtatása

        node ReportConnectivity.js
    

    Ekkor megjelenik az üzenet twin state reported.

  6. Most, hogy az eszköz jelentette a kapcsolati adatait, mindkét lekérdezésben meg kell jelennie. Térjen vissza az addtagsandqueryapp mappába, és futtassa újra a lekérdezéseket:

        node AddTagsAndQuery.js
    

    Ezúttal a myDeviceId-nek mindkét lekérdezési eredményben meg kell jelennie.

    MyDeviceId megjelenítése mindkét lekérdezési eredményben

Szolgáltatásalkalmazás létrehozása, amely frissíti a kívánt tulajdonságokat és lekérdezi az ikerpéldányokat

Ebben a szakaszban egy Node.js konzolalkalmazást hoz létre, amely helyadatokat ad hozzá a myDeviceId azonosítóhoz társított ikereszközhöz. Az alkalmazás lekérdezi az IoT Hubot az USA-ban található eszközökhöz, majd lekérdezi a mobilhálózati kapcsolatot jelentéssel rendelkező eszközöket.

  1. Hozzon létre egy új, addtagsandqueryapp nevű üres mappát. Az addtagsandqueryapp mappában hozzon létre egy új package.json fájlt a parancssorban található alábbi paranccsal. A --yes paraméter minden alapértelmezett értéket elfogad.

    npm init --yes
    
  2. Az addtagsandqueryapp mappában található parancssorban futtassa a következő parancsot az azure-iothub csomag telepítéséhez:

    npm install azure-iothub --save
    
  3. Szövegszerkesztővel hozzon létre egy új AddTagsAndQuery.js fájlt az addtagsandqueryapp mappában.

  4. Adja hozzá a következő kódot a AddTagsAndQuery.js fájlhoz. Cserélje le {iot hub connection string} az IoT Hub kapcsolati sztring az IoT Hub lekérése kapcsolati sztring.

         'use strict';
         var iothub = require('azure-iothub');
         var connectionString = '{iot hub connection string}';
         var registry = iothub.Registry.fromConnectionString(connectionString);
    
         registry.getTwin('myDeviceId', function(err, twin){
             if (err) {
                 console.error(err.constructor.name + ': ' + err.message);
             } else {
                 var patch = {
                     tags: {
                         location: {
                             region: 'US',
                             plant: 'Redmond43'
                       }
                     }
                 };
    
                 twin.update(patch, function(err) {
                   if (err) {
                     console.error('Could not update twin: ' + err.constructor.name + ': ' + err.message);
                   } else {
                     console.log(twin.deviceId + ' twin updated successfully');
                     queryTwins();
                   }
                 });
             }
         });
    

    A beállításjegyzék-objektum elérhetővé teszi a szolgáltatás ikereszközeivel való interakcióhoz szükséges összes metódust. Az előző kód először inicializálja a Beállításjegyzék-objektumot, majd lekéri az ikereszközt a myDeviceId azonosítóhoz, és végül frissíti a címkéket a kívánt helyadatokkal.

    A címkék frissítése után meghívja a queryTwins függvényt.

  5. Adja hozzá a következő kódot AddTagsAndQuery.js végén a queryTwins függvény implementálásához:

         var queryTwins = function() {
             var query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'", 100);
             query.nextAsTwin(function(err, results) {
                 if (err) {
                     console.error('Failed to fetch the results: ' + err.message);
                 } else {
                     console.log("Devices in Redmond43: " + results.map(function(twin) {return twin.deviceId}).join(','));
                 }
             });
    
             query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity.type = 'cellular'", 100);
             query.nextAsTwin(function(err, results) {
                 if (err) {
                     console.error('Failed to fetch the results: ' + err.message);
                 } else {
                     console.log("Devices in Redmond43 using cellular network: " + results.map(function(twin) {return twin.deviceId}).join(','));
                 }
             });
         };
    

    Az előző kód két lekérdezést hajt végre: az első csak a Redmond43-üzemben található eszközök ikereszközeit választja ki, a második pedig pontosítja a lekérdezést, hogy csak azokat az eszközöket válassza ki, amelyek szintén mobilhálózaton keresztül csatlakoznak.

    Amikor a kód létrehozza a lekérdezési objektumot, meghatározza a visszaadott dokumentumok maximális számát a második paraméterben. A lekérdezési objektum tartalmaz egy hasMoreResults logikai tulajdonságot, amellyel többször is meghívhatja a következőAsTwin metódusokat az összes eredmény lekéréséhez. A következő nevű metódus olyan eredményekhez érhető el, amelyek nem ikereszközök, például az összesítő lekérdezések eredményei.

  6. Futtassa az alkalmazást a következőkkel:

        node AddTagsAndQuery.js
    

    A lekérdezés eredményében egy eszköznek kell megjelennie, amely a Redmond43-ban található összes eszközt kéri le, a lekérdezéshez pedig egyet sem, amely az eredményeket mobilhálózatot használó eszközökre korlátozza.

    Az egyetlen eszköz megtekintése a lekérdezés eredményei között

Ebben a cikkben:

  • Eszköz metaadatai hozzáadva címkékként egy háttéralkalmazásból
  • Jelentett eszközkapcsolati információk az ikereszközben
  • Az ikereszköz adatainak lekérdezése SQL-szerű IoT Hub-lekérdezési nyelv használatával

Következő lépések

A következő tudnivalókat ismerheti meg: