homebridge-melcloud-control 3.1.3-beta.2 → 3.1.3-beta.4

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.
@@ -151,11 +151,6 @@
151
151
  const info = response.info ?? '';
152
152
  const status = response.status;
153
153
  const devices = response.data ?? [];
154
- const devicesByType = {
155
- ata: [],
156
- atw: [],
157
- erv: []
158
- };
159
154
 
160
155
  //new found devices
161
156
  const newDevices = {
@@ -178,199 +173,174 @@
178
173
  //response status
179
174
  switch (status) {
180
175
  case 0:
181
- //get devices by type
182
- for (const device of devices) {
183
- const deviceType = device.Type;
184
- const pusDeviceTypeAta = deviceType === 0 ? devicesByType.ata.push(device) : false;
185
- const pusDeviceTypeAtw = deviceType === 1 ? devicesByType.atw.push(device) : false;
186
- const pusDeviceTypeErv = deviceType === 3 ? devicesByType.erv.push(device) : false;
187
- };
176
+ //compare arrays and update array in config
177
+ const devicesOnMelCloud = devices;
178
+ const devicesOnMelCloudId = new Set(devicesOnMelCloud.map(device => device.DeviceID));
179
+
180
+ let devicesAtaInConfig = pluginConfig[0].accounts[this.deviceIndex].ataDevices ?? [];
181
+ devicesAtaInConfig = devicesAtaInConfig.filter(device => devicesOnMelCloudId.has(device.id));
188
182
 
189
- //get device info fom devices ata
190
- devicesByType.ata.forEach(async (device, index) => {
183
+ let devicesAtwInConfig = pluginConfig[0].accounts[this.deviceIndex].atwDevices ?? [];
184
+ devicesAtwInConfig = devicesAtwInConfig.filter(device => devicesOnMelCloudId.has(device.id));
185
+
186
+ let devicesErvInConfig = pluginConfig[0].accounts[this.deviceIndex].ervDevices ?? [];
187
+ devicesErvInConfig = devicesErvInConfig.filter(device => devicesOnMelCloudId.has(device.id));
188
+
189
+
190
+ // Add objects from devicesOnMelCloud to devicesInConfig that do not exist in devicesInConfig
191
+ devicesOnMelCloud.forEach((device, index) => {
191
192
  const deviceId = device.DeviceID;
192
193
  const deviceType = device.Type;
193
- const deviceTypeText = "Air Conditioner";
194
194
  const deviceName = device.DeviceName;
195
- const devicePresets = device.Presets ?? [];
195
+ const devicePresetsOnMelcloud = device.Presets ?? [];
196
196
 
197
197
  //device ata
198
- const deviceAta = {
199
- id: deviceId,
200
- type: deviceType,
201
- typeString: deviceTypeText,
202
- name: deviceName,
203
- displayMode: 1,
204
- heatDryFanMode: 1,
205
- coolDryFanMode: 1,
206
- autoDryFanMode: 1,
207
- temperatureSensor: false,
208
- temperatureSensorOutdoor: false,
209
- presets: [],
210
- buttonsSensors: []
198
+ if (deviceType === 0) {
199
+ if (!devicesAtaInConfig.some(item => item.id === device.id)) {
200
+ const deviceAta = {
201
+ id: deviceId,
202
+ type: deviceType,
203
+ typeString: "Air Conditioner",
204
+ name: deviceName,
205
+ displayMode: 1,
206
+ heatDryFanMode: 1,
207
+ coolDryFanMode: 1,
208
+ autoDryFanMode: 1,
209
+ temperatureSensor: false,
210
+ temperatureSensorOutdoor: false,
211
+ presets: [],
212
+ buttonsSensors: []
213
+ };
214
+
215
+ //presets
216
+ const presetsOnMelCloudId = new Set(devicePresetsOnMelcloud.map(preset => preset.ID));
217
+ let presetsAtaInConfig = pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets ?? [];
218
+ presetsAtaInConfig = presetsAtaInConfig.filter(preset => presetsOnMelCloudId.has(preset.id));
219
+
220
+ for (const preset of presetsAtaInConfig) {
221
+ const presetId = preset.ID;
222
+ const presetName = preset.NumberDescription;
223
+
224
+ preset.id = presetId;
225
+ preset.name = presetName;
226
+ preset.displayType == 0;
227
+ preset.namePrefix = false;
228
+ newDevices.ataPresets.push(preset);
229
+ };
230
+ textAtaPresets = `ATA Presets: ${newDevices.ataPresets.length}`
231
+
232
+ deviceAta.ataPresets = newDevices.ataPresets;
233
+ newDevices.ata.push(deviceAta);
234
+ };
235
+ pluginConfig[0].accounts[this.deviceIndex].ataDevices = newDevices.ata;
236
+ textAta = `ATA: ${newDevices.ata.length}`
211
237
  };
212
-
213
- const ataDevicesExist = pluginConfig[0].accounts[this.deviceIndex].ataDevices ?? [];
214
- const ataDevices = ataDevicesExist.length > 0 ? 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
- //presets
223
- for (const preset of devicePresets) {
224
- const presetId = preset.ID;
225
- const presetName = preset.NumberDescription;
226
-
227
- preset.id = presetId;
228
- preset.name = presetName;
229
- preset.displayType == 0;
230
- preset.namePrefix = false;
231
-
232
- const ataPresetsExist = pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets ?? [];
233
- const ataPresets = ataPresetsExist.length > 0 ? 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}`
239
- };
240
-
241
- //compare presets
242
- const presetsOnMelCloud = devicePresets;
243
- const presetsAtaInConfig = pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets;
244
- pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets = syncArrays(presetsOnMelCloud, presetsAtaInConfig);
245
238
  });
246
239
 
247
- //get device info fom devices atw
248
- devicesByType.atw.forEach(async (device, index) => {
240
+ devicesOnMelCloud.forEach((device, index) => {
249
241
  const deviceId = device.DeviceID;
250
242
  const deviceType = device.Type;
251
- const deviceTypeText = "Heat Pump";
252
243
  const deviceName = device.DeviceName;
253
- const devicePresets = device.Presets ?? [];
244
+ const devicePresetsOnMelcloud = device.Presets ?? [];
254
245
 
255
246
  //device atw
256
- const deviceAtw = {
257
- id: deviceId,
258
- type: deviceType,
259
- typeString: deviceTypeText,
260
- name: deviceName,
261
- displayMode: 1,
262
- temperatureSensor: false,
263
- temperatureSensorFlow: false,
264
- temperatureSensorReturn: false,
265
- temperatureSensorFlowZone1: false,
266
- temperatureSensorReturnZone1: false,
267
- temperatureSensorFlowWaterTank: false,
268
- temperatureSensorReturnWaterTank: false,
269
- temperatureSensorFlowZone2: false,
270
- temperatureSensorReturnZone2: false,
271
- temperatureSensor: false,
272
- temperatureSensorOutdoor: false,
273
- presets: [],
274
- buttonsSensors: []
275
- };
276
- const atwDevicesExist = pluginConfig[0].accounts[this.deviceIndex].atwDevices ?? [];
277
- const atwDevices = atwDevicesExist.length > 0 ? 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
285
- for (const preset of devicePresets) {
286
- const presetId = preset.ID;
287
- const presetName = preset.NumberDescription;
288
-
289
- preset.id = presetId;
290
- preset.name = presetName;
291
- preset.displayType == 0;
292
- preset.namePrefix = false;
293
-
294
- const atwPresetsExist = pluginConfig[0].accounts[this.deviceIndex].atwDevices[index].presets ?? [];
295
- const atwPresets = atwPresetsExist.length > 0 ? 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}`
247
+ if (deviceType === 1) {
248
+ if (!devicesAtwInConfig.some(item => item.id === device.id)) {
249
+ const deviceAtw = {
250
+ id: deviceId,
251
+ type: deviceType,
252
+ typeString: "Heat Pump",
253
+ name: deviceName,
254
+ displayMode: 1,
255
+ temperatureSensor: false,
256
+ temperatureSensorFlow: false,
257
+ temperatureSensorReturn: false,
258
+ temperatureSensorFlowZone1: false,
259
+ temperatureSensorReturnZone1: false,
260
+ temperatureSensorFlowWaterTank: false,
261
+ temperatureSensorReturnWaterTank: false,
262
+ temperatureSensorFlowZone2: false,
263
+ temperatureSensorReturnZone2: false,
264
+ temperatureSensor: false,
265
+ temperatureSensorOutdoor: false,
266
+ presets: [],
267
+ buttonsSensors: []
268
+ };
269
+
270
+ //presets
271
+ const presetsOnMelCloudId = new Set(devicePresetsOnMelcloud.map(preset => preset.ID));
272
+ let presetsAtwInConfig = pluginConfig[0].accounts[this.deviceIndex].atwDevices[index].presets ?? [];
273
+ presetsAtwInConfig = presetsAtwInConfig.filter(preset => presetsOnMelCloudId.has(preset.id));
274
+
275
+ for (const preset of presetsAtwInConfig) {
276
+ const presetId = preset.ID;
277
+ const presetName = preset.NumberDescription;
278
+
279
+ preset.id = presetId;
280
+ preset.name = presetName;
281
+ preset.displayType == 0;
282
+ preset.namePrefix = false;
283
+ newDevices.atwPresets.push(preset);
284
+ };
285
+ textAtwPresets = `ATA Presets: ${newDevices.atwPresets.length}`
286
+
287
+ deviceAtw.atwPresets = deviceAtw.atwPresets;
288
+ newDevices.ata.push(deviceAtw);
289
+ };
290
+ pluginConfig[0].accounts[this.deviceIndex].atwDevices = newDevices.atw;
291
+ textAtw = `ATW: ${newDevices.atw.length}`
301
292
  };
302
-
303
- const presetsOnMelCloud = devicePresets;
304
- const presetsAtwInConfig = pluginConfig[0].accounts[this.deviceIndex].atwDevices[index].presets;
305
- pluginConfig[0].accounts[this.deviceIndex].atwDevices[index].presets = syncArrays(presetsOnMelCloud, presetsAtwInConfig);
306
293
  });
307
294
 
308
- //get device info fom devices erv
309
- devicesByType.erv.forEach(async (device, index) => {
295
+ devicesOnMelCloud.forEach((device, index) => {
310
296
  const deviceId = device.DeviceID;
311
297
  const deviceType = device.Type;
312
- const deviceTypeText = "Energy Recovery Ventilation";
313
298
  const deviceName = device.DeviceName;
314
- const devicePresets = device.Presets ?? [];
299
+ const devicePresetsOnMelcloud = device.Presets ?? [];
315
300
 
316
301
  //device erv
317
- const deviceErv = {
318
- id: deviceId,
319
- type: deviceType,
320
- typeString: deviceTypeText,
321
- name: deviceName,
322
- displayMode: 1,
323
- temperatureSensor: false,
324
- temperatureSensorOutdoor: false,
325
- temperatureSensorSupply: false,
326
- temperatureSensor: false,
327
- temperatureSensorOutdoor: false,
328
- presets: [],
329
- buttonsSensors: []
330
- };
331
- const ervDevicesExist = pluginConfig[0].accounts[this.deviceIndex].ervDevices ?? [];
332
- const ervDevices = ervDevicesExist.length > 0 ? 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
-
339
- //presets
340
- for (const preset of devicePresets) {
341
- const presetId = preset.ID;
342
- const presetName = preset.NumberDescription;
343
-
344
- preset.id = presetId;
345
- preset.name = presetName;
346
- preset.displayType == 0;
347
- preset.namePrefix = false;
348
-
349
- const ervPresetsExist = pluginConfig[0].accounts[this.deviceIndex].ervDevices[index].presets ?? [];
350
- const ervPresets = ervPresetsExist.length > 0 ? 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}`
302
+ if (deviceType === 3) {
303
+ if (!devicesAtwInConfig.some(item => item.id === device.id)) {
304
+ const deviceErv = {
305
+ id: deviceId,
306
+ type: deviceType,
307
+ typeString: "Energy Recovery Ventilation",
308
+ name: deviceName,
309
+ displayMode: 1,
310
+ temperatureSensor: false,
311
+ temperatureSensorOutdoor: false,
312
+ temperatureSensorSupply: false,
313
+ temperatureSensor: false,
314
+ temperatureSensorOutdoor: false,
315
+ presets: [],
316
+ buttonsSensors: []
317
+ };
318
+
319
+ //presets
320
+ const presetsOnMelCloudId = new Set(devicePresetsOnMelcloud.map(preset => preset.ID));
321
+ let presetsErvInConfig = pluginConfig[0].accounts[this.deviceIndex].ervDevices[index].presets ?? [];
322
+ presetsErvInConfig = presetsErvInConfig.filter(preset => presetsOnMelCloudId.has(preset.id));
323
+
324
+ for (const preset of presetsErvInConfig) {
325
+ const presetId = preset.ID;
326
+ const presetName = preset.NumberDescription;
327
+
328
+ preset.id = presetId;
329
+ preset.name = presetName;
330
+ preset.displayType == 0;
331
+ preset.namePrefix = false;
332
+ newDevices.atwPresets.push(preset);
333
+ };
334
+ textErvPresets = `ATA Presets: ${newDevices.ErvPresets.length}`
335
+
336
+ deviceErv.atwPresets = deviceErv.ervPresets;
337
+ newDevices.erv.push(deviceErv);
338
+ };
339
+ pluginConfig[0].accounts[this.deviceIndex].ervDevices = newDevices.erv;
340
+ textErv = `ERV: ${newDevices.erv.length}`
356
341
  };
357
-
358
- const presetsOnMelCloud = devicePresets;
359
- const presetsErvInConfig = pluginConfig[0].accounts[this.deviceIndex].ervDevices[index].presets;
360
- pluginConfig[0].accounts[this.deviceIndex].ervDevices[index].presets = await syncArrays(presetsOnMelCloud, presetsErvInConfig);
361
342
  });
362
343
 
363
- //compare arrays and update array in config
364
- const devicesOnMelCloud = devices;
365
- const devicesAtaInConfig = pluginConfig[0].accounts[this.deviceIndex].ataDevices;
366
- pluginConfig[0].accounts[this.deviceIndex].ataDevices = await syncArrays(devicesOnMelCloud, devicesAtaInConfig);
367
-
368
- const devicesAtwInConfig = pluginConfig[0].accounts[this.deviceIndex].atwDevices;
369
- pluginConfig[0].accounts[this.deviceIndex].atwDevices = await syncArrays(devicesOnMelCloud, devicesAtwInConfig);
370
-
371
- const devicesErvInConfig = pluginConfig[0].accounts[this.deviceIndex].ervDevices;
372
- pluginConfig[0].accounts[this.deviceIndex].ervDevices = await syncArrays(devicesOnMelCloud, devicesErvInConfig);
373
-
374
344
  const newDevicesCount = newDevices.ata.length + newDevices.atw.length + newDevices.erv.length ?? 0;
375
345
  const newPresetsCount = newDevices.ataPresets.length + newDevices.atwPresets.length + newDevices.ervPresets.length ?? 0;
376
346
  if (newDevicesCount === 0 && newPresetsCount === 0) {
@@ -414,23 +384,6 @@
414
384
  break;
415
385
  };
416
386
 
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
387
  homebridge.hideSpinner();
435
388
  } catch (e) {
436
389
  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.2",
4
+ "version": "3.1.3-beta.4",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",