Создание настраиваемого правила в предварительно настроенном решении для удаленного мониторинга

Введение

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

В этом руководстве мы с помощью простого виртуального устройства, созданного на основе Node.js, будем генерировать динамические данные телеметрии для отправки в серверную часть предварительно настроенного решения. Затем вы добавите настраиваемые правила в решение Visual Studio RemoteMonitoring и развернете настроенную серверную часть в подписке Azure.

Для работы с этим учебником необходимы указанные ниже компоненты.

  • Активная подписка Azure. Если ее нет, можно создать бесплатную пробную учетную запись всего за несколько минут. Дополнительные сведения см. в разделе Бесплатная пробная версия Azure.
  • Node.js 0.12.x или более поздней версии для создания виртуального устройства.
  • Visual Studio 2015 или Visual Studio 2017 для внесения новых правил в серверную часть предварительно настроенного решения.

Подготовка решения

Если вы еще не подготовили предварительно настроенное решение для удаленного мониторинга в своей учетной записи, то выполните следующие действия:

  1. Войдите на сайт azureiotsuite.com с помощью учетных данных Azure и щелкните +, чтобы создать решение.
  2. На плитке Удаленный мониторинг щелкните Выбрать.
  3. Укажите имя для предварительно настроенного решения удаленного мониторинга.
  4. Выберите область и подписку, которые вы хотите использовать для подготовки решения.
  5. Щелкните Создать решение , чтобы начать процесс подготовки. Этот процесс обычно занимает несколько минут.

Дождитесь завершения процесса подготовки.

  1. Щелкните плитку решения с состоянием Подготовка.
  2. Следите за состояниями подготовки по мере развертывания служб Azure в рамках подписки Azure.
  3. Когда подготовка будет завершена, состояние изменится на Готово.
  4. Щелкните плитку, чтобы просмотреть подробные сведения о решении на правой панели.

Примечание

Если при развертывании предварительно настроенного решения возникают проблемы, см. статьи Разрешения на сайте azureiotsuite.com и Часто задаваемые вопросы об IoT Suite. Если проблемы не удается устранить, отправьте запрос в службу поддержки на портале.

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

Запишите имя решения, которое вы выбрали для развертывания. Это имя понадобится вам дальше.

Настройка имитации устройства Node.js

  1. На панели удаленного мониторинга щелкните + Добавить устройство, а затем добавьте пользовательское устройство. Запишите имя узла Центра Интернета вещей, идентификатор устройства и ключ устройства. Они потребуются позже, при подготовке клиентского приложения устройства remote_monitoring.js.

  2. Убедитесь, что на компьютере разработки установлен компонент Node.js 0.12.x или более поздняя версия. Выполните команду node --version в командной строке или оболочке, чтобы проверить версию. Сведения об использовании диспетчера пакетов для установки Node.js в Linux см. в разделе Installing Node.js via package manage (Установка Node.js с помощью диспетчера пакетов).

  3. После установки Node.js клонируйте последнюю версию репозитория azure-iot-sdks-node на свой компьютер разработки. Всегда используйте ветвь master , чтобы получать последние версии библиотек и примеров.

  4. Из папки node/device/samples в локальной копии репозитория azure-iot-sdks-node скопируйте в пустую папку на компьютере разработки следующие два файла:

    • packages.json
    • remote_monitoring.js
  5. Откройте файл remote_monitoring.js и найдите следующее определение переменной.

    var connectionString = "[IoT Hub device connection string]";
    
  6. Замените [IoT Hub device connection string] строкой подключения устройства. Используйте значения имени узла Центра Интернета вещей, идентификатора устройства и ключа устройства, которые вы записали на шаге 1. Строка подключения имеет следующий формат:

    HostName={your IoT Hub hostname};DeviceId={your device id};SharedAccessKey={your device key}
    

    Если имя узла Центра Интернета вещей — contoso, а идентификатор устройства — mydevice, то строка подключения будет выглядеть как следующий фрагмент кода:

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. Сохраните файл. Выполните следующие команды в оболочке или командной строке в папке, содержащей эти файлы, для установки необходимых пакетов, а затем запустите пример приложения.

    npm install
    node remote_monitoring.js
    

Наблюдение динамической телеметрии в действии

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

The default dashboard

Если выбрать имитацию устройства Node.js, которая запускалась в предыдущем разделе, отобразятся данные телеметрии температуры, влажности и внешней температуры.

Add external temperature to the dashboard

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

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

Расположения хранения правил

Сведения о правилах сохраняются в двух расположениях:

  • Таблица DeviceRulesNormalizedTable, в которой хранятся нормализованные ссылки на правила, определенные на портале решения. Когда портал решения отображает правила устройства, он отправляет запрос в эту таблицу на получение определений правил.
  • Большой двоичный объект DeviceRules, который хранит все правила, определенные для всех зарегистрированных устройств. Он определен как источник ссылочных данных для заданий Azure Stream Analytics.   Когда вы изменяете существующее правило или создаете новое на портале решения, необходимые изменения вносятся одновременно в таблицу и в большой двоичный объект. Определения правил, которые отображаются на портале, поступают из таблицы хранилища. Определения правила, на которые ссылаются задания Stream Analytics, извлекаются из большого двоичного объекта.

Обновление решения Visual Studio RemoteMonitoring

Ниже показано, как добавить в решение Visual Studio RemoteMonitoring новое правило, которое использует телеметрию ExternalTemperature, отправляемую виртуальным устройством.

  1. Клонируйте репозиторий azure-iot-remote-monitoring в любое удобное расположение на локальном компьютере, если вы этого не сделали ранее, с помощью такой команды Git:

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. В Visual Studio откройте файл RemoteMonitoring.sln из локальной копии репозитория azure-iot-remote-monitoring.

  3. Откройте файл Infrastructure\Models\DeviceRuleBlobEntity.cs и добавьте свойство ExternalTemperature следующим образом:

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. В тот же файл добавьте свойство ExternalTemperatureRuleOutput:

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. Откройте файл Infrastructure\Models\DeviceRuleDataFields.cs и добавьте представленное ниже свойство ExternalTemperature после существующего свойства Humidity:

    public static string ExternalTemperature
    {
    

    get { return "ExternalTemperature"; } } ```

  1. В том же файле измените метод _availableDataFields, чтобы он содержал ExternalTemperature, вот так:

    private static List<string> _availableDataFields = new List<string>
    {                    
        Temperature, Humidity, ExternalTemperature
    };
    

7. Откройте файл Infrastructure\Repository\DeviceRulesRepository.cs и измените метод BuildBlobEntityListFromTableRows следующим образом:

```csharp
else if (rule.DataField == DeviceRuleDataFields.Humidity)
{
    entity.Humidity = rule.Threshold;
    entity.HumidityRuleOutput = rule.RuleOutput;
}
else if (rule.DataField == DeviceRuleDataFields.ExternalTemperature)
{
  entity.ExternalTemperature = rule.Threshold;
  entity.ExternalTemperatureRuleOutput = rule.RuleOutput;
}
```

Заново создайте и повторно разверните это решение.

Теперь его можно развернуть в подписке Azure.

  1. Откройте командную строку с повышенными правами и перейдите к корню локальной копии репозитория azure-iot-remote-monitoring.

  2. Чтобы развернуть обновленное решение, выполните следующие команды, заменив {deployment name} именем предварительно настроенного решения, которое вы записали ранее:

    build.cmd cloud release {deployment name}
    

Обновление задания Stream Analytics

Когда развертывание завершится, можно обновить задание Stream Analytics, чтобы оно использовало новые определения правил.

  1. На портале Azure перейдите в группу ресурсов, которая содержит ресурсы предварительно настроенного решения. Эта группа ресурсов имеет то же имя, которое вы указали для решения во время развертывания.

  2. Перейдите к заданию Stream Analytics {deployment name}-Rules.

3. Нажмите кнопку "Остановить ", чтобы остановить выполнение задания Stream Analytics. (Прежде чем вносить изменения в запрос, дождитесь остановки задания потоковой передачи.)

4. Щелкните "Запрос". Измените запрос, добавив в него инструкцию SELECT для параметра ExternalTemperature. Далее представлен полный текст измененного запроса с новой инструкцией SELECT:

```
WITH AlarmsData AS 
(
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Temperature' as ReadingType,
     Stream.Temperature as Reading,
     Ref.Temperature as Threshold,
     Ref.TemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Temperature IS NOT null AND Stream.Temperature > Ref.Temperature
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Humidity' as ReadingType,
     Stream.Humidity as Reading,
     Ref.Humidity as Threshold,
     Ref.HumidityRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Humidity IS NOT null AND Stream.Humidity > Ref.Humidity
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'ExternalTemperature' as ReadingType,
     Stream.ExternalTemperature as Reading,
     Ref.ExternalTemperature as Threshold,
     Ref.ExternalTemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.ExternalTemperature IS NOT null AND Stream.ExternalTemperature > Ref.ExternalTemperature
)
 
SELECT *
INTO DeviceRulesMonitoring
FROM AlarmsData
 
SELECT *
INTO DeviceRulesHub
FROM AlarmsData
```
  1. Щелкните Сохранить, чтобы внести изменения в запрос для этого правила.

  2. Щелкните Запустить, чтобы снова включить задание Stream Analytics.

Добавление нового правила на панель мониторинга

Теперь можно добавить правило ExternalTemperature в устройство на панели мониторинга решения.

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

2. Перейдите на панель "Устройства ".

3. Найдите созданное пользовательское устройство, которое отправляет данные телеметрии ExternalTemperature и на панели сведений об устройстве , нажмите кнопку "Добавить правило".

4. Выберите ExternalTemperature в поле данных.

  1. Для параметра Пороговое значение задайте значение 56. Щелкните Сохранить и просмотреть правила.

  2. Вернитесь к панели мониторинга, чтобы просмотреть историю оповещений.

  3. В открытом окне консоли запустите консольное приложение Node.js, которое начнет отправлять данные телеметрии ExternalTemperature.

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

Дополнительные сведения

Изменение оператора > является более сложной задачей и выходит за рамки процессов, описанных в этом руководстве. Вы можете изменить задание Stream Analytics, чтобы оно использовало любой удобный оператор, но отобразить этот оператор на портале решения намного сложнее.

Следующие шаги

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