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ř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. | |
Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. |
Pokud chcete spustit kód uvedený v tomto článku ve službě Azure Cloud Shell, postupujte takto:
Spusťte Cloud Shell.
Vyberte tlačítko Kopírovat na bloku kódu a kód zkopírujte.
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.
Spusťte kód stisknutím klávesy Enter.
Požadavky
Pokud chcete postupovat podle tohoto návodu, potřebujete:
- Visual Studio Code. Visual Studio Code pro Mac, Linux a Windows si můžete stáhnout.
- .NET Core. Můžete si stáhnout .NET Core pro Mac, Linux a Windows.
- C# pro Visual Studio Code
- Pošťák. Postman for Mac, Windows nebo Linux si můžete stáhnout.
- Centrum IoT nasazené do vašeho předplatného Azure K dokončení kroků v této příručce potřebujete připojovací řetězec centra IoT Hub. Připojovací řetězec můžete získat z Azure Portal.
- Databáze Cosmos DB, která používá rozhraní SQL API a která je nakonfigurovaná pro silnou konzistenci. K dokončení kroků v této příručce potřebujete připojovací řetězec databáze Cosmos DB. Připojovací řetězec můžete získat z Azure Portal.
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č :
Vytvořte novou složku C:\temp\devicemodels na místním počítači.
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 Otevřete soubor C:\temp\devicemodels\chiller-01.json .
V části InitialState přidejte následující dvě definice:
"internal_temperature": 65.0, "internal_temperature_unit": "F",
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" } } },
Uložte soubor C:\temp\devicemodels\chiller-01.json .
Otevřete souborC:\temp\devicemodels\scripts\chiller-01-state.js .
Do proměnné stavu přidejte následující pole:
internal_temperature: 65.0, internal_temperature_unit: "F",
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; }
Uložte souborC:\temp\devicemodels\scripts\chiller-01-state.js .
Vytvoření žárovky
V této části definujete nový typ zařízení Lightbulb :
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.
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.
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.
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:
Otevřete Nástroj Postman na místním počítači.
Klikněte na Importovat soubor>. Potom klikněte na Zvolit soubory.
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.
Rozbalte akcelerátor řešení simulace zařízení Azure IoT na požadavky, které můžete odeslat.
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:
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í.
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:
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.
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í.