В первом посте я говорил о том, как отправить данные датчика IoT в подсистему метрик Hawkular, а затем о том, как зарегистрировать метрику в Hawkular, чтобы ее можно было отобразить в консоли.
В этой статье я расскажу о том, как компонент предупреждений Hawkular (который уже доступен в Hawkular-full) можно использовать для реагирования на входящие данные и для того, чтобы светодиод Arduino мигал.
Для Arduino я добавил дешевый Ethernet-щит на основе Enc28j60. Доступна стандартная библиотека , которая позволяет легко настроить веб-сервер, который мы используем (на самом деле код в основном из этого примера).
Новая (полная) настройка выглядит следующим образом:
Alerting
В Hawkular уже есть встроенный компонент оповещения, который позволяет сравнивать входящие значения с пороговыми значениями, а затем вызывать плагины для пересылки оповещений по электронной почте, каналов IRC и многих других способов связи. Плагин, который мы собираемся использовать здесь, является webhook . Так как в стандартном дистрибутиве Hawkular присутствует только плагин для электронной почты, нам сначала нужно будет установить плагин webhook:
Проверьте Hawkular-оповещения
1
2
|
git clone https: //github.com/hawkular/hawkular-alerts.git cd hawkular-alerts |
Построить ястребиные оповещения:
1
|
mvn -Pdev -DskipTests install |
Теперь вы можете скопировать плагин на Hawkular-сервер
1
2
3
4
|
cd hawkular-alerts-actions-plugins cd hawkular-alerts-actions-webhook cp hawkular-alerts-actions-webhook.war \ $HAWKULAR/modules/system/layers/hawkular/org/hawkular/nest/main/deployments/ |
Поскольку Hawkular не подхватывает это автоматически, вам необходимо перезапустить сервер Hawkular после копирования webhook.war.
Настройте оповещение
Я изменил скрипт ruby, чтобы получить файл конфигурации (в формате YAML):
1
2
3
4
5
6
|
--- 16617927 : 40.176 . 91.120 . 5.0 . 0.125 : :name: Living room :alert: :comparator: :gt :value: 25 |
Первая строка — это идентификатор метрики, к которой относятся следующие строки. Вторая строка — это отображаемое имя для пользовательского интерфейса. В следующем разделе настраивается оповещение.
- Давайте посмотрим, как это выглядит в коде (вы можете увидеть полный код на GitHub )
Зарегистрируйте веб-крючок для использования ниже:
1
2
3
|
method: 'POST' } # http verb @alerts_client .create_action 'webhook' , "send-via-webhook-#{metric_id}" , @webhook_props |
Установите триггер и условие, триггер первым
1
2
3
4
|
t = Hawkular::Alerts::Trigger. new ({}) t.enabled = true t.id = "trigger_#{metric_id}" t.tags = { :resourceId => "#{feed}/#{res_id}" } |
Теги сообщают пользовательскому интерфейсу, к какому ресурсу применяется триггер, и таким образом позволяют отображать предупреждение в пользовательском интерфейсе Hawkular.
Следующее условие:
1
2
3
4
5
6
|
c = Hawkular::Alerts::Trigger::Condition. new ({}) c.trigger_mode = :FIRING c.type = :THRESHOLD c.data_id = metric_id c.operator = alert[:comparator].to_s.upcase c.threshold = alert[:value] |
И, наконец, поскольку мы хотим, чтобы предупреждение не только отображалось в пользовательском интерфейсе, но и передавалось нашему Arduino через веб-крючок, нам необходимо подключить веб-крючок к триггеру. Идентификатор плагина — это webhook, а action_id — это то, что мы настроили выше.
1
2
3
4
5
|
# Reference an action definition a = Hawkular::Alerts::Trigger::Action. new ({}) a.action_plugin = 'webhook' a.action_id = "send-via-webhook-#{metric_id}" t.actions.push a |
И тогда мы можем создать триггер, который будет активен немедленно.
1
|
@alerts_client .create_trigger t, , nil |
Огонь далеко
Теперь, когда приходит значение выше порогового значения, сработает веб-крючок, он откроет http-соединение с Arduino, и светодиод начнет мигать.
Кроме того, оповещение также будет отображаться в Центре оповещений в интерфейсе Hawkular:
Больше
Обратите внимание, что приведенное выше определение триггера довольно простое и имеет только один компаратор. Кроме того, триггер срабатывает каждый раз, когда поступает значение выше порогового значения. В более реальном сценарии можно добавить некоторое ослабление, которое срабатывает только в том случае, если измерение несколько раз превышает пороговое значение для некоторого интервала. Или, если вы включите кондиционер, вы должны установить триггер на автоматическое отключение, а затем иметь компаратор для его включения после того, как температура опустится ниже определенного уровня.
С помощью описанных выше предупреждений Hawkular вы можете сделать гораздо больше, включая автономное развертывание для встраивания его в собственное приложение.
Некоторое дальнейшее чтение:
- Hawkular Alerts для разработчиков — довольно обширная документация по Hawkular Alerts.
- Введение в триггеры AutoResolve
- Использование Hawkular Alerts в качестве автономного движка
Ссылка: | Реагирование на данные IoT с Hawkular от нашего партнера по JCG Хейко Руппа в блоге Некоторые вещи для запоминания . |