Sdílet prostřednictvím


Začínáme se správou zařízení (Node.js)

Back-endové aplikace můžou používat primitiva služby Azure IoT Hub, jako jsou dvojčata zařízení a přímé metody, ke vzdálenému spuštění a monitorování akcí správy zařízení na zařízeních. V tomto článku se dozvíte, jak může back-endová aplikace a aplikace zařízení spolupracovat na zahájení a monitorování vzdáleného restartování zařízení pomocí IoT Hubu.

Poznámka:

Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard služby IoT Hub. Další informace o úrovních Služby IoT Hub úrovně Basic a Standard/Free najdete v tématu Volba správné úrovně IoT Hubu pro vaše řešení.

Pomocí přímé metody iniciujte akce správy zařízení (například restartování, obnovení továrního nastavení a aktualizace firmwaru) z back-endové aplikace v cloudu. Zařízení zodpovídá za:

  • Zpracování požadavku metody odeslaného ze služby IoT Hub

  • Inicializování odpovídající akce specifické pro zařízení na zařízení

  • Poskytování aktualizací stavu prostřednictvím ohlášených vlastností do IoT Hubu

Pomocí back-endové aplikace v cloudu můžete spouštět dotazy dvojčete zařízení a hlásit průběh akcí správy zařízení.

V tomto článku se dozvíte, jak vytvořit:

  • dmpatterns_getstarted_device.js: aplikace simulovaného zařízení s přímou metodou, která zařízení restartuje a hlásí čas posledního restartování. Přímé metody se vyvolávají z cloudu.

  • dmpatterns_getstarted_service.js: konzolová aplikace .NET, která volá přímou metodu v aplikaci simulovaného zařízení prostřednictvím centra IoT. Zobrazí odpověď a aktualizované ohlášené vlastnosti.

Požadavky

  • Centrum IoT ve vašem předplatném Azure Pokud centrum ještě nemáte, můžete postupovat podle kroků v tématu Vytvoření centra IoT.

  • Zařízení zaregistrované ve službě IoT Hub. Pokud ve službě IoT Hub nemáte zařízení, postupujte podle pokynů v části Registrace zařízení.

  • Node.js verze 10.0.x nebo novější. Příprava vývojového prostředí popisuje, jak nainstalovat Node.js pro tento článek v systému Windows nebo Linux.

  • Ujistěte se, že je v bráně firewall otevřený port 8883. Ukázka zařízení v tomto článku používá protokol MQTT, který komunikuje přes port 8883. Tento port může být blokovaný v některých podnikových a vzdělávacích síťových prostředích. Další informace a způsoby řešení tohoto problému najdete v tématu Připojení ke službě IoT Hub (MQTT).

Vytvoření aplikace zařízení pomocí přímé metody

V této části:

  • Vytvořte Node.js konzolovou aplikaci, která reaguje na přímou metodu volanou cloudem.

  • Aktivujte restartování simulovaného zařízení.

  • Pomocí ohlášených vlastností povolte dotazy dvojčete zařízení k identifikaci zařízení a k jejich poslednímu restartování.

Důležité

Tento článek obsahuje postup připojení zařízení pomocí sdíleného přístupového podpisu, označovaného také jako ověřování symetrického klíče. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování zařízení pomocí certifikátů X.509 je bezpečnější přístup. Další informace najdete v tématu Zabezpečení osvědčených postupů > zabezpečení připojení.

  1. Vytvořte prázdnou složku s názvem managed-device. Ve složce spravovaného zařízení vytvořte soubor package.json pomocí následujícího příkazu na příkazovém řádku. Přijměte všechny výchozí hodnoty:

    npm init
    
  2. Na příkazovém řádku ve složce managed-device spusťte následující příkaz, který nainstaluje balíček azure-iot-device DEVICE SDK a balíček azure-iot-device-mqtt:

    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Pomocí textového editoru vytvořte soubor dmpatterns_getstarted_device.js ve složce spravovaného zařízení .

  4. Na začátek souboru dmpatterns_getstarted_device.js přidejte následující příkazy require:

    'use strict';
    
    var Client = require('azure-iot-device').Client;
    var Protocol = require('azure-iot-device-mqtt').Mqtt;
    
  5. Přidejte proměnnou connectionString a použijte ji k vytvoření instance klienta. {yourdeviceconnectionstring} Nahraďte zástupnou hodnotu připojovací řetězec zařízení, které jste viděli při registraci zařízení ve službě IoT Hub:

    var connectionString = '{yourdeviceconnectionstring}';
    var client = Client.fromConnectionString(connectionString, Protocol);
    
  6. Přidejte následující funkci pro implementaci přímé metody na zařízení.

    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. Otevřete připojení k centru IoT a spusťte naslouchací proces přímé metody:

    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. Uložte a zavřete soubor dmpatterns_getstarted_device.js .

Poznámka:

Aby bylo všechno jednoduché, tento článek neimplementuje zásadu opakování. V produkčním kódu byste měli implementovat zásady opakování (například exponenciální zpoždování), jak je doporučeno v článku Zpracování přechodných chyb.

Získání připojovací řetězec centra IoT

V tomto článku vytvoříte back-endovou službu, která vyvolá přímou metodu na zařízení. K vyvolání přímé metody na zařízení prostřednictvím IoT Hubu potřebuje vaše služba oprávnění k připojení ke službě. Ve výchozím nastavení se každá služba IoT Hub vytvoří pomocí zásady sdíleného přístupu s názvem služby , která toto oprávnění uděluje.

Pokud chcete získat připojovací řetězec ioT Hubu pro zásady služby, postupujte takto:

  1. Na webu Azure Portal vyberte skupiny prostředků. Vyberte skupinu prostředků, ve které se nachází vaše centrum, a pak vyberte centrum ze seznamu prostředků.

  2. V levém podokně centra IoT vyberte zásady sdíleného přístupu.

  3. V seznamu zásad vyberte zásadu služby .

  4. Zkopírujte primární připojovací řetězec a uložte hodnotu.

Snímek obrazovky znázorňující, jak načíst připojovací řetězec ze služby IoT Hub na webu Azure Portal

Další informace ozásadách

Vytvoření aplikace služby pro aktivaci restartování

V této části vytvoříte konzolovou aplikaci Node.js, která zahájí vzdálené restartování zařízení pomocí přímé metody. Aplikace používá dotazy dvojčete zařízení ke zjištění času posledního restartování tohoto zařízení.

Důležité

Tento článek obsahuje postup připojení ke službě pomocí sdíleného přístupového podpisu. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování ve službě pomocí MICROSOFT Entra ID nebo spravovaných identit je bezpečnější přístup. Další informace najdete v tématu Osvědčené postupy > zabezpečení cloudu.

  1. Vytvořte prázdnou složku s názvem trigger-reboot-on-device. Ve složce trigger-reboot-on-device vytvořte soubor package.json pomocí následujícího příkazu na příkazovém řádku. Přijměte všechny výchozí hodnoty:

    npm init
    
  2. Na příkazovém řádku ve složce trigger-reboot-on-device spusťte následující příkaz, který nainstaluje balíček azure-iothub Device SDK a balíček azure-iot-device-mqtt :

    npm install azure-iothub --save
    
  3. Pomocí textového editoru vytvořte ve složce trigger-reboot-on-device soubor dmpatterns_getstarted_service.js.

  4. Na začátek souboru dmpatterns_getstarted_service.js přidejte následující příkazy require:

    'use strict';
    
    var Registry = require('azure-iothub').Registry;
    var Client = require('azure-iothub').Client;
    
  5. Přidejte následující deklarace proměnných a nahraďte {iothubconnectionstring} zástupnou hodnotu službou IoT Hub připojovací řetězec, kterou jste zkopírovali dříve v připojovací řetězec Get the IoT Hub:

    var connectionString = '{iothubconnectionstring}';
    var registry = Registry.fromConnectionString(connectionString);
    var client = Client.fromConnectionString(connectionString);
    var deviceToReboot = 'myDeviceId';
    
  6. Přidejte následující funkci pro vyvolání metody zařízení pro restartování cílového zařízení:

    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. Přidejte následující funkci pro dotaz na zařízení a získejte čas posledního restartování:

    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. Přidejte následující kód pro volání funkcí, které aktivují přímou metodu restartování a dotazují se na čas posledního restartování:

    startRebootDevice();
    setInterval(queryTwinLastReboot, 2000);
    
  9. Uložte a zavřete soubor dmpatterns_getstarted_service.js .

Spouštění aplikací

Teď jste připraveni spustit aplikace.

  1. Na příkazovém řádku ve složce spravovaného zařízení spusťte následující příkaz, který začne naslouchat přímé metodě restartování.

    node dmpatterns_getstarted_device.js
    
  2. Na příkazovém řádku ve složce trigger-reboot-on-device spusťte následující příkaz, který aktivuje vzdálené restartování a odešle dotaz dvojčete zařízení, aby zjistil čas posledního restartování.

    node dmpatterns_getstarted_service.js
    
  3. Zobrazí se odpověď zařízení na přímou metodu restartování a stav restartování v konzole.

    Následující příklad ukazuje odpověď zařízení na přímou metodu restartování odesílanou službou:

    Výstup aplikace manageddevice

    Následující příklad ukazuje službu, která aktivuje restartování a dotazuje dvojče zařízení na čas posledního restartování:

    triggerrebootondevice – výstup aplikace

Přizpůsobení a rozšíření akcí správy zařízení

Vaše řešení IoT můžou rozšířit definovanou sadu vzorů správy zařízení nebo povolit vlastní vzory pomocí dvojčat zařízení a primitiv metod cloud-zařízení. Mezi další příklady akcí správy zařízení patří obnovení továrního nastavení, aktualizace firmwaru, aktualizace softwaru, řízení spotřeby, správa sítě a připojení a šifrování dat.

Časové období údržby zařízení

Obvykle konfigurujete zařízení tak, aby prováděla akce, které minimalizují přerušení a výpadky. Časové intervaly údržby zařízení se běžně používají k definování času, kdy má zařízení aktualizovat konfiguraci. Back-endová řešení můžou pomocí požadovaných vlastností dvojčete zařízení definovat a aktivovat zásadu na vašem zařízení, která umožňuje časové období údržby. Když zařízení obdrží zásadu časového období údržby, může pomocí ohlášené vlastnosti dvojčete zařízení nahlásit stav zásady. Back-endová aplikace pak může pomocí dotazů dvojčete zařízení otestovat dodržování předpisů u zařízení a jednotlivých zásad.

Další kroky

V tomto článku jste použili přímou metodu k aktivaci vzdáleného restartování zařízení. Pomocí ohlášených vlastností jste nahlásili čas posledního restartování ze zařízení a dotazovali jste se na dvojče zařízení, abyste zjistili čas posledního restartování zařízení z cloudu.

Pokud chcete pokračovat v začátcích se vzory správy ioT Hubu a zařízení, jako jsou kompletní aktualizace založené na imagích ve službě Device Update pro Azure IoT Hub, použijte referenční image Raspberry Pi 3 B+.

Informace o rozšíření řešení IoT a plánování volání metod na více zařízeních najdete v tématu Úlohy plánování a vysílání.