Создание и тестирование нового имитированного устройства
Акселератор решения для удаленного мониторинга позволяет определить собственные имитированные устройства. В этой статье показано, как определить новое имитируемое устройство типа Lightbulb, а затем проверить его локально. Акселератор решений содержит имитированные устройства, такие как холодильники и грузовики. Тем не менее, вы можете определить собственные имитированные устройства для тестирования решений Интернета вещей до развертывания настоящих устройств.
Примечание.
В этой статье описывается использование имитированных устройств, размещенных в службе моделирования устройств. Если вам требуется создать реальное устройство, см. статью Подключение устройства к акселератору решения для удаленного мониторинга (Node.js).
В этом руководстве показано, как настроить микрослужбу имитации устройств. Эта микрослужба является частью акселератора решения для удаленного мониторинга. Чтобы продемонстрировать возможности имитации устройств, в этом практическом руководстве рассматривается два сценария с приложением Интернета вещей компании Contoso.
В первом сценарии вы добавляете новый тип телеметрии к существующему типу устройства охладителя компании Contoso.
Во втором сценарии компания Contoso планирует протестировать новое интеллектуальное устройство управления освещением. Чтобы выполнить тесты, необходимо создать новое виртуальное устройство со следующими характеристиками:
Свойства
Имя. | Значения |
---|---|
Цвет | Белый, красный, синий |
Яркость | 0–100 |
Ожидаемое время работы | Обратный отсчет, начиная с 10 000 часов |
Телеметрия
В таблице ниже приведены данные, которые система освещения потоком передает в облако.
Имя. | Значения |
---|---|
Состояние | on, off |
Температура | Градусы по Фаренгейту |
подключенный | true, false |
Примечание.
Значение телеметрии в сети является обязательным для всех типов имитации.
Методы
В таблице ниже приведены действия, поддерживаемые новым устройством.
Имя. |
---|
Включение |
Выключение |
Начальное состояние
В таблице ниже представлены начальные показатели устройства.
Имя. | Значения |
---|---|
Начальный цвет | Белый |
Начальная яркость | 75 |
Начальное ожидаемое время работы | 10,000 |
Начальное состояние передачи данных телеметрии | on |
Начальная температура телеметрии | 200 |
Чтобы выполнить действия, описанные в этом руководстве, вам потребуется активная подписка Azure.
Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Azure Cloud Shell
В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.
Начало работы с Azure Cloud Shell
Вариант | Пример и ссылка |
---|---|
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. | |
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. | |
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. |
Чтобы использовать Azure Cloud Shell, выполните следующие действия:
Запустите Cloud Shell.
Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.
Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.
Нажмите клавишу ВВОД, чтобы запустить код или команду.
Необходимые компоненты
Чтобы следовать этому пошаговому руководству, вам необходимы следующие компоненты.
- Visual Studio Code. Вы можете скачать Visual Studio Code для Mac, Linux и Windows.
- .NET Core. Вы можете скачать .NET Core для Mac, Linux и Windows.
- C# для Visual Studio Code;
- Postman. Вы можете скачать Postman для Mac, Windows или Linux.
- Центр Интернета вещей для вашей подписки Azure. Для выполнения шагов этого руководства вам понадобится строка подключения Центра Интернета вещей. Вы можете получить строку подключения с портала Azure.
- База данных Cosmos DB, которая использует SQL API и которая настроена на строгую согласованность. Для выполнения шагов этого руководства вам понадобится строка подключения базы данных Cosmos DB. Вы можете получить строку подключения с портала Azure.
Подготовка среды разработки
Для подготовки среды разработки выполните следующие действия:
- загрузите исходный код для микрослужбы моделирования устройств;
- загрузите исходный код для микрослужбы адаптера хранилища;
- запустите микрослужбу адаптера хранилища локально.
В инструкциях этой статьи предполагается, что вы используете Windows. Если вы используете другую операционную систему, может потребоваться изменить некоторые пути к файлам и команды в соответствии с требованиями вашей среды.
Загрузка микрослужб
Скачайте и распакуйте микрослужбы мониторинга Azure из GitHub в подходящее место на локальном компьютере. В этой статье предполагается, что эта папка называется remote-monitoring-services-dotnet-master.
Скачайте и распакуйте микрослужбу моделирования устройств из GitHub в подходящее место на вашем локальном компьютере. В этой статье предполагается, что эта папка называется device-simulation-dotnet-master.
Запуск микрослужбы адаптера хранилища
Откройте папку remote-monitoring-services-dotnet-master\storage-adapter в Visual Studio Code. Чтобы исправить любые нерешенные зависимости, щелкните любую кнопку Восстановить.
Откройте файл storage-adapter/WebService/appsettings.ini и назначьте строка подключения Cosmos DB переменной documentDBConnectionString.
Чтобы запустить микрослужбу локально, выберите Отладка > Начать отладку.
Окно Терминал в Visual Studio Code отображает выходные данные из работающей микрослужбы, включая URL-адрес проверки работоспособности веб-службы: http://127.0.0.1:9022/v1/status. При переходе на этот адрес, состояние должно быть "OK: живой и отлично".
Оставьте микрослужбу адаптера хранилища запущенной в данном экземпляре Visual Studio Code, пока вы выполняете следующие действия.
Изменения охладителя
В этом разделе вы добавите новый тип телеметрии Внутренняя температура для существующего типа устройства охладителя.
Создайте новую папку C:\temp\devicemodels на локальном компьютере.
Скопируйте следующие файлы в новую папку, из загруженной копии микрослужбы моделирования устройств.
Источник Назначение Services\data\devicemodels\chiller-01.json C:\temp\devicemodels\chiller-01.json Services\data\devicemodels\scripts\chiller-01-state.js C:\temp\devicemodels\scripts\chiller-01-state.js Services\data\devicemodels\scripts\Reboot-method.js C:\temp\devicemodels\scripts\Reboot-method.js Services\data\devicemodels\scripts\FirmwareUpdate-method.js C:\temp\devicemodels\scripts\FirmwareUpdate-method.js Services\data\devicemodels\scripts\EmergencyValveRelease-method.js C:\temp\devicemodels\scripts\EmergencyValveRelease-method.js Services\data\devicemodels\scripts\IncreasePressure-method.js C:\temp\devicemodels\scripts\IncreasePressure-method.js Откройте файл C:\temp\devicemodels\chiller-01.json.
В разделе InitialState добавьте два следующих определения:
"internal_temperature": 65.0, "internal_temperature_unit": "F",
В массиве Telemetry добавьте следующее определение:
{ "Interval": "00:00:05", "MessageTemplate": "{\"internal_temperature\":${internal_temperature},\"internal_temperature_unit\":\"${internal_temperature_unit}\"}", "MessageSchema": { "Name": "chiller-internal-temperature;v1", "Format": "JSON", "Fields": { "temperature": "double", "temperature_unit": "text" } } },
Сохраните файл C:\temp\devicemodels\chiller-01.json.
Откройте файл C:\temp\devicemodels\scripts\chiller-01-state.js.
Добавьте в переменную state следующие поля:
internal_temperature: 65.0, internal_temperature_unit: "F",
Обновите функцию main следующим образом.
function main(context, previousState, previousProperties) { // Restore the global state before generating the new telemetry, so that // the telemetry can apply changes using the previous function state. restoreSimulation(previousState, previousProperties); // 75F +/- 5%, Min 25F, Max 100F state.temperature = vary(75, 5, 25, 100); // 70% +/- 5%, Min 2%, Max 99% state.humidity = vary(70, 5, 2, 99); // 65F +/- 2%, Min 15F, Max 125F state.internal_temperature = vary(65, 2, 15, 125); log("Simulation state: " + state.simulation_state); if (state.simulation_state === "high_pressure") { // 250 psig +/- 25%, Min 50 psig, Max 300 psig state.pressure = vary(250, 25, 50, 300); } else { // 150 psig +/- 10%, Min 50 psig, Max 300 psig state.pressure = vary(150, 10, 50, 300); } updateState(state); return state; }
Сохраните файл C:\temp\devicemodels\scripts\chiller-01-state.js.
Создание лампочки
В этом разделе вы определите новый тип устройства лампочка.
Создайте файл C:\temp\devicemodels\lightbulb-01.json и добавьте следующее содержимое.
{ "SchemaVersion": "1.0.0", "Id": "lightbulb-01", "Version": "0.0.1", "Name": "Lightbulb", "Description": "Smart lightbulb device.", "Protocol": "MQTT", "Simulation": { "InitialState": { "online": true, "temperature": 200.0, "temperature_unit": "F", "status": "on" }, "Interval": "00:00:20", "Scripts": [ { "Type": "javascript", "Path": "lightbulb-01-state.js" } ] }, "Properties": { "Type": "Lightbulb", "Color": "White", "Brightness": 75, "EstimatedRemainingLife": 10000 }, "Tags": { "Location": "Building 2", "Floor": "2", "Campus": "Redmond" }, "Telemetry": [ { "Interval": "00:00:20", "MessageTemplate": "{\"temperature\":${temperature},\"temperature_unit\":\"${temperature_unit}\",\"status\":\"${status}\"}", "MessageSchema": { "Name": "lightbulb-status;v1", "Format": "JSON", "Fields": { "temperature": "double", "temperature_unit": "text", "status": "text" } } } ], "CloudToDeviceMethods": { "SwitchOn": { "Type": "javascript", "Path": "SwitchOn-method.js" }, "SwitchOff": { "Type": "javascript", "Path": "SwitchOff-method.js" } } }
Сохраните изменения в C:\temp\devicemodels\lightbulb-01.json.
Создайте файл C:\temp\devicemodels\scripts\lightbulb-01-state.js и добавьте следующее содержимое.
"use strict"; // Default state var state = { online: true, temperature: 200.0, temperature_unit: "F", status: "on" }; // Default device properties var properties = {}; /** * Restore the global state using data from the previous iteration. * * @param previousState device state from the previous iteration * @param previousProperties device properties from the previous iteration */ function restoreSimulation(previousState, previousProperties) { // If the previous state is null, force a default state if (previousState) { state = previousState; } else { log("Using default state"); } if (previousProperties) { properties = previousProperties; } else { log("Using default properties"); } } /** * Simple formula generating a random value around the average * in between min and max * * @returns random value with given parameters */ function vary(avg, percentage, min, max) { var value = avg * (1 + ((percentage / 100) * (2 * Math.random() - 1))); value = Math.max(value, min); value = Math.min(value, max); return value; } /** * Simple formula that sometimes flips the status of the lightbulb */ function flip(value) { if (Math.random() < 0.2) { return (value == "on") ? "off" : "on" } return value; } /** * Entry point function called by the simulation engine. * Returns updated simulation state. * Device property updates must call updateProperties() to persist. * * @param context The context contains current time, device model and id * @param previousState The device state since the last iteration * @param previousProperties The device properties since the last iteration */ function main(context, previousState, previousProperties) { // Restore the global device properties and the global state before // generating the new telemetry, so that the telemetry can apply changes // using the previous function state. restoreSimulation(previousState, previousProperties); state.temperature = vary(200, 5, 150, 250); // Make this flip every so often state.status = flip(state.status); updateState(state); return state; }
Сохраните изменения в C:\temp\devicemodels\scripts\lightbulb-01-state.js.
Создайте файл C:\temp\devicemodels\scripts\SwitchOn-method.js и добавьте следующее содержимое.
"use strict"; // Default state var state = { status: "on" }; /** * Entry point function called by the method. * * @param context The context contains current time, device model and id * @param previousState The device state since the last iteration * @param previousProperties The device properties since the last iteration */ function main(context, previousState) { log("Executing lightbulb Switch On method."); state.status = "on"; updateState(state); }
Сохраните изменения в C:\temp\devicemodels\scripts\SwitchOn-method.js.
Создайте файл C:\temp\devicemodels\scripts\SwitchOff-method.js и добавьте следующее содержимое.
"use strict"; // Default state var state = { status: "on" }; /** * Entry point function called by the method. * * @param context The context contains current time, device model and id * @param previousState The device state since the last iteration * @param previousProperties The device properties since the last iteration */ function main(context, previousState) { log("Executing lightbulb Switch Off method."); state.status = "off"; updateState(state); }
Сохраните изменения в C:\temp\devicemodels\scripts\SwitchOff-method.js.
Теперь вы создали настроенную версию типа устройства охладителя и создали новый тип устройства лампочка.
Тестирование устройств
В этом разделе вы тестируете типы устройств, локально созданные в предыдущих разделах.
Запуск микрослужбы моделирования устройств
Откройте папку device-simulation-dotnet-master, загруженную с GitHub, в новом экземпляре Visual Studio Code. Чтобы исправить любые нерешенные зависимости, щелкните любую кнопку Восстановить.
Откройте файл WebService/appsettings.ini и назначьте строка подключения Cosmos DB переменной documentdb_connstring, а также измените параметры следующим образом:
device_models_folder = C:\temp\devicemodels\
device_models_scripts_folder = C:\temp\devicemodels\scripts\
Чтобы запустить микрослужбу локально, выберите Отладка > Начать отладку.
Окно Терминал в Visual Studio Code отображает выходные данные из работающей микрослужбы.
Оставьте микрослужбу моделирования устройств запущенной в данном экземпляре Visual Studio Code, пока вы выполняете следующие действия.
Настройка монитора для событий устройства
В этом разделе вы используете Azure CLI, чтобы настроить монитор событий для просмотра телеметрии, отправленной с устройств, подключенных к Центру Интернета вещей.
В следующем сценарии предполагается, что имя вашего Центра Интернета вещей — device-simulation-test.
# Install the IoT extension if it's not already installed
az extension add --name azure-iot
# Monitor telemetry sent to your hub
az iot hub monitor-events --hub-name device-simulation-test
Оставьте монитор событий включенным во время тестирования имитируемых устройств.
Создание имитации с обновленным типом устройства охладителя
В этом разделе вы используете средство Postman для запроса микрослужбы моделирования устройства, чтобы запустить имитацию с использованием обновленного типа устройства охладителя. Postman — это средство, которое позволяет отправлять запросы REST на веб-службу. Необходимые файлы конфигурации Postman находятся в вашей локальной копии репозитория device-simulation-dotnet.
Действия для настройки Postman.
Откройте Postman на локальном компьютере.
Выберите Файл > Импорт. Затем нажмите Выбор файлов.
Перейдите в папку device-simulation-dotnet-master/docs/postman. Выберите Решение имитации устройств Azure IoT accelerator.postman_collection и Решение имитации устройств Azure IoT accelerator.postman_environment и нажмите Открыть.
Разверните Акселератор решений имитации устройств Azure loT для запросов, которые вы можете отправить.
Нажмите No Environment (Без среды) и выберите Акселератор решений имитации устройств Azure IoT.
Теперь у вас есть коллекция и среда, загруженные в рабочее пространство Postman, которые вы можете использовать для взаимодействия с микрослужбой моделирования устройств.
Настройка и запуск имитации.
В коллекции Postman выберите Создать имитацию модифицированного охладителя и нажмите Отправить. Этот запрос создает четыре экземпляра имитации типа устройства охладителя.
Выход монитора событий в окне Azure CLI показывает телеметрию с имитируемых устройств, включая новые значения internal_temperature.
Чтобы остановить имитацию, выберите запрос в Postman Остановить имитацию и нажмите Отправка.
Создание имитации с типом устройства "лампочка"
В этом разделе вы используете средство Postman для запроса микрослужбы моделирования устройства, чтобы запустить имитацию с использованием типа устройства "лампочка". Postman — это средство, которое позволяет отправлять запросы REST на веб-службу.
Настройка и запуск имитации.
В коллекции Postman выберите Создать имитацию лампочки и нажмите Отправить. Этот запрос создает два экземпляра имитации устройства типа "лампочка".
Выход монитора событий в окне Azure CLI показывает телеметрию из имитируемых лампочек.
Чтобы остановить имитацию, выберите запрос в Postman Остановить имитацию и нажмите Отправка.
Очистка ресурсов
Вы можете остановить две локально работающие микрослужбы в своих экземплярах Visual Studio Code (Отладка > Остановить отладку).
Если вы больше не нуждаетесь в экземплярах Центра Интернета вещей и Cosmos DB, удалите их из подписки Azure, чтобы избежать ненужных расходов.
Следующие шаги
В этом руководстве показано, как создавать пользовательские типы имитированных устройств и проверять их, запустив микрослужбу имитации устройств в локальной среде.
Далее мы рекомендуем научиться развертывать пользовательские типы имитированных устройств в акселератор решения для удаленного мониторинга.