homebridge-melcloud-control 4.0.0-beta.82 → 4.0.0-beta.84
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/homebridge-ui/public/index.html +41 -17
- package/package.json +1 -1
|
@@ -146,8 +146,8 @@
|
|
|
146
146
|
|
|
147
147
|
document.getElementById('logIn').disabled = !(acc.name && acc.user && acc.passwd && acc.languaged && acc.displayType);
|
|
148
148
|
|
|
149
|
-
await homebridge.updatePluginConfig(
|
|
150
|
-
await homebridge.savePluginConfig(
|
|
149
|
+
await homebridge.updatePluginConfig(pluginConfig);
|
|
150
|
+
await homebridge.savePluginConfig(pluginConfig);
|
|
151
151
|
});
|
|
152
152
|
|
|
153
153
|
// --- Config Button Toggle ---
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
|
|
180
180
|
for (let i = configDevices.length - 1; i >= 0; i--) {
|
|
181
181
|
const device = configDevices[i];
|
|
182
|
-
if (device.id !== 0 && !melcloudIds.includes(device.id)) {
|
|
182
|
+
if (device.id !== "0" && !melcloudIds.includes(device.id)) {
|
|
183
183
|
removedDevices.push(device);
|
|
184
184
|
configDevices.splice(i, 1);
|
|
185
185
|
}
|
|
@@ -224,33 +224,52 @@
|
|
|
224
224
|
const removedErv = removeStaleDevices(acc.ervDevices, devicesByType.erv);
|
|
225
225
|
|
|
226
226
|
// Function to handle device & presets
|
|
227
|
+
// Function to handle devices & presets safely (deep cloning)
|
|
227
228
|
const handleDevices = (devicesInCloud, devicesInConfig, typeString, newArr, newPresets) => {
|
|
228
229
|
devicesInCloud.forEach(device => {
|
|
229
230
|
const { DeviceID: id, Type: type, DeviceName: name, Presets: presets = [] } = device;
|
|
230
|
-
|
|
231
|
+
|
|
232
|
+
// Create a cloned device object
|
|
233
|
+
const devObj = structuredClone({
|
|
234
|
+
id,
|
|
235
|
+
type,
|
|
236
|
+
typeString,
|
|
237
|
+
name,
|
|
238
|
+
displayMode: 1,
|
|
239
|
+
presets: [],
|
|
240
|
+
buttonsSensors: []
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
// Add device if not exists
|
|
231
244
|
if (!devicesInConfig.some(d => d.id === id)) {
|
|
232
245
|
devicesInConfig.push(devObj);
|
|
233
|
-
newArr.push(devObj);
|
|
246
|
+
newArr.push(structuredClone(devObj)); // also clone into new devices list
|
|
234
247
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
p
|
|
239
|
-
|
|
248
|
+
|
|
249
|
+
// Add presets safely
|
|
250
|
+
presets.forEach(preset => {
|
|
251
|
+
const p = structuredClone({
|
|
252
|
+
id: preset.ID,
|
|
253
|
+
name: preset.NumberDescription,
|
|
254
|
+
displayType: 0,
|
|
255
|
+
namePrefix: false
|
|
256
|
+
});
|
|
257
|
+
|
|
240
258
|
const devConfig = devicesInConfig.find(d => d.id === id);
|
|
241
|
-
if (devConfig && !devConfig.presets.some(x => x.id === p.
|
|
259
|
+
if (devConfig && !devConfig.presets.some(x => x.id === p.id)) {
|
|
242
260
|
devConfig.presets.push(p);
|
|
243
|
-
newPresets.push(p);
|
|
261
|
+
newPresets.push(structuredClone(p));
|
|
244
262
|
}
|
|
245
263
|
});
|
|
246
264
|
});
|
|
247
265
|
};
|
|
248
266
|
|
|
267
|
+
// Call for each device type
|
|
249
268
|
handleDevices(devicesByType.ata, acc.ataDevices, "Air Conditioner", newDevices.ata, newDevices.ataPresets);
|
|
250
269
|
handleDevices(devicesByType.atw, acc.atwDevices, "Heat Pump", newDevices.atw, newDevices.atwPresets);
|
|
251
|
-
handleDevices(devicesByType.erv, acc.ervDevices, "Energy Recovery
|
|
270
|
+
handleDevices(devicesByType.erv, acc.ervDevices, "Energy Recovery Ventilation", newDevices.erv, newDevices.ervPresets);
|
|
252
271
|
|
|
253
|
-
//
|
|
272
|
+
// Summary info
|
|
254
273
|
const newDevicesCount = newDevices.ata.length + newDevices.atw.length + newDevices.erv.length;
|
|
255
274
|
const newPresetsCount = newDevices.ataPresets.length + newDevices.atwPresets.length + newDevices.ervPresets.length;
|
|
256
275
|
const removedDevicesCount = removedAta.length + removedAtw.length + removedErv.length;
|
|
@@ -258,15 +277,20 @@
|
|
|
258
277
|
if (!newDevicesCount && !newPresetsCount && !removedDevicesCount) {
|
|
259
278
|
updateInfo('info', 'No changes detected.', 'white');
|
|
260
279
|
} else {
|
|
261
|
-
if (newDevicesCount)
|
|
262
|
-
|
|
263
|
-
if (
|
|
280
|
+
if (newDevicesCount)
|
|
281
|
+
updateInfo('info', `Found new devices: ATA: ${newDevices.ata.length}, ATW: ${newDevices.atw.length}, ERV: ${newDevices.erv.length}.`, 'green');
|
|
282
|
+
if (newPresetsCount)
|
|
283
|
+
updateInfo('info1', `Found new presets: ATA: ${newDevices.ataPresets.length}, ATW: ${newDevices.atwPresets.length}, ERV: ${newDevices.ervPresets.length}.`, 'green');
|
|
284
|
+
if (removedDevicesCount)
|
|
285
|
+
updateInfo('info2', `Removed devices: ATA: ${removedAta.length}, ATW: ${removedAtw.length}, ERV: ${removedErv.length}.`, 'orange');
|
|
264
286
|
}
|
|
265
287
|
|
|
288
|
+
// Correct save (must be array)
|
|
266
289
|
await homebridge.updatePluginConfig(pluginConfig);
|
|
267
290
|
await homebridge.savePluginConfig(pluginConfig);
|
|
268
291
|
document.getElementById('logIn').className = "btn btn-secondary";
|
|
269
292
|
|
|
293
|
+
|
|
270
294
|
} catch (error) {
|
|
271
295
|
updateInfo('info', 'Check Your credentials data and try again.', 'yellow');
|
|
272
296
|
updateInfo('info1', `Error: ${JSON.stringify(error)}`, 'red');
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "4.0.0-beta.
|
|
4
|
+
"version": "4.0.0-beta.84",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|