用例

我们假设设备使用DHT22传感器收集温度并将温度值推送到TB。DHT22所能读取的温度值范围为-40 到 80°C。我们需要创建一个报警规则,在温度超出这个范围值的时候发出警报。

在该教程中我们需要配置TB规则引擎来进行如下操作:

  • 温度大于80°C或者小于-40°C时创建新警报或更新已经存在的警报;
  • 温度值在-40 到 80°C以内时清楚警报;
  • 计算每一个设备临界更新值的次数,并将该结果记录到警报详情中;
  • 保存最后一次临界温度值并在警报详情中标记时间;

先决条件

操作之前请确保您已经查阅以下文档:

  • 入门指南。
  • 规则引擎概述。

    步骤1:添加温度阈值检查节点

    原始根规则链如下图所示。请注意,我们已经从根规则链中移除了不相关的规则节点

我们需要修改默认规则链,并添加带有温度阈值检查脚本的脚本过滤节点。如果温度在正常温度范围内,脚本返回False,如果超出范围,将返回True

return msg.temperature < -40 || msg.temperature > 80;

使用关系success链接脚本节点和保存时间序列节点。设备遥测数据保存到数据库以后,原始消息会被发送到脚本节点。

Step 2: Create/Update Alarm

If published temperature is not in expected time range (script node returns True) we want to create an Alarm. We want to add current temperature and timestamp into Alarm Details field. Also we want to increment count field in Alarm Details if alarm already exist, otherwise set count to 1. For making it we will add Create Alarm node.

步骤2:创建/更新警报

如果发布的温度值不在正常温度值范围内(脚本节点返回True),我们需要创建警报。我们需要将该温度值以及出现该温度值的时间记录到警报详情中。如果存在警报,我们则需要在警报详情中增加count值,否则我们将count改为1

警报类型- Critical Temperature 警报详情函数

var details = {};
details.temperature = msg.temperature;
details.ts = metadata.ts;

if (metadata.prevAlarmDetails) {
    var prevDetails = JSON.parse(metadata.prevAlarmDetails);
    details.count = prevDetails.count + 1;
} else {
    details.count = 1;
}

return details;

警报详情函数创建所需的deatils对象初始参数。然后我们验证它是新警报还是已经存在的警报。如果警报存在,我们增加之前的count值 使用True关系将该值连接到脚本节点。

如果在Create Alarm节点中创建了新的警报,那么它将通过创建的关系传递给其他存在的节点。如果警报被更新——则将通过更新的关系传递给其他节点(如果存在其他节点的话)。

步骤2 清楚警报

如果发布的温度值在正常值范围内(脚本节点返回False),我们需要清除存在的警报。在清除警报的过程中,我们需要将最新的温度值添加的警报详情中。 我们需要添加创建警报节点来完成上述操作

警报详情函数:

var details = {};
if (metadata.prevAlarmDetails) {
    details = JSON.parse(metadata.prevAlarmDetails);
}
details.clearedTemperature = msg.temperature;

return details;

使用False关系与脚本节点连接

如果Clear Alarm节点找不到存在的警报,我们则不做任何操作,通过False关系将原始消息传递给其他节点。如果警报确实存在——清楚警报并将消息通过清除关系传递到其他节点。 配置完成后请保存。

步骤3:结果验证

配置设备和仪表板 我们需要创建设备恒温器首页

现在我们需要为所有恒温器设备创建仪表板,并在仪表板中添加警报小部件。创建新仪表板:

点击“编辑仪表板”并添加别名(解析到所有具有Thermostat类型的设备):

将警报部件添加到仪表板(Add new widget -> Alarm widget bundle -> Alarms)。选择已配置别名的实体报警源。饼增加了额外的报警字段:

  • details.ts
  • details.temperature
  • details.count
  • details.clearedTemperature

发送遥测并验证

使用Rest API 发送设备遥测。我们需要从恒温器首页复制设备访问token

请注意将$ACCESS_TOKEN替换成实际的设备token 我们发送温度为99度。需要创建警报:

curl -v -X POST -d '{"temperature":99}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

现在发送温度值为180度,我们需要更新警报并增加count值

curl -v -X POST -d '{"temperature":180}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

接下来发送温度值为30度。需要清除警报,并清除温度:

curl -v -X POST -d '{"temperature":30}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

TL;DR

从本教程下载并导入带有规则链的附加规则链json文件。不要忘记将新规则链标记为“root”。 还可以导入附加的恒温仪表板

results matching ""

    No results matching ""