مشاركة عبر


البرنامج التعليمي: توصيل IoT Plug and Play بتطبيقات أجهزة متعددة المكونات تعمل على Linux أو Windows إلى مركز IoT

يوضح لك هذا البرنامج التعليمي كيفية إنشاء نموذج لتطبيق جهاز IoT Plug and Play مع المكونات، وتوصيله بمركز IoT الخاص بك، واستخدام أداة مستكشف Azure IoT لعرض المعلومات التي يرسلها إلى المركز. يتواجد التطبيق النموذجي مكتوبًا في C ويتم تضمينه في SDK جهاز IoT Azure لـ C. يمكن لمنشئ الحلول استخدام أداة مستكشف Azure IoT لفهم قدرات جهاز IoT Plug and Play دون الحاجة إلى عرض أي رمز للجهاز.

استعراض التعليمة البرمجية

في هذا البرنامج التعليمي، سوف تتعلّم:

  • تحميل نموذج التعليمات البرمجية.
  • إنشاء نموذج التعليمات البرمجية.
  • تشغيل نموذج تطبيق الجهاز والتحقق من اتصاله بـIoT hub الخاصة بك.
  • مراجعة التعليمة البرمجية للمصدر.

المتطلبات الأساسية

قبل المتابعة، تأكد من إعداد بيئتك، بما في ذلك مركز IoT.

يمكنك إكمال هذا البرنامج التعليمي على Linux أو Windows. أوامر shell في هذا البرنامج التعليمي تتبع اصطلاح Linux لفواصل المسار ''،/إذا كنت تتابع على Windows فتأكد من تبديل هذه الفواصل بـ '\'.

تختلف المتطلبات الأساسية تبعًا لنظام التشغيل:

Linux

يفترض هذا البرنامج التعليمي أنك تستخدم Ubuntu Linux. تم اختبار الخطوات في هذا البرنامج التعليمي باستخدام Ubuntu 18.04.

لإكمال هذا البرنامج التعليمي على Linux، قم بتثبيت البرنامج التالي على بيئة Linux المحلية لديك:

تثبيت GCC، Git، cmake، وكافة التبعيات المطلوبة باستخدام الأمر apt-get:

sudo apt-get update
sudo apt-get install -y git cmake build-essential curl libcurl4-openssl-dev libssl-dev uuid-dev

تحقق من إصدار cmake هو فوق 2.8.12 وإصدار GCC سحابة القطاع الحكومي فوق 4.4.7.

cmake --version
gcc --version

Windows

لإكمال هذا البرنامج التعليمي على Windows، قم بتثبيت البرنامج التالي على بيئة Windows المحلية لديك:

قم بتنزيل الرمز

إذا أكملت البرنامج التعليمي: قم بتوصيل نموذج تطبيق جهاز IoT Plug and Play الذي يعمل على Linux أو Windows إلى IoT Hub (C) الذي قمت بتنزيله بالفعل.

في هذا البرنامج التعليمي، يمكنك إعداد بيئة تطوير يمكنك استخدامها لاستنساخ وبناء Azure IoT Hub Device C SDK.

افتح موجه أوامر في مجلد من اختيارك. نفذ الأمر التالي لاستنساخ مستودع GitHubAzure IoT C SDKs and Libraries في هذا الموقع:

git clone https://github.com/Azure/azure-iot-sdk-c.git
cd azure-iot-sdk-c
git submodule update --init

توقع أن تستغرق هذه العملية دقائق عدة لإكمالها.

إنشاء التعليمات البرمجية وتشغيلها

يمكنك إنشاء التعليمات البرمجية وتشغيلها باستخدام Visual Studio أو cmake في سطر الأوامر.

استخدام Visual Studio

  1. افتح المجلد الجذر من المستودع المستنسخ. بعد بضع ثوان، دعم CMake في Visual Studio بإنشاء كل ما تحتاجه لتشغيل وتصحيح المشروع.

  2. عندما يكون Visual Studio جاهزًا، في Solution Explorer، انتقل إلى نموذج iothub_client/samples/pnp/pnp_temperature_controller/.

  3. انقر بزر الماوس الأيمن فوق الملف pnp_temperature_controller.c وحدد Add Debug Configuration. حدد Default.

  4. Visual Studio يفتح ملف launch.vs.js. تحرير هذا الملف كما هو موضح في القصاصة البرمجية التالية لتعيين متغيرات البيئة المطلوبة. قمت بعمل ملاحظة من معرف النطاق والمفتاح الأساسي للتسجيل عند الانتهاء من إعداد البيئة الخاصة بك لوحدات تشغيل سريع وبرامج تعليمية لدى IoT Plug and Play:

    {
      "version": "0.2.1",
      "defaults": {},
      "configurations": [
        {
          "type": "default",
          "project": "iothub_client\\samples\\pnp\\pnp_temperature_controller\\pnp_temperature_controller.c",
          "projectTarget": "",
          "name": "pnp_temperature_controller.c",
          "env": {
            "IOTHUB_DEVICE_SECURITY_TYPE": "DPS",
            "IOTHUB_DEVICE_DPS_ID_SCOPE": "<Your ID scope>",
            "IOTHUB_DEVICE_DPS_DEVICE_ID": "my-pnp-device",
            "IOTHUB_DEVICE_DPS_DEVICE_KEY": "<Your enrollment primary key>"
          }
        }
      ]
    }
    
  5. انقر بزر الماوس الأيمن فوق الملف pnp_temperature_controller.c وحدد Set as Startup Item.

  6. لتتبع تنفيذ التعليمات البرمجية في Visual Studio، إضافة نقطة توقف إلى main الدالة في ملف pnp_temperature_controller.c.

  7. يمكنك الآن تشغيل وتصحيح العينة من القائمة Debug.

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

استخدام cmake في سطر الأوامر

لإنشاء العينة:

  1. إنشاء مجلد فرعي cmake في المجلد الجذر من SDK الجهاز المستنسخة ثم انتقل إلى هذا المجلد:

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    
  2. تشغيل الأوامر التالية لإنشاء وبناء ملفات المشروع لـ SDK ونماذج:

    cmake ..
    cmake --build .
    

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

  • IOTHUB_DEVICE_SECURITY_TYPEمع القيمة DPS.
  • IOTHUB_DEVICE_DPS_ID_SCOPE مع نطاق معرف DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_IDمع القيمة my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEYمع مفتاح التسجيل الأساسي.
  • IOTHUB_DEVICE_DPS_ENDPOINTمع القيمة global.azure-devices-provisioning.net

