homebridge-melcloud-control 4.3.3-beta.21 → 4.3.3-beta.23
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 +104 -97
- package/package.json +1 -1
|
@@ -249,11 +249,11 @@
|
|
|
249
249
|
const newDevices = { ata: [], ataPresets: [], ataSchedules: [], atw: [], atwPresets: [], atwSchedules: [], erv: [], ervPresets: [], ervSchedules: [], scenes: [] };
|
|
250
250
|
const devicesByType = { ata: [], atw: [], erv: [] };
|
|
251
251
|
|
|
252
|
-
response.Devices.forEach(
|
|
253
|
-
|
|
254
|
-
if (
|
|
255
|
-
if (
|
|
256
|
-
if (
|
|
252
|
+
response.Devices.forEach(device => {
|
|
253
|
+
device.Scenes = response.Scenes ?? [];
|
|
254
|
+
if (device.Type === 0) devicesByType.ata.push(device);
|
|
255
|
+
if (device.Type === 1) devicesByType.atw.push(device);
|
|
256
|
+
if (device.Type === 3) devicesByType.erv.push(device);
|
|
257
257
|
});
|
|
258
258
|
|
|
259
259
|
account.ataDevices ??= [];
|
|
@@ -295,105 +295,112 @@
|
|
|
295
295
|
configDevicesMap.set(deviceId, deviceInConfig);
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
-
//
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
298
|
+
//only for melcloud
|
|
299
|
+
if (account.type === 'melcloud') {
|
|
300
|
+
|
|
301
|
+
// === Process presets ===
|
|
302
|
+
const presets = device.Presets || [];
|
|
303
|
+
const presetsInConfig = deviceInConfig.presets || [];
|
|
304
|
+
const presetIds = new Set(presetsInConfig.map(p => String(p.id)));
|
|
305
|
+
|
|
306
|
+
let addedNewPreset = false;
|
|
307
|
+
presets.forEach((preset, index) => {
|
|
308
|
+
const presetId = String(preset.ID);
|
|
309
|
+
if (!presetIds.has(presetId)) {
|
|
310
|
+
const presetObj = {
|
|
311
|
+
id: presetId,
|
|
312
|
+
displayType: 0,
|
|
313
|
+
name: preset.NumberDescription || `Preset ${index}`,
|
|
314
|
+
namePrefix: false
|
|
315
|
+
};
|
|
316
|
+
presetsInConfig.push(presetObj);
|
|
317
|
+
newPresets.push(presetObj);
|
|
318
|
+
presetIds.add(presetId);
|
|
319
|
+
addedNewPreset = true;
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
// === Remove placeholder presets/schedules (id === '0') if new ones were added ===
|
|
324
|
+
if (addedNewPreset) {
|
|
325
|
+
const beforeCount = presetsInConfig.length;
|
|
326
|
+
deviceInConfig.presets = presetsInConfig.filter(p => String(p.id) !== '0');
|
|
327
|
+
const removedCount = beforeCount - deviceInConfig.presets.length;
|
|
328
|
+
|
|
329
|
+
if (removedCount > 0 && removedCount < beforeCount) {
|
|
330
|
+
updateInfo('info2', `Removed ${removedCount} placeholder preset from device ${device.DeviceID}`, 'yellow');
|
|
331
|
+
}
|
|
328
332
|
}
|
|
329
333
|
}
|
|
330
334
|
|
|
331
|
-
//
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
335
|
+
//only for melcloudhome
|
|
336
|
+
if (account.type === 'melcloudhome') {
|
|
337
|
+
|
|
338
|
+
// === Process schedules ===
|
|
339
|
+
const schedules = device.Schedule || [];
|
|
340
|
+
const schedulesInConfig = deviceInConfig.schedules || [];
|
|
341
|
+
const scheduleIds = new Set(schedulesInConfig.map(s => String(s.id)));
|
|
342
|
+
|
|
343
|
+
let addedNewSchedule = false;
|
|
344
|
+
schedules.forEach((schedule, index) => {
|
|
345
|
+
const scheduleId = String(schedule.Id);
|
|
346
|
+
if (!scheduleIds.has(scheduleId)) {
|
|
347
|
+
const presetObj = {
|
|
348
|
+
id: scheduleId,
|
|
349
|
+
displayType: 0,
|
|
350
|
+
name: `Schedule ${index}`,
|
|
351
|
+
namePrefix: false
|
|
352
|
+
};
|
|
353
|
+
schedulesInConfig.push(presetObj);
|
|
354
|
+
newPresets.push(presetObj);
|
|
355
|
+
scheduleIds.add(scheduleId);
|
|
356
|
+
addedNewSchedule = true;
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
// === Remove placeholder schedules (id === '0') if new ones were added ===
|
|
361
|
+
if (addedNewSchedule) {
|
|
362
|
+
const beforeCount = schedulesInConfig.length;
|
|
363
|
+
deviceInConfig.schedules = schedulesInConfig.filter(s => String(s.id) !== '0');
|
|
364
|
+
const removedCount = beforeCount - deviceInConfig.schedules.length;
|
|
365
|
+
|
|
366
|
+
if (removedCount > 0 && removedCount < beforeCount) {
|
|
367
|
+
updateInfo('info2', `Removed ${removedCount} placeholder schedule from device ${device.DeviceID}`, 'yellow');
|
|
368
|
+
}
|
|
350
369
|
}
|
|
351
|
-
});
|
|
352
370
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
const
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
371
|
+
// === Process scenes ===
|
|
372
|
+
const scenes = device.Scenes || [];
|
|
373
|
+
const scenesInConfig = deviceInConfig.scenes || [];
|
|
374
|
+
const sceneIds = new Set(scenesInConfig.map(s => String(s.id)));
|
|
375
|
+
|
|
376
|
+
let addedNewScenes = false;
|
|
377
|
+
scenes.forEach((scene, index) => {
|
|
378
|
+
const sceneId = String(scene.Id);
|
|
379
|
+
if (!sceneIds.has(sceneId)) {
|
|
380
|
+
const sceneObj = {
|
|
381
|
+
id: sceneId,
|
|
382
|
+
displayType: 0,
|
|
383
|
+
name: scene.Name || `Scene ${index}`,
|
|
384
|
+
namePrefix: false
|
|
385
|
+
};
|
|
386
|
+
scenesInConfig.push(sceneObj);
|
|
387
|
+
newScenes.push(sceneObj);
|
|
388
|
+
sceneIds.add(sceneId);
|
|
389
|
+
addedNewScenes = true;
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
// === Remove placeholder scenes (id === '0') if new ones were added ===
|
|
394
|
+
if (addedNewScenes) {
|
|
395
|
+
const beforeCount = scenesInConfig.length;
|
|
396
|
+
deviceInConfig.scenes = scenesInConfig.filter(s => String(s.id) !== '0');
|
|
397
|
+
const removedCount = beforeCount - deviceInConfig.scenes.length;
|
|
398
|
+
|
|
399
|
+
if (removedCount > 0 && removedCount < beforeCount) {
|
|
400
|
+
updateInfo('info2', `Removed ${removedCount} placeholder scene from device ${device.DeviceID}`, 'yellow');
|
|
401
|
+
}
|
|
361
402
|
}
|
|
362
403
|
}
|
|
363
|
-
|
|
364
|
-
// === Process scenes ===
|
|
365
|
-
const scenes = device.Scenes || [];
|
|
366
|
-
const scenesInConfig = deviceInConfig.scenes || [];
|
|
367
|
-
const sceneIds = new Set(scenesInConfig.map(s => String(s.id)));
|
|
368
|
-
|
|
369
|
-
let addedNewScenes = false;
|
|
370
|
-
scenes.forEach((scene, index) => {
|
|
371
|
-
const sceneId = String(scene.Id);
|
|
372
|
-
if (!sceneIds.has(sceneId)) {
|
|
373
|
-
const sceneObj = {
|
|
374
|
-
id: sceneId,
|
|
375
|
-
displayType: 0,
|
|
376
|
-
name: scene.Name || `Scene ${index}`,
|
|
377
|
-
namePrefix: false
|
|
378
|
-
};
|
|
379
|
-
scenesInConfig.push(sceneObj);
|
|
380
|
-
newScenes.push(sceneObj);
|
|
381
|
-
sceneIds.add(sceneId);
|
|
382
|
-
addedNewScenes = true;
|
|
383
|
-
}
|
|
384
|
-
});
|
|
385
|
-
|
|
386
|
-
// === Remove placeholder scenes (id === '0') if new ones were added ===
|
|
387
|
-
if (addedNewScenes) {
|
|
388
|
-
const beforeCount = scenesInConfig.length;
|
|
389
|
-
deviceInConfig.scenes = scenesInConfig.filter(s => String(s.id) !== '0');
|
|
390
|
-
const removedCount = beforeCount - deviceInConfig.scenes.length;
|
|
391
|
-
|
|
392
|
-
if (removedCount > 0 && removedCount < beforeCount) {
|
|
393
|
-
updateInfo('info2', `Removed ${removedCount} placeholder scene from device ${device.DeviceID}`, 'yellow');
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
|
|
397
404
|
});
|
|
398
405
|
|
|
399
406
|
// Return filtered devicesInConfig to make sure upstream code uses it
|
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.3-beta.
|
|
4
|
+
"version": "4.3.3-beta.23",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|