-
Notifications
You must be signed in to change notification settings - Fork 2
/
MMM-HomeAssistant-Touch.js
111 lines (100 loc) · 2.74 KB
/
MMM-HomeAssistant-Touch.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
107
108
109
110
111
Module.register("MMM-HomeAssistant-Touch", {
defaults: {
host: "http://127.0.0.1",
port: 8123,
token: "NOT_VALID",
ignoreCert: false,
entities: [],
},
// default mm functions
init,
start,
getDom,
socketNotificationReceived,
getStyles: function () {
return [this.file("MMM-HomeAssistant-Touch.css"), "font-awesome.css"];
},
getScripts: function () {
return [
this.file("./helpers/UIClassFactory.js"),
this.file("./UIClasses/Base.js"),
this.file("./UIClasses/Slider.js"),
this.file("./UIClasses/Light.js"),
this.file("./UIClasses/Switch.js"),
this.file("./UIClasses/Cover.js"),
this.file("./UIClasses/MediaPlayer.js"),
this.file("./UIClasses/Unsupported.js"),
];
},
// custom functions
sendSocketNotificationHelper,
getStates,
getState,
updateState,
loadEntityClasses,
});
// Default MM Functions
function init() {
// rewrite sendSocketNotification function to include the identifier
this._sendSocketNotification = this.sendSocketNotification;
this.sendSocketNotification = this.sendSocketNotificationHelper;
}
function getDom() {
var wrapper = document.createElement("div");
wrapper.id = "MMM-HomeAssistant-Touch";
for (const entity in this.entities) {
wrapper.appendChild(this.entities[entity].getContainer());
}
return wrapper;
}
function start() {
Log.log(this.name + " is started!");
this.loadEntityClasses();
this.sendSocketNotification("CONNECT", {
host: this.config.host,
port: this.config.port,
token: this.config.token,
ignoreCert: this.config.ignoreCert,
});
this.getStates();
}
function socketNotificationReceived(notification, payload) {
if (payload.identifier === this.identifier) {
switch (notification) {
case "GOT_STATE":
case "CHANGED_STATE":
this.updateState(payload.data);
break;
}
}
}
// Custom Functions
function getStates() {
for (const entity of this.config.entities) {
this.getState(entity);
}
}
function getState(entity) {
this.sendSocketNotification("GET_STATE", { entity });
}
function updateState(state) {
if (this.entities.hasOwnProperty(state.entity_id)) {
this.entities[state.entity_id].updateState(state);
}
}
function sendSocketNotificationHelper(notification, payload) {
payload.identifier = this.identifier;
this._sendSocketNotification(notification, payload);
}
// initializes each entity to render it
function loadEntityClasses() {
this.UIClassFactory = new UIClassFactory();
this.entities = {};
// load UI Classes
for (const entity of this.config.entities) {
const entityClass = this.UIClassFactory.getEntityClass(entity);
if (entityClass) {
this.entities[entity] = new entityClass(entity, this);
}
}
}