Начало работы с двойниками устройств (Python)
Двойники устройств — это документы JSON, хранящие сведения о состоянии устройства, в том числе метаданные, конфигурации и условия. Центр Интернета вещей сохраняет двойник устройства для каждого устройства, подключаемого к нему.
Примечание.
Функции, описанные в этой статье, доступны только на стандартном уровне Центра Интернета вещей. Дополнительные сведения о базовых и бесплатных уровнях Центр Интернета вещей см. в разделе "Выбор подходящего уровня Центр Интернета вещей" для решения.
Двойники устройства используются для выполнения следующих действий:
хранение метаданных устройства из серверной части вашего решения;
сообщение сведений о текущем состоянии приложения устройства, таких как доступные возможности и условия, например используемый метод подключения;
синхронизация состояния длительных рабочих процессов между приложением устройства и серверной частью, например при обновлении встроенного ПО и конфигурации;
выполнение запроса метаданных, конфигурации или состояния устройства.
Двойники устройств используются для синхронизации и выполнения запроса конфигураций или условий устройства. Дополнительные сведения об двойниках устройств, включая использование двойников устройств, см. в разделе "Общие сведения о двойниках устройств".
Центры Интернета вещей хранят двойники устройств, которые содержат следующие элементы:
Теги. Метаданные устройства, доступные только в серверной части решения.
Требуемые свойства. Объекты JSON, задаваемые только в серверной части решения и наблюдаемые в приложении устройства.
Сообщаемые свойства. Объекты JSON, задаваемые только в приложении устройства и считываемые в серверной части решения.
Теги и свойства не могут содержать массивы, но могут содержать вложенные объекты.
Следующая иллюстрация показывает организацию двойника устройства:
Кроме того, из серверной части решения можно запросить двойники устройств на основе всех вышеизложенных данных. Дополнительные сведения о двойниках устройств см. в статье Основные сведения о двойниках устройств. Дополнительные сведения запросах см. в статье Язык запросов Центра Интернета вещей.
Из этой статьи вы узнаете, как выполнять следующие задачи:
С помощью приложения имитированного устройства вы можете передавать данные о своем канале подключения как передаваемое свойство двойника устройства.
запрос устройств из серверного приложения с использованием фильтров в созданных ранее тегах и свойствах.
При работе с этой статьей вы создадите два консольных приложения Python:
AddTagsAndQuery.py: внутреннее приложение, которое добавляет теги и запрашивает двойники устройств.
ReportConnectivity.py: приложение имитированного устройства, которое подключается к вашему центру Интернета вещей и сообщает о состоянии подключения.
Примечание.
Дополнительные сведения о средствах SDK, доступных для создания приложений устройств и внутренних приложений, см. в пакетах SDK Для Интернета вещей Azure.
Необходимые компоненты
Активная учетная запись Azure. Если ее нет, можно создать бесплатную учетную запись всего за несколько минут.
Центр Интернета вещей в подписке Azure. Если у вас еще нет центра, выполните действия, описанные в разделе Создание центра Интернета вещей.
Устройство, зарегистрированное в центре Интернета вещей. Если у вас нет устройства в Центре Интернета вещей, выполните действия, описанные в разделе "Регистрация устройства".
Рекомендуется использовать Python 3.7 или более поздней версии. Обязательно используйте 32-разрядную или 64-разрядную версию установки согласно требованиям программы настройки. При появлении запроса во время установки обязательно добавьте Python в переменную среды соответствующей платформы.
Убедитесь, что в брандмауэре открыт порт 8883. Пример устройства в этой статье использует протокол MQTT, который передает данные через порт 8883. В некоторых корпоративных и академических сетях этот порт может быть заблокирован. Дополнительные сведения и способы устранения этой проблемы см. в разделе о подключении к Центру Интернета вещей по протоколу MQTT.
Получение строки подключения центра Интернета вещей
В этой статье вы создадите серверную службу, которая добавляет требуемые свойства в двойник устройства, а затем запрашивает реестр удостоверений, чтобы найти все устройства с передаваемыми свойствами, которые были обновлены соответствующим образом. Службе требуется разрешение service connect для изменения требуемых свойств двойника устройства и разрешение registry read для запроса реестра удостоверений. Политика общего доступа по умолчанию, которая содержит только эти два разрешения, не существует, поэтому необходимо создать ее.
Чтобы создать политику общего доступа, которая предоставляет разрешения service connect и registry read, и получить строку подключения для этой политики, выполните следующие действия.
На портале Azure выберите Группы ресурсов. Выберите группу ресурсов, в которой находится центр, а затем выберите центр из списка ресурсов.
В левой части центра выберите Политики общего доступа.
В верхнем меню над списком политик выберите Добавить политику общего доступа.
В области Добавить политику общего доступа справа введите описательное имя политики, например serviceAndRegistryRead. В разделе Разрешения выберите Чтение реестра и Подключение службы, а затем нажмите кнопку Добавить.
Выберите новую политику из списка политик.
Выберите значок копирования рядом с пунктом Первичная строка подключения и сохраните значение.
Дополнительные сведения о политиках и разрешениях общего доступа Центра Интернета вещей см. в разделе Управления доступом и разрешения.
Создание приложения-службы, которое обновляет требуемые свойства и двойники запросов
В этом разделе показано, как создать консольное приложение Python, которое добавляет метаданные расположения в двойник устройства, связанный с указанным {Device ID}. Приложение запрашивает центр Интернета вещей для устройств, расположенных в США, а затем запрашивает устройства, которые сообщают о подключении к сотовой сети.
В рабочей папке откройте окно командной строки и установите пакет SDK службы Центра Интернета вещей Azure для Python.
pip install azure-iot-hub
В текстовом редакторе создайте файл AddTagsAndQuery.py.
Добавьте следующий код для импорта необходимых модулей из пакета SDK службы:
import sys from time import sleep from azure.iot.hub import IoTHubRegistryManager from azure.iot.hub.models import Twin, TwinProperties, QuerySpecification, QueryResult
Добавьте следующий код. Замените
[IoTHub Connection String]
строкой подключения центра Интернета вещей, скопированной в разделе Получение строки подключения центра Интернета вещей. Замените[Device Id]
идентификатор устройства (имя) зарегистрированного устройства в Центре Интернета вещей.IOTHUB_CONNECTION_STRING = "[IoTHub Connection String]" DEVICE_ID = "[Device Id]"
Добавьте следующий код в файл AddTagsAndQuery.py:
def iothub_service_sample_run(): try: iothub_registry_manager = IoTHubRegistryManager(IOTHUB_CONNECTION_STRING) new_tags = { 'location' : { 'region' : 'US', 'plant' : 'Redmond43' } } twin = iothub_registry_manager.get_twin(DEVICE_ID) twin_patch = Twin(tags=new_tags, properties= TwinProperties(desired={'power_level' : 1})) twin = iothub_registry_manager.update_twin(DEVICE_ID, twin_patch, twin.etag) # Add a delay to account for any latency before executing the query sleep(1) query_spec = QuerySpecification(query="SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'") query_result = iothub_registry_manager.query_iot_hub(query_spec, None, 100) print("Devices in Redmond43 plant: {}".format(', '.join([twin.device_id for twin in query_result.items]))) print() query_spec = QuerySpecification(query="SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity = 'cellular'") query_result = iothub_registry_manager.query_iot_hub(query_spec, None, 100) print("Devices in Redmond43 plant using cellular network: {}".format(', '.join([twin.device_id for twin in query_result.items]))) except Exception as ex: print("Unexpected error {0}".format(ex)) return except KeyboardInterrupt: print("IoT Hub Device Twin service sample stopped")
Объект IoTHubRegistryManager позволяет получить все методы, необходимые для взаимодействия с двойниками устройства из службы. Этот код инициализирует объект IoTHubRegistryManager, записывает идентификатор устройства DEVICE_ID в двойник устройства и выполняет два запроса. Первый запрос предназначен для выбора только двойников устройств, расположенных в фабрике Redmond43, а второй уточняет условия первого запроса и выбирает устройства, подключенные по сети мобильной связи.
Добавьте следующий код в конце файла AddTagsAndQuery.py, чтобы реализовать функцию iothub_service_sample_run.
if __name__ == '__main__': print("Starting the Python IoT Hub Device Twin service sample...") print() iothub_service_sample_run()
Запустите приложение, выполнив следующую команду:
python AddTagsAndQuery.py
В результатах запроса на все устройства, расположенные на фабрике Redmond43, отобразится одно устройство, а для запроса на ограничение результатов устройствами, использующими сеть мобильной связи, не отобразится ни одного устройства. В следующем разделе вы создадите приложение для устройств, которое будет использовать сеть сотовой связи, и вы повторно запустите этот запрос, чтобы узнать, как оно изменяется.
Создание приложения устройства, которое обновляет сообщаемые свойства
При работе с этим разделом вы создадите консольное приложение Python, которое подключается к вашему концентратору как ваш {идентификатор устройства}, а затем обновляет сообщаемые свойства своего двойника устройства, чтобы подтвердить, что оно подключено через сотовую сеть.
В командной строке в рабочем каталоге установите пакет SDK устройства Центра Интернета вещей Azure для Python:
pip install azure-iot-device
В текстовом редакторе создайте файл ReportConnectivity.py.
Добавьте следующий код, чтобы импортировать необходимые модули из пакета SDK устройства.
import time from azure.iot.device import IoTHubModuleClient
Добавьте следующий код. Замените значение заполнителя
[IoTHub Device Connection String]
строкой подключения устройства, которую вы видели при регистрации устройства в Центре Интернета вещей:CONNECTION_STRING = "[IoTHub Device Connection String]"
Добавьте следующий код в файл ReportConnectivity.py, чтобы создать экземпляр и реализовать функциональные возможности двойника устройства:
def create_client(): # Instantiate client client = IoTHubModuleClient.create_from_connection_string(CONNECTION_STRING) # Define behavior for receiving twin desired property patches def twin_patch_handler(twin_patch): print("Twin patch received:") print(twin_patch) try: # Set handlers on the client client.on_twin_desired_properties_patch_received = twin_patch_handler except: # Clean up in the event of failure client.shutdown() return client
Добавьте следующий код в конце файла ReportConnectivity.py, чтобы запустить приложение:
def main(): print ( "Starting the Python IoT Hub Device Twin device sample..." ) client = create_client() print ( "IoTHubModuleClient waiting for commands, press Ctrl-C to exit" ) try: # Update reported properties with cellular information print ( "Sending data as reported property..." ) reported_patch = {"connectivity": "cellular"} client.patch_twin_reported_properties(reported_patch) print ( "Reported properties updated" ) # Wait for program exit while True: time.sleep(1000000) except KeyboardInterrupt: print ("IoT Hub Device Twin device sample stopped") finally: # Graceful exit print("Shutting down IoT Hub Client") client.shutdown() if __name__ == '__main__': main()
Запустите приложение устройства:
python ReportConnectivity.py
Вы увидите сообщение, подтверждающее обновление сообщаемых свойств двойников устройств.
Теперь, когда устройство сообщило сведения о подключении, оно должно появиться в обоих запросах. Вернитесь обратно и повторно запустите запросы:
python AddTagsAndQuery.py
На этот раз идентификатор {Device ID} должен появиться в результатах обоих запросов.
В приложении устройства вы увидите подтверждение того, что было получено исправление двойника с требуемыми свойствами, отправленное приложением службы.
Работая с этой статьей, вы выполните следующие задачи:
- Добавлены метаданные устройства в виде тегов из внутреннего приложения
- передача сведений о возможности подключения устройства в двойнике устройства;
- Запросил сведения о двойниках устройства с помощью языка запросов Центр Интернета вещей
Следующие шаги
Ознакомьтесь со следующими материалами.
Отправка данных телеметрии с устройств. См. статью Краткое руководство. Отправка данных телеметрии с устройства IoT Plug and Play в Центр Интернета вещей Azure.
Сведения о настройке устройств с использованием нужных свойств двойника устройства см. в статье Руководство по настройке устройств из внутренней службы.
Интерактивное управление устройствами, например включение вентилятора из контролируемого пользователем приложения. См. Краткое руководство. Управление подключенным к Центру Интернета вещей устройством.
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру