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 = `
IP
Port
Edge TB Name
`; 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(); };