تمرين - إنشاء الوظائف وتشغيلها في تطبيقك
لإدارة الأجهزة المتصلة بتطبيقك بشكل مجمع، يمكنك استخدام واجهة برمجة تطبيقات REST للوظائف.
واجهة برمجة تطبيقات REST للوظائف في المعاينة حاليًا.
تريد تمكين تطبيق إدارة الأسطول الحالي لإدارة الوظائف في تطبيق IoT Central لديك برمجيًا.
في هذه الوحدة، يمكنك إنشاء وظيفة وتشغيلها يتم من خلالها إعادة تشغيل جميع أجهزة الشاحنات المبردة. عند اكتمال الوظيفة، يمكنك التحقق من النتائج لأي أجهزة فاشلة. إذا فشلت أي أجهزة، يمكنك إصلاح المشكلة وإعادة تشغيل الوظيفة.
يمكنك حينئذ تشغيل وظيفة لتعيين درجة الحرارة المستهدفة لجميع أجهزة الشاحنات المبردة.
إنشاء وظيفة أمر وتشغيلها
قبل أن تتمكن من إنشاء وظيفة وتشغيلها، تحتاج إلى معرف مجموعة الأجهزة التي تستهدفها. في التطبيق الذي تستخدمه، هناك مجموعة أجهزة تسمى Refrigerated truck - All devices. تم إنشاء مجموعة الأجهزة هذه تلقائيًا عند إضافة قالب جهاز الشاحنة المبردة.
يمكنك تشغيل الأمر التالي في Cloud Shell لاسترداد معرف مجموعة الأجهزة هذه. واجهة برمجة التطبيقات deviceGroups في المعاينة حاليًا:
DEVICE_GROUP=`az rest -m get -u https://$APP_NAME.azureiotcentral.com/api/deviceGroups \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN" \
--query "value[?contains(displayName,'Refrigerated truck')].id" -o tsv`
echo $DEVICE_GROUP
يمكنك تشغيل الأمر التالي لإنشاء وظيفة وتشغيلها يتم من خلالها استدعاء الأمر Reboot على كل الأجهزة الموجودة في مجموعة الأجهزة. يحتوي الأمر Reboot على معلمة تحدد، بالثواني، مدة الانتظار قبل إعادة التشغيل. تُسمى الوظيفة بالاسم rebootjob. واجهات برمجة تطبيقات jobs المختلفة في المعاينة حاليًا:
az rest -m put -u https://$APP_NAME.azureiotcentral.com/api/jobs/rebootjob \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN" --body \
'{
"data": [
{
"path": "reboot",
"target": "dtmi:contoso:refrigerated_truck",
"type": "CommandJobData",
"value": 10
}
],
"description": "Reboot all connected trucks in 10 seconds",
"displayName": "Reboot all trucks",
"group": "'$DEVICE_GROUP'"
}'
يتضمن الإخراج من الأمر السابق قيمة الحالة الأولية Pending. يمكنك تشغيل الأمر التالي للتحقق من الحالة:
az rest -m get -u https://$APP_NAME.azureiotcentral.com/api/jobs \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN" \
--query "value[].{Name:displayName, Status:status, ID:id}" -o table
استخدم الأمر التالي للتحقق من حالة الأجهزة الفردية:
az rest -m get -u https://$APP_NAME.azureiotcentral.com/api/jobs/rebootjob/devices \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN" \
--query "value[].{ID:id, Status:status}" -o table
يُظهر الإخراج من الأمر السابق أربعة أجهزة فاشلة. فشلت الوظيفة على الأجهزة الحقيقية الثلاثة لأنها غير متصلة بتطبيقك. تفشل الوظيفة أيضًا على الجهاز المحاكي الذي حظرته في تمرين سابق لأنه أيضًا غير متصل حاليًا. تعمل الأوامر التالية على إلغاء حظر الجهاز وإعادة تشغيل الأمر باستخدام reboot-001 كاسم الوظيفة:
az rest -m patch -u https://$APP_NAME.azureiotcentral.com/api/devices/sim-truck-002 \
--url-parameters api-version=1.0 \
--headers Authorization="$OPERATOR_TOKEN" \
--body \
'{
"enabled": true
}'
az rest -m put -u https://$APP_NAME.azureiotcentral.com/api/jobs/rebootjob/rerun/reboot-001 \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN"
في حالة إعادة التحقق من النتائج، يمكنك مشاهدة أن إعادة تشغيل الوظيفة قد تم فقط على الأجهزة التي فشلت سابقًا:
az rest -m get -u https://$APP_NAME.azureiotcentral.com/api/jobs \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN" \
--query "value[].{Name:displayName, Status:status, ID:id}" -o table
az rest -m get -u https://$APP_NAME.azureiotcentral.com/api/jobs/reboot-001/devices \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN" \
--query "value[].{ID:id, Status:status}" -o table
إنشاء وظيفة خاصية وتشغيلها
يمكنك تشغيل الأمر التالي لإنشاء وظيفة وتشغيلها يتم من خلالها تحديث الخاصية القابلة للكتابة targetTemperature على كل الأجهزة الموجودة في مجموعة الأجهزة Refrigerated truck - All devices. نوع هذه الخاصية مزدوج. تُسمى الوظيفة بالاسم targettempjob:
az rest -m put -u https://$APP_NAME.azureiotcentral.com/api/jobs/targettempjob \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN" --body \
'{
"data": [
{
"path": "TargetTemperature",
"target": "dtmi:contoso:refrigerated_truck",
"type": "PropertyJobData",
"value": 14.5
}
],
"description": "Update the target temperatures for multiple trucks",
"displayName": "Update target temperatures",
"group": "'$DEVICE_GROUP'"
}'
يمكنك استخدام الأوامر التالية للتحقق من قيم حالة الوظيفة والجهاز. تنجح هذه الوظيفة على كل الأجهزة بسبب وضع تحديثات الخصائص في قائمة الانتظار حتى يتصل الجهاز:
az rest -m get -u https://$APP_NAME.azureiotcentral.com/api/jobs \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN" \
--query "value[].{Name:displayName, Status:status, ID:id}" -o table
az rest -m get -u https://$APP_NAME.azureiotcentral.com/api/jobs/targettempjob/devices \
--url-parameters api-version=preview \
--headers Authorization="$OPERATOR_TOKEN" \
--query "value[].{ID:id, Status:status}" -o table
هل تحتاج إلى مساعدة؟ راجع دليل استكشاف الأخطاء وإصلاحها الذي نقدمه أو يمكنك توفير ملاحظات معينة عبر الإبلاغ عن مشكلة.