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.

  1. 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
    
  2. 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
    
  3. Szövegszerkesztővel hozzon létre egy dmpatterns_getstarted_device.js fájlt a managed-device mappában.

  4. 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;
    
  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é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);
    
  6. 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!');
    };
    
  7. 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);
        }
    });
    
  8. 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:

  1. 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.

  2. Az IoT Hub bal oldali paneljén válassza a Megosztott hozzáférési szabályzatok lehetőséget.

  3. A szabályzatok listájából válassza ki a szolgáltatásházirendet.

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

Képernyőkép a kapcsolati sztring a Azure Portal IoT Hub való lekéréséről.

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.

  1. 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
    
  2. 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
    
  3. Szövegszerkesztővel hozzon létre egy dmpatterns_getstarted_service.js fájlt a trigger-reboot-on-device mappában.

  4. 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;
    
  5. 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';
    
  6. 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.");  
            }
        });
    };
    
  7. 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.');
        });
    };
    
  8. 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);
    
  9. 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.

  1. 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
    
  2. 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
    
  3. 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ó:

    manageddevice alkalmazás kimenete

    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:

    triggerrebootondevice alkalmazáskimenet

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.