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
|
const fs = require('fs');
const dataBroadcaster = require('./data-broadcaster');
function startLogging(device) {
setInterval(() => { log(device); }, 60000);
console.log('Logging started for ' + device.alias + ' [' + device.deviceId + ']');
}
function log(device) {
device.emeter.getRealtime().then(response => {
let logEntry = {
timestamp: Date.now(),
power: (('power_mw' in response) ? (response.power_mw / 1000) : response.power)
}
// TODO only log up to a max number of entries
fs.writeFile(device.deviceId + '-log.json', JSON.stringify(logEntry) + '\n', { flag: 'a' }, (err) => {
if(err) {
console.warn('Error writing log entry for ' + device.alias + ' [' + device.deviceId + ']', err);
}
else {
dataBroadcaster.broadcastNewLogEntry(device.deviceId, logEntry);
}
});
});
}
function getAllEntries(deviceId, callback) {
fs.readFile(deviceId + '-log.json', 'utf8', (err, data) => {
if(err) {
console.warn('Error reading usage log ' + deviceId + '-log.json', err);
return;
}
else {
let logLines = data.split(/\r?\n/);
let logEntries = [];
logLines.forEach(line => {
if(line.length > 0) {
logEntries.push(JSON.parse(line))
}
});
callback(logEntries);
}
});
}
module.exports = {
startLogging: startLogging,
log: log,
getAllEntries: getAllEntries
}
|