Настройка предварительно настроенного решения

Предварительно настроенные решения, входящие в состав набора IoT Azure, показывают, какие службы работают вместе в составе набора, формируя комплексное решение. Начиная с этой стартовой точки, есть несколько мест, в которых можно выполнить настройку и расширение решений для их адаптации к конкретным сценариям. В следующих разделах описываются эти точки настройки.

Поиск исходного кода

Исходный код для предварительно настроенного решения можно найти в GitHub в следующих репозиториях:

Исходный код для предварительно настроенных решений предоставляется для демонстрации шаблонов и методов, используемых для реализации полной функциональности решения IoT с помощью Azure IoT Suite. Дополнительные сведения о том, как создавать и развертывать решения, можно найти в репозиториях GitHub.

Изменение предварительно настроенных правил

Решение для удаленного мониторинга включает в себя три задания Azure Stream Analytics для обработки логики сведений об устройстве, телеметрии и правил в решении.

Три задания Stream Analytics и их синтаксис подробно описаны в пошаговом руководстве по работе с настроенным решением для удаленного мониторинга.

Эти задания можно редактировать напрямую, изменяя или добавляя логику для своего сценария. Задания Stream Analytics можно найти следующим образом:

  1. Перейдите на портал Azure.

  2. Перейдите к группе ресурсов, имя которой совпадает с именем вашего решения IoT.

  3. Выберите задание Azure Stream Analytics, которое вы хотите изменить.

  4. Остановите задание, выбрав Остановить в наборе команд.

  5. Измените входные данные, запрос и выходные данные.

    Простое изменение заключается в изменении запроса задания "Правила" на использование "<" вместо ">". На портале решения по-прежнему отображается значение ">" при редактировании правила, но обратите внимание, что поведение перевернется из-за изменения в базовом задании.

  6. Запустите задание

Примечание

Панель удаленного мониторинга зависит от конкретных данных, поэтому изменение задания потенциально может вызвать сбой панели мониторинга.

Добавление собственных правил

Наряду с изменением предварительно настроенных заданий Stream Analytics на портале Azure можно добавлять новые задания или новые запросы для существующих заданий.

Настройка устройств

Одно из наиболее распространенных действий расширения — работа с устройствами, относящимися к вашему сценарию. Существует несколько способов работы с устройствами. В число этих методов входят изменение виртуального устройства для соответствия вашему сценарию или подключение физического устройства к решению с помощью пакета SDK устройства Интернета вещей.

Пошаговые инструкции по добавлению устройств см. в статье Подключение устройства к предварительно настроенному решению для удаленного мониторинга (Windows). Также вы можете использовать пример пакета SDK для удаленного мониторинга. Этот пример предназначен для работы с предварительно настроенным решением для удаленного мониторинга.

Создание собственного виртуального устройства

В исходный код решения для удаленного мониторинга включен симулятор .NET. Этот симулятор подготавливается как часть решения, и его можно настроить для отправки разных метаданных и данных телеметрии, а также для реагирования на разные команды и методы.

Симулятор предварительно настроенного решения удаленного мониторинга имитирует устройство охлаждения, которое выдает данные телеметрии о температуре и влажности. Изменить симулятор можно в проекте Simulator.WebJob при создании разветвления в репозитории GitHub.

Доступные расположения для виртуальных устройств

Расположения по умолчанию находятся в Редмонде (Сиэтле), штат Вашингтон, США. Эти расположения можно изменить в файле SampleDeviceFactory.cs.

Добавление обработчика изменения для требуемого свойства в симуляторе

На портале решения вы можете задать значение для требуемого свойства устройства. Обработку запроса на изменение свойства должно выполнять само устройство, получая новое значение требуемого свойства. Чтобы добавить поддержку для изменения значений свойства через требуемое свойство, необходимо добавить в симулятор соответствующий обработчик.

Симулятор содержит обработчики для свойств SetPointTemp и TelemetryInterval, для изменения которых можно установить нужные значения на портале решения.

В следующем примере представлен обработчик требуемого свойства SetPointTemp в классе CoolerDevice:

protected async Task OnSetPointTempUpdate(object value)
{
    var telemetry = _telemetryController as ITelemetryWithSetPointTemperature;
    telemetry.SetPointTemperature = Convert.ToDouble(value);

    await SetReportedPropertyAsync(SetPointTempPropertyName, telemetry.SetPointTemperature);
}

Этот метод изменяет температуру для точки телеметрии и передает информацию об изменении в Центр Интернета вещей, устанавливая значение сообщаемого свойства.

Вы можете добавить собственные обработчики для требуемых свойств, используя шаблон из предыдущего примера.

Также следует привязать требуемое свойство к обработчику, как показано в следующем примере из конструктора CoolerDevice:

_desiredPropertyUpdateHandlers.Add(SetPointTempPropertyName, OnSetPointTempUpdate);

Обратите внимание, что SetPointTempPropertyName — это константа, определенная как Config.SetPointTemp.

Добавление в симулятор поддержки для нового метода

Вы можете изменить симулятор, добавив поддержку нового метода (прямой метод). Нужно выполнить два основных действия.

  • Симулятор должен уведомлять Центр Интернета вещей в предварительно настроенном решении, передавая сведения о методе.
  • Симулятор должен содержать код для обработки вызова метода, запускаемого из панели Сведения об устройстве в обозревателе решений или с помощью задания.

