Статьи

Реагирование на данные IoT с Hawkular

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

В этой статье я расскажу о том, как компонент предупреждений Hawkular (который уже доступен в Hawkular-full) можно использовать для реагирования на входящие данные и для того, чтобы светодиод Arduino мигал.

Arduino Uno с Ethernet-экраном и желтым светодиодом

Arduino Uno с Ethernet-экраном и желтым светодиодом

Для Arduino я добавил дешевый Ethernet-щит на основе Enc28j60. Доступна стандартная библиотека , которая позволяет легко настроить веб-сервер, который мы используем (на самом деле код в основном из этого примера).

Новая (полная) настройка выглядит следующим образом:

Настройка с Arduino в качестве актера

Настройка с Arduino в качестве актера

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

Первая строка — это идентификатор метрики, к которой относятся следующие строки. Вторая строка — это отображаемое имя для пользовательского интерфейса. В следующем разделе настраивается оповещение.

Зарегистрируйте веб-крючок для использования ниже:

1
2
3
@webhook_props = { url: 'http://172.31.7.177/',   # target server
                   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 вы можете сделать гораздо больше, включая автономное развертывание для встраивания его в собственное приложение.

Некоторое дальнейшее чтение: