جدولة وبث المهام (.NET)
استخدم مركز loT لـ Azure لجدولة المهام التي تحدث ملايين الأجهزة وتعقبها. استخدام الوظائف لإجراء ما يلي:
تحديث الخصائص المطلوبة
تحديث العلامات
استدعاء أساليب مباشرة
تقوم إحدى الوظائف بتغليف أحد هذه الإجراءات وتتعقب التنفيذ على مجموعة من الأجهزة التي يتم تحديدها بواسطة استعلام جهاز مزدوج. على سبيل المثال، يمكن للتطبيق الخلفي استخدام مهمة لاستدعاء أسلوب مباشر على 10,000 جهاز يعيد تشغيل الأجهزة. يمكنك تحديد مجموعة الأجهزة مع استعلام جهاز مزدوج وجدولة المهمة للتشغيل في وقت مستقبلي. تتعقب المهمة مدى التقدم حيث يتلقى كل جهاز أسلوب إعادة التشغيل المباشر وينفذه.
لمعرفة المزيد حول كل من هذه القدرات، اطلع على ما يلي:
توأم الجهاز وخصائصه: بدء استخدام توائم الجهاز وفهم واستخدام توائم الجهاز في IoT Hub
الأساليب المباشرة: دليل مطور IoT Hub - الأساليب المباشرة
إشعار
تتوفر الميزات الموضحة في هذه المقالة فقط في المستوى القياسي لمركز إنترنت الأشياء. لمزيد من المعلومات حول مستويات 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 يستجيب لأسلوب مباشر يسمى بالنهاية الخلفية للحل.
هام
تتضمن هذه المقالة خطوات لتوصيل جهاز باستخدام توقيع وصول مشترك، يسمى أيضا مصادقة المفتاح المتماثل. طريقة المصادقة هذه ملائمة للاختبار والتقييم، ولكن مصادقة جهاز باستخدام شهادات X.509 هي نهج أكثر أمانا. لمعرفة المزيد، راجع أفضل ممارسات > الأمان أمان الاتصال.
في Visual Studio، حدد إنشاء مشروع جديد، ثم اختر قالب المشروع تطبيق وحدة التحكم (.NET Framework). حدد التالي للمتابعة.
في تكوين المشروع الجديد الخاص بك، قم بتسمية المشروع SimulateDeviceMethods، ثم حدد التالي.
اقبل الإصدار الافتراضي من .NET Framework، ثم حدد إنشاء لإنشاء المشروع.
في مستكشف الحلول، انقر بزر الماوس الأيمن فوق مشروع SimulateDeviceMethods، ثم حدد إدارة حزم NuGet.
في مدير حزم NuGet، حدد استعراض وابحث عن واختر Microsoft.Azure.Devices.Client. حدد تثبيت.
تقوم هذه الخطوة بتنزيل وتثبيت وإضافة مرجع إلى حزمة NuGetعدة تطوير البرامج لجهاز Azure IoT وتبعياتها.
إضافة العبارات التالية
using
في الجزء العلوي من الملف Program.cs:using Microsoft.Azure.Devices.Client; using Microsoft.Azure.Devices.Shared; using Newtonsoft.Json; using System.Threading.Tasks; using System.Text;
إضافة الحقول التالية إلى فئة البرنامج. استبدال قيمة العنصر النائب بسلسلة اتصال الجهاز التي لاحظتها في المقطع السابق:
static string DeviceConnectionString = "<yourDeviceConnectionString>"; static DeviceClient Client = null;
إضافة التعليمات البرمجية التالية لتطبيق الأسلوب المباشر على الجهاز:
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)); }
إضافة الأسلوب التالي لتنفيذ وحدة الاستماع للجهاز المزدوج على الجهاز:
private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, object userContext) { Console.WriteLine("Desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); }
وأخيراً، إضافة التعليمات البرمجية التالية إلى الأسلوب الرئيسي لفتح الاتصال بمركز 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); }
حفظ عملك وبناء الحل الخاص بك.
إشعار
للحفاظ على بساطة الأمور، لا تنفذ هذه المقالة سياسات إعادة المحاولة. في التعليمات البرمجية للإنتاج، يجب تنفيذ نهج إعادة المحاولة (مثل إعادة محاولة الاتصال)، كما هو مقترح في معالجة الأخطاء العابرة.
احصل على سلسلة اتصال IoT hub
في هذه المقالة، تقوم بإنشاء خدمة خلفية تقوم بجدولة مهمة لاستدعاء أسلوب مباشر على أحد الأجهزة، وتقوم بجدولة مهمة لتحديث الجهاز المزدوج، وتراقب تقدم كل وظيفة. لتنفيذ هذه العمليات، تحتاج خدمتك إلى أذونات قراءة السجل وكتابة السجل. افتراضيًا، يتم إنشاء كافة مراكز IoT باستخدام نهج الوصول المشترك يسمى registryReadWrite التي تمنح هذه الأذونات.
للحصول على سلسلة اتصال IoT Hub لنهج RegistryReadWrite، اتبع الخطوات التالية:
في مدخل Microsoft Azure، حدد Resource groups. حدد مجموعة الموارد حيث يوجد المركز الخاص بك، ثم حدد المركز الخاص بك من قائمة الموارد.
في الجزء الأيسر من مركز IoT، قم بتحديد Shared access policies.
من قائمة النهج، حدد نهج registryReadWrite.
انسخ سلسلة الاتصال الأساسية واحفظ القيمة.
للمزيد من المعلومات حول نهج الوصول المشترك لـIoT Hub والأذونات، راجع التحكم في الوصول والأذونات.
هام
تتضمن هذه المقالة خطوات الاتصال بخدمة باستخدام توقيع وصول مشترك. أسلوب المصادقة هذا مناسب للاختبار والتقييم، ولكن المصادقة على خدمة باستخدام معرف Microsoft Entra أو الهويات المدارة هي نهج أكثر أمانا. لمعرفة المزيد، راجع أفضل ممارسات الأمان أمان السحابة>.
جدولة مهام استدعاء أسلوب مباشر وإرسال تحديثات الجهاز المزدوج
في هذا القسم، يمكنك إنشاء تطبيق وحدة تحكم .NET (باستخدام C#) يستخدم المهام لاستدعاء الأسلوب المباشر LockDoor وإرسال تحديثات الخصائص المطلوبة إلى أجهزة متعددة.
حدد من Visual Studioملف>جديد>مشروع. في إنشاء مشروع جديد، اختر تطبيق وحدة التحكم (.NET Framework)، ثم حدد التالي.
في تكوين مشروعك الجديد، قم بتسمية المشروع ScheduleJob ثم حدد إنشاء.
اقبل الإصدار الافتراضي من .NET Framework، ثم حدد إنشاء لإنشاء المشروع.
في مستكشف الحلول، انقر بالزر الأيمن للماوس فوق المشروع ScheduleJob، ثم حدد إدارة حزم NuGet.
في مدير حزم NuGet، حدد استعراض وابحث عن واختر Microsoft.Azure.Devices، ثم حدد تثبيت.
تقوم هذه الخطوة بتنزيل وتثبيت وإضافة مرجع إلى حزمة NuGet Azure IoT service SDK وتبعياتها.
إضافة العبارات التالية
using
في الجزء العلوي من الملف Program.cs:using Microsoft.Azure.Devices; using Microsoft.Azure.Devices.Shared;
أضف العبارة التالية
using
إذا لم تكن موجودة بالفعل في العبارات الافتراضية.using System.Threading; using System.Threading.Tasks;
إضافة الحقول التالية إلى فئة البرنامج. قم باستبدال العناصر النائبة بسلسلة اتصال مركز IoT التي قمت بنسخها سابقاً في الحصول على سلسلة اتصال مركز IoT واسم جهازك.
static JobClient jobClient; static string connString = "<yourIotHubConnectionString>"; static string deviceId = "<yourDeviceId>";
إضافة الطريقة التالية إلى فئة البرنامج:
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)); }
إضافة الطريقة التالية إلى فئة البرنامج:
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"); }
أضف الأسلوب التالي إلى فئة البرنامج:
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.
وأخيراً، أضف الأسطر التالية إلى الطريقةالرئيسية:
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();
حفظ عملك وبناء الحل الخاص بك.
قم بتشغيل التطبيقات
أنت الآن جاهز لتشغيل التطبيقات.
في مستكشف الحلول لـ Visual Studio، انقر بزر الماوس الأيمن فوق الحل الخاص بك، ثم حدد تعيين مشاريع بدء التشغيل.
حدد الخصائص الشائعة>مشروع بدء التشغيل، ثم حدد مشاريع بدء التشغيل متعددة.
تأكد من وجود
SimulateDeviceMethods
في أعلى القائمة متبوعاً بـScheduleJob
. قم بتعيين كلا الإجراءين إلى البدء وحدد موافق.قم بتشغيل المشاريع بالنقر فوق البدء أو انتقل إلى قائمة تتبع الأخطاء وانقر فوق بدء تصحيح الأخطاء.
يمكنك مشاهدة الإخراج من كل من الجهاز والتطبيقات الخلفية.
الخطوات التالية
في هذه المقالة، قمت بجدولة المهام لتشغيل أسلوب مباشر وتحديث خصائص توأم الجهاز.
لمتابعة استكشاف IoT Hub وأنماط إدارة الجهاز، قم بتحديث صورة في البرنامج التعليمي Device Update for Azure IoT Hub باستخدام Raspberry Pi 3 B + صورة مرجعية.