homebridge-melcloud-control 4.3.0-beta.51 → 4.3.0-beta.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/melcloudata.js +15 -28
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "4.3.0-beta.
|
|
4
|
+
"version": "4.3.0-beta.53",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|
package/src/melcloudata.js
CHANGED
|
@@ -29,7 +29,7 @@ class MelCloudAta extends EventEmitter {
|
|
|
29
29
|
this.socket = null;
|
|
30
30
|
this.connecting = false;
|
|
31
31
|
this.socketConnected = false;
|
|
32
|
-
this.
|
|
32
|
+
this.heartbeat = null;
|
|
33
33
|
|
|
34
34
|
//lock flag
|
|
35
35
|
this.locks = false;
|
|
@@ -69,19 +69,6 @@ class MelCloudAta extends EventEmitter {
|
|
|
69
69
|
this.socketConnected = false;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
reconnect() {
|
|
73
|
-
this.cleanupSocket();
|
|
74
|
-
|
|
75
|
-
const delay = Math.min(this.reconnectDelay, 30000); // max 30s
|
|
76
|
-
if (this.logDebug) this.emit('debug', `Reconnect in ${delay}ms`);
|
|
77
|
-
|
|
78
|
-
setTimeout(() => {
|
|
79
|
-
this.reconnectDelay *= 2;
|
|
80
|
-
this.reconnectDelay = Math.max(1000, this.reconnectDelay);
|
|
81
|
-
this.connectSocket(deviceData);
|
|
82
|
-
}, delay);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
72
|
async checkState() {
|
|
86
73
|
try {
|
|
87
74
|
|
|
@@ -91,9 +78,9 @@ class MelCloudAta extends EventEmitter {
|
|
|
91
78
|
|
|
92
79
|
this.headers = devicesData.Headers;
|
|
93
80
|
const deviceData = devicesData.Devices.find(device => device.DeviceID === this.deviceId);
|
|
81
|
+
deviceData.Scenes = devicesData.Scenes ?? [];
|
|
94
82
|
|
|
95
83
|
if (this.accountType === 'melcloudhome') {
|
|
96
|
-
deviceData.Scenes = devicesData.Scenes ?? [];
|
|
97
84
|
deviceData.Device.OperationMode = AirConditioner.OperationModeMapStringToEnum[deviceData.Device.OperationMode] ?? deviceData.Device.OperationMode;
|
|
98
85
|
deviceData.Device.ActualFanSpeed = AirConditioner.FanSpeedMapStringToEnum[deviceData.Device.ActualFanSpeed] ?? deviceData.Device.ActualFanSpeed;
|
|
99
86
|
deviceData.Device.SetFanSpeed = AirConditioner.FanSpeedMapStringToEnum[deviceData.Device.SetFanSpeed] ?? deviceData.Device.SetFanSpeed;
|
|
@@ -113,10 +100,11 @@ class MelCloudAta extends EventEmitter {
|
|
|
113
100
|
const socket = new WebSocket(url, { headers: devicesData.WsHeaders.headers })
|
|
114
101
|
.on('error', (error) => {
|
|
115
102
|
if (this.logError) this.emit('error', `Socket error: ${error}`);
|
|
103
|
+
socket.close();
|
|
116
104
|
})
|
|
117
105
|
.on('close', () => {
|
|
118
106
|
if (this.logDebug) this.emit('debug', `Socket closed`);
|
|
119
|
-
this.
|
|
107
|
+
this.cleanupSocket();
|
|
120
108
|
})
|
|
121
109
|
.on('open', () => {
|
|
122
110
|
this.socket = socket;
|
|
@@ -151,13 +139,15 @@ class MelCloudAta extends EventEmitter {
|
|
|
151
139
|
const messageType = parsedMessage[0].messageType;
|
|
152
140
|
switch (messageType) {
|
|
153
141
|
case 'unitStateChanged':
|
|
154
|
-
const settings = Object.fromEntries(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
142
|
+
const settings = Object.fromEntries(
|
|
143
|
+
messageData.settings.map(({ name, value }) => {
|
|
144
|
+
let parsedValue = value;
|
|
145
|
+
if (value === "True") parsedValue = true;
|
|
146
|
+
else if (value === "False") parsedValue = false;
|
|
147
|
+
else if (!isNaN(value) && value !== "") parsedValue = Number(value);
|
|
148
|
+
return [name, parsedValue];
|
|
149
|
+
})
|
|
150
|
+
);
|
|
161
151
|
Object.assign(deviceData.Device, settings);
|
|
162
152
|
updateDeviceState = true;
|
|
163
153
|
break;
|
|
@@ -175,14 +165,11 @@ class MelCloudAta extends EventEmitter {
|
|
|
175
165
|
return;
|
|
176
166
|
}
|
|
177
167
|
|
|
178
|
-
if (updateDeviceState)
|
|
179
|
-
this.deviceData = deviceData;
|
|
180
|
-
this.emit('deviceState', deviceData);
|
|
181
|
-
}
|
|
168
|
+
if (updateDeviceState) this.emit('deviceState', deviceData);
|
|
182
169
|
});
|
|
183
170
|
} catch (error) {
|
|
184
171
|
if (this.logError) this.emit('error', `Socket connection failed: ${error}`);
|
|
185
|
-
this.
|
|
172
|
+
this.cleanupSocket();
|
|
186
173
|
}
|
|
187
174
|
}
|
|
188
175
|
}
|