إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على:
IoT Edge 1.5
هام
IoT Edge 1.5 LTS هو الإصدار المدعوم. IoT Edge 1.4 LTS هو نهاية العمر الافتراضي اعتبارا من 12 نوفمبر 2024. إذا كنت تستخدم إصدارا سابقا، فشاهد تحديث IoT Edge.
يوضح هذا البرنامج التعليمي كيفية تطوير التعليمات البرمجية الخاصة بك ونشرها على جهاز IoT Edge. تمكنك وحدات Azure IoT Edge النمطية من نشر التعليمات البرمجية التي تدير منطق عملك مباشرة على جهاز IoT Edge. في التشغيل السريع لنشر التعليمات البرمجية إلى جهاز Linux ، يمكنك إعداد جهاز IoT Edge ونشر وحدة نمطية من Azure Marketplace.
توضح هذه المقالة خطوات أداتين لتطوير IoT Edge:
- سطر أوامر Azure IoT Edge Dev Tool (CLI)، الذي يفضل للتطوير.
- أدوات Azure IoT Edge لملحق Visual Studio Code ، وهو في وضع الصيانة.
استخدم زر محدد الأداة في بداية هذه المقالة لاختيار الأداة الخاصة بك.
في هذا البرنامج التعليمي، تتعلم كيفية:
- إعداد جهاز التطوير الخاص بك
- استخدام أدوات IoT Edge لإنشاء مشروع جديد
- إنشاء مشروعك كحاوية Docker وتخزينه في سجل حاوية Azure
- نشر التعليمات البرمجية الخاصة بك على جهاز IoT Edge
تقوم وحدة IoT Edge التي تقوم بإنشائها في هذا البرنامج التعليمي بتصفية بيانات درجة الحرارة التي ينشئها جهازك. ولا يرسل الرسائل في المصدر إلا إذا كانت درجة الحرارة أعلى من حد معين. يساعد هذا النوع من التحليل على الحافة على تقليل كمية البيانات المرسلة والمخزنة في السحابة.
المتطلبات الأساسية
آلة التطوير:
- استخدم الكمبيوتر الخاص بك أو جهاز ظاهري.
- تأكد من أن جهاز التطوير يدعم الظاهرية المتداخلة لتشغيل محرك حاوية.
- يمكنك استخدام معظم أنظمة التشغيل التي تشغل محرك حاوية لتطوير وحدات IoT Edge لأجهزة Linux. يستخدم هذا البرنامج التعليمي جهاز كمبيوتر يعمل بنظام Windows ، ولكنه يشير أيضا إلى الاختلافات المعروفة على macOS أو Linux.
- تثبيت التعليمات البرمجية لتطبيق Visual Studio
- قم بتثبيت Azure CLI.
جهاز An Azure IoT Edge:
- تشغيل IoT Edge على جهاز منفصل. يحاكي الحفاظ على جهاز التطوير وجهاز IoT Edge منفصل سيناريو نشر حقيقي ويساعد على الحفاظ على المفاهيم واضحة. استخدم مقالة التشغيل السريع نشر التعليمات البرمجية على جهاز Linux لإنشاء جهاز IoT Edge في Azure أو قالب Azure Resource Manager لنشر جهاز ظاهري يدعم IoT Edge.
موارد السحابة:
- استخدم Azure IoT Hub مجانيا أو قياسيا.
إذا لم يكن لديك حساب Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.
تلميح
للحصول على إرشادات حول التصحيح التفاعلي في Visual Studio Code أو Visual Studio 2022:
- تصحيح أخطاء وحدات Azure IoT Edge النمطية باستخدام Visual Studio Code
- استخدام Visual Studio 2022 لتطوير وتصحيح الوحدات النمطية ل Azure IoT Edge
يغطي هذا البرنامج التعليمي خطوات تطوير Visual Studio Code.
المفاهيم الرئيسية
يستعرض هذا البرنامج التعليمي تطوير وحدة IoT Edge. وحدة IoT Edge هي حاوية مع تعليمات برمجية قابلة للتنفيذ. يمكنك نشر وحدة نمطية واحدة أو أكثر إلى جهاز IoT Edge. تقوم الوحدات بمهام محددة مثل استيعاب البيانات من أدوات الاستشعار، أو تنظيف البيانات وتحليلها، أو إرسال رسائل إلى IoT Hub. لمزيد من المعلومات، راجع فهم الوحدات النمطية في IoT Azure Edge.
عند تطوير وحدات IoT Edge، يجب أن تفهم الفرق بين جهاز التطوير وجهاز IoT Edge المستهدف حيث يتم نشر الوحدة النمطية. يجب أن تتطابق الحاوية التي تقوم بإنشائها للاحتفاظ برمز الوحدة النمطية مع نظام التشغيل (OS) للجهاز المستهدف. على سبيل المثال، السيناريو الأكثر شيوعا هو تطوير وحدة نمطية على كمبيوتر Windows لاستهداف جهاز Linux يعمل ب IoT Edge. في هذه الحالة، نظام تشغيل الحاوية هو Linux. خلال هذا البرنامج التعليمي، نضع في اعتبارنا الفرق بين نظام التشغيل جهاز التطوير ونظام التشغيل الحاوية.
تلميح
إذا كنت تستخدم IoT Edge لنظام التشغيل Linux على Windows، فإن الجهاز المستهدف في السيناريو الخاص بك هو الجهاز الظاهري Linux، وليس مضيف Windows.
يستهدف هذا البرنامج التعليمي الأجهزة التي تعمل على IoT Edge باستخدام حاويات Linux. استخدم نظام التشغيل المفضل لديك طالما أن جهاز التطوير الخاص بك يقوم بتشغيل حاويات Linux. يوصى باستخدام Visual Studio Code للتطوير باستخدام حاويات Linux، لذلك يستخدمه هذا البرنامج التعليمي. يمكنك استخدام Visual Studio أيضًا، على الرغم من وجود اختلافات في الدعم بين الأداتين.
يسرد الجدول التالي سيناريوهات التطوير المدعومة لحاويات Linux في Visual Studio Code وVisual Studio.
| تعليمة Visual Studio برمجية | فيجوال ستوديو 2019/2022 | |
|---|---|---|
| هندسة جهاز Linux | لينكس AMD64 لينكس ARM32v7 لينكس ARM64 |
لينكس AMD64 لينكس ARM32 لينكس ARM64 |
| خدمات Azure | وظائف Azure تحليلات Azure Stream Azure Machine Learning |
|
| اللغات | C C# جاوة Node.js بايثون |
C C# |
| مزيد من المعلومات | Azure IoT Edge لأجل Visual Studio Code |
Azure IoT Edge Tools لأجل Visual Studio 2019 أدوات Azure IoT Edge ل Visual Studio 2022 |
تثبيت محرك حاوية
يتم حزم وحدات IoT Edge كحاويات، لذلك تحتاج إلى نظام إدارة حاويات متوافق مع Docker على جهاز التطوير الخاص بك لإنشائها وإدارتها. يعد Docker Desktop خيارا شائعا للتطوير لأنه يحتوي على دعم قوي للميزات. يتيح لك Docker Desktop على Windows التبديل بين حاويات Linux وحاويات Windows، بحيث يمكنك تطوير وحدات نمطية للأنوع المختلفة من أجهزة IoT Edge.
استخدم وثائق Docker لتثبيت Docker على جهاز التطوير الخاص بك:
قم بتثبيت Docker Desktop لنظام التشغيل Windows. عند تثبيت Docker Desktop لأجل Windows، يتم سؤالك عما إذا كنت تريد استخدام Linux أو حاويات Windows. يمكنك تغيير هذا الإعداد في أي وقت. يستخدم هذا البرنامج التعليمي حاويات Linux لأن الوحدات النمطية تستهدف أجهزة Linux. لمزيد من المعلومات، راجع التبديل بين حاويات Windows وLinux.
اقرأ عن Docker CE للحصول على معلومات التثبيت على العديد من منصات لينكس. بالنسبة لنظام Windows الفرعي لنظام التشغيل Linux (WSL)، قم بتثبيت Docker Desktop لنظام التشغيل Windows.
إعداد الأدوات
قم بتثبيت أداة تطوير Azure IoT Edge المستندة إلى Python لإنشاء حل IoT Edge. لديك خياران:
- استخدم حاوية IoT Edge Dev المفضلة التي تم إنشاؤها مسبقا.
- قم بتثبيت الأداة باستخدام إعداد تطوير iotedgedev.
هام
أدوات Azure IoT Edge لملحق Visual Studio Code في وضع الصيانة. أداة التطوير المفضلة هي سطر الأوامر (CLI) Azure IoT Edge Dev Tool.
استخدم ملحقات IoT للتعليمات البرمجية Visual Studio لتطوير وحدات IoT Edge. توفر هذه الملحقات قوالب المشروع، وتأتمتة إنشاء بيان التوزيع، وتتيح لك مراقبة أجهزة IoT Edge وإدارتها. في هذا القسم، يمكنك تثبيت رمز Visual Studio وملحق IoT، ثم قم بإعداد حساب Azure الخاص بك لإدارة موارد IoT Hub من داخل Visual Studio Code.
- تثبيت ملحق Azure IoT Edge .
- تثبيت ملحق Azure IoT Hub .
- بعد تثبيت الملحقات، افتح لوحة الأوامر عن طريق تحديد View > Command Palette.
- في لوحة الأوامر، ابحث عن Azure IoT Hub وحدده: حدد IoT Hub. اتبع المطالبات لتحديد اشتراك Azure وIoT Hub.
- افتح قسم المستكشف في Visual Studio Code عن طريق تحديد الرمز في شريط النشاط أو عن طريق تحديد مستكشف العرض>.
- في الجزء السفلي من قسم المستكشف، قم بتوسيع القائمة المخفية مركز / أجهزة Azure IoT. ترى الأجهزة وأجهزة IoT Edge المقترنة ب IoT Hub التي حددتها من خلال لوحة الأوامر.
تثبيت أدوات خاصة باللغة
تثبيت أدوات خاصة باللغة التي تقوم بتطويرها:
إنشاء سجل حاويات
في هذا البرنامج التعليمي، يمكنك استخدام ملحقات Azure IoT EdgeوAzure IoT Hub لإنشاء وحدة نمطية وإنشاء صورة حاوية من الملفات. ثم تدفع هذه الصورة إلى سجل يخزن صورك ويديرها. وأخيرًا، يمكنك نشر صورتك من التسجيل الخاص بك لتشغيل على جهاز IoT Edge الخاص بك.
هام
ملحق Azure IoT Edge Visual Studio Code في وضع الصيانة.
يمكنك استخدام أي تسجيل متوافق مع Docker للاحتفاظ بصور الحاوية. خدمتان شائعتان لسجل Docker هما Azure Container Registry وDocker Hub. يستخدم هذا البرنامج التعليمي Azure Container Registry.
إذا لم يكن لديك سجل حاويات بالفعل، فاتبع الخطوات التالية لإنشاء سجل جديد في Azure:
قم بتوفير القيم المطلوبة التالية لإنشاء سجل الحاوية الخاص بك:
الحقل القيمة الاشتراك حدد اشتراكك من القائمة المنسدلة. مجموعة الموارد استخدم نفس مجموعة الموارد لجميع موارد الاختبار التي تقوم بإنشائها أثناء التشغيل السريع والبرامج التعليمية ل IoT Edge؛ على سبيل المثال، IoTEdgeResources. اسم السجل قم بتوفير اسم مميز. الموقع حدد موقعًا قريبًا منك. وحدة حفظ المخزون SKU حدد أساسي. حدد Review + create، ثم Create.
حدد سجل الحاوية الجديد من قسم الموارد في الصفحة الرئيسية لمدخل Azure لفتحه.
في الجزء الأيمن من سجل الحاوية، حدد Access keys من القائمة الموجودة ضمن Settings.
تمكين مستخدم المسؤول باستخدام زر التبديل وعرض اسم المستخدم وكلمة المرور لسجل الحاوية.
انسخ قيم خادم تسجيل الدخول واسم المستخدم وكلمة المرور واحفظها في مكان مناسب. يمكنك استخدام هذه القيم خلال هذا البرنامج التعليمي لتوفير الوصول إلى تسجيل الحاوية.
إنشاء مشروع وحدة
يوفر ملحق Azure IoT Edge قوالب المشروع لجميع لغات وحدة IoT Edge المدعومة في Visual Studio Code. تتضمن هذه القوالب جميع الملفات والرموز التي تحتاجها لنشر وحدة عمل لاختبار IoT Edge، أو تعطيك نقطة بداية لتخصيص القالب بمنطق العمل الخاص بك.
إنشاء قالب مشروع
تعمل أداة IoT Edge Dev Tool على تبسيط تطوير Azure IoT Edge، مع الأوامر التي تحركها متغيرات البيئة. يساعدك على البدء في تطوير IoT Edge باستخدام حاوية تطوير IoT Edge وسقالة حل IoT Edge التي تتضمن وحدة نمطية افتراضية وجميع ملفات التكوين المطلوبة.
قم بإنشاء دليل للحل الخاص بك في المسار الذي تريده. قم بالتغيير إلى الدليل الخاص بك
iotedgesolution.mkdir c:\dev\iotedgesolution cd c:\dev\iotedgesolutionاستخدم الأمر
iotedgedev solution initلإنشاء حل وإعداد Azure IoT Hub بلغة التطوير التي تختارها:
يطالبك الأمر iotedgedev solution init بإكمال عدة خطوات، بما في ذلك:
- مصادقة Azure
- اختيار اشتراك Azure
- اختيار مجموعة موارد أو إنشائها
- اختر أو أنشئ Azure IoT Hub
- اختيار جهاز Azure IoT Edge أو إنشائه
استخدم Visual Studio Code وملحق Azure IoT Edge . ابدأ بإنشاء حل، ثم قم بإنشاء الوحدة الأولى في هذا الحل. يمكن أن يتضمن كل حل وحدات نمطية متعددة.
- حدد View > Command Palette.
- في لوحة الأوامر، أدخل الأمر Azure IoT Edge: New IoT Edge Solution وقم بتشغيله.
- استعرض وصولا إلى المجلد حيث تريد إنشاء الحل الجديد، ثم حدد تحديد مجلد.
- أدخل اسما للحل الخاص بك.
- حدد قالب وحدة نمطية للغة التطوير المفضلة لتكون الوحدة النمطية الأولى في الحل.
- أدخل اسما للوحدة النمطية. اختر اسما فريدا في سجل الحاويات.
- أدخل اسم مستودع صور الوحدة النمطية. يقوم Visual Studio Code بملء اسم الوحدة النمطية تلقائيا باسم localhost:5000/<your module name>. استبدله بمعلومات التسجيل الخاصة بك. استخدم localhost إذا كنت تستخدم سجل Docker محليا للاختبار. إذا كنت تستخدم Azure Container Registry، فاستخدم خادم تسجيل الدخول من إعدادات السجل. يبدو خادم تسجيل الدخول مثل <اسم> السجل.azurecr.io. استبدل فقط الجزء localhost:5000 من السلسلة، بحيث تبدو النتيجة النهائية مثل < اسم >التسجيل.azurecr.io/<اسم الوحدة النمطية> الخاص بك.
تقوم Visual Studio التعليمات البرمجية بأخذ المعلومات التي قدمتها، وتنشئ حل IoT Edge، ثم تقوم بتحميله في نافذة جديدة.
بعد إنشاء الحل، تكون هذه الملفات الرئيسية في الحل:
يتضمن مجلد .vscode ملف التكوين launch.json.
يحتوي مجلد الوحدات النمطية على مجلدات فرعية لكل وحدة نمطية. في كل مجلد فرعي، يتحكم ملف module.json في كيفية إنشاء الوحدات النمطية ونشرها.
يسرد ملف .env متغيرات البيئة الخاصة بك. متغير البيئة لسجل الحاوية هو localhost:5000 بشكل افتراضي.
يسرد ملفا توزيع الوحدة النمطية،deployment.template.jsondeployment.debug.template.json، الوحدات النمطية لنشرها على جهازك. بشكل افتراضي، تتضمن القائمة وحدات نظام IoT Edge النمطية (edgeAgent وedgeHub) ونماذج من الوحدات النمطية مثل:
- filtermodule هي نموذج وحدة نمطية تنفذ دالة تصفية بسيطة.
- تحاكي وحدة SimulatedTemperatureSensor البيانات التي يمكنك استخدامها للاختبار. لمزيد من المعلومات حول كيفية عمل بيانات النشر، راجع التعرف على كيفية استخدام بيانات التوزيع لنشر الوحدات النمطية وإنشاء المسارات. لمزيد من المعلومات حول كيفية عمل وحدة درجة الحرارة المحاكاة، راجع الكود المصدري SimulatedTemperatureSensor.csproj.
إشعار
يمكن أن تعتمد الوحدات النمطية الدقيقة المثبتة على اللغة التي تختارها.
تعيين إصدار وقت تشغيل IoT Edge
أحدث إصدار وحدة نمطية مستقرة لنظام IoT Edge هو 1.5. تعيين وحدات النظام النمطية إلى الإصدار 1.5.
في Visual Studio Code، افتح ملف بيان توزيع deployment.template.json . بيان النشر هو مستند JSON يصف الوحدات النمطية التي سيتم تكوينها على جهاز IoT Edge المستهدف.
تغيير إصدار وقت التشغيل لصور
edgeAgentوحدة وقت تشغيل النظام وedgeHub. على سبيل المثال، إذا كنت تريد استخدام الإصدار 1.5 من وقت تشغيل IoT Edge، فقم بتغيير الأسطر التالية في ملف بيان النشر:"systemModules": { "edgeAgent": { "image": "mcr.microsoft.com/azureiotedge-agent:1.5", "edgeHub": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
توفير بيانات اعتماد التسجيل إلى عامل IoT Edge
ملف البيئة يخزن بيانات الاعتماد الخاصة بسجل الحاوية ويشاركها مع وقت التشغيل IoT Edge. يحتاج وقت التشغيل إلى بيانات الاعتماد هذه لسحب صور الحاوية إلى جهاز IoT Edge.
يحاول ملحق IoT Edge سحب بيانات اعتماد تسجيل الحاوية من Azure وملأها في ملف البيئة.
إشعار
يتم إنشاء ملف البيئة فقط إذا قمت بتوفير مستودع صور للوحدة النمطية. إذا قبلت الإعدادات الافتراضية localhost لاختبار وتصحيح محليا، ثم لا تحتاج إلى تعريف متغيرات البيئة.
تحقق مما إذا كانت بيانات الاعتماد موجودة. إذا لم يكن كذلك، فأضفها الآن:
إذا كان Azure Container Registry هو السجل الخاص بك، فقم بتعيين اسم مستخدم وكلمة مرور Azure Container Registry. احصل على هذه القيم من قائمة مفاتيح الوصول إلى الإعدادات>الخاصة بسجل الحاوية في مدخل Microsoft Azure.
افتح ملف .env في حل الوحدة النمطية الخاصة بك.
أضف قيمUsername وPassword من سجل حاوية Azure الخاص بك. على سبيل المثال:
CONTAINER_REGISTRY_SERVER="myacr.azurecr.io" CONTAINER_REGISTRY_USERNAME="myacr" CONTAINER_REGISTRY_PASSWORD="<registry_password>"احفظ التغييرات التي أجريتها على ملف .env .
إشعار
يستخدم هذا البرنامج التعليمي بيانات اعتماد المسؤول ل Azure Container Registry المريحة لسيناريوهات التطوير والاختبار. عندما تكون جاهزا لسيناريوهات الإنتاج، نوصي بخيار مصادقة أقل امتيازا مثل كيانات الخدمة أو الرموز المميزة على نطاق المستودع. لمزيد من المعلومات، راجع إدارة الوصول إلى سجل الحاوية.
البنية المستهدفة
حدد البنية التي تستهدفها مع كل حل، لأن ذلك يؤثر على كيفية إنشاء الحاوية وتشغيلها. الافتراضي هو Linux AMD64. لهذا البرنامج التعليمي، استخدم جهاز Ubuntu الظاهري كجهاز IoT Edge واحتفظ ب amd64 الافتراضي.
إذا كنت بحاجة إلى تغيير البنية الهدف للحل الخاص بك، فاتبع هذه الخطوات.
- افتح لوحة الأوامر وابحث عن Azure IoT Edge: قم بتعيين النظام الأساسي المستهدف الافتراضي ل Edge Solution، أو حدد رمز الاختصار في الشريط الجانبي أسفل النافذة.
- في لوحة الأوامر، حدد بنية الهدف من قائمة الخيارات.
يتم تعيين البنية الهدف عند إنشاء صورة الحاوية في خطوة لاحقة.
تحديث الوحدة النمطية باستخدام التعليمات البرمجية المخصصة
يتضمن كل قالب نموذج التعليمات البرمجية التي تأخذ بيانات مستشعر محاكاة من الوحدة النمطية SimulatedTemperatureSensor وتوجهها إلى IoT Hub. تتلقى الوحدة النمطية النموذجية الرسائل وتمريرها. تظهر وظيفة البنية الأساسية لبرنامج ربط العمليات التجارية مفهوما مهما في IoT Edge: كيفية تواصل الوحدات مع بعضها البعض.
يمكن أن يكون لكل وحدة نمطية قوائم انتظار إدخالوإخراج متعددة معلنة في التعليمات البرمجية الخاصة بها. يقوم مركز IoT Edge الذي يعمل على الجهاز بتوجيه الرسائل من إخراج وحدة نمطية واحدة إلى إدخال وحدة نمطية واحدة أو أكثر. تختلف التعليمات البرمجية المحددة للإعلان عن المدخلات والمخرجات بين اللغات، ولكن المفهوم هو نفسه لجميع الوحدات النمطية. لمزيد من المعلومات حول التوجيه بين الوحدات النمطية، راجع إعلان التوجيهات.
يستخدم نموذج التعليمات البرمجية C# الذي يأتي مع قالب المشروع فئة ModuleClient من IoT Hub SDK ل .NET.
في مستكشف Visual Studio Code، افتح وحدات > التصفية ModuleBackgroundService.cs>.
قبل مساحة الاسم
filtermodule، أضف ثلاثusingعبارات للأنواع التي يتم استخدامها لاحقا:using System.Collections.Generic; // For KeyValuePair<> using Microsoft.Azure.Devices.Shared; // For TwinCollection using Newtonsoft.Json; // For JsonConvertأضف المتغير
temperatureThresholdإلىModuleBackgroundServiceالفصل. يعين هذا المتغير القيمة التي يجب أن تتجاوزها درجة الحرارة المقاسة للبيانات التي سيتم إرسالها إلى مركز IoT.static int temperatureThreshold { get; set; } = 25;أضف الفئة
MessageBody،MachineووالفئاتAmbient. تعمل هذه الفئات على تعريف المخطط المتوقع للنص الأساسي الرسائل الواردة.class MessageBody { public Machine machine {get;set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} }ابحث عن الدالة
ExecuteAsync. تقوم هذه الوظيفة بإنشاء وتكوينModuleClientعنصر يسمح للوحدة النمطية بالاتصال بوقت تشغيل Azure IoT Edge المحلي لإرسال الرسائل واستلامها. بعد إنشاء ،ModuleClientيقرأ الرمز القيمةtemperatureThresholdمن الخصائص المطلوبة للوحدة النمطية المزدوجة. يسجل الرمز معاودة اتصال لتلقي رسائل من مركز IoT Edge عبر نقطة نهاية تسمىinput1.استبدل استدعاء الأسلوب
ProcessMessageAsyncبأسلوب جديد يقوم بتحديث اسم نقطة النهاية والأسلوب الذي يتم استدعاؤه عند وصول الإدخال. أيضا ، أضفSetDesiredPropertyUpdateCallbackAsyncطريقة لتحديثات الخصائص المطلوبة. لإجراء هذا التغيير، استبدل السطر الأخير من الطريقةExecuteAsyncبالتعليمات البرمجية التالية:// Register a callback for messages that are received by the module. // await _moduleClient.SetInputMessageHandlerAsync("input1", PipeMessage, cancellationToken); // Read the TemperatureThreshold value from the module twin's desired properties var moduleTwin = await _moduleClient.GetTwinAsync(); await OnDesiredPropertiesUpdate(moduleTwin.Properties.Desired, _moduleClient); // Attach a callback for updates to the module twin's desired properties. await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null); // Register a callback for messages that are received by the module. Messages received on the inputFromSensor endpoint are sent to the FilterMessages method. await _moduleClient.SetInputMessageHandlerAsync("inputFromSensor", FilterMessages, _moduleClient);أضف الطريقة
OnDesiredPropertiesUpdateإلىModuleBackgroundServiceالفصل. تتلقى هذه الطريقة تحديثات على الخصائص المطلوبة من الوحدة النمطية المزدوجة، وتقوم بتحديث المتغيرtemperatureThresholdلمطابقته. تحتوي جميع الوحدات النمطية على وحدة مزدوجة خاصة بها، ما يتيح لك تكوين التعليمات البرمجية التي تعمل داخل وحدة نمطية مباشرة من السحابة.static Task OnDesiredPropertiesUpdate(TwinCollection desiredProperties, object userContext) { try { Console.WriteLine("Desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); if (desiredProperties["TemperatureThreshold"]!=null) temperatureThreshold = desiredProperties["TemperatureThreshold"]; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", exception); } } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", ex.Message); } return Task.CompletedTask; }أضف الطريقة
FilterMessages. يتم استدعاء هذه الطريقة عندما تتلقى الوحدة النمطية رسالة من مركز IoT Edge. فهو يعمل على تصفية الرسائل التي تبلغ عن درجات حرارة أقل من الحد الأدنى لدرجة الحرارة التي تم ضبطها عبر الوحدة المزدوجة. كما أنه يضيف الخاصيةMessageTypeإلى الرسالة مع تعيين القيمة إلىAlert:async Task<MessageResponse> FilterMessages(Message message, object userContext) { var counterValue = Interlocked.Increment(ref _counter); try { ModuleClient moduleClient = (ModuleClient)userContext; var messageBytes = message.GetBytes(); var messageString = Encoding.UTF8.GetString(messageBytes); Console.WriteLine($"Received message {counterValue}: [{messageString}]"); // Get the message body. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { Console.WriteLine($"Machine temperature {messageBody.machine.temperature} " + $"exceeds threshold {temperatureThreshold}"); using (var filteredMessage = new Message(messageBytes)) { foreach (KeyValuePair<string, string> prop in message.Properties) { filteredMessage.Properties.Add(prop.Key, prop.Value); } filteredMessage.Properties.Add("MessageType", "Alert"); await moduleClient.SendEventAsync("output1", filteredMessage); } } // Indicate that the message treatment is completed. return MessageResponse.Completed; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", exception); } // Indicate that the message treatment is not completed. var moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); // Indicate that the message treatment is not completed. ModuleClient moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } }احفظ ملف ModuleBackgroundService.cs.
في مستكشف Visual Studio Code، افتح ملف deployment.template.json في مساحة عمل حل IoT Edge.
نظرا لأننا قمنا بتغيير اسم نقطة النهاية التي تستمع إليها الوحدة النمطية، نحتاج أيضا إلى تحديث المسارات في بيان النشر بحيث يرسل edgeHub رسائل إلى نقطة النهاية الجديدة.
ابحث عن القسم
routesفي الوحدة النمطية $edgeHub المزدوجة. قم بتحديث المسارsensorTofiltermoduleلاستبدالهinput1بinputFromSensor:"sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"أضف الوحدة النمطية filtermodule المزدوجة إلى بيان التوزيع. أدخل محتوى JSON التالي في أسفل القسم
modulesContent، بعد الوحدة النمطية $edgeHub المزدوجة:"filtermodule": { "properties.desired":{ "TemperatureThreshold":25 } }احفظ ملف deployment.template.js.
بناء ودفع الحل الخاص بك
لقد قمت بتحديث التعليمات البرمجية للوحدة النمطية وقالب التوزيع للمساعدة في فهم بعض مفاهيم التوزيع الرئيسية. الآن، أنت مستعد لإنشاء صورة حاوية الوحدة النمطية الخاصة بك ودفعها إلى سجل الحاوية الخاص بك.
في Visual Studio Code، افتح ملف بيان توزيع deployment.template.json .
يصف بيان التوزيع الوحدات النمطية التي سيتم تكوينها على جهاز IoT Edge المستهدف. قبل النشر، يجب عليك تحديث بيانات اعتماد Azure Container Registry وصور الوحدة النمطية بالقيم المناسبة createOptions . لمزيد من المعلومات حول createOptions القيم، راجع كيفية تكوين خيارات إنشاء الحاوية لوحدات IoT Edge النمطية.
إذا كنت تستخدم Azure Container Registry لتخزين صورة الوحدة النمطية، فأضف بيانات الاعتماد الخاصة بك إلى القسم modulesContent > edgeAgent > settings > registryCredentials في deployment.template.json. استبدل myacr باسم التسجيل الخاص بك وأدخل كلمة المرور وعنوان خادم تسجيل الدخول. على سبيل المثال:
"registryCredentials": {
"myacr": {
"username": "myacr",
"password": "<your_acr_password>",
"address": "myacr.azurecr.io"
}
}
أضف المحتوى المتسلسل التالي أو استبدل إلى createOptions قيمة كل نظام (edgeHub و*edgeAgent) والوحدة النمطية المخصصة (filtermoduleوtempSensor) المدرجة. قم بتغيير القيم إذا لزم الأمر:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
على سبيل المثال، يجب أن يكون التكوين filtermodule مشابها لما يلي:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
إنشاء صورة Docker للوحدة النمطية
افتح المحطة الطرفية المتكاملة ل Visual Studio Code عن طريق تحديد المحطة > الطرفية الجديدة.
dotnet publish استخدم الأمر لإنشاء صورة الحاوية لبنية Linux وamd64. قم بتغيير الدليل إلى دليل filtermodule في مشروعك وقم بتشغيل dotnet publish الأمر.
dotnet publish --os linux --arch x64 /t:PublishContainer
حاليا، يستهدف قالب أداة iotedgedev .NET 7.0. إذا كنت ترغب في استهداف إصدار مختلف من .NET ، فيمكنك تحرير ملف filtermodule.csproj وتغيير TargetFramework قيم و.PackageReference على سبيل المثال لاستهداف .NET 8.0، يجب أن يبدو ملف filtermodule.csproj كما يلي:
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.42.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
</Project>
ضع علامة على صورة docker بمعلومات سجل الحاوية والإصدار والهندسة. استبدل myacr باسم السجل الخاص بك:
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.1-amd64
صورة Docker لوحدة الدفع
قم بتوفير بيانات اعتماد سجل الحاوية إلى Docker بحيث يمكنه دفع صورة الحاوية إلى التخزين في السجل.
سجل الدخول إلى Docker باستخدام بيانات اعتماد Azure Container Registry (ACR):
docker login -u <ACR username> -p <ACR password> <ACR login server>قد تتلقى تحذير أمان يوصي باستخدام
--password-stdin. في حين أن هذه أفضل ممارسة موصى بها لسيناريوهات الإنتاج، فإنها خارج نطاق هذا البرنامج التعليمي. لمزيد من المعلومات، راجع مرجع تسجيل دخول docker.سجّل الدخول إلى Azure Container Registry. يجب تثبيت Azure CLI لاستخدام الأمر
az. يطلب هذا الأمر اسم المستخدم وكلمة المرور الموجودين في سجل الحاوية في مفاتيح الوصول إلى الإعدادات>:az acr login -n <ACR registry name>تلميح
إذا قمت بتسجيل الخروج في أي وقت في هذا البرنامج التعليمي، فكرر خطوات تسجيل الدخول إلى Docker وAzure Container Registry للمتابعة.
ادفع صورة الوحدة النمطية إلى السجل المحلي أو سجل الحاوية:
docker push <ImageName>على سبيل المثال:
# Push the Docker image to the local registry docker push localhost:5000/filtermodule:0.0.1-amd64 # Or push the Docker image to an Azure Container Registry. Replace myacr with your Azure Container Registry name. az acr login --name myacr docker push myacr.azurecr.io/filtermodule:0.0.1-amd64
تحديث قالب التوزيع
تحديث قالب التوزيع deployment.template.json مع موقع صورة سجل الحاوية. على سبيل المثال، إذا كنت تستخدم myacr.azurecr.io Azure Container Registry وكانت صورتك هي filtermodule:0.0.1-amd64، فقم بتحديث التكوين filtermodule إلى:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
}
في مستكشف VS Code، انقر بزر الماوس الأيمن فوق ملف publish.template.json وحدد إنشاء ودفع حل IoT Edge.
يبدأ أمر الإنشاء والدفع ثلاث عمليات. أولاً، يقوم بإنشاء مجلد جديد في الحل يسمى config والذي يحتوي على بيان النشر الكامل، والذي تم إنشاؤه بناءً على المعلومات الموجودة في قالب النشر وملفات الحل الأخرى. ثانيًا، يقوم بتشغيل docker build لإنشاء صورة الحاوية بناءً على dockerfile المناسب للبنية المستهدفة. بعد ذلك، يتم تشغيل docker push لدفع مستودع الصور إلى سجل الحاوية الخاص بك.
قد تستغرق هذه العملية عدة دقائق في المرة الأولى، ولكنها تكون أسرع في المرة التالية التي تقوم فيها بتشغيل الأوامر.
اختياري: تحديث الوحدة النمطية والصورة
إذا أجريت تغييرات على التعليمات البرمجية للوحدة النمطية، فيجب عليك إعادة إنشاء صورة الوحدة النمطية ودفعها إلى سجل الحاوية الخاص بك. استخدم الخطوات الواردة في هذا القسم لتحديث صورة البناء والحاوية. يمكنك تخطي هذا القسم إذا لم تقم بإجراء أي تغييرات على التعليمات البرمجية للوحدة النمطية.
افتح الملف deployment.amd64.json في مجلد التكوين الذي تم إنشاؤه حديثًا. يعكس اسم الملف البنية الهدف، لذلك يكون مختلفا إذا اخترت بنية مختلفة.
لاحظ أن المعلمتين اللتين تحتويان على عناصر نائبة تحتويان الآن على قيمهما المناسبة. يحتوي القسم registryCredentials على اسم مستخدم التسجيل وكلمة المرور المسحوبين من ملف .env . يحتوي على filtermodule مستودع الصور الكامل مع الاسم والإصدار وعلامة الهندسة المعمارية من ملف module.json .
افتح ملف module.json في مجلد filtermodule.
تغيير رقم الإصدار لصورة الوحدة النمطية. على سبيل المثال، قم بزيادة رقم إصدار التصحيح إلى
"version": "0.0.2"كما لو قمت بإجراء إصلاح صغير في التعليمات البرمجية للوحدة النمطية.تلميح
تعمل إصدارات الوحدة النمطية على تمكين التحكم في الإصدار، وتسمح لك باختبار التغييرات على مجموعة صغيرة من الأجهزة قبل نشر التحديثات على الإنتاج. إذا لم تقم بزيادة إصدار الوحدة النمطية قبل الإنشاء والدفع، أنت تقوم بالكتابة فوق المستودع في سجل الحاوية.
احفظ التغييرات التي أجريتها على ملف module.json .
أنشئ الصورة المحدثة وادفعها باستخدام علامة إصدار 0.0.2 . على سبيل المثال، لإنشاء الصورة ودفعها للسجل المحلي أو سجل حاوية Azure، استخدم الأوامر التالية:
# Build the container image for Linux and amd64 architecture.
dotnet publish --os linux --arch x64
# For local registry:
# Tag the image with version 0.0.2, x64 architecture, and the local registry.
docker tag filtermodule localhost:5000/filtermodule:0.0.2-amd64
# For Azure Container Registry:
# Tag the image with version 0.0.2, x64 architecture, and your container registry information. Replace **myacr** with your own registry name.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.2-amd64
انقر بزر الماوس الأيمن فوق ملف deployment.template.json مرة أخرى، وحدد إنشاء حل IoT Edge ودفعه مرة أخرى.
افتح ملف deployment.amd64.json مرة أخرى. لاحظ أن نظام الإنشاء لا ينشئ ملفا جديدا عند تشغيل أمر الإنشاء والدفع مرة أخرى. بدلا من ذلك، يتم تحديث الملف نفسه ليعكس التغييرات. تشير صورة filtermodule الآن إلى الإصدار 0.0.2 من الحاوية.
للتحقق مما فعله الأمر إنشاء ودفع، انتقل إلى مدخل Azure وانتقل إلى سجل الحاوية. في سجل الحاوية، حدد Repositories ثم filtermodule. تحقق من دفع كلا الإصدارين من الصورة إلى السجل.
استكشاف الأخطاء وإصلاحها
إذا واجهت أخطاء عند إنشاء صورة الوحدة النمطية ودفعها، فغالبًا ما يكون لها علاقة بتكوين Docker على جهاز التطوير الخاص بك. استخدم الفحوصات التالية لمراجعة التكوين الخاص بك:
- هل قمت بتشغيل الأمر
docker loginباستخدام بيانات الاعتماد التي قمت بنسخها من سجل الحاوية؟ تختلف بيانات الاعتماد هذه عن تلك التي تستخدمها لتسجيل الدخول إلى Azure. - هل مستودع الحاويات الخاص بك صحيح؟ هل له اسم تسجيل حاوية صحيح واسم وحدة صحيح؟ افتح ملف module.json في مجلد filtermodule للتحقق. يجب أن تكون قيمة المستودع مشابهة لاسم<> التسجيل.azurecr.io/filtermodule.
- إذا استخدمت اسما مختلفا عن filtermodule للوحدة النمطية الخاصة بك، هل هذا الاسم متناسق في جميع أنحاء الحل؟
- هل يعمل جهازك بنفس نوع الحاويات التي تقوم ببنائها؟ هذا البرنامج التعليمي هو لأجهزة لينكس IoT الحافة، لذلك Visual Studio Code يجب أن يظهر فيه amd64 أو arm32v7 في الشريط الجانبي، وينبغي أن يقوم Docker Desktop بتشغيل حاويات Linux.
نشر الوحدات النمطية على الجهاز
لقد تحققت من وجود صور حاوية تم إنشاؤها مخزنة في سجل الحاوية، لذلك حان الوقت لنشرها على جهاز. تأكد من أن جهاز IoT Edge الخاص بك يعمل.
استخدم الأمر IoT Edge Azure CLI set-modules لنشر الوحدات النمطية إلى Azure IoT Hub. على سبيل المثال، لنشر الوحدات النمطية المحددة في ملف deployment.template.json إلى IoT Hub my-iot-hub لجهاز IoT Edge my-device، استخدم الأمر التالي. استبدل قيم سلسلة اتصال Hub-nameوdevice-idوتسجيل الدخول بقيم سلسلة اتصال IoT Hub الخاصة بك.
az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
تلميح
ابحث عن سلسلة اتصال IoT Hub، بما في ذلك مفتاح الوصول المشترك، في مدخل Microsoft Azure. انتقل إلى IoT Hub الخاص بك، وحدد إعدادات > الأمان سياسات > الوصول المشترك iothubowner.
في مستكشف Visual Studio Code، ضمن قسم Azure IoT Hub، قم بتوسيع Devices لمشاهدة قائمة أجهزة IoT الخاصة بك.
انقر بزر الماوس الأيمن فوق جهاز IoT Edge الذي تريد النشر إليه، ثم حدد إنشاء نشر لجهاز واحد.
في مستكشف الملفات، انتقل إلى مجلد التكوين ثم حدد الملف deployment.amd64.json.
لا تستخدم ملف deployment.template.json، الذي لا يحتوي على بيانات اعتماد سجل الحاوية أو قيم صورة الوحدة النمطية فيه. إذا كنت تستهدف جهاز Linux ARM32، يتم deployment.arm32v7.json اسم بيان التوزيع.
ضمن جهازك، قم بتوسيع Modules لمشاهدة قائمة بالوحدات النمطية التي تم نشرها وتشغيلها. حدد زر التحديث. يجب أن تشاهد وحدات tempSensor وتصفية الوحدات النمطية الجديدة التي تعمل على جهازك.
قد يستغرق بدء تشغيل الوحدات بضع دقائق. يتلقى وقت تشغيل IoT Edge بيان النشر الجديد الخاص به، ويسحب صور الوحدة النمطية من وقت تشغيل الحاوية، ثم يبدأ كل وحدة نمطية جديدة.
عرض الرسائل من الجهاز
يحصل نموذج التعليمات البرمجية للوحدة النمطية على رسائل من خلال قائمة انتظار الإدخال الخاصة به ويرسلها من خلال قائمة انتظار الإخراج الخاصة به. يقوم بيان التوزيع بإعداد المسارات التي ترسل رسائل إلى filtermodule من tempSensor، ثم إعادة توجيه الرسائل من filtermodule إلى IoT Hub. تتيح لك ملحقات Azure IoT Edge وAzure IoT Hub رؤية الرسائل عند وصولها إلى IoT Hub من جهازك.
في مستكشف Visual Studio Code، حدد جهاز IoT Edge الذي تريد مراقبته، ثم حدد بدء مراقبة نقطة نهاية الحدث المضمنة.
شاهد نافذة الإخراج في Visual Studio Code لمشاهدة وصول الرسائل إلى IoT Hub.
عرض التغييرات على الجهاز
لمعرفة ما يحدث على جهازك، استخدم الأوامر الموجودة في هذا القسم لفحص وقت تشغيل IoT Edge والوحدات النمطية التي تعمل على جهازك.
هذه الأوامر مخصصة لجهاز IoT Edge الخاص بك، وليس لجهاز التطوير الخاص بك. إذا كنت تستخدم جهازًا افتراضيًا لجهاز IoT Edge، فاتصل به الآن. في Azure، انتقل إلى صفحة نظرة عامة على الجهاز الظاهري وحدد الاتصال للوصول إلى اتصال shell الآمن.
عرض جميع الوحدات النمطية المنشورة على جهازك، والتحقق من حالتها:
iotedge listترى أربع وحدات نمطية: وحدتي وقت تشغيل IoT Edge، tempSensor، و filtermodule. يجب إدراج الأربعة جميعا على أنها قيد التشغيل.
فحص السجلات لوحدة نمطية معينة:
iotedge logs <module name>أسماء الوحدات النمطية حساسة لحالة الأحرف.
تعرض سجلات tempSensorوfiltemodule الرسائل التي يعالجونها. تبدأ الوحدة النمطية edgeAgent الوحدات النمطية الأخرى، بحيث تحتوي سجلاتها على معلومات حول بيان التوزيع. إذا لم تكن الوحدة النمطية مدرجة أو لا تعمل، فتحقق من سجلات edgeAgent بحثا عن الأخطاء. تدير الوحدة النمطية edgeHub الاتصال بين الوحدات النمطية وIoT Hub. إذا كانت الوحدات النمطية قيد التشغيل ولكن الرسائل لا تصل إلى IoT Hub الخاص بك، فتحقق من سجلات edgeHub بحثا عن الأخطاء.
تنظيف الموارد
إذا كنت تريد المتابعة إلى المقالة الموصى بها التالية، فاحتفظ بالموارد والتكوينات التي أنشأتها ثم أعد استخدامها. يمكنك أيضا الاستمرار في استخدام نفس جهاز IoT Edge كجهاز اختبار. بخلاف ذلك، لتجنب الرسوم، احذف التكوين المحلي وموارد Azure التي استخدمتها في هذه المقالة.
قم بحذف موارد Azure.
حذف موارد Azure ومجموعات الموارد لا رجعة فيه. يُرجى التأكد من عدم حذف مجموعة الموارد أو الموارد غير الصحيحة عن طريق الخطأ. إذا قمت بإنشاء IoT Hub داخل مجموعة موارد موجودة تحتوي على موارد تريد الاحتفاظ بها، فاحذف مورد IoT Hub نفسه فقط، وليس مجموعة الموارد.
لحذف الموارد:
- سجل الدخول إلى مدخل Azure، وحدد "Resource groups".
- حدد اسم مجموعة الموارد التي تحتوي على موارد اختبار IoT Edge.
- راجع قائمة الموارد التي تحتويها مجموعة الموارد الخاصة بك. إذا كنت تريد حذفها جميعاً، يمكنك تحديد Delete resource group. إذا كنت تريد حذف بعضها فقط، يمكنك تحديد كل مورد لحذفها بشكل فردي.
الخطوات التالية
في هذا البرنامج التعليمي، يمكنك إعداد Visual Studio Code على جهاز التطوير الخاص بك ونشر أول وحدة IoT Edge مع التعليمات البرمجية التي تصفي البيانات الأولية التي تم إنشاؤها بواسطة جهاز IoT Edge الخاص بك.
تابع إلى البرامج التعليمية التالية لمعرفة كيف يتيح لك Azure IoT Edge نشر خدمات Azure السحابية لمعالجة البيانات وتحليلها على الحافة.
تصحيح أخطاء وحدات Azure IoT Edge النمطيةوظائف Stream AnalyticsCustom Vision Service