Удаленный мониторинг предварительно настроенного решения использует сообщаемые свойства для передачи в Центр Интернета вещей подробных сведений о поддерживаемых методах. Серверная часть решения сохраняет список всех методов, поддерживаемых для каждого устройства, а также журнал вызовов этих методов. Эти сведения об устройствах и вызовах методов можно посмотреть на портале решения.

Чтобы уведомить Центр Интернета вещей о поддержке метода, устройство добавляет сведения о методе в узел SupportedMethods в сообщаемых свойствах:

"SupportedMethods": {
  "<method signature>": "<method description>",
  "<method signature>": "<method description>"
}

Подпись метода имеет следующий формат: <method name>--<parameter #0 name>-<parameter #1 type>-...-<parameter #n name>-<parameter #n type>. Например, если метод InitiateFirmwareUpdate ожидает строковый параметр с именем FwPackageURI, сообщить об этом можно с помощью такой подписи метода:

InitiateFirmwareUpate--FwPackageURI-string: "description of method"

Список поддерживаемых типов параметров см. в описании класса CommandTypes в проекте инфраструктуры.

Чтобы удалить метод, установите в сообщаемых свойствах значение null для подписи метода.

Примечание

Серверная часть решения обновляет сведения о поддерживаемых методах только при получении от устройства сообщений типа сведения об устройстве.

В следующем примере кода из класса SampleDeviceFactory, реализованного в проекте Common, демонстрируется добавление метода в список поддерживаемых методов SupportedMethods в сообщаемых свойствах, отправленных устройством:

device.Commands.Add(new Command(
    "InitiateFirmwareUpdate",
    DeliveryType.Method,
    "Updates device Firmware. Use parameter 'FwPackageUri' to specifiy the URI of the firmware file, e.g. https://iotrmassets.blob.core.windows.net/firmwares/FW20.bin",
    new[] { new Parameter("FwPackageUri", "string") }
));

Этот фрагмент кода добавляет сведения о методе InitiateFirmwareUpdate, в том числе текст, отображаемый на портале решения, и подробные сведения о параметрах метода.

При запуске симулятор отправляет сообщаемые свойства, включая список поддерживаемых методов, в Центр Интернета вещей.

Добавьте в симулятор обработчик для каждого поддерживаемого метода. Существующие обработчики можно увидеть в классе CoolerDevice в проекте Simulator.WebJob. В следующем примере представлен обработчик для метода InitiateFirmwareUpdate:

public async Task<MethodResponse> OnInitiateFirmwareUpdate(MethodRequest methodRequest, object userContext)
{
    if (_deviceManagementTask != null && !_deviceManagementTask.IsCompleted)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "Device is busy"
        }, 409));
    }

    try
    {
        var operation = new FirmwareUpdate(methodRequest);
        _deviceManagementTask = operation.Run(Transport).ContinueWith(async task =>
        {
            // after firmware completed, we reset telemetry
            var telemetry = _telemetryController as ITelemetryWithTemperatureMeanValue;
            if (telemetry != null)
            {
                telemetry.TemperatureMeanValue = 34.5;
            }

            await UpdateReportedTemperatureMeanValue();
        });

        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "FirmwareUpdate accepted",
            Uri = operation.Uri
        }));
    }
    catch (Exception ex)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = ex.Message
        }, 400));
    }
}

Имя для метода обработчика должно состоять из строки On, за которой следует имя метода. Параметр methodRequest содержит все параметры, передаваемые при вызове этого метода из серверной части решения. Возвращаемое значение должно иметь тип Task<MethodResponse>. Вспомогательный метод BuildMethodResponse служит для создания возвращаемого значения.

В методе обработчика можно выполнить следующее.

  • Запустить асинхронную задачу.
  • Получить требуемые свойства от двойника устройства, хранящегося в Центре Интернета вещей.
  • Обновить одно сообщаемое свойство с помощью метода SetReportedPropertyAsync из класса CoolerDevice.
  • Обновить несколько сообщаемых свойств, создав экземпляр TwinCollection и вызвав для него метод Transport.UpdateReportedPropertiesAsync.

Предыдущий пример обновления микропрограммы выполняет следующие действия.

  • Проверяет, что устройство способно принимать запрос на обновление микропрограммы.
  • Асинхронно запускает операцию обновления микропрограммы и сбрасывает данные телеметрии по завершении этой операции.
  • Немедленно возвращает сообщение "Принято обновление микропрограммы", подтверждая получение запроса устройством.

Построение и использование собственного (физического) устройства

Пакеты SDK для IoT Azure предоставляют библиотеки для подключения различных типов устройств (языков и операционных систем) к решениям IoT.

Изменение ограничений панели мониторинга

Количество устройств, отображаемых в раскрывающемся списке панели мониторинга

Значение по умолчанию равно 200. Это количество можно изменить в файле DashboardController.cs.

Количество маркеров, отображаемых в элементе управления карты Bing

Значение по умолчанию равно 200. Это количество можно изменить в файле TelemetryApiController.cs.

Период времени графика телеметрии

Значение по умолчанию — 10 минут. Это значение можно изменить в файле TelmetryApiController.cs.

Обратная связь

У вас есть предложение по настройке, которое не описано в этом документе? Оставьте его на сайте User Voice или в комментариях к этой статье.

Дополнительная информация

Дополнительные сведения о настройке решений с предварительно заданными параметрами см. в статьях: