فهم إنترنت الأشياء أجهزة التوصيل و التشغيل التوائم الرقمية

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

يستخدم IoT أجهزة التوصيل و التشغيل DTDL الإصدار 2. لمزيد من المعلومات حول هذا الإصدار، راجع لغة تعريف التوائم الرقمية (DTDL) - مواصفات الإصدار 2 على GitHub.

ملاحظة

DTDL ليست حصرية لإنترنت الأشياء أجهزة التوصيل و التشغيل. خدمات إنترنت الأشياء الأخرى ، مثل Azure Digital Twins ، تستخدمها لتمثيل بيئات بأكملها مثل المباني وشبكات الطاقة.

تتضمن مجموعات تطوير البرامج (SDK) لخدمة Azure IoT واجهات برمجة تطبيقات تسمح للخدمة بالتفاعل مع التوأم الرقمي للجهاز. على سبيل المثال، يمكن للخدمة قراءة خصائص الجهاز من التوأم الرقمي أو استخدام التوأم الرقمي لاستدعاء أمر على جهاز. لمعرفة المزيد، راجع أمثلة التوأم الرقمي ل IoT Hub.

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

توائم الجهاز والتوائم الرقمية

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

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

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

مثال JSON التوأم للجهاز

يعرض المقتطف التالي جهاز IoT أجهزة التوصيل و التشغيل مزدوج التنسيق ككائن JSON:

{
  "deviceId": "sample-device",
  "modelId": "dtmi:com:example:TemperatureController;1",
  "version": 15,
  "properties": {
    "desired": {
      "thermostat1": {
        "__t": "c",
        "targetTemperature": 21.8
      },
      "$metadata": {...},
      "$version": 4
    },
    "reported": {
      "serialNumber": "alwinexlepaho8329",
      "thermostat1": {
        "maxTempSinceLastReboot": 25.3,
        "__t": "c",
        "targetTemperature": {
          "value": 21.8,
          "ac": 200,
          "ad": "Successfully executed patch",
        }
      },
      "$metadata": {...},
      "$version": 11
    }
  }
}

مثال على التوأم الرقمي

يعرض المقتطف التالي التوأم الرقمي المنسق ككائن JSON:

{
  "$dtId": "sample-device",
  "serialNumber": "alwinexlepaho8329",
  "thermostat1": {
    "maxTempSinceLastReboot": 25.3,
    "targetTemperature": 21.8,
    "$metadata": {
      "targetTemperature": {
        "desiredValue": 21.8,
        "desiredVersion": 4,
        "ackVersion": 4,
        "ackCode": 200,
        "ackDescription": "Successfully executed patch",
        "lastUpdateTime": "2020-07-17T06:11:04.9309159Z"
      },
      "maxTempSinceLastReboot": {
         "lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
      }
    }
  },
  "$metadata": {
    "$model": "dtmi:com:example:TemperatureController;1",
    "serialNumber": {
      "lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
    }
  }
}

يصف الجدول التالي الحقول الموجودة في كائن JSON التوأم الرقمي:

اسم الحقل الوصف
$dtId سلسلة مقدمة من المستخدم تمثل معرف التوأم الرقمي للجهاز
{propertyName} قيمة العقار في JSON
$metadata.$model [اختياري] معرف واجهة النموذج التي تميز هذا التوأم الرقمي
$metadata.{propertyName}.desiredValue [فقط للخصائص القابلة للكتابة] القيمة المطلوبة للخاصية المحددة
$metadata.{propertyName}.desiredVersion [فقط للخصائص القابلة للكتابة] إصدار القيمة المطلوبة التي يحتفظ بها IoT Hub
$metadata.{propertyName}.ackVersion [مطلوب، فقط للخصائص القابلة للكتابة] الإصدار المعترف به من قبل الجهاز الذي ينفذ التوأم الرقمي ، يجب أن يكون أكبر أو يساوي الإصدار المطلوب
$metadata.{propertyName}.ackCode [مطلوب، فقط للخصائص القابلة للكتابة] الرمز الذي تم ack إرجاعه بواسطة تطبيق الجهاز الذي ينفذ التوأم الرقمي
$metadata.{propertyName}.ackDescription [اختياري، فقط للخصائص القابلة للكتابة] الوصف الذي تم ack إرجاعه بواسطة تطبيق الجهاز الذي ينفذ التوأم الرقمي
$metadata.{propertyName}.lastUpdateTime يحتفظ IoT Hub بالطابع الزمني لآخر تحديث للخاصية بواسطة الجهاز. الطوابع الزمنية بالتوقيت العالمي المنسق ومشفرة بتنسيق ISO8601 YYYY-MM-DDTHH:MM:SS.mmmZ
{componentName} كائن JSON يحتوي على قيم خصائص المكون وبيانات التعريف.
{componentName}.{propertyName} قيمة خاصية المكون في JSON
{componentName}.$metadata معلومات بيانات التعريف للمكون.

الخصائص

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

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

مخطط DTDL:

{
    "@type": "Property",
    "name": "serialNumber",
    "displayName": "Serial Number",
    "description": "Serial number of the device.",
    "schema": "string"
}

في هذا المثال، alwinexlepaho8329 هي القيمة الحالية لخاصية القراءة فقط التي serialNumber أبلغ عنها الجهاز. تعرض المقتطفات التالية تمثيل JSON جنبا إلى جنب للموقع serialNumber :

جهاز توأم

"properties": {
"reported": {
"serialNumber": "alwinexlepaho8329"
}
}

توأم رقمي

"serialNumber": "alwinexlepaho8329"

الممتلكات القابلة للكتابة

توضح الأمثلة التالية خاصية قابلة للكتابة في المكون الافتراضي.

DTDL:

{
  "@type": "Property",
  "name": "fanSpeed",
  "displayName": "Fan Speed",
  "writable": true,
  "schema": "double"
}

جهاز توأم

{
"properties": {
"desired": {
"fanSpeed": 2.0,
},
"reported": {
"fanSpeed": {
"value": 3.0,
"ac": 200,
"av": 1,
"ad": "Successfully executed patch version 1"
}
}
},
}

توأم رقمي

{
"fanSpeed": 3.0,
"$metadata": {
"fanSpeed": {
"desiredValue": 2.0,
"desiredVersion": 2,
"ackVersion": 1,
"ackCode": 200,
"ackDescription": "Successfully executed patch version 1",
"lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
}
}
}

في هذا المثال، 3.0 هي القيمة الحالية للخاصية التي fanSpeed أبلغ عنها الجهاز. 2.0 هي القيمة المطلوبة التي يحددها الحل. يتم تعيين القيمة المطلوبة وحالة المزامنة لخاصية على مستوى الجذر ضمن مستوى $metadata الجذر لتوأم رقمي. عندما يتصل الجهاز بالإنترنت، يمكنه تطبيق هذا التحديث والإبلاغ عن القيمة المحدثة.

المكونات

تسمح المكونات ببناء واجهة نموذج كمجموعة من الواجهات الأخرى. على سبيل المثال ، يمكن دمج واجهة Thermostat كمكونات thermostat1thermostat2 وفي نموذج نموذج وحدة التحكم في درجة الحرارة .

في توأم الجهاز، يتم تحديد مكون بواسطة العلامة { "__t": "c"} . في التوأم الرقمي ، يمثل وجود $metadata مكون.

في هذا المثال، thermostat1 هو مكون له خاصيتان:

  • maxTempSinceLastReboot هي خاصية للقراءة فقط.
  • targetTemperature هي خاصية قابلة للكتابة تمت مزامنتها بنجاح بواسطة الجهاز. توجد القيمة المطلوبة وحالة المزامنة لهذه الخصائص في المكون $metadata.

تعرض المقتطفات التالية تمثيل JSON جنبا إلى جنب للمكون thermostat1 :

جهاز توأم

"properties": {
"desired": {
"thermostat1": {
"__t": "c",
"targetTemperature": 21.8
},
"$metadata": {
},
"$version": 4
},
"reported": {
"thermostat1": {
"maxTempSinceLastReboot": 25.3,
"__t": "c",
"targetTemperature": {
"value": 21.8,
"ac": 200,
"ad": "Successfully executed patch",
"av": 4
}
},
"$metadata": {
},
"$version": 11
}
}

توأم رقمي

"thermostat1": {
"maxTempSinceLastReboot": 25.3,
"targetTemperature": 21.8,
"$metadata": {
"targetTemperature": {
"desiredValue": 21.8,
"desiredVersion": 4,
"ackVersion": 4,
"ackCode": 200,
"ackDescription": "Successfully executed patch",
"lastUpdateTime": "2020-07-17T06:11:04.9309159Z"
},
"maxTempSinceLastReboot": {
"lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
}
}
}

واجهات برمجة التطبيقات الرقمية المزدوجة

تتضمن واجهات برمجة التطبيقات الرقمية المزدوجة Get Digital Twin و Update Digital Twin و Invoke Component Command و Invoke Command عمليات أكثر إدارة للتوأم الرقمي. يمكنك إما استخدام واجهات برمجة تطبيقات REST مباشرة أو من خلال حزمة SDK للخدمة.

أحداث التغيير الرقمي المزدوج

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

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

على سبيل المثال، يتم تشغيل حدث تغيير التوأم الرقمي التالي عند targetTemperature تعيينه بواسطة الحل:

iothub-connection-device-id:sample-device
iothub-enqueuedtime:7/17/2020 6:11:04 AM
iothub-message-source:digitalTwinChangeEvents
correlation-id:275d463fa034
content-type:application/json-patch+json
content-encoding:utf-8
[
  {
    "op": "add",
    "path": "/thermostat1/$metadata/targetTemperature",
    "value": {
      "desiredValue": 21.8,
      "desiredVersion": 4
    }
  }
]

يتم تشغيل حدث التغيير المزدوج الرقمي التالي عندما يبلغ الجهاز عن تطبيق التغيير المطلوب أعلاه:

iothub-connection-device-id:sample-device
iothub-enqueuedtime:7/17/2020 6:11:05 AM
iothub-message-source:digitalTwinChangeEvents
correlation-id:275d464a2c80
content-type:application/json-patch+json
content-encoding:utf-8
[
  {
    "op": "add",
    "path": "/thermostat1/$metadata/targetTemperature/ackCode",
    "value": 200
  },
  {
    "op": "add",
    "path": "/thermostat1/$metadata/targetTemperature/ackDescription",
    "value": "Successfully executed patch"
  },
  {
    "op": "add",
    "path": "/thermostat1/$metadata/targetTemperature/ackVersion",
    "value": 4
  },
  {
    "op": "add",
    "path": "/thermostat1/$metadata/targetTemperature/lastUpdateTime",
    "value": "2020-07-17T06:11:04.9309159Z"
  },
  {
    "op": "add",
    "path": "/thermostat1/targetTemperature",
    "value": 21.8
  }
]

ملاحظة

يتم مضاعفة رسائل إعلام التغيير المزدوج عند تشغيلها في كل من إشعار تغيير الجهاز وإشعار التغيير الرقمي المزدوج.

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

الآن بعد أن تعرفت على التوائم الرقمية ، إليك بعض الموارد الإضافية: