اصطلاحات IoT Plug and Play

يجب أن تتبع أجهزة أجهزة التوصيل و التشغيل إنترنت الأشياء مجموعة من الاتفاقيات عند تبادل الرسائل مع مركز إنترنت الأشياء. تستخدم أجهزة أجهزة التوصيل و التشغيل إنترنت الأشياء بروتوكول MQTT للتواصل مع IoT Hub ، فإن AMQP مدعوم من قبل IoT Hub ومتوفر في بعض مجموعات SDK للأجهزة.

يمكن أن تتضمن الأجهزة وحدات نمطية، أو يمكن تنفيذها في وحدة IoT Edge التي يستضيفها وقت تشغيل IoT Edge.

يمكنك وصف القياس عن بعد والخصائص والأوامر التي ينفذها جهاز IoT أجهزة التوصيل و التشغيل باستخدام نموذجلغة تعريف التوائم الرقمية v2 (DTDL). هناك نوعان من النماذج المشار إليها في هذه المقالة:

  • بدون مكون - نموذج بدون مكونات. يعلن النموذج عن القياس عن بعد والخصائص والأوامر كخصائص المستوى الأعلى في قسم المحتويات في الواجهة الرئيسية. في أداة مستكشف Azure IoT، يظهر هذا النموذج كمكون افتراضي واحد.
  • مكونات متعددة - نموذج يتكون من واجهتين أو أكثر. واجهة رئيسية ، والتي تظهر كمكون افتراضي ، مع القياس عن بعد والخصائص والأوامر. واجهة واحدة أو أكثر تم الإعلان عنها كمكونات ذات قياس عن بعد وخصائص وأوامر إضافية.

لمزيد من المعلومات، راجع دليل نمذجة أجهزة التوصيل و التشغيل إنترنت الأشياء.

تحديد النموذج

للإعلان عن النموذج الذي تنفذه، يتضمن جهاز أو وحدة أجهزة التوصيل و التشغيل إنترنت الأشياء معرف النموذج في حزمة اتصال MQTT عن طريق الإضافة model-id إلى الحقلUSERNAME.

لتحديد النموذج الذي ينفذه جهاز أو وحدة، يمكن للخدمة الحصول على معرف النموذج من:

  • حقل توأم modelId الجهاز.
  • حقل التوأم $metadata.$model الرقمي.
  • إشعار تغيير التوأم الرقمي.

بيانات تتبع الاستخدام

لا يتطلب القياس عن بعد المرسل من جهاز بدون مكون أي بيانات وصفية إضافية. يضيف النظام الخاصية dt-dataschema .

يجب إضافة $.sub القياس عن بعد المرسل من جهاز متعدد المكونات كخاصية رسالة. يضيف dt-subject النظام وخصائص dt-dataschema .

خصائص القراءة فقط

نموذج خاصية القراءة فقط بدون مكون

يمكن للجهاز أو الوحدة النمطية إرسال أي JSON صالح يتبع قواعد DTDL v2.

DTDL:

{
  "@context": "dtmi:dtdl:context;2",
  "@id": "dtmi:example: Thermostat;1",
  "@type": "Interface",
  "contents": [
    {
      "@type": "Property",
      "name": "temperature",
      "schema": "double"
    }
  ]
}

عينة من حمولة الممتلكات المبلغ عنها:

"reported" :
{
  "temperature" : 21.3
}

نموذج خاصية القراءة فقط لمكونات متعددة

يجب أن يضيف الجهاز {"__t": "c"} أو الوحدة النمطية العلامة للإشارة إلى أن العنصر يشير إلى مكون.

DTDL الذي يشير إلى مكون:

{
  "@context": "dtmi:dtdl:context;2",
  "@id": "dtmi:com:example:TemperatureController;1",
  "@type": "Interface",
  "displayName": "Temperature Controller",
  "contents": [
    {
      "@type" : "Component",
      "schema": "dtmi:com:example:Thermostat;1",
      "name": "thermostat1"
    }
  ]
}

DTDL الذي يحدد المكون:

{
  "@context": "dtmi:dtdl:context;2",
  "@id": "dtmi:com:example:Thermostat;1",
  "@type": "Interface",
  "contents": [
    {
      "@type": "Property",
      "name": "temperature",
      "schema": "double"
    }
  ]
}

عينة من حمولة الممتلكات المبلغ عنها:

"reported": {
  "thermostat1": {
    "__t": "c",
    "temperature": 21.3
  }
}

خصائص قابلة للتحريف

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

  • value - القيمة الفعلية للخاصية (عادة ما تكون القيمة المستلمة، ولكن قد يقرر الجهاز الإبلاغ عن قيمة مختلفة).
  • ac - رمز إقرار يستخدم رمز حالة HTTP.
  • av - نسخة إقرار تشير إلى $version العقار المطلوب. يمكنك العثور على هذه القيمة في الخاصية المطلوبة حمولة JSON.
  • ad - وصف اختياري للإقرار.

ردود الإقرار

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

الحالة (ac) الإصدار(av) القيمة (القيمة) الوصف (av)
200 الإصدار المطلوب القيمة المطلوبة قيمة العقار المطلوبة مقبولة
202 الإصدار المطلوب القيمة المقبولة من قبل الجهاز قيمة العقار المطلوبة مقبولة ، التحديث قيد التقدم (يجب أن ينتهي ب 200)
203 0 القيمة التي يحددها الجهاز تم تعيين الخاصية من الجهاز ، لا تعكس أي رغبة
400 الإصدار المطلوب القيمة الفعلية المستخدمة من قبل الجهاز قيمة العقار المطلوبة غير مقبولة
500 الإصدار المطلوب القيمة الفعلية المستخدمة من قبل الجهاز استثناء عند تطبيق الخاصية

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

عند بدء تشغيل جهاز لأول مرة، يمكنه إرسال قيمة أولية لموقع تم الإبلاغ عنه إذا لم يتلق خاصية أولية مرغوبة من الموزع. في هذه الحالة ، يمكن للجهاز إرسال القيمة الافتراضية مع av إلى 0 وإلى ac203. على سبيل المثال:

"reported": {
  "targetTemperature": {
    "value": 20.0,
    "ac": 203,
    "av": 0,
    "ad": "initialize"
  }
}

يمكن للجهاز استخدام الموقع الذي تم الإبلاغ عنه لتوفير معلومات أخرى إلى المركز. على سبيل المثال، يمكن للجهاز الاستجابة بسلسلة من الرسائل قيد التقدم مثل:

"reported": {
  "targetTemperature": {
    "value": 35.0,
    "ac": 202,
    "av": 3,
    "ad": "In-progress - reporting current temperature"
  }
}

عندما يصل الجهاز إلى درجة الحرارة المستهدفة يرسل الرسالة التالية:

"reported": {
  "targetTemperature": {
    "value": 20.0,
    "ac": 200,
    "av": 4,
    "ad": "Reached target temperature"
  }
}

يمكن للجهاز الإبلاغ عن خطأ مثل:

"reported": {
  "targetTemperature": {
    "value": 120.0,
    "ac": 500,
    "av": 3,
    "ad": "Target temperature out of range. Valid range is 10 to 99."
  }
}

نوع الكائن

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

  • الكائن بأكمله.
  • فقط الحقول التي قام الجهاز بتحديثها.
  • مجموعة فرعية من الحقول.

بالنسبة للكائنات الكبيرة، ضع في اعتبارك تصغير حجم الكائن الذي تقوم بتضمينه في الإقرار.

يوضح المثال التالي خاصية قابلة للكتابة تم تعريفها على أنها تحتوي على Object أربعة حقول:

DTDL:

{
  "@type": "Property",
  "name": "samplingRange",
  "schema": {
    "@type": "Object",
    "fields": [
      {
        "name": "startTime",
        "schema": "dateTime"
      },
      {
        "name": "lastTime",
        "schema": "dateTime"
      },
      {
        "name": "count",
        "schema": "integer"
      },
      {
        "name": "errorCount",
        "schema": "integer"
      }
    ]
  },
  "displayName": "Sampling range"
  "writable": true
}

لتحديث هذه الخاصية القابلة للكتابة، أرسل كائنا كاملا من الخدمة يشبه ما يلي:

{
  "samplingRange": {
    "startTime": "2021-08-17T12:53:00.000Z",
    "lastTime": "2021-08-17T14:54:00.000Z",
    "count": 100,
    "errorCount": 5
  }
}

يستجيب الجهاز بإقرار يبدو كما يلي:

{
  "samplingRange": {
    "ac": 200,
    "av": 5,
    "ad": "Weighing status updated",
    "value": {
      "startTime": "2021-08-17T12:53:00.000Z",
      "lastTime": "2021-08-17T14:54:00.000Z",
      "count": 100,
      "errorCount": 5
    }
  }
}

نموذج الخاصية القابلة للكتابة بدون مكون

عندما يتلقى جهاز خصائص مرغوبة متعددة في حمولة واحدة، يمكنه إرسال استجابات الخاصية المبلغ عنها عبر حمولات متعددة أو دمج الاستجابات في حمولة واحدة.

يمكن للجهاز أو الوحدة النمطية إرسال أي JSON صالح يتبع قواعد DTDL v2:

DTDL:

{
  "@context": "dtmi:dtdl:context;2",
  "@id": "dtmi:example: Thermostat;1",
  "@type": "Interface",
  "contents": [
    {
      "@type": "Property",
      "name": "targetTemperature",
      "schema": "double",
      "writable": true
    },
    {
      "@type": "Property",
      "name": "targetHumidity",
      "schema": "double",
      "writable": true
    }
  ]
}

عينة من حمولة الخاصية المطلوبة:

"desired" :
{
  "targetTemperature" : 21.3,
  "targetHumidity" : 80,
  "$version" : 3
}

عينة الحمولة الأولى للخاصية المبلغ عنها:

"reported": {
  "targetTemperature": {
    "value": 21.3,
    "ac": 200,
    "av": 3,
    "ad": "complete"
  }
}

عينة الحمولة الثانية للخاصية المبلغ عنها:

"reported": {
  "targetHumidity": {
    "value": 80,
    "ac": 200,
    "av": 3,
    "ad": "complete"
  }
}

ملاحظة

يمكنك اختيار الجمع بين هاتين الحمولتين الخاصيتين المبلغ عنهما في حمولة واحدة.

نموذج خاصية مكونات متعددة قابلة للكتابة

يجب أن يضيف الجهاز {"__t": "c"} أو الوحدة النمطية العلامة للإشارة إلى أن العنصر يشير إلى مكون.

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

عندما يتلقى جهاز خصائص متعددة تم الإبلاغ عنها في حمولة واحدة، يمكنه إرسال استجابات الخصائص المبلغ عنها عبر حمولات متعددة أو دمج الاستجابات في حمولة واحدة.

يجب أن يؤكد الجهاز أو الوحدة النمطية أنه تلقى الخصائص عن طريق إرسال الخصائص المبلغ عنها:

DTDL الذي يشير إلى مكون:

{
  "@context": "dtmi:dtdl:context;2",
  "@id": "dtmi:com:example:TemperatureController;1",
  "@type": "Interface",
  "displayName": "Temperature Controller",
  "contents": [
    {
      "@type" : "Component",
      "schema": "dtmi:com:example:Thermostat;1",
      "name": "thermostat1"
    }
  ]
}

DTDL الذي يحدد المكون:

{
  "@context": "dtmi:dtdl:context;2",
  "@id": "dtmi:com:example:Thermostat;1",
  "@type": "Interface",
  "contents": [
    {
      "@type": "Property",
      "name": "targetTemperature",
      "schema": "double",
      "writable": true
    }
  ]
}

عينة من حمولة الخاصية المطلوبة:

"desired": {
  "thermostat1": {
    "__t": "c",
    "targetTemperature": 21.3,
    "targetHumidity": 80,
    "$version" : 3
  }
}

عينة الحمولة الأولى للخاصية المبلغ عنها:

"reported": {
  "thermostat1": {
    "__t": "c",
    "targetTemperature": {
      "value": 23,
      "ac": 200,
      "av": 3,
      "ad": "complete"
    }
  }
}

عينة الحمولة الثانية للخاصية المبلغ عنها:

"reported": {
  "thermostat1": {
    "__t": "c",
    "targetHumidity": {
      "value": 80,
      "ac": 200,
      "av": 3,
      "ad": "complete"
    }
  }
}

ملاحظة

يمكنك اختيار الجمع بين هاتين الحمولتين الخاصيتين المبلغ عنهما في حمولة واحدة.

الأوامر

لا تستخدم واجهات المكونات اسم الأمر بدون بادئة.

على جهاز أو وحدة نمطية، تستخدم واجهات مكونات متعددة أسماء الأوامر بالتنسيق التالي: componentName*commandName.

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

الآن بعد أن تعرفت على اتفاقيات أجهزة التوصيل و التشغيل إنترنت الأشياء ، إليك بعض الموارد الإضافية: