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.
@@ -646,7 +646,7 @@
646
646
  "name": {
647
647
  "title": "Name",
648
648
  "type": "string",
649
- "default": "Schedule",
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": "Schedule",
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": "Schedule",
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[typeKey] || [];
300
- const presetsInConfig = deviceInConfig[typeKey1] || [];
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[idKey]);
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 || `Schedule ${index}`,
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[typeKey1] = presetsInConfig.filter(p => String(p.id) !== '0');
325
- const removedCount = beforeCount - deviceInConfig[typeKey1].length;
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 ${typeKey1} from device ${device.DeviceID}`, 'yellow');
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.Scenes || [];
335
- const scenesIds = new Set(scenesInConfig.map(s => String(s.id)));
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.id);
341
- if (!scenesIds.has(sceneId)) {
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
- scenesIds.add(sceneObj);
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.Scenes = scenesInConfig.filter(s => String(s.id) !== '0');
359
- const removedCount = beforeCount - deviceInConfig.Scenes.length;
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.46",
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",