Aracılığıyla paylaş


Azure Digital Twins verilerini Azure Haritalar iç mekan haritasıyla tümleştirme

Bu makalede, Azure Haritalar iç mekan haritasında görüntülenen bilgileri güncelleştirmek için Azure Digital Twins verilerinin nasıl kullanılacağı gösterilmektedir. Azure Digital Twins, IoT cihaz ilişkilerinizin grafiğini depoladığı ve cihaz verilerini farklı uç noktalara yönlendirdiği için, haritalardaki bilgi katmanlarını güncelleştirmek için harika bir hizmettir.

Bu kılavuz aşağıdaki bilgileri kapsar:

  1. Azure Digital Twins örneğinizi Azure İşlevleri'deki bir işleve ikiz güncelleştirme olayları gönderecek şekilde yapılandırma.
  2. Azure Haritalar iç mekan haritaları özellik durum kümesini güncelleştirmek için işlev oluşturma.
  3. Harita kimliğinizi ve özellik durum kümesi kimliğinizi Azure Digital Twins grafiğinde depolama.

Kullanmaya başlayın

Bu bölüm, bu makaledeki bilgiler için ek bağlam ayarlar.

Önkoşullar

Bu makaleye devam etmeden önce tek tek Azure Digital Twins ve Azure Haritalar kaynaklarınızı ayarlayarak başlayın.

  • Azure Digital Twins için: Örnek ikiz grafı ve simülasyon veri akışıyla bir Azure Digital Twins örneği ayarlamak için uçtan uca çözüm bağlama başlığı altında yer alan yönergeleri izleyin.
    • Bu makalede, bu çözümü başka bir uç nokta ve yol ile genişleteceksiniz. Ayrıca bu öğreticiden işlev uygulamasına başka bir işlev ekleyeceksiniz.
  • Azure Haritalar için: İç mekan haritaları oluşturmak ve özellik durum kümesiyle bir Azure Haritalar iç mekan haritası oluşturmak için Oluşturucuyu Kullanma başlığı altındaki yönergeleri izleyin.
    • Özellik durum kümeleri, oda veya donanım gibi veri kümesi özelliklerine atanan dinamik özelliklerden (durumlar) oluşan koleksiyonlardır. Yukarıdaki Azure Haritalar yönergelerde özellik durum kümesi, haritada görüntüleyecek olduğunuz oda durumunu depolar.
    • Azure Haritalar abonelik anahtarınız, özellik durum kümesi kimliğiniz ve mapConfiguration kullanmanız gerekir.

Topoloji

Aşağıdaki görüntüde, bu öğreticideki iç mekan eşleme tümleştirme öğelerinin daha büyük, uçtan uca Bir Azure Digital Twins senaryosuna nasıl sığdığı gösterilmektedir.

Uçtan uca bir senaryoda İç Mekan Haritaları Tümleştirme parçasının vurgulandığı Azure hizmetlerinin diyagramı.

Azure Digital Twins'den ikiz güncelleştirme bildirimlerini yönlendirme

Azure Digital Twins örnekleri, ikizin durumu her güncelleştirildiğinde ikiz güncelleştirme olaylarını yayar. Yukarıda bağlantılı bir uçtan uca çözüm olan Azure Digital Twins Connect, bir odanın ikizine bağlı sıcaklık özniteliğini güncelleştirmek için termometrenin kullanıldığı bir senaryoyu göstermektedir. Bu öğretici, ikizlerden gelen bildirimleri güncelleştirmek için bir Azure işlevine abone olarak ve haritalarınızı güncelleştirmek için bu işlevi kullanarak bu çözümü genişletir.

Bu desen IoT cihazı yerine doğrudan oda ikizinden okunur ve bu sayede eşleme mantığınızı güncelleştirmenize gerek kalmadan temel alınan veri kaynağını sıcaklık için değiştirme esnekliği sağlar. Örneğin, harita mantığınızı güncelleştirmenize gerek kalmadan birden çok termometre ekleyebilir veya bu odayı bir termometreyi başka bir odayla paylaşacak şekilde ayarlayabilirsiniz.

İlk olarak Azure Digital Twins'de tüm ikiz güncelleştirme olaylarını bir Event Grid konusuna iletmek için bir yol oluşturacaksınız.

  1. Aşağıdaki CLI komutunu kullanarak Azure Digital Twins örneğinizden olayları alacak bir Event Grid konusu oluşturun:

    az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>
    
  2. Aşağıdaki CLI komutunu kullanarak Event Grid konunuzu Azure Digital Twins'e bağlamak için bir uç nokta oluşturun:

    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. Azure Digital Twins'de aşağıdaki CLI komutunu kullanarak uç noktanıza ikiz güncelleştirme olayları göndermek için bir yol oluşturun. Bu komuttaki Azure Digital Twins örnek adı yer tutucusu için kolay adı veya ana bilgisayar adını kullanarak performansı artırabilirsiniz.

    Not

    Şu anda Cloud Shell'de şu komut gruplarını etkileyen bilinen bir sorun vardır: az dt route, az dt model, az dt twin.

    Çözüm için bu komutları çalıştırmadan önce Cloud Shell'de az login komutunu çalıştırın veya Cloud Shell yerine local CLI ortamını kullanın. Bu konuda daha fazla ayrıntı için bkz . Azure Digital Twins bilinen sorunlar.

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

Olayları almak ve haritaları güncelleştirmek için bir Azure işlevi oluşturma

Bu bölümde, Event Grid konusuna gönderilen olayları dinleyen bir işlev oluşturacaksınız. İşlev bu güncelleştirme bildirimlerini okur ve tek bir odanın sıcaklığını güncelleştirmek için ilgili güncelleştirmeleri Azure Haritalar özellik durum kümesine gönderir.

Azure Digital Twins öğreticisi önkoşulunda, Azure İşlevleri Azure Digital Twins'i depolamak için bir işlev uygulaması oluşturdunuz. Şimdi işlev uygulamasının içinde Event Grid ile tetiklenen yeni bir Azure işlevi oluşturun.

İşlev kodunu aşağıdaki kodla değiştirin. Yalnızca uzay ikizlerine yapılan güncelleştirmeleri filtreleyecek, güncelleştirilmiş sıcaklığı okuyacak ve bu bilgileri Azure Haritalar'a gönderecek.

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

İşlev uygulamanızda iki ortam değişkeni ayarlamanız gerekir. Biri Azure Haritalar birincil abonelik anahtarınız, diğeri de Azure Haritalar durum kümesi kimliğinizdir.

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

Canlı güncelleştirmeleri haritada görüntüleme

Canlı güncelleştirme sıcaklığını görmek için aşağıdaki adımları izleyin:

  1. Azure Digital Twins Connect uçtan uca çözümden DeviceSimulator projesini çalıştırarak sanal IoT verilerini göndermeye başlayın. Bu işlemin yönergeleri Simülasyonu yapılandırma ve çalıştırma bölümündedir.
  2. Azure Haritalar Creator'da oluşturulan iç mekan haritalarınızı işlemek için Azure Haritalar İç Mekan modülünü kullanın.
    1. Örnek iç mekan haritası HTML dosyasını Örnek: Özel Stil: WebSDK'de harita yapılandırmasını kullanma (Önizleme) bölümünden kopyalayın.
    2. Yerel HTML dosyasındaki abonelik anahtarı, mapConfiguration, statesetID ve bölgesini değerlerinizle değiştirin.
    3. Bu dosyayı tarayıcınızda açın.

Her iki örnek de sıcaklığı uyumlu bir aralıkta gönderir, bu nedenle haritada yaklaşık 30 saniyede bir oda 121 güncelleştirmesinin rengini görmeniz gerekir.

Oda 121 renkli turuncu gösteren bir ofis haritasının ekran görüntüsü.

Harita bilgilerini Azure Digital Twins'de depolama

Artık harita bilgilerinizi güncelleştirmek için sabit kodlanmış bir çözümünüz olduğuna göre, iç mekan haritanızı güncelleştirmek için gerekli tüm bilgileri depolamak için Azure Digital Twins grafiğini kullanabilirsiniz. Bu bilgiler sırasıyla her haritanın ve konumun durum kümesi kimliğini, eşleme abonelik kimliğini ve özellik kimliğini içerir.

Bu özel örnek için bir çözüm, her üst düzey alanı durum kümesi kimliğine ve eşleme abonelik kimliği özniteliğine sahip olacak şekilde güncelleştirmeyi ve her odayı özellik kimliğine sahip olacak şekilde güncelleştirmeyi içerir. İkiz grafiğini başlatırken bu değerleri bir kez ayarlamanız ve ardından her ikiz güncelleştirme olayı için bu değerleri sorgulamanız gerekir.

Topolojinizin yapılandırmasına bağlı olarak, bu üç özniteliğin haritanızın ayrıntı düzeyiyle ilişkili farklı düzeylerde depolanması mümkün olacaktır.

Sonraki adımlar

İkiz grafından bilgileri yönetme, yükseltme ve alma hakkında daha fazla bilgi edinmek için aşağıdaki başvurulara bakın: