التفاعل مع أحداث "مركز إنترنت الأشياء" باستخدام "شبكة الأحداث" لتشغيل الإجراءات

تكامل Azure IoT Hub مع Azure Event Grid بحيث يمكنك إرسال إعلامات الأحداث إلى خدمات أخرى، وتشغيل عمليات المتلقين للمعلومات. قم بتكوين تطبيقات العمل للاستماع إلى أحداث IoT Hub؛ بحيث يمكنك التفاعل مع الأحداث الهامة بطريقة آمنة، وقابلة للتطوير، ويمكن الاعتماد عليها. على سبيل المثال، قم بإنشاء تطبيق يقوم بتحديث قاعدة بيانات، وإنشاء تذكرة عمل، وتسليم إشعار عبر البريد الإلكتروني في كل مرة يتم فيها تسجيل جهاز جديد لـ IoT إلى لوحة الوصل الخاصة بـ IoT.

Azure Event Grid هي خدمة توجيه أحداث مدارة بالكامل تستخدم نموذج النشر والاشتراك. Event Grid لديه دعم مضمن لخدمات Azure مثل Azure Functions وتطبيقات Azure Logic، ويمكن أن تقدم تنبيهات الأحداث إلى الخدمات غير المتعلقة بـ Azure باستخدام خطافات الويب. للحصول على قائمة كاملة بمعالجات الأحداث التي تدعمها شبكة الأحداث، راجع مقدمة إلى شبكة أحداث Azure.

Azure Event Grid architecture

التوفر الإقليمي

يتوفر تكامل Event Grid لمراكز إنترنت الأشياء الموجودة في المناطق التي يتم دعم Event Grid فيها. للحصول على أحدث قائمة بالمناطق، راجع مقدمة حول Azure Event Grid.

أنواع الحدث

ينشر IoT Hub أنواع الأحداث التالية:

نوع الحدث الوصف
Microsoft.Devices.DeviceCreated يتم النشر عند تسجيل الجهاز في مركز إنترنت الأشياء.
Microsoft.Devices.DeviceDeleted يتم النشر عند حذف جهاز من مركز إنترنت الأشياء.
Microsoft.Devices.DeviceConnected يتم النشر عندما يكون الجهاز متصلاً بمركز إنترنت الأشياء.
Microsoft.Devices.DeviceDisconnected يتم النشر عند فصل جهاز عن مركز إنترنت الأشياء.
Microsoft.Devices.DeviceTelemetry يتم النشر عند إرسال رسالة القياس عن بعد إلى لوحة وصل IoT

استخدم إما مدخل Azure أو Azure CLI لتكوين الأحداث التي سيتم نشرها من كل مركز إنترنت أشياء. على سبيل المثال، جرب البرنامج التعليمي إرسال إعلامات بالبريد الإلكتروني حول أحداث Azure IoT Hub باستخدام التطبيقات المنطقية.

مخطط الأحداث

تحتوي أحداث IoT Hub على جميع المعلومات التي تحتاجها للاستجابة للتغييرات في دورة حياة جهازك. يمكنك تحديد حدث IoT Hub عن طريق التحقق من أن الحدث يبدأ خاصية ⁧⁩نوع⁧⁩ مع ⁧⁩Microsoft.Devices⁧⁩. لمزيد من المعلومات حول كيفية استخدام خصائص حدث شبكة الأحداث، راجع مخطط أحداث شبكة الأحداث.

مخطط متصل بالجهاز

يوضح المثال التالي مخطط حدث متصل بجهاز:

[{  
  "id": "f6bbf8f4-d365-520d-a878-17bf7238abd8",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
  "subject": "devices/LogicAppTestDevice",
  "eventType": "Microsoft.Devices.DeviceConnected",
  "eventTime": "2018-06-02T19:17:44.4383997Z",
  "data": {
      "deviceConnectionStateEventInfo": {
        "sequenceNumber":
          "000000000000000001D4132452F67CE200000002000000000000000000000001"
      },
    "hubName": "egtesthub1",
    "deviceId": "LogicAppTestDevice",
    "moduleId" : "DeviceModuleID",
  }, 
  "dataVersion": "1",
  "metadataVersion": "1"
}]

مخطط القياس عن بعد للجهاز

يجب أن تكون رسالة القياس عن بعد للجهاز بتنسيق JSON صالح مع تعيين contentType إلى التطبيق/json وضبط contentEncoding على UTF-8 في خصائص نظام الرسائل. كل من هاتين الخاصيتين غير حساسة لحالة الأحرف. إذا لم يتم تعيين ترميز المحتوى، فسيقوم IoT Hub بكتابة الرسائل بتنسيق الأساس 64 المرمز.

يمكنك إثراء أحداث التتبع للجهاز قبل نشرها على Event Grid عن طريق تحديد نقطة النهاية كـ Event Grid. لمزيد من المعلومات، راجع نظرة عامة على إثراءات الرسائل.

يوضح المثال التالي مخطط حدث التتبع للجهاز:

[{  
  "id": "9af86784-8d40-fe2g-8b2a-bab65e106785",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
  "subject": "devices/LogicAppTestDevice",
  "eventType": "Microsoft.Devices.DeviceTelemetry",
  "eventTime": "2019-01-07T20:58:30.48Z",
  "data": {
      "body": {
          "Weather": {
              "Temperature": 900
            },
            "Location": "USA"
        },
        "properties": {
            "Status": "Active"
        },
        "systemProperties": {
          "iothub-content-type": "application/json",
          "iothub-content-encoding": "utf-8",
          "iothub-connection-device-id": "d1",
          "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
          "iothub-connection-auth-generation-id": "123455432199234570",
          "iothub-enqueuedtime": "2019-01-07T20:58:30.48Z",
          "iothub-message-source": "Telemetry"
        }
  },
  "dataVersion": "",
  "metadataVersion": "1"
}]

مخطط تم إنشاؤه من قبل الجهاز

يوضح المثال التالي مخطط حدث تم إنشاؤه من قبل الجهاز:

[{
  "id": "56afc886-767b-d359-d59e-0da7877166b2",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
  "subject": "devices/LogicAppTestDevice",
  "eventType": "Microsoft.Devices.DeviceCreated",
  "eventTime": "2018-01-02T19:17:44.4383997Z",
  "data": {
    "twin": {
      "deviceId": "LogicAppTestDevice",
      "etag": "AAAAAAAAAAE=",
      "deviceEtag":"null",
      "status": "enabled",
      "statusUpdateTime": "0001-01-01T00:00:00",
      "connectionState": "Disconnected",
      "lastActivityTime": "0001-01-01T00:00:00",
      "cloudToDeviceMessageCount": 0,
      "authenticationType": "sas",
      "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
      },
      "version": 2,
      "properties": {
        "desired": {
          "$metadata": {
            "$lastUpdated": "2018-01-02T19:17:44.4383997Z"
          },
          "$version": 1
        },
        "reported": {
          "$metadata": {
            "$lastUpdated": "2018-01-02T19:17:44.4383997Z"
          },
          "$version": 1
        }
      }
    },
    "hubName": "egtesthub1",
    "deviceId": "LogicAppTestDevice"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

تحذير

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

للحصول على وصف مفصل لكل خاصية، راجع مخطط أحداث Azure Event Grid ل IoT Hub.

أحداث التصفية

يمكن للاشتراكات في أحداث IoT Hub تصفية الأحداث استناداً إلى نوع الحدث، ومحتوى البيانات، والموضوع، وهو اسم الجهاز.

تتيح شبكة الأحداث التصفية على أنواع الأحداث والموضوعات ومحتوى البيانات. أثناء إنشاء اشتراك Event Grid، يمكنك اختيار الاشتراك في أحداث إنترنت الأشياء المحددة. تعمل عوامل تصفية الموضوع في Event Grid على مطابقات تبدأ بـ (بادئة) وتنتهي بـ (لاحقة). يستخدم عامل التصفية عامل التشغيل AND، لذلك يتم تسليم الأحداث ذات الموضوع المطابق لكل من البادئة واللاحقة إلى المشترك.

يستخدم موضوع أحداث إنترنت الأشياء التنسيق:

devices/{deviceId}

تتيح Event Grid أيضاً التصفية على سمات كل حدث، بما في ذلك محتوى البيانات. يتيح لك ذلك اختيار الأحداث التي يتم تسليمها استنادا إلى محتويات رسالة القياس عن بعد. يرجى الاطلاع على التصفية المتقدمة لعرض الأمثلة. للتصفية على نص رسالة القياس عن بعد، يجب تعيين contentType إلى التطبيق/json وcontentEncoding إلى UTF-8 في خصائص نظام الرسائل. كل من هاتين الخاصيتين غير حساسة لحالة الأحرف.

بالنسبة للأحداث غير المتعلقة بالقياس عن بعد مثل DeviceConnected وDeviceDisconnected وDeviceCreate وDeviceDelete، يمكن استخدام تصفية شبكة الأحداث عند إنشاء الاشتراك. بالنسبة لأحداث القياس عن بعد، بالإضافة إلى التصفية في شبكة الأحداث، يمكن للمستخدمين أيضا التصفية على توائم الجهاز وخصائص الرسالة والنص الأساسي من خلال استعلام توجيه الرسالة.

عند الاشتراك في أحداث التتبع عبر Event Grid، ينشئ IoT Hub مساراً افتراضياً للرسالة لإرسال رسائل جهاز نوع مصدر البيانات إلى Event Grid. لمزيد من المعلومات حول توجيه الرسائل، راجع توجيه رسائل IoT Hub. سيكون هذا المسار مرئياً في المدخل ضمن IoT Hub > توجيه الرسائل. يتم إنشاء مسار واحد فقط إلى Event Grid بغض النظر عن عدد اشتراكات EG التي تم إنشاؤها لأحداث التتبع. لذلك، إذا كنت بحاجة إلى عدة اشتراكات بعوامل تصفية مختلفة، فيمكنك استخدام عامل التشغيل OR في هذه الاستعلامات على نفس المسار. يتم التحكم في إنشاء وحذف المسار من خلال الاشتراك في أحداث التتبع عبر Event Grid. لا يمكنك إنشاء أو حذف مسار لـ Event Grid باستخدام توجيه رسائل IoT Hub.

لتصفية الرسائل قبل إرسال بيانات القياس عن بعد، يمكنك تحديث استعلام التوجيه. لاحظ أنه يمكن تطبيق استعلام التوجيه على نص الرسالة فقط إذا كان النص الأساسي JSON. يجب عليك أيضا تعيين contentType إلى التطبيق/json و contentEncoding إلى UTF-8 في خصائص نظام الرسائل.

القيود المفروضة على الأحداث المتصلة بالجهاز والأحداث غير المتصلة بالجهاز

تتوفر أحداث حالة اتصال الجهاز للأجهزة المتصلة باستخدام بروتوكول MQTT أو AMQP أو باستخدام أي من هذه البروتوكولات عبر WebSockets. لن تؤدي الطلبات المقدمة باستخدام HTTPS فقط إلى تشغيل إشعارات حالة اتصال الجهاز. لكي يبدأ IoT Hub في إرسال أحداث حالة اتصال الجهاز، بعد فتح اتصال، يجب على الجهاز الاتصال إما بعملية تلقي الرسائل من السحابة إلى الجهاز أو عملية القياس عن بعد للإرسال من جهاز إلى سحابة . خارج مجموعات تطوير البرامج (SDKs) لإنترنت الأشياء من Azure، تعادل هذه العمليات في MQTT عمليات الاشتراك أو النشر حول مواضيع المراسلة المناسبة. عبر AMQP ، تعادل هذه إرفاق رسالة أو نقلها على مسارات الارتباط المناسبة.

لا يقوم IoT Hub بالإبلاغ عن كل جهاز فردي يتصل ويقطع الاتصال ، ولكنه ينشر حالة الاتصال الحالية المأخوذة في لقطة دورية مدتها 60 ثانية. يعني تلقي حدث حالة الاتصال نفسه بأرقام تسلسل مختلفة أو أحداث حالة اتصال مختلفة حدوث تغيير في حالة اتصال الجهاز خلال نافذة 60 ثانية.

تلميحات حول استهلاك الأحداث

يجب أن تتبع التطبيقات التي تعالج أحداث IoT Hub هذه الممارسات المقترحة:

  • يمكن تكوين عدة اشتراكات لتوجيه الأحداث إلى نفس معالج الأحداث؛ لذا لا تفترض أن الأحداث من مصدر معين. تحقق دائمًا من موضوع الرسالة؛ للتأكد من أنه يأتي من IoT Hub الذي تتوقعه.

  • لا تفترض أن كافة الأحداث التي تتلقاها هي الأنواع التي تتوقعها. تحقق دائماً من eventType قبل معالجة الرسالة.

  • يمكن أن تصل الرسائل خارج النظام أو بعد تأخير. استخدم حقل etag لفهم ما إذا كانت معلوماتك حول الكائنات محدثة للأحداث التي تم إنشاؤها بواسطة الجهاز أو حذفها من الجهاز.

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