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

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

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

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

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

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

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

إشعار

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

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

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

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

إشعار

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

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

  • Visual Studio.

  • مركز IoT في اشتِراك Azure الخاص بك. إذا لم تكن لديك مركز بعد، فإنه يمكنك اتباع الخطوات الواردة في إنشاء مركز IoT.

  • جهاز مسجل في مركز IoT الخاص بك. إذا لم يكن لديك جهاز في مركز IoT، فاتبع الخطوات الواردة في تسجيل جهاز.

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

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

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

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

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

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

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

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

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

    لقطة شاشة لمدير حزمة 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 hub

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

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

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

  2. في الجزء الأيسر من مركز IoT، قم بتحديد Shared access policies.

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

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

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

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

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

في هذا القسم، يمكنك إنشاء تطبيق وحدة تحكم .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 service SDK وتبعياتها.

  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 + صورة مرجعية.