创建报警节点

此节点尝试为消息发送方加载已配置警报类型的最新警报。如果存在未清除的警报,将此警报更新,否则,创建一个新的警报。 节点配置:

  • 警报详情构建器脚本
  • 警报类型-表示警报类型的任何字符串
  • 报警严重程度-{临界|主要|次要|警告|不确定}
  • 是否传播——是否应该将警报传播到所有父实体的相关实体。 用于生成警报细节JsonNode的警报细节构建器脚本。可以使用该构建器脚本在警报中存储其他参数。例如,您可以从原始消息有效负载或元数据中保存属性名/值对。 警报详情构建器脚本应该返回详情对象。

  • 可以通过msg属性访问消息有效负载。例如msg.temperature
  • 可以通过元数据属性访问消息元数据。例如metadata.customerName
  • 可以通过msgType属性访问消息类型。例如msgType
  • 可选:可以通过metada . prevalarmdetails访问先前的警报详情。如果先前的警报不存在,则此字段将不会出现在元数据中。请注意,metada .prevAlarmDetails是一个原始字符串字段,需要使用此结构将其转换为对象:
var details = {};
if (metadata.prevAlarmDetails) {
    details = JSON.parse(metadata.prevAlarmDetails);
}

可以使用JavaScript测试函数验证警报详情构建器脚本函数。 细节构建器函数的示例 该函数从先前的警报中计算属性增肌属性。还可以将来自入站消息负载的温度属性放入警报详情中。

var details = {temperature: msg.temperature, count: 1};

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

使用这些属性创建/更新的警报:

  • 警报详情-从警报详情构建器脚本返回的对象
  • 报警状态-如果有新的报警-> ACTIVE_UNACK. 如果是现有警报->状态不改变
  • 严重性-节点配置的值
  • 传播-从节点配置中传播的值。
  • 警报类型-节点配置的值
  • 报警启动时间-如果是新的报警->电流系统时间。如果是现有警报->时间不变
  • 报警结束时间-当前系统时间。

出站消息的结构如下:

  • 消息类型-警报
  • 发起者-来自入站消息的同一发起者
  • 有效负载-JSON表示创建/更新的新警报
  • 元数据——来自原始消息元数据的所有字段 创建新警报后,出站消息将包含元数据内的额外属性:isNewAlarm值为true。消息将通过创建的链传递。 现有的警报更新后,出站消息将包含元数据内的额外属性:isexstingalarm值为true。消息将通过更新的链传递。 下面是出站消息有效负载的示例
{
  "tenantId": {
    "entityType": "TENANT",
    "id": "22cd8888-5dac-11e8-bbab-ad47060c9bbb"
  },
  "type": "High Temperature Alarm",
  "originator": {
    "entityType": "DEVICE",
    "id": "11cd8777-5dac-11e8-bbab-ad55560c9ccc"
  },
  "severity": "CRITICAL",
  "status": "ACTIVE_UNACK",
  "startTs": 1526985698000,
  "endTs": 1526985698000,
  "ackTs": 0,
  "clearTs": 0,
  "details": {
    "temperature": 70,
    "ts": 1526985696000
  },
  "propagate": true,
  "id": "33cd8999-5dac-11e8-bbab-ad47060c9431",
  "createdTime": 1526985698000,
  "name": "High Temperature Alarm"
}

创建和清楚警报

清楚警报节点

此节点为消息发送方加载已配置警报类型的最新警报,如果警报存在则清除该警报。 节点配置:

  • 警报详情构建器脚本
  • 警报类型-表示警报类型的任何字符串 警报详情生成器脚本用于更新警报细节JsonNode。可使用该脚本在警报中存储其他参数。例如,您可以从原始消息有效负载或元数据中保存属性名/值对。 警报详情构建器脚本应该返回细节对象。

  • 可以通过msg属性访问消息有效负载。例如msg.temperature
  • 可以通过元数据属性访问消息元数据。例如metadata.customerName
  • 可以通过msgType属性访问消息类型。例如msgType
  • 当前的报警信息可以通过metadata.prevAlarmDetails访问。 请注意,metadata.prevAlarmDetails是一个原始字符串字段,需要使用此结构将其转换为对象:
var details = {};
if (metadata.prevAlarmDetails) {
    details = JSON.parse(metadata.prevAlarmDetails);
}

可以使用JavaScript测试函数验证警报详情构建器脚本函数。 细节构建器函数的示例 该函数从先前的警报中计算属性增肌属性。还可以将来自入站消息负载的温度属性放入警报详情中。

var details = {temperature: msg.temperature, count: 1};

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

return details;

此节点更新当前警报:

  • 如果已经确认警报状态,则将警报状态更改为CLEARED_ACK,否则更改为CLEARED_UNACK
  • 为当前系统设置确切的时间
  • 使用从警报详情构建器脚本返回的新对象更新警报细节

当警报不存在或已清除警报时,原始消息将通过false链传递到下一个节点。 否则,新的消息将通过Cleared链传递。

出站消息的结构如下:

  • 消息类型-ALARM
  • 发起者-来自入站消息的同一发起者
  • 有效负载-JSON表示清除的警报
  • 元数据——来自原始消息元数据的所有字段。元数据中的额外属性将被添加:isClearedAlarm值为True 请看如下实例
{
  "tenantId": {
    "entityType": "TENANT",
    "id": "22cd8888-5dac-11e8-bbab-ad47060c9bbb"
  },
  "type": "High Temperature Alarm",
  "originator": {
    "entityType": "DEVICE",
    "id": "11cd8777-5dac-11e8-bbab-ad55560c9ccc"
  },
  "severity": "CRITICAL",
  "status": "CLEARED_UNACK",
  "startTs": 1526985698000,
  "endTs": 1526985698000,
  "ackTs": 0,
  "clearTs": 1526985712000,
  "details": {
    "temperature": 70,
    "ts": 1526985696000
  },
  "propagate": true,
  "id": "33cd8999-5dac-11e8-bbab-ad47060c9431",
  "createdTime": 1526985698000,
  "name": "High Temperature Alarm"
}

Create and Clear Alarms

Generator Node

创建和清除警报

生成节点

生成具有可配置周期的消息。JavaScript函数用于消息生成。 节点配置:

  • 消息生成频率(秒)
  • 消息的发起者
  • JavaScript函数,用于生成实际的消息。 JavaScript函数接收3个参数:
  • prevMsg -上一次生成的消息有效负载。
  • prevMetadata——上一次生成的消息元数据。
  • prevMsgType -上一次生成的消息类型。 脚本应返回以下结构:
{   
    msg: new payload,
    metadata: new metadata,
    msgType: new msgType 
}

结果对象中的所有字段都是可选的,如果没有指定,将从之前生成的消息中获取。 此节点的出站消息将是使用配置的JavaScript函数构造的新消息。 可以使用JavaScript测试函数验证JavaScript生成器函数。 此节点可用于调试规则链。

记录节点

使用配置好的JavaScript函数将传入消息转换为字符串并将最终值记录到Thingsboard日志文件中。 信息日志级别用于日志记录。 JavaScript函数接收3个参数

  • 元数据——是一个消息元数据。
  • msg是一个消息有效负载。
  • msgType -是一种消息类型。 脚本应该返回字符串值。

可以使用JavaScript测试函数验证JavaScript转换函数。 在接下来的教程中,您可以看到使用这个节点的实例:

RPC请求响应

RPC请求响应节点

向RPC调用发起者发送响应。所有传入的RPC请求都作为消息通过规则链传递。所有RPC请求都有请求ID。可使用该字段映射请求和响应。消息发送方必须是一个设备实体,因为RPC响应被启动到消息发送方。 节点配置具有特殊的请求ID字段映射。如果未指定映射,则默认使用requestId元数据字段。

RPC request can be received via different transports: 可通过以下传输方式接收RPC请求: MQTT HTTP CoAP 消息有效负载示例:

{
  "method": "setGpio",
  "params": {
    "pin": "23",
    "value": 1
  }
}

在以下情况下,消息将通过failure链路由:

  • 入站消息发送者不是设备实体
  • 请求id不在消息元数据中。
  • 入站消息有效负载为空 有关在Thingsboard中RPC如何工作的详细信息,请阅读RPC功能文章。

RPC调用请求节点

将RPC请求发送到设备,并将响应发送到下一个规则节点。消息发送方必须是一个设备实体,因为只能对设备发起RPC请求。 节点配置有超时字段,用于指定等待设备响应超时。 消息有效负载必须具有RPC请求的正确格式。它必须包含方法和参数字段:

{
  "method": "setGpio",
  "params": {
    "pin": "23",
    "value": 1
  }
}

如果消息有效负载包含requestId字段,使用该字段识别设备RPC请求。否则,随机生成requestId。 出站消息将具有与入站消息相同的发起者和元数据。设备响应将被添加到消息负载中。 在以下情况下,消息将通过failure链路由:

  • 入站消息发送者不是设备实体
  • 入站消息丢失了方法或params字段
  • 节点在配置超时期间不接收响应。 否则消息将通过success链路由。 详情请阅读RPC功能文章。

保存属性节点

将传入消息有效负载的属性存储到数据库,并将这些属性关联到消息发起者识别的相关实体。配置范围用于识别属性范围。 支持范围类型: 客户属性 共享属性 服务器属性

预期的消息类型为POST_ATTRIBUTES_REQUEST。如果消息类型不是POST_ATTRIBUTES_REQUEST,消息将通过failure链路由。 当属性通过现有API (HTTP / MQTT / CoAP /等)上传时,如果消息类型和有效负载均满足预期,那么消息将被传递到根规则链的输入节点。 如果需要在规则链中触发属性存储,则需要配置规则链,来将消息负载转换为预期格式,并将消息类型设置为POST_ATTRIBUTES_REQUEST。可以使用脚本转换节点完成。 预期消息有效负载的例子:

{
  "firmware_version": "1.0.1",
  "serial_number": "SN-001"
}

成功保存属性后,原始消息将通过success链传递到下一个节点,否则将使用failure链。

保存时间序列节点

将来自传入消息有效负载的Timeseries数据存储到数据库,并将它们关联到由消息发起者识别的实体。配置TTL秒来检验数据期限。值为0意味着数据永远不会过期。

预期消息类型为POST_TELEMETRY_REQUEST。如果消息类型不是POST_TELEMETRY_REQUEST,则将通过failure链路由消息。 当timeseries数据通过现有的API (HTTP / MQTT / CoAP /等等)发布时,如果消息类型和有效负载均满足预期,那么消息将被传递到根规则链的输入节点。 在需要触发规则链内的timeseries数据存储时,应配置规则链来转换消息有效负载 将消息类型设置为POST_TELEMETRY_REQUEST。可以使用脚本转换节点完成该操作。 消息元数据必须包含ts字段。该字段可识别已发布的遥测技术几毫秒内的时间戳。 此外,如果消息元数据包含TTL字段,则使用该字段值识别timeseries数据期限,否则,请使用节点配置中的TTL。 预期消息有效负载的例子:

{  
  "values": {
    "key1": "value1",
    "key2": "value2"
  }
}

成功保存timeseries数据之后,原始消息将通过success链传递到下一个节点,否则使用failure链。

results matching ""

    No results matching ""