index.js
2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//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) {
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);
}