دمج بيانات Azure Digital Twins في خريطة داخلية خرائط Azure

توضح هذه المقالة كيفية استخدام بيانات Azure Digital Twins لتحديث المعلومات المعروضة على خريطة داخلية من خرائط Azure. نظرا لأن Azure Digital Twins يخزن رسما بيانيا لعلاقات جهاز IoT ويوجه بيانات الجهاز إلى نقاط نهاية مختلفة، فهي خدمة رائعة لتحديث التراكبات المعلوماتية على الخرائط.

يغطي هذا الدليل المعلومات التالية:

  1. تكوين مثيل Azure Digital Twins لإرسال أحداث تحديث مزدوجة إلى دالة في Azure Functions.
  2. إنشاء دالة لتحديث مجموعة ميزات الخرائط الداخلية خرائط Azure.
  3. تخزين معرف الخرائط ومعرف مجموعة الميزات في الرسم البياني Azure Digital Twins.

الشروع في العمل

يعين هذا القسم سياقا إضافيا للمعلومات الواردة في هذه المقالة.

المتطلبات الأساسية

قبل المتابعة مع هذه المقالة، ابدأ بإعداد Azure Digital Twins الفردية وموارد خرائط Azure.

  • بالنسبة إلى Azure Digital Twins: اتبع الإرشادات الواردة في الاتصال حل شامل لإعداد مثيل Azure Digital Twins مع نموذج رسم بياني مزدوج وتدفق بيانات محاكاة.
    • في هذه المقالة، ستقوم بتوسيع هذا الحل بنقطة نهاية ومسار آخر. ستضيف أيضا وظيفة أخرى إلى تطبيق الوظائف من هذا البرنامج التعليمي.
  • للحصول على خرائط Azure: اتبع الإرشادات الواردة في استخدام المنشئ لإنشاء خرائط داخلية وإنشاء مجموعة حالات ميزة لإنشاء خريطة داخلية خرائط Azure مع مجموعة ميزات.
    • مجموعات حالات الميزات هي مجموعات من الخصائص الديناميكية (الحالات) المعينة لميزات مجموعة البيانات مثل الغرف أو المعدات. في الإرشادات خرائط Azure أعلاه، تخزن مجموعة حالات الميزة حالة الغرفة التي سيتم عرضها على الخريطة.
    • ستحتاج إلى مفتاح الاشتراك خرائط Azure ومعرف مجموعة الميزات وتكوين الخريطة.

المخطط

توضح الصورة أدناه مكان احتواء عناصر تكامل الخرائط الداخلية في هذا البرنامج التعليمي في سيناريو Azure Digital Twins أكبر من طرف إلى طرف.

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

توجيه إعلامات التحديث المزدوج من Azure Digital Twins

يمكن أن تصدر مثيلات Azure Digital Twins أحداث تحديث مزدوجة كلما تم تحديث حالة التوأم. يمر Azure Digital Twins الاتصال حل شامل مرتبط أعلاه بسيناريو يتم فيه استخدام مقياس الحرارة لتحديث سمة درجة الحرارة المرفقة بتوأم الغرفة. يوسع هذا البرنامج التعليمي هذا الحل عن طريق الاشتراك في دالة Azure لتحديث الإعلامات من التوائم، واستخدام هذه الدالة لتحديث الخرائط الخاصة بك.

يقرأ هذا النمط من توأم الغرفة مباشرة، بدلا من جهاز IoT، والذي يمنحك المرونة لتغيير مصدر البيانات الأساسي لدرجة الحرارة دون الحاجة إلى تحديث منطق التعيين الخاص بك. على سبيل المثال، يمكنك إضافة مقاييس حرارة متعددة أو تعيين هذه الغرفة لمشاركة مقياس حرارة مع غرفة أخرى، كل ذلك دون الحاجة إلى تحديث منطق الخريطة.

أولا، ستقوم بإنشاء مسار في Azure Digital Twins لإعادة توجيه جميع أحداث التحديث المزدوج إلى موضوع Event Grid.

  1. إنشاء موضوع Event Grid، والذي سيتلقى الأحداث من مثيل Azure Digital Twins الخاص بك، باستخدام أمر CLI أدناه:

    az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>
    
  2. إنشاء نقطة نهاية لربط موضوع Event Grid ب Azure Digital Twins، باستخدام الأمر CLI أدناه:

    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 لإرسال أحداث تحديث مزدوجة إلى نقطة النهاية الخاصة بك، باستخدام الأمر CLI أدناه. بالنسبة إلى العنصر النائب لاسم مثيل Azure Digital Twins في هذا الأمر، يمكنك استخدام الاسم المألوف أو اسم المضيف لتعزيز الأداء.

    إشعار

    هناك مشكلة معروفة حاليا في Cloud Shell تؤثر على مجموعات الأوامر هذه: az dt route، ، az dt model. az dt twin

    لحل المشكلة، إما تشغيل az login في Cloud Shell قبل تشغيل الأمر، أو استخدام CLI المحلي بدلا من Cloud Shell. لمزيد من التفاصيل حول هذا، راجع المشكلات المعروفة في 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'"
    

إنشاء دالة Azure لتلقي الأحداث وتحديث الخرائط

في هذا القسم، ستقوم بإنشاء دالة تستمع للأحداث المرسلة إلى موضوع Event Grid. ستقرأ الدالة إعلامات التحديث هذه وترسل التحديثات المقابلة إلى مجموعة ميزات خرائط Azure، لتحديث درجة حرارة غرفة واحدة.

في المتطلبات الأساسية لبرنامج Azure Digital Twins التعليمي، قمت بإنشاء تطبيق دالة لتخزين وظائف Azure Digital Twins. الآن، قم بإنشاء دالة Azure جديدة مشغلة من شبكة الأحداث داخل تطبيق الوظائف.

استبدل التعليمات البرمجية للدالة بالتعليمات البرمجية التالية. سيقوم بتصفية التحديثات فقط لتوائم الفضاء، وقراءة درجة الحرارة المحدثة، وإرسال هذه المعلومات إلى خرائط Azure.

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

ستحتاج إلى تعيين متغيرين للبيئة في تطبيق الوظائف. أحدهما هو مفتاح الاشتراك الأساسي خرائط Azure، والآخر هو معرف مجموعة خرائط Azure.

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

عرض التحديثات المباشرة في الخريطة

للاطلاع على درجة حرارة التحديث المباشر، اتبع الخطوات التالية:

  1. ابدأ في إرسال بيانات IoT المحاكية عن طريق تشغيل مشروع DeviceSimulator من Azure Digital Twins الاتصال حل شامل. توجد إرشادات هذه العملية في قسم تكوين وتشغيل المحاكاة .
  2. استخدم وحدة خرائط Azure داخلي لعرض الخرائط الداخلية التي تم إنشاؤها في خرائط Azure Creator.
    1. انسخ مثال ملف HTML للخريطة الداخلية من مثال: التصميم المخصص: استهلاك تكوين الخريطة في WebSDK (معاينة).
    2. استبدل مفتاح الاشتراك و mapConfiguration و statesetID والمنطقة في ملف HTML المحلي بقيمك.
    3. افتح هذا الملف في المستعرض.

ترسل العينتان درجة حرارة في نطاق متوافق، لذلك يجب أن ترى لون تحديث الغرفة 121 على الخريطة كل 30 ثانية تقريبا.

Screenshot of an office map showing room 121 colored orange.

تخزين معلومات الخريطة في Azure Digital Twins

الآن بعد أن أصبح لديك حل مشفر لتحديث معلومات الخرائط الخاصة بك، يمكنك استخدام الرسم البياني Azure Digital Twins لتخزين جميع المعلومات اللازمة لتحديث الخريطة الداخلية. قد تتضمن هذه المعلومات معرف مجموعة الحالات، ومعرف اشتراك الخرائط، ومعرف الميزة لكل خريطة وموقع على التوالي.

يتضمن حل هذا المثال المحدد تحديث كل مساحة من المستوى الأعلى للحصول على معرف مجموعة الحالات وسمة معرف الاشتراك الخرائط، وتحديث كل غرفة للحصول على معرف ميزة. ستحتاج إلى تعيين هذه القيم مرة واحدة عند تهيئة الرسم البياني المزدوج، ثم الاستعلام عن هذه القيم لكل حدث تحديث مزدوج.

اعتمادا على تكوين المخطط الخاص بك، سيكون من الممكن تخزين هذه السمات الثلاث على مستويات مختلفة مرتبطة بنقاوة الخريطة الخاصة بك.

الخطوات التالية

لقراءة المزيد حول إدارة المعلومات وترقيتها واستردادها من الرسم البياني للتوائم، راجع المراجع التالية: