Initial commit
This commit is contained in:
commit
c53c7085bc
60 changed files with 23885 additions and 0 deletions
216
flow/davkovac.js
Normal file
216
flow/davkovac.js
Normal file
|
|
@ -0,0 +1,216 @@
|
|||
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 doesn’t 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();
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue