تطوير وحدات IoT Edge الخاصة بك
ينطبق على:
IoT Edge 1.1 إصدارات أخرى:IoT Edge 1.2
ينطبق على:
IoT Edge 1.2 إصدارات أخرى:IoT Edge 1.1
يمكن لوحدات Azure IoT Edge الاتصال بخدمات Azure الأخرى والمساهمة في خط بيانات السحابة الأكبر. توضح هذه المقالة كيفية تطوير وحدات نمطية للاتصال بوقت تشغيل IoT Edge ومركز إنترنت الأشياء، وبالتالي بقية سحابة Azure.
بيئة وقت التشغيل IoT الحافة
يوفر وقت تشغيل IoT Edge البنية التحتية لدمج وظائف وحدات IoT Edge المتعددة ونشرها على أجهزة IoT Edge. يمكن حزم أي برنامج كوحدة IoT Edge. للاستفادة الكاملة من وظائف الاتصال والإدارة في IoT Edge، يمكن لبرنامج يعمل في وحدة نمطية استخدام Azure IoT Device SDK للاتصال بمركز IoT Edge المحلي.
يمكن للوحدات النمطية أيضا استخدام أي عميل MQTT للاتصال بوسيط MQTT المحلي لمركز IoT Edge.
تغليف برنامجك كوحدة IoT Edge
لنشر البرنامج الخاص بك على جهاز IoT Edge ، يجب أولا وضعه في حاويات وتشغيله باستخدام محرك متوافق مع Docker. تستخدم IoT Edge Moby ، المشروع مفتوح المصدر وراء Docker ، كمحرك متوافق مع Docker. يمكن تمرير نفس المعلمات التي اعتدت عليها مع Docker إلى وحدات IoT Edge الخاصة بك. لمزيد من المعلومات، راجع كيفية تكوين خيارات إنشاء حاوية لوحدات IoT Edge النمطية.
استخدام مركز IoT Edge
يوفر مركز IoT Edge وظيفتين رئيسيتين: الوكيل إلى IoT Hub ، والاتصالات المحلية.
الاتصال بلوحة وصل IoT Edge من وحدة نمطية
يتضمن الاتصال بمركز IoT Edge المحلي من وحدة نمطية نفس خطوات الاتصال كما هو الحال بالنسبة لأي عميل. لمزيد من المعلومات، راجع الاتصال بمركز IoT Edge.
لاستخدام توجيه IoT Edge عبر AMQP أو MQTT، يمكنك استخدام ModuleClient من SDK Azure IoT. إنشاء مثيل ModuleClient لتوصيل الوحدة النمطية بلوحة وصل IoT Edge قيد التشغيل على الجهاز، على غرار كيفية توصيل مثيلات DeviceClient لأجهزة IoT بلوحة وصل IoT. لمزيد من المعلومات حول فئة ModuleClient وطرق الاتصال الخاصة بها، راجع مرجع واجهة برمجة التطبيقات للغة SDK المفضلة لديك: C # أو C أو Python أو Java أو Node.js.
لاستخدام وسيط IoT Edge MQTT ، تحتاج إلى إحضار عميل MQTT الخاص بك وبدء الاتصال بنفسك بالمعلومات التي تستردها من واجهة برمجة تطبيقات عبء العمل الخفي IoT Edge.
لمزيد من المعلومات حول الاختيار بين التوجيه أو النشر/الاشتراك مع وسيط MQTT، راجع الاتصال المحلي.
MQTT وسيط البدائيات
إرسال رسالة حول موضوع محدد من قبل المستخدم
باستخدام وسيط IoT Edge MQTT ، يمكنك نشر رسائل حول أي مواضيع يحددها المستخدم. للقيام بذلك ، قم بتفويض الوحدة النمطية الخاصة بك للنشر حول مواضيع محددة ثم احصل على رمز مميز من واجهة برمجة تطبيقات عبء العمل لاستخدامه ككلمة مرور عند الاتصال بوسيط MQTT ، وأخيرا نشر رسائل حول الموضوعات المعتمدة مع عميل MQTT الذي تختاره.
تلقي رسائل حول موضوع محدد من قبل المستخدم
مع وسيط IoT Edge MQTT ، يكون تلقي الرسائل مشابها. تأكد أولا من أن الوحدة النمطية الخاصة بك مخولة بالاشتراك في مواضيع محددة ، ثم احصل على رمز مميز من واجهة برمجة تطبيقات عبء العمل لاستخدامها ككلمة مرور عند الاتصال بوسيط MQTT ، وأخيرا اشترك في الرسائل حول الموضوعات المصرح بها مع عميل MQTT الذي تختاره.
الإعدادات الأولية لمركز IoT
يرى IoT Hub مثيل وحدة نمطية على نحو مماثل لجهاز، بمعنى ما يلي:
- يمكنه إرسال رسائل من الجهاز إلى السحابة ؛
- يمكن أن تتلقى أساليب مباشرة تستهدف هويتها على وجه التحديد.
- يحتوي على توأم وحدة متميز ومعزول عن توأم الجهاز وتوائم الوحدة الأخرى لهذا الجهاز ؛
في الوقت الحالي، لا يمكن للوحدات النمطية تلقي رسائل من السحابة إلى الجهاز أو استخدام ميزة تحميل الملفات.
عند كتابة وحدة نمطية، يمكنك الاتصال بلوحة وصل IoT Edge واستخدام الأوليات الخاصة بموزع IoT كما تفعل عند استخدام IoT Hub مع تطبيق جهاز. الفرق الوحيد بين الوحدات النمطية IoT Edge وتطبيقات أجهزة IoT هو أنه يجب عليك الرجوع إلى هوية الوحدة النمطية بدلا من هوية الجهاز.
رسائل من جهاز إلى سحابة
يمكن لوحدة IoT Edge إرسال رسائل إلى السحابة عبر مركز IoT Edge الذي يعمل كوسيط محلي وينشر الرسائل إلى السحابة. لتمكين المعالجة المعقدة للرسائل من جهاز إلى سحابة، يمكن لوحدة IoT Edge أيضا اعتراض ومعالجة الرسائل المرسلة بواسطة وحدات أو أجهزة أخرى إلى مركز IoT Edge المحلي وإرسال رسائل جديدة مع البيانات المعالجة. وهكذا يمكن إنشاء سلاسل من وحدات IoT Edge لبناء خطوط أنابيب المعالجة المحلية.
لإرسال رسائل القياس عن بعد من جهاز إلى مجموعة نظراء باستخدام التوجيه، استخدم ModuleClient SDK Azure IoT. باستخدام Azure IoT SDK، تحتوي كل وحدة نمطية على مفهوم نقاط نهاية إدخالوإخراج الوحدة النمطية، والتي يتم تعيينها لموضوعات MQTT الخاصة. استخدم الطريقة ModuleClient.sendMessageAsync وسيرسل رسائل على نقطة نهاية الإخراج للوحدة النمطية الخاصة بك. ثم قم بتكوين توجيه في edgeHub لإرسال نقطة النهاية الإخراج هذه إلى مركز IoT.
يشبه إرسال رسائل القياس عن بعد من الجهاز إلى السحابة باستخدام وسيط MQTT نشر الرسائل حول الموضوعات التي يحددها المستخدم ، ولكن باستخدام الموضوع الخاص التالي IoT Hub للوحدة النمطية الخاصة بك: devices/<device_name>/modules/<module_name>/messages/events. يجب إعداد التخويلات بشكل مناسب. يجب أيضا تكوين جسر MQTT لإعادة توجيه الرسائل حول هذا الموضوع إلى مجموعة النظراء.
لمعالجة الرسائل باستخدام التوجيه، قم أولا بإعداد توجيه لإرسال الرسائل القادمة من نقطة نهاية أخرى (وحدة نمطية أو جهاز) إلى نقطة نهاية الإدخال للوحدة النمطية، ثم استمع إلى الرسائل على نقطة نهاية الإدخال للوحدة النمطية. في كل مرة تأتي رسالة جديدة مرة أخرى، يتم تشغيل دالة رد الاتصال بواسطة SDK IoT Azure. معالجة رسالتك باستخدام دالة رد الاتصال هذه وإرسال رسائل جديدة اختياريا في قائمة انتظار نقطة نهاية الوحدة النمطية.
تشبه معالجة الرسائل باستخدام وسيط MQTT الاشتراك في الرسائل حول الموضوعات التي يحددها المستخدم ، ولكن باستخدام الموضوعات الخاصة ب IoT Edge في قائمة انتظار إخراج الوحدة النمطية الخاصة بك: devices/<device_name>/modules/<module_name>/messages/events. يجب إعداد التخويلات بشكل مناسب. اختياريا يمكنك إرسال رسائل جديدة حول الموضوعات التي تختارها.
التوائم.
التوائم هي واحدة من البدائيات التي تقدمها مركز IoT. هناك مستندات JSON والتي تخزن معلومات الحالة بما في ذلك بيانات التعريف والتكوينات والشروط. كل وحدة أو جهاز له توأمه الخاص.
للحصول على وحدة نمطية مزدوجة مع Azure IoT SDK، اتصل بالطريقة ModuleClient.getTwin .
للحصول على وحدة التوأم مع أي عميل MQTT، وتشارك المزيد من العمل قليلا منذ الحصول على التوأم ليس نمط MQTT نموذجية. يجب أن تشترك الوحدة أولا في موضوع $iothub/twin/res/#IoT Hub الخاص . إن اسم الموضوع هذا موروث من IoT Hub، وتحتاج كافة الأجهزة/الوحدات النمطية إلى الاشتراك في نفس الموضوع. هذا لا يعني أن الأجهزة تتلقى التوأم من بعضها البعض. يعرف IoT Hub و edgeHub التوأم الذي يجب تسليمه أين، حتى لو استمعت جميع الأجهزة إلى نفس اسم الموضوع. بمجرد إجراء الاشتراك ، تحتاج الوحدة النمطية إلى طلب التوأم عن طريق نشر رسالة إلى الموضوع الخاص التالي IoT Hub مع معرف $iothub/twin/GET/?$rid=1234الطلب . معرف الطلب ID هذا هو معرف إجباري ID (أي GUID)، والذي سيتم إرساله مرة أخرى بواسطة IoT Hub مع البيانات المطلوبة. هذه هي الطريقة التي يمكن للعميل إقران طلباته مع الاستجابات. رمز النتيجة هو رمز حالة شبيه HTTP حيث يتم ترميز الناجحة بـ200.
لتلقي تصحيح مزدوج للوحدة النمطية باستخدام Azure IoT SDK، قم بتنفيذ وظيفة معاودة الاتصال وقم بتسجيلها بالطريقة ModuleClient.moduleTwinCallback من Azure IoT SDK بحيث يتم تشغيل وظيفة معاودة الاتصال في كل مرة يأتي فيها تصحيح مزدوج.
لتلقي تصحيح توأم الوحدة النمطية مع أي عميل MQTT ، تشبه العملية تلقي التوائم الكاملة: يحتاج العميل إلى الاشتراك في موضوع $iothub/twin/PATCH/properties/desired/#IoT Hub الخاص . بعد إجراء الاشتراك، عندما يرسل IoT Hub تغيير المقطع المطلوب من التوأم، يتلقى العميل.
تلقي طرق مباشرة
لتلقي طريقة مباشرة باستخدام Azure IoT SDK، قم بتنفيذ وظيفة معاودة الاتصال وقم بتسجيلها باستخدام ModuleClient.methodCallback الطريقة من Azure IoT SDK بحيث يتم تشغيل وظيفة معاودة الاتصال الخاصة بك في كل مرة تأتي فيها طريقة مباشرة.
لتلقي طريقة مباشرة مع أي عميل MQTT ، تشبه العملية إلى حد كبير تلقي بقع مزدوجة. يحتاج العميل إلى تأكيد أنه تلقى المكالمة ويمكنه إرسال بعض المعلومات في نفس الوقت. موضوع IoT Hub الخاص للاشتراك فيه هو $iothub/methods/POST/#.
دعم اللغة والهندسة المعمارية
يدعم IoT Edge العديد من أنظمة التشغيل ومعماريات الأجهزة ولغات التطوير بحيث يمكنك إنشاء السيناريو الذي يتوافق مع احتياجاتك. استخدم هذا القسم لفهم خياراتك لتطوير وحدات IoT Edge المخصصة. يمكنك معرفة المزيد حول دعم الأدوات ومتطلباتها لكل لغة في إعداد بيئة التطوير والاختبار الخاصة بك ل IoT Edge.
Linux
بالنسبة لجميع اللغات في الجدول التالي، يدعم IoT Edge تطوير حاويات AMD64 وARM32 Linux.
| لغة التطوير | أدوات التطوير |
|---|---|
| C | تعليمة Visual Studio برمجية Visual Studio 2017/2019 |
| C# | تعليمة Visual Studio برمجية Visual Studio 2017/2019 |
| Java | تعليمة Visual Studio برمجية |
| Node.js | تعليمة Visual Studio برمجية |
| Python | تعليمة Visual Studio برمجية |
ملاحظة
للتجميع عبر الأنظمة الأساسية، مثل تجميع وحدة ARM32 IoT Edge على جهاز تطوير AMD64، تحتاج إلى تكوين جهاز التطوير لتجميع التعليمات البرمجية على بنية الجهاز المستهدف التي تتوافق مع وحدة IoT Edge. لمزيد من المعلومات، راجع إنشاء وحدات IoT Edge النمطية وتصحيحها على جهازك البعيد لتكوين جهاز التطوير لتجميع التعليمات البرمجية على بنية الجهاز المستهدفة المطابقة لوحدة IoT Edge.
بالإضافة إلى ذلك ، يكون دعم حاويات ARM64 Linux في المعاينة العامة. لمزيد من المعلومات، راجع تطوير وتصحيح وحدات ARM64 IoT Edge في Visual Studio Code (معاينة).
Windows
بالنسبة لجميع اللغات في الجدول التالي، يدعم IoT Edge تطوير حاويات AMD64 Windows.
| لغة التطوير | أدوات التطوير |
|---|---|
| C | Visual Studio 2017/2019 |
| C# | رمز Visual Studio (لا توجد قدرات تصحيح الأخطاء) Visual Studio 2017/2019 |
IoT Edge 1.1 LTS هي قناة الإصدار الأخيرة التي تدعم حاويات Windows. بدءا من الإصدار 1.2، تكون الحاويات الخاصة بـ Windows غير معتمدة.
للحصول على معلومات حول التطوير باستخدام حاويات Windows، راجع إصدار IoT Edge 1.1 من هذه المقالة.
أمان الوحدة النمطية
يجب عليك تطوير الوحدات الخاصة بك مع وضع الأمان في الاعتبار. لمعرفة المزيد حول تأمين وحداتك، راجع أمان Docker.
للمساعدة في تحسين أمان الوحدة النمطية، يقوم IoT Edge بتعطيل بعض ميزات الحاوية بشكل افتراضي. يمكنك تجاوز الإعدادات الافتراضية لتوفير إمكانات مميزة لوحداتك النمطية إذا لزم الأمر.
السماح بأذونات Docker المرتفعة
في ملف التكوين على جهاز IoT Edge ، هناك معلمة تسمى allow_elevated_docker_permissions. عند تعيينها إلى true، تسمح هذه العلامة للعلامة --privileged بالإضافة إلى أي إمكانات إضافية تحددها في حقل Docker HostConfig في CapAddالحاوية بإنشاء خيارات.
ملاحظة
حاليا، هذه العلامة صحيحة بشكل افتراضي، مما يسمح لعمليات النشر بمنح أذونات مميزة للوحدات النمطية. نوصي بتعيين هذه العلامة إلى false لتحسين أمان الجهاز. في المستقبل، سيتم تعيين هذه العلامة إلى false بشكل افتراضي.
تمكين CAP_CHOWN CAP_SETUID
يتم تعطيل إمكانات Docker CAP_CHOWNCAP_SETUID بشكل افتراضي. يمكن استخدام هذه الإمكانات للكتابة لتأمين الملفات على الجهاز المضيف وإمكانية الوصول إلى الجذر.
إذا كنت بحاجة إلى هذه القدرات، فيمكنك إعادة تمكينها يدويا باستخدام CapADD في خيارات إنشاء الحاوية.
الخطوات التالية
إعداد بيئة التطوير والاختبار الخاصة بك ل IoT Edge
استخدم Visual Studio لتطوير وحدات C # ل IoT Edge
استخدام Visual Studio Code لتطوير وحدات ل IoT Edge
فهم مجموعات تطوير البرامج (SDKs) الخاصة ب Azure IoT Hub واستخدامها