homebridge-melcloud-control 3.1.2 → 3.1.3-beta.1

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.
@@ -213,20 +213,17 @@
213
213
  "id": {
214
214
  "title": "ID",
215
215
  "type": "integer",
216
- "required": true,
217
- "readonly": true
216
+ "required": true
218
217
  },
219
218
  "type": {
220
219
  "title": "Type",
221
220
  "type": "integer",
222
- "required": true,
223
- "readonly": true
221
+ "required": true
224
222
  },
225
223
  "typeString": {
226
224
  "title": "Type",
227
225
  "type": "string",
228
- "required": true,
229
- "readonly": true
226
+ "required": true
230
227
  },
231
228
  "name": {
232
229
  "title": "Name",
@@ -760,20 +757,17 @@
760
757
  "id": {
761
758
  "title": "Mode",
762
759
  "type": "integer",
763
- "required": true,
764
- "readonly": true
760
+ "required": true
765
761
  },
766
762
  "type": {
767
763
  "title": "Type",
768
764
  "type": "integer",
769
- "required": true,
770
- "readonly": true
765
+ "required": true
771
766
  },
772
767
  "typeString": {
773
768
  "title": "Type",
774
769
  "type": "string",
775
- "required": true,
776
- "readonly": true
770
+ "required": true
777
771
  },
778
772
  "name": {
779
773
  "title": "Name",
@@ -1174,20 +1168,17 @@
1174
1168
  "id": {
1175
1169
  "title": "Mode",
1176
1170
  "type": "integer",
1177
- "required": true,
1178
- "readonly": true
1171
+ "required": true
1179
1172
  },
1180
1173
  "type": {
1181
1174
  "title": "Type",
1182
1175
  "type": "integer",
1183
- "required": true,
1184
- "readonly": true
1176
+ "required": true
1185
1177
  },
1186
1178
  "typeString": {
1187
1179
  "title": "Type",
1188
1180
  "type": "string",
1189
- "required": true,
1190
- "readonly": true
1181
+ "required": true
1191
1182
  },
1192
1183
  "name": {
1193
1184
  "title": "Name",
@@ -1253,8 +1244,7 @@
1253
1244
  "id": {
1254
1245
  "title": "ID",
1255
1246
  "type": "integer",
1256
- "required": true,
1257
- "readonly": true
1247
+ "required": true
1258
1248
  },
1259
1249
  "name": {
1260
1250
  "title": "Name",
@@ -187,7 +187,7 @@
187
187
  };
188
188
 
189
189
  //get device info fom devices ata
190
- devicesByType.ata.forEach((device, index) => {
190
+ devicesByType.ata.forEach(async (device, index) => {
191
191
  const deviceId = device.DeviceID;
192
192
  const deviceType = device.Type;
193
193
  const deviceTypeText = "Air Conditioner";
@@ -212,6 +212,7 @@
212
212
 
213
213
  const ataDevicesExist = pluginConfig[0].accounts[this.deviceIndex].ataDevices ?? false;
214
214
  const ataDevices = ataDevicesExist ? pluginConfig[0].accounts[this.deviceIndex].ataDevices : pluginConfig[0].accounts[this.deviceIndex].ataDevices = [];
215
+
215
216
  const ataDeviceIdExist = ataDevices.some(device => device.id === deviceId);
216
217
  const pushTypeAta = ataDeviceIdExist ? false : ataDevices.push(deviceAta);
217
218
  const pushNewDevice = ataDeviceIdExist ? false : newDevices.ata.push(device);
@@ -236,10 +237,15 @@
236
237
  const presetsCount = newDevices.ataPresets.length;
237
238
  textAtaPresets = `ATA Presets: ${presetsCount}`
238
239
  };
240
+
241
+ //compare presets
242
+ const presetsOnMelCloud = devicePresets;
243
+ const presetsAtaInConfig = pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets;
244
+ presetsAtaInConfig = syncArrays(presetsOnMelCloud, presetsAtaInConfig);
239
245
  });
240
246
 
241
247
  //get device info fom devices atw
242
- devicesByType.atw.forEach((device, index) => {
248
+ devicesByType.atw.forEach(async (device, index) => {
243
249
  const deviceId = device.DeviceID;
244
250
  const deviceType = device.Type;
245
251
  const deviceTypeText = "Heat Pump";
@@ -293,10 +299,14 @@
293
299
  const presetsCount = newDevices.atwPresets.length;
294
300
  textAtwPresets = `ATW Presets: ${presetsCount}`
295
301
  };
302
+
303
+ const presetsOnMelCloud = devicePresets;
304
+ const presetsAtwInConfig = pluginConfig[0].accounts[this.deviceIndex].atwDevices[index].presets;
305
+ presetsAtwInConfig = syncArrays(presetsOnMelCloud, presetsAtwInConfig);
296
306
  });
297
307
 
298
308
  //get device info fom devices erv
299
- devicesByType.erv.forEach((device, index) => {
309
+ devicesByType.erv.forEach(async (device, index) => {
300
310
  const deviceId = device.DeviceID;
301
311
  const deviceType = device.Type;
302
312
  const deviceTypeText = "Energy Recovery Ventilation";
@@ -344,8 +354,23 @@
344
354
  const presetsCount = newDevices.ervPresets.length;
345
355
  textErvPresets = `ERV Presets: ${presetsCount}`
346
356
  };
357
+
358
+ const presetsOnMelCloud = devicePresets;
359
+ const presetsErvInConfig = pluginConfig[0].accounts[this.deviceIndex].ervDevices[index].presets;
360
+ presetsErvInConfig = await syncArrays(presetsOnMelCloud, presetsErvInConfig);
347
361
  });
348
362
 
363
+ //compare arrays and update array in config
364
+ const devicesOnMelCloud = devices;
365
+ const devicesAtaInConfig = pluginConfig[0].accounts[this.deviceIndex].ataDevices;
366
+ devicesAtaInConfig = await syncArrays(devicesOnMelCloud, devicesAtaInConfig);
367
+
368
+ const devicesAtwInConfig = pluginConfig[0].accounts[this.deviceIndex].atwDevices;
369
+ devicesAtwInConfig = await syncArrays(devicesOnMelCloud, devicesAtwInConfig);
370
+
371
+ const devicesErvInConfig = pluginConfig[0].accounts[this.deviceIndex].ervDevices;
372
+ devicesErvInConfig = await syncArrays(devicesOnMelCloud, devicesErvInConfig);
373
+
349
374
  const newDevicesCount = newDevices.ata.length + newDevices.atw.length + newDevices.erv.length ?? 0;
350
375
  const newPresetsCount = newDevices.ataPresets.length + newDevices.atwPresets.length + newDevices.ervPresets.length ?? 0;
351
376
  if (newDevicesCount === 0 && newPresetsCount === 0) {
@@ -389,6 +414,23 @@
389
414
  break;
390
415
  };
391
416
 
417
+ async function syncArrays(devicesOnMelCloud, devicesInConfig) {
418
+ // Create a Set of IDs from devicesOnMelCloud for quick lookup
419
+ const devicesOnMelCloudId = new Set(devicesOnMelCloud.map(device => device.DeviceID));
420
+
421
+ // Filter devicesInConfig to keep only objects that exist in devicesOnMelCloud
422
+ devicesInConfig = devicesInConfig.filter(device => devicesOnMelCloudId.has(device.DeviceID));
423
+
424
+ // Add objects from devicesOnMelCloud to devicesInConfig that do not exist in devicesInConfig
425
+ devicesOnMelCloud.forEach(device => {
426
+ if (!devicesInConfig.some(item => item.id === device.id)) {
427
+ devicesInConfig.push(device);
428
+ }
429
+ });
430
+
431
+ return devicesInConfig;
432
+ }
433
+
392
434
  homebridge.hideSpinner();
393
435
  } catch (e) {
394
436
  document.getElementById('info').innerHTML = 'Please try again.';
package/index.js CHANGED
@@ -105,7 +105,9 @@ class MelCloudPlatform {
105
105
 
106
106
  //Air Conditioner
107
107
  for (const device of account.ataDevices) {
108
- if (!device.id || device.displayMode === 0) {
108
+ //chack device from config exist on melcloud
109
+ const deviceExistInMelCloud = devices.some(dev => dev.DeviceID === device.id);
110
+ if (!deviceExistInMelCloud || device.displayMode === 0) {
109
111
  continue;
110
112
  };
111
113
 
@@ -142,7 +144,9 @@ class MelCloudPlatform {
142
144
 
143
145
  //Heat Pump
144
146
  for (const device of account.atwDevices) {
145
- if (!device.id || device.displayMode === 0) {
147
+ //chack device from config exist on melcloud
148
+ const deviceExistInMelCloud = devices.some(dev => dev.DeviceID === device.id);
149
+ if (!deviceExistInMelCloud || device.displayMode === 0) {
146
150
  continue;
147
151
  };
148
152
 
@@ -180,7 +184,9 @@ class MelCloudPlatform {
180
184
 
181
185
  //Energy Recovery Ventilation
182
186
  for (const device of account.ervDevices) {
183
- if (!device.id || device.displayMode === 0) {
187
+ //chack device from config exist on melcloud
188
+ const deviceExistInMelCloud = devices.some(dev => dev.DeviceID === device.id);
189
+ if (!deviceExistInMelCloud || device.displayMode === 0) {
184
190
  continue;
185
191
  };
186
192
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "3.1.2",
4
+ "version": "3.1.3-beta.1",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",