forked from f00d4tehg0dz/MMM-TeslaFi
-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
node_helper.js
87 lines (71 loc) · 1.99 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
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
"use strict";
/* Magic Mirror
* Module: MMM-Tesla
*
* Originally By Adrian Chrysanthou
* Updated by Matt Dyson
*
* MIT Licensed.
*/
const NodeHelper = require("node_helper");
var request = require("request");
const Log = require("../../js/logger");
const buildUrl = require("build-url");
const DataSource = require("./DataSource");
const TeslaFi = require("./datasources/teslafi");
const Tessie = require("./datasources/tessie");
module.exports = NodeHelper.create({
start: function () {
this.started = false;
this.config = null;
this.source = null;
},
getData: function () {
var self = this;
if (!this.started) {
return;
}
Log.info("Tesla fetching data from source: " + this.source.config.name);
this.source.fetchData(function (response) {
Log.info("Received data: " + response);
self.sendSocketNotification("DATA", response);
});
setTimeout(function () {
self.getData();
}, this.config.updateInterval);
},
socketNotificationReceived: function (notification, payload) {
if (payload === null) {
return;
}
switch (notification) {
case "CONFIG":
if (this.config !== null) {
return;
}
Log.info("Tesla received configuration");
this.config = payload;
switch (this.config.source.name.toLowerCase()) {
case "teslafi":
this.source = new TeslaFi(this.config.source);
break;
case "tessie":
this.source = new Tessie(this.config.source);
break;
default:
Log.error(
"Unknown source provided for Tesla data: " +
this.config.source.name
);
break;
}
break; // End CONFIG notification
}
if (this.config !== null && this.source !== null && !this.started) {
Log.info("Tesla helper starting");
this.sendSocketNotification("STARTED", true);
this.started = true;
this.getData();
}
}
});