组件配置变量
某些场景下,需要统一修改组件配置,或者在组件运行时动态更换组件配置。可以使用内置的变量替换组件配置。使用方法:${key}、${key.subKey}。 变量分两大类:全局变量和组件运行时变量。
# 全局变量
全局变量: 在组件初始化时(组件执行Init方法时)执行替换逻辑,包含以下下变量:
global
变量: 访问config.Properties的值,例如:${global.key}
vars
变量: 访问规则链vars值,例如:${vars.key}
全局变量: 所有组件配置字段都支持使用。
# 组件运行时变量
组件运行时变量: 在组件运行时(组件执行OnMsg方法时)执行替换逻辑,包含以下下变量:
id
变量: 访问消息IDts
变量: 访问消息时间戳data
变量: 访问消息原始内容msg
变量: 访问消息转换后的数据,如果消息的dataType是json类型,可以通过${msg.key}
方式访问msg的字段metadata
变量: 访问消息元数据。例如:${metadata.key}
msgType
变量: 访问消息类型dataType
变量: 访问数据类型nodeId
变量: v0.33.0+ 跨节点变量,访问指定节点的输出数据。例如:${node1.msg.temperature}
、${node1.metadata.deviceId}
、${node1.msgType}
等
组件运行时变量: 只有特定说明的组件配置字段才支持使用。
# 跨节点变量详细说明
跨节点变量允许在组件配置中访问规则链中任意已执行节点的输出数据,语法格式为:${nodeId.field}
支持的字段包括:
${nodeId.msg}
: 访问指定节点的消息内容${nodeId.msg.fieldName}
: 访问指定节点消息中的特定字段(当消息为JSON格式时)${nodeId.metadata}
: 访问指定节点的元数据${nodeId.metadata.key}
: 访问指定节点元数据中的特定键值${nodeId.msgType}
: 访问指定节点的消息类型${nodeId.dataType}
: 访问指定节点的数据类型${nodeId.id}
: 访问指定节点的消息ID${nodeId.ts}
: 访问指定节点的消息时间戳
注意: 跨节点变量需要目标节点已经执行完成并产生输出。规则链初始化时,如果检测到组件配置中使用了
${nodeId.xx.xx}
格式的跨节点变量,会自动建立相应的依赖关系以确保数据可用性。
# 示例
# 基础变量示例
{
"ruleChain": {
"id":"rule01",
"name": "test",
"configuration": {
"vars": {
"topicPrefix":"/device/msg"
}
}
},
"metadata": {
"nodes": [
{
"id": "s2",
"type": "mqttClient",
"name": "push data",
"configuration": {
"server": "${global.mqttServer}",
"topic": "${vars.topicPrefix}/${metadata.deviceId}"
}
}
],
"connections": [
{
}
]
}
}
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
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
# 跨节点变量示例
{
"ruleChain": {
"id": "rule02",
"name": "cross-node-example"
},
"metadata": {
"nodes": [
{
"id": "sensor1",
"type": "jsTransform",
"name": "传感器数据处理",
"configuration": {
"jsScript": "msg.temperature = 25.5; msg.humidity = 60; return {msg: msg, metadata: metadata, msgType: msgType};"
}
},
{
"id": "sensor2",
"type": "jsTransform",
"name": "另一个传感器",
"configuration": {
"jsScript": "msg.pressure = 1013.25; return {msg: msg, metadata: metadata, msgType: msgType};"
}
},
{
"id": "combiner",
"type": "jsTransform",
"name": "数据合并",
"configuration": {
"jsScript": "var combined = {temperature: ${sensor1.msg.temperature}, humidity: ${sensor1.msg.humidity}, pressure: ${sensor2.msg.pressure}, timestamp: ${sensor1.ts}}; return {msg: combined, metadata: metadata, msgType: msgType};"
}
},
{
"id": "logger",
"type": "log",
"name": "记录日志",
"configuration": {
"jsScript": "return 'Combined data - Temp: ${sensor1.msg.temperature}°C, Humidity: ${sensor1.msg.humidity}%, Pressure: ${sensor2.msg.pressure}hPa';"
}
}
],
"connections": [
{
"fromId": "sensor1",
"toId": "combiner",
"type": "Success"
},
{
"fromId": "sensor2",
"toId": "combiner",
"type": "Success"
},
{
"fromId": "combiner",
"toId": "logger",
"type": "Success"
}
]
}
}
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
在 GitHub 上编辑此页 (opens new window)
上次更新: 2025/09/02, 11:02:23