forked from balassy/MMM-Futar
-
Notifications
You must be signed in to change notification settings - Fork 0
/
node_helper.js
56 lines (46 loc) · 1.79 KB
/
node_helper.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
const NodeHelper = require('node_helper'); // eslint-disable-line import/no-unresolved
const request = require('request'); // eslint-disable-line import/no-extraneous-dependencies
module.exports = NodeHelper.create({
start() {
this._startedModules = {};
},
socketNotificationReceived(notificationName, payload) {
const self = this;
if (notificationName === 'MMM-FUTAR.INIT') {
if (!self._startedModules[payload.moduleId]) {
self._init(payload.moduleId, payload.config);
self.sendSocketNotification('MMM-FUTAR.STARTED', true);
self._startedModules[payload.moduleId] = true;
}
}
},
_init(moduleId, config) {
const self = this;
// Get the data immediately right after the module initialisation has completed.
setTimeout(() => {
self._getData(moduleId, config);
}, 0);
setInterval(() => {
self._getData(moduleId, config);
}, config.updateInterval);
},
_getData(moduleId, config) {
const self = this;
const url = `https://futar.bkk.hu/api/query/v1/ws/otp/api/where/arrivals-and-departures-for-stop.json?stopId=${config.stopId}&onlyDepartures=true&minutesBefore=0&minutesAfter=${config.minutesAfter}&key=${config.apiKey}`;
request(url, (error, response, body) => {
if (!error && response.statusCode === 200) {
self._processResponse(moduleId, body);
} else {
console.error(`MMM-Futar Node helper: Failed to load data in the background. Error: ${error}. Response: ${response}`); // eslint-disable-line no-console
}
});
},
_processResponse(moduleId, responseBody) {
const response = JSON.parse(responseBody);
const payload = {
moduleId: moduleId,
data: response.data
};
this.sendSocketNotification('MMM-FUTAR.VALUE_RECEIVED', payload);
}
});