البرنامج التعليمي: توفير بناء ومراقبة ظروف العمل باستخدام Azure Digital Twins Preview

هام

تم إصدار إصدار جديد من خدمة Azure Digital Twins. في ضوء الإمكانات الموسعة للخدمة الجديدة، تم إيقاف خدمة Azure Digital Twins الأصلية (الموضحة في مجموعة الوثائق هذه).

لعرض وثائق الخدمة الجديدة، قم بزيارة وثائق Azure Digital Twins النشطة.

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

في هذا البرنامج التعليمي، تتعلم كيفية:

  • تحديد الشروط التي يجب مراقبتها.
  • إنشاء دالة معرفة من قبل المستخدم (UDF).
  • محاكاة بيانات المستشعر.
  • الحصول على نتائج دالة معرفة من قبل المستخدم.

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

يفترض هذا البرنامج التعليمي أنك انتهيت من إعداد Azure Digital Twins. قبل المتابعة، تأكد من أن لديك:

تلميح

استخدم اسم مثيل Digital Twins فريدا إذا كنت تقوم بتوفير مثيل جديد.

تحديد الشروط التي يجب مراقبتها

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

من مشروع نموذج التشغيل السريع للشغل ، افتح الملف src\actions\provisionSample.yaml في Visual Studio Code. لاحظ المقطع الذي يبدأ بمطابقات النوع. ينشئ كل إدخال ضمن هذا النوع مطابقا بالاسم المحدد. سيراقب المطابق أداة استشعار من نوع dataTypeValue. لاحظ كيفية ارتباطها بالمساحة المسماة "غرفة التركيز A1"، والتي تحتوي على عقدة أجهزة تحتوي على بعض أجهزة الاستشعار. لتوفير مطابق يتعقب أحد أجهزة الاستشعار هذه، تأكد من أن dataTypeValue الخاص به يطابق dataTypeValue الخاص بجهاز الاستشعار.

أضف المطابق التالي أسفل المطابقات الموجودة. تأكد من محاذاة المفاتيح وعدم استبدال المسافات بعلامات تبويب. هذه الأسطر موجودة أيضا في ملف provisionSample.yaml كخطوط تم التعليق عليها. يمكنك إلغاء تعليقها عن طريق إزالة # الحرف أمام كل سطر.

      - name: Matcher Temperature
        dataTypeValue: Temperature

سيقوم هذا المطابق بتعقب SAMPLE_SENSOR_TEMPERATURE أداة الاستشعار التي أضفتها في البرنامج التعليمي الأول.

إنشاء الوظيفة المحددة من قبل المستخدم

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

في نموذج ملف provisionSample.yaml ، ابحث عن مقطع يبدأ بنوع userdefinedfunctions. يقوم هذا القسم بتوفير دالة معرفة من قبل المستخدم باسم معين. يعمل UDF هذا على قائمة المطابقين ضمن matcherNames. لاحظ كيف يمكنك توفير ملف JavaScript الخاص بك ل UDF كبرنامج نصي.

