创建报警节点
此节点尝试为消息发送方加载已配置警报类型的最新警报。如果存在未清除的警报,将此警报更新,否则,创建一个新的警报。 节点配置:
- 警报详情构建器脚本
- 警报类型-表示警报类型的任何字符串
- 报警严重程度-{临界|主要|次要|警告|不确定}
- 是否传播——是否应该将警报传播到所有父实体的相关实体。 用于生成警报细节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链。