sokolov-sbs-flowserver/flow/davkovac.js
2025-08-07 21:49:01 +02:00

216 lines
6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

exports.id = 'davkovac';
exports.title = 'Davkovac';
exports.version = '1.0.0';
exports.group = 'Worksys';
exports.color = '#5CB36D';
exports.output = ["red", "white"];
exports.input = true;
exports.author = 'Rastislav Kovac';
exports.icon = 'poo';
exports.options = { ip: '0.0.0.0', port: 8421, edge: "M6ogKQW09bOXewAYvZyvkn5JrV1aRnPGE37p42Nx" };
exports.html = `<div class="padding">
<div class="row">
<div class="col-md-6">
<div data-jc="textbox" data-jc-path="ip" data-jc-config="placeholder:0.0.0.0;required:true" class="m">IP</div>
</div>
<div class="col-md-6">
<div data-jc="textbox" data-jc-path="port" data-jc-config="placeholder:8421;required:true" class="m">Port</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div data-jc="textbox" data-jc-path="edge" data-jc-config="placeholder:M6ogKQW09bOXewAYvZyvkn5JrV1aRnPGE37p42Nx;required:true" class="m">Edge TB Name</div>
</div>
</div>
</div>`;
exports.readme = `# Davkovac
Prijima tcp spravy od klienta a posiela na TB
- *Red* - ERROR output
- *White* - Transormed message output
`;
exports.install = function(instance) {
let net = require('net');
let server = null;
let myip = "0.0.0.0";
let myport = 8421;
let myedge = "M6ogKQW09bOXewAYvZyvkn5JrV1aRnPGE37p42Nx";
let dataToTb;
let ERRWEIGHT = {
EMERGENCY: "emergency", // System unusable
ALERT: "alert", // Action must be taken immidiately
CRITICAL: "critical", // Component unable to function
ERROR: "error", // Error, but component able to recover from it
WARNING: "warning", // Possibility of error, system running futher
NOTICE: "notice", // Significant message but not an error, things user might want to know about
INFO: "informational", // Info
DEBUG: "debug" // Debug - only if CONFIG.debug is enabled
}
setTimeout(function(){
if (server !== null){
if (server.listening){
instance.status("Listening", "green");
} else {
instance.status("Not listening", "red");
}
}
}, 10000);
function resetServer(){
sendError(myedge, "resetServer", ERRWEIGHT.DEBUG, "resetServer called !", {});
if (server !== null){
sendError(myedge, "resetServer", ERRWEIGHT.DEBUG, "Server already exists", {});
server.close(function(){
sendError(myedge, "resetServer", ERRWEIGHT.DEBUG, "Server closed intentionally", {});
server = null;
resetServer();
});
} else {
sendError(myedge, "resetServer", ERRWEIGHT.DEBUG, "Server doesnt exist", {});
server = net.createServer(socket => {
sendError(myedge, "resetServer", ERRWEIGHT.INFO, "New client connected !", {"ip":socket.localAddress, "port":socket.localPort});
socket.on("data", (data) => {
console.log('data ', {"ip":socket.localAddress,"port":socket.localPort,"data": data});
//let bufferL = Buffer.byteLength(data, "utf-8");
//data = JSON.stringify(data);
//console.log(data, "data");
//console.log(bufferL, "Bufferlength");
data = JSON.parse(JSON.stringify(data));
let value = data.data;
//console.log("value",value)
if (Array.isArray(value) && value.length == 18)
{
const first = value[0];
const last = value[value.length-1];
if (first == 2 && last ==3)
{
let part1 = String.fromCharCode(value[10]);
let part2 = String.fromCharCode(value[11]);
let part3 = String.fromCharCode(value[12]);
let part4 = String.fromCharCode(value[13]);
let part5 = String.fromCharCode(value[14]);
let result = part1 + part2 + part3 + part4 + part5
result = parseInt(result);
//send(0, typeof result)
//send(0, result)
dataToTb = {
"mp93b2nvd7OoqgBeEyE7N18kjlAV1Y4ZNXwW0zLG": [
{
"ts": Date.now(),
"values": {dispenser_count: result}
}
]
}
instance.send(1, dataToTb);
}
}
});
socket.on('end', () => {
sendError(myedge, "resetServer", ERRWEIGHT.INFO, "Client disconnected !", {"ip":socket.localAddress, "port":socket.localPort});
});
}).on('error', (err) => {
console.log("[Davkovac error- resetServer] - ", err);
});
server.listen(myport, myip);
}
};
instance.reconfigure = function() {
//code
myip = instance.options.ip;
myport = instance.options.port;
myedge = instance.options.edge;
setTimeout(resetServer, 5000);
};
instance.close = function() {
// close sockets and such
if (server !== null){
server.close(function(){});
}
};
function resetCounterToZero() {
server = net.createServer(socket => {
socket.write([2,78,49,50,51,52,53,54,55,56,70,51,3])
socket.on("data", data => {
console.log({"ip":socket.localAddress,"port":socket.localPort,"data": data});
socket.end();
});
}).on('error', (err) => {
console.log("[Davkovac error - resetCounterToZero] - ", err);
});
server.listen(myport, myip);
}
instance.on("data", function(flowdata) {
if(server)
{
server.close();
resetCounterToZero();
resetServer();
}
else
{
resetCounterToZero();
resetServer();
}
});
function sendError(device, func, weight, str, extra){
let content = {
"type": weight,
"status": "new",
"source": {
"function":func,
"component":instance.id,
"component_name":instance.name
},
"message":str,
"message_data": extra
};
let error = {};
error[device] = [
{
"ts": Date.now(),
"values": {
"_event":content
}
}
];
instance.send(0, error);
}
instance.on('options', instance.reconfigure);
instance.reconfigure();
};