From 0469f678c5687d9a6f91d2cb363578cc72000f58 Mon Sep 17 00:00:00 2001
From: "p.vanderwilt"
Date: Tue, 17 Jun 2025 13:00:18 +0200
Subject: [PATCH] Add settling basin node, fixed issue with object assignment
---
additional_nodes/recirculation-pump.html | 4 +-
additional_nodes/recirculation-pump.js | 4 +-
additional_nodes/settling-basin.html | 57 ++++++++++++++++++++++++
additional_nodes/settling-basin.js | 53 ++++++++++++++++++++++
package.json | 3 +-
5 files changed, 116 insertions(+), 5 deletions(-)
create mode 100644 additional_nodes/settling-basin.html
create mode 100644 additional_nodes/settling-basin.js
diff --git a/additional_nodes/recirculation-pump.html b/additional_nodes/recirculation-pump.html
index 2027a17..52f94a6 100644
--- a/additional_nodes/recirculation-pump.html
+++ b/additional_nodes/recirculation-pump.html
@@ -26,11 +26,11 @@
},
oneditsave: function() {
let debit = parseFloat($("#node-input-F2").typedInput("value"));
- if (isNaN(volume) || debit < 0) {
+ if (isNaN(debit) || debit < 0) {
RED.notify("Debit is not set correctly", {type: "error"});
}
let inlet = parseInt($("#node-input-n_inlets").typedInput("value"));
- if (isNaN(inlet) || inlet < 1) {
+ if (inlet < 1) {
RED.notify("Number of inlets not set correctly", {type: "error"});
}
}
diff --git a/additional_nodes/recirculation-pump.js b/additional_nodes/recirculation-pump.js
index 472c7cc..489df01 100644
--- a/additional_nodes/recirculation-pump.js
+++ b/additional_nodes/recirculation-pump.js
@@ -15,10 +15,10 @@ module.exports = function(RED) {
let F_diff = Math.max(F1 - F2, 0);
let F2_corr = F1 < F2 ? F1 : F2;
- let msg_F1 = {...msg};
+ let msg_F1 = structuredClone(msg);
msg_F1.payload.F = F_diff;
- let msg_F2 = structuredClone(msg);
+ let msg_F2 = {...msg};
msg_F2.payload.F = F2_corr;
msg_F2.payload.inlet = inlet_F2;
diff --git a/additional_nodes/settling-basin.html b/additional_nodes/settling-basin.html
new file mode 100644
index 0000000..da614bc
--- /dev/null
+++ b/additional_nodes/settling-basin.html
@@ -0,0 +1,57 @@
+
+
+
+
+
diff --git a/additional_nodes/settling-basin.js b/additional_nodes/settling-basin.js
new file mode 100644
index 0000000..f012b81
--- /dev/null
+++ b/additional_nodes/settling-basin.js
@@ -0,0 +1,53 @@
+module.exports = function(RED) {
+ function settler(config) {
+ RED.nodes.createNode(this, config);
+ var node = this;
+
+ let name = config.name;
+ let SVI = parseFloat(config.SVI);
+ const inlet_sludge = parseInt(config.inlet);
+
+ node.on('input', function(msg, send, done) {
+ switch (msg.topic) {
+ case "Fluent":
+ // conserve volume flow debit
+ let F_in = msg.payload.F;
+ let C_in = msg.payload.C;
+ let X_in = (C_in[7] + C_in[8] + C_in[9] + C_in[10] + C_in[11] + C_in[12]);
+ let F2 = (F_in * X_in) / (SVI*1000*1000);
+
+ let msg_F1 = structuredClone(msg);
+ msg_F1.payload.F = F_in - F2;
+ msg_F1.payload.C[7] = 0;
+ msg_F1.payload.C[8] = 0;
+ msg_F1.payload.C[9] = 0;
+ msg_F1.payload.C[10] = 0;
+ msg_F1.payload.C[11] = 0;
+ msg_F1.payload.C[12] = 0;
+
+ let msg_F2 = {...msg};
+ msg_F2.payload.F = F2;
+ if (F2 != 0) {
+ msg_F2.payload.C[7] = F_in * C_in[7] / F2;
+ msg_F2.payload.C[8] = F_in * C_in[8] / F2;
+ msg_F2.payload.C[9] = F_in * C_in[9] / F2;
+ msg_F2.payload.C[10] = F_in * C_in[10] / F2;
+ msg_F2.payload.C[11] = F_in * C_in[11] / F2;
+ msg_F2.payload.C[12] = F_in * C_in[12] / F2;
+ }
+ msg_F2.payload.inlet = inlet_sludge;
+
+ send([msg_F1, msg_F2]);
+ break;
+ default:
+ console.log("Unknown topic: " + msg.topic);
+ }
+
+ if (done) {
+ done();
+ }
+ });
+
+ }
+ RED.nodes.registerType("settling-basin", settler);
+};
diff --git a/package.json b/package.json
index 59c69a7..e60fa97 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,8 @@
"node-red": {
"nodes": {
"advanced-reactor": "advanced-reactor.js",
- "recirculation-pump": "additional_nodes/recirculation-pump.js"
+ "recirculation-pump": "additional_nodes/recirculation-pump.js",
+ "settling-basin": "additional_nodes/settling-basin.js"
}
},
"dependencies": {