UNPKG

node-red-contrib-services-mentor

Version:

Mentor Services

148 lines (117 loc) 5.06 kB
var mysql = require('mysql'); var DB = require('./base.js'); var mysql_login_details = { connectionLimit: 10, host: '', port: '', user: '', password: '', database: '' }; module.exports = function(RED) { var log = RED.log; function Node(config) { RED.nodes.createNode(this, config); var node = this; this.mentor = RED.nodes.getNode(config.mentor); this.mysql = RED.nodes.getNode(config.mysql); this.mqtt = RED.nodes.getNode(config.mqtt); mysql_login_details.host = this.mysql.host; mysql_login_details.port = this.mysql.port; mysql_login_details.user = this.mysql.credentials.user; mysql_login_details.password = this.mysql.credentials.password; mysql_login_details.database = this.mysql.dbname; var pool = mysql.createPool(mysql_login_details); this.on('input', (msg) => { handleMsg(RED, node, msg, pool) }); } async function updateData(pool, connection, node, maxtime, msg) { pool.query("SELECT device, time, content from mqtt_lecturas Where time*1 = " + maxtime +" And device ='" + msg.device +"'", function (err, _rows, fields) { if (err) { log.error(err); connection.release(); node.send(err); } else if (_rows.length > 0) { var _msg = {payload:{}}; _msg.payload.time = msg.time; _msg.payload.code = msg.device; var content = JSON.parse(_rows[0].content); content.time = msg.time; _msg.payload.content = JSON.stringify(content); //---------------------------------------------------------------------------------------- pool.query("Update mqtt_lecturas Set restful_tries = 99, content = '"+_msg.payload.content+"' Where device='"+msg.device+"' And time*1="+msg.time, function (err, r, fields) { if (err) { log.error(err); connection.release(); node.send(err);} else { this.status({fill:"green",shape:"dot",text:"Updated" + " Time:" + msg.time + " Device:" + msg.device}); } }); } else { //------------------------------------------------------------------------------------- pool.query("Delete FROM mqtt_lecturas Where device='"+msg.device+"' And time*1="+msg.time, function (r, err) { if (err) { log.error(err); node.send(err);} else { log.error("Fixed & Deleted"); } }); } }); } async function processData(pool, connection, node, msg) { //Obtener Fecha de De data válida pool.query("SELECT MAX(time) as max_time, device from mqtt_lecturas Where time*1 < " + msg.time +" And device ='" + msg.device+"' And INSTR(content, 'Timeout') = 0", function (err, __rows, fields) { if (err) { log.error(err); connection.release(); node.send(err);} else if(__rows.length > 0) { //------------------------------------------------------------------------------------------- // Obtener el Contenio de la Data updateData(pool, connection, node, __rows[0].max_time, msg); } }); } function handleMsg(RED, node, msg, pool) { pool.getConnection(function (err, connection) { if (err) { // connection.release(); log.error(err); return; } pool.query("Update mqtt_lecturas Set content= REPLACE(content, 'NaN', '0.00') Where INSTR(content, 'NaN') > 0", function (err, r, fields) { if (err) { log.error(err); connection.release(); node.send(err);} else { this.status({fill:"green",shape:"dot",text:"Updated NaN values, "+ result.affectedRows + " record(s) affected"}); } }); // Obtains records with errors. pool.query("SELECT t1.device, t1.time, t1.content, t1.restful FROM mqtt_lecturas t1 JOIN ( SELECT MIN(TIME) AS min_value, device FROM mqtt_lecturas WHERE INSTR(content, 'Timeout') >0 GROUP BY device ) AS t2 ON t1.device = t2.device AND t1.time = t2.min_value WHERE INSTR(content, 'Timeout') >0", function (err, rows, fields) { if (err) { log.error(err); connection.release(); node.send(err);} else { //log.error("Found " + rows.length + " records..."); for (var item in rows) { var _msg = {}; _msg.device = rows[item].device; _msg.time = rows[item].time; //-------------------------------------------------------------------------------------------- processData(pool, connection, node, _msg ); //break; } } connection.release(); } ) }) } RED.nodes.registerType("Repairer", Node); }