ابدأ مع هوية وحدة IoT Hub والوحدة المزدوجة (Python)

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

ملاحظة

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

في نهاية هذا البرنامج التعليمي، تمتلك ثلاثة تطبيقات Python:

  • CreateModule، تُنشئ هوية الجهاز وهوية الوحدة ومفاتيح الأمان المرتبطة لتوصيل جهازك وعملاء الوحدة.

  • UpdateModuleTwinDesiredProperties ، والذي يرسل الخصائص المرغوبة للوحدة المزدوجة إلى مركز IoT خاصتك.

  • ReceiveModuleTwinDesiredPropertiesPatch ، والذي يتلقى تصحيح الخصائص المرغوبة للوحدة النمطية المزدوجة على جهازك.

ملاحظة

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

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

  • حساب Azure نشط. (إذا لم يكن لديك حساب، فيمكنك إنشاء حساب مجاني خلال دقيقتين فقط.)

  • مركز IoT. أنشئ واحدًا باستخدام CLI أو مدخل Azure.

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

مصادقة الوحدة النمطية

يمكنك استخدام مفاتيح متماثلة أو شهادات X.509 لمصادقة هويات الوحدة النمطية. لمصادقة شهادة X.509، يجب أن يكون لشهادة الوحدة النمطية اسمها الشائع (CN) منسق مثل CN=<deviceid>/<moduleid>. على سبيل المثال:

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

الحصول على سلسلة اتصال لوحة الوصل لـIoT

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

لإنشاء نهج وصول مشتركة تمنح أذونات اتصال الخدمة و كتابة السجل والحصول على سلسلة اتصال لهذا النهج، اتبع الخطوات التالية:

  1. في مدخل Microsoft Azure، حدد Resource groups. حدد مجموعة الموارد حيث يوجد المركز الخاص بك، ثم حدد المركز الخاص بك من قائمة الموارد.

  2. في الجزء الأيمن من المركز الخاص بك، حدد نهج الوصول المشترك .

  3. من القائمة أعلى قائمة النهج، حدد إضافة نهج الوصول المشترك .

  4. ضمن إضافة سياسة الوصول المشترك، أدخل اسمًا وصفيًا لسياستك، مثل serviceAndRegistryRead. ضمن الأذونات ، حدد كتابة السجل و اتصال الخدمة ، ثم حدد إضافة . (يتم تضمين إذن قراءة السجل تلقائيًا عند تحديد كتابة السجل .)

    لقطة شاشة توضح كيفية إضافة نهج وصول مشترك جديد

  5. حدد النهج الخاص بك الجديدة من قائمة النُهج.

  6. ضمن مفاتيح الوصول المشتركة، حدد أيقونة النسخ لسلسلة الاتصال الأساسي واحفظ القيمة.

    لقطة شاشة توضح كيفية استرداد سلسلة الاتصال

لمزيد من المعلومات حول نهج الوصول المشترك لمركز IoT والأذونات، راجع التحكم بالوصول وأذونات الوصول.

أنشئ هوية جهاز وهوية وحدة في IoT Hub

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

  1. في موجه الأوامر، قم بتشغيل الأمر التالي لتثبيت حزمة azure-iot-hub:

    pip install azure-iot-hub
    
  2. في موجه الأوامر، قم بتشغيل الأمر التالي لتثبيت حزمة msrest . بحاجة إلى هذه الحزمة للحصول على استثناءات HTTPOperationError .

    pip install msrest
    
  3. باستخدام محرر نصوص، قم بإنشاء ملف باسم CreateModule.py في دليل العمل الخاص بك.

  4. أضف الكود التالي إلى ملف Python الخاص بك. استبدل YourIoTHubConnectionString بسلسلة الاتصال التي نسختها في الحصول على سلسلة اتصال IoT hub .

    import sys
    from msrest.exceptions import HttpOperationError
    from azure.iot.hub import IoTHubRegistryManager
    
    CONNECTION_STRING = "YourIotHubConnectionString"
    DEVICE_ID = "myFirstDevice"
    MODULE_ID = "myFirstModule"
    
    try:
        # RegistryManager
        iothub_registry_manager = IoTHubRegistryManager(CONNECTION_STRING)
    
        try:
            # CreateDevice - let IoT Hub assign keys
            primary_key = ""
            secondary_key = ""
            device_state = "enabled"
            new_device = iothub_registry_manager.create_device_with_sas(
                DEVICE_ID, primary_key, secondary_key, device_state
            )
        except HttpOperationError as ex:
            if ex.response.status_code == 409:
                # 409 indicates a conflict. This happens because the device already exists.
                new_device = iothub_registry_manager.get_device(DEVICE_ID)
            else:
                raise
    
        print("device <" + DEVICE_ID +
              "> has primary key = " + new_device.authentication.symmetric_key.primary_key)
    
        try:
            # CreateModule - let IoT Hub assign keys
            primary_key = ""
            secondary_key = ""
            managed_by = ""
            new_module = iothub_registry_manager.create_module_with_sas(
                DEVICE_ID, MODULE_ID, managed_by, primary_key, secondary_key
            )
        except HttpOperationError as ex:
            if ex.response.status_code == 409:
                # 409 indicates a conflict. This happens because the module already exists.
                new_module = iothub_registry_manager.get_module(DEVICE_ID, MODULE_ID)
            else:
                raise
    
        print("device/module <" + DEVICE_ID + "/" + MODULE_ID +
              "> has primary key = " + new_module.authentication.symmetric_key.primary_key)
    
    except Exception as ex:
        print("Unexpected error {0}".format(ex))
    except KeyboardInterrupt:
        print("IoTHubRegistryManager sample stopped")
    
  5. في موجه الأوامر الخاص بك، قم بتشغيل الأمر التالي:

    python CreateModule.py
    

