مشاركة عبر


بدء استخدام هويات وحدة IoT Hub وتوائم هوية الوحدة النمطية

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

إشعار

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

توضح لك هذه المقالة كيفية تطوير نوعين من التطبيقات:

  • تم الإبلاغ عن تطبيقات الجهاز التي تعرض خصائص هوية الوحدة النمطية المزدوجة وتحدثها وتعالج الطلبات لتحديث الخصائص المطلوبة.
  • تطبيقات الخدمة التي يمكنها قراءة وتعيين الخصائص المطلوبة لهوية الوحدة النمطية.

إشعار

تهدف هذه المقالة إلى إكمال نماذج Azure IoT SDKs المشار إليها من داخل هذه المقالة. يمكنك استخدام أدوات SDK لإنشاء كل من الجهاز والتطبيقات الخلفية.

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

  • IoT hub

  • جهاز مركز IoT

  • هوية وحدة جهاز مركز IoT

  • إذا كان التطبيق الخاص بك يستخدم بروتوكول MQTT، فتأكد من أن المنفذ 8883 مفتوح في جدار الحماية الخاص بك. يتصل بروتوكول MQTT عبر المنفذ 8883. قد يُحظر هذا المنفذ في بعض بيئات الشبكات التعليمية، وشبكات الشركات. لمزيد من المعلومات وطرق التغلب على هذه المشكلة، راجع الاتصال بمركز IoT (MQTT).

  • يتطلب Visual Studio

نظرة عامة

توضح هذه المقالة كيفية استخدام Azure IoT SDK ل .NET لإنشاء رمز تطبيق الجهاز والخدمة الخلفية لتوائم هوية الوحدة النمطية.

إنشاء تطبيق جهاز

يصف هذا القسم كيفية استخدام التعليمات البرمجية لتطبيق الجهاز من أجل:

  • استرداد هوية الوحدة النمطية المزدوجة وفحص الخصائص المبلغ عنها
  • تحديث خصائص هوية الوحدة النمطية التي تم الإبلاغ عنها
  • إنشاء معالج رد اتصال تحديث الخاصية المطلوبة للوحدة النمطية

هام

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

حزمة NuGet للجهاز المطلوب

تتطلب تطبيقات عميل الجهاز المكتوبة بلغة C# حزمة Microsoft.Azure.Devices.Client NuGet.

أضف هذه using العبارات لاستخدام مكتبة الجهاز.

using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;

الاتصال بجهاز

تعرض فئة ModuleClient جميع الأساليب المطلوبة للتفاعل مع توائم هوية الوحدة النمطية من الجهاز.

اتصل بالجهاز باستخدام أسلوب CreateFromConnectionString مع سلسلة الاتصال هوية الوحدة النمطية.

يتصل الاتصال CreateFromConnectionString بدون معلمة نقل باستخدام نقل AMQP الافتراضي.

يتصل هذا المثال بالجهاز باستخدام نقل AMQP الافتراضي.

static string ModuleConnectionString = "{Device module identity connection string}";
private static ModuleClient _moduleClient = null;

_moduleClient = ModuleClient.CreateFromConnectionString(ModuleConnectionString, null);

إشعار

لا يدعم C#/.NET اتصال تطبيق جهاز بوحدة نمطية مزدوجة لوحدة IoT Hub باستخدام شهادة.

استرداد هوية الوحدة النمطية المزدوجة وفحص الخصائص

استدعاء GetTwinAsync لاسترداد خصائص هوية الوحدة النمطية الحالية في كائن Twin .

يسترد هذا المثال ويعرض خصائص هوية الوحدة النمطية المزدوجة بتنسيق JSON.

Console.WriteLine("Retrieving twin...");
Twin twin = await _moduleClient.GetTwinAsync();
Console.WriteLine("\tModule identity twin value received:");
Console.WriteLine(JsonConvert.SerializeObject(twin.Properties));

تحديث خصائص هوية الوحدة النمطية المزدوجة المبلغ عنها

لتحديث خاصية مزدوجة تم الإبلاغ عنها:

  1. إنشاء كائن TwinCollection لتحديث الخاصية التي تم الإبلاغ عنها
  2. تحديث خاصية واحدة أو أكثر تم الإبلاغ عنها داخل TwinCollection الكائن
  3. استخدام UpdateReportedPropertiesAsync لدفع تغييرات الخصائص المبلغ عنها إلى خدمة مركز IoT

على سبيل المثال:

try
{
  Console.WriteLine("Sending sample start time as reported property");
  TwinCollection reportedProperties = new TwinCollection();
  reportedProperties["DateTimeLastAppLaunch"] = DateTime.UtcNow;
  await _moduleClient.UpdateReportedPropertiesAsync(reportedProperties);
}
catch (Exception ex)
{
   Console.WriteLine();
   Console.WriteLine("Error in sample: {0}", ex.Message);
}

إنشاء معالج رد اتصال لتحديث الخاصية المطلوبة

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

على سبيل المثال، يقوم هذا الاستدعاء بإعداد النظام لإعلام أسلوب يسمى OnDesiredPropertyChangedAsync كلما تم تغيير خاصية الوحدة النمطية المطلوبة.

await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChangedAsync, null);

يتم تمرير خصائص هوية الوحدة النمطية المزدوجة إلى أسلوب رد الاتصال ك TwinCollection ويمكن فحصها كهياكل KeyValuePair .

يتلقى هذا المثال تحديثات الخاصية المطلوبة ك TwinCollection، ثم يتكرر ويطبع KeyValuePair تحديثات المجموعة. بعد التكرار الحلقي عبر KeyValuePair المجموعة، تستدعي UpdateReportedPropertiesAsync التعليمات البرمجية لتحديث الخاصية التي DateTimeLastDesiredPropertyChangeReceived تم الإبلاغ عنها للحفاظ على آخر وقت محدث محدث.

private async Task OnDesiredPropertyChangedAsync(TwinCollection desiredProperties, object userContext)
{
   var reportedProperties = new TwinCollection();

   Console.WriteLine("\tDesired properties requested:");
   Console.WriteLine($"\t{desiredProperties.ToJson()}");

   // For the purpose of this sample, we'll blindly accept all twin property write requests.
   foreach (KeyValuePair<string, object> desiredProperty in desiredProperties)
   {
         Console.WriteLine($"Setting {desiredProperty.Key} to {desiredProperty.Value}.");
         reportedProperties[desiredProperty.Key] = desiredProperty.Value;
   }

   Console.WriteLine("\tAlso setting current time as reported property");
   reportedProperties["DateTimeLastDesiredPropertyChangeReceived"] = DateTime.UtcNow;

   await _moduleClient.UpdateReportedPropertiesAsync(reportedProperties);
}

نموذج وحدة SDK

يوفر Azure IoT SDK ل .NET نماذج عمل لتطبيقات الجهاز التي تتعامل مع المهام المزدوجة لهوية الوحدة النمطية. لمزيد من المعلومات، راجع:

إنشاء تطبيق خلفية

يصف هذا القسم كيفية قراءة وتحديث حقول هوية الوحدة النمطية.

تعرض فئة RegistryManager جميع الأساليب المطلوبة لإنشاء تطبيق خلفية للتفاعل مع توائم هوية الوحدة النمطية من الخدمة.

حزمة NuGet للخدمة المطلوبة

تتطلب تطبيقات الخدمة الخلفية حزمة Microsoft.Azure.Devices NuGet.

أضف هذه using العبارات لاستخدام مكتبة الخدمة.

using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;

الاتصال بمركز IoT

يمكنك توصيل خدمة خلفية ب IoT Hub باستخدام الطرق التالية:

  • نهج الوصول المشترك
  • Microsoft Entra

هام

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

الاتصال باستخدام نهج وصول مشترك

قم بتوصيل تطبيق الواجهة الخلفية بمركز IoT باستخدام CreateFromConnectionString.

UpdateModuleAsync يتطلب الأسلوب المستخدم في هذا القسم إذن نهج الوصول المشترك ل Service Connect لإضافة الخصائص المطلوبة إلى وحدة نمطية. كمعلمة ل CreateFromConnectionString، قم بتوفير نهج وصول مشترك سلسلة الاتصال يتضمن إذن Service Connect. لمزيد من المعلومات حول نهج الوصول المشترك، راجع التحكم في الوصول إلى IoT Hub باستخدام توقيعات الوصول المشترك.

على سبيل المثال:

static RegistryManager registryManager;
static string connectionString = "{IoT hub shared access policy connection string}";
registryManager = RegistryManager.CreateFromConnectionString(connectionString);

الاتصال باستخدام Microsoft Entra

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

تكوين تطبيق Microsoft Entra

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

  • سر العميل
  • شهادة
  • بيانات اعتماد الهوية الموحدة

قد تتطلب تطبيقات Microsoft Entra أذونات دور محددة اعتمادا على العمليات التي يتم تنفيذها. على سبيل المثال، مطلوب IoT Hub Twin Contributor لتمكين الوصول للقراءة والكتابة إلى جهاز IoT Hub وتوائم الوحدة النمطية. لمزيد من المعلومات، راجع إدارة الوصول إلى IoT Hub باستخدام تعيين دور Azure RBAC.

لمزيد من المعلومات حول إعداد تطبيق Microsoft Entra، راجع التشغيل السريع: تسجيل تطبيق باستخدام النظام الأساسي للهويات في Microsoft.

المصادقة باستخدام DefaultAzureCredential

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

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

يتطلب Microsoft Entra حزم NuGet هذه والعبارات المقابلة using :

  • Azure.Core
  • Azure.Identity
using Azure.Core;
using Azure.Identity;

في هذا المثال، تتم إضافة سر عميل تسجيل تطبيق Microsoft Entra ومعرف العميل ومعرف المستأجر إلى متغيرات البيئة. يتم استخدام متغيرات البيئة هذه من قبل DefaultAzureCredential لمصادقة التطبيق. نتيجة مصادقة Microsoft Entra الناجحة هي بيانات اعتماد رمز أمان يتم تمريرها إلى أسلوب اتصال IoT Hub.

string clientSecretValue = "xxxxxxxxxxxxxxx";
string clientID = "xxxxxxxxxxxxxx";
string tenantID = "xxxxxxxxxxxxx";

Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", clientSecretValue);
Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", clientID);
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", tenantID);

TokenCredential tokenCredential = new DefaultAzureCredential();

يمكن بعد ذلك تمرير TokenCredential الناتج إلى أسلوب الاتصال ب IoT Hub لأي عميل SDK يقبل بيانات اعتماد Microsoft Entra:

في هذا المثال، TokenCredential يتم تمرير إلى ServiceClient.Create لإنشاء كائن اتصال ServiceClient .

string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);

في هذا المثال، TokenCredential يتم تمرير إلى RegistryManager.Create لإنشاء كائن RegistryManager .

string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Code sample

للحصول على عينة عمل من مصادقة خدمة Microsoft Entra، راجع نموذج المصادقة المستندة إلى الدور.

قراءة وتحديث حقول هوية الوحدة النمطية

استدعاء GetModuleAsync لاسترداد حقول هوية الوحدة النمطية الحالية في كائن وحدة نمطية .

Module تتضمن properties الفئة التي تتوافق مع أقسام الوحدة النمطية المزدوجة. استخدم خصائص فئة الوحدة النمطية لعرض وتحديث حقول هوية الوحدة النمطية المزدوجة. يمكنك استخدام Module خصائص الكائن لتحديث حقول متعددة قبل كتابة التحديثات إلى الجهاز باستخدام UpdateModuleAsync.

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

يسترد هذا المثال وحدة نمطية في كائن Module ، ويحدث الخاصية moduleLastActivityTime ، ثم يحدث الوحدة النمطية في IoT Hub باستخدام UpdateModuleAsync.

// Retrieve the module
var module = await registryManager.GetModuleAsync("myDeviceId","myModuleId");

// Update the module object
module.LastActivityTime = DateTime.Now;

// Apply the patch to update the device twin tags section
try
{
   await registryManager.UpdateModuleAsync(module);
}
catch (Exception e)
{
   console.WriteLine("Module update failed.", e.Message);
}

واجهة برمجة تطبيقات الوحدة النمطية الأخرى

عينة خدمة SDK

يوفر Azure IoT SDK ل .NET عينة عمل لتطبيق خدمة يعالج المهام المزدوجة لهوية الوحدة النمطية. لمزيد من المعلومات، راجع اختبارات إدارة التسجيل E2E.

  • يوصى بإصدار 3.7 من Python أو أحدث. تأكد من استخدام التثبيت 32 بت أو 64 بت كما هو مطلوب من قبل الإعداد الخاص بك. عند المطالبة في أثناء التثبيت، تأكد من إضافة Python إلى متغيرات البيئة الخاصة بالنظام الأساسي.

نظرة عامة

توضح هذه المقالة كيفية استخدام Azure IoT SDK ل Python لإنشاء رمز تطبيق خدمة الجهاز والواجهة الخلفية لتوائم هوية الوحدة النمطية.

تثبيت الحزم

يجب تثبيت مكتبة جهاز azure-iot لإنشاء تطبيقات الجهاز.

pip install azure-iot-device

يجب تثبيت مكتبة azure-iot-hub لإنشاء تطبيقات خدمة الواجهة الخلفية.

pip install azure-iot-hub

يتم استخدام مكتبة msrest لالتقاط استثناءات HTTPOperationError.

pip install msrest

إنشاء تطبيق جهاز

يصف هذا القسم كيفية استخدام التعليمات البرمجية لتطبيق الجهاز من أجل:

  • استرداد هوية الوحدة النمطية المزدوجة وفحص الخصائص المبلغ عنها
  • تحديث خصائص هوية الوحدة النمطية المزدوجة المبلغ عنها
  • إنشاء معالج رد اتصال تحديث الخاصية المطلوبة لهوية الوحدة النمطية

هام

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

عبارات الاستيراد

أضف هذه import العبارة لاستخدام مكتبة الجهاز.

# import the device client library
import asyncio
from azure.iot.device.aio import IoTHubDeviceClient

الاتصال بجهاز

تحتوي فئة IoTHubModuleClient على أساليب يمكن استخدامها للعمل مع توائم هوية الوحدة النمطية.

لتوصيل تطبيق بجهاز:

  1. استدعاء create_from_connection_string لإضافة هوية الوحدة النمطية سلسلة الاتصال
  2. الاتصال للاتصال لتوصيل عميل الجهاز بمركز Azure IoT
# import the device client library
import asyncio
from azure.iot.device.aio import IoTHubDeviceClient

# substitute the device connection string in conn_str
# and add it to the IoTHubDeviceClient object
conn_str = "{Device module identity connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(conn_str)

# connect the application to the device
await device_client.connect()

إشعار

لا تدعم Python اتصال تطبيق جهاز بوحدة IoT Hub النمطية المزدوجة باستخدام شهادة.

استرداد هوية الوحدة النمطية المزدوجة وفحص الخصائص

استدعاء get_twin لاسترداد هوية الوحدة النمطية المزدوجة من خدمة Azure IoT Hub. يتم وضع المعلومات المزدوجة في متغير يمكن فحصه.

يسترد هذا المثال توأم الجهاز ويستخدم print الأمر لعرض الجهاز المزدوج بتنسيق JSON.

# get the twin
twin = await device_client.get_twin()
print("Twin document:")
print("{}".format(twin))

تحديث خصائص هوية الوحدة النمطية المزدوجة المبلغ عنها

يمكنك تطبيق تصحيح لتحديث خصائص هوية الوحدة النمطية المزدوجة التي تم الإبلاغ عنها بتنسيق JSON.

لتطبيق تصحيح لتحديث الخصائص المبلغ عنها:

  1. تعيين خاصية تم الإبلاغ عنها تصحيح JSON إلى متغير.
  2. اتصل patch_twin_reported_properties لتطبيق تصحيح JSON على الخصائص المبلغ عنها.

على سبيل المثال:

# create the reported properties patch
reported_properties = {"temperature": random.randint(320, 800) / 10}
print("Setting reported temperature to {}".format(reported_properties["temperature"]))
# update the reported properties and wait for the result
await device_client.patch_twin_reported_properties(reported_properties)

إنشاء معالج رد اتصال تحديث الخاصية المطلوبة لهوية الوحدة النمطية

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

يقوم هذا المثال بإعداد معالج تصحيح الخصائص المطلوب المسمى twin_patch_handler.

على سبيل المثال:

try:
    # Set handlers on the client
    device_client.on_twin_desired_properties_patch_received = twin_patch_handler
except:
    # Clean up in the event of failure
    client.shutdown()

يتلقى twin_patch_handler ويطبع تحديثات خاصية JSON المطلوبة.

    # Define behavior for receiving twin desired property patches
    def twin_patch_handler(twin_patch):
        print("Twin patch received:")
        print(twin_patch)

عينات جهاز SDK

يوفر Azure IoT SDK ل Python عينة عمل من تطبيقات الجهاز التي تتعامل مع المهام المزدوجة لهوية الوحدة النمطية:

  • get_twin - الاتصال بجهاز واسترداد معلومات التوأم.
  • update_twin_reported_properties - تحديث الخصائص المزدوجة المبلغ عنها.
  • receive_twin_desired_properties - تلقي وتحديث الخصائص المطلوبة.

إنشاء تطبيق خلفية

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

تعرض فئة IoTHubRegistryManager جميع الأساليب المطلوبة لإنشاء تطبيق خلفية للتفاعل مع توائم هوية الوحدة النمطية من الخدمة.

عبارات استيراد الخدمة

أضف هذه import العبارة لاستخدام مكتبة الخدمة.

import sys
from azure.iot.hub import IoTHubRegistryManager
from azure.iot.hub.models import Twin, TwinProperties, QuerySpecification, QueryResult

الاتصال بمركز IoT

يمكنك توصيل خدمة خلفية ب IoT Hub باستخدام الطرق التالية:

  • نهج الوصول المشترك
  • Microsoft Entra

هام

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

الاتصال باستخدام نهج وصول مشترك

الاتصال بمركز IoT باستخدام from_connection_string.

update_module_twin يتطلب الأسلوب المستخدم في هذا القسم إذن نهج الوصول المشترك ل Service Connect لإضافة الخصائص المطلوبة إلى وحدة نمطية. كمعلمة ل from_connection_string، قم بتوفير نهج وصول مشترك سلسلة الاتصال يتضمن إذن Service Connect. لمزيد من المعلومات حول نهج الوصول المشترك، راجع التحكم في الوصول إلى IoT Hub باستخدام توقيعات الوصول المشترك.

على سبيل المثال:

# Connect to IoT hub
IOTHUB_CONNECTION_STRING = "{IoT hub shared access policy connection string}"
iothub_registry_manager = IoTHubRegistryManager.from_connection_string(IOTHUB_CONNECTION_STRING)

الاتصال باستخدام Microsoft Entra

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

للحصول على نظرة عامة حول مصادقة Python SDK، راجع مصادقة تطبيقات Python على خدمات Azure باستخدام Azure SDK ل Python

تكوين تطبيق Microsoft Entra

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

  • سر العميل
  • شهادة
  • بيانات اعتماد الهوية الموحدة

قد تتطلب تطبيقات Microsoft Entra أذونات دور محددة اعتمادا على العمليات التي يتم تنفيذها. على سبيل المثال، مطلوب IoT Hub Twin Contributor لتمكين الوصول للقراءة والكتابة إلى جهاز IoT Hub وتوائم الوحدة النمطية. لمزيد من المعلومات، راجع إدارة الوصول إلى IoT Hub باستخدام تعيين دور Azure RBAC.

لمزيد من المعلومات حول إعداد تطبيق Microsoft Entra، راجع التشغيل السريع: تسجيل تطبيق باستخدام النظام الأساسي للهويات في Microsoft.

المصادقة باستخدام DefaultAzureCredential

أسهل طريقة لاستخدام Microsoft Entra لمصادقة تطبيق الواجهة الخلفية هي استخدام DefaultAzureCredential، ولكن يوصى باستخدام طريقة مختلفة في بيئة إنتاج بما في ذلك طريقة معينة TokenCredential أو موزعة.ChainedTokenCredential للتبسيط، يصف هذا القسم المصادقة باستخدام DefaultAzureCredential وسر العميل. لمزيد من المعلومات حول إيجابيات وسلبيات استخدام DefaultAzureCredential، راجع سلاسل بيانات الاعتماد في مكتبة عميل Azure Identity ل Python.

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

يتطلب Microsoft Entra حزمة الاستيراد هذه والبيان المقابل import :

pip install azure-identity
from azure.identity import DefaultAzureCredential

في هذا المثال، تمت إضافة سر عميل تسجيل تطبيق Microsoft Entra ومعرف العميل ومعرف المستأجر إلى متغيرات البيئة. يتم استخدام متغيرات البيئة هذه من قبل DefaultAzureCredential لمصادقة التطبيق. نتيجة مصادقة Microsoft Entra الناجحة هي بيانات اعتماد رمز أمان يتم تمريرها إلى أسلوب اتصال IoT Hub.

from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()

يمكن بعد ذلك تمرير AccessToken الناتج إلى from_token_credential للاتصال ب IoT Hub لأي عميل SDK يقبل بيانات اعتماد Microsoft Entra:

from_token_credential يتطلب معلمتين:

  • عنوان URL لخدمة Azure - يجب أن يكون عنوان URL لخدمة Azure بالتنسيق {Your Entra domain URL}.azure-devices.net دون https:// بادئة. على سبيل المثال، MyAzureDomain.azure-devices.net
  • الرمز المميز لبيانات اعتماد Azure

في هذا المثال، يتم الحصول على بيانات اعتماد Azure باستخدام DefaultAzureCredential. ثم يتم توفير IoTHubRegistryManager.from_token_credential عنوان URL لخدمة Azure وبيانات الاعتماد لإنشاء الاتصال ب IoT Hub.

import sys
import os

from azure.identity import DefaultAzureCredential
from azure.iot.hub import IoTHubRegistryManager

# Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'

# Set environment variables
os.environ['AZURE_CLIENT_SECRET'] = clientSecretValue
os.environ['AZURE_CLIENT_ID'] = clientID
os.environ['AZURE_TENANT_ID'] = tenantID

# Acquire a credential object
credential = DefaultAzureCredential()

# Use Entra to authorize IoT Hub service
print("Connecting to IoTHubRegistryManager...")
iothub_registry_manager = IoTHubRegistryManager.from_token_credential(
url="MyAzureDomain.azure-devices.net",
token_credential=credential)
نماذج التعليمات البرمجية

للحصول على نماذج العمل لمصادقة خدمة Microsoft Entra، راجع مكتبة مصادقة Microsoft (MSAL) ل Python.

استرداد وتحديث الخصائص المطلوبة لهوية الوحدة النمطية المزدوجة

يمكنك تحديث الخصائص المطلوبة من تطبيق الواجهة الخلفية باستخدام update_module_twin.

لاسترداد وتحديث الخصائص المطلوبة لهوية الوحدة النمطية المزدوجة:

  1. اتصل get_module_twin للحصول على الإصدار الحالي من الوحدة النمطية المزدوجة للهوية.
  2. استخدم فئة Twin لإضافة الخصائص المطلوبة بتنسيق JSON.
  3. اتصل update_module_twin لتطبيق التصحيح على توأم الجهاز. يمكنك أيضا استخدام replace_module_twin لاستبدال الخصائص والعلامات المطلوبة لتوأم هوية الوحدة النمطية.

يحدث هذا المثال الخاصية telemetryInterval المطلوبة إلى 122.

try:
    module_twin = iothub_registry_manager.get_module_twin(DEVICE_ID, MODULE_ID)
    print ( "" )
    print ( "Module identity twin properties before update:" )
    print ( "{0}".format(module_twin.properties) )

    # Update twin
    twin_patch = Twin()
    twin_patch.properties = TwinProperties(desired={"telemetryInterval": 122})
    updated_module_twin = iothub_registry_manager.update_module_twin(
        DEVICE_ID, MODULE_ID, twin_patch, module_twin.etag
    )
    print ( "" )
    print ( "Module identity twin properties after update     :" )
    print ( "{0}".format(updated_module_twin.properties) )

except Exception as ex:
    print ( "Unexpected error {0}".format(ex) )
except KeyboardInterrupt:
    print ( "IoTHubRegistryManager sample stopped" )

عينة خدمة SDK

يوفر Azure IoT SDK ل Python عينة عمل لتطبيق خدمة يعالج المهام المزدوجة لوحدة هوية الجهاز. لمزيد من المعلومات، راجع اختبار إدارة سجل IoTHub.

  • يتطلب Node.js الإصدار 10.0.x أو أحدث

نظرة عامة

توضح هذه المقالة كيفية استخدام Azure IoT SDK Node.js لإنشاء رمز تطبيق خدمة الجهاز والواجهة الخلفية لتوائم هوية الوحدة النمطية.

إنشاء تطبيق جهاز

يصف هذا القسم كيفية استخدام حزمة azure-iot-device في Azure IoT SDK Node.js لإنشاء تطبيق جهاز من أجل:

  • استرداد هوية الوحدة النمطية المزدوجة وفحص الخصائص المبلغ عنها
  • تحديث هوية الوحدة النمطية المبلغ عنها عن خصائص مزدوجة
  • تلقي إشعار بتغييرات الخاصية المطلوبة لهوية الوحدة النمطية المزدوجة

تحتوي حزمة azure-iot-device على كائنات واجهة مع أجهزة IoT. تتضمن فئة Twin كائنات خاصة بتوائم. يصف هذا القسم التعليمات البرمجية Client للفئة المستخدمة لقراءة وكتابة بيانات توأم هوية وحدة الجهاز.

تثبيت حزمة SDK

قم بتشغيل هذا الأمر لتثبيت Azure-iot-device SDK على جهاز التطوير الخاص بك:

npm install azure-iot-device --save

توصيل جهاز بـ IoT Hub

يمكن مصادقة تطبيق الجهاز باستخدام IoT Hub باستخدام الطرق التالية:

  • مفتاح الوصول المشترك
  • شهادة X.509

هام

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

المصادقة باستخدام مفتاح وصول مشترك

اختيار بروتوكول نقل

Client يدعم الكائن هذه البروتوكولات:

  • Amqp
  • Http - عند استخدام Http، يتحقق المثيل Client من الرسائل من IoT Hub بشكل غير متكرر (بحد أدنى كل 25 دقيقة).
  • Mqtt
  • MqttWs
  • AmqpWs

تثبيت بروتوكولات النقل المطلوبة على جهاز التطوير الخاص بك.

على سبيل المثال، يقوم هذا الأمر بتثبيت Amqp البروتوكول:

npm install azure-iot-device-amqp --save

لمزيد من المعلومات حول الاختلافات بين دعم MQTT وAMQP وHTTPS، راجع إرشادات الاتصالات من السحابة إلى الجهاز واختيار بروتوكول اتصال الجهاز.

إنشاء كائن عميل

إنشاء كائن Client باستخدام الحزمة المثبتة.

على سبيل المثال:

const Client = require('azure-iot-device').Client;
إنشاء كائن بروتوكول

إنشاء كائن Protocol باستخدام حزمة نقل مثبتة.

يعين هذا المثال بروتوكول AMQP:

const Protocol = require('azure-iot-device-amqp').Amqp;
إضافة سلسلة الاتصال الجهاز وبروتوكول النقل

استدعاء منConnectionString لتوفير معلمات اتصال الجهاز:

  • connStr - وحدة هوية مركز IoT سلسلة الاتصال.
  • transportCtor - بروتوكول النقل.

يستخدم Amqp هذا المثال بروتوكول النقل:

const deviceConnectionString = "{IoT hub identity module connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
فتح الاتصال ب IoT Hub

استخدم الأسلوب المفتوح لفتح اتصال بين جهاز IoT ومركز IoT.

على سبيل المثال:

client.open(function(err) {
  if (err) {
    console.error('error connecting to hub: ' + err);
    process.exit(1);
  }
})

المصادقة باستخدام شهادة X.509

يتم إرفاق شهادة X.509 بنقل اتصال الجهاز إلى مركز IoT.

لتكوين اتصال Device-to-IoT Hub باستخدام شهادة X.509:

  1. اتصل منConnectionString لإضافة وحدة الجهاز أو الهوية سلسلة الاتصال، ونوع النقل إلى Client الكائن. أضف x509=true إلى سلسلة الاتصال للإشارة إلى إضافة شهادة إلى DeviceClientOptions. على سبيل المثال:

    • سلسلة الاتصال الجهاز:

      HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true

    • وحدة نمطية للهوية سلسلة الاتصال:

      HostName=xxxxx.azure-devices.net;DeviceId=Device-1;ModuleId=Module-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true

  2. تكوين متغير JSON مع تفاصيل الشهادة وتمريره إلى DeviceClientOptions.

  3. استدعاء setOptions لإضافة شهادة ومفتاح X.509 (واختياريا، عبارة المرور) إلى نقل العميل.

  4. الاتصال مفتوح لفتح الاتصال من الجهاز إلى IoT Hub.

يوضح هذا المثال معلومات تكوين الشهادة داخل متغير JSON. يتم تمرير تكوين clientOptions الشهادة إلى setOptions، ويتم فتح الاتصال باستخدام open.

const Client = require('azure-iot-device').Client;
const Protocol = require('azure-iot-device-mqtt').Mqtt;
// Connection string illustrated for demonstration only. Never hard-code the connection string in production. Instead use an environmental variable or other secure storage.
const connectionString = `HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true`
const client = Client.fromConnectionString(connectionString, Protocol);

var clientOptions = {
   cert: myX509Certificate,
   key: myX509Key,
   passphrase: passphrase,
   http: {
     receivePolicy: {
       interval: 10
     }
   }
 }

 client.setOptions(clientOptions);
 client.open(connectCallback);

لمزيد من المعلومات حول مصادقة الشهادة، راجع:

Code sample

للحصول على نموذج عمل لمصادقة شهادة الجهاز X.509، راجع نموذج بسيط للجهاز X.509.

استرداد هوية الوحدة النمطية المزدوجة وفحص الخصائص المبلغ عنها

استدعاء getTwin لاسترداد معلومات هوية الوحدة النمطية الحالية في كائن Twin .

يمكن لرمز الجهاز بعد ذلك الوصول إلى خصائص هوية الوحدة النمطية المزدوجة.

على سبيل المثال:

// Retrieve the current module identity twin
client.getTwin(function(err, twin))
if (err)
    console.error('could not get twin');

// Display the current properties
console.log('twin contents:');
console.log(twin.properties);

تحديث خصائص هوية الوحدة النمطية المزدوجة المبلغ عنها

استخدم التحديث لتحديث الخصائص المبلغ عنها للجهاز. قم بتضمين تصحيح بتنسيق JSON كمعلمة أولى وطريقة رد اتصال حالة تنفيذ الوظيفة كمعلمة ثانية للأسلوب.

في هذا المثال، يتم تخزين تصحيح هوية الوحدة النمطية بتنسيق JSON في patch المتغير . يحتوي التصحيح على قيمة تحديث هوية الوحدة النمطية المزدوجة connectivity ل cellular. يتم تمرير معالج التصحيح والخطأ إلى update الأسلوب . إذا كان هناك خطأ، يتم عرض رسالة خطأ وحدة التحكم.

// Create a patch to send to IoT Hub
var patch = {
  updateTime: new Date().toString(),
  firmwareVersion:'1.2.1',
  weather:{
    temperature: 72,
    humidity: 17
  }
};

// Apply the patch
twin.properties.reported.update(patch, function(err)
  {
    if (err)
      {
        console.error('could not update twin');
      } 
    else
      {
        console.log('twin state reported');
        process.exit();
      }
  });

تلقي إشعار بتغييرات الخاصية المطلوبة لهوية الوحدة النمطية المزدوجة

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

يمكن أن يتخذ مستمع حدث الخاصية المطلوب النماذج التالية:

  • تلقي جميع التصحيحات باستخدام معالج أحداث واحد
  • تلقي حدث إذا تغير أي شيء ضمن تجميع الخصائص
  • تلقي حدث لتغيير خاصية واحدة

تلقي جميع التصحيحات باستخدام معالج أحداث واحد

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

يقوم رمز المثال هذا إخراج أي خصائص يتم تلقيها من الخدمة.

twin.on('properties.desired', function (delta) {
    console.log('new desired properties received:');
    console.log(JSON.stringify(delta));
});

تلقي حدث إذا تغير أي شيء ضمن تجميع الخصائص

يمكنك إنشاء وحدة استماع لتلقي حدث إذا تغير أي شيء ضمن تجميع الخصائص.

على سبيل المثال:

  1. minTemperature تقع الخاصيتان و maxTemperature ضمن مجموعة خصائص تسمى properties.desired.climate changes.

  2. يطبق تطبيق خدمة الواجهة الخلفية هذا التصحيح للتحديث minTemperature والخصائص maxTemperature المطلوبة:

    const twinPatch1 = {
    properties: {
       desired: {
        climate: { minTemperature: 68, maxTemperature: 76, },
        },
      },
     };
    
  3. تقوم هذه التعليمة البرمجية بإعداد مستمع حدث تغيير الخاصية المطلوب الذي يقوم بتشغيل أي تغييرات داخل properties.desired.climate تجميع الخصائص. إذا كان هناك تغيير مطلوب في الخاصية داخل هذه المجموعة، يتم عرض رسائل تغيير الحد الأدنى والحد الأقصى لدرجة الحرارة إلى وحدة التحكم:

    twin.on('properties.desired.climate', function (delta) {
        if (delta.minTemperature || delta.maxTemperature) {
            console.log('updating desired temp:');
            console.log('min temp = ' + twin.properties.desired.climate.minTemperature);
            console.log('max temp = ' + twin.properties.desired.climate.maxTemperature);
        }
    });
    

تلقي حدث لتغيير خاصية واحدة

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

  1. يطبق تطبيق الواجهة الخلفية تصحيح الخاصية المطلوب هذا:

     const twinPatch2 = {
      properties: {
        desired: {
          climate: {
            hvac: {
              systemControl: { fanOn: true, },
            },
          },
        },
      },
    };
    
  2. يتم تشغيل وحدة الاستماع فقط عند تغيير الخاصية fanOn :

     twin.on('properties.desired.climate.hvac.systemControl', function (fanOn) {
         console.log('setting fan state to ' + fanOn);
      });
    

مثال كامل

يغلف هذا المثال مبادئ هذا القسم، بما في ذلك تداخل دالة رد الاتصال متعددة المستويات.

var Client = require('azure-iot-device').Client;
var Protocol = require('azure-iot-device-amqp').Amqp;
// Copy/paste your module connection string here.
var connectionString = 'HostName=xxx.azure-devices.net;DeviceId=myFirstDevice2;ModuleId=myFirstModule2;SharedAccessKey=xxxxxxxxxxxxxxxxxx';
// Create a client using the Amqp protocol.
var client = Client.fromConnectionString(connectionString, Protocol);
client.on('error', function (err) {
  console.error(err.message);
});
// connect to the hub
client.open(function(err) {
  if (err) {
    console.error('error connecting to hub: ' + err);
    process.exit(1);
  }
  console.log('client opened');
// Create device Twin
  client.getTwin(function(err, twin) {
    if (err) {
      console.error('error getting twin: ' + err);
      process.exit(1);
    }
    // Output the current properties
    console.log('twin contents:');
    console.log(twin.properties);
    // Add a handler for desired property changes
    twin.on('properties.desired', function(delta) {
        console.log('new desired properties received:');
        console.log(JSON.stringify(delta));
    });
    // create a patch to send to the hub
    var patch = {
      updateTime: new Date().toString(),
      firmwareVersion:'1.2.1',
      weather:{
        temperature: 75,
        humidity: 20
      }
    };
    // send the patch
    twin.properties.reported.update(patch, function(err) {
      if (err) throw err;
      console.log('twin state reported');
    });

  });
});

عينات SDK للجهاز

يوفر Azure IoT SDK for Node.js نماذج عمل لتطبيقات الجهاز التي تتعامل مع المهام المزدوجة لهوية الوحدة النمطية. لمزيد من المعلومات، راجع:

إنشاء تطبيق خلفية

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

تثبيت حزمة SDK للخدمة

قم بتشغيل هذا الأمر لتثبيت azure-iothub على جهاز التطوير الخاص بك:

npm install azure-iothub --save

إنشاء كائن التسجيل

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

let Registry = require('azure-iothub').Registry;

الاتصال بمركز IoT

يمكنك توصيل خدمة خلفية ب IoT Hub باستخدام الطرق التالية:

  • نهج الوصول المشترك
  • Microsoft Entra

هام

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

الاتصال باستخدام نهج وصول مشترك

استخدم منConnectionString للاتصال بمركز IoT.

update يتطلب الأسلوب المستخدم في هذا القسم إذن نهج الوصول المشترك ل Service Connect لإضافة الخصائص المطلوبة إلى وحدة نمطية. كمعلمة ل fromConnectionString، قم بتوفير نهج وصول مشترك سلسلة الاتصال يتضمن إذن Service Connect. لمزيد من المعلومات حول نهج الوصول المشترك، راجع التحكم في الوصول إلى IoT Hub باستخدام توقيعات الوصول المشترك.

let connectionString = '{IoT hub shared access policy connection string}';
let registry = Registry.fromConnectionString(serviceConnectionString);

الاتصال باستخدام Microsoft Entra

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

للحصول على نظرة عامة على مصادقة Node.js SDK، راجع:

تكوين تطبيق Microsoft Entra

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

  • سر العميل
  • شهادة
  • بيانات اعتماد الهوية الموحدة

قد تتطلب تطبيقات Microsoft Entra أذونات دور محددة اعتمادا على العمليات التي يتم تنفيذها. على سبيل المثال، مطلوب IoT Hub Twin Contributor لتمكين الوصول للقراءة والكتابة إلى جهاز IoT Hub وتوائم الوحدة النمطية. لمزيد من المعلومات، راجع إدارة الوصول إلى IoT Hub باستخدام تعيين دور Azure RBAC.

لمزيد من المعلومات حول إعداد تطبيق Microsoft Entra، راجع التشغيل السريع: تسجيل تطبيق باستخدام النظام الأساسي للهويات في Microsoft.

المصادقة باستخدام DefaultAzureCredential

أسهل طريقة لاستخدام Microsoft Entra لمصادقة تطبيق الواجهة الخلفية هي استخدام DefaultAzureCredential، ولكن يوصى باستخدام طريقة مختلفة في بيئة إنتاج بما في ذلك طريقة معينة TokenCredential أو موزعة.ChainedTokenCredential للتبسيط، يصف هذا القسم المصادقة باستخدام DefaultAzureCredential وسر العميل. لمزيد من المعلومات حول إيجابيات وسلبيات استخدام DefaultAzureCredential، راجع سلاسل بيانات الاعتماد في مكتبة عميل Azure Identity ل JavaScript

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

يتطلب Microsoft Entra هذه الحزمة:

npm install --save @azure/identity

في هذا المثال، تمت إضافة سر عميل تسجيل تطبيق Microsoft Entra ومعرف العميل ومعرف المستأجر إلى متغيرات البيئة. يتم استخدام متغيرات البيئة هذه من قبل DefaultAzureCredential لمصادقة التطبيق. نتيجة مصادقة Microsoft Entra الناجحة هي بيانات اعتماد رمز أمان يتم تمريرها إلى أسلوب اتصال IoT Hub.

import { DefaultAzureCredential } from "@azure/identity";

// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();

يمكن بعد ذلك تمرير الرمز المميز لبيانات الاعتماد الناتجة إلى fromTokenCredential للاتصال ب IoT Hub لأي عميل SDK يقبل بيانات اعتماد Microsoft Entra:

fromTokenCredential يتطلب معلمتين:

  • عنوان URL لخدمة Azure - يجب أن يكون عنوان URL لخدمة Azure بالتنسيق {Your Entra domain URL}.azure-devices.net دون https:// بادئة. على سبيل المثال، MyAzureDomain.azure-devices.net
  • الرمز المميز لبيانات اعتماد Azure

في هذا المثال، يتم الحصول على بيانات اعتماد Azure باستخدام DefaultAzureCredential. ثم يتم توفير Registry.fromTokenCredential عنوان URL لمجال Azure وبيانات الاعتماد لإنشاء الاتصال ب IoT Hub.

const { DefaultAzureCredential } = require("@azure/identity");

let Registry = require('azure-iothub').Registry;

// Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'

// Set environment variables
process.env['AZURE_CLIENT_SECRET'] = clientSecretValue;
process.env['AZURE_CLIENT_ID'] = clientID;
process.env['AZURE_TENANT_ID'] = tenantID;

// Acquire a credential object
const credential = new DefaultAzureCredential()

// Create an instance of the IoTHub registry
hostName = 'MyAzureDomain.azure-devices.net';
let registry = Registry.fromTokenCredential(hostName,credential);
نماذج التعليمات البرمجية

للحصول على نماذج العمل لمصادقة خدمة Microsoft Entra، راجع أمثلة هوية Azure.

استرداد هوية الوحدة النمطية المزدوجة وتحديث الخصائص المطلوبة

يمكنك إنشاء تصحيح يحتوي على تحديثات الخصائص المطلوبة لهوية الوحدة النمطية المزدوجة.

لتحديث هوية الوحدة النمطية المزدوجة:

  1. استدعاء getModuleTwin لاسترداد كائن توأم الجهاز.

  2. تنسيق تصحيح يحتوي على تحديث هوية الوحدة النمطية المزدوجة. يتم تنسيق التصحيح في JSON كما هو موضح في فئة Twin. يحتوي تصحيح خدمة الواجهة الخلفية على تحديثات الخصائص المطلوبة. لمزيد من معلومات تنسيق التصحيح، راجع تنسيق العلامات والخصائص.

  3. قم باستدعاء التحديث لتحديث هوية الوحدة النمطية المزدوجة بالتصحيح.

في هذا المثال، يتم استرداد هوية الوحدة النمطية المزدوجة ل myDeviceId و myModuleId. ثم يتم تطبيق تصحيح على التوائم التي تحتوي على climate معلومات.

// Insert your device ID and moduleId here.
var deviceId = 'myFirstDevice2';
var moduleId = 'myFirstModule2';

// Retrieve the current module identity twin
registry.getModuleTwin(deviceId, moduleId, function (err, twin) {
  console.log('getModuleTwin returned ' + (err ? err : 'success'));
  if (err) {
    console.log(err);
  } else {
    console.log('success');
    console.log('Current twin:' + JSON.stringify(twin))

    // Format a desired property patch
    const twinPatch1 = {
      properties: {
        desired: {
          climate: { minTemperature: 69, maxTemperature: 77, },
        },
      },
    };

    // Send the desired property patch to IoT Hub
    twin.update(twinPatch1, function(err) {
    if (err) throw err;
    console.log('twin state reported');
    });
  }
});

عينات SDK للخدمة

يوفر Azure IoT SDK for Node.js نماذج عمل لتطبيقات الخدمة التي تتعامل مع المهام المزدوجة لهوية الوحدة النمطية. لمزيد من المعلومات، راجع: