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

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,17 +213,20 @@
213
213
  "id": {
214
214
  "title": "ID",
215
215
  "type": "integer",
216
- "required": true
216
+ "required": true,
217
+ "readonly": true
217
218
  },
218
219
  "type": {
219
220
  "title": "Type",
220
221
  "type": "integer",
221
- "required": true
222
+ "required": true,
223
+ "readonly": true
222
224
  },
223
225
  "typeString": {
224
226
  "title": "Type",
225
227
  "type": "string",
226
- "required": true
228
+ "required": true,
229
+ "readonly": true
227
230
  },
228
231
  "name": {
229
232
  "title": "Name",
@@ -757,17 +760,20 @@
757
760
  "id": {
758
761
  "title": "Mode",
759
762
  "type": "integer",
760
- "required": true
763
+ "required": true,
764
+ "readonly": true
761
765
  },
762
766
  "type": {
763
767
  "title": "Type",
764
768
  "type": "integer",
765
- "required": true
769
+ "required": true,
770
+ "readonly": true
766
771
  },
767
772
  "typeString": {
768
773
  "title": "Type",
769
774
  "type": "string",
770
- "required": true
775
+ "required": true,
776
+ "readonly": true
771
777
  },
772
778
  "name": {
773
779
  "title": "Name",
@@ -1168,17 +1174,20 @@
1168
1174
  "id": {
1169
1175
  "title": "Mode",
1170
1176
  "type": "integer",
1171
- "required": true
1177
+ "required": true,
1178
+ "readonly": true
1172
1179
  },
1173
1180
  "type": {
1174
1181
  "title": "Type",
1175
1182
  "type": "integer",
1176
- "required": true
1183
+ "required": true,
1184
+ "readonly": true
1177
1185
  },
1178
1186
  "typeString": {
1179
1187
  "title": "Type",
1180
1188
  "type": "string",
1181
- "required": true
1189
+ "required": true,
1190
+ "readonly": true
1182
1191
  },
1183
1192
  "name": {
1184
1193
  "title": "Name",
@@ -1244,7 +1253,8 @@
1244
1253
  "id": {
1245
1254
  "title": "ID",
1246
1255
  "type": "integer",
1247
- "required": true
1256
+ "required": true,
1257
+ "readonly": true
1248
1258
  },
1249
1259
  "name": {
1250
1260
  "title": "Name",
@@ -186,19 +186,17 @@
186
186
  const pusDeviceTypeErv = deviceType === 3 ? devicesByType.erv.push(device) : false;
187
187
  };
188
188
 
189
- //get device info fom devices ata
190
- devicesByType.ata.forEach(async (device, index) => {
189
+ //device ata
190
+ for (const device of devicesByType.ata) {
191
191
  const deviceId = device.DeviceID;
192
192
  const deviceType = device.Type;
193
- const deviceTypeText = "Air Conditioner";
194
193
  const deviceName = device.DeviceName;
195
194
  const devicePresets = device.Presets ?? [];
196
195
 
197
- //device ata
198
196
  const deviceAta = {
199
197
  id: deviceId,
200
198
  type: deviceType,
201
- typeString: deviceTypeText,
199
+ typeString: "Air Conditioner",
202
200
  name: deviceName,
203
201
  displayMode: 1,
204
202
  heatDryFanMode: 1,
@@ -210,15 +208,6 @@
210
208
  buttonsSensors: []
211
209
  };
212
210
 
213
- const ataDevicesExist = pluginConfig[0].accounts[this.deviceIndex].ataDevices ?? false;
214
- const ataDevices = ataDevicesExist ? pluginConfig[0].accounts[this.deviceIndex].ataDevices : pluginConfig[0].accounts[this.deviceIndex].ataDevices = [];
215
-
216
- const ataDeviceIdExist = ataDevices.some(device => device.id === deviceId);
217
- const pushTypeAta = ataDeviceIdExist ? false : ataDevices.push(deviceAta);
218
- const pushNewDevice = ataDeviceIdExist ? false : newDevices.ata.push(device);
219
- const devicesCount = newDevices.ata.length;
220
- textAta = `ATA: ${devicesCount}`
221
-
222
211
  //presets
223
212
  for (const preset of devicePresets) {
224
213
  const presetId = preset.ID;
@@ -228,35 +217,27 @@
228
217
  preset.name = presetName;
229
218
  preset.displayType == 0;
230
219
  preset.namePrefix = false;
231
-
232
- const ataPresetsExist = pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets ?? false;
233
- const ataPresets = ataPresetsExist ? pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets : pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets = [];
234
- const ataPresetIdExist = ataPresets.some(preset => preset.id === presetId);
235
- const pushPresetAta = ataPresetIdExist ? false : ataPresets.push(preset);
236
- const pushNewPreset = ataPresetIdExist ? false : newDevices.ataPresets.push(preset);
237
- const presetsCount = newDevices.ataPresets.length;
238
- textAtaPresets = `ATA Presets: ${presetsCount}`
220
+ newDevices.ataPresets.push(preset);
239
221
  };
222
+ deviceAta.presets = newDevices.ataPresets;
223
+ textAtaPresets = `ATA Presets: ${newDevices.ataPresets.length}`
240
224
 
241
- //compare presets
242
- const presetsOnMelCloud = devicePresets;
243
- const presetsAtaInConfig = pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets;
244
- presetsAtaInConfig = syncArrays(presetsOnMelCloud, presetsAtaInConfig);
245
- });
225
+ newDevices.ata.push(deviceAta);
226
+ };
227
+ pluginConfig[0].accounts[this.deviceIndex].ataDevices = newDevices.ata;
228
+ textAta = `ATA: ${newDevices.ata.length}`
246
229
 
247
- //get device info fom devices atw
248
- devicesByType.atw.forEach(async (device, index) => {
230
+ //device atw
231
+ for (const device of devicesByType.atw) {
249
232
  const deviceId = device.DeviceID;
250
233
  const deviceType = device.Type;
251
- const deviceTypeText = "Heat Pump";
252
234
  const deviceName = device.DeviceName;
253
235
  const devicePresets = device.Presets ?? [];
254
236
 
255
- //device atw
256
237
  const deviceAtw = {
257
238
  id: deviceId,
258
239
  type: deviceType,
259
- typeString: deviceTypeText,
240
+ typeString: "Heat Pump",
260
241
  name: deviceName,
261
242
  displayMode: 1,
262
243
  temperatureSensor: false,
@@ -273,15 +254,8 @@
273
254
  presets: [],
274
255
  buttonsSensors: []
275
256
  };
276
- const atwDevicesExist = pluginConfig[0].accounts[this.deviceIndex].atwDevices ?? false;
277
- const atwDevices = atwDevicesExist ? pluginConfig[0].accounts[this.deviceIndex].atwDevices : pluginConfig[0].accounts[this.deviceIndex].atwDevices = [];
278
- const atwDeviceIdExist = atwDevices.some(device => device.id === deviceId);
279
- const pushTypeAtw = atwDeviceIdExist ? false : atwDevices.push(deviceAtw);
280
- const pushNewDevice = atwDeviceIdExist ? false : newDevices.atw.push(device);
281
- const devicesCount = newDevices.atw.length;
282
- textAtw = `ATW: ${devicesCount}`
283
-
284
- //presetzs
257
+
258
+ //presets
285
259
  for (const preset of devicePresets) {
286
260
  const presetId = preset.ID;
287
261
  const presetName = preset.NumberDescription;
@@ -290,34 +264,27 @@
290
264
  preset.name = presetName;
291
265
  preset.displayType == 0;
292
266
  preset.namePrefix = false;
293
-
294
- const atwPresetsExist = pluginConfig[0].accounts[this.deviceIndex].atwDevices[index].presets ?? false;
295
- const atwPresets = atwPresetsExist ? pluginConfig[0].accounts[this.deviceIndex].atwDevices[index].presets : pluginConfig[0].accounts[this.deviceIndex].atwDevices[index].presets = [];
296
- const atwPresetIdExist = atwPresets.some(preset => preset.id === presetId);
297
- const pushPresetAtw = atwPresetIdExist ? false : atwPresets.push(preset);
298
- const pushNewPreset = atwPresetIdExist ? false : newDevices.atwPresets.push(preset);
299
- const presetsCount = newDevices.atwPresets.length;
300
- textAtwPresets = `ATW Presets: ${presetsCount}`
267
+ newDevices.atwPresets.push(preset);
301
268
  };
269
+ textAtwPresets = `ATW Presets: ${newDevices.atwPresets.length}`
302
270
 
303
- const presetsOnMelCloud = devicePresets;
304
- const presetsAtwInConfig = pluginConfig[0].accounts[this.deviceIndex].atwDevices[index].presets;
305
- presetsAtwInConfig = syncArrays(presetsOnMelCloud, presetsAtwInConfig);
306
- });
271
+ deviceAtw.presets = deviceAtw.atwPresets;
272
+ newDevices.ata.push(deviceAtw);
273
+ };
274
+ pluginConfig[0].accounts[this.deviceIndex].atwDevices = newDevices.atw;
275
+ textAtw = `ATW: ${newDevices.atw.length}`
307
276
 
308
- //get device info fom devices erv
309
- devicesByType.erv.forEach(async (device, index) => {
277
+ //device erv
278
+ for (const device of devicesByType.erv) {
310
279
  const deviceId = device.DeviceID;
311
280
  const deviceType = device.Type;
312
- const deviceTypeText = "Energy Recovery Ventilation";
313
281
  const deviceName = device.DeviceName;
314
282
  const devicePresets = device.Presets ?? [];
315
283
 
316
- //device erv
317
284
  const deviceErv = {
318
285
  id: deviceId,
319
286
  type: deviceType,
320
- typeString: deviceTypeText,
287
+ typeString: "Energy Recovery Ventilation",
321
288
  name: deviceName,
322
289
  displayMode: 1,
323
290
  temperatureSensor: false,
@@ -328,13 +295,6 @@
328
295
  presets: [],
329
296
  buttonsSensors: []
330
297
  };
331
- const ervDevicesExist = pluginConfig[0].accounts[this.deviceIndex].ervDevices ?? false;
332
- const ervDevices = ervDevicesExist ? pluginConfig[0].accounts[this.deviceIndex].ervDevices : pluginConfig[0].accounts[this.deviceIndex].ervDevices = [];
333
- const ervDeviceIdExist = ervDevices.some(device => device.id === deviceId);
334
- const pushTypeerv = ervDeviceIdExist ? false : ervDevices.push(deviceErv);
335
- const pushNewDevice = ervDeviceIdExist ? false : newDevices.erv.push(device);
336
- const devicesCount = newDevices.erv.length;
337
- textErv = `ERV: ${devicesCount}`
338
298
 
339
299
  //presets
340
300
  for (const preset of devicePresets) {
@@ -345,31 +305,15 @@
345
305
  preset.name = presetName;
346
306
  preset.displayType == 0;
347
307
  preset.namePrefix = false;
348
-
349
- const ervPresetsExist = pluginConfig[0].accounts[this.deviceIndex].ervDevices[index].presets ?? false;
350
- const ervPresets = ervPresetsExist ? pluginConfig[0].accounts[this.deviceIndex].ervDevices[index].presets : pluginConfig[0].accounts[this.deviceIndex].ervDevices[index].presets = [];
351
- const ervPresetIdExist = ervPresets.some(preset => preset.id === presetId);
352
- const pushPresetErv = ervPresetIdExist ? false : ervPresets.push(preset);
353
- const pushNewPreset = ervPresetIdExist ? false : newDevices.ervPresets.push(preset);
354
- const presetsCount = newDevices.ervPresets.length;
355
- textErvPresets = `ERV Presets: ${presetsCount}`
308
+ newDevices.atwPresets.push(preset);
356
309
  };
310
+ textErvPresets = `ERV Presets: ${newDevices.ErvPresets.length}`
357
311
 
358
- const presetsOnMelCloud = devicePresets;
359
- const presetsErvInConfig = pluginConfig[0].accounts[this.deviceIndex].ervDevices[index].presets;
360
- presetsErvInConfig = await syncArrays(presetsOnMelCloud, presetsErvInConfig);
361
- });
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);
312
+ deviceErv.presets = deviceErv.ervPresets;
313
+ newDevices.erv.push(deviceErv);
314
+ };
315
+ pluginConfig[0].accounts[this.deviceIndex].ervDevices = newDevices.erv;
316
+ textErv = `ERV: ${newDevices.erv.length}`
373
317
 
374
318
  const newDevicesCount = newDevices.ata.length + newDevices.atw.length + newDevices.erv.length ?? 0;
375
319
  const newPresetsCount = newDevices.ataPresets.length + newDevices.atwPresets.length + newDevices.ervPresets.length ?? 0;
@@ -414,23 +358,6 @@
414
358
  break;
415
359
  };
416
360
 
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
-
434
361
  homebridge.hideSpinner();
435
362
  } catch (e) {
436
363
  document.getElementById('info').innerHTML = 'Please try again.';
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.3-beta.1",
4
+ "version": "3.1.3-beta.10",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",