Начало работы с двойниками устройств
Используйте пакет SDK для устройств Центр Интернета вещей Azure и пакет SDK службы для разработки приложений, которые обрабатывают распространенные задачи двойника устройства. Двойники устройств — это документы JSON, хранящие сведения о состоянии устройства, в том числе метаданные, конфигурации и условия. Центр Интернета вещей сохраняет двойник устройства для каждого устройства, подключаемого к нему.
Двойники устройств можно использовать для:
- Хранение метаданных устройства из внутренней части решения
- Сообщите сведения о текущем состоянии, например доступные возможности и условия, например используемый метод подключения из приложения устройства.
- Синхронизация состояния длительных рабочих процессов, таких как обновления встроенного ПО и конфигурации, между приложением устройства и серверным приложением
- Запрос метаданных устройства, конфигурации или состояния
Дополнительные сведения о двойниках устройств, включая использование двойников устройств, см. в разделе "Общие сведения о двойниках устройств" и их использовании в Центр Интернета вещей.
Примечание.
Функции, описанные в этой статье, доступны только на стандартном уровне Центра Интернета вещей. Дополнительные сведения о базовых и бесплатных уровнях Центр Интернета вещей см. в разделе "Выбор подходящего уровня Центр Интернета вещей" для решения.
В этой статье показано, как разрабатывать два типа приложений:
- Приложения устройств могут обрабатывать запросы на обновление нужных свойств и реагировать на изменения сообщаемые свойства.
- Приложения службы могут обновлять теги двойников устройств, задавать новые нужные свойства и запрашивать устройства на основе значений двойников устройств.
Примечание.
Эта статья предназначена для дополнения примеров пакетов SDK Для Интернета вещей Azure, на которые ссылается эта статья. Средства SDK можно использовать для создания приложений устройств и внутренних приложений.
Необходимые компоненты
Центр Интернета вещей.
Зарегистрированное устройство
Если приложение использует протокол MQTT, убедитесь, что порт 8883 открыт в брандмауэре. Протокол MQTT взаимодействует через порт 8883. В некоторых корпоративных и академических сетях этот порт может быть заблокирован. Дополнительные сведения и способы устранения этой проблемы см. в разделе о подключении к Центру Интернета вещей по протоколу MQTT.
- Требуется Visual Studio
Обзор
В этой статье описывается, как использовать пакет SDK Для Интернета вещей Azure для .NET для создания кода приложения службы устройств и серверной службы для двойников устройств.
Создание приложения устройства
Приложения устройств могут считывать и записывать сообщаемые свойства двойника и получать уведомления об изменениях свойств двойника, заданных серверным приложением или Центр Интернета вещей.
В этом разделе описывается, как использовать код приложения устройства для:
- Получение двойника устройства и проверка сообщаемых свойств
- Обновление свойств двойника устройства
- Создание обработчика обратного вызова обновления требуемого свойства
Обязательный пакет NuGet устройства
Клиентские приложения устройств, написанные на C#, требуют пакета NuGet Microsoft.Azure.Devices.Client .
Добавьте эту using
инструкцию для использования библиотеки устройств.
using Microsoft.Azure.Devices.Client;
Подключение устройства к Центру Интернета вещей
Приложение устройства может пройти проверку подлинности с помощью Центр Интернета вещей с помощью следующих методов:
- Общий ключ доступа
- Сертификат X.509
Внимание
В этой статье содержатся шаги по подключению устройства с помощью подписанного URL-адреса, также называемого проверкой подлинности симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе "Рекомендации > по обеспечению безопасности подключений".
Проверка подлинности с помощью общего ключа доступа
Класс DeviceClient предоставляет все методы, необходимые для взаимодействия с двойниками устройств с устройства.
Подключитесь к устройству с помощью метода CreateFromConnectionString вместе с строка подключения устройства и протоколом транспорта подключения.
Параметр CreateFromConnectionString
транспортного протокола TransportType поддерживает следующие транспортные протоколы:
Mqtt
Mqtt_WebSocket_Only
Mqtt_Tcp_Only
Amqp
Amqp_WebSocket_Only
Amqp_Tcp_Only
Http1
Протокол не поддерживается для обновлений двойника устройства.
Этот пример подключается к устройству Mqtt
с помощью транспортного протокола.
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
static string DeviceConnectionString = "{IoT hub device connection string}";
static _deviceClient = null;
_deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString,
TransportType.Mqtt);
Проверка подлинности с помощью сертификата X.509
Чтобы подключить устройство к Центр Интернета вещей с помощью сертификата X.509:
Используйте DeviceAuthenticationWithX509Certificate для создания объекта, содержащего сведения об устройстве и сертификате.
DeviceAuthenticationWithX509Certificate
передается в качестве второго параметраDeviceClient.Create
(шаг 2).Используйте DeviceClient.Create для подключения устройства к Центр Интернета вещей с помощью сертификата X.509.
В этом примере сведения об устройстве и сертификате заполняются в объекте auth
DeviceAuthenticationWithX509Certificate
, передаваемом в DeviceClient.Create
.
В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте Environment.GetEnvironmentVariable("HOSTNAME")
для чтения переменной среды имени узла.
RootCertPath = "~/certificates/certs/sensor-thl-001-device.cert.pem";
Intermediate1CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate1.cert.pem";
Intermediate2CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate2.cert.pem";
DevicePfxPath = "~/certificates/certs/sensor-thl-001-device.cert.pfx";
DevicePfxPassword = "1234";
DeviceName = "MyDevice";
HostName = "xxxxx.azure-devices.net";
var chainCerts = new X509Certificate2Collection();
chainCerts.Add(new X509Certificate2(RootCertPath));
chainCerts.Add(new X509Certificate2(Intermediate1CertPath));
chainCerts.Add(new X509Certificate2(Intermediate2CertPath));
using var deviceCert = new X509Certificate2(DevicePfxPath, DevicePfxPassword);
using var auth = new DeviceAuthenticationWithX509Certificate(DeviceName, deviceCert, chainCerts);
using var deviceClient = DeviceClient.Create(
HostName,
auth,
TransportType.Amqp);
Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:
- Проверка подлинности удостоверений с помощью сертификатов X.509
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
Примеры работы проверки подлинности сертификата X.509 см. в статье:
- Подключение к сертификату X.509
- DeviceClientX509AuthenticationE2ETests
- Управляемый проект. Защита и масштабирование устройств Интернета вещей с помощью службы подготовки устройств Центр Интернета вещей
Получение двойника устройства и проверка свойств
Вызовите GetTwinAsync , чтобы получить текущие свойства двойника устройства. Существует множество свойств объекта Twin, которые можно использовать для доступа к определенным областям Twin
данных JSON, включая Properties
, Status
Tags
и Version
.
В этом примере извлекаются свойства двойника устройства и печатаются значения двойников в формате JSON.
Console.WriteLine("Retrieving twin...");
Twin twin = await _deviceClient.GetTwinAsync();
Console.WriteLine("\tInitial twin value received:");
Console.WriteLine($"\t{twin.ToJson()}");
Обновление свойств двойника устройства
Чтобы обновить сообщаемое свойство двойника, выполните следующие действия.
- Создание объекта TwinCollection для обновления сообщаемого свойства
- Обновление одного или нескольких сообщаемого свойства в объекте
TwinCollection
- Использование UpdateReportedPropertiesAsync для отправки отчетов об изменениях свойств в службу Центра Интернета вещей
Например:
try
{
Console.WriteLine("Sending sample start time as reported property");
TwinCollection reportedProperties = new TwinCollection();
reportedProperties["DateTimeLastAppLaunch"] = DateTime.UtcNow;
await _deviceClient.UpdateReportedPropertiesAsync(reportedProperties);
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine("Error in sample: {0}", ex.Message);
}
Создание обработчика обратного вызова обновления требуемого свойства
Создайте обработчик обратного вызова обновления требуемого свойства, который выполняется при изменении требуемого свойства в двойнике устройства путем передачи имени метода обработчика обратного вызова в SetDesiredPropertyUpdateCallbackAsync.
Например, этот вызов настраивает систему для уведомления метода с именемOnDesiredPropertyChangedAsync
при изменении требуемого свойства.
await _deviceClient.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 _deviceClient.UpdateReportedPropertiesAsync(reportedProperties);
}
Пример устройства SDK
Пакет SDK Для Интернета вещей Azure для .NET предоставляет рабочий пример приложения устройства, обрабатывающего задачи двойника устройства. Дополнительные сведения см. в разделе TwinSample.
Создание серверного приложения
Серверное приложение подключается к устройству через Центр Интернета вещей и может читать сообщаемые и нужные свойства устройства, записывать нужные свойства устройства и запускать запросы устройств.
В этом разделе описывается, как создать код внутреннего приложения для:
- Чтение и обновление полей двойника устройства
- Создание запроса двойника устройства
Класс RegistryManager предоставляет все методы, необходимые для создания серверного приложения для взаимодействия с двойниками устройств из службы.
Добавление пакета NuGet службы
Для приложений серверной службы требуется пакет NuGet Microsoft.Azure.Devices .
Подключение к Центру Интернета вещей
Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:
- Политика общего доступа
- Microsoft Entra
Внимание
В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в статье "Рекомендации > по безопасности cloud security".
Подключение с помощью политики общего доступа
Подключите серверное приложение к устройству с помощью CreateFromConnectionString. Приложению требуется разрешение на подключение службы для изменения требуемых свойств двойника устройства, и для запроса реестра требуется разрешение на чтение реестра. Политика общего доступа по умолчанию отсутствует, содержащая только эти два разрешения, поэтому необходимо создать его, если он еще не существует. Укажите эту политику общего доступа строка подключения в качестве параметраfromConnectionString
. Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".
using Microsoft.Azure.Devices;
static RegistryManager registryManager;
static string connectionString = "{Shared access policy connection string}";
registryManager = RegistryManager.CreateFromConnectionString(connectionString);
Подключение с помощью Microsoft Entra
Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные маркера безопасности перед подключением к Центр Интернета вещей. Этот маркер передается методу подключения Центр Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra, настроенное для предпочитаемых учетных данных проверки подлинности. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Учетные данные федеративного удостоверения
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Центр Интернета вещей участник двойников требуется для включения доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Дополнительные сведения см. в статье "Управление доступом к Центр Интернета вещей с помощью назначения ролей Azure RBAC".
Дополнительные сведения о настройке приложения Microsoft Entra см. в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт.
Проверка подлинности с помощью 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 — это учетные данные маркера безопасности, передаваемые методу подключения Центр Интернета вещей.
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 можно передать в подключение к методу Центр Интернета вещей для любого клиента ПАКЕТА 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);
Пример кода
Рабочий пример проверки подлинности службы Microsoft Entra см . в примере проверки подлинности на основе ролей.
Чтение и обновление полей двойника устройства
Вы можете получить текущие поля двойника устройства в объект Twin , вызвав GetTwinAsync.
Класс Twin
содержит свойства , соответствующие каждому разделу двойника устройства. Twin
Используйте свойства класса для просмотра и обновления полей двойника устройства. Свойства объекта можно использовать Twin
для обновления нескольких полей двойников перед записью обновлений на устройство с помощью UpdateTwinAsync
.
После обновления полей двойника вызовите UpdateTwinAsync для записи Twin
обновлений поля объекта обратно на устройство. Использование try
и catch
логика, связанная с обработчиком ошибок для перехвата неправильно отформатированных ошибок исправления.UpdateTwinAsync
Чтение и обновление тегов двойника устройства
Используйте свойство тегов двойника устройства для чтения и записи сведений о теге устройства.
Обновление тегов с помощью объекта двойника
В этом примере создается исправление location
тега, назначается Twin
объекту с помощью Tags
свойства, а затем применяется исправление.UpdateTwinAsync
// Retrieve the device twin
var twin = await registryManager.GetTwinAsync("myDeviceId");
// Create the tag patch
var tagspatch =
@"{
tags: {
location: {
region: 'US',
plant: 'Redmond43'
}
}
}";
// Assign the patch to the Twin object
twin.Tags["location"] = tagspatch;
// Apply the patch to update the device twin tags section
try
{
await registryManager.UpdateTwinAsync(twin.DeviceId, patch, twin.ETag);
}
catch (Exception e)
{
console.WriteLine("Twin update failed.", e.Message);
}
Обновление тегов с помощью строки JSON
Вы можете создать и применить исправление обновления сведений о двойниках устройств в формате JSON. Центр Интернета вещей анализирует и применяет исправление, если оно правильно отформатировано.
В этом примере вызывается GetTwinAsync
получение текущих полей двойника устройства в Twin
объект, создает отформатированный tag
в формате JSON исправление с сведениями о регионе и расположении завода, а затем вызывается UpdateTwinAsync
для применения исправления для обновления двойника устройства. При сбое отображается UpdateTwinAsync
сообщение об ошибке.
// Retrieve the device twin
var twin = await registryManager.GetTwinAsync("myDeviceId");
// Create the JSON tags patch
var patch =
@"{
tags: {
location: {
region: 'US',
plant: 'Redmond43'
}
}
}";
// Apply the patch to update the device twin tags
try
{
await registryManager.UpdateTwinAsync(twin.DeviceId, patch, twin.ETag);
}
catch (Exception e)
{
console.WriteLine("Twin update failed.", e.Message);
}
Просмотр и обновление нужных свойств двойника
Используйте свойство twin TwinProperties.Desired для чтения и записи сведений о нужном свойстве устройства. Обновление свойств двойника Desired
с помощью исправления в формате JSON.
В этом примере вызывается GetTwinAsync
получение текущих полей двойника устройства в Twin
объект, обновляет нужное свойство двойника, а затем вызывает UpdateTwinAsync
применение Twin
объекта для обновления двойника speed
устройства.
// Retrieve the device twin
var twin = await registryManager.GetTwinAsync("myDeviceId");
twin.Properties.Desired["speed"] = "type: '5G'";
await registryManager.UpdateTwinAsync(twin.DeviceId, twin, twin.ETag);
Другие методы обновления двойников
Вы также можете применить обновления двойников с помощью следующих методов ПАКЕТА SDK:
- Вызовите ReplaceTwinAsync , чтобы заменить весь двойник устройства.
- Вызовите UpdateTwins2Async , чтобы обновить список двойников, созданных ранее в системе.
Создание запроса двойника устройства
В этом разделе показаны два запроса двойника устройства. Запросы двойников устройств — это запросы, такие как SQL, которые возвращают результирующий набор двойников устройств.
Чтобы создать запрос двойника устройства, вызовите CreateQuery для отправки sql-запроса двойников и получения интерфейса IQuery . При необходимости можно вызвать CreateQuery
второй параметр, чтобы указать максимальное количество элементов на страницу.
Следующий вызов GetNextAsTwinAsync
или GetNextAsJsonAsync
метод столько раз, сколько необходимо для получения всех результатов двойника.
- GetNextAsTwinAsync для получения следующего результата страницы в виде объектов Twin .
- GetNextAsJsonAsync для получения следующего результата страницы в виде строк JSON.
Интерфейс IQuery
включает логическое свойство HasMoreResults , которое можно использовать для проверки наличия дополнительных результатов двойника для получения.
В этом примере запроса выбираются только двойники устройств, расположенные в заводе Redmond43 .
var query = registryManager.CreateQuery(
"SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'", 100);
var twinsInRedmond43 = await query.GetNextAsTwinAsync();
Console.WriteLine("Devices in Redmond43: {0}",
string.Join(", ", twinsInRedmond43.Select(t => t.DeviceId)));
В этом примере запрос уточняет первый запрос, чтобы выбрать только устройства, которые также подключены через сеть сотовой связи.
query = registryManager.CreateQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity.type = 'cellular'", 100);
var twinsInRedmond43UsingCellular = await query.GetNextAsTwinAsync();
Console.WriteLine("Devices in Redmond43 using cellular network: {0}",
string.Join(", ", twinsInRedmond43UsingCellular.Select(t => t.DeviceId)));
Пример службы SDK
Пакет SDK Для Интернета вещей Azure для .NET предоставляет рабочий пример приложения службы, обрабатывающего задачи двойника устройства. Дополнительные сведения см. в примере диспетчера реестра.
- Требуется пакет разработки Java SE 8. Убедитесь, что вы выбрали Java 8 в разделе долгосрочной поддержки , чтобы перейти к скачиванию для JDK 8.
Обзор
В этой статье описывается, как использовать пакет SDK Для Интернета вещей Azure для Java для создания кода приложения службы устройств и серверной службы для двойников устройств.
Создание приложения устройства
Приложения устройств могут считывать и записывать сообщаемые свойства двойника и получать уведомления об изменениях свойств двойника, заданных серверным приложением или Центр Интернета вещей.
В этом разделе описывается, как создать код приложения устройства для:
- Получение и просмотр двойника устройства
- Обновление свойств двойника устройства
- Подписка на изменения требуемого свойства
Класс DeviceClient предоставляет все методы, необходимые для взаимодействия с двойниками устройств с устройства.
Внимание
В этой статье содержатся шаги по подключению устройства с помощью подписанного URL-адреса, также называемого проверкой подлинности симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе "Рекомендации > по обеспечению безопасности подключений".
Операторы импорта устройства
Используйте следующие инструкции импорта устройств для доступа к пакету SDK Интернета вещей Azure для Java.
import com.microsoft.azure.sdk.iot.device.*;
import com.microsoft.azure.sdk.iot.device.DeviceTwin.*;
Подключение устройства к Центру Интернета вещей
Приложение устройства может пройти проверку подлинности с помощью Центр Интернета вещей с помощью следующих методов:
- Общий ключ доступа
- Сертификат X.509
Внимание
В этой статье содержатся шаги по подключению устройства с помощью подписанного URL-адреса, также называемого проверкой подлинности симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе "Рекомендации > по обеспечению безопасности подключений".
Проверка подлинности с помощью общего ключа доступа
Чтобы подключить устройство к Центр Интернета вещей, выполните действия.
Используйте IotHubClientProtocol для выбора протокола транспорта. Например:
IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
DeviceClient
Используйте конструктор для добавления основного строка подключения устройства и протокола.String connString = "{IoT hub device connection string}"; DeviceClient client = new DeviceClient(connString, protocol);
Используйте открытую для подключения устройства к Центру Интернета вещей. Если клиент уже открыт, метод ничего не делает.
client.open(true);
Проверка подлинности с помощью сертификата X.509
Чтобы подключить устройство к Центр Интернета вещей с помощью сертификата X.509:
- Создайте объект SSLContext с помощью buildSSLContext.
SSLContext
Добавьте сведения в объект ClientOptions.- Вызов DeviceClient с помощью
ClientOptions
сведений для создания подключения "устройство — Центр Интернета вещей".
В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используется Environment.GetEnvironmentVariable("PUBLICKEY")
для чтения переменной строки строки сертификата открытого ключа.
private static final String publicKeyCertificateString =
"-----BEGIN CERTIFICATE-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END CERTIFICATE-----\n";
//PEM encoded representation of the private key
private static final String privateKeyString =
"-----BEGIN EC PRIVATE KEY-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END EC PRIVATE KEY-----\n";
SSLContext sslContext = SSLContextBuilder.buildSSLContext(publicKeyCertificateString, privateKeyString);
ClientOptions clientOptions = ClientOptions.builder().sslContext(sslContext).build();
DeviceClient client = new DeviceClient(connString, protocol, clientOptions);
Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:
- Проверка подлинности удостоверений с помощью сертификатов X.509
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
Примеры работы проверки подлинности сертификата X.509 см. в статье:
Получение и просмотр двойника устройства
После открытия подключения клиента вызовите getTwin , чтобы получить текущие свойства двойника в Twin
объект.
Например:
private static Twin twin;
System.out.println("Getting current twin");
twin = client.getTwin();
System.out.println("Received current twin:");
System.out.println(twin);
Обновление сообщаемых свойств двойника устройства
После получения текущего двойника можно приступить к обновлению сообщаемых свойств. Вы также можете обновлять сообщаемые свойства без получения текущего двойника до тех пор, пока у вас есть правильная версия сообщаемых свойств. Если вы отправляете сообщаемые свойства и получаете ошибку "предварительный сбой", версия сообщаемых свойств устарела. В этом случае получите последнюю версию, вызвав getTwin
еще раз.
Чтобы обновить сообщаемые свойства, выполните указанные действия.
Вызовите getReportedProperties , чтобы получить сообщаемые свойства двойника в объект TwinCollection .
Используйте для обновления сообщаемого свойства в объекте
TwinCollection
. Вызовput
каждого сообщаемого обновления свойства.Используйте updateReportedProperties , чтобы применить группу сообщаемых свойств, которые были обновлены с помощью
put
метода.
Например:
TwinCollection reportedProperties = twin.getReportedProperties();
int newTemperature = new Random().nextInt(80);
reportedProperties.put("HomeTemp(F)", newTemperature);
System.out.println("Updating reported property \"HomeTemp(F)\" to value " + newTemperature);
ReportedPropertiesUpdateResponse response = client.updateReportedProperties(reportedProperties);
System.out.println("Successfully set property \"HomeTemp(F)\" to value " + newTemperature);
Подписка на изменения требуемого свойства
Вызовите subscribeToDesiredProperties , чтобы подписаться на нужные изменения свойств. Этот клиент получает обратный вызов с Twin
объектом при каждом обновлении требуемого свойства. Этот обратный вызов содержит полный набор требуемых свойств или только обновленное свойство в зависимости от того, как было изменено требуемое свойство.
В этом примере подписывается на изменения требуемого свойства. Любые изменения требуемого свойства передаются обработчику с именем DesiredPropertiesUpdatedHandler
.
client.subscribeToDesiredProperties(new DesiredPropertiesUpdatedHandler(), null);
В этом примере требуемое DesiredPropertiesUpdatedHandler
свойство изменяет обработчик обратных вызовов вызывает getDesiredProperties для получения изменений свойств, а затем выводит обновленные свойства двойника.
private static class DesiredPropertiesUpdatedHandler implements DesiredPropertiesCallback
{
@Override
public void onDesiredPropertiesUpdated(Twin desiredPropertyUpdateTwin, Object context)
{
if (twin == null)
{
// No need to care about this update because these properties will be present in the twin retrieved by getTwin.
System.out.println("Received desired properties update before getting current twin. Ignoring this update.");
return;
}
// desiredPropertyUpdateTwin.getDesiredProperties() contains all the newly updated desired properties as well as the new version of the desired properties
twin.getDesiredProperties().putAll(desiredPropertyUpdateTwin.getDesiredProperties());
twin.getDesiredProperties().setVersion(desiredPropertyUpdateTwin.getDesiredProperties().getVersion());
System.out.println("Received desired property update. Current twin:");
System.out.println(twin);
}
}
Пример устройства SDK
Пакет SDK Для Интернета вещей Azure для Java содержит рабочий пример для тестирования концепций приложения устройства, описанных в этой статье. Дополнительные сведения см. в примере двойника устройства.
Создание серверного приложения
В этом разделе описывается, как создать серверное приложение, которое:
- Обновление тегов двойника устройства
- Запросы устройств с помощью фильтров по тегам и свойствам
Класс ServiceClient
DeviceTwin содержит методы, которые службы могут использовать для доступа к двойникам устройств.
Инструкции импорта служб
Используйте следующие инструкции импорта служб для доступа к пакету SDK Интернета вещей Azure для Java.
import com.microsoft.azure.sdk.iot.service.devicetwin.*;
import com.microsoft.azure.sdk.iot.service.exceptions.IotHubException;
Подключение к Центру Интернета вещей
Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:
- Политика общего доступа
- Microsoft Entra
Внимание
В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в статье "Рекомендации > по безопасности cloud security".
Подключение с помощью политики общего доступа
Используйте конструктор DeviceTwin для создания подключения к Центру Интернета вещей. Объект DeviceTwin
обрабатывает обмен данными с центром Интернета вещей.
Приложению требуется разрешение на подключение службы для изменения требуемых свойств двойника устройства, и для запроса реестра требуется разрешение на чтение реестра. Политика общего доступа по умолчанию отсутствует, содержащая только эти два разрешения, поэтому необходимо создать его, если он еще не существует. Укажите эту политику общего доступа строка подключения в качестве параметраfromConnectionString
. Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".
Объект DeviceTwinDevice представляет двойник устройства со своими свойствами и тегами.
Например:
public static final String iotHubConnectionString = "{Shared access policy connection string}";
public static final String deviceId = "myDeviceId";
public static final String region = "US";
public static final String plant = "Redmond43";
// Get the DeviceTwin and DeviceTwinDevice objects
DeviceTwin twinClient = new DeviceTwin(iotHubConnectionString);
DeviceTwinDevice device = new DeviceTwinDevice(deviceId);
Подключение с помощью Microsoft Entra
Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные маркера безопасности перед подключением к Центр Интернета вещей. Этот маркер передается методу подключения Центр Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".
Общие сведения о проверке подлинности пакета SDK для Java см. в статье "Проверка подлинности Azure с помощью Java и удостоверений Azure".
Для простоты в этом разделе рассматривается описание проверки подлинности с помощью секрета клиента.
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra, настроенное для предпочитаемых учетных данных проверки подлинности. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Учетные данные федеративного удостоверения
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Центр Интернета вещей участник двойников требуется для включения доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Дополнительные сведения см. в статье "Управление доступом к Центр Интернета вещей с помощью назначения ролей Azure RBAC".
Дополнительные сведения о настройке приложения Microsoft Entra см. в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — использовать DefaultAzureCredential, но рекомендуется использовать другой метод в рабочей среде, включая определенный TokenCredential
или синтаксический анализ ChainedTokenCredential
.
Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential
см. в цепочках учетных данных в клиентской библиотеке удостоверений Azure для Java.
DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных в порядке, пока он не находит рабочие учетные данные.
Учетные данные приложения Microsoft Entra можно выполнить с помощью DefaultAzureCredentialBuilder. Сохраните параметры подключения, такие как client secretID, clientID и значения секрета клиента в качестве переменных среды. TokenCredential
После создания передайте его в ServiceClient или другой построитель в качестве параметра credential.
В этом примере DefaultAzureCredentialBuilder
пытается выполнить проверку подлинности подключения из списка, описанного в defaultAzureCredential. Результат успешной проверки подлинности Microsoft Entra — это учетные данные маркера безопасности, передаваемые конструктору, например ServiceClient.
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Проверка подлинности с помощью ClientSecretCredentialBuilder
С помощью ClientSecretCredentialBuilder можно создать учетные данные с помощью сведений о секрете клиента. В случае успешного выполнения этот метод возвращает токенCredential , который можно передать в ServiceClient или другому построителю в качестве параметра credential.
В этом примере в переменные среды добавлены секрет клиента регистрации приложений Microsoft Entra, идентификатор клиента и значения идентификатора клиента. Эти переменные среды используются ClientSecretCredentialBuilder
для создания учетных данных.
string clientSecretValue = System.getenv("AZURE_CLIENT_SECRET");
string clientID = System.getenv("AZURE_CLIENT_ID");
string tenantID = System.getenv("AZURE_TENANT_ID");
TokenCredential credential =
new ClientSecretCredentialBuilder()
.tenantId(tenantID)
.clientId(clientID)
.clientSecret(clientSecretValue)
.build();
Другие классы проверки подлинности
Пакет SDK для Java также включает следующие классы, которые проходят проверку подлинности серверного приложения с помощью Microsoft Entra:
- AuthorizationCodeCredential
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePipelinesCredential
- ChainedTokenCredential
- ClientAssertionCredential
- ClientCertificateCredential
- DeviceCodeCredential
- EnvironmentCredential
- InteractiveBrowserCredential
- ManagedIdentityCredential
- OnBehalfOfCredential
Примеры кода
Примеры работы проверки подлинности службы Microsoft Entra см . в примере проверки подлинности на основе ролей.
Обновление полей двойника устройства
Чтобы обновить поля двойника устройства, выполните следующие действия.
Получение текущих полей двойника устройства с помощью getTwin
В этом примере извлекаются и печатаются поля двойника устройства:
// Get the device twin from IoT Hub System.out.println("Device twin before update:"); twinClient.getTwin(device); System.out.println(device);
HashSet
Использование объекта дляadd
группы пар тегов двойниковДобавление группы пар тегов из
tags
объекта вDeviceTwinDevice
объект с помощью setTagsОбновление двойника в Центре Интернета вещей с помощью updateTwin
В этом примере обновляются теги двойников устройств и региона для двойника устройства:
// Update device twin tags if they are different // from the existing values String currentTags = device.tagsToString(); if ((!currentTags.contains("region=" + region) && !currentTags.contains("plant=" + plant))) { // Create the tags and attach them to the DeviceTwinDevice object Set<Pair> tags = new HashSet<Pair>(); tags.add(new Pair("region", region)); tags.add(new Pair("plant", plant)); device.setTags(tags); // Update the device twin in IoT Hub System.out.println("Updating device twin"); twinClient.updateTwin(device); } // Retrieve and display the device twin with the tag values from IoT Hub System.out.println("Device twin after update:"); twinClient.getTwin(device); System.out.println(device);
Создание запроса двойника устройства
В этом разделе показаны два запроса двойника устройства. Запросы двойников устройств — это запросы, такие как SQL, которые возвращают результирующий набор двойников устройств.
Класс Query содержит методы, которые можно использовать для создания запросов в стиле SQL для Центр Интернета вещей для двойников, заданий, заданий устройств или необработанных данных.
Чтобы создать запрос устройства, выполните приведенные действия.
Создание SQL-запроса двойников с помощью createSqlQuery
Использование queryTwin для выполнения запроса
Используйте hasNextDeviceTwin , чтобы проверить наличие другого двойника устройства в результирующем наборе
Получение следующего двойника устройства из результированного набора с помощью getNextDeviceTwin
В следующем примере запросов возвращается не более 100 устройств.
В этом примере запроса выбираются только двойники устройств, расположенные в заводе Redmond43 .
// Query the device twins in IoT Hub
System.out.println("Devices in Redmond:");
// Construct the query
SqlQuery sqlQuery = SqlQuery.createSqlQuery("*", SqlQuery.FromType.DEVICES, "tags.plant='Redmond43'", null);
// Run the query, returning a maximum of 100 devices
Query twinQuery = twinClient.queryTwin(sqlQuery.getQuery(), 100);
while (twinClient.hasNextDeviceTwin(twinQuery)) {
DeviceTwinDevice d = twinClient.getNextDeviceTwin(twinQuery);
System.out.println(d.getDeviceId());
}
В этом примере запрос уточняет первый запрос, чтобы выбрать только устройства, которые также подключены через сеть сотовой связи.
System.out.println("Devices in Redmond using a cellular network:");
// Construct the query
sqlQuery = SqlQuery.createSqlQuery("*", SqlQuery.FromType.DEVICES, "tags.plant='Redmond43' AND properties.reported.connectivityType = 'cellular'", null);
// Run the query, returning a maximum of 100 devices
twinQuery = twinClient.queryTwin(sqlQuery.getQuery(), 3);
while (twinClient.hasNextDeviceTwin(twinQuery)) {
DeviceTwinDevice d = twinClient.getNextDeviceTwin(twinQuery);
System.out.println(d.getDeviceId());
}
Пример службы SDK
Пакет SDK Для Интернета вещей Azure для Java предоставляет рабочий пример приложения службы, обрабатывающего задачи двойника устройства. Дополнительные сведения см. в примере двойника устройства.
- Рекомендуется использовать пакет SDK для Python версии 3.7 или более поздней версии. Обязательно используйте 32-разрядную или 64-разрядную версию установки согласно требованиям программы настройки. При появлении запроса во время установки обязательно добавьте Python в переменную среды соответствующей платформы.
Обзор
В этой статье описывается, как использовать пакет SDK Для Интернета вещей Azure для Python для создания кода приложения устройства и серверной службы для двойников устройств.
Установка пакетов
Для создания приложений устройств необходимо установить библиотеку azure-iot-device .
pip install azure-iot-device
Для создания внутренних приложений службы необходимо установить библиотеку Azure-iot-hub.
pip install azure-iot-hub
Создание приложения устройства
Приложения устройств могут считывать и записывать сообщаемые свойства двойника и получать уведомления об изменениях свойств двойника, заданных серверным приложением или Центр Интернета вещей.
Класс IoTHubDeviceClient содержит методы, которые можно использовать для работы с двойниками устройств.
В этом разделе описывается, как создать код приложения устройства, который:
- Извлекает двойник устройства и проверяет сообщаемые свойства
- Свойства двойника устройства с исправлением
Оператор импорта устройства
Добавьте этот код для импорта IoTHubDeviceClient
функций из пакета SDK для azure.iot.device.
from azure.iot.device import IoTHubDeviceClient
Подключение устройства к Центру Интернета вещей
Приложение устройства может пройти проверку подлинности с помощью Центр Интернета вещей с помощью следующих методов:
- Общий ключ доступа
- Сертификат X.509
Внимание
В этой статье содержатся шаги по подключению устройства с помощью подписанного URL-адреса, также называемого проверкой подлинности симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе "Рекомендации > по обеспечению безопасности подключений".
Проверка подлинности с помощью общего ключа доступа
Чтобы подключить устройство к Центр Интернета вещей, выполните действия.
- Вызовите create_from_connection_string, чтобы добавить основной строка подключения устройства.
- Вызовите подключение для подключения клиента устройства.
Например:
# Add your IoT hub primary connection string
CONNECTION_STRING = "{Device primary connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
# Connect the client
device_client.connect()
Проверка подлинности с помощью сертификата X.509
Чтобы подключить устройство к Центр Интернета вещей с помощью сертификата X.509:
- Добавление параметров сертификата X.509 с помощью create_from_x509_certificate
- Вызов подключения для подключения клиента устройства
В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте os.getenv("HOSTNAME")
для чтения переменной среды имени узла.
# The Azure IoT hub name
hostname = "xxxxx.azure-devices.net"
# The device that has been created on the portal using X509 CA signing or self-signing capabilities
device_id = "MyDevice"
# The X.509 certificate file name
cert_file = "~/certificates/certs/sensor-thl-001-device.cert.pfx"
key_file = "~/certificates/certs/sensor-thl-001-device.cert.key"
# The optional certificate pass phrase
pass_phrase = "1234"
x509 = X509(
cert_file,
key_file,
pass_phrase,
)
# The client object is used to interact with your Azure IoT hub.
device_client = IoTHubDeviceClient.create_from_x509_certificate(
hostname=hostname, device_id=device_id, x509=x509
)
# Connect to IoT Hub
await device_client.connect()
Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:
- Проверка подлинности удостоверений с помощью сертификатов X.509
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
Рабочие примеры проверки подлинности сертификата X.509 см. в примерах, имена файлов которых заканчиваются в сценариях x509 в концентраторе Async.
Получение двойника устройства и проверка сообщаемых свойств
Вы можете получить и проверить сведения о двойниках устройств, включая теги и свойства. Данные двойника устройства, полученные в формате JSON, совпадают с данными, отформатированными в формате JSON, которые можно просмотреть для устройства в портал Azure.
Вызовите get_twin, чтобы получить двойник устройства из службы Центр Интернета вещей Azure. Сведения о двойниках помещаются в переменную, которую можно распечатать или проверить.
В этом примере извлекается двойник устройства и используется print
команда для просмотра двойника устройства в формате JSON.
# get the twin
twin = await device_client.get_twin()
print("Twin document:")
print("{}".format(twin))
Свойства двойника устройства с исправлением
Вы можете применить исправление для обновления сообщаемого свойства устройства в формате JSON.
Чтобы применить исправление для обновления сообщаемого свойства, выполните указанные действия.
- Назначьте исправление JSON для сообщаемого свойства переменной.
- Вызовите patch_twin_reported_properties , чтобы применить исправление JSON к сообщаемой свойствам. Это синхронный вызов, то есть эта функция не возвращается, пока исправление не будет отправлено в службу и подтверждено.
Если patch_twin_reported_properties
возвращается ошибка, эта функция вызывает соответствующую ошибку.
# 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)
Вы также можете вызвать эти методы для обновления двойников устройств:
- Вызовите replace_twin для замены тегов двойника устройства и требуемых свойств.
- Вызовите update_twin для обновления тегов двойника устройства и требуемых свойств.
Обработчик исправлений для входящих требуемых свойств
Вызовите on_twin_desired_properties_patch_received для создания функции обработчика или корутины, вызываемой при получении исправления свойств двойника. Обработчик принимает один аргумент, который является исправлением двойника в виде объекта словаря 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
Пакет SDK Для Интернета вещей Azure для Python включает следующие примеры:
- get_twin — подключитесь к устройству и получите сведения о двойниках.
- update_twin_reported_properties — обновление сообщаемых свойств двойника.
- receive_twin_desired_properties — получение и обновление нужных свойств.
Создание серверного приложения
Серверное приложение подключается к устройству через Центр Интернета вещей и может читать сообщаемые и нужные свойства устройства, записывать нужные свойства устройства и запускать запросы устройств.
В этом разделе описывается, как создать серверное приложение для:
- Обновление тегов двойников и требуемых свойств
- Запросы устройств с помощью фильтров по тегам и свойствам
Класс IoTHubRegistryManager предоставляет все методы, необходимые для создания серверного приложения для взаимодействия с двойниками устройств из службы.
Подключение к Центру Интернета вещей
Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:
- Политика общего доступа
- Microsoft Entra
Внимание
В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в статье "Рекомендации > по безопасности cloud security".
Подключение с помощью политики общего доступа
Подключитесь к Центру Интернета вещей с помощью from_connection_string. Приложению требуется разрешение на подключение службы для изменения требуемых свойств двойника устройства, и для запроса реестра требуется разрешение на чтение реестра. Политика общего доступа по умолчанию отсутствует, содержащая только эти два разрешения, поэтому необходимо создать его, если он еще не существует. Укажите эту политику общего доступа строка подключения в качестве параметраfromConnectionString
. Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".
Например:
import sys
from time import sleep
from azure.iot.hub import IoTHubRegistryManager
from azure.iot.hub.models import Twin, TwinProperties, QuerySpecification, QueryResult
# Connect to IoT hub
IOTHUB_CONNECTION_STRING = "{IoT hub service connection string}"
iothub_registry_manager = IoTHubRegistryManager.from_connection_string(IOTHUB_CONNECTION_STRING)
Подключение с помощью Microsoft Entra
Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные маркера безопасности перед подключением к Центр Интернета вещей. Этот маркер передается методу подключения Центр Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".
Общие сведения о проверке подлинности пакета SDK для Python см. в статье "Проверка подлинности приложений Python в службах Azure с помощью пакета SDK Azure для Python"
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra, настроенное для предпочитаемых учетных данных проверки подлинности. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Учетные данные федеративного удостоверения
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Центр Интернета вещей участник двойников требуется для включения доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Дополнительные сведения см. в статье "Управление доступом к Центр Интернета вещей с помощью назначения ролей Azure RBAC".
Дополнительные сведения о настройке приложения Microsoft Entra см. в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — использовать DefaultAzureCredential, но рекомендуется использовать другой метод в рабочей среде, включая определенный TokenCredential
или синтаксический анализ ChainedTokenCredential
. Для простоты в этом разделе описывается использование проверки DefaultAzureCredential
подлинности и секрет клиента. Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential
см. в разделе "Учетные данные" в клиентской библиотеке удостоверений Azure для Python.
DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных в порядке, пока он не находит рабочие учетные данные.
Для Microsoft Entra требуется этот пакет импорта и соответствующая import
инструкция:
pip install azure-identity
from azure.identity import DefaultAzureCredential
В этом примере в переменные среды были добавлены секрет клиента регистрации приложений Microsoft Entra, идентификатор клиента и идентификатор клиента. Эти переменные среды используются DefaultAzureCredential
для проверки подлинности приложения. Результат успешной проверки подлинности Microsoft Entra — это учетные данные маркера безопасности, передаваемые методу подключения Центр Интернета вещей.
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
Результирующий AccessToken можно передать для from_token_credential
подключения к Центр Интернета вещей для любого клиента ПАКЕТА SDK, который принимает учетные данные Microsoft Entra:
- IoTHubRegistryManager для создания подключения к службе для Центр Интернета вещей с помощью учетных данных маркера Записи.
- 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
. Затем url-адрес службы Azure и учетные данные предоставляются для IoTHubRegistryManager.from_token_credential
создания подключения к Центр Интернета вещей.
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 см. в разделе "Библиотека проверки подлинности Майкрософт" (MSAL) для Python.
Обновление тегов двойников и требуемых свойств
Вы можете одновременно обновлять теги двойников устройств и требуемые свойства из серверного приложения с помощью update_twin.
- Вызов get_twin для получения текущей версии двойника устройства
- Используйте класс Twin для добавления тегов и свойств в формате JSON.
- Вызов,
update_twin
чтобы применить исправление к двойнику устройства. Вы также можете использовать replace_twin для замены нужных свойств и тегов для двойника устройства.
В этом примере обновляются region
и plant
содержатся сведения о тегах и задаются 1
требуемые power_level
свойства.
new_tags = {
'location' : {
'region' : 'US',
'plant' : 'Redmond43'
}
}
DEVICE_ID = "[Device Id]"
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)
Создание запроса двойника устройства
Сведения о двойниках устройств можно запрашивать с помощью запросов двойников устройств. Запросы двойников устройств — это запросы, такие как SQL, которые возвращают результирующий набор двойников устройств.
Чтобы использовать запрос двойника устройства, выполните следующие действия.
Используйте объект QuerySpecification для определения запроса, аналогичного SQL.
Используйте query_iot_hub для запроса IoTHub и получения сведений о двойниках устройств с помощью спецификации запроса, например SQL.
В этом примере выполняется два запроса. Первый выбирает только двойники устройств, расположенных в Redmond43
заводе, а второй — запрос, чтобы выбрать только устройства, которые также подключены через сеть сотовой связи. Результаты печатаются после каждого запроса.
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])))
print()
Пример службы SDK
Пакет SDK Для Интернета вещей Azure для Python предоставляет рабочий пример приложения службы, обрабатывающего задачи двойника устройства. Дополнительные сведения см. в примере запроса диспетчера реестра.
- Требуется Node.js версии 10.0.x или более поздней
Обзор
В этой статье описывается, как использовать пакет SDK Для Интернета вещей Azure для Node.js для создания кода приложения службы устройств и серверной службы для двойников устройств.
Создание приложения устройства
Приложения устройств могут считывать и записывать сообщаемые свойства двойника и получать уведомления об изменениях свойств двойника, заданных серверным приложением или Центр Интернета вещей.
В этом разделе описывается, как использовать пакет azure-iot-device в пакете SDK Для Интернета вещей Azure для Node.js для создания приложения для устройства:
- Получение двойника устройства и проверка сообщаемых свойств
- Обновление свойств двойника устройства
- Получение уведомления об изменениях требуемого свойства
Внимание
В этой статье содержатся шаги по подключению устройства с помощью подписанного URL-адреса, также называемого проверкой подлинности симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе "Рекомендации > по обеспечению безопасности подключений".
Установка пакета ПАКЕТА SDK для устройств
Выполните следующую команду, чтобы установить пакет SDK для устройств Azure-iot-device на компьютере разработки:
npm install azure-iot-device --save
Подключение устройства к Центру Интернета вещей
Приложение устройства может пройти проверку подлинности с помощью Центр Интернета вещей с помощью следующих методов:
- Сертификат X.509
- Общий ключ доступа
Внимание
В этой статье содержатся шаги по подключению устройства с помощью подписанного URL-адреса, также называемого проверкой подлинности симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе "Рекомендации > по обеспечению безопасности подключений".
Проверка подлинности с помощью сертификата X.509
Сертификат X.509 подключен к транспорту подключения устройства к Центр Интернета вещей.
Чтобы настроить подключение "устройство к Центр Интернета вещей" с помощью сертификата X.509:
Вызовите fromConnectionString, чтобы добавить строка подключения модуля устройства или удостоверения и тип транспорта в
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 (при необходимости парольной фразы) в транспорт клиента.
Вызовите, чтобы открыть подключение с устройства, чтобы Центр Интернета вещей.
В этом примере показаны сведения о конфигурации сертификата в переменной 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);
Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:
- Проверка подлинности удостоверений с помощью сертификатов X.509
- Создание и отправка сертификатов для тестирования
Пример кода
Рабочий пример проверки подлинности сертификата X.509 см. в разделе "Простой пример устройства X.509".
Проверка подлинности с помощью общего ключа доступа
Пакет azure-iot-device содержит объекты, которые интерфейсирует с устройствами Интернета вещей. Класс Twin включает объекты, относящиеся к двойнику. В этом разделе описывается Client
код класса, используемый для чтения и записи данных двойника устройства.
Выбор транспортного протокола
Объект Client
поддерживает следующие протоколы:
Amqp
Http
— При использованииHttp
Client
экземпляр проверяет наличие сообщений из Центр Интернета вещей редко (как минимум каждые 25 минут).Mqtt
MqttWs
AmqpWs
Установите необходимые транспортные протоколы на компьютере разработки.
Например, эта команда устанавливает Mqtt
протокол:
npm install azure-iot-device-mqtt --save
Дополнительные сведения о различиях между MQTT, AMQP и HTTPS см. в статьях Руководство по обмену данными между облаком и устройством и Выбор протокола связи.
Создание клиентского модуля
Client
Создайте модуль с помощью установленного пакета.
Например:
const Client = require('azure-iot-device').Client;
Создание модуля протокола
Protocol
Создайте модуль с помощью установленного транспортного пакета.
В этом примере назначается протокол MQTT:
const Protocol = require('azure-iot-device-mqtt').Mqtt;
Добавление протокола строка подключения устройства и транспорта
Вызов изConnectionString для предоставления параметров подключения устройства:
- connStr — строка подключения, которая инкапсулирует разрешения "подключение устройства" для Центра Интернета вещей. Строка подключения содержит имя узла, идентификатор устройства и общий ключ доступа в этом формате: "HostName=<iothub_host_name>; DeviceId=<device_id>; SharedAccessKey=<device_key>".
- transportCtor — транспортный протокол.
В этом примере используется транспортный Mqtt
протокол:
const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Mqtt;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Открытие подключения к Центр Интернета вещей
Используйте открытый метод, чтобы открыть подключение между устройством Интернета вещей и Центр Интернета вещей.
Используется .catch(err)
для перехвата ошибки и выполнения кода обработчика.
Например:
client.open() //open the connection
.catch((err) => {
console.error('Could not connect: ' + err.message);
});
Получение двойника устройства и проверка сообщаемых свойств
Вызовите getTwin , чтобы получить текущие сведения о двойнике устройства в объект Twin .
Например:
client.getTwin(function(err, twin))
if (err)
console.error('could not get twin');
Обновление свойств двойника устройства
Используйте обновление для обновления сообщаемого свойства устройства. Включите исправление в формате JSON в качестве первого параметра и метода обратного вызова состояния выполнения функции в качестве второго параметра метода.
В этом примере исправление двойника двойника в формате JSON хранится в переменной patch
. Исправление содержит значение cellular
обновления двойника connectivity
устройства. Обработчик исправлений и ошибок передается методу update
. При возникновении ошибки отображается сообщение об ошибке консоли.
var patch = {
connectivity: {
type: 'cellular'
}
}
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));
});
Получение события, если что-либо изменяется в группе свойств
Вы можете создать прослушиватель для получения события, если что-либо в группе свойств изменяется.
Например:
maxTemperature
СвойстваminTemperature
находятся под группированием свойств с именемproperties.desired.climate changes
.Приложение серверной службы применяет это исправление для обновления
minTemperature
иmaxTemperature
требуемых свойств:const twinPatch1 = { properties: { desired: { climate: { minTemperature: 68, maxTemperature: 76, }, }, }, };
Этот код настраивает требуемые свойства, изменяющий прослушиватель событий, который активирует любые изменения в
properties.desired.climate
группе свойств. Если в этой группе изменяется требуемое свойство, сообщения об изменении температуры min и max, отображаемые в консоли: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); });
Примеры пакета SDK для устройств
Пакет SDK Для Интернета вещей Azure для Node.js содержит два примера двойников устройств:
Создание серверного приложения
Серверное приложение подключается к устройству через Центр Интернета вещей и может читать сообщаемые и нужные свойства устройства, записывать нужные свойства устройства и запускать запросы устройств.
В этом разделе описывается, как создать серверное приложение, которое:
- Извлекает и обновляет двойник устройства
- Создание запроса двойника устройства
Установка пакета ПАКЕТА SDK службы
Выполните следующую команду, чтобы установить azure-iothub на компьютере разработки:
npm install azure-iothub --save
Класс Registry предоставляет все методы, необходимые для взаимодействия с двойниками устройств из серверного приложения.
Подключение к Центру Интернета вещей
Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:
- Политика общего доступа
- Microsoft Entra
Внимание
В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в статье "Рекомендации > по безопасности cloud security".
Подключение с помощью политики общего доступа
Используйте fromConnectionString для подключения к Центру Интернета вещей. Приложению требуется разрешение на подключение службы для изменения требуемых свойств двойника устройства, и для запроса реестра требуется разрешение на чтение реестра. Политика общего доступа по умолчанию отсутствует, содержащая только эти два разрешения, поэтому необходимо создать его, если он еще не существует. Укажите эту политику общего доступа строка подключения в качестве параметраfromConnectionString
. Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".
'use strict';
var iothub = require('azure-iothub');
var connectionString = '{Shared access policy connection string}';
var registry = iothub.Registry.fromConnectionString(connectionString);
Подключение с помощью Microsoft Entra
Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные маркера безопасности перед подключением к Центр Интернета вещей. Этот маркер передается методу подключения Центр Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".
Общие сведения о проверке подлинности пакета SDK для Node.js см. в следующих статье:
- Начало работы с проверкой подлинности пользователей в Azure
- Клиентская библиотека удостоверений Azure для JavaScript
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra, настроенное для предпочитаемых учетных данных проверки подлинности. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Учетные данные федеративного удостоверения
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Центр Интернета вещей участник двойников требуется для включения доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Дополнительные сведения см. в статье "Управление доступом к Центр Интернета вещей с помощью назначения ролей Azure RBAC".
Дополнительные сведения о настройке приложения Microsoft Entra см. в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — использовать DefaultAzureCredential, но рекомендуется использовать другой метод в рабочей среде, включая определенный TokenCredential
или синтаксический анализ ChainedTokenCredential
. Для простоты в этом разделе описывается использование проверки DefaultAzureCredential
подлинности и секрет клиента.
Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential
см. в разделе "Учетные данные" в клиентской библиотеке удостоверений Azure для JavaScript
DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных в порядке, пока он не находит рабочие учетные данные.
Для Microsoft Entra требуется этот пакет:
npm install --save @azure/identity
В этом примере в переменные среды были добавлены секрет клиента регистрации приложений Microsoft Entra, идентификатор клиента и идентификатор клиента. Эти переменные среды используются DefaultAzureCredential
для проверки подлинности приложения. Результат успешной проверки подлинности Microsoft Entra — это учетные данные маркера безопасности, передаваемые методу подключения Центр Интернета вещей.
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
Затем полученный маркер учетных данных можно передать изTokenCredential для подключения к Центр Интернета вещей для любого клиента ПАКЕТА 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 и учетные данные.
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.
Получение и обновление двойника устройства
Вы можете создать исправление, содержащее теги и необходимые обновления свойств для двойника устройства.
Чтобы обновить двойник устройства, выполните следующие действия.
- Вызовите getTwin , чтобы получить объект двойника устройства.
- Отформатируйте исправление, содержащее обновление двойника устройства. Исправление отформатировано в формате JSON, как описано в классе Twin. Исправление серверной службы может содержать теги и необходимые обновления свойств. Дополнительные сведения о формате исправлений см. в формате тегов и свойств.
- Вызов обновления для обновления двойника устройства с помощью исправления.
В этом примере извлекается myDeviceId
двойник устройства, для которого применяется исправление для двойников, содержащих location
обновление тега region: 'US', plant: 'Redmond43'
.
registry.getTwin('myDeviceId', function(err, twin){
if (err) {
console.error(err.constructor.name + ': ' + err.message);
} else {
var patch = {
tags: {
location: {
region: 'US',
plant: 'Redmond43'
}
}
};
twin.update(patch, function(err) {
if (err) {
console.error('Could not update twin: ' + err.constructor.name + ': ' + err.message);
} else {
console.log(twin.deviceId + ' twin updated successfully');
queryTwins();
}
});
}
});
Создание запроса двойника устройства
Вы можете создавать запросы на устройства, подобные SQL, для сбора сведений из двойников устройств.
Используйте createQuery для создания запроса, который можно запустить в экземпляре Центра Интернета вещей, чтобы найти сведения об устройствах или заданиях.
createQuery
включает два параметра:
- sqlQuery — запрос, написанный как строка SQL.
- pageSize — требуемое количество результатов на страницу (необязательно. по умолчанию: 1000, максимум: 10000).
Если указан параметр pageSize, объект запроса содержит hasMoreResults
логическое свойство, которое можно проверить и использовать nextAsTwin
метод, чтобы получить страницу результатов следующего двойника столько раз, сколько необходимо для получения всех результатов. Вызывается next
метод для результатов, которые не являются двойниками устройств, например результаты агрегирования запросов.
В этом примере запроса выбираются только двойники устройств, расположенные в заводе Redmond43
.
var queryTwins = function() {
var query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'", 100);
query.nextAsTwin(function(err, results) {
if (err) {
console.error('Failed to fetch the results: ' + err.message);
} else {
console.log("Devices in Redmond43: " + results.map(function(twin) {return twin.deviceId}).join(','));
}
});
В этом примере запрос обновляет первый запрос, чтобы выбрать только устройства, которые также подключены через сеть сотовой связи.
query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity.type = 'cellular'", 100);
query.nextAsTwin(function(err, results) {
if (err) {
console.error('Failed to fetch the results: ' + err.message);
} else {
console.log("Devices in Redmond43 using cellular network: " + results.map(function(twin) {return twin.deviceId}).join(','));
}
});
};
Пример пакета SDK службы
Пакет SDK Для Интернета вещей Azure для Node.js предоставляет рабочий пример приложения службы, обрабатывающего задачи двойника устройства. Дополнительные сведения см. в разделе "Серверная служба двойника устройства" — этот проект используется для отправки обновлений исправлений двойника устройства для конкретного устройства.