在第一篇文章中,我一直在讨论如何将IoT传感器数据发送到 Hawkular 的指标子系统 ,然后如何在Hawkular中注册指标,以便可以在控制台中对其进行图形化处理。
在本文中,我将讨论如何使用Hawkular警报组件(Hawkular-full中已经可用)来响应传入的数据并使Arduino上的LED闪烁。
对于Arduino,我添加了便宜的基于Enc28j60的以太网屏蔽。 有一个可用的标准库 ,可以轻松设置我们正在使用的Web服务器(实际上代码大部分来自该示例)。
新的(完整)设置如下所示:
警示
Hawkular已经内置了一个警报组件,该组件可以将传入的值与阈值进行比较,然后调用插件以通过电子邮件将警报发送到irc通道以及更多通信方式。 我们将在这里使用的插件是webhook 。 由于在标准Hawkular发行版中仅提供电子邮件插件,因此我们需要先安装webhook插件:
查看Hawkular警报
git clone https://github.com/hawkular/hawkular-alerts.git
cd hawkular-alerts
建立鹰派警报:
mvn -Pdev -DskipTests install
现在您可以将插件复制到Hawkular服务器
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不会自动执行此操作,因此您需要在复制webhook.war之后重新启动Hawkular服务器。
设置警报
我已经修改了ruby脚本以提取配置文件(YAML格式):
---
16617927:40.176.91.120.5.0.0.125:
:name: Living room
:alert:
:comparator: :gt
:value: 25
第一行是以下几行适用的指标的ID。 第二行是UI的显示名称。 接下来的部分将设置警报。
注册要在下面使用的webhook:
@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
设置触发器和条件,首先触发
t = Hawkular::Alerts::Trigger.new({})
t.enabled = true
t.id = "trigger_#{metric_id}"
t.tags = { :resourceId => "#{feed}/#{res_id}" }
标签告诉UI触发器在哪个资源上应用,因此可以在Hawkular UI中显示警报
接下来的条件:
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]
最后,由于我们不仅希望警报显示在UI中,还希望通过Webhook将其转发到我们的Arduino,所以我们需要将Webhook附加到触发器。 插件ID是webhook ,而action_id是我们在上面设置的。
# 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
然后我们可以创建触发器,该触发器将立即处于活动状态。
@alerts_client.create_trigger t, , nil
开火
现在,当输入高于阈值的值时,将触发Webhook,它将打开与Arduino的http连接,并且LED指示灯将闪烁。
此外,警报还将显示在Hawkular UI的警报中心中:
更多
请注意,上面的触发器定义非常简单,并且只有一个比较器。 同样,每次输入高于阈值的值时,触发器都会触发。在更现实的场景中,可能会增加一些抑制作用,即仅当测量值在某个时间间隔内超过阈值几倍时才触发触发器。 或者,如果您开始使用空调,则可以将触发器设置为自动禁用,然后让比较器在温度降至一定水平以下后将其重新打开。
除上述功能外,您还可以使用Hawkular Alerts做更多的事情,包括将其嵌入到您自己的应用程序中的独立部署。
一些进一步的阅读:
- 适用于开发人员的Hawkular警报-Hawkular警报的相当全面的文档。
- AutoResolve触发器简介
- 使用Hawkular Alerts作为独立引擎
翻译自: https://www.javacodegeeks.com/2016/03/reacting-iot-data-hawkular.html