ThingsKit平台接入有人物联M100网关
ThingsKit平台接入有人物联M100网关
ThingsKit平台接入有人物联M100网关
实现数据采集和存储,实现平台指令下发到网关子设备完成控制。
有人物联M100网关配置
数据推送报文
- 场景:网关对其接入的网关子设备完成数据采集后,以配置的数据格式通过mqtt推送到上级平台。
以照明设备4luzhaoming
为例,values
数组为网关子设备设置的点位名称。注意使用sys_unix_time
函数填充时间戳。
1
2
3
4
5
6
7
8
9
10
11
{
"4luzhaoming": [{
"ts": "sys_unix_time",
"values": {
"1kai": "1kai",
"2kai": "2kai",
"3kai": "3kai",
"4kai": "4kai"
}
}]
}
数据管道
配置例
- 上行数据推送:v1/gateway/telemetry
- 下行指令接收:v1/devices/me/rpc/request/+
ThingsKit平台配置
规则链(核心)
规则链定义了设备数据采集和指令下发的全流程。
数据采集
为Post telemetry
标签的上行数据流,指向到时序数据存储
,注意勾选使用服务器时间
。设备上报可能不带时间戳,会导致时序数据无法入库。
下行报文转换
平台侧下行报文
1
2
3
4
5
{
"method": "methodThingskit",
"params": "{\"2kai\":\"1\"}",
"additionalInfo": "{\"cmdType\":2}"
}
网关侧期望接收报文
1
2
3
4
5
6
7
8
9
10
11
{
"rw_prot": {
"ver": "1.0.1",
"dir": "down",
"id": "1",
"w_data": [{
"name": "1kai",
"value": "1"
}]
}
}
定义的报文转换js脚本。放置在RPC Request to Device
标签数据流和rpc调用请求
动作之间。
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
var msgKeys = Object.keys(msg);
var paramsKey = msgKeys[1];
var paramsValue = msg[paramsKey];
var paramsObj = JSON.parse(paramsValue);
var keys = Object.keys(paramsObj);
var firstKey = keys[0];
var firstValue = paramsObj[firstKey];
var result = {
"method": "methodThingskit",
"params": {
"rw_prot": {
"ver": "1.0.1",
"dir": "down",
"id": ""+Date.now(),
"w_data": [{
"name": firstKey,
"value": firstValue
}]
}
},
"additionalInfo": {"cmdType":2}
};
return {
"msg": result,
"metadata": metadata,
"msgType": msgType
};
配置规则链后,在设备物模型数据
界面的属性下发
填入数据即可完成数据下行。
附完整规则链定义
可直接导入
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
{
"ruleChain": {
"additionalInfo": {},
"name": "M100网关规则链",
"type": "CORE",
"firstRuleNodeId": {
"entityType": "RULE_NODE",
"id": "c505e6d0-9d9d-11f0-b2a4-e9ecbb952e5f"
},
"root": false,
"debugMode": true,
"configuration": null
},
"metadata": {
"firstNodeIndex": 0,
"nodes": [
{
"createdTime": 1759196138941,
"additionalInfo": {
"layoutX": 295,
"layoutY": 163
},
"type": "org.thingsboard.rule.engine.profile.TbDeviceProfileNode",
"name": "设备配置节点",
"debugMode": false,
"singletonMode": false,
"queueName": null,
"configurationVersion": 0,
"configuration": {
"persistAlarmRulesState": false,
"fetchAlarmRulesStateOnStart": false
},
"externalId": null
},
{
"createdTime": 1759196138942,
"additionalInfo": {
"layoutX": 275,
"layoutY": 327
},
"type": "org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode",
"name": "消息类型切换节点",
"debugMode": false,
"singletonMode": false,
"queueName": null,
"configurationVersion": 0,
"configuration": {},
"externalId": null
},
{
"createdTime": 1759196138943,
"additionalInfo": {
"layoutX": 519,
"layoutY": 451
},
"type": "org.thingsboard.rule.engine.transform.TbTransformMsgNode",
"name": "M100下行指令报文转换",
"debugMode": false,
"singletonMode": false,
"queueName": null,
"configurationVersion": 0,
"configuration": {
"jsScript": "var msgKeys = Object.keys(msg);\r\nvar paramsKey = msgKeys[1];\r\nvar paramsValue = msg[paramsKey];\r\n\r\nvar paramsObj = JSON.parse(paramsValue);\r\nvar keys = Object.keys(paramsObj);\r\nvar firstKey = keys[0];\r\nvar firstValue = paramsObj[firstKey];\r\nvar result = {\r\n\t\"method\": \"methodThingskit\",\r\n\t\"params\": {\r\n\t\t\"rw_prot\": {\r\n\t\t\t\"ver\": \"1.0.1\",\r\n\t\t\t\"dir\": \"down\",\r\n\t\t\t\"id\": \"\"+Date.now(),\r\n\t\t\t\"w_data\": [{\r\n\t\t\t\t\"name\": firstKey,\r\n\t\t\t\t\"value\": firstValue\r\n\t\t\t}]\r\n\t\t}\r\n\t},\r\n\t\"additionalInfo\": {\"cmdType\":2}\r\n};\r\n\r\nreturn {\r\n \"msg\": result,\r\n \"metadata\": metadata,\r\n \"msgType\": msgType\r\n};",
"tbelScript": "return {msg: msg, metadata: metadata, msgType: msgType};",
"scriptLang": "JS"
},
"externalId": null
},
{
"createdTime": 1759196138945,
"additionalInfo": {
"layoutX": 567,
"layoutY": 572
},
"type": "org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode",
"name": "指令下发",
"debugMode": false,
"singletonMode": false,
"queueName": null,
"configurationVersion": 0,
"configuration": {
"timeoutInSeconds": 10
},
"externalId": null
},
{
"createdTime": 1759196138946,
"additionalInfo": {
"layoutX": 312,
"layoutY": 571
},
"type": "org.thingsboard.rule.engine.action.TbLogNode",
"name": "下发指令报文转换失败日志输出",
"debugMode": false,
"singletonMode": false,
"queueName": null,
"configurationVersion": 0,
"configuration": {
"scriptLang": "JS",
"jsScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);",
"tbelScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"
},
"externalId": null
},
{
"createdTime": 1759196293130,
"additionalInfo": {
"layoutX": 910,
"layoutY": 163
},
"type": "org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode",
"name": "网关上报数据存储",
"debugMode": true,
"singletonMode": false,
"queueName": null,
"configurationVersion": 0,
"configuration": {
"defaultTTL": 10,
"skipLatestPersistence": false,
"useServerTs": true
},
"externalId": null
}
],
"connections": [
{
"fromIndex": 0,
"toIndex": 1,
"type": "Success"
},
{
"fromIndex": 1,
"toIndex": 2,
"type": "RPC Request to Device"
},
{
"fromIndex": 1,
"toIndex": 5,
"type": "Post telemetry"
},
{
"fromIndex": 2,
"toIndex": 3,
"type": "Success"
},
{
"fromIndex": 2,
"toIndex": 4,
"type": "Failure"
}
],
"ruleChainConnections": null
}
}
产品定义
- 对M100网关,定义为网关设备,指定规则链。
- 对网关下接入的各种型号设备,定义为不同的网关子设备,指定规则链,并设置对应物模型。
父子层级关联配置:需要待子设备接入平台后,才能编辑和变更从属网关的关系。
注意事项
规则链生效后,会影响手动命令下发
,本该传递的原始数据也会经过规则链和报文转换脚本处理,导致网关收到的数据非预期。
本文由作者按照 CC BY 4.0 进行授权