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. | |
Ga naar https://shell.azure.com, of selecteer de knop Cloud Shell starten om Cloud Shell in uw browser te openen. | |
Klik op de knop Cloud Shell in het menu in de balk rechtsboven in de Azure-portal. |
Om de code in dit artikel in Azure Cloud Shell uit te voeren:
Start Cloud Shell.
Selecteer de knop Kopiëren op een codeblok om de code te kopiëren.
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.
Selecteer Invoeren om de code uit te voeren.
Vereisten
Als u deze handleiding wilt volgen, hebt u het volgende nodig:
- Visual Studio Code. U kunt Visual Studio Code voor Mac, Linux en Windows downloaden.
- .NET Core. U kunt .NET Core voor Mac, Linux en Windows downloaden.
- C# voor Visual Studio Code
- Postman. U kunt Postman voor Mac, Windows of Linux downloaden.
- Een IoT-hub die is geïmplementeerd in uw Azure-abonnement. U hebt de connection string van de IoT-hub nodig om de stappen in deze handleiding uit te voeren. U kunt de connection string ophalen uit de Azure Portal.
- Een Cosmos DB-database die gebruikmaakt van de SQL-API en die is geconfigureerd voor sterke consistentie. U hebt de connection string van de Cosmos DB-database nodig om de stappen in deze handleiding uit te voeren. U kunt de connection string ophalen uit de Azure Portal.
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 :
Maak een nieuwe map C:\temp\devicemodels op uw lokale computer.
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 Open het bestand C:\temp\devicemodels\chiller-01.json .
Voeg in de sectie InitialState de volgende twee definities toe:
"internal_temperature": 65.0, "internal_temperature_unit": "F",
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" } } },
Sla het bestand C:\temp\devicemodels\chiller-01.json op.
Open het C:\temp\devicemodels\scripts\chiller-01-state.js bestand.
Voeg de volgende velden toe aan de statusvariabele:
internal_temperature: 65.0, internal_temperature_unit: "F",
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; }
Sla het C:\temp\devicemodels\scripts\chiller-01-state.js bestand op.
De gloeilamp maken
In deze sectie definieert u een nieuw gloeilampapparaattype :
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.
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.
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.
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:
Open Postman op uw lokale computer.
Klik op Bestand > importeren. Klik vervolgens op Bestanden kiezen.
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.
Vouw de oplossingsversneller voor Azure IoT-apparaatsimulatie uit naar de aanvragen die u kunt verzenden.
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:
Selecteer in de Postman-verzameling Een gewijzigde koelunitsimulatie maken en klik op Verzenden. Met deze aanvraag worden vier exemplaren van het gesimuleerde koelunitapparaattype gemaakt.
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:
Selecteer in de Postman-verzameling Gloeilampsimulatie maken en klik op Verzenden. Met deze aanvraag worden twee exemplaren van het gesimuleerde gloeilampapparaattype gemaakt.
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.