جدولة وبث المهام (.NET)

استخدم Azure IoT Hub لجدولة المهام التي تحدث ملايين الأجهزة وتعقبها. استخدام الوظائف لإجراء ما يلي:

  • تحديث الخصائص المطلوبة

  • تحديث العلامات

  • استدعاء أساليب مباشرة

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

لمعرفة المزيد حول كل من هذه القدرات، اطلع على ما يلي:

ملاحظة

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

توضح لك هذه المقالة كيفية إنشاء تطبيقي وحدة تحكم .NET (C#):

  • تطبيق جهاز، SimulateDeviceMethods، ينفذ أسلوبًا مباشرًا يسمى LockDoor، والذي يمكن استدعاؤه بواسطة التطبيق الخلفي.

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

ملاحظة

راجع Azure IoT SDKs لمزيد من المعلومات حول أدوات SDK المتوفرة لإنشاء كل من الجهاز والتطبيقات الخلفية.

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

  • Visual Studio.

  • مركز IoT. أنشئ واحدًا باستخدام CLI أو مدخل Azure.

  • جهاز مسجل. سجَل واحداً في مدخل Microsoft Azure.

  • تأكد من أن المنفذ 8883 مفتوح في جدار الحماية الخاص بك. يستخدم نموذج الجهاز في هذه المقالة بروتوكول MQTT، الذي يتصل عبر المنفذ 8883. قد يتم حظر هذا المنفذ في بعض بيئات شبكات الشركات والتعليمية. لمزيد من المعلومات وطرق التغلب على هذه المشكلة، يرجى مراجعة الاتصال بمركز IoT (MQTT).

إنشاء تطبيق جهاز محاكاة

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

  1. في Visual Studio، حدد إنشاء مشروع جديد، ثم اختر قالب المشروع تطبيق وحدة التحكم (.NET Framework). حدد «Next» للمتابعة.

  2. في تكوين المشروع الجديد الخاص بك، قم بتسمية المشروع SimulateDeviceMethods، ثم حدد التالي.

    لقطة شاشة للنافذة المنبثقة

  3. اقبل الإصدار الافتراضي من .NET Framework، ثم حدد إنشاء لإنشاء المشروع.

  4. في مستكشف الحلول، انقر بزر الماوس الأيمن فوق مشروع SimulateDeviceMethods، ثم حدد إدارة حزم NuGet.

  5. في مدير حزم NuGet، حدد استعراض وابحث عن واختر Microsoft.Azure.Devices.Client. حدد ⁧⁩⁩Install⁦⁩.

    لقطة شاشة لمدير حزمة NuGet في Visual Studio.

    تقوم هذه الخطوة بتنزيل وتثبيت وإضافة مرجع إلى حزمة NuGetعدة تطوير البرامج لجهاز Azure IoT وتبعياتها.

  6. إضافة العبارات التالية using في الجزء العلوي من الملف Program.cs:

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    using Newtonsoft.Json;
    using System.Threading.Tasks;
    using System.Text;
    
  7. إضافة الحقول التالية إلى فئة البرنامج. استبدال قيمة العنصر النائب بسلسلة اتصال الجهاز التي لاحظتها في المقطع السابق:

    static string DeviceConnectionString = "<yourDeviceConnectionString>";
    static DeviceClient Client = null;
    
  8. إضافة التعليمات البرمجية التالية لتطبيق الأسلوب المباشر على الجهاز:

    static Task<MethodResponse> LockDoor(MethodRequest methodRequest, object userContext)
    {
        Console.WriteLine();
        Console.WriteLine("Locking Door!");
        Console.WriteLine("\nReturning response for method {0}", methodRequest.Name);
    
        string result = "'Door was locked.'";
        return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200));
    }
    
  9. إضافة الأسلوب التالي لتنفيذ وحدة الاستماع للجهاز المزدوج على الجهاز:

    private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, 
      object userContext)
    {
        Console.WriteLine("Desired property change:");
        Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
    }
    
  10. وأخيرًا، إضافة التعليمات البرمجية التالية إلى الأسلوب الرئيسي لفتح الاتصال بلوحة وصل IoT وتهيئة وحدة الإصغاء الأسلوب:

    try
    {
        Console.WriteLine("Connecting to hub");
        Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, 
          TransportType.Mqtt);
    
        Client.SetMethodHandlerAsync("LockDoor", LockDoor, null);
        Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null);
    
        Console.WriteLine("Waiting for direct method call and device twin update\n Press enter to exit.");
        Console.ReadLine();
    
        Console.WriteLine("Exiting...");
    
        Client.SetMethodHandlerAsync("LockDoor", null, null);
        Client.CloseAsync().Wait();
    }
    catch (Exception ex)
    {
        Console.WriteLine();
        Console.WriteLine("Error in sample: {0}", ex.Message);
    }
    
  11. حفظ عملك وبناء الحل الخاص بك.

ملاحظة

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

الحصول على سلسلة اتصال لوحة الوصل لـIoT

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

للحصول على سلسلة اتصال IoT Hub لنهج registryReadWrite، اتبع الخطوات التالية:

  1. في مدخل Microsoft Azure، حدد Resource groups. حدد مجموعة الموارد حيث يوجد المركز الخاص بك، ثم حدد المركز الخاص بك من قائمة الموارد.

  2. في الجزء الأيسر من مركزك، قم بتحديد سياسات الوصول المشترك.

  3. من قائمة النهج، حدد نهج registryReadWrite.

  4. انسخ سلسلة الاتصال الأساسية واحفظ القيمة.

    لقطة شاشة تعرض الطريقة لاستعادة سلسلة الاتصال

لمزيد من المعلومات حول نهج الوصول المشترك لمركز IoT والأذونات، راجع التحكم في الوصول والأذونات.

جدولة مهام استدعاء أسلوب مباشر وإرسال تحديثات الجهاز المزدوج

في هذا القسم، يمكنك إنشاء تطبيق وحدة تحكم .NET (باستخدام C#) يستخدم المهام لاستدعاء الأسلوب المباشر LockDoor وإرسال تحديثات الخصائص المطلوبة إلى أجهزة متعددة.

  1. حدد من Visual Studioملف>جديد>مشروع. في إنشاء مشروع جديد، اختر تطبيق وحدة التحكم (.NET Framework)، ثم حدد التالي.

  2. في تكوين مشروعك الجديد، قم بتسمية المشروع ScheduleJob ثم حدد إنشاء.

    اسم وتكوين مشروع ScheduleJob

    لقطة شاشة للنافذة المنبثقة

  3. اقبل الإصدار الافتراضي من .NET Framework، ثم حدد إنشاء لإنشاء المشروع.

  4. في مستكشف الحلول، انقر بالزر الأيمن للماوس فوق المشروع ScheduleJob، ثم حدد إدارة حزم NuGet.

  5. في مدير حزم NuGet، حدد استعراض وابحث عن واختر Microsoft.Azure.Devices، ثم حدد تثبيت.

    تقوم هذه الخطوة بتحميل وتثبيت وإضافة مرجع إلى حزمة NuGet عدة تطوير البرامج لخدمة Azure IoT وتبعياتها.

  6. إضافة العبارات التالية using في الجزء العلوي من الملف Program.cs:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  7. أضف العبارة التالية using إذا لم تكن موجودة بالفعل في العبارات الافتراضية.

    using System.Threading;
    using System.Threading.Tasks;
    
  8. إضافة الحقول التالية إلى فئة البرنامج. قم باستبدال العناصر النائبة بسلسلة اتصال مركز IoT التي قمت بنسخها سابقاً في الحصول على سلسلة اتصال مركز IoT واسم جهازك.

    static JobClient jobClient;
    static string connString = "<yourIotHubConnectionString>";
    static string deviceId = "<yourDeviceId>";
    
  9. إضافة الطريقة التالية إلى فئة البرنامج:

    public static async Task MonitorJob(string jobId)
    {
        JobResponse result;
        do
        {
            result = await jobClient.GetJobAsync(jobId);
            Console.WriteLine("Job Status : " + result.Status.ToString());
            Thread.Sleep(2000);
        } while ((result.Status != JobStatus.Completed) && 
          (result.Status != JobStatus.Failed));
    }
    
  10. إضافة الطريقة التالية إلى فئة البرنامج:

    public static async Task StartMethodJob(string jobId)
    {
        CloudToDeviceMethod directMethod = 
          new CloudToDeviceMethod("LockDoor", TimeSpan.FromSeconds(5), 
          TimeSpan.FromSeconds(5));
    
        JobResponse result = await jobClient.ScheduleDeviceMethodAsync(jobId,
            $"DeviceId IN ['{deviceId}']",
            directMethod,
            DateTime.UtcNow,
            (long)TimeSpan.FromMinutes(2).TotalSeconds);
    
        Console.WriteLine("Started Method Job");
    }
    
  11. أضف الأسلوب التالي إلى فئة البرنامج:

    public static async Task StartTwinUpdateJob(string jobId)
    {
        Twin twin = new Twin(deviceId);
        twin.Tags = new TwinCollection();
        twin.Tags["Building"] = "43";
        twin.Tags["Floor"] = "3";
        twin.ETag = "*";
    
        twin.Properties.Desired["LocationUpdate"] = DateTime.UtcNow;
    
        JobResponse createJobResponse = jobClient.ScheduleTwinUpdateAsync(
            jobId,
            $"DeviceId IN ['{deviceId}']", 
            twin, 
            DateTime.UtcNow, 
            (long)TimeSpan.FromMinutes(2).TotalSeconds).Result;
    
        Console.WriteLine("Started Twin Update Job");
    }
    

    ملاحظة

    لمزيد من المعلومات حول الاستعلام، راجع لغة استعلام مركز IoT.

  12. وأخيراً، أضف الأسطر التالية إلى الطريقةالرئيسية:

    Console.WriteLine("Press ENTER to start running jobs.");
    Console.ReadLine();
    
    jobClient = JobClient.CreateFromConnectionString(connString);
    
    string methodJobId = Guid.NewGuid().ToString();
    
    StartMethodJob(methodJobId);
    MonitorJob(methodJobId).Wait();
    Console.WriteLine("Press ENTER to run the next job.");
    Console.ReadLine();
    
    string twinUpdateJobId = Guid.NewGuid().ToString();
    
    StartTwinUpdateJob(twinUpdateJobId);
    MonitorJob(twinUpdateJobId).Wait();
    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
    
  13. حفظ عملك وبناء الحل الخاص بك.

تشغيل التطبيقات

أنت الآن جاهز لتشغيل التطبيقات.

  1. في مستكشف الحلول لـ Visual Studio، انقر بزر الماوس الأيمن فوق الحل الخاص بك، ثم حدد تعيين مشاريع بدء التشغيل.

  2. حدد الخصائص الشائعة>مشروع بدء التشغيل، ثم حدد مشاريع بدء التشغيل متعددة.

  3. تأكد من وجود SimulateDeviceMethods في أعلى القائمة متبوعاً بـ ScheduleJob. قم بتعيين كلا الإجراءين إلى البدء وحدد موافق.

  4. قم بتشغيل المشاريع بالنقر فوق البدء أو انتقل إلى قائمة تتبع الأخطاء وانقر فوق بدء تصحيح الأخطاء.

    يمكنك مشاهدة الإخراج من كل من الجهاز والتطبيقات الخلفية.

    تشغيل التطبيقات لجدولة الوظائف

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

في هذه المقالة، قمت بجدولة المهام لتشغيل أسلوب مباشر وتحديث خصائص توأم الجهاز.

لمتابعة استكشاف IoT Hub وأنماط إدارة الجهاز، قم بتحديث صورة في البرنامج التعليمي Device Update for Azure IoT Hub باستخدام Raspberry Pi 3 B + صورة مرجعية.