homebridge-melcloud-control 4.2.3-beta.46 → 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/config.schema.json +3 -3
- package/homebridge-ui/public/index.html +54 -22
- package/package.json +1 -1
package/config.schema.json
CHANGED
|
@@ -646,7 +646,7 @@
|
|
|
646
646
|
"name": {
|
|
647
647
|
"title": "Name",
|
|
648
648
|
"type": "string",
|
|
649
|
-
"default": "
|
|
649
|
+
"default": "Scene",
|
|
650
650
|
"description": "Your own name displayed in Homebridge/HomeKit app.",
|
|
651
651
|
"condition": {
|
|
652
652
|
"functionBody": "return model.accounts[arrayIndices[0]].ataDevices[arrayIndices[1]].scenes[arrayIndices[2]].displayType > 0;"
|
|
@@ -1421,7 +1421,7 @@
|
|
|
1421
1421
|
"name": {
|
|
1422
1422
|
"title": "Name",
|
|
1423
1423
|
"type": "string",
|
|
1424
|
-
"default": "
|
|
1424
|
+
"default": "Scene",
|
|
1425
1425
|
"description": "Your own name displayed in Homebridge/HomeKit app.",
|
|
1426
1426
|
"condition": {
|
|
1427
1427
|
"functionBody": "return model.accounts[arrayIndices[0]].atwDevices[arrayIndices[1]].scenes[arrayIndices[2]].displayType > 0;"
|
|
@@ -1978,7 +1978,7 @@
|
|
|
1978
1978
|
"name": {
|
|
1979
1979
|
"title": "Name",
|
|
1980
1980
|
"type": "string",
|
|
1981
|
-
"default": "
|
|
1981
|
+
"default": "Scene",
|
|
1982
1982
|
"description": "Your own name displayed in Homebridge/HomeKit app.",
|
|
1983
1983
|
"condition": {
|
|
1984
1984
|
"functionBody": "return model.accounts[arrayIndices[0]].ervDevices[arrayIndices[1]].scenes[arrayIndices[2]].displayType > 0;"
|
|
@@ -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,24 +320,56 @@
|
|
|
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
|
|
|
332
364
|
// === Process scenes ===
|
|
333
365
|
const scenes = device.Scenes || [];
|
|
334
|
-
const scenesInConfig = deviceInConfig.
|
|
335
|
-
const
|
|
366
|
+
const scenesInConfig = deviceInConfig.scenes || [];
|
|
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
|
-
const sceneId = String(scene.
|
|
341
|
-
if (!
|
|
371
|
+
const sceneId = String(scene.Id);
|
|
372
|
+
if (!sceneIds.has(sceneId)) {
|
|
342
373
|
const sceneObj = {
|
|
343
374
|
id: sceneId,
|
|
344
375
|
displayType: 0,
|
|
@@ -347,7 +378,7 @@
|
|
|
347
378
|
};
|
|
348
379
|
scenesInConfig.push(sceneObj);
|
|
349
380
|
newScenes.push(sceneObj);
|
|
350
|
-
|
|
381
|
+
sceneIds.add(sceneObj);
|
|
351
382
|
addedNewScenes = true;
|
|
352
383
|
}
|
|
353
384
|
});
|
|
@@ -355,8 +386,8 @@
|
|
|
355
386
|
// === Remove placeholder scenes (id === '0') if new ones were added ===
|
|
356
387
|
if (addedNewScenes) {
|
|
357
388
|
const beforeCount = scenesInConfig.length;
|
|
358
|
-
deviceInConfig.
|
|
359
|
-
const removedCount = beforeCount - deviceInConfig.
|
|
389
|
+
deviceInConfig.scenes = scenesInConfig.filter(s => String(s.id) !== '0');
|
|
390
|
+
const removedCount = beforeCount - deviceInConfig.scenes.length;
|
|
360
391
|
|
|
361
392
|
if (removedCount > 0 && removedCount < beforeCount) {
|
|
362
393
|
updateInfo('info2', `Removed ${removedCount} placeholder scene from device ${device.DeviceID}`, 'yellow');
|
|
@@ -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",
|