Integrace dat Azure Digital Twins do vnitřní mapy Azure Mapy

Tento článek ukazuje, jak pomocí dat Azure Digital Twins aktualizovat informace zobrazené na vnitřní mapě z Azure Mapy. Vzhledem k tomu, že Azure Digital Twins ukládá graf relací zařízení IoT a směruje data zařízení do různých koncových bodů, je to skvělá služba pro aktualizaci informačních překrytí na mapách.

Tato příručka se zabývá následujícími informacemi:

  1. Konfigurace instance Azure Digital Twins tak, aby odesílala události aktualizace dvojčete do funkce ve službě Azure Functions.
  2. Vytvoření funkce pro aktualizaci sady stavů funkcí azure Mapy vnitřních map
  3. Ukládání ID map a ID sady stavů funkcí v grafu Azure Digital Twins

Začínáme

Tato část nastavuje další kontext informací v tomto článku.

Požadavky

Než budete pokračovat v tomto článku, začněte nastavením jednotlivých prostředků Azure Digital Twins a Azure Mapy.

  • Pro Azure Digital Twins: Postupujte podle pokynů v Připojení uceleného řešení pro nastavení instance Služby Azure Digital Twins s ukázkovým grafem dvojčat a simulovaným tokem dat.
    • V tomto článku toto řešení rozšíříte o další koncový bod a trasu. V tomto kurzu přidáte do aplikace funkcí také další funkci.
  • Pro Azure Mapy: Podle pokynů v Tvůrci vytvořte vnitřní mapy a vytvořte sadu stavů funkcí pro vytvoření azure Mapy vnitřní mapy se sadou stavů funkcí.
    • Sady stavů funkcí jsou kolekce dynamických vlastností (stavů) přiřazených funkcím datové sady, jako jsou místnosti nebo vybavení. Ve výše uvedených pokynech pro Azure Mapy sada stavů funkce ukládá stav místnosti, který budete zobrazovat na mapě.
    • Budete potřebovat klíč předplatného Azure Mapy, ID sady stavů funkcí a mapConfiguration.

Topologie

Následující obrázek znázorňuje, kde prvky integrace vnitřních map v tomto kurzu odpovídají většímu kompletnímu scénáři služby Azure Digital Twins.

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

Směrování oznámení o aktualizaci dvojčat ze služby Azure Digital Twins

Instance Služby Azure Digital Twins můžou generovat události aktualizace dvojčat při každé aktualizaci stavu dvojčete. Azure Digital Twins Připojení ucelené řešení propojené výše vás provede scénářem, kdy se k aktualizaci atributu teploty připojeného k dvojčeti místnosti používá teploměr. Tento kurz toto řešení rozšiřuje tím, že si funkci Azure předáte, abyste aktualizovali oznámení z dvojčat a pomocí této funkce aktualizovali mapy.

Tento model se čte přímo z dvojčete místnosti, nikoli ze zařízení IoT, což vám dává flexibilitu při změně podkladového zdroje dat pro teplotu, aniž byste museli aktualizovat logiku mapování. Můžete například přidat více teploměrů nebo nastavit tuto místnost tak, aby sdílela teploměr s jinou místností, aniž byste museli aktualizovat logiku mapy.

Nejprve vytvoříte trasu ve službě Azure Digital Twins, která předá všechny události aktualizace dvojčete do tématu Event Gridu.

  1. Pomocí následujícího příkazu rozhraní příkazového řádku vytvořte téma Event Gridu, které bude přijímat události z vaší instance služby Azure Digital Twins:

    az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>
    
  2. Pomocí následujícího příkazu rozhraní příkazového řádku vytvořte koncový bod pro propojení tématu Event Gridu s Azure Digital Twins:

    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 ve službě Azure Digital Twins pro odesílání událostí aktualizace dvojčete do koncového bodu pomocí následujícího příkazu rozhraní příkazového řádku. Zástupný symbol názvu instance Azure Digital Twins v tomto příkazu můžete použít popisný název nebo název hostitele pro zvýšení výkonu.

    Poznámka:

    V Cloud Shellu je v současné době známý problém, který má vliv na tyto skupiny 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 Známé problémy služby Azure Digital Twins.

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

Vytvoření funkce Azure pro příjem událostí a aktualizaci map

V této části vytvoříte funkci, která naslouchá událostem odesílaných do tématu Event Gridu. Tato funkce přečte tato oznámení o aktualizaci a odešle odpovídající aktualizace do sady stavů funkcí Azure Mapy, aby se aktualizovala teplota jedné místnosti.

V předpokladu kurzu azure Digital Twins jste vytvořili aplikaci funkcí pro ukládání funkcí Azure Functions Azure Digital Twins. Teď v aplikaci funkcí vytvořte novou funkci Azure aktivovanou službou Event Grid.

Nahraďte kód funkce následujícím kódem. Vyfiltruje pouze aktualizace dvojčat vesmíru, přečte aktualizovanou teplotu a odešle tyto informace do Azure Mapy.

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

V aplikaci funkcí budete muset nastavit dvě proměnné prostředí. Jedním z nich je váš primární klíč předplatného Azure Mapy a druhý je ID sady stavů Azure Mapy.

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

Zobrazení živých aktualizací na mapě

Pokud chcete zobrazit teplotu aktualizace za provozu, postupujte následovně:

  1. Začněte odesílat simulovaná data IoT spuštěním projektu DeviceSimulator z Azure Digital Twins Připojení kompletním řešením. Pokyny pro tento proces najdete v části Konfigurace a spuštění simulace .
  2. Pomocí modulu Azure Mapy Indoor můžete vykreslit vnitřní mapy vytvořené v Azure Mapy Creator.
    1. Zkopírujte ukázkový soubor HTML vnitřní mapy z příkladu: Vlastní styling: Využívání konfigurace mapy v WebSDK (Preview).
    2. Nahraďte klíč předplatného, mapConfiguration, statesetID a oblast v místním souboru HTML hodnotami.
    3. Otevřete tento soubor v prohlížeči.

Oba vzorky odesílají teplotu v kompatibilním rozsahu, takže byste měli vidět barvu místnosti 121 aktualizace na mapě přibližně každých 30 sekund.

Screenshot of an office map showing room 121 colored orange.

Ukládání informací o mapách ve službě Azure Digital Twins

Teď, když máte pevně zakódované řešení pro aktualizaci informací o mapách, můžete pomocí grafu Azure Digital Twins uložit všechny informace potřebné k aktualizaci vnitřní mapy. Tyto informace by zahrnovaly ID sady stavů, mapuje ID předplatného a ID funkce každé mapy a umístění.

Řešení pro tento konkrétní příklad by zahrnovalo aktualizaci každého prostoru nejvyšší úrovně tak, aby měl ID sady stavů a mapuje atribut ID předplatného a aktualizuje každou místnost tak, aby měla ID funkce. Tyto hodnoty byste museli při inicializaci grafu dvojčete nastavit jednou a pak tyto hodnoty dotazovat pro každou událost aktualizace dvojčete.

V závislosti na konfiguraci topologie bude možné uložit tyto tři atributy na různých úrovních, které se vztahují k členitosti mapy.

Další kroky

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