لمعرفة المزيد حول تكوين العينة، راجع نموذج readme.

لتشغيل النموذج:

  1. من مجلد cmake انتقل إلى المجلد الذي يحتوي على الملف القابل للتنفيذ وشغله:

    # Bash
    cd iothub_client/samples/pnp/pnp_temperature_controller
    ./pnp_temperature_controller
    
    REM Windows
    cd iothub_client\samples\pnp\pnp_temperature_controller\Debug
    pnp_temperature_controller.exe
    

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

استخدام مستكشف Azure IoT للتحقق من صحة التعليمات البرمجية

بعد بدء نموذج عميل الجهاز، استخدم أداة مستكشف Azure IoT للتحقق من عملها.

  1. افتح مستكشف Azure IoT.

  2. في صفحة IoT hubs ، إذا لم تكن قد أضفت بالفعل اتصالا إلى مركز IoT، فحدد + Add connection. أدخل سلسلة الاتصال لمركز IoT الذي أنشأته مسبقا وحدد حفظ.

  3. في صفحة IoT أجهزة التوصيل و التشغيل Settings، حدد + Add > Local folder وحدد مجلد النماذج المحلية حيث حفظت ملفات النموذج.

  4. في صفحة IoT hubs ، انقر فوق اسم المركز الذي تريد العمل معه. يمكنك مشاهدة قائمة الأجهزة المسجلة في مركز IoT.

  5. انقر فوق معرف الجهاز الخاص بالجهاز الذي قمت بإنشائه مسبقا.

  6. توضح القائمة الموجودة على اليسار أنواع المعلومات المختلفة المتاحة للجهاز.

  7. حدد مكونات أجهزة التوصيل و التشغيل IoT لعرض معلومات النموذج لجهازك.

  8. يمكنك عرض المكونات المختلفة للجهاز. المكون الافتراضي وأي مكون إضافي. حدد مكونًا للعمل معه.

  9. حدد صفحة بيانات تتبع الاستخدام ثم حدد البدء لعرض بيانات تتبع الاستخدام التي يرسلها الجهاز لهذا المكون.

  10. حدد صفحة الخصائص (للقراءة فقط) لعرض خصائص القراءة فقط التي تم الإبلاغ عنها لهذا المكون.

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

  12. حدد خاصية باسمها، وأدخل قيمة جديدة لها، وحدد تحديث القيمة المطلوبة.

  13. لمشاهدة القيمة الجديدة تظهر، حدد الزر تحديث .

  14. حدد صفحة الأوامر لعرض جميع الأوامر لهذا المكون.

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

مراجعة الرمز

يستخدم هذا النموذج جهاز تحكم بدرجة حرارة IoT Plug and Play. هذا النموذج ينفذ نموذجًا باستخدام مكونات متعددة. يحدد ملف نموذج لغة تعريف التوائم الرقمية (DTDL) لجهاز درجة الحرارة بيانات تتبع الاستخدام والخصائص والأوامر التي ينفذها الجهاز.

وظائف مساعد IoT Plug and Play

للحصول على هذا النموذج، تستخدم التعليمات البرمجية بعض دالات المساعد من مجلد /common:

pnp_device_client_ll يحتوي على أسلوب الاتصال بـ IoT Plug and Play باستخدام model-idمضمن كمعلمة: PnP_CreateDeviceClientLLHandle.

pnp_protocol: يحتوي على وظائف مساعد IoT Plug and Play:

  • PnP_CreateReportedProperty
  • PnP_CreateReportedPropertyWithStatus
  • PnP_ParseCommandName
  • PnP_CreateTelemetryMessageHandle
  • PnP_ProcessTwinData
  • PnP_CopyPayloadToString
  • PnP_CreateDeviceClientLLHandle_ViaDps

هذه دالات المساعد عامة بما يكفي لاستخدامها في المشروع الخاص بك. يستخدمها هذا النموذج في الملفات الثلاثة التي تتوافق مع كل مكون في النموذج:

  • pnp_deviceinfo_component
  • pnp_temperature_controller
  • pnp_thermostat_component

على سبيل المثال، في الملف pnp_deviceinfo_component،تستخدم الوظيفة SendReportedPropertyForDeviceInformation اثنين من وظائف المساعد:

if ((jsonToSend = PnP_CreateReportedProperty(componentName, propertyName, propertyValue)) == NULL)
{
    LogError("Unable to build reported property response for propertyName=%s, propertyValue=%s", propertyName, propertyValue);
}
else
{
    const char* jsonToSendStr = STRING_c_str(jsonToSend);
    size_t jsonToSendStrLen = strlen(jsonToSendStr);

    if ((iothubClientResult = IoTHubDeviceClient_LL_SendReportedState(deviceClientLL, (const unsigned char*)jsonToSendStr, jsonToSendStrLen, NULL, NULL)) != IOTHUB_CLIENT_OK)
    {
        LogError("Unable to send reported state for property=%s, error=%d", propertyName, iothubClientResult);
    }
    else
    {
        LogInfo("Sending device information property to IoTHub.  propertyName=%s, propertyValue=%s", propertyName, propertyValue);
    }
}

يتبع كل مكون في العينة هذا النمط.

تدفق التعليمات البرمجية

الوظيفة main تهيئ الاتصال وترسل معرف النموذج:

deviceClient = CreateDeviceClientAndAllocateComponents();

تستخدم التعليمات البرمجية PnP_CreateDeviceClientLLHandle للاتصال بمركز IoT وتعيين modelId كخيار وإعداد أسلوب الجهاز ومعالجات استدعاء توأم الجهاز لأساليب مباشرة وتحديثات الجهاز التوأم:

g_pnpDeviceConfiguration.deviceMethodCallback = PnP_TempControlComponent_DeviceMethodCallback;
g_pnpDeviceConfiguration.deviceTwinCallback = PnP_TempControlComponent_DeviceTwinCallback;
g_pnpDeviceConfiguration.modelId = g_temperatureControllerModelId;
...

deviceClient = PnP_CreateDeviceClientLLHandle(&g_pnpDeviceConfiguration);

&g_pnpDeviceConfiguration يحتوي أيضًا على معلومات الاتصال. متغير البيئة IOTHUB_DEVICE_SECURITY_TYPE يحدد إذا كانت العينة تستخدم سلسلة اتصال أو خدمة توفير الجهاز للاتصال بمركز IoT.

عندما يرسل الجهاز معرف نموذج، يصبح جهاز IoT Plug and Play.

باستخدام معالجات الاستدعاء في مكان الجهاز يتفاعل مع التحديثات التوأم واستدعاءات الأسلوب المباشر:

  • بالنسبة لاستدعاء جهاز توأم، PnP_TempControlComponent_DeviceTwinCallback يستدعي الوظيفة PnP_ProcessTwinData لمعالجة البيانات. PnP_ProcessTwinData يستخدم نمط الزائر تحليل JSON ثم يقوم بزيارة كل خاصية، من أجل استدعاء PnP_TempControlComponent_ApplicationPropertyCallback إلى كل عنصر.

  • بالنسبة لاستدعاء الأوامر، الوظيفة PnP_TempControlComponent_DeviceMethodCallback تستخدم وظيفة المساعد لتحليل الأمر وأسماء المكونات:

    PnP_ParseCommandName(methodName, &componentName, &componentNameSize, &pnpCommandName);
    

    الوظيفة PnP_TempControlComponent_DeviceMethodCallback تستدعي الأمر على المكون:

    LogInfo("Received PnP command for component=%.*s, command=%s", (int)componentNameSize, componentName, pnpCommandName);
    if (strncmp((const char*)componentName, g_thermostatComponent1Name, g_thermostatComponent1Size) == 0)
    {
        result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle1, pnpCommandName, rootValue, response, responseSize);
    }
    else if (strncmp((const char*)componentName, g_thermostatComponent2Name, g_thermostatComponent2Size) == 0)
    {
        result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle2, pnpCommandName, rootValue, response, responseSize);
    }
    else
    {
        LogError("PnP component=%.*s is not supported by TemperatureController", (int)componentNameSize, componentName);
        result = PNP_STATUS_NOT_FOUND;
    }
    

الوظيفة main تهيئ خصائص للقراءة فقط يتم إرسالها إلى مركز IoT:

PnP_TempControlComponent_ReportSerialNumber_Property(deviceClient);
PnP_DeviceInfoComponent_Report_All_Properties(g_deviceInfoComponentName, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle1, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle2, deviceClient);

الوظيفة main تدخل حلقة لتحديث بيانات الحدث والقياس عن بعد لكل مكون:

while (true)
{
    PnP_TempControlComponent_SendWorkingSet(deviceClient);
    PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle1, deviceClient);
    PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle2, deviceClient);
}

الوظيفة PnP_ThermostatComponent_SendTelemetry توضح لك كيفية استخدام البنية PNP_THERMOSTAT_COMPONENT. تستخدم العينة هذه البنية لتخزين معلومات حول منظمتي الحرارة في وحدة التحكم في درجة الحرارة. تستخدم التعليمات البرمجية الوظيفة PnP_CreateTelemetryMessageHandle لإعداد الرسالة وإرسالها:

messageHandle = PnP_CreateTelemetryMessageHandle(pnpThermostatComponent->componentName, temperatureStringBuffer);
...
iothubResult = IoTHubDeviceClient_LL_SendEventAsync(deviceClientLL, messageHandle, NULL, NULL);

الوظيفة main أخيرًا تدمر المكونات المختلفة وتغلق الاتصال بالمركز.

يوضح لك هذا البرنامج التعليمي كيفية إنشاء نموذج لتطبيق جهاز IoT Plug and Play مع المكونات، وتوصيله بمركز IoT الخاص بك، واستخدام أداة مستكشف Azure IoT لعرض المعلومات التي يرسلها إلى المركز. يوجد نموذج التطبيق مكتوب في C# ويتم تضمينه في حزمة SDK لجهاز إنترنت الأشياء الخاص بـ Azure فيما يخص C#. يمكن لمنشئ الحلول استخدام أداة مستكشف إنترنت الأشياء الخاص بـAzure لفهم قدرات جهاز IoT Plug وPlay دون الحاجة إلى عرض أي رمز للجهاز.

استعراض التعليمة البرمجية

في هذا البرنامج التعليمي، سوف تتعلّم:

  • تحميل نموذج التعليمات البرمجية.
  • إنشاء نموذج التعليمات البرمجية.
  • تشغيل نموذج تطبيق الجهاز والتحقق من اتصاله بـIoT hub الخاصة بك.
  • مراجعة التعليمة البرمجية للمصدر.

المتطلبات الأساسية

قبل المتابعة، تأكد من إعداد بيئتك، بما في ذلك مركز IoT.

يمكنك إكمال هذا البرنامج التعليمي على Linux أو Windows. أوامر shell في هذا البرنامج التعليمي تتبع اصطلاح Linux لفواصل المسار ''،/إذا كنت تتابع على Windows فتأكد من تبديل هذه الفواصل بـ '\'.

  • أحدث .NET SDK للنظام الأساسي الخاص بك.
  • Git.

استنساخ مستودع SDK باستخدام نموذج التعليمات البرمجية

إذا أكملت البرنامج التعليمي: قم بتوصيل نموذج من تطبيق جهاز IoT Plug and Play الذي يعمل على Windows إلى IoT Hub (C #)، فقد قمت بالفعل باستنساخ المستودع.

استنساخ العينات من عينات Azure IoT لمستودع C # GitHub. افتح موجه أوامر في مجلد من اختيارك. قم بتشغيل الأمر التالي لنسخ Microsoft Azure IoT SDK لمستودع .NET GitHub:

git clone https://github.com/Azure/azure-iot-sdk-csharp.git

بناء التعليمة البرمجية

يمكنك الآن إنشاء العينة وتشغيلها. قم بتشغيل الأوامر التالية لإنشاء العينة:

cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/TemperatureController
dotnet build

تشغيل نموذج الجهاز

لتشغيل النموذج، قم بتشغيل الأمر التالي:

dotnet run

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

استخدام مستكشف إنترنت الأشياء الخاص بـAzure للتحقق من صحة التعليمات البرمجية

بعد بدء نموذج عميل الجهاز، استخدم أداة مستكشف Azure IoT للتحقق من عملها.

  1. افتح مستكشف Azure IoT.

  2. في صفحة IoT hubs ، إذا لم تكن قد أضفت بالفعل اتصالا إلى مركز IoT، فحدد + Add connection. أدخل سلسلة الاتصال لمركز IoT الذي أنشأته مسبقا وحدد حفظ.

  3. في صفحة IoT أجهزة التوصيل و التشغيل Settings، حدد + Add > Local folder وحدد مجلد النماذج المحلية حيث حفظت ملفات النموذج.

  4. في صفحة IoT hubs ، انقر فوق اسم المركز الذي تريد العمل معه. يمكنك مشاهدة قائمة الأجهزة المسجلة في مركز IoT.

  5. انقر فوق معرف الجهاز الخاص بالجهاز الذي قمت بإنشائه مسبقا.

  6. توضح القائمة الموجودة على اليسار أنواع المعلومات المختلفة المتاحة للجهاز.

  7. حدد مكونات أجهزة التوصيل و التشغيل IoT لعرض معلومات النموذج لجهازك.

  8. يمكنك عرض المكونات المختلفة للجهاز. المكون الافتراضي وأي مكون إضافي. حدد مكونًا للعمل معه.

  9. حدد صفحة بيانات تتبع الاستخدام ثم حدد البدء لعرض بيانات تتبع الاستخدام التي يرسلها الجهاز لهذا المكون.

  10. حدد صفحة الخصائص (للقراءة فقط) لعرض خصائص القراءة فقط التي تم الإبلاغ عنها لهذا المكون.

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

  12. حدد خاصية باسمها، وأدخل قيمة جديدة لها، وحدد تحديث القيمة المطلوبة.

  13. لمشاهدة القيمة الجديدة تظهر، حدد الزر تحديث .

  14. حدد صفحة الأوامر لعرض جميع الأوامر لهذا المكون.

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

مراجعة الرمز

يستخدم هذا النموذج جهاز تحكم بدرجة حرارة IoT Plug and Play. يستخدم النموذج المُنفذ لهذه العينة مكونات متعددة. يحدد ملف نموذج لغة تعريف التوائم الرقمية (DTDL) لجهاز درجة الحرارة بيانات تتبع الاستخدام والخصائص والأوامر التي ينفذها الجهاز.

يتصل رمز الجهاز بمركز إنترنت الأشياء باستخدام CreateFromConnectionString الأسلوب القياسي. يرسل الجهاز معرف الطراز الخاص بنموذج DTDL الذي ينفذه في طلب الاتصال. عندما يرسل الجهاز معرف نموذج، يصبح جهاز IoT Plug and Play:

private static DeviceClient InitializeDeviceClient(string hostname, IAuthenticationMethod authenticationMethod)
{
    var options = new ClientOptions
    {
        ModelId = ModelId,
    };

    var deviceClient = DeviceClient.Create(hostname, authenticationMethod, TransportType.Mqtt, options);
    deviceClient.SetConnectionStatusChangesHandler((status, reason) =>
    {
        s_logger.LogDebug($"Connection status change registered - status={status}, reason={reason}.");
    });

    return deviceClient;
}

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

private const string ModelId = "dtmi:com:example:TemperatureController;1";

بعد اتصال الجهاز بمركز إنترنت الأشياء، تسجل التعليمات البرمجية معالجات الأوامر. rebootيتم تعريف الأمر في المكون الافتراضي. getMaxMinReportيتم تعريف الأمر في كل من مكوني منظمات الحرارة:

await _deviceClient.SetMethodHandlerAsync("reboot", HandleRebootCommandAsync, _deviceClient, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat1*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat1, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat2*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat2, cancellationToken);

يوجد معالجات منفصلة لتحديثات الخاصية المطلوبة على مكوني منظم الحرارة:

_desiredPropertyUpdateCallbacks.Add(Thermostat1, TargetTemperatureUpdateCallbackAsync);
_desiredPropertyUpdateCallbacks.Add(Thermostat2, TargetTemperatureUpdateCallbackAsync);

يرسل نموذج التعليمات البرمجية القصاصة البرمجية من كل مكون لمنظم الحرارة:

await SendTemperatureAsync(Thermostat1, cancellationToken);
await SendTemperatureAsync(Thermostat2, cancellationToken);

SendTemperatureTelemetryAsyncيستخدم الأسلوب PnpHelper الفئة لإنشاء رسائل لكل مكون:

using Message msg = PnpHelper.CreateIothubMessageUtf8(telemetryName, JsonConvert.SerializeObject(currentTemperature), componentName);

PnpHelperتحتوي الفئة على نماذج أساليب أخرى يمكنك استخدامها مع نموذج مكون متعدد.

استخدم أداة مستكشف إنترنت الأشياء الخاص بـ Azure لعرض القصاصة البرمجية والخصائص من اثنين من مكوني منظم الحرارة:

جهاز مكون متعدد في مستكشف إنترنت الأشياء الخاص بـ Azure

يمكنك أيضًا استخدام أداة مستكشف إنترنت الأشياء الخاص بـ Azure لاستدعاء الأوامر في أي من مكوني الحرارة، أو في المكون الافتراضي.

يوضح لك هذا البرنامج التعليمي كيفية إنشاء نموذج لتطبيق جهاز IoT Plug and Play مع المكونات، وتوصيله بمركز IoT الخاص بك، واستخدام أداة مستكشف Azure IoT لعرض المعلومات التي يرسلها إلى المركز. نموذج التطبيق مكتوب بلغة برمجة Java ويتم تضمينه في حزمة SDK لجهاز Azure IoT للغة برمجة Java. يمكن لمنشئ الحلول استخدام أداة مستكشف إنترنت الأشياء الخاص بـAzure لفهم قدرات جهاز IoT Plug وPlay دون الحاجة إلى عرض أي رمز للجهاز.

استعراض التعليمة البرمجية

في هذا البرنامج التعليمي، سوف تتعلّم:

  • تحميل نموذج التعليمات البرمجية.
  • إنشاء نموذج التعليمات البرمجية.
  • تشغيل نموذج تطبيق الجهاز والتحقق من اتصاله بـIoT hub الخاصة بك.
  • مراجعة التعليمة البرمجية للمصدر.

المتطلبات الأساسية

قبل المتابعة، تأكد من إعداد بيئتك، بما في ذلك مركز IoT.

يمكنك إكمال هذا البرنامج التعليمي على Linux أو Windows. أوامر shell في هذا البرنامج التعليمي تتبع اصطلاح Linux لفواصل المسار ''،/إذا كنت تتابع على Windows فتأكد من تبديل هذه الفواصل بـ '\'.

لإكمال هذا البرنامج التعليمي، قم بتثبيت البرنامج التالي في بيئة التطوير المحلية الخاصة بك:

قم بتنزيل الرمز

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

افتح موجه الأوامر في الدليل الذي تختاره. نفذ الأمر التالي لنسخ مستودع GitHubAzure IoT Java SDKs and Libraries في هذا الموقع:

git clone https://github.com/Azure/azure-iot-sdk-java.git

توقع أن تستغرق هذه العملية دقائق عدة لإكمالها.

بناء التعليمة البرمجية

انتقل إلى المجلد الجذر لعينة وحدة التحكم في درجة الحرارة في مستودع Java SDK المستنسخ وقم ببنائه:

cd azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample
mvn clean package

تشغيل نموذج الجهاز

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

  • IOTHUB_DEVICE_SECURITY_TYPEمع القيمة DPS.
  • IOTHUB_DEVICE_DPS_ID_SCOPE مع نطاق معرف DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_IDمع القيمة my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEYمع مفتاح التسجيل الأساسي.
  • IOTHUB_DEVICE_DPS_ENDPOINTمع القيمة global.azure-devices-provisioning.net

لتشغيل نموذج التطبيق، انتقل إلى المجلد /device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample وقم بتشغيل الأمر التالي:

mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.device.TemperatureController"

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

استخدام مستكشف إنترنت الأشياء الخاص بـAzure للتحقق من صحة التعليمات البرمجية

بعد بدء نموذج عميل الجهاز، استخدم أداة مستكشف Azure IoT للتحقق من عملها.

  1. افتح مستكشف Azure IoT.

  2. في صفحة IoT hubs ، إذا لم تكن قد أضفت بالفعل اتصالا إلى مركز IoT، فحدد + Add connection. أدخل سلسلة الاتصال لمركز IoT الذي أنشأته مسبقا وحدد حفظ.

  3. في صفحة IoT أجهزة التوصيل و التشغيل Settings، حدد + Add > Local folder وحدد مجلد النماذج المحلية حيث حفظت ملفات النموذج.

  4. في صفحة IoT hubs ، انقر فوق اسم المركز الذي تريد العمل معه. يمكنك مشاهدة قائمة الأجهزة المسجلة في مركز IoT.

  5. انقر فوق معرف الجهاز الخاص بالجهاز الذي قمت بإنشائه مسبقا.

  6. توضح القائمة الموجودة على اليسار أنواع المعلومات المختلفة المتاحة للجهاز.

  7. حدد مكونات أجهزة التوصيل و التشغيل IoT لعرض معلومات النموذج لجهازك.

  8. يمكنك عرض المكونات المختلفة للجهاز. المكون الافتراضي وأي مكون إضافي. حدد مكونًا للعمل معه.

  9. حدد صفحة بيانات تتبع الاستخدام ثم حدد البدء لعرض بيانات تتبع الاستخدام التي يرسلها الجهاز لهذا المكون.

  10. حدد صفحة الخصائص (للقراءة فقط) لعرض خصائص القراءة فقط التي تم الإبلاغ عنها لهذا المكون.

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

  12. حدد خاصية باسمها، وأدخل قيمة جديدة لها، وحدد تحديث القيمة المطلوبة.

  13. لمشاهدة القيمة الجديدة تظهر، حدد الزر تحديث .

  14. حدد صفحة الأوامر لعرض جميع الأوامر لهذا المكون.

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

مراجعة الرمز

يستخدم هذا النموذج جهاز تحكم بدرجة حرارة IoT Plug and Play. يستخدم النموذج المُنفذ لهذه العينة مكونات متعددة. يحدد ملف نموذج لغة تعريف التوائم الرقمية (DTDL) لجهاز درجة الحرارة بيانات تتبع الاستخدام والخصائص والأوامر التي ينفذها الجهاز.

تستخدم التعليمات البرمجية للجهاز الفئة القياسية DeviceClient للاتصال بمركز IoT. يرسل الجهاز معرف الطراز الخاص بنموذج DTDL الذي ينفذه في طلب الاتصال. عندما يرسل الجهاز معرف نموذج، يصبح جهاز IoT Plug and Play:

private static void initializeDeviceClient() throws URISyntaxException, IOException {
    ClientOptions options = new ClientOptions();
    options.setModelId(MODEL_ID);
    deviceClient = new DeviceClient(deviceConnectionString, protocol, options);

    deviceClient.registerConnectionStatusChangeCallback((status, statusChangeReason, throwable, callbackContext) -> {
        log.debug("Connection status change registered: status={}, reason={}", status, statusChangeReason);

        if (throwable != null) {
            log.debug("The connection status change was caused by the following Throwable: {}", throwable.getMessage());
            throwable.printStackTrace();
        }
    }, deviceClient);

    deviceClient.open();
}

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

private static final String MODEL_ID = "dtmi:com:example:Thermostat;1";

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

deviceClient.subscribeToDeviceMethod(new MethodCallback(), null, new MethodIotHubEventCallback(), null);

يوجد معالجات منفصلة لتحديثات الخاصية المطلوبة على مكوني منظم الحرارة:

deviceClient.startDeviceTwin(new TwinIotHubEventCallback(), null, new GenericPropertyUpdateCallback(), null);
Map<Property, Pair<TwinPropertyCallBack, Object>> desiredPropertyUpdateCallback = Stream.of(
        new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
                new Property(THERMOSTAT_1, null),
                new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_1)),
        new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
                new Property(THERMOSTAT_2, null),
                new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_2))
).collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue));

deviceClient.subscribeToTwinDesiredProperties(desiredPropertyUpdateCallback);

يرسل نموذج التعليمات البرمجية القصاصة البرمجية من كل مكون لمنظم الحرارة:

sendTemperatureReading(THERMOSTAT_1);
sendTemperatureReading(THERMOSTAT_2);

sendTemperatureReadingيستخدم الأسلوب PnpHelper الفئة لإنشاء رسائل لكل مكون:

Message message = PnpHelper.createIotHubMessageUtf8(telemetryName, currentTemperature, componentName);

PnpHelperتحتوي الفئة على نماذج أساليب أخرى يمكنك استخدامها مع نموذج مكون متعدد.

استخدم أداة مستكشف إنترنت الأشياء الخاص بـ Azure لعرض القصاصة البرمجية والخصائص من اثنين من مكوني منظم الحرارة:

جهاز مكون متعدد في مستكشف إنترنت الأشياء الخاص بـ Azure

يمكنك أيضًا استخدام أداة مستكشف إنترنت الأشياء الخاص بـ Azure لاستدعاء الأوامر في أي من مكوني الحرارة، أو في المكون الافتراضي.

يوضح لك هذا البرنامج التعليمي كيفية إنشاء نموذج لتطبيق جهاز IoT Plug and Play مع المكونات، وتوصيله بمركز IoT الخاص بك، واستخدام أداة مستكشف Azure IoT لعرض المعلومات التي يرسلها إلى المركز. تمت كتابة نموذج التطبيق لـ Node.js وتضمينه في Azure IoT Hub Device SDK لـ Node.js. يمكن لمنشئ الحلول استخدام أداة مستكشف إنترنت الأشياء الخاص بـAzure لفهم قدرات جهاز IoT Plug وPlay دون الحاجة إلى عرض أي رمز للجهاز.

استعراض التعليمة البرمجية

في هذا البرنامج التعليمي، سوف تتعلّم:

  • تحميل نموذج التعليمات البرمجية.
  • تشغيل نموذج تطبيق الجهاز والتحقق من اتصاله بـIoT hub الخاصة بك.
  • مراجعة التعليمة البرمجية للمصدر.

المتطلبات الأساسية

قبل المتابعة، تأكد من إعداد بيئتك، بما في ذلك مركز IoT.

لإكمال هذا البرنامج التعليمي، ستحتاج إلى وجود Node.js لجهاز التطوير الخاص بك. يمكنك تنزيل أحدث إصدار موصى به لمنصات متعددة من nodejs.org.

يمكن التحقق من الإصدار الحالي من Node.js على جهاز التطوير باستخدام الأمر التالي:

node --version

قم بتنزيل الرمز

في حالة إكمالكللبرنامج التعليمي: قم بتوصيل نموذج تطبيق جهاز IoT Plug و Play الذي يعمل بنظام التشغيل Windows بـ IoT Hub (Node)، فقد تمكنت من استنساخ المستودع بالفعل.

افتح موجه الأوامر في الدليل الذي تختاره. نفّذ الأمر التالي لاستنساخ مستودع Microsoft Azure IoT SDK Node.js GitHub في هذا الموقع:

git clone https://github.com/Azure/azure-iot-sdk-node

تثبيت المكتبات المطلوبة

يمكنك استخدام الجهاز SDK لإنشاء نموذج التعليمة البرمجية المضمنة. ويحاكي التطبيق الذي تقوم بإنشائه جهاز Plug وPlay المزود بمكونات متعددة تتصل بـIOT Hub. التطبيق يرسل القياس والبث عن بعد والخصائص ويتلقى الأوامر.

  1. في النافذة الطرفية المحلية، انتقل إلى مجلد المستودع المستنسخ الخاص بك وانتقل إلى مجلد /azure-iot-sdk-node/device/samples/pnp. ومن ثم شغّل الأمر التالي لتثبيت المكتبات المطلوبة:
npm install

يقوم هذا الأمر بتثبيت ملفات npm ذات الصلة المطلوبة لتشغيل العينات في المجلد.

مراجعة الرمز

انتقل إلى مجلد azure-iot-sdk-node/device/samples/javascript .

يحتوي مجلد azure-iot-sdk-node/device/samples/javascript على نموذج التعليمات البرمجية لجهاز وحدة تحكم درجة حرارة IoT أجهزة التوصيل و التشغيل.

تقوم التعليمة البرمجية الموجودة في ملف pnp_temperature_controller.js بتشغيل جهاز تحكم بدرجة حرارة IoT Plug and Play. يستخدم النموذج المُنفذ لهذه العينة مكونات متعددة. يحدد ملف نموذج لغة تعريف التوائم الرقمية (DTDL) لجهاز درجة الحرارة بيانات تتبع الاستخدام والخصائص والأوامر التي ينفذها الجهاز.

افتح ملف pnp_temperature_controller.js في محرر تعليمات برمجية من اختيارك. توضح عينة التعليمات البرمجية طريقة القيام بما يلي:

  • modelId حدد هذا هو DTMI للجهاز الذي تقوم بتنفيذه. هذا الـDTMI معرّف من قبل المستخدم ويجب أن يتطابق مع DTMI لنموذج DTDL للتحكم في درجة الحرارة.

  • تنفيذ المكونات المحددة في نموذج DTDL للتحكم في معدل درجة الحرارة. يجب أن تقوم المكونات الموجودة في وحدة التحكم في درجة الحرارة الحقيقية بتنفيذ هاتين الواجهتين. نُشرت هاتان الواجهتان بالفعل في أحد المستودعات المركزية. في هذه العينة، هاتان الواجهتان هما:

    • منظم حرارة
    • معلومات جهاز مطوّرة عن طريق Azure
  • عرّف أسماء المكونات. تحتوي هذه العينة على منظمي حرارة ومكون معلومات واحد للجهاز.

  • تعريف أسماء الأوامر للأوامر التي يستجيب لها الجهاز.

  • ضع تعريفًا serialNumber للثابت. serialNumberيثبت على أي جهاز معين.

  • عرف لمعالجات الأوامر.

  • عرّف الوظائف لإرسال استجابات الأوامر.

  • عرّف وظائف المساعد لتسجيل طلبات الأوامر.

  • عرّف وظيفة مساعد لإنشاء الخصائص.

  • عرّف وحدة الإصغاء لتقبل تحديثات الخصائص.

  • عرّف وظيفة لإرسال بيانات تتبع الاستخدام من هذا الجهاز. ترسل كل من منظمات الحرارة والمكون الافتراضي بيانات تتبع الاستخدام. تتلقى هذه الوظيفة اسم المكون كمعلمة.

  • عرّف وظيفة main التي تقوم بما يلي:

    • تستخدم جهاز SDK لإنشاء عميل له والاتصال IoT hub الخاصة بك. إرسال الجهازmodelId بحيث يمكن لمركز IoT تحديد الجهاز باعتباره جهاز IoT Plug وPlay.

    • تبدأ الاستماع لطلبات الأوامر باستخدام الوظيفةonDeviceMethod. تقوم الوظيفة بإعداد وحدة الإصغاء لطلبات الأوامر من الخدمة:

      • يعرّف الجهاز DTDL reboot وأوامرgetMaxMinReport.
      • تحدد الوظيفة commandHandler طريقة استجابة الجهاز للأمر.
    • بدء إرسال بيانات تتبع الاستخدام باستخدام setIntervalوsendTelemetry.

    • تستخدم الوظيفة helperCreateReportedPropertiesPatch لإنشاء الخصائص وupdateComponentReportedProperties لتحديث الخصائص.

    • يستخدم desiredPropertyPatchListener للاستماع لتحديثات الخصائص.

    • تعطيل جميع وحدات الإصغاء والمهام ثم إنهاء الحلقة عند الضغط على Q أو q.

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

  • IOTHUB_DEVICE_SECURITY_TYPEمع القيمة DPS.
  • IOTHUB_DEVICE_DPS_ID_SCOPE مع نطاق معرف DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_IDمع القيمة my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEYمع مفتاح التسجيل الأساسي.
  • IOTHUB_DEVICE_DPS_ENDPOINTمع القيمة global.azure-devices-provisioning.net

لمعرفة المزيد حول تكوين العينة، راجع نموذج readme.

بعد أن تعرّفت الآن على التعليمات البرمجية، استخدم الأمر التالي لتشغيل العينة:

node pnp_temperature_controller.js

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

رسائل تأكيد الجهاز

الاحتفاظ بالعينة قيد التشغيل أثناء إكمال الخطوات التالية.

استخدام مستكشف إنترنت الأشياء الخاص بـAzure للتحقق من صحة التعليمات البرمجية

بعد بدء نموذج عميل الجهاز، استخدم أداة مستكشف Azure IoT للتحقق من عملها.

  1. افتح مستكشف Azure IoT.

  2. في صفحة IoT hubs ، إذا لم تكن قد أضفت بالفعل اتصالا إلى مركز IoT، فحدد + Add connection. أدخل سلسلة الاتصال لمركز IoT الذي أنشأته مسبقا وحدد حفظ.

  3. في صفحة IoT أجهزة التوصيل و التشغيل Settings، حدد + Add > Local folder وحدد مجلد النماذج المحلية حيث حفظت ملفات النموذج.

  4. في صفحة IoT hubs ، انقر فوق اسم المركز الذي تريد العمل معه. يمكنك مشاهدة قائمة الأجهزة المسجلة في مركز IoT.

  5. انقر فوق معرف الجهاز الخاص بالجهاز الذي قمت بإنشائه مسبقا.

  6. توضح القائمة الموجودة على اليسار أنواع المعلومات المختلفة المتاحة للجهاز.

  7. حدد مكونات أجهزة التوصيل و التشغيل IoT لعرض معلومات النموذج لجهازك.

  8. يمكنك عرض المكونات المختلفة للجهاز. المكون الافتراضي وأي مكون إضافي. حدد مكونًا للعمل معه.

  9. حدد صفحة بيانات تتبع الاستخدام ثم حدد البدء لعرض بيانات تتبع الاستخدام التي يرسلها الجهاز لهذا المكون.

  10. حدد صفحة الخصائص (للقراءة فقط) لعرض خصائص القراءة فقط التي تم الإبلاغ عنها لهذا المكون.

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

  12. حدد خاصية باسمها، وأدخل قيمة جديدة لها، وحدد تحديث القيمة المطلوبة.

  13. لمشاهدة القيمة الجديدة تظهر، حدد الزر تحديث .

  14. حدد صفحة الأوامر لعرض جميع الأوامر لهذا المكون.

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

يوضح لك هذا البرنامج التعليمي كيفية إنشاء نموذج لتطبيق جهاز IoT Plug and Play مع المكونات، وتوصيله بمركز IoT الخاص بك، واستخدام أداة مستكشف Azure IoT لعرض المعلومات التي يرسلها إلى المركز. تمت كتابة نموذج التطبيق بلغة Python وتم تضمينه في Azure IoT device SDK for Python. يمكن لمنشئ الحلول استخدام أداة مستكشف إنترنت الأشياء الخاص بـAzure لفهم قدرات جهاز IoT Plug وPlay دون الحاجة إلى عرض أي رمز للجهاز.

استعراض التعليمة البرمجية

في هذا البرنامج التعليمي، سوف تتعلّم:

  • تحميل نموذج التعليمات البرمجية.
  • تشغيل نموذج تطبيق الجهاز والتحقق من اتصاله بـIoT hub الخاصة بك.
  • مراجعة التعليمة البرمجية للمصدر.

المتطلبات الأساسية

قبل المتابعة، تأكد من إعداد بيئتك، بما في ذلك مركز IoT.

يمكنك إكمال هذا البرنامج التعليمي على Linux أو Windows. أوامر shell في هذا البرنامج التعليمي تتبع اصطلاح Linux لفواصل المسار ''،/إذا كنت تتابع على Windows فتأكد من تبديل هذه الفواصل بـ '\'.

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

python --version

يمكنك تنزيل أحدث إصدار موصى به لمنصات متعددة من python.org.

قم بتنزيل الرمز

يتم نشر azure-iot-device ك PIP.

في بيئة Python المحلية، قم بتثبيت الحزمة كما يلي:

pip install azure-iot-device

إذا أكملت البرنامج التعليمي: قم بتوصيل نموذج تطبيق جهاز IoT Plug and Play الذي يعمل على Windows إلى IoT Hub (Python) ، فقد قمت بالفعل باستنساخ المستودع.

استنساخ مستودع Python SDK IoT:

git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python

مراجعة الرمز

يستخدم هذا النموذج جهاز تحكم بدرجة حرارة IoT Plug and Play. يستخدم النموذج المُنفذ لهذه العينة مكونات متعددة. يحدد ملف نموذج لغة تعريف التوائم الرقمية (DTDL) لجهاز درجة الحرارة بيانات تتبع الاستخدام والخصائص والأوامر التي ينفذها الجهاز.

يحتوي المجلد azure-iot-sdk-python/samples/pnp على نموذج التعليمات البرمجية لجهاز IoT أجهزة التوصيل و التشغيل. الملفات الخاصة بعينة وحدة تحكم درجة الحرارة هي:

  • temp_controller_with_thermostats.py
  • pnp_helper.py

يحتوي جهاز التحكم في درجة الحرارة على مكونات متعددة ومكون افتراضي، بناءً على نموذج DTDL للتحكم في درجة الحرارة.

افتح ملف temp_controller_with_thermostats.py في محرر من اختيارك. التعليمات البرمجية في هذا الملف:

  1. استيراد pnp_helper.py للحصول على الوصول إلى أساليب المساعدة.

  2. يعرّف معرّفين للنماذج الرقمية المزدوجة (DTMIs) اللذان يمثلان بشكل فريد واجهتين مختلفتين، معرّفين في نموذج DTDL. يجب أن تقوم المكونات الموجودة في وحدة التحكم في درجة الحرارة الحقيقية بتنفيذ هاتين الواجهتين. نُشرت هاتان الواجهتان بالفعل في أحد المستودعات المركزية. يجب أن تكون DTMIs معروفة للمستخدم وأن تختلف اعتماداً على سيناريو تنفيذ الجهاز. بالنسبة للعينة الحالية، تمثل هاتان الواجهتان:

    • منظم حرارة
    • معلومات الجهاز التي تم تطويرها بواسطة Azure.
  3. تحديد DTMI model_id للجهاز الجاري تنفيذه. DTMI هو معرف من قبل المستخدم ويجب أن يتطابق مع DTMI في ملف نموذج DTDL.

  4. تعريف الأسماء المعطاة للمكونات الموجودة في ملف DTDL. هناك نوعان من منظمات الحرارة في DTDL ومكون واحد من معلومات الجهاز. يتم تعريف ثابت يسمى serial_number أيضاً في المكون الافتراضي. لا يمكن تغييرserial_number لجهاز.

  5. تعريف تطبيقات معالج الأوامر. تحدد هذه المعالجات ما يفعله الجهاز عندما يتلقى طلبات الأوامر.

  6. تحديد الدوال لإنشاء استجابة الأمر. تحدد هذه الوظائف كيفية استجابة الجهاز لطلبات الأوامر. إنشاء دالات استجابة الأمر إذا كان الأمر يحتاج إلى إرسال استجابة مخصصة إلى IoT hub. إذا لم يتم توفير دالة استجابة لأمر، يتم إرسال استجابة عامة. في هذا النموذج، فقط الأمر getMaxMinReport لديه استجابة مخصصة.

  7. تعريف دالة لإرسال القياس عن بعد من هذا الجهاز. ترسل كل من منظمات الحرارة والمكون الافتراضي القياس عن بعد. تحتوي هذه الدالة على معلمة اسم مكون اختياري لتمكينها من تحديد المكون الذي أرسل القياس عن بعد.

  8. تعريف وحدة إصغاء لطلبات الأوامر.

  9. تعريف وحدة إصغاء لتحديثات الخاصية المطلوبة.

  10. لديه main دالة:

    • تستخدم جهاز SDK لإنشاء عميل له والاتصال IoT hub الخاصة بك. يرسل الجهاز model_id بحيث يمكن لمحور IoT تحديد الجهاز كجهاز توصيل وتشغيل IoT.

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

    • تحديث خصائص قابل للقراءة لمكوناته عن طريق الاستدعاء patch_twin_reported_properties .

    • تبدأ الاستماع لطلبات الأوامر باستخدام الوظيفةexecute_command_listener. تقوم الدالة بإعداد وحدة إصغاء لطلبات الأوامر من الخدمة. عند إعداد وحدة الاستماع، فإنك توفر method_nameو user_command_handlerاختيارية create_user_response_handler كمعلمات.

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

    • تبدأ بإرسال القياس عن بعد باستخدام send_telemetry. يستخدم نموذج التعليمات البرمجية حلقة لاستدعاء ثلاث دوال إرسال القياس عن بعد. يتم استدعاء كل واحد كل ثماني ثوان

    • تعطيل جميع وحدات الإصغاء والمهام ثم إنهاء الحلقة عند الضغط على Q أو q.

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

  • IOTHUB_DEVICE_SECURITY_TYPEمع القيمة DPS.
  • IOTHUB_DEVICE_DPS_ID_SCOPE مع نطاق معرف DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_IDمع القيمة my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEYمع مفتاح التسجيل الأساسي.
  • IOTHUB_DEVICE_DPS_ENDPOINTمع القيمة global.azure-devices-provisioning.net

لمعرفة المزيد حول تكوين العينة، راجع نموذج readme.

استخدم الأمر التالي لتشغيل النموذج:

python temp_controller_with_thermostats.py

يرسل جهاز العينة رسائل القياس عن بعد كل بضع ثوان إلى IoT hub الخاصة بك.

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

رسائل تأكيد الجهاز

الاحتفاظ بالعينة قيد التشغيل أثناء إكمال الخطوات التالية.

استخدام مستكشف إنترنت الأشياء الخاص بـAzure للتحقق من صحة التعليمات البرمجية

بعد بدء نموذج عميل الجهاز، استخدم أداة مستكشف Azure IoT للتحقق من عملها.

  1. افتح مستكشف Azure IoT.

  2. في صفحة IoT hubs ، إذا لم تكن قد أضفت بالفعل اتصالا إلى مركز IoT، فحدد + Add connection. أدخل سلسلة الاتصال لمركز IoT الذي أنشأته مسبقا وحدد حفظ.

  3. في صفحة IoT أجهزة التوصيل و التشغيل Settings، حدد + Add > Local folder وحدد مجلد النماذج المحلية حيث حفظت ملفات النموذج.

  4. في صفحة IoT hubs ، انقر فوق اسم المركز الذي تريد العمل معه. يمكنك مشاهدة قائمة الأجهزة المسجلة في مركز IoT.

  5. انقر فوق معرف الجهاز الخاص بالجهاز الذي قمت بإنشائه مسبقا.

  6. توضح القائمة الموجودة على اليسار أنواع المعلومات المختلفة المتاحة للجهاز.

  7. حدد مكونات أجهزة التوصيل و التشغيل IoT لعرض معلومات النموذج لجهازك.

  8. يمكنك عرض المكونات المختلفة للجهاز. المكون الافتراضي وأي مكون إضافي. حدد مكونًا للعمل معه.

  9. حدد صفحة بيانات تتبع الاستخدام ثم حدد البدء لعرض بيانات تتبع الاستخدام التي يرسلها الجهاز لهذا المكون.

  10. حدد صفحة الخصائص (للقراءة فقط) لعرض خصائص القراءة فقط التي تم الإبلاغ عنها لهذا المكون.

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

  12. حدد خاصية باسمها، وأدخل قيمة جديدة لها، وحدد تحديث القيمة المطلوبة.

  13. لمشاهدة القيمة الجديدة تظهر، حدد الزر تحديث .

  14. حدد صفحة الأوامر لعرض جميع الأوامر لهذا المكون.

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

تنظيف الموارد

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

يمكنك حذف كل من الموزع والجهاز المسجل مرة واحدة عن طريق حذف مجموعة الموارد بأكملها باستخدام أمر Azure CLI التالي. لا تستخدم هذا الأمر إذا كانت هذه الموارد تشارك مجموعة موارد مع موارد أخرى تريد الاحتفاظ بها.

az group delete --name <YourResourceGroupName>

لحذف مركز IoT فقط، تشغّل الأمر التالي باستخدام Azure CLI:

az iot hub delete --name <YourIoTHubName>

لحذف هوية الجهاز التي قمت بتسجيلها مع لوحة الوصل الخاصة بك، IoT فقط، قم بتشغيل الأمر التالي باستخدام Azure CLI:

az iot hub device-identity delete --hub-name <YourIoTHubName> --device-id <YourDeviceID>

قد ترغب أيضًا في إزالة ملفات العينات المستنسخة من جهاز التطوير.

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

في هذا البرنامج التعليمي، تعلمت كيفية توصيل جهاز IoT Plug and Play بمكونات إلى مركز IoT. لمعرفة المزيد حول طرازات أجهزة IoT Plug and Play، راجع: