homebridge-melcloud-control 4.2.3-beta.47 → 4.2.3-beta.48
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 +47 -15
- package/package.json +1 -1
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
// Initialize devices arrays
|
|
249
|
-
const newDevices = { ata: [], ataPresets: [], atw: [], atwPresets: [], erv: [], ervPresets: [], scenes: [] };
|
|
249
|
+
const newDevices = { ata: [], ataPresets: [], ataSchedules: [], atw: [], atwPresets: [], atwSchedules: [], erv: [], ervPresets: [], ervSchedules: [], scenes: [] };
|
|
250
250
|
const devicesByType = { ata: [], atw: [], erv: [] };
|
|
251
251
|
|
|
252
252
|
response.Devices.forEach(d => {
|
|
@@ -264,7 +264,7 @@
|
|
|
264
264
|
const removedAtw = removeStaleDevices(account.atwDevices, devicesByType.atw);
|
|
265
265
|
const removedErv = removeStaleDevices(account.ervDevices, devicesByType.erv);
|
|
266
266
|
|
|
267
|
-
const handleDevices = (devicesInMelCloud, devicesInConfig, typeString, newArr, newPresets, newScenes) => {
|
|
267
|
+
const handleDevices = (devicesInMelCloud, devicesInConfig, typeString, newArr, newPresets, newSchedules, newScenes) => {
|
|
268
268
|
try {
|
|
269
269
|
const configDevicesMap = new Map(devicesInConfig.map(dev => [String(dev.id), dev]));
|
|
270
270
|
const isMelcloud = account.type === 'melcloud';
|
|
@@ -296,19 +296,18 @@
|
|
|
296
296
|
}
|
|
297
297
|
|
|
298
298
|
// === Process presets/schedules ===
|
|
299
|
-
const presets = device
|
|
300
|
-
const presetsInConfig = deviceInConfig
|
|
299
|
+
const presets = device.Presets || [];
|
|
300
|
+
const presetsInConfig = deviceInConfig.presets || [];
|
|
301
301
|
const presetIds = new Set(presetsInConfig.map(p => String(p.id)));
|
|
302
302
|
|
|
303
303
|
let addedNewPreset = false;
|
|
304
|
-
|
|
305
304
|
presets.forEach((preset, index) => {
|
|
306
|
-
const presetId = String(preset
|
|
305
|
+
const presetId = String(preset.ID);
|
|
307
306
|
if (!presetIds.has(presetId)) {
|
|
308
307
|
const presetObj = {
|
|
309
308
|
id: presetId,
|
|
310
309
|
displayType: 0,
|
|
311
|
-
name: preset.NumberDescription || `
|
|
310
|
+
name: preset.NumberDescription || `Preset ${index}`,
|
|
312
311
|
namePrefix: false
|
|
313
312
|
};
|
|
314
313
|
presetsInConfig.push(presetObj);
|
|
@@ -321,11 +320,44 @@
|
|
|
321
320
|
// === Remove placeholder presets/schedules (id === '0') if new ones were added ===
|
|
322
321
|
if (addedNewPreset) {
|
|
323
322
|
const beforeCount = presetsInConfig.length;
|
|
324
|
-
deviceInConfig
|
|
325
|
-
const removedCount = beforeCount - deviceInConfig
|
|
323
|
+
deviceInConfig.presets = presetsInConfig.filter(p => String(p.id) !== '0');
|
|
324
|
+
const removedCount = beforeCount - deviceInConfig.presets.length;
|
|
325
|
+
|
|
326
|
+
if (removedCount > 0 && removedCount < beforeCount) {
|
|
327
|
+
updateInfo('info2', `Removed ${removedCount} placeholder preset from device ${device.DeviceID}`, 'yellow');
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// === Process presets/schedules ===
|
|
332
|
+
const schedules = device.Schedules || [];
|
|
333
|
+
const schedulesInConfig = deviceInConfig.schedules || [];
|
|
334
|
+
const scheduleIds = new Set(schedulesInConfig.map(s => String(s.id)));
|
|
335
|
+
|
|
336
|
+
let addedNewSchedule = false;
|
|
337
|
+
schedules.forEach((schedule, index) => {
|
|
338
|
+
const scheduleId = String(schedule.Id);
|
|
339
|
+
if (!scheduleIds.has(scheduleId)) {
|
|
340
|
+
const presetObj = {
|
|
341
|
+
id: scheduleId,
|
|
342
|
+
displayType: 0,
|
|
343
|
+
name: `Schedule ${index}`,
|
|
344
|
+
namePrefix: false
|
|
345
|
+
};
|
|
346
|
+
schedulesInConfig.push(presetObj);
|
|
347
|
+
newPresets.push(presetObj);
|
|
348
|
+
scheduleIds.add(scheduleId);
|
|
349
|
+
addedNewSchedule = true;
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
// === Remove placeholder schedules (id === '0') if new ones were added ===
|
|
354
|
+
if (addedNewSchedule) {
|
|
355
|
+
const beforeCount = schedulesInConfig.length;
|
|
356
|
+
deviceInConfig.schedules = schedulesInConfig.filter(s => String(s.id) !== '0');
|
|
357
|
+
const removedCount = beforeCount - deviceInConfig.schedules.length;
|
|
326
358
|
|
|
327
359
|
if (removedCount > 0 && removedCount < beforeCount) {
|
|
328
|
-
updateInfo('info2', `Removed ${removedCount} placeholder
|
|
360
|
+
updateInfo('info2', `Removed ${removedCount} placeholder schedule from device ${device.DeviceID}`, 'yellow');
|
|
329
361
|
}
|
|
330
362
|
}
|
|
331
363
|
|
|
@@ -335,7 +367,6 @@
|
|
|
335
367
|
const sceneIds = new Set(scenesInConfig.map(s => String(s.id)));
|
|
336
368
|
|
|
337
369
|
let addedNewScenes = false;
|
|
338
|
-
|
|
339
370
|
scenes.forEach((scene, index) => {
|
|
340
371
|
const sceneId = String(scene.Id);
|
|
341
372
|
if (!sceneIds.has(sceneId)) {
|
|
@@ -373,12 +404,13 @@
|
|
|
373
404
|
}
|
|
374
405
|
};
|
|
375
406
|
|
|
376
|
-
account.ataDevices = handleDevices(devicesByType.ata, account.ataDevices, "Air Conditioner", newDevices.ata, newDevices.ataPresets, newDevices.scenes);
|
|
377
|
-
account.atwDevices = handleDevices(devicesByType.atw, account.atwDevices, "Heat Pump", newDevices.atw, newDevices.atwPresets, newDevices.scenes);
|
|
378
|
-
account.ervDevices = handleDevices(devicesByType.erv, account.ervDevices, "Energy Recovery Ventilation", newDevices.erv, newDevices.ervPresets, newDevices.scenes);
|
|
407
|
+
account.ataDevices = handleDevices(devicesByType.ata, account.ataDevices, "Air Conditioner", newDevices.ata, newDevices.ataPresets, newDevices.ataSchedules, newDevices.scenes);
|
|
408
|
+
account.atwDevices = handleDevices(devicesByType.atw, account.atwDevices, "Heat Pump", newDevices.atw, newDevices.atwPresets, newDevices.atwSchedules, newDevices.scenes);
|
|
409
|
+
account.ervDevices = handleDevices(devicesByType.erv, account.ervDevices, "Energy Recovery Ventilation", newDevices.erv, newDevices.ervPresets, newDevices.ervSchedules, newDevices.scenes);
|
|
379
410
|
|
|
380
411
|
const newDevicesCount = newDevices.ata.length + newDevices.atw.length + newDevices.erv.length;
|
|
381
412
|
const newPresetsCount = newDevices.ataPresets.length + newDevices.atwPresets.length + newDevices.ervPresets.length;
|
|
413
|
+
const newSchedulesCount = newDevices.ataSchedules.length + newDevices.atwSchedules.length + newDevices.ervSchedules.length;
|
|
382
414
|
const newScenesCount = newDevices.scenes.length;
|
|
383
415
|
const removedDevicesCount = removedAta.length + removedAtw.length + removedErv.length;
|
|
384
416
|
|
|
@@ -387,7 +419,7 @@
|
|
|
387
419
|
} else {
|
|
388
420
|
if (newDevicesCount)
|
|
389
421
|
updateInfo('info', `Found new devices: ATA: ${newDevices.ata.length}, ATW: ${newDevices.atw.length}, ERV: ${newDevices.erv.length}.`, 'green');
|
|
390
|
-
if (newPresetsCount || newScenesCount)
|
|
422
|
+
if (newPresetsCount || newScenesCount || newSchedulesCount)
|
|
391
423
|
updateInfo('info1', `Found new ${account.type === 'melcloud' ? 'presets' : 'schedules'}: ATA: ${newDevices.ataPresets.length}, ATW: ${newDevices.atwPresets.length}, ERV: ${newDevices.ervPresets.length}, Scenes: ${newDevices.scenes.length}.`, 'green');
|
|
392
424
|
if (removedDevicesCount)
|
|
393
425
|
updateInfo('info2', `Removed devices: ATA: ${removedAta.length}, ATW: ${removedAtw.length}, ERV: ${removedErv.length}.`, 'orange');
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "4.2.3-beta.
|
|
4
|
+
"version": "4.2.3-beta.48",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|