لاحظ أيضا القسم المسمى roleassignments. يقوم بتعيين دور مسؤول المسافة إلى الدالة المعرفة من قبل المستخدم. يسمح له هذا الدور بالوصول إلى الأحداث التي تأتي من أي من المساحات المتوفرة.

  1. قم بتكوين UDF لتضمين مطابق درجة الحرارة عن طريق إضافة السطر التالي أو إلغاء التعليق عليه في matcherNames عقدة ملف provisionSample.yaml :

            - Matcher Temperature
    
  2. افتح الملفsrc\actions\userDefinedFunctions\availability.js في المحرر. هذا هو الملف المشار إليه في عنصر البرنامج النصيprovisionSample.yaml. تبحث الدالة المعرفة من قبل المستخدم في هذا الملف عن الحالات التي لا يتم فيها الكشف عن أي حركة في الغرفة وتكون مستويات ثاني أكسيد الكربون أقل من 1000 جزء في الدقيقة.

    تعديل ملف JavaScript لمراقبة درجة الحرارة والظروف الأخرى. أضف الأسطر التالية من التعليمات البرمجية للبحث عن الحالات التي لا يتم فيها الكشف عن حركة في الغرفة، ومستويات ثاني أكسيد الكربون أقل من 1000 جزء في الدقيقة، ودرجة الحرارة أقل من 78 درجة فهرنهايت.

    ملاحظة

    يعدل هذا القسم الملفsrc\actions\userDefinedFunctions\availability.js حتى تتمكن من التعرف بالتفصيل على طريقة واحدة لكتابة دالة معرفة من قبل المستخدم. ومع ذلك، يمكنك اختيار استخدام الملف مباشرةsrc\actions\userDefinedFunctions\availabilityForTutorial.js في الإعداد الخاص بك. يحتوي هذا الملف على جميع التغييرات المطلوبة لهذا البرنامج التعليمي. إذا كنت تستخدم هذا الملف بدلا من ذلك، فتأكد من استخدام اسم الملف الصحيح لمفتاح البرنامج النصي في src\actions\provisionSample.yaml.

    أ. في أعلى الملف، أضف الأسطر التالية لدرجة الحرارة أسفل التعليق // Add your sensor type here:

        var temperatureType = "Temperature";
        var temperatureThreshold = 78;
    

    ب. أضف الأسطر التالية بعد العبارة التي تحدد var motionSensor، أسفل التعليق // Add your sensor variable here:

       var temperatureSensor = otherSensors.find(function(element) {
           return element.DataType === temperatureType;
       });
    

    ج. أضف السطر التالي بعد العبارة التي تحدد var carbonDioxideValue، أسفل التعليق // Add your sensor latest value here:

        var temperatureValue = getFloatValue(temperatureSensor.Value().Value);
    

    د. إزالة الأسطر التالية من التعليمات البرمجية من أسفل التعليق // Modify this line to monitor your sensor value:

       if(carbonDioxideValue === null || motionValue === null) {
           sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide or motion are null, returning");
           return;
       }
    

    استبدلها بالأسطر التالية:

        if(carbonDioxideValue === null || motionValue === null || temperatureValue === null){
            sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide, motion, or temperature are null, returning");
            return;
        }
    

    هـ. إزالة الأسطر التالية من التعليمات البرمجية من أسفل التعليق // Modify these lines as per your sensor:

        var availableFresh = "Room is available and air is fresh";
        var noAvailableOrFresh = "Room is not available or air quality is poor";
    

    استبدلها بالأسطر التالية:

        var alert = "Room with fresh air and comfortable temperature is available.";
        var noAlert = "Either room is occupied, or working conditions are not right.";
    

    و. قم بإزالة كتلة التعليمات البرمجية if-else التالية بعد التعليق // Modify this code block for your sensor:

        // If carbonDioxide less than threshold and no presence in the room => log, notify and set parent space computed value
        if(carbonDioxideValue < carbonDioxideThreshold && !presence) {
            log(`${availableFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`);
            setSpaceValue(parentSpace.Id, spaceAvailFresh, availableFresh);
        }
        else {
            log(`${noAvailableOrFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`);
            setSpaceValue(parentSpace.Id, spaceAvailFresh, noAvailableOrFresh);
    
            // Set up custom notification for poor air quality
            parentSpace.Notify(JSON.stringify(noAvailableOrFresh));
        }
    

    واستبدله ب كتلة if-else التالية:

        // If sensor values are within range and room is available
        if(carbonDioxideValue < carbonDioxideThreshold && temperatureValue < temperatureThreshold && !presence) {
            log(`${alert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`);
    
            // log, notify and set parent space computed value
            setSpaceValue(parentSpace.Id, spaceAvailFresh, alert);
    
            // Set up notification for this alert
            parentSpace.Notify(JSON.stringify(alert));
        }
        else {
            log(`${noAlert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`);
    
            // log, notify and set parent space computed value
            setSpaceValue(parentSpace.Id, spaceAvailFresh, noAlert);
        }
    

    سيبحث UDF المعدل عن حالة حيث تصبح الغرفة متاحة ولها ثاني أكسيد الكربون ودرجة الحرارة ضمن حدود مقبولة. سينشئ إعلاما مع عبارة parentSpace.Notify(JSON.stringify(alert)); عند استيفاء هذا الشرط. سيقوم بتعيين قيمة المساحة المراقبة بغض النظر عما إذا كان الشرط استيفاء، مع الرسالة المقابلة.

    ز. احفظ الملف

  3. افتح نافذة أوامر، وانتقل إلى المجلد occupancy-quickstart\src. قم بتشغيل الأمر التالي لتوفير الرسم البياني للذكاء المكاني والدالة المعرفة من قبل المستخدم:

    dotnet run ProvisionSample
    

    هام

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

  4. بعد مصادقة حسابك، يبدأ التطبيق في إنشاء نموذج رسم بياني مكاني كما تم تكوينه في provisionSample.yaml. انتظر حتى ينتهي التوفير. سيستغرق الأمر بضع دقائق. بعد ذلك، لاحظ الرسائل في نافذة الأوامر ولاحظ كيفية إنشاء الرسم البياني المكاني. لاحظ كيف ينشئ التطبيق مركز IoT في العقدة الجذر أو Venue.

  5. من الإخراج في نافذة الأوامر، انسخ قيمة ConnectionString، ضمن Devices القسم، إلى الحافظة. ستحتاج إلى هذه القيمة لمحاكاة اتصال الجهاز في القسم التالي.

    عينة التزويد

تلميح

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

محاكاة بيانات المستشعر

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

  1. في نافذة أوامر منفصلة، انتقل إلى نموذج Azure Digital Twins ثم إلى مجلد اتصال الجهاز .

  2. قم بتشغيل هذا الأمر للتأكد من صحة تبعيات المشروع:

    dotnet restore
    
  3. افتح ملف appsettings.json في المحرر الخاص بك، وقم بتحرير القيم التالية:

    أ. DeviceConnectionString: قم بتعيين قيمة ConnectionString في نافذة الإخراج من القسم السابق. انسخ هذه السلسلة تماما، ضمن علامات الاقتباس، حتى يتمكن المحاكي من الاتصال بشكل صحيح مع مركز IoT.

    ب. معرف الأجهزة داخل صفيف أجهزة الاستشعار : نظرا لأنك تحاكي الأحداث من أجهزة الاستشعار التي تم توفيرها إلى مثيل Azure Digital Twins، يجب أن يتطابق معرف الجهاز وأسماء أجهزة الاستشعار في هذا الملف مع sensors عقدة ملف provisionSample.yaml .

    أضف إدخالا جديدا لمستشعر درجة الحرارة. يجب أن تبدو عقدة Sensors في appsettings.json كما يلي:

    "Sensors": [{
      "DataType": "Motion",
      "HardwareId": "SAMPLE_SENSOR_MOTION"
    },{
      "DataType": "CarbonDioxide",
      "HardwareId": "SAMPLE_SENSOR_CARBONDIOXIDE"
    },{
      "DataType": "Temperature",
      "HardwareId": "SAMPLE_SENSOR_TEMPERATURE"
    }]
    
  4. شغل هذا الأمر لبدء محاكاة أحداث الجهاز لدرجة الحرارة والحركة وثاني أكسيد الكربون:

    dotnet run
    

    ملاحظة

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

الحصول على نتائج الدالة المعرفة من قبل المستخدم

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

  1. افتح نافذة الأوامر التي استخدمتها لتوفير النموذج، أو نافذة أوامر جديدة، وانتقل إلى المجلد occupancy-quickstart\src للعينة مرة أخرى.

  2. تشغيل الأمر التالي وتسجيل الدخول عند مطالبتك:

    dotnet run GetAvailableAndFreshSpaces
    

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

إخراج UDF

إذا تم استيفاء الشرط المراقب، تعين الدالة المعرفة من قبل المستخدم قيمة المساحة مع الرسالة ذات الصلة، كما رأينا سابقا. تقوم GetAvailableAndFreshSpaces الدالة بطباعة الرسالة على وحدة التحكم.

تنظيف الموارد

إذا كنت ترغب في التوقف عن استكشاف Azure Digital Twins في هذه المرحلة، فلا تتردد في حذف الموارد التي تم إنشاؤها في هذا البرنامج التعليمي:

  1. من القائمة اليسرى في مدخل Microsoft Azure، حدد All resources، وحدد مجموعة موارد Digital Twins، وحدد Delete.

    تلميح

    إذا واجهت مشكلة في حذف مثيل Digital Twins، فقد تم طرح تحديث خدمة مع الإصلاح. يرجى إعادة محاولة حذف المثيل الخاص بك.

  2. إذا لزم الأمر، احذف نماذج التطبيقات على جهاز العمل الخاص بك.

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

الآن بعد أن قمت بتوفير المساحات الخاصة بك وإنشاء إطار عمل لتشغيل إعلامات مخصصة، يمكنك الانتقال إلى أي من البرامج التعليمية التالية: