azure Haritalar ınkapısı haritasını güncelleştirmek için azure dijital twıns kullanma

bu makalede, azure Haritalarkullanarak bir ınkapaklı eşlemesinde görüntülenecek bilgileri güncelleştirmek için azure dijital twıns verilerini kullanmak için gereken adımlar açıklanmaktadır. Azure dijital TWINS, IoT cihaz ilişkilerinizin bir grafiğini depolar ve Telemetriyi farklı uç noktalara yönlendirir ve bu, haritalar üzerinde bilgilendirici Yerpaylaşımları güncelleştirmek için mükemmel bir hizmet sağlar.

Bu kılavuzda şunları ele alınacaktır:

  1. Azure Digital TWINS örneğinizi, ikizi Update olaylarını Azure işlevleri'ndeki bir işleve göndermek için yapılandırma.
  2. Azure Haritalar ınkapısı haritaları özellik stateset 'i güncelleştirmek için bir işlev oluşturma.
  3. Haritalar KIMLIĞINIZI ve özellik stateset KIMLIĞINIZI Azure dijital TWINS grafiğinde depolama.

Önkoşullar

  • uçtan uca bir çözüm BağlanAzure dijital twıns 'i izleyin.
    • Bu ikizi ek bir uç nokta ve rotayla genişletiyorsunuz. Ayrıca, bu öğreticiden işlev uygulamanıza başka bir işlev da eklersiniz.
  • bir özellik stateset ile azure Haritalar ınkapılı eşleme oluşturmak üzere ıntıl haritaları oluşturmak için azure Haritalar oluşturucu kullanma bölümündeki azure Haritalar izleyin.
    • Özellik statesets 'ler, odalar veya ekipman gibi veri kümesi özelliklerine atanan dinamik Özellikler (eyaletler) koleksiyonlarıdır. yukarıdaki Azure Haritalar öğreticisinde, stateset özelliği bir haritada görüntülemekte olduğunuz oda durumunu depolar.
    • özellik stateset ıd ve Azure Haritalar abonelik anahtarınıza ihtiyacınız olacaktır.

Topoloji

Aşağıdaki görüntüde, bu öğreticideki ınkapımaps tümleştirme öğelerinin, daha büyük, uçtan uca bir Azure dijital TWINS senaryosuna hangi noktada uyduğunu gösterilmektedir.

uçtan uca bir senaryoda Azure hizmetlerinin diyagramı, ınkapıHaritalar tümleştirme parçasını vurgular.

TWINS güncelleştirme sırasında Haritayı güncelleştirmek için bir işlev oluşturma

İlk olarak, tüm ikizi Update olaylarını bir olay kılavuzu konusuna iletmek için Azure dijital TWINS 'te bir yol oluşturacaksınız. ardından, bu güncelleştirme iletilerini okumak ve Azure Haritalar bir özellik stateset 'i güncelleştirmek için bir işlev kullanacaksınız.

Güncelleştirme bildirimlerinin ikizini oluşturmak için rota ve filtre oluşturma

Azure dijital TWINS örnekleri, bir ikizi durumunun güncelleştirildiği her seferinde ikizi Update olaylarını yayabilir. Azure dijital twıns Bağlan , bir odanın ikizi 'e bağlı olan sıcaklık özniteliğini güncelleştirmek için bir termometre 'nin kullanıldığı bir senaryoya yol gösterecektir. Bu çözümü, TWINS güncelleştirme bildirimlerine abone olarak ve haritalarınızı güncelleştirmek için bu bilgileri kullanarak genişlettireceksiniz.

Bu kalıp, IoT cihazı yerine doğrudan ikizi 'dan, eşleme mantığınızı güncelleştirmeye gerek kalmadan, sıcaklık için temel alınan veri kaynağını değiştirme esnekliği sağlayan bir yol elde etmenizi sağlar. Örneğin, eşleme mantığınızı güncelleştirmeye gerek kalmadan, birden fazla salon ölçüm ekleyebilir veya bu odayı başka bir oda ile bir termometre paylaşmak üzere ayarlayabilirsiniz.

  1. Azure dijital TWINS örneğinden olay alacak bir olay Kılavuzu konusu oluşturun.

    az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>
    
  2. Olay kılavuzunuzun konusunu Azure dijital 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. İkiz güncelleştirme olaylarını uç noktanıza göndermek için Azure Digital Twins'de bir rota oluşturun.

    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. Bunun hakkında daha fazla bilgi için bkz. sorun giderme: Azure dijital TWINS 'de bilinen sorunlar.

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

Haritaları güncelleştirmek için bir işlev oluşturma

işlev uygulamanız içinde, uçtan uca öğreticiden (uçtan uca bir çözüm Bağlan) Event Grid tetiklenen bir işlev oluşturacağız. bu işlev, bir odanın sıcaklığını güncelleştirmek için bu bildirimleri paketten ayıklayın ve Azure Haritalar feature stateset 'e güncelleştirmeler gönderir.

Başvuru bilgileri için aşağıdaki belgeye bakın: Azure işlevleri için Azure Event Grid tetikleyicisi.

İşlev kodunu aşağıdaki kodla değiştirin. yalnızca Azure space 'e yönelik güncelleştirmeleri filtreleyerek, güncelleştirilmiş sıcaklığın okunmasını ve bu bilgileri Azure Haritalar 'a göndermeyecektir.

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

İşlev uygulamanızda iki ortam değişkeni ayarlamanız gerekir. azure Haritalar birincil abonelik anahtarınız, diğeri ise azure Haritalar stateset kimliğiniz.

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

Haritadaki canlı güncelleştirmeleri görüntüleme

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

  1. Azure dijital twıns 'den bir uçtan uca çözüm Bağlan devicesimülatör projesini çalıştırarak sanal ıot verilerini göndermeye başlayın. Bu işlem için yönergeler, benzetim ' in yapılandırma ve çalıştırma bölümünde bulunur.
  2. azure Haritalar ınkapısı modülünü kullanarak azure Haritalar Creator 'da oluşturulan ınkapılarınızı işleyebilirsiniz.
    1. örneğin, HTML 'yi örnek: Azure Haritalar ınkapısı Haritalar modülünü kullanılan ınkapıların ınkapıHaritalar module bölümünü yerel bir dosyaya kopyalayın.
    2. Yerel HTML dosyasındaki, tilesetıd ve statesetıd abonelik anahtarını değerlerinizle değiştirin.
    3. Bu dosyayı tarayıcınızda açın.

Her iki örnek de sıcaklığın uyumlu bir aralığa gönderilmesini sağlamak için, her 30 saniyede bir haritada oda 121 güncelleştirme rengini görmeniz gerekir.

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

Haritalar bilgilerinizi Azure dijital TWINS 'te depolayın

Haritalar bilgilerinizi güncelleştirmek için bir tek kodlanmış çözümünüz olduğuna göre, ınkapımanız eşlemenizi güncelleştirmek için gereken tüm bilgileri depolamak için Azure dijital 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 belirli örneğe yönelik bir çözüm, her üst düzey alanın bir stateset KIMLIĞI ve Maps abonelik KIMLIĞI özniteliğiyle güncelleştirilmesini ve her odanın bir özellik KIMLIĞINE sahip olacak şekilde güncelleştirilmesini içerir. İkizi grafiğini başlatırken bu değerleri bir kez ayarlamanız gerekir, ardından bu değerleri her bir ikizi Update olayı için sorgulayın.

Topolojinizin yapılandırmasına bağlı olarak, bu üç özniteliği Haritalarınızın ayrıntı düzeyi ile ilişkili farklı düzeylerde depolamak mümkün olacaktır.

Sonraki adımlar

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