ينشئ هذا التطبيق هوية جهاز بمعرف myFirstDevice وهوية الوحدة النمطية مع ID myFirstModule ضمن الجهاز myFirstDevice. (إذا كان معرف الجهاز أو الوحدة موجودًا بالفعل في سجل الهوية، فإن الرمز يسترد ببساطة معلومات الجهاز أو الوحدة الحالية.) يعرض التطبيق المعرف والمفتاح الأساسي لكل هوية.

ملاحظة

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

قم بتحديث الوحدة النمطية المزدوجة باستخدام Python service SDK

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

  1. في موجه الأوامر، قم بتشغيل الأمر التالي لتثبيت حزمة azure-iot-hub . يمكنك تخطي الخطوة المذكورة إذا قمت بتثبيت حزمة azure-iot-hub في القسم السابق.

    pip install azure-iot-hub
    
  2. باستخدام محرر نصوص، قم بإنشاء ملف باسم UpdateModuleTwinDesiredProperties.py في دليل العمل الخاص بك.

  3. أضف الكود التالي إلى ملف Python الخاص بك. استبدل YourIoTHubConnectionString بسلسلة الاتصال التي نسختها في الحصول على سلسلة اتصال IoT hub .

    import sys
    from azure.iot.hub import IoTHubRegistryManager
    from azure.iot.hub.models import Twin, TwinProperties
    
    CONNECTION_STRING = "YourIoTHubConnectionString"
    DEVICE_ID = "myFirstDevice"
    MODULE_ID = "myFirstModule"
    
    try:
        # RegistryManager
        iothub_registry_manager = IoTHubRegistryManager(CONNECTION_STRING)
    
        module_twin = iothub_registry_manager.get_module_twin(DEVICE_ID, MODULE_ID)
        print ( "" )
        print ( "Module 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 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" )
    

احصل على التحديثات على جانب الجهاز

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

  1. يمكنك الحصول على سلسلة اتصال الوحدة الخاصة بك. في مدخل Microsoft Azure، انتقل إلى IoT Hub وحدد أجهزة IoT في الجزء الأيمن. حدد myFirstDevice من قائمة الأجهزة وقم بفتحه. ضمن هويات الوحدة ، حدد myFirstModule . حدد أيقونة النسخ لسلسلة الاتصال (المفتاح الأساسي) . تحتاج إلى سلسلة الاتصال هذه في الخطوة التالية.

    لقطة شاشة لصفحة تفاصيل هوية الوحدة في مدخل Azure.

  2. في موجه الأوامر، قم بتشغيل الأمر التالي لتثبيت حزمة azure-iot-device :

    pip install azure-iot-device
    
  3. باستخدام محرر نصوص، قم بإنشاء ملف باسم ReceiveModuleTwinDesiredPropertiesPatch.py في دليل العمل الخاص بك.

  4. أضف الكود التالي إلى ملف Python الخاص بك. استبدل YourModuleConnectionString بسلسلة اتصال الوحدة التي نسختها في الخطوة 1.

    import time
    from azure.iot.device import IoTHubModuleClient
    
    CONNECTION_STRING = "YourModuleConnectionString"
    
    
    def twin_patch_handler(twin_patch):
        print("")
        print("Twin desired properties patch received:")
        print(twin_patch)
    
    
    def main():
        print ("Starting the IoT Hub Python sample...")
        client = IoTHubModuleClient.create_from_connection_string(CONNECTION_STRING)
    
        print ("Waiting for commands, press Ctrl-C to exit")
        try:
            # Attach the handler to the client
            client.on_twin_desired_properties_patch_received = twin_patch_handler
    
            while True:
                time.sleep(1000)
        except KeyboardInterrupt:
            print("IoTHubModuleClient sample stopped")
        finally:
            # Graceful exit
            print("Shutting down IoT Hub Client")
            client.shutdown()
    
    if __name__ == '__main__':
        main()
    

قم بتشغيل التطبيقات

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

  1. افتح موجه الأوامر وقم بتشغيل تطبيق الجهاز:

    python ReceiveModuleTwinDesiredPropertiesPatch.py
    

    الإخراج الأولي لتطبيق الجهاز

  2. قم بفتح موجه أوامر منفصل وقم بتشغيل تطبيق الخدمة:

    python UpdateModuleTwinDesiredProperties.py
    

    لاحظ أن الخاصية المطلوبة TelemetryInterval تظهر في الوحدة النمطية المزدوجة المحدثة في إخراج تطبيق الخدمة:

    إخراج تطبيق الخدمة

    تظهر نفس الخاصية في تصحيح الخصائص المطلوبة الذي تم استلامه في إخراج تطبيق الجهاز الخاص بك:

    يُظهر إخراج تطبيق الجهاز تصحيح الخصائص المطلوبة

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

لمتابعة عملية بدء استخدام IoT Hub واستكشاف سيناريوهات IoT الأخرى، راجع: