Kurz: Zřízení budovy a monitorování pracovních podmínek ve službě Azure Digital Twins Preview
Důležité
Byla vydána nová verze služby Azure Digital Twins. Vzhledem k rozšířeným možnostem nové služby se původní služba Azure Digital Twins (popsaná v této sadě dokumentace) vyřadila z provozu.
Pokud chcete zobrazit dokumentaci k nové službě, navštivte aktivní dokumentaci ke službě Azure Digital Twins.
V tomto kurzu se dozvíte, jak pomocí služby Azure Digital Twins Preview monitorovat prostory pro požadované podmínky teploty a úroveň pohodlí. Po nakonfigurování ukázkové budovy můžete zřizovat a spouštět vlastní funkce na datech snímačů pomocí kroků v tomto kurzu.
V tomto kurzu se naučíte:
- Definujte podmínky pro monitorování.
- Vytvoření uživatelem definované funkce (UDF).
- Simulace dat senzoru
- Získejte výsledky uživatelem definované funkce.
Požadavky
V tomto kurzu se předpokládá, že jste dokončili nastavení služby Azure Digital Twins. Než budete pokračovat, ujistěte se, že máte následující:
- Účet Azure.
- Spuštěná instance služby Digital Twins.
- Ukázky služby Digital Twins C# se stáhly a extrahovali na vašem pracovním počítači.
-
Sada .NET Core SDK verze 2.1.403 nebo novější na vývojovém počítači pro sestavení a spuštění ukázky Spuštěním ověřte
dotnet --version
, že je nainstalovaná správná verze. - Visual Studio Code pro zkoumání vzorového kódu.
Tip
Pokud zřizujete novou instanci, použijte jedinečný název instance služby Digital Twins.
Definice podmínek, které se mají monitorovat
Můžete definovat sadu konkrétních podmínek, které se mají monitorovat v datech zařízení nebo snímačů, označované jako shody. Pak můžete definovat funkce označované jako uživatelem definované funkce. Uživatelem definované funkce spouštějí vlastní logiku na datech, která pocházejí z vašich prostorů a zařízení, když dojde k podmínkám zadaným shodami. Další informace najdete v tématu Zpracování dat a uživatelem definované funkce.
Ve Visual Studio Code otevřete soubor src\actions\provisionSample.yaml z ukázkového projektu occupancy-quickstart. Všimněte si části, která začíná typem matchers (Pravidla shody). Každá položka pod tímto typem vytvoří shodu se zadaným názvem. Matcher bude monitorovat senzor typu dataTypeValue. Všimněte si, že souvisí s prostorem s názvem Focus Room A1, který má uzel zařízení , který obsahuje několik senzorů. Pokud chcete zřídit shodu, která bude sledovat jeden z těchto senzorů, ujistěte se, že jeho hodnota dataTypeValue odpovídá datovému typu senzoru.
Pod stávající shody přidejte následující matcher. Ujistěte se, že jsou klávesy zarovnané a mezery se nenahrazovat tabulátory. Tyto řádky jsou také přítomné v souboru provisionSample.yaml jako okomentované řádky. Můžete je odkomentovat odebráním znaku #
před každým řádkem.
- name: Matcher Temperature
dataTypeValue: Temperature
Tento matcher bude sledovat SAMPLE_SENSOR_TEMPERATURE
senzor, který jste přidali v prvním kurzu.
Vytvoření funkce definované uživatelem
Pomocí uživatelem definovaných funkcí můžete přizpůsobit zpracování dat snímačů. Jedná se o vlastní javascriptový kód, který se dá spustit v rámci vaší instance služby Azure Digital Twins, pokud dojde ke konkrétním podmínkám popsaným v nástrojích shody. Pravidla shody a uživatelem definované funkce můžete vytvořit pro všechny senzory, které chcete monitorovat. Další informace najdete v tématu Zpracování dat a uživatelem definované funkce.
V ukázkovém souboru provisionSample.yaml vyhledejte oddíl, který začíná typem userdefinedfunctions. Tato část zřídí uživatelem definovanou funkci s daným názvem. Tento UDF funguje na seznamu shodovačů v části matcherNames. Všimněte si, že pro uživatelem definovanou funkci můžete v elementu script zadat vlastní soubor JavaScriptu.
Všimněte si také části roleassignments. Přiřadí roli Správce prostoru k uživatelem definované funkci. Tato role umožňuje přístup k událostem, které pocházejí z libovolného zřízeného prostoru.
Nakonfigurujte uživatelem definovanou funkci tak, aby zahrnovala pravidlo shody teploty. Provedete to přidáním následujícího řádku do uzlu
matcherNames
v souboru provisionSample.yaml (případně zrušením komentáře u tohoto řádku):- Matcher Temperature
V editoru otevřete soubor src\actions\userDefinedFunctions\availability.js. Toto je soubor odkazovaný v elementu skriptuprovisionSample.yaml. Funkce definovaná uživatelem v tomto souboru hledá podmínky, když se v místnosti nezjistí žádný pohyb a úrovně oxidu uhličitého jsou nižší než 1 000 ppm.
Upravte soubor JavaScriptu tak, aby monitoroval teplotu a další podmínky. Přidejte následující řádky kódu, které hledají podmínky, když se v místnosti nezjistí žádný pohyb, úrovně oxidu uhličitého jsou nižší než 1 000 ppm a teplota je nižší než 78 stupňů Fahrenheita.
Poznámka
Tato část upraví soubor src\actions\userDefinedFunctions\availability.js , abyste se mohli podrobně seznámit jedním ze způsobů, jak napsat uživatelem definovanou funkci. Můžete se ale rozhodnout, že v nastavení přímo použijete soubor src\actions\userDefinedFunctions\availabilityForTutorial.js . Tento soubor obsahuje všechny potřebné změny pro tento kurz. Pokud místo toho použijete tento soubor, nezapomeňte použít správný název souboru pro klíč skriptu v souboru src\actions\provisionSample.yaml.
a. Na začátek souboru přidejte pod komentář
// Add your sensor type here
následující řádky pro senzor teploty:var temperatureType = "Temperature"; var temperatureThreshold = 78;
b. Za příkaz, který definuje , pod komentář
// Add your sensor variable here
přidejte následující řádkyvar motionSensor
:var temperatureSensor = otherSensors.find(function(element) { return element.DataType === temperatureType; });
c. Za příkaz, který definuje
var carbonDioxideValue
, pod komentář// Add your sensor latest value here
přidejte následující řádek:var temperatureValue = getFloatValue(temperatureSensor.Value().Value);
d. Odeberte následující řádky kódu pod komentářem
// Modify this line to monitor your sensor value
:if(carbonDioxideValue === null || motionValue === null) { sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide or motion are null, returning"); return; }
Nahraďte je následujícími řádky:
if(carbonDioxideValue === null || motionValue === null || temperatureValue === null){ sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide, motion, or temperature are null, returning"); return; }
e. Odeberte následující řádky kódu pod komentářem
// Modify these lines as per your sensor
:var availableFresh = "Room is available and air is fresh"; var noAvailableOrFresh = "Room is not available or air quality is poor";
Nahraďte je následujícími řádky:
var alert = "Room with fresh air and comfortable temperature is available."; var noAlert = "Either room is occupied, or working conditions are not right.";
f. Odeberte následující blok kódu if-else pod komentářem
// Modify this code block for your sensor
:// If carbonDioxide less than threshold and no presence in the room => log, notify and set parent space computed value if(carbonDioxideValue < carbonDioxideThreshold && !presence) { log(`${availableFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`); setSpaceValue(parentSpace.Id, spaceAvailFresh, availableFresh); } else { log(`${noAvailableOrFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`); setSpaceValue(parentSpace.Id, spaceAvailFresh, noAvailableOrFresh); // Set up custom notification for poor air quality parentSpace.Notify(JSON.stringify(noAvailableOrFresh)); }
A nahraďte ho následujícím blokem if-else:
// If sensor values are within range and room is available if(carbonDioxideValue < carbonDioxideThreshold && temperatureValue < temperatureThreshold && !presence) { log(`${alert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`); // log, notify and set parent space computed value setSpaceValue(parentSpace.Id, spaceAvailFresh, alert); // Set up notification for this alert parentSpace.Notify(JSON.stringify(alert)); } else { log(`${noAlert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`); // log, notify and set parent space computed value setSpaceValue(parentSpace.Id, spaceAvailFresh, noAlert); }
Upravená uživatelem definovaná funkce bude hledat podmínku, kdy se místnost stane dostupnou a bude mít úroveň oxidu uhličitého a teplotu v rámci přípustných mezí. Když dojde ke splnění této podmínky, pomocí příkazu
parentSpace.Notify(JSON.stringify(alert));
vygeneruje oznámení. Bez ohledu na splnění podmínky nastaví hodnotu monitorovaného prostoru s odpovídající zprávou.například Soubor uložte.
Otevřete příkazové okno a přejděte do složky occupancy-quickstart\src. Spuštěním následujícího příkazu zřiďte graf prostorové inteligence a uživatelem definovanou funkci:
dotnet run ProvisionSample
Důležité
Aby se zabránilo neoprávněnému přístupu k rozhraní API služby Digital Twins Management, aplikace pro rychlé zprovoznění vyžaduje, abyste se přihlásili pomocí přihlašovacích údajů k účtu Azure. Přihlašovací údaje se uloží na krátkou dobu, takže se nemusíte při každém spuštění přihlašovat. Při prvním spuštění tohoto programu a po vypršení platnosti uložených přihlašovacích údajů vás aplikace přesměruje na přihlašovací stránku a poskytne kód specifický pro relaci, který se má na této stránce zadat. Podle pokynů se přihlaste pomocí svého účtu Azure.
Po ověření účtu aplikace začne vytvářet ukázkový prostorový graf nakonfigurovaný v provisionSample.yaml. Počkejte, až se zřizování dokončí. To bude trvat několik minut. Potom sledujte zprávy v příkazovém okně a všimněte si, jak se prostorový graf vytvoří. Všimněte si, jak aplikace vytvoří centrum IoT v kořenovém uzlu nebo rozhraní
Venue
.Z výstupu v příkazovém okně zkopírujte hodnotu
ConnectionString
, pod oddílemDevices
, do schránky. Tuto hodnotu budete potřebovat k simulaci připojení zařízení v další části.
Tip
Pokud se zobrazí chybová zpráva podobná operaci vstupně-výstupní operace byla přerušena kvůli ukončení vlákna nebo žádosti o aplikaci uprostřed zřizování, zkuste příkaz spustit znovu. K tomu může dojít v případě, že u problému se sítí vypršel časový limit klienta HTTP.
Simulace dat ze senzorů
V této části použijete projekt s názvem device-connectivity v ukázce. Budete simulovat data snímačů pro detekci pohybu, teploty a oxidu uhličitého. Tento projekt generuje náhodné hodnoty senzorů a s použitím připojovacího řetězce zařízení odesílá je do centra IoT.
V samostatném příkazovém okně přejděte do ukázky služby Azure Digital Twins a pak do složky připojení zařízení .
Spuštěním tohoto příkazu se ujistěte, že jsou správně závislosti projektu:
dotnet restore
Otevřete soubor appsettings.json v editoru a upravte následující hodnoty:
a. DeviceConnectionString: Přiřaďte hodnotu
ConnectionString
z okna výstupu z předchozí části. Zkopírujte tento řetězec úplně v uvozovkách, aby se simulátor mohl správně připojit k IoT Hubu.b. HardwareId v poli Senzory : Protože simulujete události ze senzorů zřízených pro instanci služby Azure Digital Twins, id hardwaru a názvy senzorů v tomto souboru by měly odpovídat
sensors
uzlu souboru provisionSample.yaml .Přidejte novou položku pro senzor teploty. Uzel Sensor v souboru appsettings.json by měl vypadat takto:
"Sensors": [{ "DataType": "Motion", "HardwareId": "SAMPLE_SENSOR_MOTION" },{ "DataType": "CarbonDioxide", "HardwareId": "SAMPLE_SENSOR_CARBONDIOXIDE" },{ "DataType": "Temperature", "HardwareId": "SAMPLE_SENSOR_TEMPERATURE" }]
Spuštěním tohoto příkazu zahajte simulaci událostí zařízení pro teplotu, pohyb a úroveň oxidu uhličitého:
dotnet run
Poznámka
Vzhledem k tomu, že ukázka simulace přímo nekomunikuje s vaší instancí služby Digital Twins, nevyžaduje ověření.
Získání výsledků uživatelem definované funkce
Uživatelem definovaná funkce se spustí pokaždé, když vaše instance přijme data ze senzorů a zařízení. Tato část se dotazuje na instanci služby Azure Digital Twins, aby získala výsledky uživatelem definované funkce. Budete upozorněni téměř v reálném čase, když je k dispozici místnost, že vzduch je čerstvý a teplota je správná.
Otevřete příkazové okno, které jste použili ke zřízení ukázky, nebo nové příkazové okno, a znovu přejděte do složky occupancy-quickstart\src ukázky.
Spusťte následující příkaz a po zobrazení výzvy se přihlaste:
dotnet run GetAvailableAndFreshSpaces
V okně výstupu se dozvíte, jak se funkce definovaná uživatelem spouští a zachycuje události z simulace zařízení.
Pokud je monitorovaná podmínka splněná, funkce definovaná uživatelem nastaví hodnotu prostoru s příslušnou zprávou, jak jsme viděli dříve. Funkce GetAvailableAndFreshSpaces
vypíše zprávu v konzole.
Vyčištění prostředků
Pokud chcete v tuto chvíli přestat zkoumat službu Azure Digital Twins, můžete odstranit prostředky vytvořené v tomto kurzu:
V nabídce vlevo v Azure Portal vyberte Všechny prostředky, vyberte skupinu prostředků Digital Twins a vyberte Odstranit.
Tip
Pokud došlo k potížím s odstraněním instance služby Digital Twins, aktualizace služby byla provedena s opravou. Zkuste instanci odstranit znovu.
V případě potřeby odstraňte ukázkové aplikace na pracovním počítači.
Další kroky
Teď, když jste zřídili prostory a vytvořili architekturu pro aktivaci vlastních oznámení, můžete přejít na některý z následujících kurzů: