Sdílet prostřednictvím


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

Tento článek ukazuje, jak pomocí dat Azure Digital Twins aktualizovat informace zobrazené na vnitřní mapě z Azure Maps. 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 služby Azure Functions.
  2. Vytvoření funkce pro aktualizaci stavové sady prvků vnitřních map Azure Maps
  3. Ukládání ID vašich map a ID stavu prvků 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 Maps.

  • Pro Azure Digital Twins: Postupujte podle pokynů v tématu Připojení komplexního řešení a nastavte instanci služby Azure Digital Twins s ukázkovým grafem dvojčete 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 Maps: Postupujte podle pokynů v použití Nástroje Creator k vytvoření vnitřních map a vytvořte vnitřní mapu Azure Maps se stavovou sadou 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 Maps sada stavů funkcí ukládá stav místnosti, který budete zobrazovat na mapě.
    • Budete potřebovat klíč předplatného Azure Maps, ID stavu funkcí a konfigurace mapy.

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 služeb Azure v uceleném scénáři, který zvýrazňuje část Integrace vnitřních map

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če při každé aktualizaci stavu dvojčete. Azure Digital Twins Kompletní propojené řešení uvedené výše vás provede scénářem, kdy se k aktualizaci atributu teploty připojeného k digitálnímu modelu místnosti používá teploměr. Tento kurz rozšiřuje toto řešení tím, že přihlásí funkci Azure k odběru aktualizací oznámení od dvojčat a použije tuto funkci k aktualizaci vašich map.

Tento vzor čte přímo z dvojníka místnosti, nikoli ze zařízení IoT, což vám umožňuje flexibilitu při změně 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í aktualizačních událostí dvojčat do vašeho koncového bodu pomocí následujícího příkazu CLI. V tomto příkazu můžete použít zástupný symbol pro název instance Azure Digital Twins pomocí buď popisného názvu nebo názvu hostitele pro zlepš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 Maps, aby se aktualizovala teplota jedné místnosti.

V části požadavků kurzu Azure Digital Twins jste vytvořili aplikační funkci pro ukládání funkcí 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. Bude filtrovat pouze aktualizace spojené se "space twins", 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.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 Maps a jeden je ID sady stavů Azure Maps.

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, která se průběžně aktualizuje, postupujte následovně:

  1. Začněte odesílat simulovaná data IoT spuštěním projektu DeviceSimulator z Azure Digital Twins Connect komplexního řešení. Pokyny pro tento proces najdete v části Konfigurace a spuštění simulace .
  2. Pomocí modulu Azure Maps Indoor vykreslujte vnitřní mapy vytvořené v Azure Maps Creatoru.
    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 ve vašem místním souboru HTML svými 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, jak se barva místnosti 121 na mapě aktualizuje přibližně každých 30 sekund.

Snímek obrazovky s mapou office zobrazující místnost 121 barevně oranžovou

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 zahrnují ID sady stavů, ID předplatného mapy 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 jako atribut ID sady stavů a ID předplatného map, a aktualizaci každé místnosti 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 spravování, aktualizaci a získávání informací z grafu digitálních dvojčat najdete v následujících odkazech.