Azure Digital Twins-adatok integrálása egy Azure Maps beltéri térképbe
Ez a cikk bemutatja, hogyan frissítheti az Azure Digital Twins adatait egy beltéri térképen az Azure Mapsből. Mivel az Azure Digital Twins az IoT-eszközök kapcsolatainak grafikonját tárolja, és különböző végpontokra irányítja az eszközadatokat, nagyszerű szolgáltatás a térképeken található információs átfedések frissítéséhez.
Ez az útmutató a következő információkat ismerteti:
- Az Azure Digital Twins-példány konfigurálása ikerfrissítési események küldésére az Azure Functions egyik függvényének.
- Függvény létrehozása az Azure Maps beltéri térképek funkcióállapotkészletének frissítéséhez.
- A térképazonosító és a funkcióállapot-azonosító tárolása az Azure Digital Twins gráfban.
Első lépések
Ez a szakasz további kontextust állít be a cikkben szereplő információkhoz.
Előfeltételek
A cikk folytatásához először állítsa be az egyes Azure Digital Twins- és Azure Maps-erőforrásokat.
- Azure Digital Twins esetén: Kövesse a Végpontok közötti megoldás csatlakoztatása című témakör utasításait egy Azure Digital Twins-példány beállításához egy ikerpéldánymintával és szimulált adatfolyammal.
- Ebben a cikkben ezt a megoldást egy másik végponttal és útvonallal bővíti. Az oktatóanyagból egy másik függvényt is hozzáad a függvényalkalmazáshoz.
- Az Azure Maps esetében: Kövesse a Use Creator utasításait beltéri térképek létrehozásához, és hozzon létre egy Azure Maps beltéri térképet egy funkcióállapot-halmazsal.
- A funkcióállapotkészletek olyan dinamikus tulajdonságok (állapotok) gyűjteményei, amelyek adathalmaz-funkciókhoz, például helyiségekhez vagy berendezésekhez vannak hozzárendelve. A fenti Azure Maps-utasításokban a funkcióállapotkészlet tárolja a térképen megjelenítendő helyiség állapotát.
- Szüksége lesz az Azure Maps előfizetési kulcsára, a szolgáltatásállapot-azonosítóra és a mapConfigurationra.
Topológia
Az alábbi kép bemutatja, hogy az oktatóanyagban szereplő beltéri térképek integrációs elemei hol illeszkednek egy nagyobb, végpontok közötti Azure Digital Twins-forgatókönyvbe.
Ikerfrissítési értesítések átirányítása az Azure Digital Twinsből
Az Azure Digital Twins-példányok ikerfrissítési eseményeket bocsáthatnak ki az ikerpéldányok állapotának frissítésekor. Az Azure Digital Twins Connect fent összekapcsolt végpontok közötti megoldása végigvezeti a helyiség ikerpéldányához csatolt hőmérsékletattribútum frissítéséhez használt hőmérőt. Ez az oktatóanyag kibővíti ezt a megoldást azáltal, hogy feliratkozik egy Azure-függvényre, hogy frissítse az ikerpéldányok értesítéseit, és ezzel a függvénnyel frissítse a térképeket.
Ez a minta az IoT-eszköz helyett közvetlenül az ikerszobából olvas be, így rugalmasan módosíthatja a hőmérséklet alapjául szolgáló adatforrást anélkül, hogy frissítenie kellene a leképezési logikát. Hozzáadhat például több hőmérőt, vagy beállíthatja, hogy ez a helyiség megossza a hőmérőt egy másik szobával anélkül, hogy frissítenie kellene a térképlogikát.
Először létre fog hozni egy útvonalat az Azure Digital Twinsben, amellyel minden ikerfrissítési eseményt továbbíthat egy Event Grid-témakörbe.
Hozzon létre egy Event Grid-témakört, amely eseményeket fogad az Azure Digital Twins-példányból az alábbi CLI-paranccsal:
az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>
Hozzon létre egy végpontot, amely összekapcsolja az Event Grid-témakört az Azure Digital Twins szolgáltatással az alábbi CLI-paranccsal:
az dt endpoint create eventgrid --endpoint-name <Event-Grid-endpoint-name> --eventgrid-resource-group <Event-Grid-resource-group-name> --eventgrid-topic <your-Event-Grid-topic-name> --dt-name <your-Azure-Digital-Twins-instance-name>
Hozzon létre egy útvonalat az Azure Digital Twinsben, amellyel ikerfrissítési eseményeket küldhet a végpontnak az alábbi CLI-paranccsal. A parancsBan szereplő Azure Digital Twins-példánynév helyőrzőjeként használhatja a felhasználóbarát nevet vagy a gazdagép nevét a teljesítmény növeléséhez.
Feljegyzés
A Cloud Shellben jelenleg ismert probléma van, amely a következő parancscsoportokat érinti:
az dt route
, ,az dt model
az dt twin
.Ennek feloldásához futtassa az
az login
parancsot a parancs előtt a Cloud Shellben, vagy használja a helyi CLI-t a Cloud Shell helyett. Erről további információt az Azure Digital Twins ismert problémáiban talál.az dt route create --dt-name <your-Azure-Digital-Twins-instance-hostname-or-name> --endpoint-name <Event-Grid-endpoint-name> --route-name <my-route> --filter "type = 'Microsoft.DigitalTwins.Twin.Update'"
Azure-függvény létrehozása események fogadásához és térképek frissítéséhez
Ebben a szakaszban egy függvényt fog létrehozni, amely figyeli az Event Grid-témakörbe küldött eseményeket. A függvény felolvassa ezeket a frissítési értesítéseket, és elküldi a megfelelő frissítéseket egy Azure Maps-szolgáltatásállapotkészletnek, hogy egy helyiség hőmérsékletét frissítse.
Az Azure Digital Twins oktatóanyag előfeltételeként létrehozott egy függvényalkalmazást az Azure-függvények Azure Digital Twins tárolásához. Most hozzon létre egy új Event Grid által aktivált Azure-függvényt a függvényalkalmazásban.
Cserélje le a függvénykódot a következő kódra. Csak az ikerpéldányok frissítéseit szűri ki, felolvassa a frissített hőmérsékletet, és elküldi ezeket az információkat az Azure Mapsnek.
using System;
using System.Threading.Tasks;
using System.Net.Http;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Azure.Messaging.EventGrid;
namespace updateMaps
{
public static class ProcessDTUpdatetoMaps
{
// Read maps credentials from application settings on function startup
private static string statesetID = Environment.GetEnvironmentVariable("statesetID");
private static string subscriptionKey = Environment.GetEnvironmentVariable("subscription-key");
private static HttpClient httpClient = new HttpClient();
[FunctionName("ProcessDTUpdatetoMaps")]
public static async Task Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
{
JObject message = (JObject)JsonConvert.DeserializeObject(eventGridEvent.Data.ToString());
log.LogInformation($"Reading event from twinID: {eventGridEvent.Subject}: {eventGridEvent.EventType}: {message["data"]}");
//Parse updates to "space" twins
if (message["data"]["modelId"].ToString() == "dtmi:contosocom:DigitalTwins:Space;1")
{
// Set the ID of the room to be updated in your map.
// Replace this line with your logic for retrieving featureID.
string featureID = "UNIT103";
// Iterate through the properties that have changed
foreach (var operation in message["data"]["patch"])
{
if (operation["op"].ToString() == "replace" && operation["path"].ToString() == "/Temperature")
{
// Update the maps feature stateset
var postcontent = new JObject(
new JProperty(
"States",
new JArray(
new JObject(
new JProperty("keyName", "temperature"),
new JProperty("value", operation["value"].ToString()),
new JProperty("eventTimestamp", DateTime.UtcNow.ToString("s"))))));
var response = await httpClient.PutAsync(
$"https://us.atlas.microsoft.com/featurestatesets/{statesetID}/featureStates/{featureID}?api-version=2.0&subscription-key={subscriptionKey}",
new StringContent(postcontent.ToString()));
log.LogInformation(await response.Content.ReadAsStringAsync());
}
}
}
}
}
}
A függvényalkalmazásban két környezeti változót kell beállítania. Az egyik az Azure Maps elsődleges előfizetési kulcsa, a másik pedig az Azure Maps-állapotkészlet azonosítója.
az functionapp config appsettings set --name <your-function-app-name> --resource-group <your-resource-group> --settings "subscription-key=<your-Azure-Maps-primary-subscription-key>"
az functionapp config appsettings set --name <your-function-app-name> --resource-group <your-resource-group> --settings "statesetID=<your-Azure-Maps-stateset-ID>"
Élő frissítések megtekintése a térképen
Az élő frissítési hőmérséklet megtekintéséhez kövesse az alábbi lépéseket:
- Kezdje el a szimulált IoT-adatok küldését a DeviceSimulator projekt futtatásával az Azure Digital Twins Connectből egy végpontok közötti megoldásból. A folyamat utasításai a Szimuláció konfigurálása és futtatása szakaszban találhatók.
- Az Azure Maps Beltéri modullal renderelheti az Azure Maps Creatorban létrehozott beltéri térképeket.
- Másolja ki a példa beltéri térkép HTML-fájlját a Következő példából : Egyéni stílus: Térképkonfiguráció felhasználása a WebSDK-ban (előzetes verzió).
- Cserélje le az előfizetési kulcsot, a mapConfigurationt, a statesetID-t és a régiót a helyi HTML-fájlban az értékekre.
- Nyissa meg a fájlt a böngészőben.
Mindkét minta kompatibilis tartományban küldi el a hőmérsékletet, ezért körülbelül 30 másodpercenként látnia kell a 121.szoba frissítésének színét a térképen.
Térképadatok tárolása az Azure Digital Twinsben
Most, hogy már rendelkezik egy rögzített megoldással a térképek adatainak frissítéséhez, az Azure Digital Twins gráf használatával tárolhatja a beltéri térkép frissítéséhez szükséges összes információt. Ezek az információk tartalmazzák az állapothalmaz azonosítóját, az előfizetés azonosítóját, valamint az egyes térképek és helyek funkcióazonosítóját.
Ennek a konkrét példának a megoldásához frissíteni kell az egyes legfelső szintű területeket, hogy egy állapothalmaz-azonosítóval rendelkezzenek, és leképezik az előfizetés-azonosító attribútumot, és minden helyiséget úgy frissítsenek, hogy rendelkezzenek funkcióazonosítóval. Ezeket az értékeket egyszer kell beállítania az ikergráf inicializálásakor, majd le kell kérdeznie ezeket az értékeket minden ikerfrissítési eseményhez.
A topológia konfigurációjától függően ezt a három attribútumot különböző szinteken tárolhatja, amelyek a térkép részletességével korrelálnak.
Következő lépések
Az twins graph adatainak kezelésével, frissítésével és lekérésével kapcsolatos további információkért tekintse meg az alábbi hivatkozásokat: