جدولة المهام على أجهزة متعددة

يتيح Azure IoT Hub عددًا من كتل الإنشاء مثل خصائص الجهاز المزدوج والعلامات والأساليب المباشرة. عادة، تمكن التطبيقات الخلفية مسؤولي الأجهزة والمشغلين من تحديث أجهزة IoT والتفاعل معها بشكل مجمع وفي وقت مجدول. تنفذ الوظائف تحديثات مزدوجة للجهاز وأساليب مباشرة على مجموعة من الأجهزة في وقت محدد. على سبيل المثال، قد يستخدم المشغل تطبيقا خلفيا يبدأ وتتبع وظيفة لإعادة تشغيل مجموعة من الأجهزة في المبنى 43 والطابق 3 في وقت لا يؤدي إلى تعطيل عمليات المبنى.

ملاحظة

الميزات الموضحة في هذه المقالة متوفرة فقط في المستوى القياسي لـ IoT Hub. لمزيد من المعلومات حول مستويات IoT Hub الأساسية والقياسية/المجانية، راجع اختيار طبقة IoT Hub المناسبة للحل الخاص بك.

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

  • تحديث الخصائص المطلوبة
  • تحديث العلامات
  • استدعاء أساليب مباشرة

دورة حَياة الوظيفة

يتم بدء الوظائف بواسطة حل البرامج الخلفية والحفاظ عليها من خلال IoT Hub. يمكنك بدء وظيفة من خلال URI المواجه للخدمة (PUT https://<iot hub>/jobs/v2/<jobID>?api-version=2021-04-12) والاستعلام عن التقدم في وظيفة تنفيذية من خلال URI المواجه للخدمة (GET https://<iot hub>/jobs/v2/<jobID?api-version=2021-04-12). لتحديث حالة تشغيل الوظائف بمجرد بدء وظيفة، قم بتشغيل "استعلام وظيفة". لا يوجد مسح صريح لمحفوظات الوظائف، ولكن لديهم TTL لمدة 30 يوما. 

ملاحظة

عند بدء وظيفة، لا يمكن أن تحتوي أسماء وقيم الخصائص إلا على US-ASCII أبجدي رقمي قابل للطباعة، باستثناء أي منها في المجموعة التالية: $ ( ) < > @ , ; : \ " / [ ] ? = { } SP HT

ملاحظة

يجب أن يكون الحقل jobId 64 حرفًا أو أقل ويمكن أن يحتوي فقط على أحرف US-ASCII وأرقام وحرف شرطة (-).

وظائف لتنفيذ أساليب مباشرة

تعرض القصاصة البرمجية التالية تفاصيل طلب HTTPS 1.1 لتنفيذ أسلوب مباشر على مجموعة من الأجهزة باستخدام وظيفة:

PUT /jobs/v2/<jobId>?api-version=2021-04-12

Authorization: <config.sharedAccessSignature>
Content-Type: application/json; charset=utf-8

{
    "jobId": "<jobId>",
    "type": "scheduleDeviceMethod",
    "cloudToDeviceMethod": {
        "methodName": "<methodName>",
        "payload": <payload>,
        "responseTimeoutInSeconds": methodTimeoutInSeconds
    },
    "queryCondition": "<queryOrDevices>", // query condition
    "startTime": <jobStartTime>,          // as an ISO-8601 date string
    "maxExecutionTimeInSeconds": <maxExecutionTimeInSeconds>
}

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

"queryCondition" = "deviceId = 'MyDevice1'"
"queryCondition" = "deviceId IN ['MyDevice1','MyDevice2']"
"queryCondition" = "deviceId IN ['MyDevice1']"

تغطي لغة استعلام IoT Hub لغة استعلام IoT Hub بتفاصيل إضافية.

توضح القصاصة البرمجية التالية طلب واستجابة وظيفة مجدولة لاستدعاء أسلوب مباشر يسمى testMethod على كافة الأجهزة على contoso-hub-1:

PUT https://contoso-hub-1.azure-devices.net/jobs/v2/job01?api-version=2021-04-12 HTTP/1.1
Authorization: SharedAccessSignature sr=contoso-hub-1.azure-devices.net&sig=68iv------------------------------------v8Hxalg%3D&se=1556849884&skn=iothubowner
Content-Type: application/json; charset=utf-8
Host: contoso-hub-1.azure-devices.net
Content-Length: 317

{
    "jobId": "job01",
    "type": "scheduleDeviceMethod",
    "cloudToDeviceMethod": {
        "methodName": "testMethod",
        "payload": {},
        "responseTimeoutInSeconds": 30
    },
    "queryCondition": "*",
    "startTime": "2019-05-04T15:53:00.077Z",
    "maxExecutionTimeInSeconds": 20
}

HTTP/1.1 200 OK
Content-Length: 65
Content-Type: application/json; charset=utf-8
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 03 May 2019 01:46:18 GMT

{"jobId":"job01","type":"scheduleDeviceMethod","status":"queued"}

وظائف لتحديث خصائص الجهاز المزدوج

تعرض القصاصة البرمجية التالية تفاصيل طلب HTTPS 1.1 لتحديث خصائص الجهاز المزدوج باستخدام وظيفة:

PUT /jobs/v2/<jobId>?api-version=2021-04-12

Authorization: <config.sharedAccessSignature>
Content-Type: application/json; charset=utf-8

{
    "jobId": "<jobId>",
    "type": "scheduleUpdateTwin",
    "updateTwin": <patch>                 // Valid JSON object
    "queryCondition": "<queryOrDevices>", // query condition
    "startTime": <jobStartTime>,          // as an ISO-8601 date string
    "maxExecutionTimeInSeconds": <maxExecutionTimeInSeconds>
}

ملاحظة

تتطلب خاصيةupdateTwin تطابق etag صالح؛ على سبيل المثال، etag="*".

توضح القصاصة البرمجية التالية طلب واستجابة وظيفة مجدولة لتحديث خصائص جهاز مزدوج لجهاز الاختبار على contoso-hub-1:

PUT https://contoso-hub-1.azure-devices.net/jobs/v2/job02?api-version=2021-04-12 HTTP/1.1
Authorization: SharedAccessSignature sr=contoso-hub-1.azure-devices.net&sig=BN0U-------------------------------------RuA%3D&se=1556925787&skn=iothubowner
Content-Type: application/json; charset=utf-8
Host: contoso-hub-1.azure-devices.net
Content-Length: 339

{
    "jobId": "job02",
    "type": "scheduleUpdateTwin",
    "updateTwin": {
      "properties": {
        "desired": {
          "test1": "value1"
        }
      },
     "etag": "*"
     },
    "queryCondition": "deviceId = 'test-device'",
    "startTime": "2019-05-08T12:19:56.868Z",
    "maxExecutionTimeInSeconds": 20
}

HTTP/1.1 200 OK
Content-Length: 63
Content-Type: application/json; charset=utf-8
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 03 May 2019 22:45:13 GMT

{"jobId":"job02","type":"scheduleUpdateTwin","status":"queued"}

الاستعلام عن التقدم في الوظائف

توضح القصاصة البرمجية التالية تفاصيل طلب HTTPS 1.1 للاستعلام عن الوظائف:

GET /jobs/v2/query?api-version=2021-04-12[&jobType=<jobType>][&jobStatus=<jobStatus>][&pageSize=<pageSize>][&continuationToken=<continuationToken>]

Authorization: <config.sharedAccessSignature>
Content-Type: application/json; charset=utf-8

يتم تقديم continuationToken من الاستجابة.

يمكنك الاستعلام عن حالة تنفيذ الوظيفة على كل جهاز باستخدام لغة استعلام IoT Hub للجهاز المزدوج والوظائف وتوجيه الرسائل.

خَصائص الوظائف

تعرض القائمة التالية الخصائص والأوصاف المطابقة، والتي يمكن استخدامها عند الاستعلام عن الوظائف أو نتائج الوظائف.

الخاصية الوصف
معرّف الوظيفة تقديم طلب للحصول على هوية للوظيفة.
startTime التطبيق المقدم وقت البدء (ISO-8601) للوظيفة.
endTime قدم IoT Hub تاريخ (ISO-8601) لموعد اكتمال الوظيفة. صالح فقط بعد وصول الوظيفة إلى الحالة «مكتملة».
⁩type⁧ أنواع الوظائف:
scheduleUpdateTwin: وظيفة تُستخدم لتحديث مجموعة من الخصائص أو العلامات المطلوبة.
scheduleDeviceMethod: وظيفة تُستخدم لاستدعاء أسلوب جهاز على مجموعة من الأجهزة المزدوجة.
الحالة الحَالة الراهنة للوظيفة. القيم المحتملة للحالة:
معلقة: مجدولة وتنتظر أن تلتَقطها خدمة الوظيفة.
مجدولة: مجدولة لفترة في المستقبل.
قيد التشغيل: وظيفة نشطة حاليًا.
تم الإلغاء: تم إلغاء الوظيفة.
فشلت: فشلت الوظيفة.
مكتملة: اكتملت الوظيفة.
إحصاءات وظيفة الجهاز إحصاءات حول تَنفيذ الوظيفة.
خصائص deviceJobStatistics:
deviceJobStatistics.deviceCount: عدد الأجهزة في الوظيفة.
deviceJobStatistics.failedCount: عدد الأجهزة التي فَشلت الوظيفة فيها.
deviceJobStatistics.succeededCount: عدد الأجهزة التي نجحت فيها الوظيفة.
deviceJobStatistics.runningCount: عدد الأجهزة التي تُشغل الوظيفة حاليًا.
deviceJobStatistics.pendingCount: عدد الأجهزة المُعلقة لتشغيل الوظيفة.

مواد مرجعية إضافية

تتضمن الموضوعات المرجعية الأخرى في دليل مطور IoT Hub ما يلي:

الخطوات التالية

لتجربة بعض المفاهيم الموضحة في هذه المقالة، راجع البرنامج التعليمي التالي لمركز IoT: