Azure Digital Twins-gegevens integreren in een binnenkaart van Azure Kaarten

In dit artikel wordt beschreven hoe u Azure Digital Twins-gegevens gebruikt om informatie bij te werken die wordt weergegeven op een indoorkaart van Azure Kaarten. Omdat Azure Digital Twins een grafiek opslaat van uw IoT-apparaatrelaties en apparaatgegevens naar verschillende eindpunten routeert, is het een uitstekende service voor het bijwerken van informatieve overlays op kaarten.

In deze handleiding worden de volgende informatie behandeld:

  1. Uw Azure Digital Twins-exemplaar configureren voor het verzenden van update-gebeurtenissen van dubbels naar een functie in Azure Functions.
  2. Een functie maken voor het bijwerken van een functiestatusset van Azure Kaarten indoor maps.
  3. Het opslaan van uw toewijzings-id en functiestatusset-id in de Azure Digital Twins-grafiek.

Aan de slag

In deze sectie wordt aanvullende context ingesteld voor de informatie in dit artikel.

Vereisten

Voordat u verdergaat met dit artikel, begint u met het instellen van uw afzonderlijke Azure Digital Twins- en Azure Kaarten-resources.

  • Voor Azure Digital Twins: volg de instructies in Verbinding maken een end-to-end oplossing om een Azure Digital Twins-exemplaar in te stellen met een voorbeelddubbelgrafiek en een gesimuleerde gegevensstroom.
    • In dit artikel gaat u die oplossing uitbreiden met een ander eindpunt en een andere route. U voegt vanuit die zelfstudie ook een andere functie toe aan de functie-app.
  • Voor Azure Kaarten: volg de instructies in Creator om indoorkaarten te maken en een functiestatusset te maken om een binnenkaart van Azure Kaarten te maken met een functiestatusset.
    • Functiestatussets zijn verzamelingen dynamische eigenschappen (statussen) die zijn toegewezen aan gegevenssetfuncties, zoals ruimten of apparatuur. In de bovenstaande instructies van Azure Kaarten slaat de functiestatusset de ruimtestatus op die u op een kaart weergeeft.
    • U hebt uw Azure Kaarten-abonnementssleutel, de statusset-id van de functie en mapConfiguration nodig.

Topologie

In de onderstaande afbeelding ziet u waar de integratie-elementen van indoorkaarten in deze zelfstudie passen in een groter end-to-end Azure Digital Twins-scenario.

Diagram of Azure services in an end-to-end scenario, highlighting the Indoor Maps Integration piece.

Meldingen over het bijwerken van dubbels routeren vanuit Azure Digital Twins

Azure Digital Twins-exemplaren kunnen dubbelupdate-gebeurtenissen verzenden wanneer de status van een tweeling wordt bijgewerkt. De Azure Digital Twins Verbinding maken een end-to-end oplossing die hierboven is gekoppeld, leidt door een scenario waarin een thermometer wordt gebruikt om een temperatuurkenmerk bij te werken dat is gekoppeld aan de tweeling van een ruimte. In deze zelfstudie wordt deze oplossing uitgebreid door een Azure-functie te abonneren om meldingen van tweelingen bij te werken en die functie te gebruiken om uw kaarten bij te werken.

Dit patroon leest rechtstreeks uit de kamerdubbel, in plaats van het IoT-apparaat, waardoor u de flexibiliteit hebt om de onderliggende gegevensbron voor temperatuur te wijzigen zonder dat u de toewijzingslogica hoeft bij te werken. U kunt bijvoorbeeld meerdere thermometers toevoegen of deze ruimte instellen om een thermometer te delen met een andere ruimte, allemaal zonder dat u de kaartlogica hoeft bij te werken.

Eerst maakt u een route in Azure Digital Twins om alle update-gebeurtenissen van de dubbel door te sturen naar een Event Grid-onderwerp.

  1. Maak een Event Grid-onderwerp dat gebeurtenissen ontvangt van uw Azure Digital Twins-exemplaar met behulp van de onderstaande CLI-opdracht:

    az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>
    
  2. Maak een eindpunt om uw Event Grid-onderwerp te koppelen aan Azure Digital Twins met behulp van de onderstaande CLI-opdracht:

    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. Maak een route in Azure Digital Twins om update-gebeurtenissen van dubbels naar uw eindpunt te verzenden met behulp van de onderstaande CLI-opdracht. Voor de tijdelijke aanduiding voor de naam van het Azure Digital Twins-exemplaar in deze opdracht kunt u de beschrijvende naam of de hostnaam gebruiken om de prestaties te verbeteren.

    Notitie

    Er is momenteel een bekend probleem in Cloud Shell dat van invloed is op deze opdrachtgroepen: az dt route, , az dt modelaz dt twin.

    Om dit probleem op te lossen, kunt u az login in Cloud Shell uitvoeren voordat u de opdracht uitvoert, of kunt u de lokale CLI gebruiken in plaats van Cloud Shell. Zie bekende problemen met Azure Digital Twins voor meer informatie hierover.

    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'"
    

Een Azure-functie maken om gebeurtenissen te ontvangen en kaarten bij te werken

In deze sectie maakt u een functie die luistert naar gebeurtenissen die naar het Event Grid-onderwerp zijn verzonden. De functie leest deze updatemeldingen en verzendt bijbehorende updates naar een statusset met functies van Azure Kaarten om de temperatuur van één ruimte bij te werken.

In de azure Digital Twins-zelfstudie hebt u een functie-app gemaakt om Azure Functions Azure Digital Twins op te slaan. Maak nu een nieuwe Door Event Grid geactiveerde Azure-functie in de functie-app.

Vervang de functiecode door de volgende code. Er worden alleen updates voor ruimtedubbels gefilterd, de bijgewerkte temperatuur gelezen en die informatie naar Azure Kaarten verzonden.

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());
                    }
                }
            }
        }
    }
}

U moet twee omgevingsvariabelen instellen in uw functie-app. Een is uw primaire abonnementssleutel voor Azure Kaarten en een is uw Azure-Kaarten statusset-id.

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>"

Live-updates weergeven op de kaart

Volg de onderstaande stappen om de temperatuur voor live-updates te bekijken:

  1. Begin met het verzenden van gesimuleerde IoT-gegevens door het DeviceSimulator-project uit te voeren vanuit azure Digital Twins Verbinding maken een end-to-end-oplossing. De instructies voor dit proces bevinden zich in de sectie Configureren en uitvoeren van de simulatie .
  2. Gebruik de Azure Kaarten Indoor-module om uw indoorkaarten weer te geven die zijn gemaakt in Azure Kaarten Creator.
    1. Kopieer het HTML-voorbeeldbestand van de indoorkaart uit voorbeeld: Aangepaste stijl: Kaartconfiguratie gebruiken in WebSDK (preview).
    2. Vervang de abonnementssleutel, mapConfiguration, statesetID en regio in het lokale HTML-bestand door uw waarden.
    3. Open dat bestand in uw browser.

Beide monsters verzenden temperatuur in een compatibel bereik, dus u ziet de kleur van kamer 121 update op de kaart ongeveer elke 30 seconden.

Screenshot of an office map showing room 121 colored orange.

Kaartgegevens opslaan in Azure Digital Twins

Nu u een in code vastgelegde oplossing hebt om uw kaartgegevens bij te werken, kunt u de Azure Digital Twins-grafiek gebruiken om alle informatie op te slaan die nodig is voor het bijwerken van uw indoorkaart. Deze informatie omvat de statusset-id, de abonnements-id van kaarten en de functie-id van elke kaart en locatie.

Een oplossing voor dit specifieke voorbeeld omvat het bijwerken van elke ruimte op het hoogste niveau om een statusset-id te hebben en het kenmerk Abonnements-id toewijzen en elke ruimte bij te werken met een functie-id. U moet deze waarden eenmaal instellen bij het initialiseren van de tweelinggrafiek en deze waarden vervolgens opvragen voor elke update-gebeurtenis van de dubbel.

Afhankelijk van de configuratie van uw topologie zijn deze drie kenmerken op verschillende niveaus opgeslagen die correleren met de granulariteit van uw kaart mogelijk.

Volgende stappen

Zie de volgende verwijzingen voor meer informatie over het beheren, upgraden en ophalen van informatie uit de tweelinggrafiek: