برنامج تعليمي: تطوير ونشر وحدة Node.js IoT Edge باستخدام حاويات لينكس
ينطبق على:
IoT الحافة 1.1
IoT الحافة 1.2
استخدم Visual Studio Code لتطوير التعليمات البرمجية Node.js ونشرها على جهاز يعمل على Azure IoT Edge.
يمكنك استخدام وحدات IoT Edge لنشر التعليمات البرمجية التي تنفذ منطق عملك مباشرة إلى أجهزة IoT Edge. هذا البرنامج التعليمي يرشدك من خلال إنشاء ونشر وحدة IoT Edge التي تقوم بتصفية بيانات الاستشعار. ستستخدم جهاز IoT Edge الذي أنشأته في البدايات السريعة. في هذا البرنامج التعليمي، تتعلم كيفية:
- استخدام التعليمات البرمجية Visual Studio لإنشاء وحدة نمطية Node.js IoT Edge
- استخدام Visual Studio كود وDocker لإنشاء صورة docker ونشرها على السجل الخاص بك
- نشر الوحدة النمطية على جهاز IoT Edge
- عرض البيانات التي تم إنشاؤها
وحدة IoT Edge التي تقوم بإنشائها في هذا البرنامج التعليمي تقوم بتصفية بيانات درجة الحرارة التي تم إنشاؤها بواسطة جهازك. يرسل رسائل فقط تجاه المنبع إذا كانت درجة الحرارة فوق عتبة محددة. هذا النوع من التحليل على الحافة مفيد لتقليل كمية البيانات التي يتم توصيلها وتخزينها في السحابة.
في حال لم يكن لديك اشتراك Azure، قم بإنشاء حساب مجاني قبل البدء.
المتطلبات الأساسية
يوضح هذا البرنامج التعليمي كيفية تطوير وحدة نمطية فيNode.js باستخدامVisual Studio Code، وكيفية نشرها على جهاز IoT Edge.
لا يعتمد IoT Edge الوحدات النمطية Node.js باستخدام حاويات Windows.
استخدم الجدول التالي لفهم الخيارات الخاصة بك؛ لتطوير ونشر الوحدات النمطية Node.js:
| Node.js | تعليمة Visual Studio برمجية | Visual Studio 2017/2019 |
|---|---|---|
| Linux AMD64 | ![]() |
|
| Linux ARM32 | ![]() |
قبل بدء هذا البرنامج التعليمي، يجب الانتهاء من البرنامج التعليمي السابق لإعداد بيئة التطوير الخاصة بك لتطوير حاوية Linux: تطوير وحدات IoT Edge باستخدام حاويات Linux . من خلال استكمال هذا البرنامج التعليمي، يجب أن تكون لديك المتطلبات الأساسية التالية في المكان:
- مركز مجاني أو قياسي لـIoT في Azure.
- جهاز يقوم بتشغيل Azure IoT Edge. يمكنك استخدام قوالب التشغيل السريع لإعداد جهاز Linux أو جهاز Windows.
- سجل حاوية، مثل Azure Container Registry .
- Visual Studio Code الذي تم تكوينه باستخدام Azure IoT Tools .
- تم تكوينDocker CEلتشغيل حاويات Linux.
لتطوير وحدة نمطية IoT Edge في Node.js تثبيت المتطلبات الأساسية الإضافية التالية على جهاز التطوير الخاص بك:
- Node.js وnpm. يتم توزيع حزمة npm مع Node.js؛ مما يعني أنه عند تنزيل Node.js، تحصل على npm مثبتة تلقائيًا على جهاز الكمبيوتر الخاص بك.
إنشاء مشروع وحدة
توضح لك الخطوات التالية كيفية إنشاء وحدة نمطية Node.js IoT Edge باستخدام التعليمات البرمجية Visual Studio وأدوات Azure IoT.
إنشاء مشروع جديد
استخدمnpmلإنشاء نموذج حل Node.js يمكنك البناء عليه.
في Visual Studio التعليمات البرمجية، حدد عرضالمحطة الطرفية المتكاملة لفتح المحطة الطرفية المتكاملة VS Code.
في المحطة المتكاملة، أدخل الأمر التالي لتثبيتyeomanوالمولد لوحدة Node.js Azure IoT Edge:
npm install -g yo generator-azure-iot-edge-moduleحدد عرضلوحة الأوامر لفتح لوحة الأوامر VS Code.
في لوحة الأوامر، اكتب الأمر Azure: تسجيل الدخول وقم بتشغيله واتبع الإرشادات لتسجيل الدخول إلى حساب Azure الخاص بك. إذا قمت بتسجيل الدخول بالفعل، يمكنك تخطي هذه الخطوة.
في لوحة الأوامر، اكتب وقم بتشغيل الأمر Azure IoT Edge: حل IoT Edge الجديد. اتبع المطالبات في لوح الأوامر لإنشاء الحل الخاص بك.
الحقل القيمة حدد مجلدًا اختر الموقع على جهاز التطوير الخاص بك لأجل VS Code لإنشاء ملفات الحل. توفير اسم حل أدخل اسمًا وصفيًّا للحل الذي تستخدمه أو اقبل EdgeSolution الافتراضي. تحديد قالب الوحدة النمطية اختروحدة Node.js. توفير اسم وحدة نمطية قم بتسمية الوحدة النمطية الخاصة بكNodeModule. توفير مستودع صور Docker للوحدة النمطية يتضمن مستودع الصور اسم سجل الحاوية واسم صورة الحاوية. صورة الحاوية الخاصة بك مملوءة مسبقًا بالاسم الذي قدمته في الخطوة الأخيرة. استبدل localhost:5000 بقيمة خادم تسجيل الدخول من سجل حاوية Azure. يمكنك استرداد ملقم تسجيل الدخول من صفحة نظرة عامة من تسجيل الحاوية في مدخل Azure.
يبدو مستودع الصور النهائية مثل < اسم التسجيل > .azurecr.io/nodemodule.
إضافة بيانات اعتماد التسجيل
يخزن ملف البيئة بيانات الاعتماد الخاصة بمستودع الحاوية ويشاركها مع وقت تشغيل IoT Edge. يحتاج وقت التشغيل إلى بيانات الاعتماد هذه لسحب الصور الخاصة بك إلى جهاز IoT Edge.
يحاول ملحق IoT Edge سحب بيانات اعتماد تسجيل الحاوية من Azure وملأها في ملف البيئة. تحقق لمعرفة ما إذا كانت بيانات الاعتماد الخاصة بك مضمنة بالفعل. إذا لم يكن كذلك، فأضفها الآن:
- في مستكشف VS Code explorer، افتح الملف .env.
- حدث الحقول باستخدام قيم اسم المستخدم وكلمة المرور التي نسختها من سجل حاوية Azure.
- احفظ هذا الملف.
ملاحظة
يستخدم هذا البرنامج التعليمي بيانات اعتماد تسجيل دخول المسؤول لسجل Azure Container، والتي تعتبر ملائمة لسيناريوهات التطوير والاختبار. عندما تكون جاهزًا لسيناريوهات الإنتاج، نوصي بخيار مصادقة أقل امتيازًا مثل كيانات الخدمة. لمزيد من المعلومات، راجع إدارة الوصول إلى سجل الحاوية.
حدد بنية الهدف
حاليًا، يمكن Visual Studio كود تطوير وحدات Node.js لأجهزة لينكس AMD64 ولينكس ARM32v7. تحتاج إلى تحديد البنية التي تستهدفها مع كل حل؛ لأن الحاوية مبنية، ويتم تشغيلها بشكل مختلف لكل نوع من أنواع الهندسة المعمارية. الافتراضي هو Linux AMD64.
افتح لوحة الأوامر وابحث عن Azure IoT Edge: تعيين المنصة الهدف الافتراضي؟ لحل Edge، أو حدد رمز الاختصار في الشريط الجانبي أسفل النافذة.
في لوحة الأوامر، حدد بنية الهدف من قائمة الخيارات. في هذا البرنامج التعليمي، نستخدم جهاز Ubuntu الظاهري كجهاز IoT Edge، لذلك سنتخذ amd64 الافتراضي.
تحديث الوحدة النمطية باستخدام التعليمات البرمجية المخصصة
يأتي كل قالب مع نموذج كود مضمن، والذي يأخذ بيانات مستشعر محاكاة من الوحدة النمطيةSimulatedTemperatureSensorويوجهها إلى IoT Hub. في هذا المقطع، إضافة تعليمات برمجية لجعل NodeModule تحليل الرسائل قبل إرسالها.
في مستكشف التعليمات البرمجية VS، الوحداتالنمطية المفتوحة NodeModuleapp.js.
إضافة متغير عتبة درجة الحرارة أدناه وحدات العقدة المطلوبة. تحدد عتبة درجة الحرارة القيمة التي يجب أن تتجاوزها درجة الحرارة التي تم قياسها لكي يتم إرسال البيانات إلى مركز IoT.
var temperatureThreshold = 25;استبدل وظيفة
PipeMessageبأكملها بالدالةFilterMessage.// This function filters out messages that report temperatures below the temperature threshold. // It also adds the MessageType property to the message with the value set to Alert. function filterMessage(client, inputName, msg) { client.complete(msg, printResultFor('Receiving message')); if (inputName === 'input1') { var message = msg.getBytes().toString('utf8'); var messageBody = JSON.parse(message); if (messageBody && messageBody.machine && messageBody.machine.temperature && messageBody.machine.temperature > temperatureThreshold) { console.log(`Machine temperature ${messageBody.machine.temperature} exceeds threshold ${temperatureThreshold}`); var outputMsg = new Message(message); outputMsg.properties.add('MessageType', 'Alert'); client.sendOutputEvent('output1', outputMsg, printResultFor('Sending received message')); } } }استبدل اسم الوظيفة
pipeMessageبـfilterMessageفي وظيفةclient.on().client.on('inputMessage', function (inputName, msg) { filterMessage(client, inputName, msg); });انسخ مقتطف الشفرة التالي في دالة رد الاتصال
client.open()، بعدclient.on()داخل العبارةelse. يتم استدعاء هذه الدالة عند تحديث الخصائص المطلوبة.client.getTwin(function (err, twin) { if (err) { console.error('Error getting twin: ' + err.message); } else { twin.on('properties.desired', function(delta) { if (delta.TemperatureThreshold) { temperatureThreshold = delta.TemperatureThreshold; } }); } });حفظ ملف app.js.
في مستكشف VS Code، افتح ملفpublish.template.json في مساحة عمل حل IoT Edge.
إضافة الوحدة النمطية NodeModule التوأم إلى بيان التوزيع. أدخل محتوى JSON التالي في الجزء السفلي من القسم
moduleContent، بعد الوحدة المزدوجة$edgeHub:"NodeModule": { "properties.desired":{ "TemperatureThreshold":25 } }
احفظ ملف publish.template.json.
بناء ودفع الوحدة النمطية الخاصة بك
في المقطع السابق، قمت بإنشاء حل IoT Edge ثم إضافة تعليمات برمجية إلى NodeModule التي سيتم تصفية الرسائل حيث درجة حرارة الجهاز المبلغ عنها ضمن الحدود المقبولة. الآن تحتاج إلى بناء الحل كصورة حاوية ودفعها إلى سجل الحاوية الخاص بك.
افتح المحطة الطرفية المتكاملة VS Code عن طريق تحديد عرضالمحطة الطرفية.
قم بتسجيل الدخول إلى Docker بإدخال الأمر التالي في المحطة الطرفية. قم بتسجيل الدخول باستخدام اسم المستخدم وكلمة المرور وخادم تسجيل الدخول من سجل الحاويات Azure. يمكنك استرداد هذه القيم من قسم Access keys في السجل الخاص بك في منصة Azure.
docker login -u <ACR username> -p <ACR password> <ACR login server>قد تتلقى تحذيرًا أمنيًا يوصي باستخدام
--password-stdin. على الرغم من أن أفضل الممارسات موصى بها لسيناريوهات الإنتاج، إلا أنها خارج نطاق هذا البرنامج التعليمي. لمزيد من المعلومات، راجع مرجع تسجيل دخول docker.في مستكشف VS Code، انقر بزر الماوس الأيمن فوق ملف publish.template.json وحدد Build and Push IoT Edge Solution.
يبدأ أمر الإنشاء والدفع ثلاث عمليات. أولاً، ينشئ مجلدًا جديدًا في الحل يسمى config والذي يحتوي على بيان النشر الكامل، والذي تم إنشاؤه بناءً على المعلومات الموجودة في قالب النشر وملفات الحل الأخرى. ثانياً، يقوم بتشغيل
docker buildلإنشاء صورة الحاوية بناءً على ملف dockerfile المناسب للبنية المستهدفة. بعد ذلك، يقوم بتشغيلdocker pushلدفع مستودع الصور إلى سجل الحاوية الخاص بك.قد تستغرق هذه العملية عدة دقائق في المرة الأولى ولكن أسرع في المرة التالية التي تقوم بتشغيل الأوامر.
نشر الوحدات النمطية على الجهاز
استخدم مستكشف التعليمات البرمجية Visual Studio وملحق أدوات إنترنت Azure IoT لنشر مشروع الوحدة النمطية على جهاز IoT Edge. لديك بالفعل بيان نشر مُجهز للسيناريو الخاص بك، الملف deployment.amd64.json في مجلد التكوين. كل ما عليك القيام به الآن هو تحديد جهاز لتلقي النشر.
تأكد من أن جهاز IoT Edge الخاص بك يعمل.
في مستكشف Visual Studio Code ضمن قسم Azure IoT Hub، قم بتوسيع الأجهزة لمشاهدة قائمة أجهزة إنترنت الأشياء الخاصة بك.
انقر بزر الماوس الأيمن فوق اسم جهاز IoT Edge الخاص بك، ثم حدد Create Deployment for Single Device.
افتح الملف deployment.amd64.json في المجلد config ثم انقر فوق Select Edge Deployment Manifest. لا تستخدم الملف deployment.template.js.
تحت جهازك، قم بتوسيع الوحدات النمطية لمشاهدة قائمة بالوحدات التي تم نشرها وتشغيلها. انقر فوق الزر تحديث. من المفترض أن ترىNodeModuleالجديدة تعمل جنبًا إلى جنب مع الوحدة النمطيةSimulatedTemperatureSensor وedgeAgent$ وedgeHub$ .
قد يستغرق الأمر بضع دقائق لبدء تشغيل الوحدات النمطية. يحتاج وقت تشغيل IoT Edge إلى استلام بيان النشر الجديد الخاص به، وسحب صور الوحدة النمطية من وقت تشغيل الحاوية، ثم بدء تشغيل كل وحدة نمطية جديدة.
عرض البيانات التي تم إنشاؤها
بمجرد تطبيق بيان النشر على جهاز IoT Edge، يقوم خلال وقت تشغيل IoT Edge على الجهاز بتجميع معلومات النشر الجديدة وبدء التنفيذ عليها. يتم إيقاف أي وحدات نمطية تعمل على الجهاز غير مضمنة في بيان النشر. يتم تشغيل أي وحدات مفقودة من الجهاز.
يمكنك عرض حالة جهاز IoT Edge الخاص بك باستخدام قسم Azure IoT Hub Devices في مستكشف Visual Studio Code. وسع تفاصيل جهازك لعرض قائمة بالوحدات النمطية المنشورة والعاملة.
في مستكشف Visual Studio Code، انقر بزر الماوس الأيمن فوق اسم جهاز IoT Edge وحدد بدء مراقبة نقطة نهاية الحدث المضمنة.
عرض الرسائل التي تصل إلى مركز IoT. قد يستغرق وصول الرسائل بعض الوقت. جهاز IoT Edge عليه تلقي نشر جديد وبدء تشغيل كافة الوحدات النمطية. ثم، التغييرات التي قمنا بها على رمز NodeModule الانتظار حتى تصل درجة حرارة الجهاز إلى 25 درجة قبل إرسال الرسائل. كما تضيف نوع الرسالةتنبيهإلى أية رسائل تصل إلى حد درجة الحرارة هذا.
تحرير الوحدة النمطية التوأم
استخدمنا وحدة NodeModule التوأم في بيان النشر لتعيين عتبة درجة الحرارة في 25 درجة. يمكنك استخدام الوحدة النمطية التوأم لتغيير الوظيفة دون الحاجة إلى تحديث التعليمات البرمجية الوحدة النمطية.
في Visual Studio Code، قم بتوسيع التفاصيل الموجودة تحت جهاز IoT Edge لرؤية الوحدات النمطية قيد التشغيل.
انقر بزر الماوس الأيمن فوقNodeModuleوحددتعديل الوحدة المزدوجة.
ابحث عنحد درجة الحرارةفي الخصائص المطلوبة. تغيير قيمته إلى درجة حرارة جديدة من 5 درجات إلى 10 درجات أعلى من آخر درجة حرارة مبلغ عنها.
احفظ ملف الوحدة النمطية المزدوجة.
انقر بزر الماوس الأيمن في أي مكان في جزء تحرير الوحدة النمطية المزدوجة وحدد تحديث الوحدة النمطية المزدوجة.
وراقب الرسائل الواردة من الجهاز إلى السحابة. يجب أن تشاهد الرسائل تتوقف حتى يتم الوصول إلى حد درجة الحرارة الجديد.
تنظيف الموارد
إذا كنت تخطط للمتابعة إلى المقالة التالية الموصى بها، يمكنك الاحتفاظ بالموارد والتكوينات التي قمت بإنشائها وإعادة استخدامها. يمكنك أيضًا الاستمرار في استخدام نفس جهاز IoT Edge كجهاز اختبار.
وإلا، يمكنك حذف التكوينات المحلية وموارد Azure التي قمت بإنشائها في هذه المقالة لتجنب الرسوم.
حذف موارد Azure
حذف موارد Azure ومجموعات الموارد لا رجعة فيه. تأكد من عدم حذفك لمجموعة المورد (الموارد) الخاطئة عن غير قصد. إذا قمت بإنشاء مركز IoT داخل مجموعة موارد موجودة لديها موارد تريد الاحتفاظ بها، فاحذف فقط مورد محور IoT نفسه، وليس مجموعة الموارد.
لحذف الموارد:
سجّل الدخول إلى مدخل Microsoft Azure، ثم حدد Resource groups.
حدد اسم مجموعة الموارد التي تحتوي على موارد اختبار IoT Edge.
راجع قائمة الموارد الموجودة في مجموعة الموارد الخاصة بك. إذا كنت تريد حذفها جميعاً، يمكنك تحديد Delete resource group. إذا كنت تريد حذف بعضها فقط، فيمكنك النقر فوق كل مورد لحذفها بشكل فردي.
الخطوات التالية
لقد أنشأت في هذا البرنامج التعليمي وحدة IoT Edge النمطية التي تحتوي على تعليمات برمجية لتصفية البيانات الأولية التي أنشأها جهاز IoT Edge.
يمكنك متابعة الدروس التالية لمعرفة كيف يمكن أن تساعدك Azure IoT Edge في نشر خدمات سحابة Azure لمعالجة البيانات وتحليلها على الحافة.
