index.js 2.67 KB
//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);
}