-
Notifications
You must be signed in to change notification settings - Fork 2
/
tarifbleu.js
90 lines (81 loc) · 2.24 KB
/
tarifbleu.js
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
var cronJob = require('cron').CronJob;
var teleinfo = require('teleinfo');
var util = require('util');
var infosCompteur = {};
function tarifbleu(port, cronTime, datalogger, errorcb) {
var trameEvents = teleinfo(port);
razinfosCompteur();
trameEvents.on('tramedecodee', function (data) {
majData(data);
});
trameEvents.on('error', function(err) {
if (typeof errorcb === 'function') {
errorcb(err);
}
else {
console.log(err);
}
});
var job = new cronJob(cronTime, function(){
// Fonction exécutée toutes les minutes
if (typeof datalogger === 'function') {
// Suppression propriétés internes
delete infosCompteur.psum;
delete infosCompteur.isum;
delete infosCompteur.nbMesure;
datalogger(infosCompteur);
}
else {
console.log(util.inspect(infosCompteur));
}
// Raz moyenne
razinfosCompteur();
}, function () {
// Fonction exécutée lorsque le job s'arrête
console.log('Job stoppé');
},
true
);
return {
getPuissanceApparente: function() {return infosCompteur.pinst},
getIntensite: function() {return infosCompteur.iinst},
getIndex: function() {return infosCompteur.index}
}
}
function razinfosCompteur() {
infosCompteur.imini = 30; // max de la souscription
infosCompteur.imaxi= 0;
infosCompteur.imoy= 0;
infosCompteur.isum= 0;
infosCompteur.pmini= 8000; // max la souscription
infosCompteur.pmaxi= 0;
infosCompteur.pmoy= 0;
infosCompteur.psum= 0;
infosCompteur.nbMesure= 0;
}
function majData(data) {
infosCompteur.nbMesure += 1;
if (data.IINST<infosCompteur.imini) {
infosCompteur.imini = data.IINST;
}
if (data.IINST>infosCompteur.imaxi) {
infosCompteur.imaxi = data.IINST;
}
infosCompteur.isum += data.IINST;
infosCompteur.imoy = infosCompteur.isum / infosCompteur.nbMesure;
if (data.PAPP<infosCompteur.pmini) {
infosCompteur.pmini = data.PAPP;
}
if (data.PAPP>infosCompteur.pmaxi) {
infosCompteur.pmaxi = data.PAPP;
}
infosCompteur.psum += data.PAPP;
infosCompteur.pmoy = infosCompteur.psum / infosCompteur.nbMesure;
// Index compteur en Wh
infosCompteur.index = data.BASE;
// puissance apparente instantannée en VA
infosCompteur.pinst = data.PAPP;
// intensité instantannée en A
infosCompteur.iinst = data.IINST;
}
module.exports = tarifbleu