//express const express = require('express'); const app = express(); const config = require('./config/config.json'); const socket = require('./socket/socket.js'); const port = config.servidorveeder.port; const host = config.servidorveeder.direccion; var fecha; app.listen(config.servidornode.port); app.get('/tank-info/:tank*?', function (req, res) { console.log('Se realiza consulta de tankes, ' + req.ip); socket.initConection(port, host); var numberTank = req.params.tank ? req.params.tank : '00'; socket.getTank('i201' + numberTank).then(function (response) { //obtengo una cadena de caracteres, los primeros 17 datos son de informacion de tanque // e información de la fecha fecha = response.slice(7, 17); var dataTanks = getJson(response.slice(17, response.length)); res.status(200).send(dataTanks); socket.end(); }); }); function getJson(tanks) { var json = { tanques: [] }; var arraysTanks = []; while (tanks.length > 10) { var stringTank = tanks.slice(0, 9); var cantOfProperties = stringTank.length + (parseInt(tanks.slice(7, 9)) * 8); stringTank += tanks.slice(9, cantOfProperties) arraysTanks.push(stringTank); tanks = tanks.slice(stringTank.length, tanks.length); } arraysTanks.forEach(function (tank) { var objTank = { tank: tank.slice(0, 2), fecha: fecha, product: tank.slice(2, 3), deliveryProgress: tank.slice(3, 4), testProgress: tank.slice(4, 5), alarm: tank.slice(5, 6), volume: getValue(tank.slice(9, 17)), tCVolume: getValue(tank.slice(17, 25)), ullage: getValue(tank.slice(25, 33)), altura: getValue(tank.slice(33, 41)), agua: getValue(tank.slice(41, 49)), temperatura: getValue(tank.slice(49, 57)), alturaAgua: getValue(tank.slice(57, 65)), } json.tanques.push(objTank); }); json.cantidadTanques = json.tanques.length; return json; } function getValue(property) { var binary = parseInt(property, 16).toString(2); if (binary.length < 32) { var difence = 32 - binary.length; var ceros = ''; for (let i = 0; i < difence; i++) { ceros += '0'; } binary = ceros + binary; } var e = parseInt(binary.slice(1, 9), 2).toString(10); var m = parseInt(binary.slice(9), 2).toString(10); var exponent = 2 ** (e - 127); if(parseInt(binary.slice(0, 1))) exponent = exponent * -1; var mantissa = 1.0 + (m / 8388608); return parseFloat(exponent * mantissa).toFixed(2); }