Restore diffuser in three-layer architecture
This commit is contained in:
171
diffuser.js
171
diffuser.js
@@ -1,162 +1,9 @@
|
||||
module.exports = function (RED) {
|
||||
function diffuser(config) {
|
||||
//create node
|
||||
RED.nodes.createNode(this, config);
|
||||
|
||||
//call this => node so whenver you want to call a node function type node and the function behind it
|
||||
var node = this;
|
||||
|
||||
//fetch class
|
||||
var Diffuser = require("./dependencies/diffuser_class");
|
||||
|
||||
//make new class on creation to work with.
|
||||
var diffuser = new Diffuser();
|
||||
|
||||
//fetch name from node into the measurement code
|
||||
diffuser.name = config.name;
|
||||
diffuser.number = config.number;
|
||||
diffuser.id = diffuser.name+diffuser.number;
|
||||
diffuser.i_n_elements = config.i_elements;
|
||||
diffuser.i_diff_density = Number(config.i_diff_density);
|
||||
diffuser.i_m_water = config.i_m_water;
|
||||
|
||||
// create internal vars
|
||||
this.interval_id = null;
|
||||
let internalTickRate = 1;
|
||||
function update_node_state() {
|
||||
//alarm has prio over warning so comes first in the if else statement
|
||||
if (diffuser.alarm.state == true) {
|
||||
//display status
|
||||
node.status({ fill: "red", shape: "dot", text: diffuser.alarm.text[0] });
|
||||
}
|
||||
else if(diffuser.warning.state == true ){
|
||||
//display status
|
||||
node.status({ fill: "yellow", shape: "dot", text: diffuser.warning.text[0] });
|
||||
}
|
||||
else if(diffuser.idle == true){
|
||||
node.status({ fill: "gray", shape: "dot", text: diffuser.o_kgo2_h + " Kg o2 / h"});
|
||||
}
|
||||
else{
|
||||
node.status({fill: "green", shape: "dot", text: diffuser.o_kgo2_h + " Kg o2 / h"});
|
||||
}
|
||||
}
|
||||
|
||||
//update on creation
|
||||
update_node_state();
|
||||
|
||||
function send_output(){
|
||||
|
||||
//define empty msgs
|
||||
let msgs = [];
|
||||
|
||||
let dynList = {
|
||||
iPressure: diffuser.i_pressure,
|
||||
iMWater: diffuser.i_m_water,
|
||||
iFlow: diffuser.i_flow,
|
||||
nFlow: diffuser.n_flow,
|
||||
oOtr: diffuser.o_otr,
|
||||
oPLoss: diffuser.o_p_total,
|
||||
oKgo2H: diffuser.o_kgo2_h,
|
||||
oFlowElement: diffuser.o_flow_element,
|
||||
efficiency: diffuser.o_combined_eff,
|
||||
//threshold: diffuser.threshold //EXPERIMENTAL!
|
||||
}
|
||||
|
||||
let specList = {
|
||||
name: diffuser.name,
|
||||
number: diffuser.number,
|
||||
//supplier: diffuser.supplier,
|
||||
//type: diffuser.type,
|
||||
density: diffuser.i_diff_density,
|
||||
nElements: diffuser.i_n_elements,
|
||||
alfaF: diffuser.i_alfa_factor
|
||||
}
|
||||
|
||||
msgs[0] = {topic: "kgo2/h" , payload: {kgo2h: diffuser.o_kgo2_h , tot_p_loss : diffuser.o_p_total} ,id: diffuser.id };
|
||||
msgs[1] = {topic: "object", payload : diffuser};
|
||||
msgs[2] = {
|
||||
topic:"outputdbase",
|
||||
payload:[
|
||||
|
||||
{
|
||||
measurement: diffuser.name+diffuser.number,
|
||||
fields : dynList,
|
||||
tags: {
|
||||
group: "values",
|
||||
},
|
||||
timestamp: new Date()
|
||||
},
|
||||
{
|
||||
measurement: diffuser.name+diffuser.number,
|
||||
fields : specList,
|
||||
tags: {
|
||||
group: "specs",
|
||||
},
|
||||
timestamp: new Date()
|
||||
},
|
||||
]
|
||||
} // output to broker
|
||||
|
||||
//send outputs
|
||||
node.send(msgs);
|
||||
}
|
||||
|
||||
//never ending functions
|
||||
function tick(){
|
||||
update_node_state();
|
||||
send_output();
|
||||
|
||||
}
|
||||
|
||||
// register child on first output this timeout is needed because of node - red stuff
|
||||
setTimeout(
|
||||
() => {
|
||||
|
||||
/*---execute code on first start----*/
|
||||
let msgs = [];
|
||||
msgs[3] = { topic : "registerChild" , payload: diffuser };
|
||||
//send msg
|
||||
this.send(msgs);
|
||||
},
|
||||
100
|
||||
);
|
||||
|
||||
//declare refresh interval internal node
|
||||
setTimeout(
|
||||
() => {
|
||||
/*---execute code on first start----*/
|
||||
this.interval_id = setInterval(function(){ tick() },(internalTickRate * 1000))
|
||||
},
|
||||
1000
|
||||
);
|
||||
|
||||
|
||||
//-------------------------------------------------------------------->>what to do on input
|
||||
node.on("input", function (msg,send,done) {
|
||||
|
||||
//change density of diffusers
|
||||
if(msg.topic == "density"){
|
||||
diffuser.i_diff_density = Number(msg.payload);
|
||||
}
|
||||
|
||||
//change input flow
|
||||
if(msg.topic == "air_flow"){
|
||||
diffuser.i_flow = Number(msg.payload);
|
||||
}
|
||||
|
||||
//change water height
|
||||
if(msg.topic == "height_water"){
|
||||
diffuser.i_m_water = Number(msg.payload);
|
||||
}
|
||||
|
||||
done();
|
||||
|
||||
});
|
||||
|
||||
// tidy up any async code here - shutdown connections and so on.
|
||||
node.on('close', function() {
|
||||
clearTimeout(this.interval_id);
|
||||
});
|
||||
}
|
||||
RED.nodes.registerType("diffuser", diffuser);
|
||||
};
|
||||
const nameOfNode = 'diffuser';
|
||||
const nodeClass = require('./src/nodeClass.js');
|
||||
|
||||
module.exports = function(RED) {
|
||||
RED.nodes.registerType(nameOfNode, function(config) {
|
||||
RED.nodes.createNode(this, config);
|
||||
this.nodeClass = new nodeClass(config, RED, this, nameOfNode);
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user