Руководство: взаимодействие с подключенным к решению устройством IoT Plug and Play
IoT Plug and Play упрощает работу с Интернетом вещей, позволяя взаимодействовать с возможностями устройства без знаний базовой реализации устройства. В этом руководстве показано, как использовать C# для подключения и управления устройством IoT самонастраивающийся, подключенным к решению.
Необходимые компоненты
Прежде чем продолжить, убедитесь, что вы настроили среду, в том числе центр Интернета вещей.
Операции, описанные в этом учебнике, можно выполнить в Linux или Windows. Команды оболочки в этом учебнике соответствуют требованиям соглашения Linux для разделителей пути "/
". Если вы используете Windows, не забудьте изменить эти разделители на "\
".
Клонирование репозитория пакета SDK с помощью примера кода
Если вы ознакомились с руководством по подключению примера приложения устройства IoT Plug and Play в Windows к Центру Интернета вещей (C#), значит, вы уже клонировали репозиторий.
Клонируйте примеры из репозитория GitHub для Azure IoT SDK для C#. Откройте командную строку в выбранной папке. Выполните следующую команду, чтобы клонировать пакет SDK Для Интернета вещей Microsoft Azure для репозитория .NET GitHub:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Создание кода устройства
Теперь вы можете создать образец устройства и запустить его. Выполните следующие команды, чтобы создать пример:
cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/Thermostat
dotnet build
Запуск примера устройства
Чтобы запустить пример, выполните следующую команду:
dotnet run
Теперь устройство готово к получению команд и обновлений свойств и начало отправлять данные телеметрии в концентратор. Продолжите работу примера, после того как выполните следующие действия.
Запуск примера решения
В кратком руководстве по настройке среды для Интернета вещей самонастраивающийся и руководствах по созданию двух переменных среды для настройки примера для подключения к Центру Интернета вещей:
- IOTHUB_CONNECTION_STRING: строка подключения центра Интернета вещей, которую вы записали ранее.
- IOTHUB_DEVICE_ID:
"my-pnp-device"
.
В этом руководстве вы используете пример решения Интернета вещей, написанного на C# для взаимодействия с примером устройства, который вы только что настроили и запустили.
В другом окне терминала перейдите в папку azure-iot-sdk-csharp/iothub/service/samples/solutions/PnpServiceSamples/Thermostat .
Выполните следующую команду, чтобы создать пример службы:
dotnet build
Выполните следующую команду, чтобы запустить пример службы:
dotnet run
Получение двойника устройства
В следующем фрагменте кода показано, как приложение службы получает двойник устройства:
// Get a Twin and retrieves model Id set by Device client
Twin twin = await s_registryManager.GetTwinAsync(s_deviceId);
s_logger.LogDebug($"Model Id of this Twin is: {twin.ModelId}");
Примечание.
В этом примере используется пространство имен Microsoft.Azure.Devices.Client из клиента службы Центра Интернета вещей. Дополнительные сведения об интерфейсах API, включая API цифровых двойников, см. в руководстве для разработчиков служб.
Этот код создаст следующие выходные данные:
[09/21/2020 11:26:04]dbug: Thermostat.Program[0]
Model Id of this Twin is: dtmi:com:example:Thermostat;1
В следующем фрагменте кода показано, как использовать исправление для обновления свойств с помощью двойника устройства:
// Update the twin
var twinPatch = new Twin();
twinPatch.Properties.Desired[PropertyName] = PropertyValue;
await s_registryManager.UpdateTwinAsync(s_deviceId, twinPatch, twin.ETag);
Этот код создает следующие выходные данные на устройстве при обновлении службой свойства targetTemperature
:
[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
Property: Received - { "targetTemperature": 60°C }.
[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
Property: Update - {"targetTemperature": 60°C } is InProgress.
...
[09/21/2020 11:26:17]dbug: Thermostat.ThermostatSample[0]
Property: Update - {"targetTemperature": 60°C } is Completed.
Вызов команды
В следующем фрагменте кода показано, как вызвать команду:
private static async Task InvokeCommandAsync()
{
var commandInvocation = new CloudToDeviceMethod(CommandName) { ResponseTimeout = TimeSpan.FromSeconds(30) };
// Set command payload
string componentCommandPayload = JsonConvert.SerializeObject(s_dateTime);
commandInvocation.SetPayloadJson(componentCommandPayload);
CloudToDeviceMethodResult result = await s_serviceClient.InvokeDeviceMethodAsync(s_deviceId, commandInvocation);
if (result == null)
{
throw new Exception($"Command {CommandName} invocation returned null");
}
s_logger.LogDebug($"Command {CommandName} invocation result status is: {result.Status}");
}
Этот код создает следующие выходные данные на устройстве при вызове службой команды getMaxMinReport
:
[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
Command: Received - Generating max, min and avg temperature report since 21/09/2020 11:25:58.
[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
Command: MaxMinReport since 21/09/2020 11:25:58: maxTemp=32, minTemp=32, avgTemp=32, startTime=21/09/2020 11:25:59, endTime=21/09/2020 11:26:04
IoT Plug and Play упрощает работу с Интернетом вещей, позволяя взаимодействовать с возможностями устройства без знаний базовой реализации устройства. В этом руководстве показано, как использовать Java для подключения и управления устройством IoT самонастраивающийся, подключенным к решению.
Необходимые компоненты
Прежде чем продолжить, убедитесь, что вы настроили среду, в том числе центр Интернета вещей.
Операции, описанные в этом учебнике, можно выполнить в Linux или Windows. Команды оболочки в этом учебнике соответствуют требованиям соглашения Linux для разделителей пути "/
". Если вы используете Windows, не забудьте изменить эти разделители на "\
".
Чтобы завершить работу с этим руководством, установите следующее программное обеспечение в локальной среде разработки:
Клонирование репозитория пакета SDK с помощью примера кода
Если вы ознакомились с руководством по подключению примера приложения устройства IoT Plug and Play в Windows к Центру Интернета вещей (Java), значит вы уже клонировали репозиторий.
Откройте командную строку в выбранном каталоге. Выполните следующую команду, чтобы клонировать репозиторий GitHub пакетов SDK для Интернета вещей Microsoft Azure для Java в это расположение:
git clone https://github.com/Azure/azure-iot-sdk-java.git
Сборка и запуск примера устройства
Перейдите в корневую папку примера термостата в клонированного репозитория пакета SDK Java и создайте его:
cd azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/thermostat-device-sample
mvn clean package
Во время работы со статьей Настройка среды для кратких руководств и учебников IoT Plug and Play вы создали пять переменных среды, чтобы настроить пример для подключения к центру Интернета вещей с помощью Подготовки устройств к добавлению в Центр Интернета вещей (DPS):
- IOTHUB_DEVICE_SECURITY_TYPE со значением
DPS
. - IOTHUB_DEVICE_DPS_ID_SCOPE с областью идентификатора DPS;
- IOTHUB_DEVICE_DPS_DEVICE_ID со значением
my-pnp-device
; - IOTHUB_DEVICE_DPS_DEVICE_KEY с первичным ключом регистрации;
- IOTHUB_DEVICE_DPS_ENDPOINT со значением
global.azure-devices-provisioning.net
.
Дополнительные сведения о примере конфигурации см. в образце файла сведений.
В папке /device/iot-device-samples/pnp-device-sample/thermostat-device-sample запустите приложение:
mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.device.Thermostat"
Теперь устройство готово к получению команд и обновлений свойств и начало отправлять данные телеметрии в концентратор. Продолжите работу примера, после того как выполните следующие действия.
Запуск примера решения
В кратком руководстве по настройке среды для Интернета вещей самонастраивающийся и руководствах по созданию двух переменных среды для настройки примера для подключения к Центру Интернета вещей:
- IOTHUB_CONNECTION_STRING: строка подключения центра Интернета вещей, которую вы записали ранее.
- IOTHUB_DEVICE_ID:
"my-pnp-device"
.
В этом руководстве вы используете пример решения Интернета вещей, написанного на Java, для взаимодействия с примером устройства, которое вы только что настроили.
Примечание.
В этом образце используется пространство имен com.microsoft.azure.sdk.iot.service из клиента службы Центра Интернета вещей. Дополнительные сведения об интерфейсах API, включая API цифровых двойников, см. в руководстве для разработчиков служб.
Откройте другое окно терминала, которое будет терминалом службы.
В клонированного репозитория пакета SDK для Java перейдите в папку service/iot-service-samples/pnp-service-sample/thermostat-service-sample .
Чтобы создать и запустить пример приложения службы, выполните следующие команды:
mvn clean package mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.service.Thermostat"
Получение двойника устройства
В следующем фрагменте кода показано, как получить двойник устройства в службе:
// Get the twin and retrieve model Id set by Device client.
DeviceTwinDevice twin = new DeviceTwinDevice(deviceId);
twinClient.getTwin(twin);
System.out.println("Model Id of this Twin is: " + twin.getModelId());
Обновление двойника устройства
В следующем фрагменте кода показано, как использовать исправление для обновления свойств с помощью двойника устройства:
String propertyName = "targetTemperature";
double propertyValue = 60.2;
twin.setDesiredProperties(Collections.singleton(new Pair(propertyName, propertyValue)));
twinClient.updateTwin(twin);
В выходных данных устройства показано, как устройство отвечает на это обновление свойства.
Вызов команды
В следующем фрагменте кода показано, как вызвать команду на устройстве:
// The method to invoke for a device without components should be "methodName" as defined in the DTDL.
String methodToInvoke = "getMaxMinReport";
System.out.println("Invoking method: " + methodToInvoke);
Long responseTimeout = TimeUnit.SECONDS.toSeconds(200);
Long connectTimeout = TimeUnit.SECONDS.toSeconds(5);
// Invoke the command.
String commandInput = ZonedDateTime.now(ZoneOffset.UTC).minusMinutes(5).format(DateTimeFormatter.ISO_DATE_TIME);
MethodResult result = methodClient.invoke(deviceId, methodToInvoke, responseTimeout, connectTimeout, commandInput);
if(result == null)
{
throw new IOException("Method result is null");
}
System.out.println("Method result status is: " + result.getStatus());
В выходных данных устройства показано, как устройство отвечает на эту команду.
IoT Plug and Play упрощает работу с Интернетом вещей, позволяя взаимодействовать с возможностями устройства без знаний базовой реализации устройства. В этом руководстве показано, как использовать Node.js для подключения и управления устройством IoT самонастраивающийся, подключенным к решению.
Необходимые компоненты
Прежде чем продолжить, убедитесь, что вы настроили среду, в том числе центр Интернета вещей.
Для выполнения инструкций, приведенных в этом учебнике, на компьютере для разработки необходимо установить платформу Node.js. Вы можете скачать последнюю рекомендуемую версию для нескольких платформ на сайте nodejs.org.
Текущую версию Node.js на компьютере, на котором ведется разработка, можно проверить, используя следующую команду:
node --version
Клонирование репозитория пакета SDK с помощью примера кода
Клонируйте примеры из репозитория пакета SDK для Node. Откройте окно терминала в любой папке. С помощью следующей команды клонируйте репозиторий пакета SDK Интернета вещей Microsoft Azure для Node.js с сайта GitHub.
git clone https://github.com/Azure/azure-iot-sdk-node
Запуск примера устройства
Во время работы со статьей Настройка среды для кратких руководств и учебников IoT Plug and Play вы создали пять переменных среды, чтобы настроить пример для подключения к центру Интернета вещей с помощью Подготовки устройств к добавлению в Центр Интернета вещей (DPS):
- IOTHUB_DEVICE_SECURITY_TYPE со значением
DPS
. - IOTHUB_DEVICE_DPS_ID_SCOPE с областью идентификатора DPS;
- IOTHUB_DEVICE_DPS_DEVICE_ID со значением
my-pnp-device
; - IOTHUB_DEVICE_DPS_DEVICE_KEY с первичным ключом регистрации;
- IOTHUB_DEVICE_DPS_ENDPOINT со значением
global.azure-devices-provisioning.net
.
Дополнительные сведения о примере конфигурации см. в образце файла сведений.
В этом руководстве вы используете пример устройства термостата, написанного Node.js в качестве устройства IoT самонастраивающийся. Чтобы запустить пример устройства, сделайте следующее:
Откройте окно терминала и перейдите в локальную папку, содержащую пакет SDK Microsoft Azure IoT для Node.js, клонированный из репозитория GitHub.
Это окно терминала используется в качестве терминала устройства. Перейдите в папку клонированного репозитория и перейдите в папку /azure-iot-sdk-node/device/samples/javascript . Установите все зависимости, выполнив следующую команду:
npm install
Запустите пример термостата с помощью следующей команды:
node pnp_simple_thermostat.js
Отобразится сообщение о том, что устройство отправило определенные сведения и находится в сети. Эти сообщения означают, что устройство начало отправлять в концентратор данные телеметрии и теперь готово получать команды и обновления свойств. Не закрывайте этот терминал, он понадобится вам, чтобы проверить работу примера службы.
Запуск примера решения
В кратком руководстве по настройке среды для Интернета вещей самонастраивающийся и руководствах по созданию двух переменных среды для настройки примера для подключения к Центру Интернета вещей:
- IOTHUB_CONNECTION_STRING: строка подключения центра Интернета вещей, которую вы записали ранее.
- IOTHUB_DEVICE_ID:
"my-pnp-device"
.
В этом руководстве вы используете пример Node.js решения Интернета вещей для взаимодействия с примером устройства, который вы только что настроили и запустили.
Откройте другое окно терминала, которое будет терминалом службы.
В клонированного репозитория пакета SDK узла перейдите в папку azure-iot-sdk-node/service/samples/javascript . Установите все зависимости, выполнив следующую команду:
npm install
Чтение свойства
Когда вы выполняли пример устройства термостата в терминале устройства, отображались следующие сведения о состоянии подключения.
properties have been reported for component sending telemetry message 0...
Перейдите в окно терминала службы и запустите пример с помощью следующей команды для чтения сведений об устройстве:
node twin.js
В выходных данных терминала службы найдите ответ двойника устройства. Вы увидите сведения об идентификаторе модели устройства и его свойствах.
Model Id: dtmi:com:example:Thermostat;1 { "deviceId": "my-pnp-device", "etag": "AAAAAAAAAAE=", "deviceEtag": "Njc3MDMxNDcy", "status": "enabled", "statusUpdateTime": "0001-01-01T00:00:00Z", "connectionState": "Connected", "lastActivityTime": "0001-01-01T00:00:00Z", "cloudToDeviceMessageCount": 0, "authenticationType": "sas", "x509Thumbprint": { "primaryThumbprint": null, "secondaryThumbprint": null }, "modelId": "dtmi:com:example:Thermostat;1", "version": 4, "properties": { "desired": { "$metadata": { "$lastUpdated": "2020-10-05T11:35:19.4574755Z" }, "$version": 1 }, "reported": { "maxTempSinceLastReboot": 31.343640523762232, "serialNumber": "123abc", "$metadata": { "$lastUpdated": "2020-10-05T11:35:23.7339042Z", "maxTempSinceLastReboot": { "$lastUpdated": "2020-10-05T11:35:23.7339042Z" }, "serialNumber": { "$lastUpdated": "2020-10-05T11:35:23.7339042Z" } }, "$version": 3 } }, "capabilities": { "iotEdge": false }, "tags": {} }
Следующий фрагмент кода из файла twin.js получает идентификатор модели двойника устройства.
var registry = Registry.fromConnectionString(connectionString); registry.getTwin(deviceId, function(err, twin) { if (err) { console.error(err.message); } else { console.log('Model Id: ' + twin.modelId); //... } //... }
В нашем примере он выводит значение Model Id: dtmi:com:example:Thermostat;1
.
Примечание.
В этих примерах служб мы используем класс Registry из клиента службы Центра Интернета вещей. Дополнительные сведения об интерфейсах API, включая API цифровых двойников, см. в руководстве для разработчиков служб.
Обновление доступного для записи свойства
Откройте файл twin.js в редакторе кода.
Просмотрите пример кода. В нем показаны два способа обновления двойника устройства. Чтобы использовать первый способ, измените переменную
twinPatch
, как показано ниже.var twinPatch = { tags: { city: "Redmond" }, properties: { desired: { targetTemperature: 42 } } };
В модели устройства термостата свойство
targetTemperature
определено как записываемое.В терминале службы с помощью следующей команды запустите следующий пример для обновления свойства.
node twin.js
В терминале устройства вы увидите, что устройство успешно получило обновление.
The following properties will be updated for the default component: { targetTemperature: { value: 42, ac: 200, ad: 'Successfully executed patch for targetTemperature', av: 2 } } updated the property
В терминале службы выполните следующую команду, чтобы убедиться, что свойство обновлено.
node twin.js
В терминале службы в разделе свойств
reported
вы увидите обновленное значение температуры. Устройству может потребоваться некоторое время, чтобы завершить обновление. Повторяйте этот шаг, пока устройство не завершит обновление свойства."reported": { //... "targetTemperature": { "value": 42, "ac": 200, "ad": "Successfully executed patch for targetTemperature", "av": 4 }, //... }
Вызов команды
Откройте файл device_method.js и изучите его код.
Перейдите к терминалу службы. Чтобы запустить пример для вызова команды, используйте следующую команду:
set IOTHUB_METHOD_NAME=getMaxMinReport set IOTHUB_METHOD_PAYLOAD=commandpayload node device_method.js
В выходных данных в терминале службы отобразится следующее подтверждение.
getMaxMinReport on my-pnp-device: { "status": 200, "payload": { "maxTemp": 23.460596940801928, "minTemp": 23.460596940801928, "avgTemp": 23.460596940801928, "endTime": "2020-10-05T12:48:08.562Z", "startTime": "2020-10-05T12:47:54.450Z" } }
В терминале устройства вы увидите, что команда успешно подтверждена.
MaxMinReport commandpayload Response to method 'getMaxMinReport' sent successfully.
IoT Plug and Play упрощает работу с Интернетом вещей, позволяя взаимодействовать с моделью устройства без необходимости понимать базовую реализацию устройства. В этом руководстве показано, как использовать Python для подключения и управления устройством IoT самонастраивающийся, подключенным к решению.
Необходимые компоненты
Прежде чем продолжить, убедитесь, что вы настроили среду, в том числе центр Интернета вещей.
Чтобы завершить работу с этим руководством, необходимо установить Python на компьютере разработки. Проверьте пакет SDK Для Python Для Интернета вещей Azure для текущих требований к версии Python. Проверить версию Python можно с помощью следующей команды:
python --version
Вы можете скачать последнюю рекомендуемую версию для нескольких платформ на сайте python.org.
В локальной среде Python установите пакет azure-iot-device следующим образом:
pip install azure-iot-device
Установите пакет azure-iot-hub, выполнив следующую команду:
pip install azure-iot-hub
Запуск примера устройства
Во время работы со статьей Настройка среды для кратких руководств и учебников IoT Plug and Play вы создали пять переменных среды, чтобы настроить пример для подключения к центру Интернета вещей с помощью Подготовки устройств к добавлению в Центр Интернета вещей (DPS):
- IOTHUB_DEVICE_SECURITY_TYPE со значением
DPS
. - IOTHUB_DEVICE_DPS_ID_SCOPE с областью идентификатора DPS;
- IOTHUB_DEVICE_DPS_DEVICE_ID со значением
my-pnp-device
; - IOTHUB_DEVICE_DPS_DEVICE_KEY с первичным ключом регистрации;
- IOTHUB_DEVICE_DPS_ENDPOINT со значением
global.azure-devices-provisioning.net
.
Дополнительные сведения о примере конфигурации см. в образце файла сведений.
В этом руководстве вы используете пример устройства термостата, написанного на Python, как устройство IoT самонастраивающийся. Чтобы запустить пример устройства, сделайте следующее:
Откройте окно терминала в любой папке. Выполните следующую команду, чтобы клонировать репозиторий GitHub пакета SDK для устройств Интернета вещей Azure:
git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python
Это окно терминала используется в качестве терминала устройства. Перейдите в папку клонированного репозитория и перейдите в папку azure-iot-sdk-python/samples/pnp .
Запустите пример термостата с помощью следующей команды:
python simple_thermostat.py
Отобразится сообщение о том, что устройство отправило определенные сведения и находится в сети. Эти сообщения означают, что устройство начало отправлять в концентратор данные телеметрии и теперь готово получать команды и обновления свойств. Не закрывайте этот терминал, он понадобится вам, чтобы проверить работу примера службы.
Запуск примера решения
В этом руководстве вы используете пример решения Интернета вещей в Python для взаимодействия с примером устройства, которое вы только что настроили.
Откройте другое окно терминала, которое будет терминалом службы. Выполните следующую команду, чтобы клонировать репозиторий GitHub пакета SDK для Python Центр Интернета вещей Azure в это расположение:
git clone https://github.com/Azure/azure-iot-hub-python
Установить
Перейдите в папку /azure-iot-hub-python/samples репозитория клонированного пакета SDK Для Python.
Откройте файл registry_manager_pnp_sample.py и проверьте код. В этом примере показано, как использовать класс IoTHubRegistryManager для взаимодействия с устройством IoT Plug and Play.
Примечание.
В этих примерах служб мы используем класс IoTHubRegistryManager из клиента службы Центра Интернета вещей. Дополнительные сведения об интерфейсах API, включая API цифровых двойников, см. в руководстве для разработчиков служб.
Получение двойника устройства
В кратком руководстве по настройке среды для Интернета вещей самонастраивающийся и руководствах по созданию двух переменных среды для настройки примера для подключения к Центру Интернета вещей:
- IOTHUB_CONNECTION_STRING: строка подключения центра Интернета вещей, которую вы записали ранее.
- IOTHUB_DEVICE_ID:
"my-pnp-device"
.
Чтобы запустить этот пример, используйте следующую команду в терминале службы:
set IOTHUB_METHOD_NAME="getMaxMinReport"
set IOTHUB_METHOD_PAYLOAD="hello world"
python registry_manager_pnp_sample.py
Примечание.
Если вы выполняете этот пример в Linux, используйте export
вместо set
.
В выходных данных отобразится двойник устройства и соответствующий идентификатор модели:
The Model ID for this device is:
dtmi:com:example:Thermostat;1
В следующем фрагменте показан пример кода из файла registry_manager_pnp_sample.py:
# Create IoTHubRegistryManager
iothub_registry_manager = IoTHubRegistryManager(iothub_connection_str)
# Get device twin
twin = iothub_registry_manager.get_twin(device_id)
print("The device twin is: ")
print("")
print(twin)
print("")
# Print the device's model ID
additional_props = twin.additional_properties
if "modelId" in additional_props:
print("The Model ID for this device is:")
print(additional_props["modelId"])
print("")
Обновление двойника устройства
В этом примере показано, как обновить доступное для записи свойство targetTemperature
на устройстве.
# Update twin
twin_patch = Twin()
twin_patch.properties = TwinProperties(
desired={"targetTemperature": 42}
) # this is relevant for the thermostat device sample
updated_twin = iothub_registry_manager.update_twin(device_id, twin_patch, twin.etag)
print("The twin patch has been successfully applied")
print("")
Вы можете убедиться, что обновление успешно применено, в терминале устройства, где отображаются следующие выходные данные:
the data in the desired properties patch was: {'targetTemperature': 42, '$version': 2}
В терминале службы подтверждается, что обновление применено успешно:
The twin patch has been successfully applied
Вызов команды
Затем в примере вызывается команда.
В терминале службы отобразится сообщение с подтверждением, полученное от устройства:
The device method has been successfully invoked
В терминале устройства вы увидите, что устройство успешно получило команду:
Command request received with payload
hello world
Will return the max, min and average temperature from the specified time hello to the current time
Done generating
{"tempReport": {"avgTemp": 34.2, "endTime": "09/07/2020 09:58:11", "maxTemp": 49, "minTemp": 10, "startTime": "09/07/2020 09:56:51"}}
Очистка ресурсов
Если вы закончили работу с краткими руководствами и учебниками, см. раздел Очистка ресурсов.
Следующие шаги
Из этого руководства вы узнали, как подключить устройство IoT Plug and Play к решению Интернета вещей. Дополнительные сведения о моделях устройства IoT Plug and Play см. в статье