Начало работы с удостоверением модуля и двойником модуля в Центре Интернета вещей (Python)
Удостоверения и двойники модуля аналогичны удостоверениям и двойникам устройства Центра Интернета вещей Azure, однако они предоставляют более высокую степень детализации. В то время как удостоверения и двойники устройства Центра Интернета вещей Azure позволяют внутреннему приложению настраивать устройство и отображать сведения о состоянии устройства, удостоверения и двойники модуля предоставляют эти возможности для отдельных компонентов устройства. Благодаря этому можно изолировать конфигурацию и условия для каждого компонента на совместимых устройствах с несколькими компонентами, например устройствах на базе операционной системы или устройствах со встроенным ПО.
Примечание.
Функции, описанные в этой статье, доступны только на стандартном уровне Центра Интернета вещей. Дополнительные сведения о базовых и бесплатных уровнях Центр Интернета вещей см. в разделе "Выбор подходящего уровня Центр Интернета вещей" для решения.
По завершении работы с этой статьей у вас будет три приложения Python:
CreateModule: создает удостоверение устройства и модуля, а также соответствующие ключи безопасности для подключения к клиентам устройства и модуля;
UpdateModuleTwinDesiredProperties: отправляет обновленные требуемые свойства двойника модуля в Центр Интернета вещей;
ReceiveModuleTwinDesiredPropertiesPatch: получает обновление требуемых свойств двойника модуля на устройстве.
Примечание.
Дополнительные сведения о средствах SDK, доступных для создания приложений устройств и внутренних приложений, см. в пакетах SDK Для Интернета вещей Azure.
Необходимые компоненты
Активная учетная запись Azure. Если ее нет, можно создать бесплатную учетную запись всего за несколько минут.
Центр Интернета вещей в подписке Azure. Если у вас еще нет центра, выполните действия, описанные в разделе Создание центра Интернета вещей.
Рекомендуется использовать Python 3.7 или более поздней версии. Обязательно используйте 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"
Получение строки подключения центра Интернета вещей
Работая с этой статьей, вы создадите внутреннюю службу, которая сначала добавит устройство в реестр удостоверений, а затем добавит модуль на это устройство. Для этой службы требуется разрешение на запись в реестр (которое также включает чтение реестра). Вы также создадите службу, которая добавит требуемые свойства в модуль двойника для только что созданного модуля. Для этой службы необходимо разрешение на подключение службы. Несмотря на наличие политик общего доступа по умолчанию, предоставляющих эти разрешения по отдельности, в этом разделе вы создадите пользовательскую политику общего доступа, которая содержит оба этих разрешения.
Чтобы создать политику общего доступа, которая предоставляет разрешения подключения служб, запись в реестр, и получить строку подключения для этой политики, выполните следующие действия:
На портале Azure выберите Группы ресурсов. Выберите группу ресурсов, в которой находится центр, а затем выберите центр из списка ресурсов.
В левой части центра выберите Политики общего доступа.
В меню над списком политик выберите Добавить политику общего доступа.
В разделе Добавить политику общего доступа введите описательное имя политики, например, serviceAndRegistryReadWrite. В разделе Разрешения выберите Запись в реестр, Подключение служб и нажмите Добавить. (Разрешение на Чтение реестра включается автоматически при выборе параметра Запись в реестр.)
Выберите новую политику из списка политик.
В разделе Общие ключи доступа выберите значок копирования рядом с пунктом Первичная строка подключения и сохраните значение.
Дополнительные сведения о политиках и разрешениях общего доступа Центра Интернета вещей см. в разделе Управления доступом и разрешения.
Создание удостоверения устройства и удостоверения модуля в Центре Интернета вещей
В этом разделе объясняется, как создать приложение службы Python, которое создает удостоверение устройства и удостоверение модуля в реестре удостоверений центра Интернета вещей. Устройства и модули не могут подключаться к центру Интернета вещей, если в реестре удостоверений для них нет соответствующей записи. Дополнительные сведения см. в статье Сведения о реестре удостоверений в центре Интернета вещей. Запущенное консольное приложение создает уникальные идентификаторы и ключи одновременно для устройства и для модуля. Идентификатор и ключ чувствительны к регистру. Устройство и модуль применяют эти значения для идентификации при отправке сообщений с устройства в облако в Центр Интернета вещей.
В командной строке выполните следующую команду, чтобы установить пакет azure-iot-hub:
pip install azure-iot-hub
В командной строке выполните следующую команду, чтобы установить пакет msrest. Этот пакет необходим для перехвата исключений HTTPOperationError.
pip install msrest
Используя текстовый редактор, создайте файл с именем CreateModule.py в рабочей папке.
Добавьте следующий код в файл Python. Замените строку YourIoTHubConnectionString строкой подключения, скопированной в разделе Получение строки подключения центра Интернета вещей.
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")
В командной строке выполните приведенную ниже команду.
python CreateModule.py
Это приложение создает удостоверение устройства с идентификатором myFirstDevice и удостоверение модуля с идентификатором myFirstModule на устройстве myFirstDevice. (Если идентификатор устройства или модуля уже есть в реестре удостоверений, код просто извлекает сведения об имеющемся устройстве или модуле.) Приложение отображает идентификатор и первичный ключ для каждого удостоверения.
Примечание.
В реестре удостоверений в Центре Интернета вещей хранятся только удостоверения устройств и модулей, необходимые для защиты доступа к Центру Интернета вещей. Реестр удостоверений хранит идентификаторы устройств и ключи, используемые в качестве учетных данных безопасности. Реестр удостоверений также хранит флаги включения и отключения для каждого устройства. Эти флаги можно использовать для отключения доступа для этого устройства. Если в приложении необходимо хранить другие метаданные для конкретного устройства, следует использовать хранилище конкретного приложения. У вас нет возможности включать и отключать удостоверения модулей. Дополнительные сведения см. в статье Сведения о реестре удостоверений в центре Интернета вещей.
Обновление двойника модуля с помощью пакета SDK для службы Python
В этом разделе объясняется, как создать приложение службы Python, которое обновляет требуемые свойства двойника модуля.
В командной строке выполните следующую команду, чтобы установить пакет azure-iot-hub. Этот шаг можно пропустить, если вы уже установили пакет azure-iot-hub в предыдущем разделе.
pip install azure-iot-hub
Используя текстовый редактор, создайте файл с именем UpdateModuleTwinDesiredProperties.py в рабочей папке.
Добавьте следующий код в файл Python. Замените строку YourIoTHubConnectionString строкой подключения, скопированной в разделе Получение строки подключения центра Интернета вещей.
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 для получения обновления требуемых свойств модуля двойника на устройстве.
Получение строки подключения модуля. На портале Azure перейдите в Центр Интернета вещей и выберите Устройства в области слева. Выберите myFirstDevice в списке устройств и откройте его. На странице Удостоверения модулей выберите myFirstModule. Выберите значок копирования для Строки подключения (первичный ключ). Эта строка подключения необходима на следующем шаге.
В командной строке выполните следующую команду, чтобы установить пакет azure-iot-device:
pip install azure-iot-device
Используя текстовый редактор, создайте файл с именем ReceiveModuleTwinDesiredPropertiesPatch.py в рабочей папке.
Добавьте следующий код в файл 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, чтобы обновить требуемые свойства модуля.
Откройте командную строку и запустите приложение устройства.
python ReceiveModuleTwinDesiredPropertiesPatch.py
Откройте отдельную командную строку и запустите приложение службы.
python UpdateModuleTwinDesiredProperties.py
Обратите внимание, что требуемое свойство TelemetryInterval отображается в обновленном двойнике модуля в выходных данных приложения службы.
То же свойство отображается в исправлении требуемых свойств, полученном в выходных данных приложения устройства.
Следующие шаги
Чтобы продолжить знакомство с Центром Интернета вещей и изучить другие сценарии Интернета вещей, см. следующие ресурсы: