产品定价 立即试用
社区版
文档 > 规则引擎 > 数据处理与操作 > 处理告警详情
入门
指南 安装 架构 API 常见问题
目录

使用 Alarm 详情

使用场景

本教程基于 create & clear alarms 教程及其使用场景。 我们将复用上述教程中的 rule chain,并在 Create Alarm 与 Clear Alarm 节点中配置 Alarm Details 功能。 假设你的设备使用 DHT22 传感器采集并上报温度数据到 ThingsBoard。 DHT22 适用于 -40 到 80°C 的温度范围,我们希望当温度超出该范围时生成 Alarm。

在本教程中,我们将配置 ThingsBoard Rule Engine 以实现:

  • 统计每个设备出现临界温度更新的次数,并保存到 Alarm details。
  • 将最新的临界温度值保存到 Alarm details。

前置条件

请确保已完成以下指南并阅读所列文章:

Message flow

本节说明本教程中各节点的作用:

  • Node A: Create alarm node.
    • 当上报温度不在预期范围内时(filter script 节点返回 True),创建或更新 alarm。
  • Node B: Clear alarm node.
    • 当上报温度回到预期范围内时(script 节点返回 False),若 alarm 存在则清除。
  • Node C: Rule Chain node.
    • 将入站消息转发到指定 Rule Chain Create & Clear Alarms with details


配置 Rule Chains

本教程仅修改 Create & Clear Alarms rule chain,即在 Message flow 小节提到的节点中配置 Alarm Details 功能。
同时,我们将该 Rule Chain 重命名为 Create & Clear Alarms with details


下图展示了上述 Rule Chains 的结构:

  • Create & Clear Alarms with details:

image

  • Root Rule Chain:

image


下载并导入用于 Create & Clear Alarms with details: 的 json file。 在 root rule chain 中按上图创建 Node C,将 telemetry 转发到导入后的 rule chain。

下文将说明如何修改该 rule chain,重点是节点 AB

修改 Create & Clear Alarms with details:

修改所需节点

在该 rule chain 中,你将修改 2 个节点,具体如下:

Node A: Create alarm

当上报温度不在预期范围内(script 节点返回 True)时,我们希望创建 Alarm。 同时将当前 temperature 写入 Alarm Details 字段。 若 alarm 已存在,则将 Alarm Details 中的 count 加 1;否则将 count 设为 1。

为实现该逻辑,需要重写 Details function:

Details function:

1
2
3
4
5
6
7
8
9
10
11
var details = {};
details.temperature = msg.temperature;

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

return details;

Details function 会创建所需的 details 对象并设置初始参数。随后在 if 语句中判断是新 Alarm 还是已有 Alarm。 若已存在,则读取之前的 count 并递增。

image

如果在 Create Alarm 节点中新建了 Alarm,会通过关系 Created 传递到后续节点(若存在)。 如果 Alarm 被更新,会通过关系 Updated 传递到后续节点(若存在)。

Node B: Clear Alarm

当上报温度处于预期范围内(script 节点返回 False)时,我们希望清除已有 Alarm。 同时在清除时,将最新 temperature 写入 Alarm details。

为实现该逻辑,需要重写 Details function:

Alarm Details function:

1
2
3
4
5
6
7
var details = {};
if (metadata.prevAlarmDetails) {
    details = JSON.parse(metadata.prevAlarmDetails);
}
details.clearedTemperature = msg.temperature;

return details;

image

如果 Clear Alarm 节点未找到已有 Alarm,则不会发生变更,原始消息会通过关系 False 传递到后续节点(若存在)。 如果 Alarm 存在,则会被清除并通过关系 Cleared 传递到后续节点。

Rule chain 配置完成后请保存

Alarm entity JSON (reference)

下例展示了一个典型(默认)已创建 alarm 的 JSON 结构。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
  "type": "High Temperature Alarm",
  "originator": {
    "id": "784f394c-42b6-435a-983c-b7beff2784f9",
    "entityType": "DEVICE"
  },
  "originatorName": "SCADA device A1",
  "status": "ACTIVE_UNACK",
  "severity": "CRITICAL",
  "acknowledged": false,
  "cleared": false,
  "assigneeId": {
    "id": "784f394c-42b6-435a-983c-b7beff2784f9",
    "entityType": "USER"
  },
  "createdTime": 1634058704565,
  "startTs": 1634058704565,
  "endTs": 1634111163522,
  "ackTs": 1634115221948,
  "clearTs": 1634114528465,
  "assignTs": 1634115928465,
  "details": {},
  "propagate": true,
  "propagateToOwner": true,
  "propagateToOwnerHierarchy": true,
  "propagateToTenant": true,
  "propagateRelationTypes": [
    "string"
  ],
  "id": {
    "id": "784f394c-42b6-435a-983c-b7beff2784f9",
    "entityType": "ALARM"
  }
}

Alarm Status Filter 节点仅按状态过滤(Active、Cleared、Acknowledged 等)。若需按类型或其他属性过滤,请在 rule chain 中使用 ScriptSwitch 等过滤节点。

配置 Dashboard

下载并导入本教程使用的 dashboard json file

  • 进入 Dashboards -> Add new Dashboard -> Import Dashboard,拖拽导入下载的 json 文件。

你也可以从零开始创建 Dashboard,下文将给出步骤:

创建 Dashboard

我们将为所有 Thermostat 设备创建 Dashboard,并添加 Alarm widget。先创建新 Dashboard:

image

点击 Edit dashboard,添加会解析到所有 Thermostat 类型设备的 alias

image

向 Dashboard 添加 Alarm widget(Add new widget -> Alarm widget bundle -> Alarms),并选择已配置的 alias entity alarm source。 同时添加额外的 alarm fields

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

然后点击字段的 edit 按钮,重命名各字段标签:

  • From: -> To:

    • details.temperature -> Event Temperature.
    • details.count -> Events count.
    • details.clearedTemperature -> Clear Temperature.

image

上报 telemetry 并验证

设备 telemetry 上报将使用 Rest API(link)。 在此之前,需要从设备 Thermostat Home 复制 access token。

image

*you need to replace$ACCESS_TOKENwith actual device token

发送 temperature = 99,Alarm 应被创建:

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

image

发送 temperature = 180,Alarm 应被更新且 count 字段递增:

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

image

发送 temperature = 30,Alarm 应被清除并显示 cleared temperature:

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

image

此外,你还可以了解如何:

  • 定义额外的告警处理逻辑,例如发送邮件或向 Telegram App 发送通知。

具体可参考 另请参阅 小节中的链接。


另请参阅

下一步