بدء استخدام هويات وحدة 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));
تحديث خصائص هوية الوحدة النمطية المزدوجة المبلغ عنها
لتحديث خاصية مزدوجة تم الإبلاغ عنها:
- إنشاء كائن TwinCollection لتحديث الخاصية التي تم الإبلاغ عنها
- تحديث خاصية واحدة أو أكثر تم الإبلاغ عنها داخل
TwinCollection
الكائن - استخدام 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
، ويحدث الخاصية module
LastActivityTime
، ثم يحدث الوحدة النمطية في 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);
}
واجهة برمجة تطبيقات الوحدة النمطية الأخرى
- GetModulesOnDeviceAsync - استرداد هويات الوحدة النمطية على جهاز
- RemoveModuleAsync - حذف وحدة نمطية مسجلة مسبقا من جهاز
عينة خدمة 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 على أساليب يمكن استخدامها للعمل مع توائم هوية الوحدة النمطية.
لتوصيل تطبيق بجهاز:
- استدعاء create_from_connection_string لإضافة هوية الوحدة النمطية سلسلة الاتصال
- الاتصال للاتصال لتوصيل عميل الجهاز بمركز 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.
لتطبيق تصحيح لتحديث الخصائص المبلغ عنها:
- تعيين خاصية تم الإبلاغ عنها تصحيح JSON إلى متغير.
- اتصل 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:
- IoTHubRegistryManager لإنشاء اتصال خدمة ب IoT Hub باستخدام بيانات اعتماد الرمز المميز ل Entra.
- IoTHubJobManager
- DigitalTwinClient
- IoTHubHttpRuntimeManager
- IoTHubConfigurationManager
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.
لاسترداد وتحديث الخصائص المطلوبة لهوية الوحدة النمطية المزدوجة:
- اتصل get_module_twin للحصول على الإصدار الحالي من الوحدة النمطية المزدوجة للهوية.
- استخدم فئة Twin لإضافة الخصائص المطلوبة بتنسيق JSON.
- اتصل
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:
اتصل من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
تكوين متغير JSON مع تفاصيل الشهادة وتمريره إلى DeviceClientOptions.
استدعاء setOptions لإضافة شهادة ومفتاح X.509 (واختياريا، عبارة المرور) إلى نقل العميل.
الاتصال مفتوح لفتح الاتصال من الجهاز إلى 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));
});
تلقي حدث إذا تغير أي شيء ضمن تجميع الخصائص
يمكنك إنشاء وحدة استماع لتلقي حدث إذا تغير أي شيء ضمن تجميع الخصائص.
على سبيل المثال:
minTemperature
تقع الخاصيتان وmaxTemperature
ضمن مجموعة خصائص تسمىproperties.desired.climate changes
.يطبق تطبيق خدمة الواجهة الخلفية هذا التصحيح للتحديث
minTemperature
والخصائصmaxTemperature
المطلوبة:const twinPatch1 = { properties: { desired: { climate: { minTemperature: 68, maxTemperature: 76, }, }, }, };
تقوم هذه التعليمة البرمجية بإعداد مستمع حدث تغيير الخاصية المطلوب الذي يقوم بتشغيل أي تغييرات داخل
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
الجديدة كلما حدثتها الخدمة.
يطبق تطبيق الواجهة الخلفية تصحيح الخاصية المطلوب هذا:
const twinPatch2 = { properties: { desired: { climate: { hvac: { systemControl: { fanOn: true, }, }, }, }, }, };
يتم تشغيل وحدة الاستماع فقط عند تغيير الخاصية
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.
استرداد هوية الوحدة النمطية المزدوجة وتحديث الخصائص المطلوبة
يمكنك إنشاء تصحيح يحتوي على تحديثات الخصائص المطلوبة لهوية الوحدة النمطية المزدوجة.
لتحديث هوية الوحدة النمطية المزدوجة:
استدعاء getModuleTwin لاسترداد كائن توأم الجهاز.
تنسيق تصحيح يحتوي على تحديث هوية الوحدة النمطية المزدوجة. يتم تنسيق التصحيح في JSON كما هو موضح في فئة Twin. يحتوي تصحيح خدمة الواجهة الخلفية على تحديثات الخصائص المطلوبة. لمزيد من معلومات تنسيق التصحيح، راجع تنسيق العلامات والخصائص.
قم باستدعاء التحديث لتحديث هوية الوحدة النمطية المزدوجة بالتصحيح.
في هذا المثال، يتم استرداد هوية الوحدة النمطية المزدوجة ل 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 نماذج عمل لتطبيقات الخدمة التي تتعامل مع المهام المزدوجة لهوية الوحدة النمطية. لمزيد من المعلومات، راجع: