Sdílet prostřednictvím


Připojení zařízení k předkonfigurovanýmu řešení vzdáleného monitorování (Node.js)

Přehled scénáře

V tomto scénáři vytvoříte zařízení, které odesílá následující telemetrii do předkonfigurovaného řešení vzdáleného monitorování:

  • Venkovní teplota
  • Vnitřní teplota
  • Vlhkost

Kód v zařízení pro zjednodušení generuje ukázkové hodnoty, ale doporučujeme vám ukázku rozšířit připojením skutečných senzorů k zařízení a odesíláním skutečné telemetrie.

Zařízení je také schopné odpovídat na metody vyvolané z řídicího panelu řešení a na požadované hodnoty vlastností nastavené na řídicím panelu řešení.

K dokončení tohoto kurzu potřebujete mít aktivní účet Azure. Pokud účet nemáte, můžete si během několika minut vytvořit bezplatný zkušební účet. Podrobnosti najdete v článku Bezplatná zkušební verze Azure.

Než začnete

Než začnete psát kód pro zařízení, je nutné zřídit předkonfigurované řešení vzdáleného monitorování a v něm zřídit nové vlastní zařízení.

Zřízení předkonfigurovaného řešení vzdáleného monitorování

Zařízení, které v tomto kurzu vytvoříte, odesílá data do instance předkonfigurovaného řešení vzdáleného monitorování. Pokud jste ve svém účtu Azure ještě nezřídili předkonfigurované řešení vzdáleného monitorování, použijte následující postup:

  1. https://www.azureiotsolutions.com/ Na stránce kliknutím + vytvořte řešení.
  2. Kliknutím na Vybrat na panelu Vzdálené monitorování vytvořte řešení.
  3. Na stránce Vytvořit řešení pro vzdálené monitorování zadejte Název řešení podle vašeho výběru, vyberte Oblast, do které chcete řešení nasadit, a vyberte předplatné Azure, které chcete použít. Potom klikněte na Vytvořit řešení.
  4. Počkejte, dokud proces zřizování neskončí.

Upozornění

Předkonfigurovaná řešení využívají fakturovatelné služby Azure. Abyste se vyhnuli zbytečným poplatkům, nezapomeňte předkonfigurované řešení odebrat ze svého předplatného, jakmile s ním budete hotovi. Předkonfigurované řešení můžete úplně odebrat z předplatného tak, že https://www.azureiotsolutions.com/ navštívíte stránku.

Po skončení procesu zřizování řešení pro vzdálené monitorování klikněte na Spustit. Ve vašem prohlížeči se otevře řídicí panel řešení.

Řídicí panel řešení

Zřízení zařízení v řešení pro vzdálené monitorování

Poznámka

Pokud jste už ve svém řešení zařízení zřídili, můžete tento krok přeskočit. Při vytváření klientské aplikace potřebujete znát přihlašovací údaje zařízení.

Aby se zařízení mohlo připojit k předkonfigurovanému řešení, musí se identifikovat ve službě IoT Hub pomocí platných přihlašovacích údajů. Přihlašovací údaje zařízení můžete zjistit z řídicího panelu řešení. Přihlašovací údaje zařízení vložíte do klientské aplikace později v tomto kurzu.

Pokud chcete přidat zařízení do řešení pro vzdálené monitorování, proveďte na řídicím panelu řešení následující kroky:

  1. V levém dolním rohu řídicího panelu klikněte na Přidat zařízení.

    Přidání zařízení

  2. Na panelu Vlastní zařízení klikněte na Přidat nové.

    Přidání vlastního zařízení

  3. Vyberte možnost Definovat vlastní ID zařízení. Zadejte ID zařízení, třeba mydevice, klikněte na Zkontrolovat ID pro ověření, že se tento název ještě nepoužívá, a potom zřiďte zařízení kliknutím na Vytvořit.

    Přidání ID zařízení

  4. Poznamenejte si přihlašovací údaje zařízení (ID zařízení, název hostitele služby IoT Hub a Klíč zařízení). Klientská aplikace potřebuje tyto hodnoty pro připojení k řešení pro vzdálené monitorování. Potom klikněte na Hotovo.

    Zobrazení přihlašovacích údajů zařízení

  5. V seznamu zařízení na řídicím panelu řešení vyberte své zařízení. Pak na panelu Podrobnosti o zařízení klikněte na Povolit zařízení. Stav vašeho zařízení je teď Spuštěno. Řešení pro vzdálené monitorování teď může z vašeho zařízení přijímat telemetrii a vyvolávat v něm metody.

Vytvoření ukázkového řešení node.js

Ujistěte se, že na vývojovém počítači je nainstalovaná Node.js verze 0.11.5 nebo novější. Verzi můžete zkontrolovat node --version spuštěním na příkazovém řádku.

  1. Na vývojovém počítači vytvořte složku s názvem RemoteMonitoring . Přejděte do této složky v prostředí příkazového řádku.

  2. Spuštěním následujících příkazů stáhněte a nainstalujte balíčky, které potřebujete k dokončení ukázkové aplikace:

    npm init
    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Ve složce RemoteMonitoring vytvořte soubor s názvem remote_monitoring.js. Otevřete tento soubor v textovém editoru.

  4. Do souboru remote_monitoring.js přidejte následující require příkazy:

    'use strict';
    
    var Protocol = require('azure-iot-device-mqtt').Mqtt;
    var Client = require('azure-iot-device').Client;
    var ConnectionString = require('azure-iot-device').ConnectionString;
    var Message = require('azure-iot-device').Message;
    
  5. Přidejte následující deklarace proměnných za příkazy require. Nahraďte zástupné hodnoty [Device Id] (ID zařízení) a [Device Key] (Klíč zařízení) hodnotami, které jste si pro své zařízení poznamenali na řídicím panelu řešení pro vzdálené monitorování. K nahrazení hodnoty [IoTHub Name] (Název služby IoT Hub) použijte název hostitele služby IoT Hub z řídicího panelu řešení. Pokud je například název hostitele vaší služby IoT Hub contoso.azure-devices.net, nahraďte hodnotu [IoTHub Name] za contoso:

    var connectionString = 'HostName=[IoTHub Name].azure-devices.net;DeviceId=[Device Id];SharedAccessKey=[Device Key]';
    var deviceId = ConnectionString.parse(connectionString).DeviceId;
    
  6. Přidejte následující proměnné pro definování některých základních telemetrických dat:

    var temperature = 50;
    var humidity = 50;
    var externalTemperature = 55;
    
  7. Přidejte následující pomocnou funkci pro výsledky operace tisku:

    function printErrorFor(op) {
        return function printError(err) {
            if (err) console.log(op + ' error: ' + err.toString());
        };
    }
    
  8. Přidejte následující pomocnou funkci, která se má použít k náhodnému určení hodnot telemetrie:

    function generateRandomIncrement() {
        return ((Math.random() * 2) - 1);
    }
    
  9. Přidejte následující definici objektu DeviceInfo , který zařízení odesílá při spuštění:

    var deviceMetaData = {
        'ObjectType': 'DeviceInfo',
        'IsSimulatedDevice': 0,
        'Version': '1.0',
        'DeviceProperties': {
            'DeviceID': deviceId,
            'HubEnabledState': 1
        }
    };
    
  10. Přidejte následující definici pro hlášené hodnoty dvojčete zařízení. Tato definice obsahuje popisy přímých metod, které zařízení podporuje:

    var reportedProperties = {
        "Device": {
            "DeviceState": "normal",
            "Location": {
                "Latitude": 47.642877,
                "Longitude": -122.125497
            }
        },
        "Config": {
            "TemperatureMeanValue": 56.7,
            "TelemetryInterval": 45
        },
        "System": {
            "Manufacturer": "Contoso Inc.",
            "FirmwareVersion": "2.22",
            "InstalledRAM": "8 MB",
            "ModelNumber": "DB-14",
            "Platform": "Plat 9.75",
            "Processor": "i3-9",
            "SerialNumber": "SER99"
        },
        "Location": {
            "Latitude": 47.642877,
            "Longitude": -122.125497
        },
        "SupportedMethods": {
            "Reboot": "Reboot the device",
            "InitiateFirmwareUpdate--FwPackageURI-string": "Updates device Firmware. Use parameter FwPackageURI to specifiy the URI of the firmware file"
        },
    }
    
  11. Přidejte následující funkci pro zpracování volání metody Reboot Direct:

    function onReboot(request, response) {
        // Implement actual logic here.
        console.log('Simulated reboot...');
    
        // Complete the response
        response.send(200, "Rebooting device", 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.' );
            }
        });
    }
    
  12. Přidejte následující funkci, která zpracovává volání přímé metody InitiateFirmwareUpdate . Tato přímá metoda používá parametr k určení umístění image firmwaru ke stažení a inicializuje aktualizaci firmwaru na zařízení asynchronně:

    function onInitiateFirmwareUpdate(request, response) {
        console.log('Simulated firmware update initiated, using: ' + request.payload.FwPackageURI);
    
        // Complete the response
        response.send(200, "Firmware update initiated", 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.' );
            }
        });
    
        // Add logic here to perform the firmware update asynchronously
    }
    
  13. Přidejte následující kód pro vytvoření instance klienta:

    var client = Client.fromConnectionString(connectionString, Protocol);
    
  14. Přidejte následující kód:

    • Otevřete připojení.
    • Odešle objekt DeviceInfo .
    • Nastavte obslužnou rutinu pro požadované vlastnosti.
    • Odesílání ohlášených vlastností
    • Zaregistrujte obslužné rutiny pro přímé metody.
    • Začněte odesílat telemetrii.
    client.open(function (err) {
        if (err) {
            printErrorFor('open')(err);
        } else {
            console.log('Sending device metadata:\n' + JSON.stringify(deviceMetaData));
            client.sendEvent(new Message(JSON.stringify(deviceMetaData)), printErrorFor('send metadata'));
    
            // Create device twin
            client.getTwin(function(err, twin) {
                if (err) {
                    console.error('Could not get device twin');
                } else {
                    console.log('Device twin created');
    
                    twin.on('properties.desired', function(delta) {
                        console.log('Received new desired properties:');
                        console.log(JSON.stringify(delta));
                    });
    
                    // Send reported properties
                    twin.properties.reported.update(reportedProperties, function(err) {
                        if (err) throw err;
                        console.log('twin state reported');
                    });
    
                    // Register handlers for direct methods
                    client.onDeviceMethod('Reboot', onReboot);
                    client.onDeviceMethod('InitiateFirmwareUpdate', onInitiateFirmwareUpdate);
                }
            });
    
            // Start sending telemetry
            var sendInterval = setInterval(function () {
                temperature += generateRandomIncrement();
                externalTemperature += generateRandomIncrement();
                humidity += generateRandomIncrement();
    
                var data = JSON.stringify({
                    'DeviceID': deviceId,
                    'Temperature': temperature,
                    'Humidity': humidity,
                    'ExternalTemperature': externalTemperature
                });
    
                console.log('Sending device event data:\n' + data);
                client.sendEvent(new Message(data), printErrorFor('send event'));
            }, 5000);
    
            client.on('error', function (err) {
                printErrorFor('client')(err);
                if (sendInterval) clearInterval(sendInterval);
                client.close(printErrorFor('client.close'));
            });
        }
    });
    
  15. Uložte změny do souboru remote_monitoring.js .

  16. Spuštěním následujícího příkazu na příkazovém řádku spusťte ukázkovou aplikaci:

    node remote_monitoring.js
    

Zobrazení telemetrie zařízení na řídicím panelu

Řídicí panel řešení pro vzdálené monitorování umožňuje zobrazit telemetrická data, která vaše zařízení odesílají do IoT Hubu.

  1. V prohlížeči se vraťte na řídicí panel řešení pro vzdálené monitorování a kliknutím na Zařízení na levém panelu přejděte k seznamu zařízení.

  2. V seznamu zařízení by se mělo zobrazit, že zařízení je ve stavu Spuštěno. Pokud ne, na panelu Podrobnosti o zařízení klikněte na Povolit zařízení.

    Zobrazení stavu zařízení

  3. Kliknutím na Řídicí panel se vraťte na řídicí panel a v rozevíracím seznamu Zobrazit zařízení vyberte požadované zařízení. Zobrazí se jeho telemetrická data. Telemetrická data z ukázkové aplikace odpovídají 50 jednotkám pro vnitřní teplotu, 55 jednotkám pro venkovní teplotu a 50 jednotkám pro vlhkost.

    Zobrazení telemetrie zařízení

Volání metody na zařízení

Řídicí panel řešení pro vzdálené monitorování umožňuje vyvolat na zařízení metody prostřednictvím IoT Hubu. V řešení pro vzdálené monitorování můžete třeba vyvolat metodu pro simulaci restartování zařízení.

  1. Na řídicím panelu řešení pro vzdálené monitorování klikněte na Zařízení na levém panelu a přejděte k seznamu zařízení.

  2. V seznamu zařízení klikněte na požadované ID zařízení.

  3. Na panelu Podrobnosti o zařízení klikněte na Metody.

    Metody zařízení

  4. V rozevíracím seznamu Metoda vyberte InitiateFirmwareUpdate a potom do FWPACKAGEURI zadejte fiktivní adresu URL. Kliknutím na Vyvolat metodu vyvoláte tuto metodu na příslušném zařízení.

    Vyvolání metody zařízení

  5. Když zařízení zpracovává tuto metodu, zobrazí se zpráva na konzole, kde je spuštěný kód vašeho zařízení. Výsledky metody se přidají do historie na portálu řešení:

    Zobrazení historie metod

Další kroky

Článek Přizpůsobení předkonfigurovaných řešení popisuje některé způsoby, kterými jde tuto ukázku rozšířit. Mezi možná rozšíření patří skutečné senzory a implementace dalších příkazů.

Další informace o oprávněních najdete na webu azureiotsuite.com.