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.
- package/homebridge-ui/public/index.html +143 -190
- package/package.json +1 -1
|
@@ -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
|
-
//
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
-
|
|
190
|
-
|
|
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
|
|
195
|
+
const devicePresetsOnMelcloud = device.Presets ?? [];
|
|
196
196
|
|
|
197
197
|
//device ata
|
|
198
|
-
|
|
199
|
-
id
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
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
|
|
244
|
+
const devicePresetsOnMelcloud = device.Presets ?? [];
|
|
254
245
|
|
|
255
246
|
//device atw
|
|
256
|
-
|
|
257
|
-
id
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
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
|
-
|
|
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
|
|
299
|
+
const devicePresetsOnMelcloud = device.Presets ?? [];
|
|
315
300
|
|
|
316
301
|
//device erv
|
|
317
|
-
|
|
318
|
-
id
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
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.
|
|
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",
|