تمرين - نشر دالة Azure إلى IoT Edge

مكتمل

تصفية القياس عن بعد المرسل من قبل الجهاز.

لتقليل كمية القياس عن بُعد المرسلة إلى تطبيق IoT Central الخاص بك، فأنت تريد تصفية البيانات الموجودة على جهاز IoT Edge الخاص بك قبل إرسالها.

في هذه الوحدة، ستستخدم Azure Functions التي تعمل على جهاز IoT Edge لتنفيذ عامل تصفية. يضمن عامل التصفية أن الجهاز يرسل فقط بيانات تتبع الاستخدام عندما تكون درجة الحرارة المحيطة أعلى من 21 درجة مئوية.

إنشاء سجل حاويات

سيحتاج جهاز IoT Edge الخاص بك إلى تنزيل وتثبيت وحدة وظائف Azure المخصصة التي تنفذ عامل التصفية. يتم حزم وحدات IoT Edge كصور متوافقة مع Docker يمكنك تخزينها في مستودع حاويات. لقد قررت استخدام سجل حاويات Azure (ACR) لتخزين الوحدة النمطية الجديدة. كما ستستخدم ACR لإنشاء الحاوية من مشروع مصدر.

تشغيل الأوامر التالية لإضافة تسجيل حاوية إلى مجموعة الموارد في Azure:

REGISTRY_NAME="edgeCentral$RANDOM"
az acr create -n $REGISTRY_NAME -g <rgn>[sandbox resource group name]</rgn> --sku Standard --admin-enabled true
az acr credential show -n $REGISTRY_NAME
echo "Your registry name is: $REGISTRY_NAME"

قم بتدوين ملاحظة عن اسم التسجيل password وقيمه، يمكنك استخدامها لاحقا في هذه الوحدة.

إنشاء مشروع Azure Functions

أنت تستخدم C# لتنفيذ الدالة. تشغيل الأوامر التالية لتثبيت قالب المشروع ومن ثم إنشاء مشروع skeleton:

dotnet new -i Microsoft.Azure.IoT.Edge.Function
dotnet new aziotedgefunction -n FilterFunction -r $REGISTRY_NAME.azurecr.io/filterfunction
cd FilterFunction
ls

شغِّل الأمر التالي لاستبدال FilterFunction.cs بتطبيق يقوم بتصفية بيانات تتبع استخدام درجة حرارة الجهاز:

curl -O https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/master/edge-vm-deploy/FilterFunction.cs

الآن يمكنك بناء الصورة وتحميلها على سجل الحاويات الخاصة بك. توقع أن يستغرق تشغيل هذا الأمر بضع دقائق:

az acr build --registry $REGISTRY_NAME --image filterfunction:v1 -f Dockerfile.amd64 .

يمكنك سرد الصور في السجل الخاص بك باستخدام الأمر التالي:

az acr repository list --name $REGISTRY_NAME

تحديث قالب الجهاز لاستخدام الوحدة النمطية الجديدة

لاستخدام وحدة التصفية الجديدة على جهاز IoT Edge الخاص بك، حدِّث بيان التوزيع المرتبط بقالب الجهاز وأضف واجهة جديدة إلى قالب الجهاز. ستحتاج أيضاً إلى إصدار قالب الجهاز وترحيل جهازك لاستخدام القالب الجديد.

قم بتنزيل بيان النشر الجديد وتعريف الواجهة إلى جهازك المحلي بالنقر بزر الماوس الأيمن على الروابط التالية واختيار حفظ باسم:

فتح EnvironmentalSensorManifestFilter.jsفي محرر نص وتحديثه لاستخدام وحدة التصفية من تسجيل الحاوية:

  1. استبدال المثيلات الثلاثة <YOUR CONTAINER REGISTRY NAME> باسم تسجيل الحاوية. يبدو الاسم مثل edgecentral27912.
  2. استبدل <YOUR CONTAINER REGISTRY PASSWORD>بكلمة المرور التي قمت بتدوين ملاحظة عنها سابقاً في هذه الوحدة.
  3. حفظ التغييرات.

هذا الإصدار من بيان التوزيع:

  • إضافة الوحدة النمطية باستخدام الدالة Azure التي قمت بإنشائها:

    "filterfunction": {
        "settings": {
            "image": "{your container registry}.azurecr.io/filterfunction:v1",
            "createOptions": ""
        },
        "type": "docker",
        "status": "running",
        "restartPolicy": "always",
        "version": "1.0"
    }
    
  • توجيه مخرجات الوحدة النمطية SimulatedTemperatureSensor إلى وحدة تصفية الوظائف قبل إرسال القياس عن بعد المنقح إلى التطبيق IoT Central الخاص بك:

    "routes": {
        "FilterFunctionToIoTCentral": "FROM /messages/modules/filterfunction/outputs/* INTO $upstream",
        "sensorToFilterFunction": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filterfunction/inputs/input1\")"
    },
    

قبل أن تتمكن من تحميل الإصدار الجديد من البيان إلى قالب الجهاز، تحتاج إلى إنشاء إصدار جديد من القالب:

  1. انتقل إلى صفحة قوالب الأجهزة في تطبيق IoT Central.
  2. حدد قالب جهاز Edge الاستشعار البيئي.
  3. تحديد الإصدار. ثم حدد إنشاء لقبول اسم القالب الجديد.
  4. حدد Edit manifest، ثم حدد replace it with a new file، ثم حدد ملف EnvironmentalSensorManifestFilter.json الذي قمت بتحريره مسبقاً.
  5. عندما يتم التحقق من صحة البيان، حدد Save لاستبدال بيان التوزيع بالإصدار الجديد.

الوحدة النمطية الجديدة في بيان النشر يتطلب تعريف وحدة نمطية جديدة في قالب الجهاز. لا يضيف IoT Central تعريف الوحدة النمطية تلقائياً عند استبدال بيان النشر:

  1. في قالب جهاز Edge الاستشعار البيئي v2، حدد الوحدات النمطية، ثم حدد + إضافة وحدةنمطية، ثم حدد مخصص. تتم إضافة وحدة نمطية جديدة تسمى جهاز Edge الاستشعار البيئي v2 إلى قالب جهازك.

  2. حدد تحرير الهوية وتغيير اسم العلاقة واسمهالتصفية الوظيفة. تغيير اسم العرض إلى "عامل تصفية الوحدة النمطية". حدد ⁧⁩حفظ⁧⁩.

    Screenshot that shows the FilterFunction module added to the device template..

الوحدة النمطية الجديدة الآن يرسل القياس عن بعد إلى IoT Central. بعد ذلك، أضف واجهة إلى وحدة التصفية الجديدة التي تحدد القياس عن بعد وتحديث المخطط:

  1. حدد عامل تصفية الوحدة النمطية، ثم + إضافة واجهة موروثة.
  2. اختر الإطار المتجانب استيراد واجهة. حدد TelemetryInterface.jsفي الملف الذي قمت بتنزيله مسبقاً.
  3. انقر على Save لحفظ التغييرات التي أجريتها.

يمكنك إزالة واجهة القياس عن بعد الأصلي لأن SimulatedTemperatureModule لم يعد يرسل القياس عن بعد مباشرة إلى IoT Central. يُوجَّه الإخراج من هذه الوحدة إلى وحدة FilterFunction بواسطة IoT Edge runtime:

  1. حدد واجهة القياس عن بعد في الوحدة النمطية SimulatedTemperatureSensor.
  2. حدد حذف ثم قم بتأكيد العملية.

تعديل طريقة العرض "عرض IoT Edge" جهاز القياس عن بعد لعرض القياس عن بعد المرسلة بواسطة الوحدة النمطية FilterFunction:

  1. في قالب الجهاز، حدد طريقة العرض View IoT Edge device telemetry، ثم حدد الخيار Edit في الصورة المصغرة من المخطط البياني.
  2. أضف المحيط / درجة الحرارةوالرطوبةوالآلة / درجة الحرارةوأنواع القياس عن بعد الضغط.
  3. حدد تحديث ثم حفظ لحفظ التغييرات.
  4. حدد نشر لنشر الإصدار الجديد من قالب الجهاز.

نشر الوحدة النمطية الجديدة على جهازك

لإرسال بيان النشر المحدث إلى الجهاز:

  1. انتقل إلى صفحة Devices في تطبيق Azure IoT Central.

  2. حدد جهاز store-001.

  3. حدد ترحيل، في مربع الحوار ترحيل حدد جهاز Edge الاستشعار البيئي v2. ثم حدد ترحيل.

    Screenshot that shows the migrate device dialog..

بعد بضع ثوان، يتم ترحيل الجهاز إلى إصدار قالب جديد. يستخدم الجهاز الآن الوحدة النمطية FilterFunction الجديدة والمسارات.

للتحقق من نجاح نشر الوحدة النمطية الجديدة:

  1. في صفحة الأجهزة، انقر على جهاز Store-001.

  2. حدد طريقة عرض الوحدات النمطية. هناك الآن أربع وحدات تعمل على الجهاز، بما في ذلك وحدة تصفية وظيفة جديدة. قد تحتاج إلى الانتظار لعدة دقائق حتى يبدأ تشغيل الوحدة النمطية الجديدة.

    Screenshot that shows the FilterFunction module running on the IoT Edge device..

  3. حدد طريقة عرض قياس عن بعد لجهاز IoT Edge.

  4. يمكنك مشاهدة القياس عن بعد الذي تمت تصفيته على المخطط. لا توجد قيم تظهر بمتوسط درجة حرارة محيطة أقل من 21.0 درجة.

    Screenshot that shows telemetry plot with no average ambient temperature values less than 21..

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

az vm restart --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name $(az vm list --resource-group <rgn>[sandbox resource group name]</rgn> --query [0].name -o tsv)