Začínáme se správou zařízení (Node.js)
Back-endové aplikace můžou pomocí Azure IoT Hub primitiv, jako jsou dvojčata zařízení a přímé metody, vzdáleně spouštět a monitorovat akce správy zařízení na zařízeních. V tomto článku se dozvíte, jak back-endová aplikace a aplikace zařízení můžou spolupracovat na zahájení a monitorování vzdáleného restartování zařízení pomocí IoT Hub.
Poznámka
Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard IoT Hub. Další informace o úrovních IoT Hub Basic a Standard/Free najdete v tématu Volba správné IoT Hub úrovně pro vaše řešení.
K zahájení akcí správy zařízení (jako je restartování, obnovení továrního nastavení a aktualizace firmwaru) z back-endové aplikace v cloudu použijte přímou metodu. Zařízení zodpovídá za:
Zpracování požadavku metody odeslaného z 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í IoT Hub.
Pomocí back-endové aplikace v cloudu můžete spouštět dotazy dvojčat zařízení a hlásit tak 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 volají z cloudu.
dmpatterns_getstarted_service.js: Konzolová aplikace .NET, která volá přímou metodu v aplikaci simulovaného zařízení prostřednictvím služby IoT Hub. Zobrazí odpověď a aktualizuje ohlášené vlastnosti.
Požadavky
Centrum IoT. Vytvořte ho pomocí rozhraní příkazového řádku nebo Azure Portal.
Zaregistrované zařízení. Zaregistrujte jednu v Azure Portal.
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 ve Windows nebo Linuxu.
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 v některých podnikových a vzdělávacích síťových prostředích blokovaný. Další informace a způsoby, jak tento problém obejít, najdete v tématu Připojení k 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čat zařízení k identifikaci zařízení a jejich posledního restartování.
Vytvořte prázdnou složku s názvem managed-device. Ve složce managed-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
Na příkazovém řádku ve složce managed-device spuštěním následujícího příkazu nainstalujte balíček sady SDK pro zařízení azure-iot-device a balíček azure-iot-device-mqtt :
npm install azure-iot-device azure-iot-device-mqtt --save
Pomocí textového editoru vytvořte soubordmpatterns_getstarted_device.js ve složce spravovaného zařízení .
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;
Přidejte proměnnou connectionString a použijte ji k vytvoření instance klienta.
{yourdeviceconnectionstring}
Zástupnou hodnotu nahraďte připojovacím řetězcem zařízení, který jste viděli při registraci zařízení v IoT Hub:var connectionString = '{yourdeviceconnectionstring}'; var client = Client.fromConnectionString(connectionString, Protocol);
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!'); };
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); } });
Uložte a zavřete soubordmpatterns_getstarted_device.js .
Poznámka
Aby to bylo jednoduché, tento článek neimplementuje zásady opakování. V produkčním kódu byste měli implementovat zásady opakování (například exponenciální zpochybnění), jak navrhuje článek Zpracování přechodných chyb.
Získání připojovacího řetězce služby IoT Hub
V tomto článku vytvoříte back-endovou službu, která na zařízení vyvolá přímou metodu. K vyvolání přímé metody na zařízení prostřednictvím IoT Hub potřebuje vaše služba oprávnění připojení služby. Ve výchozím nastavení se každá IoT Hub vytvoří se zásadou sdíleného přístupu s názvem služba, která toto oprávnění uděluje.
Chcete-li získat IoT Hub připojovací řetězec pro zásady služby, postupujte takto:
V 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ů.
V levém podokně centra IoT vyberte Zásady sdíleného přístupu.
V seznamu zásad vyberte zásadu služby .
Zkopírujte primární připojovací řetězec a hodnotu uložte.
Další informace o IoT Hub zásady a oprávnění sdíleného přístupu najdete v tématu Řízení přístupu a oprávnění.
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čat zařízení ke zjištění času posledního restartování daného zařízení.
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
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
Pomocí textového editoru vytvořte soubordmpatterns_getstarted_service.js ve složce trigger-reboot-on-device .
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;
Přidejte následující deklarace proměnných a nahraďte hodnotu zástupného symbolu
{iothubconnectionstring}
připojovacím řetězcem služby IoT Hub, který jste zkopírovali dříve v části Získání připojovacího řetězce služby IoT Hub:var connectionString = '{iothubconnectionstring}'; var registry = Registry.fromConnectionString(connectionString); var client = Client.fromConnectionString(connectionString); var deviceToReboot = 'myDeviceId';
Přidejte následující funkci, která vyvolá metodu 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."); } }); };
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.'); }); };
Přidejte následující kód pro volání funkcí, které aktivují přímou metodu restartování, a dotaz na čas posledního restartování:
startRebootDevice(); setInterval(queryTwinLastReboot, 2000);
Uložte a zavřete soubordmpatterns_getstarted_service.js .
Spouštění aplikací
Teď jste připravení spustit aplikace.
Na příkazovém řádku ve složce managed-device spusťte následující příkaz, který začne naslouchat přímé metodě restartování.
node dmpatterns_getstarted_device.js
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 dotazuje dvojče zařízení, aby zjistilo čas posledního restartování.
node dmpatterns_getstarted_service.js
V konzole se zobrazí odpověď zařízení na metodu přímého restartování a stav restartování.
Následující příklad ukazuje odpověď zařízení na metodu přímého restartování odeslanou službou:
Následující příklad ukazuje, že služba aktivuje restartování a dotazuje dvojče zařízení na čas posledního restartování:
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í primitiv dvojčat zařízení a metod typu 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é intervaly údržby zařízení
Zařízení obvykle konfigurujete tak, aby prováděla akce v době, která minimalizuje 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 svou konfiguraci. Vaše back-endová řešení můžou pomocí požadovaných vlastností dvojčete zařízení definovat a aktivovat zásady, které umožňují časové období údržby. Když zařízení obdrží zásady časového období údržby, může pomocí ohlášené vlastnosti dvojčete zařízení nahlásit stav zásad. Back-endová aplikace pak může pomocí dotazů na dvojčata zařízení osvědčovat 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 dvojčete 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 Hub a zařízení, jako je kompletní aktualizace obrázků v aktualizaci zařízení pro Azure IoT Hub článek s využitím referenční image Raspberry Pi 3 B+.
Informace o tom, jak rozšířit řešení IoT a naplánovat volání metod na více zařízeních, najdete v tématu Plánování a vysílání úloh.