Megosztás a következőn keresztül:


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:

  1. 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.
  2. Függvény létrehozása az Azure Maps beltéri térképek funkcióállapotkészletének frissítéséhez.
  3. 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.

Az Azure-szolgáltatások diagramja egy végpontok közötti forgatókönyvben, kiemelve a Beltéri térképek integrációs elemét.

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.

  1. 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>
    
  2. 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>
    
  3. 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 modelaz 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:

  1. 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.
  2. Az Azure Maps Beltéri modullal renderelheti az Azure Maps Creatorban létrehozott beltéri térképeket.
    1. 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ó).
    2. 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.
    3. 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.

Képernyőkép egy irodai térképről, amelyen a 121-ben lévő szoba narancssárga színű.

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: