Oktatóanyag: Az épület kiépítése és a munkakörülmények monitorozása az Azure Digital Twins előzetes verziójával
Fontos
Megjelent az Azure Digital Twins szolgáltatás új verziója. Az új szolgáltatás bővített képességeinek fényében az eredeti Azure Digital Twins szolgáltatást (amelyet a jelen dokumentációs készlet ismertet) kivonták.
Az új szolgáltatás dokumentációjának megtekintéséhez tekintse meg az aktív Azure Digital Twins-dokumentációt.
Ez az oktatóanyag bemutatja, hogyan használhatja az Azure Digital Twins előzetes verzióját a kívánt hőmérsékleti feltételek és kényelemszint figyelésére. A mintaépület konfigurálása után az oktatóanyag lépéseit követve kiépítheti az épületet, és egyéni függvényeket futtathat az érzékelőadatokon.
Eben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Határozza meg a monitorozni kívánt feltételeket.
- Felhasználó által definiált függvény (UDF) létrehozása.
- Érzékelőadatok szimulálása.
- Felhasználó által definiált függvény eredményeinek lekérése.
Előfeltételek
Ez az oktatóanyag feltételezi, hogy befejezte az Azure Digital Twins beállítását. Mielőtt továbblépne, győződjön meg arról, hogy rendelkezik a következőkkel:
- Egy Azure-fiók.
- Egy futó Digital Twins-példány.
- A munkavégzéshez használt gépre letöltött és kicsomagolt Digital Twins C#-minták.
- A .NET Core SDK 2.1.403-es vagy újabb verziója a fejlesztői gépen a minta létrehozásához és futtatásához. Futtassa
dotnet --version
annak ellenőrzéséhez, hogy a megfelelő verzió van-e telepítve. - Visual Studio Code a mintakód vizsgálatához.
Tipp
Ha új példányt hoz létre, használjon egyedi Digital Twins-példánynevet.
A monitorozni kívánt feltételek meghatározása
Megadhatja az eszköz vagy az érzékelő adatainak figyelésére szolgáló konkrét feltételeket, amelyeket egyezőknek nevezünk. Ezután definiálhat felhasználó által definiált függvényeket. A felhasználó által definiált függvények egyéni logikát hajtanak végre a szóközökből és eszközökből származó adatokon, amikor az egyezők által megadott feltételek teljesülnek. További információkért olvassa el az adatfeldolgozást és a felhasználó által definiált függvényeket.
Az occupancy-quickstart mintaprojektben nyissa meg az src\actions\provisionSample.yaml nevű fájlt a Visual Studio Code-ban. Figyelje meg a megfeleltetők típussal kezdődő szakaszt. Minden ilyen típusú bejegyzés létrehoz egy egyeztetőt a megadott névvel. Az egyező a dataTypeValue típusú érzékelőt figyeli. Figyelje meg, hogyan kapcsolódik a Fókusz szoba A1 nevű térhez, amely egy eszközcsomóponttal rendelkezik, amely néhány érzékelőt tartalmaz. Ha olyan egyezőt szeretne kiépíteni, amely nyomon követi az egyik ilyen érzékelőt, győződjön meg arról, hogy a dataTypeValue értéke megegyezik az érzékelő dataType értékével.
Adja hozzá a következő egyezőt a meglévő megfelelők alá. Győződjön meg arról, hogy a kulcsok egymáshoz vannak igazítva, és a szóközöket nem tabulátorok váltják fel. Ezek a sorok a provisionSample.yaml fájlban is megtalálhatók megjegyzésként megadott sorokként. A megjegyzéseket úgy szüntetheti meg, hogy eltávolítja a karaktert az #
egyes sorok előtt.
- name: Matcher Temperature
dataTypeValue: Temperature
Ez az egyező nyomon követi az SAMPLE_SENSOR_TEMPERATURE
első oktatóanyagban hozzáadott érzékelőt.
Felhasználó által meghatározott függvény létrehozása
A felhasználó által definiált függvényekkel testre szabhatja az érzékelőadatok feldolgozását. Ezek egyéni JavaScript-kódok, amelyek az Azure Digital Twins-példányon belül futtathatók, ha a megfeleltetők által leírt feltételek teljesülnek. Mindegyik monitorozni kívánt érzékelőhöz létrehozhat megfeleltetőket és felhasználó által meghatározott függvényeket. További információkért olvassa el az adatfeldolgozást és a felhasználó által definiált függvényeket.
A provisionSample.yaml mintafájlban keresse meg a userdefinedfunctions típussal kezdődő szakaszt. Ez a szakasz egy felhasználó által definiált függvényt helyez üzembe egy megadott névvel. Ez az UDF a matcherNames alatt található egyezők listáján működik. Figyelje meg, hogy megadhatja szkriptként a saját JavaScript-fájlját a felhasználó által meghatározott függvényhez.
A roleassignments nevű szakaszt is figyelje meg. Hozzárendeli a helyrendszergazda szerepkört a felhasználó által definiált függvényhez. Ez a szerepkör lehetővé teszi, hogy hozzáférjen a kiépített terek bármelyikéből származó eseményekhez.
Konfigurálja úgy az UDF-et, hogy tartalmazza a hőmérséklet-megfeleltetőt. Ehhez adja hozzá az alábbi sort, vagy távolítsa el a megjegyzést az alábbi sorból a provisionSample.yaml fájl
matcherNames
csomópontjában:- Matcher Temperature
Nyissa meg az src\actions\userDefinedFunctions\availability.js fájlt a szerkesztőben. Ez a provisionSample.yamlszkriptelemében hivatkozott fájl. A felhasználó által definiált függvény ebben a fájlban olyan feltételeket keres, amikor nem észlelhető mozgás a helyiségben, és a szén-dioxid-szint 1000 ppm alatt van.
Módosítsa a JavaScript-fájlt a hőmérséklet és egyéb feltételek monitorozásához. Adja hozzá a következő kódsorokat, hogy megkeresse azokat a feltételeket, amikor nem észlelhető mozgás a helyiségben, a szén-dioxid-szint 1000 ppm alatt van, a hőmérséklet pedig 78 Fahrenheit fok alatt van.
Megjegyzés
Ez a szakasz módosítja a fájlt src\actions\userDefinedFunctions\availability.js , így részletesen megismerheti a felhasználó által definiált függvények írásának egyik módját. Választhatja azonban, hogy közvetlenül használja a fájl src\actions\userDefinedFunctions\availabilityForTutorial.js a beállításban. Ebben a fájlban szerepel az oktatóanyaghoz szükséges összes módosítás. Ha inkább ezt a fájlt használja, ügyeljen arra, hogy a megfelelő fájlnevet használja az src\actions\provisionSample.yamlfájl szkriptkulcsához.
a. A fájl elején adja hozzá a következő sorokat a hőmérséklethez az
// Add your sensor type here
megjegyzés alá:var temperatureType = "Temperature"; var temperatureThreshold = 78;
b. A megjegyzés
// Add your sensor variable here
alá szúrja be a következő sorokat a definiáltvar motionSensor
utasítás után:var temperatureSensor = otherSensors.find(function(element) { return element.DataType === temperatureType; });
c. A megjegyzés
// Add your sensor latest value here
alá szúrja be a következő sort a definiáltvar carbonDioxideValue
utasítás után:var temperatureValue = getFloatValue(temperatureSensor.Value().Value);
d. Távolítsa el a következő kódsorokat
// Modify this line to monitor your sensor value
megjegyzés alól:if(carbonDioxideValue === null || motionValue === null) { sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide or motion are null, returning"); return; }
Cserélje le ezeket a következő sorokra:
if(carbonDioxideValue === null || motionValue === null || temperatureValue === null){ sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide, motion, or temperature are null, returning"); return; }
e. Távolítsa el a következő kódsorokat
// Modify these lines as per your sensor
megjegyzés alól:var availableFresh = "Room is available and air is fresh"; var noAvailableOrFresh = "Room is not available or air quality is poor";
Cserélje le ezeket a következő sorokra:
var alert = "Room with fresh air and comfortable temperature is available."; var noAlert = "Either room is occupied, or working conditions are not right.";
f. Távolítsa el a következő if-else kódblokkot a
// Modify this code block for your sensor
megjegyzés után:// 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)); }
És cserélje le az alábbi if-else blokkra:
// 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); }
A módosított UDF olyan feltételt keres, amelyben elérhetővé válik egy helyiség, ahol a szén-dioxid és a hőmérséklet a megengedett korlátokon belül van. Létrehoz egy értesítést a
parentSpace.Notify(JSON.stringify(alert));
utasítással, amikor ez a feltétel teljesül. A feltétel teljesülésétől függetlenül beállítja a monitorozott tér értékét a megfelelő üzenettel.: Mentse a fájlt.
Nyisson meg egy parancsablakot, és lépjen az occupancy-quickstart\src mappára. Futtassa a következő parancsot a térbeliintelligencia-gráf és a felhasználó által definiált függvény kiépítéséhez:
dotnet run ProvisionSample
Fontos
A Digital Twins Management API-hoz való jogosulatlan hozzáférés megakadályozása érdekében a foglaltsági gyorsindítási alkalmazásnak be kell jelentkeznie az Azure-fiók hitelesítő adataival. Rövid időre menti a hitelesítő adatokat, így előfordulhat, hogy nem kell minden alkalommal bejelentkeznie, amikor futtatja. A program első futtatásakor, és amikor a mentett hitelesítő adatok lejárnak, az alkalmazás egy bejelentkezési oldalra irányítja, és megad egy munkamenet-specifikus kódot, amelyet beírhat az adott oldalra. Az utasításokat követve jelentkezzen be Azure-fiókjával.
A fiók hitelesítése után az alkalmazás elkezd létrehozni egy térbeli mintagráfot a provisionSample.yaml fájlban konfigurált módon. Várja meg, amíg a kiépítés befejeződik. Eltarthat néhány percig. Ezután figyelje meg a parancsablak üzeneteit, és figyelje meg, hogyan jön létre a térbeli diagram. Figyelje meg, hogyan hoz létre az alkalmazás egy IoT Hubot a gyökércsomóponton vagy a
Venue
.A parancsablak kimenetéből másolja a szakasz alatti
Devices
értékeketConnectionString
a vágólapra. Erre az értékre szüksége lesz az eszközkapcsolat szimulálásához a következő szakaszban.
Tipp
Ha a kiépítés közepén a következőhöz hasonló hibaüzenet jelenik meg: "Az I/O-művelet megszakadt egy szálból való kilépés vagy egy alkalmazáskérés miatt", próbálja meg újra futtatni a parancsot. Ez akkor fordulhat elő, ha a HTTP-ügyfél túllépte az időkorlátot egy hálózati problémából.
Az érzékelőadatok szimulálása
Ebben a szakaszban az eszközkapcsolat nevű projektet fogja használni a mintában. Érzékelőadatokat szimulál a mozgás, a hőmérséklet és a szén-dioxid észleléséhez. Ez a projekt véletlenszerű értéket állít elő az érzékelők számára, és az eszköz kapcsolati sztringjével elküldi őket az IoT Hubnak.
Egy külön parancsablakban lépjen az Azure Digital Twins-mintára, majd az eszközkapcsolati mappára.
Futtassa ezt a parancsot annak ellenőrzéséhez, hogy helyesek-e a projekt függőségei:
dotnet restore
Nyissa meg az appsettings.json fájlt a szerkesztőben, és szerkessze a következő értékeket:
a. DeviceConnectionString: Rendelje hozzá a
ConnectionString
értékét az előző szakasz kimeneti ablakából. Másolja ezt a sztringet teljesen az idézőjelek közé, hogy a szimulátor megfelelően kapcsolódjon az IoT Hubhoz.b. HardwareId az Érzékelők tömbben: Mivel az Azure Digital Twins-példányhoz kiépített érzékelők eseményeit szimulálja, a fájlban található hardverazonosítónak és az érzékelők nevének egyeznie kell a
sensors
provisionSample.yaml fájl csomópontjával.Adjon hozzá egy új bejegyzést a hőmérséklet-érzékelőhöz. Az appsettings.jsonÉrzékelő csomópontjának a következőhöz hasonlóan kell kinéznie:
"Sensors": [{ "DataType": "Motion", "HardwareId": "SAMPLE_SENSOR_MOTION" },{ "DataType": "CarbonDioxide", "HardwareId": "SAMPLE_SENSOR_CARBONDIOXIDE" },{ "DataType": "Temperature", "HardwareId": "SAMPLE_SENSOR_TEMPERATURE" }]
Futtassa ezt a parancsot a hőmérséklettel, a mozgással és a szén-dioxiddal kapcsolatos eszközesemények szimulálásának elindításához:
dotnet run
Megjegyzés
Mivel a szimulációs minta nem kommunikál közvetlenül a Digital Twins-példánnyal, nincs szükség hitelesítésre.
A felhasználó által definiált függvény eredményeinek lekérése
A felhasználó által meghatározott függvény mindig fut, amikor a példány eszköz- és érzékelőadatokat fogad. Ez a szakasz lekérdezi az Azure Digital Twins-példányt a felhasználó által definiált függvény eredményeinek lekéréséhez. A közel valós időben értesítjük, ha rendelkezésre áll egy szoba, hogy a levegő friss, és a hőmérséklet megfelelő.
Nyissa meg a minta kiépítéséhez használt parancsablakot vagy egy új parancsablakot, és lépjen ismét a minta occupancy-quickstart\src mappájába.
Futtassa a következő parancsot, és jelentkezzen be, amikor a rendszer kéri:
dotnet run GetAvailableAndFreshSpaces
A kimeneti ablak bemutatja, hogyan fut a felhasználó által definiált függvény, és hogyan metszi az eseményeket az eszközszimulációból.
Ha a figyelt feltétel teljesül, a felhasználó által definiált függvény a tér értékét a megfelelő üzenettel állítja be, ahogy azt korábban láttuk. A GetAvailableAndFreshSpaces
függvény kinyomtatja az üzenetet a konzolon.
Az erőforrások eltávolítása
Ha ezen a ponton szeretné megszüntetni az Azure Digital Twins felfedezését, nyugodtan törölje az ebben az oktatóanyagban létrehozott erőforrásokat:
A Azure Portal bal oldali menüjében válassza a Minden erőforrás lehetőséget, válassza ki a Digital Twins erőforráscsoportot, és válassza a Törlés lehetőséget.
Tipp
Ha problémába ütközik a Digital Twins-példány törlésekor, a javítás szolgáltatásfrissítést vezetett be. Próbálkozzon újra a példány törlésével.
Ha szükséges, törölje a mintaalkalmazásokat a munkagépen.
Következő lépések
Most, hogy kiépítette a szóközöket, és létrehozott egy keretrendszert az egyéni értesítések aktiválásához, az alábbi oktatóanyagok egyikére léphet: