použití digitálních vláken Azure k aktualizaci mapy vnitřních Azure Maps

tento článek vás provede kroky potřebnými k aktualizaci dat, která se zobrazují na mapě interiéru pomocí nástroje Azure Maps, pomocí dat digitálních vláken Azure. Služba Azure Digital autoformaes ukládá graf vašich vztahů zařízení IoT a směruje telemetrii do různých koncových bodů a díky tomu představuje ideální službu pro aktualizaci informačních překryvů na mapách.

Tato příručka se zabývá těmito postupy:

  1. Konfigurace instance digitálního vlákna Azure pro posílání dvojitě aktualizovaných událostí do funkce v Azure Functions.
  2. vytvoření funkce pro aktualizaci Azure Maps funkce vnitřních map stateset
  3. Jak ukládat ID map a ID stateset funkcí do grafu digitálních vláken Azure

Požadavky

  • postupujte podle digitálních vláken Azure v Připojení ucelené řešení.
    • Tuto dvojitou cestu rozšíříte pomocí dalšího koncového bodu a trasy. Z tohoto kurzu taky přidáte další funkci do aplikace Function App.
  • postupujte podle Azure Maps v části použití Azure Mapsho autora k vytvoření mapy vnitřních , aby se vytvořila Azure Maps vnitřní mapa s funkcí stateset.
    • Funkce statesets jsou kolekce dynamických vlastností (stavů) přiřazených k funkcím datové sady, jako jsou místnosti nebo vybavení. ve výše uvedeném kurzu Azure Maps ukládá funkce stateset stav místnosti, který se zobrazí na mapě.
    • budete potřebovat stateset ID vaší funkce a klíč předplatného Azure Maps.

Topologie

Následující obrázek znázorňuje, kde se prvky integrace vnitřních map v tomto kurzu vejdou do většího, uceleného scénáře digitálních vláken Azure.

Diagram služeb Azure v uceleném scénáři – zvýrazní se součást pro integraci vnitřních Mapy.

Vytvoření funkce pro aktualizaci mapy při aktualizaci dvojitých vláken

Nejdřív vytvoříte trasu v části digitální vlákna Azure, která bude předávat všechny události s dvojitou aktualizací do tématu Event Grid. Pak použijete funkci ke čtení těchto zpráv aktualizace a aktualizaci stateset funkce v Azure Maps.

Vytvořit trasu a filtr pro oznámení o aktualizacích dvojčete

Instance digitálních vláken Azure mohou generovat události s dvojitou aktualizací pokaždé, když se aktualizuje stav vlákna. digitální vlákna Azure Připojení ucelené řešení , které je propojené výše, projde scénářem, ve kterém se k aktualizaci atributu teploty připojeného ke zdvojení místnosti používá teploměr. Toto řešení rozšíříte tak, že se přihlásíte k odběru oznámení o aktualizacích pro vlákna a tyto informace použijete k aktualizaci vašich map.

Tento model čte přímo z místnosti místo zařízení IoT, což vám dává flexibilitu při změně podkladového zdroje dat na teplotu, aniž by bylo potřeba aktualizovat logiku mapování. Můžete například přidat více teploměrů nebo nastavit tuto místnost pro sdílení teploměru s jinou místností, a to vše bez nutnosti aktualizovat logiku mapy.

  1. Vytvořte téma Event gridu, které bude přijímat události z instance digitálního vlákna Azure.

    az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>
    
  2. Vytvořte koncový bod, který propojí téma Event Grid s digitálními podsítěmi Azure.

    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. Vytvořte trasu v Azure Digital Twins k posílání událostí aktualizací dvojčete do vašeho koncového bodu.

    Poznámka

    V současné době existuje známý problém v Cloud Shellu, který se týká těchto skupin příkazů: az dt route, az dt model, az dt twin.

    Pokud chcete tento problém vyřešit, buď spusťte az login v Cloud Shellu před spuštěním příkazu, nebo místo Cloud Shellu použijte místní rozhraní příkazového řádku (CLI). Další podrobnosti najdete v tématu řešení potíží: známé problémy v Azure Digital revláken.

    az dt route create --dt-name <your-Azure-Digital-Twins-instance-name> --endpoint-name <Event-Grid-endpoint-name> --route-name <my-route> --filter "type = 'Microsoft.DigitalTwins.Twin.Update'"
    

Vytvoření funkce pro aktualizaci map

chystáte se vytvořit funkci aktivovanou Event Grid v rámci aplikace function app z kompletního kurzu (Připojení kompletního řešení). tato funkce rozbalí tato oznámení a pošle aktualizace Azure Maps funkcím stateset k aktualizaci teploty jedné místnosti.

V následujícím dokumentu najdete referenční informace: Azure Event Grid Trigger pro Azure Functions.

Kód funkce nahraďte následujícím kódem. Odfiltruje pouze aktualizace vláken na prostor, přečte aktualizovanou teplotu a odešle tyto informace do Azure Maps.

using System;
using System.Threading.Tasks;
using System.Net.Http;
using Microsoft.Azure.EventGrid.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

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

Ve své aplikaci Function App budete muset nastavit dvě proměnné prostředí. jedním z nich je váš Azure Maps primární klíč předplatnéhoa jedna je vaše Azure Maps ID stateset.

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

Zobrazit živé aktualizace na mapě

Pokud chcete vidět živou aktualizaci, postupujte podle následujících kroků:

  1. zahajte odesílání simulovaných dat IoT spuštěním projektu DeviceSimulator z digitálních vláken Azure Připojení ucelené řešení. Pokyny k tomuto procesu najdete v části Configure and run the simulace .
  2. pomocí modulu Azure Maps interiéru můžete vykreslit vaše vnitřní mapy vytvořené v programu Azure Maps Creator.
    1. zkopírujte kód HTML z tohoto příkladu: v části použití vnitřního Mapy modulu v mapách vnitřních souborů použijte modul Azure Maps interiéru Mapy k místnímu souboru.
    2. Nahraďte klíč předplatného, tilesetId a statesetID v místním souboru HTML pomocí vašich hodnot.
    3. Otevřete tento soubor v prohlížeči.

Oba vzorky posílají teplotu v kompatibilním rozsahu, takže by se měla na mapě zobrazit barva místnosti 121 aktualizace každých 30 sekund.

Snímek obrazovky s mapou Office, na které se zobrazuje barevná oranžová místnost 121

Ukládání informací o mapách do digitálních vláken Azure

Teď, když máte pevně zakódované řešení pro aktualizaci informací o mapách, můžete použít graf digitálních vláken Azure k uložení všech informací potřebných pro aktualizaci vaší vnitřní mapy. Tyto informace zahrnují ID stateset, mapování ID předplatného a ID funkcí jednotlivých map a umístění.

Řešení pro tento konkrétní příklad by zahrnovalo aktualizaci každého prostoru na nejvyšší úrovni tak, aby měl ID stateset a mapování ID předplatného, a aktualizace každé místnosti tak, aby měla ID funkce. Tyto hodnoty byste museli nastavit jednou při inicializaci vyzdvojeného grafu a pak tyto hodnoty dotazovat pro každou událost s dvojitou aktualizací.

V závislosti na konfiguraci topologie budou možné ukládat tyto tři atributy na různých úrovních, které se vzájemně korelují s členitosti mapy.

Další kroky

Další informace o správě, upgradu a načítání informací z grafu vláken naleznete v následujících odkazech: