node-red-contrib-example-scada 1.0.2 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/package.json +11 -9
  2. package/scada.html +97 -27
  3. package/scada.js +63 -24
package/package.json CHANGED
@@ -1,17 +1,19 @@
1
1
  {
2
2
  "name": "node-red-contrib-example-scada",
3
- "version": "1.0.2",
3
+ "node-red": {
4
+ "nodes": {
5
+ "scada": "scada.js"
6
+ }
7
+ },
8
+ "version": "1.0.5",
4
9
  "description": "",
5
10
  "main": "scada.js",
6
11
  "scripts": {
7
12
  "test": "echo \"Error: no test specified\" && exit 1"
8
13
  },
9
- "node-red" : {
10
- "nodes": {
11
- "scada": "scada.js"
12
- }
13
- },
14
14
  "author": "",
15
- "license": "ISC"
16
-
17
- }
15
+ "license": "ISC",
16
+ "dependencies": {
17
+ "axios": "^1.7.9"
18
+ }
19
+ }
package/scada.html CHANGED
@@ -3,19 +3,42 @@
3
3
  category: 'scada',
4
4
  color: '#a6bbcf',
5
5
  defaults: {
6
- broker: {type:"http-broker", required:true},
7
- name: { value: "" },
8
- id: { value: "", required: true },
9
- WriteType: { value: "", required: true },
10
- WriteDevCode: { value: "", required: true },
11
- WriteCommand: { value: "" , required: true},
12
- Value: { value: "", required: true },
13
- ValueType: { value: "Short" , required: true},
6
+ broker: {
7
+ type: "http-broker",
8
+ required: true
9
+ },
10
+ name: {
11
+ value: ""
12
+ },
13
+ id: {
14
+ value: "",
15
+ required: true
16
+ },
17
+ WriteType: {
18
+ value: "",
19
+ required: true
20
+ },
21
+ WriteDevCode: {
22
+ value: "",
23
+ required: true
24
+ },
25
+ WriteCommand: {
26
+ value: "",
27
+ required: true
28
+ },
29
+ Value: {
30
+ value: "",
31
+ required: true
32
+ },
33
+ ValueType: {
34
+ value: "Short",
35
+ required: true
36
+ },
14
37
 
15
38
  },
16
- inputs: 1, // 一个输入端口
17
- outputs: 1, // 一个输出端口
18
- icon: 'file.png', // 节点图标
39
+ inputs: 1, // 一个输入端口
40
+ outputs: 1, // 一个输出端口
41
+ icon: 'file.png', // 节点图标
19
42
  label: function() {
20
43
  return this.name || "设备标签写入";
21
44
  },
@@ -24,33 +47,67 @@
24
47
  });
25
48
 
26
49
 
27
- RED.nodes.registerType('http-broker',{
50
+ RED.nodes.registerType('http-broker', {
28
51
  category: 'config',
29
52
  defaults: {
30
- host: {value:"localhost",required:true},
31
- port: {value:1234,required:true,validate:RED.validators.number()},
53
+ host: {
54
+ value: "localhost",
55
+ required: true
56
+ },
57
+ port: {
58
+ value: 1234,
59
+ required: true,
60
+ validate: RED.validators.number()
61
+ },
32
62
  },
33
63
  label: function() {
34
- return this.host+":"+this.port;
64
+ return this.host + ":" + this.port;
35
65
  }
36
66
  });
37
67
 
38
68
  RED.nodes.registerType('获取单个设备采集值', {
39
- category: 'scada', // 节点类别
40
- color: '#a6bbcf', // 节点颜色
69
+ category: 'scada', // 节点类别
70
+ color: '#a6bbcf', // 节点颜色
41
71
  defaults: {
42
- broker: {type:"http-broker", required:true},
43
- name: { value: '' }, // 节点名称
44
- deviceCode: { value: '' } // 用户输入的 deviceCode
72
+ broker: {
73
+ type: "http-broker",
74
+ required: true
75
+ },
76
+ name: {
77
+ value: ''
78
+ }, // 节点名称
79
+ deviceCode: {
80
+ value: ''
81
+ } // 用户输入的 deviceCode
45
82
  },
46
- inputs: 1, // 一个输入端口
47
- outputs: 1, // 一个输出端口
48
- icon: 'file.png', // 节点图标
49
- label: function() { // 标签显示
50
- return this.name || '获取单个设备采集值'; // 如果有名称,则显示名称,否则显示默认名称
83
+ inputs: 1, // 一个输入端口
84
+ outputs: 1, // 一个输出端口
85
+ icon: 'file.png', // 节点图标
86
+ label: function() { // 标签显示
87
+ return this.name || '获取单个设备采集值'; // 如果有名称,则显示名称,否则显示默认名称
51
88
  }
52
89
  });
53
90
 
91
+ RED.nodes.registerType('获取系统状态', {
92
+ category: 'scada', // 节点类别
93
+ color: '#a6bbcf', // 节点颜色
94
+ defaults: {
95
+ broker: {
96
+ type: "http-broker",
97
+ required: true
98
+ },
99
+ name: {
100
+ value: ''
101
+ }, // 节点名称
102
+
103
+ },
104
+ inputs: 1, // 一个输入端口
105
+ outputs: 1, // 一个输出端口
106
+ icon: 'file.png', // 节点图标
107
+ label: function() { // 标签显示
108
+ return this.name || '获取系统状态'; // 如果有名称,则显示名称,否则显示默认名称
109
+ }
110
+ });
54
111
  </script>
55
112
 
56
113
  <script type="text/html" data-template-name="设备标签写入">
@@ -71,7 +128,7 @@
71
128
 
72
129
  <div class="form-row">
73
130
  <label for="node-input-id"><i class="fa fa-tag"></i> ID格式:</label>
74
- <select id="node-input-id" class="node-input" >
131
+ <select id="node-input-id" class="node-input">
75
132
  <option value="YYYYMMDD">YYYYMMDD</option>
76
133
  <option value="HHmmss">HHmmss</option>
77
134
  <option value="YYYYMMDDHHmmss">YYYYMMDDHHmmss</option>
@@ -80,7 +137,7 @@
80
137
 
81
138
  <div class="form-row">
82
139
  <label for="node-input-WriteType"><i class="fa fa-tag"></i> ID格式:</label>
83
- <select id="node-input-WriteType" class="node-input" >
140
+ <select id="node-input-WriteType" class="node-input">
84
141
  <option value="1">标签写入</option>
85
142
  <option value="2">地址写入</option>
86
143
  </select>
@@ -130,4 +187,17 @@
130
187
  <label for="node-input-deviceCode"><i class="fa fa-cogs"></i> 设备号</label>
131
188
  <input type="text" id="node-input-deviceCode" placeholder="Enter Device Code" class="node-input">
132
189
  </div>
190
+ </script>
191
+
192
+
193
+ <script type="text/html" data-template-name="获取系统状态">
194
+ <div class="form-row">
195
+ <label for="node-input-broker"><i class="fa fa-globe"></i> 服务器</span></label>
196
+ <input type="text" id="node-input-broker">
197
+ </div>
198
+ <div class="form-row">
199
+ <label for="node-input-name"><i class="fa fa-tag"></i> 名称</label>
200
+ <input type="text" id="node-input-name" placeholder="Node Name" class="node-input">
201
+ </div>
202
+
133
203
  </script>
package/scada.js CHANGED
@@ -1,9 +1,9 @@
1
-
2
1
  module.exports = function(RED) {
3
2
 
4
3
  //设备标签写入配置
5
4
  // 创建请求
6
5
  const axios = require('axios');
6
+
7
7
  function WriteDeviceConfigNode(config) {
8
8
  RED.nodes.createNode(this, config);
9
9
  var node = this;
@@ -33,7 +33,7 @@ module.exports = function(RED) {
33
33
 
34
34
  // 处理输入消息
35
35
  this.on('input', function(msg) {
36
- var id1 = msg.id || config.id;
36
+ var id1 = msg.id || config.id;
37
37
  var id = getCurrentFormattedDate(id1);
38
38
  var WriteType = msg.WriteType || config.WriteType;
39
39
  var WriteDevCode = msg.WriteDevCode || config.WriteDevCode;
@@ -53,20 +53,20 @@ module.exports = function(RED) {
53
53
 
54
54
 
55
55
  // 设置 API 请求的 URL
56
- var broker = RED.nodes.getNode(config.broker);
56
+ var broker = RED.nodes.getNode(config.broker);
57
57
  const url = "http://" + broker.host + ":" + broker.port + "/api/ScadaConfig/WriteDevices";
58
58
  axios.post(url, payload)
59
59
  .then(response => {
60
- if(response.data.code == 200){
60
+ if (response.data.code == 200) {
61
61
  msg.payload = response.data;
62
62
  node.send(msg);
63
63
  node.status({ fill: "green", shape: "dot", text: "Success" });
64
64
 
65
- }else {
65
+ } else {
66
66
  node.error("Request failed: " + response.data.message);
67
- node.status({fill: "red", shape: "ring", text: "Error"});
67
+ node.status({ fill: "red", shape: "ring", text: "Error" });
68
68
  }
69
- })
69
+ })
70
70
  .catch(error => {
71
71
  // 请求失败,记录错误
72
72
  node.error("Request failed: " + error.message, msg);
@@ -80,21 +80,17 @@ module.exports = function(RED) {
80
80
  RED.nodes.registerType('设备标签写入', WriteDeviceConfigNode);
81
81
 
82
82
 
83
-
84
-
85
-
86
-
87
-
88
- //http-broker配置
83
+ //http-broker配置
89
84
  function RemoteServerNode(n) {
90
- RED.nodes.createNode(this,n);
85
+ RED.nodes.createNode(this, n);
91
86
  this.host = n.host;
92
87
  this.port = n.port;
93
88
  }
94
- RED.nodes.registerType("http-broker",RemoteServerNode);
95
89
 
96
- //获取单个设备采集值配置
97
- function MyHttpNode(config) {
90
+ RED.nodes.registerType("http-broker", RemoteServerNode);
91
+
92
+ //获取单个设备采集值配置
93
+ function GetDevice(config) {
98
94
  RED.nodes.createNode(this, config);
99
95
  var node = this;
100
96
 
@@ -103,7 +99,7 @@ module.exports = function(RED) {
103
99
 
104
100
 
105
101
  // 设置 API 请求的 URL
106
- var broker = RED.nodes.getNode(config.broker);
102
+ var broker = RED.nodes.getNode(config.broker);
107
103
  var baseURL = "http://" + broker.host + ":" + broker.port + '/api/ScadaConfig/GetDevice?deviceCode={{deviceCode}}';
108
104
 
109
105
  // 从消息中获取 deviceCode 或从节点配置中获取
@@ -121,14 +117,14 @@ module.exports = function(RED) {
121
117
  // 使用 axios 发送 GET 请求
122
118
  axios.get(url)
123
119
  .then(response => {
124
- if(response.data.code == 200 && response.data.msg != "null"){
120
+ if (response.data.code == 200 && response.data.msg != "null") {
125
121
  msg.payload = response.data;
126
122
  node.send(msg);
127
123
  node.status({ fill: "green", shape: "dot", text: "Success" });
128
124
 
129
- }else {
130
- node.error("Request failed: 找不到该设备" );
131
- node.status({fill: "red", shape: "ring", text: "Error"});
125
+ } else {
126
+ node.error("Request failed: 找不到该设备");
127
+ node.status({ fill: "red", shape: "ring", text: "Error" });
132
128
  }
133
129
  })
134
130
  .catch(error => {
@@ -144,7 +140,50 @@ module.exports = function(RED) {
144
140
  }
145
141
 
146
142
  // 注册自定义节点
147
- RED.nodes.registerType("获取单个设备采集值", MyHttpNode);
143
+ RED.nodes.registerType("获取单个设备采集值", GetDevice);
144
+
145
+
146
+
147
+
148
+ //获取系统状态
149
+ function GetSystemInfo(config) {
150
+ RED.nodes.createNode(this, config);
151
+ var node = this;
152
+
153
+ // 每次接收到消息时处理
154
+ this.on('input', function(msg) {
155
+
156
+
157
+ // 设置 API 请求的 URL
158
+ var broker = RED.nodes.getNode(config.broker);
159
+ var baseURL = "http://" + broker.host + ":" + broker.port + '/api/ScadaSystem/GetSystemInfo';
160
+
148
161
 
149
- };
162
+ // 使用 axios 发送 GET 请求
163
+ axios.get(url)
164
+ .then(response => {
165
+ if (response.data.code == 200 && response.data.msg != "null") {
166
+ msg.payload = response.data;
167
+ node.send(msg);
168
+ node.status({ fill: "green", shape: "dot", text: "Success" });
169
+
170
+ } else {
171
+ node.status({ fill: "red", shape: "ring", text: "Error" });
172
+ }
173
+ })
174
+ .catch(error => {
175
+ // 请求失败,记录错误并将错误信息传递到下游节点
176
+ node.error("Request failed: " + error.message, msg);
177
+ msg.payload = { error: error.message };
178
+ node.status({ fill: "red", shape: "ring", text: "Error" });
179
+ });
180
+ });
181
+
182
+
183
+
184
+ }
185
+
186
+ // 注册自定义节点
187
+ RED.nodes.registerType("获取系统状态", GetSystemInfo);
150
188
 
189
+ };