Vytvoření a otestování nového simulovaného zařízení

Akcelerátor řešení pro vzdálené monitorování umožňuje definovat vlastní simulovaná zařízení. V tomto článku se dozvíte, jak definovat nové simulované zařízení žárovky a pak ho otestovat místně. Akcelerátor řešení zahrnuje simulovaná zařízení, jako jsou chladiče a nákladní vozy. Před nasazením skutečných zařízení ale můžete definovat vlastní simulovaná zařízení, která otestují vaše řešení IoT.

Poznámka

Tento článek popisuje, jak používat simulovaná zařízení hostovaná ve službě simulace zařízení. Pokud chcete vytvořit skutečné zařízení, přečtěte si téma Připojení zařízení k akcelerátoru řešení pro vzdálené monitorování.

V tomto průvodci postupy se dozvíte, jak přizpůsobit mikroslužbu simulace zařízení. Tato mikroslužba je součástí akcelerátoru řešení pro vzdálené monitorování. K zobrazení možností simulace zařízení se v této příručce používají dva scénáře v aplikaci Contoso IoT:

V prvním scénáři přidáte nový typ telemetrie do existujícího typu zařízení Chiller společnosti Contoso.

Ve druhém scénáři chce Contoso otestovat nové inteligentní zařízení žárovky. Pokud chcete testy spustit, vytvoříte nové simulované zařízení s následujícími charakteristikami:

Vlastnosti

Name Hodnoty
Barva Bílá, Červená, Modrá
Jas 0 až 100
Odhadovaný zbývající životnost Odpočítávání od 10 000 hodin

Telemetrie

Následující tabulka ukazuje data, která žárovka hlásí do cloudu jako datový proud:

Name Hodnoty
Stav "zapnuto", "vypnuto"
Teplota Stupně F
online true, false

Poznámka

Hodnota online telemetrie je povinná pro všechny simulované typy.

Metody

V následující tabulce jsou uvedeny akce, které nové zařízení podporuje:

Name
Zapnout
Vypněte

Počáteční stav

V následující tabulce je uveden počáteční stav zařízení:

Name Hodnoty
Počáteční barva White
Počáteční jas 75
Počáteční zbývající životnost 10 000
Počáteční stav telemetrie "zapnuto"
Počáteční teplota telemetrie 200

K dokončení kroků v tomto průvodci postupy potřebujete aktivní předplatné Azure.

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Použití služby Azure Cloud Shell

Azure hostí interaktivní prostředí Azure Cloud Shell, které můžete používat v prohlížeči. Pro práci se službami Azure můžete v prostředí Cloud Shell použít buď Bash, nebo PowerShell. Můžete použít předinstalované příkazy služby Cloud Shell ke spuštění kódu uvedeného v tomto článku, aniž byste museli instalovat cokoli do svého místního prostředí.

Spuštění služby Azure Cloud Shell:

Možnost Příklad nebo odkaz
Zvolte Vyzkoušet v pravém horním rohu bloku kódu. Výběr Vyzkoušet automaticky nekopíruje kód do služby Cloud Shell. Příklad Vyzkoušet služby Azure Cloud Shell
Přejděte na adresu https://shell.azure.com nebo výběrem tlačítka Spustit Cloud Shell otevřete Cloud Shell v prohlížeči. Spuštění služby Cloud Shell v novém okně
Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. Tlačítko Cloud Shell na webu Azure Portal

Pokud chcete spustit kód uvedený v tomto článku ve službě Azure Cloud Shell, postupujte takto:

  1. Spusťte Cloud Shell.

  2. Vyberte tlačítko Kopírovat na bloku kódu a kód zkopírujte.

  3. Vložte kód do relace Cloud Shell pomocí kláves Ctrl+Shift+V ve Windows a Linuxu nebo pomocí kláves Cmd+Shift+V v systému macOS.

  4. Spusťte kód stisknutím klávesy Enter.

Požadavky

Pokud chcete postupovat podle tohoto návodu, potřebujete:

Příprava vývojového prostředí

Při přípravě vývojového prostředí proveďte následující úlohy:

  • Stáhněte zdroj mikroslužby simulace zařízení.
  • Stáhněte zdroj mikroslužby adaptéru úložiště.
  • Spusťte mikroslužbu adaptéru úložiště místně.

Pokyny v tomto článku předpokládají, že používáte Windows. Pokud používáte jiný operační systém, možná budete muset upravit některé cesty k souborům a příkazy tak, aby vyhovovaly vašemu prostředí.

Stažení mikroslužeb

Stáhněte a rozbalte mikroslužby vzdáleného monitorování z GitHubu do vhodného umístění na místním počítači. Článek předpokládá, že název této složky je remote-monitoring-services-dotnet-master.

Stáhněte a rozbalte mikroslužbu simulace zařízení z GitHubu do vhodného umístění na místním počítači. Článek předpokládá, že název této složky je device-simulation-dotnet-master.

Spuštění mikroslužby adaptéru úložiště

Otevřete složku remote-monitoring-services-dotnet-master\storage-adapter v editoru Visual Studio Code. Kliknutím na libovolná tlačítka Obnovit opravíte všechny nevyřešené závislosti.

Otevřete soubor storage-adapter/WebService/appsettings.ini a přiřaďte připojovací řetězec cosmos DB k proměnné documentDBConnectionString .

Pokud chcete mikroslužbu spustit místně, klikněte na tlačítko Spustit ladění ladění>.

Okno Terminálu v editoru Visual Studio Code zobrazuje výstup spuštěné mikroslužby včetně adresy URL pro kontrolu stavu webové služby: http://127.0.0.1:9022/v1/status. Při přechodu na tuto adresu by měl být stav OK: Aktivní a dobře.

Mikroslužbu adaptéru úložiště nechte spuštěnou v této instanci editoru Visual Studio Code a dokončete další kroky.

Úprava chladiče

V této části přidáte nový typ telemetrie interní teploty do existujícího typu zařízení Chladič :

  1. Vytvořte novou složku C:\temp\devicemodels na místním počítači.

  2. Zkopírujte do nové složky z stažené kopie mikroslužby simulace zařízení následující soubory:

    Zdroj Cíl
    Services\data\devicemodels\chiller-01.json C:\temp\devicemodels\chiller-01.json
    Services\data\devicemodels\scripts\chiller-01-state.js C:\temp\devicemodels\scripts\chiller-01-state.js
    Services\data\devicemodels\scripts\Reboot-method.js C:\temp\devicemodels\scripts\Reboot-method.js
    Services\data\devicemodels\scripts\FirmwareUpdate-method.js C:\temp\devicemodels\scripts\FirmwareUpdate-method.js
    Services\data\devicemodels\scripts\EmergencyValveRelease-method.js C:\temp\devicemodels\scripts\EmergencyValveRelease-method.js
    Services\data\devicemodels\scripts\IncreasePressure-method.js C:\temp\devicemodels\scripts\IncreasePressure-method.js
  3. Otevřete soubor C:\temp\devicemodels\chiller-01.json .

  4. V části InitialState přidejte následující dvě definice:

    "internal_temperature": 65.0,
    "internal_temperature_unit": "F",
    
  5. Do pole telemetrie přidejte následující definici:

    {
      "Interval": "00:00:05",
      "MessageTemplate": "{\"internal_temperature\":${internal_temperature},\"internal_temperature_unit\":\"${internal_temperature_unit}\"}",
      "MessageSchema": {
        "Name": "chiller-internal-temperature;v1",
        "Format": "JSON",
        "Fields": {
          "temperature": "double",
          "temperature_unit": "text"
        }
      }
    },
    
  6. Uložte soubor C:\temp\devicemodels\chiller-01.json .

  7. Otevřete souborC:\temp\devicemodels\scripts\chiller-01-state.js .

  8. Do proměnné stavu přidejte následující pole:

    internal_temperature: 65.0,
    internal_temperature_unit: "F",
    
  9. Aktualizujte hlavní funkci následujícím způsobem:

    function main(context, previousState, previousProperties) {
    
        // Restore the global state before generating the new telemetry, so that
        // the telemetry can apply changes using the previous function state.
        restoreSimulation(previousState, previousProperties);
    
        // 75F +/- 5%,  Min 25F, Max 100F
        state.temperature = vary(75, 5, 25, 100);
    
        // 70% +/- 5%,  Min 2%, Max 99%
        state.humidity = vary(70, 5, 2, 99);
    
        // 65F +/- 2%,  Min 15F, Max 125F
        state.internal_temperature = vary(65, 2, 15, 125);
    
        log("Simulation state: " + state.simulation_state);
        if (state.simulation_state === "high_pressure") {
            // 250 psig +/- 25%,  Min 50 psig, Max 300 psig
            state.pressure = vary(250, 25, 50, 300);
        } else {
            // 150 psig +/- 10%,  Min 50 psig, Max 300 psig
            state.pressure = vary(150, 10, 50, 300);
        }
    
        updateState(state);
        return state;
    }
    
  10. Uložte souborC:\temp\devicemodels\scripts\chiller-01-state.js .

Vytvoření žárovky

V této části definujete nový typ zařízení Lightbulb :

  1. Vytvořte soubor C:\temp\devicemodels\lightbulb-01.json a přidejte následující obsah:

    {
      "SchemaVersion": "1.0.0",
      "Id": "lightbulb-01",
      "Version": "0.0.1",
      "Name": "Lightbulb",
      "Description": "Smart lightbulb device.",
      "Protocol": "MQTT",
      "Simulation": {
        "InitialState": {
          "online": true,
          "temperature": 200.0,
          "temperature_unit": "F",
          "status": "on"
        },
        "Interval": "00:00:20",
        "Scripts": [
          {
            "Type": "javascript",
            "Path": "lightbulb-01-state.js"
          }
        ]
      },
      "Properties": {
        "Type": "Lightbulb",
        "Color": "White",
        "Brightness": 75,
        "EstimatedRemainingLife": 10000
      },
      "Tags": {
        "Location": "Building 2",
        "Floor": "2",
        "Campus": "Redmond"
      },
      "Telemetry": [
        {
          "Interval": "00:00:20",
          "MessageTemplate": "{\"temperature\":${temperature},\"temperature_unit\":\"${temperature_unit}\",\"status\":\"${status}\"}",
          "MessageSchema": {
            "Name": "lightbulb-status;v1",
            "Format": "JSON",
            "Fields": {
              "temperature": "double",
              "temperature_unit": "text",
              "status": "text"
            }
          }
        }
      ],
      "CloudToDeviceMethods": {
        "SwitchOn": {
          "Type": "javascript",
          "Path": "SwitchOn-method.js"
        },
        "SwitchOff": {
          "Type": "javascript",
          "Path": "SwitchOff-method.js"
        }
      }
    }
    

    Uložte změny do souboru C:\temp\devicemodels\lightbulb-01.json.

  2. Vytvořte soubor C:\temp\devicemodels\scripts\lightbulb-01-state.js a přidejte následující obsah:

    "use strict";
    
    // Default state
    var state = {
      online: true,
      temperature: 200.0,
      temperature_unit: "F",
      status: "on"
    };
    
    // Default device properties
    var properties = {};
    
    /**
     * Restore the global state using data from the previous iteration.
     *
     * @param previousState device state from the previous iteration
     * @param previousProperties device properties from the previous iteration
     */
    function restoreSimulation(previousState, previousProperties) {
      // If the previous state is null, force a default state
      if (previousState) {
        state = previousState;
      } else {
        log("Using default state");
      }
    
      if (previousProperties) {
        properties = previousProperties;
      } else {
        log("Using default properties");
      }
    }
    
    /**
     * Simple formula generating a random value around the average
     * in between min and max
     *
     * @returns random value with given parameters
     */
    function vary(avg, percentage, min, max) {
      var value = avg * (1 + ((percentage / 100) * (2 * Math.random() - 1)));
      value = Math.max(value, min);
      value = Math.min(value, max);
      return value;
    }
    
    /**
     * Simple formula that sometimes flips the status of the lightbulb
     */
    function flip(value) {
      if (Math.random() < 0.2) {
        return (value == "on") ? "off" : "on"
      }
      return value;
    }
    
    /**
     * Entry point function called by the simulation engine.
     * Returns updated simulation state.
     * Device property updates must call updateProperties() to persist.
     *
     * @param context             The context contains current time, device model and id
     * @param previousState       The device state since the last iteration
     * @param previousProperties  The device properties since the last iteration
     */
    function main(context, previousState, previousProperties) {
    
      // Restore the global device properties and the global state before
      // generating the new telemetry, so that the telemetry can apply changes
      // using the previous function state.
      restoreSimulation(previousState, previousProperties);
    
      state.temperature = vary(200, 5, 150, 250);
    
      // Make this flip every so often
      state.status = flip(state.status);
    
      updateState(state);
    
      return state;
    }
    

    Uložte změny do C:\temp\devicemodels\scripts\lightbulb-01-state.js.

  3. Vytvořte soubor C:\temp\devicemodels\scripts\SwitchOn-method.js a přidejte následující obsah:

    "use strict";
    
    // Default state
    var state = {
      status: "on"
    };
    
    /**
     * Entry point function called by the method.
     *
     * @param context        The context contains current time, device model and id
     * @param previousState  The device state since the last iteration
     * @param previousProperties  The device properties since the last iteration
     */
    function main(context, previousState) {
      log("Executing lightbulb Switch On method.");
      state.status = "on";
      updateState(state);
    }
    

    Uložte změny do C:\temp\devicemodels\scripts\SwitchOn-method.js.

  4. Vytvořte soubor C:\temp\devicemodels\scripts\SwitchOff-method.js a přidejte následující obsah:

    "use strict";
    
    // Default state
    var state = {
      status: "on"
    };
    
    /**
     * Entry point function called by the method.
     *
     * @param context        The context contains current time, device model and id
     * @param previousState  The device state since the last iteration
     * @param previousProperties  The device properties since the last iteration
     */
    function main(context, previousState) {
      log("Executing lightbulb Switch Off method.");
      state.status = "off";
      updateState(state);
    }
    

    Uložte změny do C:\temp\devicemodels\scripts\SwitchOff-method.js.

Teď jste vytvořili přizpůsobenou verzi typu zařízení Chiller a vytvořili jste nový typ zařízení Lightbulb .

Otestování zařízení

V této části otestujete typy zařízení, které jste vytvořili v předchozích částech místně.

Spuštění mikroslužby simulace zařízení

Otevřete složku device-simulation-dotnet-master , kterou jste stáhli z GitHubu, v nové instanci editoru Visual Studio Code. Kliknutím na libovolná tlačítka Obnovit opravíte všechny nevyřešené závislosti.

Otevřete soubor WebService/appsettings.ini a přiřaďte připojovací řetězec cosmos DB k proměnné documentdb_connstring a upravte nastavení následujícím způsobem:

device_models_folder = C:\temp\devicemodels\

device_models_scripts_folder = C:\temp\devicemodels\scripts\

Pokud chcete mikroslužbu spustit místně, klikněte na tlačítko Spustit ladění ladění>.

Okno Terminálu v editoru Visual Studio Code zobrazuje výstup ze spuštěné mikroslužby.

Nechte mikroslužbu simulace zařízení spuštěnou v této instanci editoru Visual Studio Code a dokončete další kroky.

Nastavení monitorování událostí zařízení

V této části pomocí Azure CLI nastavíte monitorování událostí a zobrazíte telemetrii odeslanou ze zařízení připojených k centru IoT.

Následující skript předpokládá, že název vašeho centra IoT je test simulace zařízení.

# Install the IoT extension if it's not already installed
az extension add --name azure-iot

# Monitor telemetry sent to your hub
az iot hub monitor-events --hub-name device-simulation-test

Během testování simulovaných zařízení nechte monitor událostí spuštěný.

Vytvoření simulace s aktualizovaným typem zařízení chladiče

V této části použijete nástroj Postman k vyžádání mikroslužby simulace zařízení ke spuštění simulace pomocí aktualizovaného typu chladicího zařízení. Postman je nástroj, který umožňuje odesílat požadavky REST do webové služby. Konfigurační soubory Postmanu, které potřebujete, jsou v místní kopii úložiště device-simulation-dotnet .

Nastavení Nástroje Postman:

  1. Otevřete Nástroj Postman na místním počítači.

  2. Klikněte na Importovat soubor>. Potom klikněte na Zvolit soubory.

  3. Přejděte do složky device-simulation-dotnet-master/docs/postman . Vyberte řešení simulace zařízení Azure IoT accelerator.postman_collection a řešení Simulace zařízení Azure IoT accelerator.postman_environment a klikněte na Otevřít.

  4. Rozbalte akcelerátor řešení simulace zařízení Azure IoT na požadavky, které můžete odeslat.

  5. Klikněte na Žádné prostředí a vyberte akcelerátor řešení simulace zařízení Azure IoT.

Teď máte kolekci a prostředí načtené v pracovním prostoru Postman, které můžete použít k interakci s mikroslužbou simulace zařízení.

Konfigurace a spuštění simulace:

  1. V kolekci Postman vyberte Vytvořit upravenou simulaci chladiče a klikněte na Odeslat. Tento požadavek vytvoří čtyři instance simulovaného typu chladicího zařízení.

  2. Výstup monitorování událostí v okně Azure CLI zobrazuje telemetrii ze simulovaných zařízení, včetně nových hodnot internal_temperature .

Pokud chcete simulaci zastavit, vyberte v Nástroji Postman požadavek zastavit simulaci a klikněte na Tlačítko Odeslat.

Vytvoření simulace s typem zařízení žárovky

V této části použijete nástroj Postman k vyžádání mikroslužby simulace zařízení ke spuštění simulace pomocí typu zařízení žárovky. Postman je nástroj, který umožňuje odesílat požadavky REST do webové služby.

Konfigurace a spuštění simulace:

  1. V kolekci Postman vyberte Vytvořit simulaci žárovky a klikněte na Odeslat. Tento požadavek vytvoří dvě instance simulovaného typu zařízení žárovky.

  2. Výstup monitorování událostí v okně Azure CLI zobrazuje telemetrii ze simulovaných žárovk.

Pokud chcete simulaci zastavit, vyberte v Nástroji Postman požadavek zastavit simulaci a klikněte na Tlačítko Odeslat.

Vyčištění prostředků

Tyto dvě místně spuštěné mikroslužby můžete zastavit ve svých instancích editoru Visual Studio Code (ladění > zastavit ladění).

Pokud už nepotřebujete instance IoT Hub a Cosmos DB, odstraňte je z předplatného Azure, abyste se vyhnuli zbytečným poplatkům.

Další kroky

Tato příručka vám ukázala, jak vytvořit vlastní typy simulovaných zařízení a otestovat je spuštěním mikroslužby simulace zařízení místně.

Navrhovaným dalším krokem je zjistit, jak nasadit vlastní typy simulovaných zařízení do akcelerátoru řešení vzdáleného monitorování.