Een nieuw gesimuleerd apparaat maken en testen

Met de accelerator voor de externe bewakingsoplossing kunt u uw eigen gesimuleerde apparaten definiëren. In dit artikel wordt beschreven hoe u een nieuw gesimuleerd gloeilampapparaat definieert en het vervolgens lokaal test. De oplossingsversneller bevat gesimuleerde apparaten, zoals koelmachines en vrachtwagens. U kunt echter uw eigen gesimuleerde apparaten definiëren om uw IoT-oplossingen te testen voordat u echte apparaten implementeert.

Notitie

In dit artikel wordt beschreven hoe u gesimuleerde apparaten gebruikt die worden gehost in de apparaatsimulatieservice. Als u een echt apparaat wilt maken, raadpleegt u Uw apparaat verbinden met de accelerator voor de externe bewakingsoplossing.

Deze handleiding laat zien hoe u de microservice voor apparaatsimulatie aanpast. Deze microservice maakt deel uit van de accelerator voor de externe bewakingsoplossing. Deze handleiding maakt gebruik van twee scenario's in de Contoso IoT-toepassing om de mogelijkheden voor apparaatsimulatie weer te geven:

In het eerste scenario voegt u een nieuw telemetrietype toe aan het bestaande type Chiller-apparaat van Contoso.

In het tweede scenario wil Contoso een nieuw slim gloeilampapparaat testen. Als u de tests wilt uitvoeren, maakt u een nieuw gesimuleerd apparaat met de volgende kenmerken:

Eigenschappen

Naam Waarden
Kleur Wit, Rood, Blauw
Helderheid 0 tot 100
Geschatte resterende levensduur Aftelling van 10.000 uur

Telemetrie

In de volgende tabel ziet u de gegevens die de gloeilamp rapporteert aan de cloud als een gegevensstroom:

Naam Waarden
Status "aan", "uit"
Temperatuur Graden F
online de waarde True, false

Notitie

De onlinetelemetriewaarde is verplicht voor alle gesimuleerde typen.

Methoden

In de volgende tabel ziet u de acties die het nieuwe apparaat ondersteunt:

Naam
Inschakelen
Schakel

Begintoestand

In de volgende tabel ziet u de oorspronkelijke status van het apparaat:

Naam Waarden
Initiële kleur Wit
Aanvankelijke helderheid 75
Oorspronkelijke resterende levensduur 10.000
Initiële telemetriestatus "aan"
Initiële telemetrietemperatuur 200

Als u de stappen in deze handleiding wilt voltooien, hebt u een actief Azure-abonnement nodig.

Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.

Azure Cloud Shell gebruiken

Azure host Azure Cloud Shell, een interactieve shell-omgeving die u via uw browser kunt gebruiken. U kunt Bash of PowerShell gebruiken met Cloud Shell om met Azure-services te werken. U kunt de vooraf geïnstalleerde opdrachten van Cloud Shell gebruiken om de code in dit artikel uit te voeren zonder dat u iets hoeft te installeren in uw lokale omgeving.

Om Azure Cloud Shell op te starten:

Optie Voorbeeld/koppeling
Selecteer Nu proberen in de rechterbovenhoek van een codeblok. Als u Uitproberen selecteert, wordt de code niet automatisch gekopieerd naar Cloud Shell. Voorbeeld van Uitproberen voor Azure Cloud Shell
Ga naar https://shell.azure.com, of selecteer de knop Cloud Shell starten om Cloud Shell in uw browser te openen. Cloud Shell starten in een nieuw venster
Klik op de knop Cloud Shell in het menu in de balk rechtsboven in de Azure-portal. Knop Cloud Shell in de Azure Portal

Om de code in dit artikel in Azure Cloud Shell uit te voeren:

  1. Start Cloud Shell.

  2. Selecteer de knop Kopiëren op een codeblok om de code te kopiëren.

  3. Plak de code in de Cloud Shell-sessie door CTRL+Shift+V te selecteren in Windows en Linux of door Cmd+Shift+V op macOS te selecteren.

  4. Selecteer Invoeren om de code uit te voeren.

Vereisten

Als u deze handleiding wilt volgen, hebt u het volgende nodig:

Uw ontwikkelomgeving voorbereiden

Voer de volgende taken uit om uw ontwikkelomgeving voor te bereiden:

  • Download de bron voor de microservice voor apparaatsimulatie.
  • Download de bron voor de microservice van de opslagadapter.
  • Voer de microservice van de opslagadapter lokaal uit.

In de instructies in dit artikel wordt ervan uitgegaan dat u Windows gebruikt. Als u een ander besturingssysteem gebruikt, moet u mogelijk enkele bestandspaden en opdrachten aanpassen aan uw omgeving.

De microservices downloaden

Download en pak de microservices voor externe bewaking van GitHub uit naar een geschikte locatie op uw lokale computer. In het artikel wordt ervan uitgegaan dat de naam van deze map remote-monitoring-services-dotnet-master is.

Download de microservice voor apparaatsimulatie van GitHub en pak deze uit naar een geschikte locatie op uw lokale computer. In het artikel wordt ervan uitgegaan dat de naam van deze map apparaatsimulatie-dotnet-master is.

De microservice van de opslagadapter uitvoeren

Open de map remote-monitoring-services-dotnet-master\storage-adapter in Visual Studio Code. Klik op de knoppen Herstellen om niet-opgeloste afhankelijkheden op te lossen.

Open het bestand storage-adapter/webservice/appsettings.ini en wijs uw Cosmos DB-connection string toe aan de variabele documentDBConnectionString.

Als u de microservice lokaal wilt uitvoeren, klikt u op Foutopsporing > starten.

In het Terminal-venster in Visual Studio Code ziet u uitvoer van de actieve microservice, inclusief een URL voor de statuscontrole van de webservice: http://127.0.0.1:9022/v1/status. Wanneer u naar dit adres navigeert, moet de status 'OK: Levend en goed' zijn.

Laat de microservice van de opslagadapter actief in dit exemplaar van Visual Studio Code terwijl u de volgende stappen uitvoert.

De koelunit wijzigen

In deze sectie voegt u een nieuw type interne temperatuurtelemetrie toe aan het bestaande type chillerapparaat :

  1. Maak een nieuwe map C:\temp\devicemodels op uw lokale computer.

  2. Kopieer de volgende bestanden naar uw nieuwe map vanuit de gedownloade kopie van de microservice voor apparaatsimulatie:

    Bron Doel
    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. Open het bestand C:\temp\devicemodels\chiller-01.json .

  4. Voeg in de sectie InitialState de volgende twee definities toe:

    "internal_temperature": 65.0,
    "internal_temperature_unit": "F",
    
  5. Voeg in de telemetriematrix de volgende definitie toe:

    {
      "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. Sla het bestand C:\temp\devicemodels\chiller-01.json op.

  7. Open het C:\temp\devicemodels\scripts\chiller-01-state.js bestand.

  8. Voeg de volgende velden toe aan de statusvariabele:

    internal_temperature: 65.0,
    internal_temperature_unit: "F",
    
  9. Werk de hoofdfunctie als volgt bij:

    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. Sla het C:\temp\devicemodels\scripts\chiller-01-state.js bestand op.

De gloeilamp maken

In deze sectie definieert u een nieuw gloeilampapparaattype :

  1. Maak een bestand C:\temp\devicemodels\lightbulb-01.json en voeg de volgende inhoud toe:

    {
      "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"
        }
      }
    }
    

    Sla de wijzigingen op in C:\temp\devicemodels\lightbulb-01.json.

  2. Maak een bestand C:\temp\devicemodels\scripts\lightbulb-01-state.js en voeg de volgende inhoud toe:

    "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;
    }
    

    Sla de wijzigingen op inC:\temp\devicemodels\scripts\lightbulb-01-state.js.

  3. Maak een bestand C:\temp\devicemodels\scripts\SwitchOn-method.js en voeg de volgende inhoud toe:

    "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);
    }
    

    Sla de wijzigingen op inC:\temp\devicemodels\scripts\SwitchOn-method.js.

  4. Maak een bestand C:\temp\devicemodels\scripts\SwitchOff-method.js en voeg de volgende inhoud toe:

    "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);
    }
    

    Sla de wijzigingen op inC:\temp\devicemodels\scripts\SwitchOff-method.js.

U hebt nu een aangepaste versie van het type Chiller-apparaat gemaakt en een nieuw apparaattype Lightbulb gemaakt.

De apparaten testen

In deze sectie test u de apparaattypen die u in de vorige secties lokaal hebt gemaakt.

De microservice voor apparaatsimulatie uitvoeren

Open de map device-simulation-dotnet-master die u hebt gedownload van GitHub in een nieuw exemplaar van Visual Studio Code. Klik op de knoppen Herstellen om niet-opgeloste afhankelijkheden op te lossen.

Open het bestand WebService/appsettings.ini en wijs uw Cosmos DB-connection string toe aan de variabele documentdb_connstring en wijzig ook de instellingen als volgt:

device_models_folder = C:\temp\devicemodels\

device_models_scripts_folder = C:\temp\devicemodels\scripts\

Als u de microservice lokaal wilt uitvoeren, klikt u op Foutopsporing > starten.

In het terminalvenster in Visual Studio Code ziet u uitvoer van de actieve microservice.

Laat de microservice voor apparaatsimulatie in dit exemplaar van Visual Studio Code actief terwijl u de volgende stappen uitvoert.

Een monitor instellen voor apparaat gebeurtenissen

In deze sectie gebruikt u de Azure CLI om een gebeurtenismonitor in te stellen om de telemetrie weer te geven die is verzonden vanaf de apparaten die zijn verbonden met uw IoT-hub.

In het volgende script wordt ervan uitgegaan dat de naam van uw IoT-hub apparaatsimulatietest is.

# 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

Laat de gebeurtenismonitor actief terwijl u de gesimuleerde apparaten test.

Een simulatie maken met het bijgewerkte apparaattype koelunit

In deze sectie gebruikt u het Hulpprogramma Postman om de microservice voor apparaatsimulatie aan te vragen om een simulatie uit te voeren met behulp van het bijgewerkte type koelunitapparaat. Postman is een hulpprogramma waarmee u REST-aanvragen naar een webservice kunt verzenden. De Postman-configuratiebestanden die u nodig hebt, bevinden zich in uw lokale kopie van de opslagplaats device-simulation-dotnet .

Postman instellen:

  1. Open Postman op uw lokale computer.

  2. Klik op Bestand > importeren. Klik vervolgens op Bestanden kiezen.

  3. Navigeer naar de map device-simulation-dotnet-master/docs/postman . Selecteer de Oplossing voor Azure IoT-apparaatsimulatie accelerator.postman_collection en azure IoT-apparaatsimulatieoplossing accelerator.postman_environment en klik op Openen.

  4. Vouw de oplossingsversneller voor Azure IoT-apparaatsimulatie uit naar de aanvragen die u kunt verzenden.

  5. Klik op Geen omgeving en selecteer de oplossingsversneller voor Azure IoT-apparaatsimulatie.

U hebt nu een verzameling en omgeving geladen in uw Postman-werkruimte die u kunt gebruiken om te communiceren met de microservice voor apparaatsimulatie.

De simulatie configureren en uitvoeren:

  1. Selecteer in de Postman-verzameling Een gewijzigde koelunitsimulatie maken en klik op Verzenden. Met deze aanvraag worden vier exemplaren van het gesimuleerde koelunitapparaattype gemaakt.

  2. De uitvoer van de gebeurtenismonitor in het Azure CLI-venster toont de telemetrie van de gesimuleerde apparaten, inclusief de nieuwe internal_temperature waarden.

Als u de simulatie wilt stoppen, selecteert u de aanvraag Simulatie stoppen in Postman en klikt u op Verzenden.

Een simulatie maken met het apparaattype gloeilamp

In deze sectie gebruikt u het Hulpprogramma Postman om de microservice voor apparaatsimulatie aan te vragen om een simulatie uit te voeren met behulp van het apparaattype gloeilamp. Postman is een hulpprogramma waarmee u REST-aanvragen naar een webservice kunt verzenden.

De simulatie configureren en uitvoeren:

  1. Selecteer in de Postman-verzameling Gloeilampsimulatie maken en klik op Verzenden. Met deze aanvraag worden twee exemplaren van het gesimuleerde gloeilampapparaattype gemaakt.

  2. De uitvoer van de gebeurtenismonitor in het Azure CLI-venster toont de telemetrie van de gesimuleerde gloeilampen.

Als u de simulatie wilt stoppen, selecteert u de aanvraag Simulatie stoppen in Postman en klikt u op Verzenden.

Resources opschonen

U kunt de twee lokaal uitgevoerde microservices stoppen in hun Visual Studio Code-exemplaren (foutopsporing stoppen met foutopsporing>).

Als u de IoT Hub- en Cosmos DB-exemplaren niet meer nodig hebt, verwijdert u deze uit uw Azure-abonnement om onnodige kosten te voorkomen.

Volgende stappen

In deze handleiding hebt u gezien hoe u een aangepaste gesimuleerde apparaattypen maakt en test door de microservice voor apparaatsimulatie lokaal uit te voeren.

De voorgestelde volgende stap is om te leren hoe u uw aangepaste gesimuleerde apparaattypen implementeert in de accelerator voor de externe bewakingsoplossing.