-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdomuz-processor.js
106 lines (94 loc) · 3.18 KB
/
domuz-processor.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
const amqp = require('./amqp.controller');
require('dotenv').config();
const Influx = require('influx');
const nano = require('nano-seconds');
const influx = new Influx.InfluxDB({
host: process.env.INFLUX_HOST,
database: process.env.INFLUX_DB_NAME,
});
influx.getDatabaseNames()
.then(names => {
if (!names.includes(process.env.INFLUX_DB_NAME)) {
return influx.createDatabase(process.env.INFLUX_DB_NAME);
}
})
.then(() => {
//This will connect to the rabbitMQ
amqp.setupConnection();
amqp.consume(process.env.RABBIT_MQ_EXCHANGE, process.env.RABBIT_MQ_QUEUE, processMsg);
});
function processMsg(msg, confirm) {
var message = JSON.parse(msg);
console.log("Received message: %j", message);
//storePumpState(message);
var promiseList = [];
//promiseList.push(storeRawMessage(message));
for(let room of message.heatArea) {
promiseList.push(storeRoomTemp(message, room));
}
for(let heatCtrl of message.heatCtrls) {
promiseList.push(storeHeatCtrls(message, heatCtrl));
}
//console.log("List of promisses: ", promiseList);
Promise.all(promiseList).then((values) => {
console.log("All done");
confirm(true);
});
}
function storeHeatCtrls(domuz, heatCtrl) {
//Fix where the heatCtrl.state = null
if(heatCtrl.state === null) {
heatCtrl.state = 0;
}
return new Promise((stored, reject) => {
influx.writePoints([
{
measurement: 'heatCtrls',
tags: {
collector: domuz.name,
heatCtrlNumber: heatCtrl.heatCtrlNumber
},
fields: {
state: heatCtrl.state,
percentage: heatCtrl.valveState
},
timestamp: nano.toString(nano.fromISOString(domuz.date))
}
]).then(() => {
console.log("Stored: storeHeatCtrls %s Ctrlnumber: %s", domuz.name, heatCtrl.heatCtrlNumber);
stored();
}).catch((err) => {
console.log("Error while writingPoints: ", err.message);
reject();
});
});
}
function storeRoomTemp(domuz, room) {
return new Promise((stored, reject) => {
influx.writePoints([
{
measurement: 'roomTemp',
tags: {
collector: domuz.name,
room: room.name,
},
fields: {
pump: domuz.pump.active ? 1 : 0,
actualTemp: room.actualTemp,
targetTemp: room.targetTemp,
requestedDayTemp: room.requestedDayTemp,
requestedNightTemp: room.requestedNightTemp,
areaState: room.areaState,
mode: room.mode
},
timestamp: nano.toString(nano.fromISOString(domuz.date))
}
]).then(() => {
console.log("Stored: ", room.name);
stored();
}).catch((err) => {
console.log("Error while writingPoints: ", err.message);
reject();
});
});
}