homebridge-melcloud-control 3.1.3-beta.1 → 3.1.3-beta.11
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/config.schema.json +20 -10
- package/homebridge-ui/public/index.html +29 -108
- package/package.json +1 -1
package/config.schema.json
CHANGED
|
@@ -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
|
-
//
|
|
190
|
-
|
|
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:
|
|
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,25 @@
|
|
|
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
|
+
deviceAta.presets.push(preset);
|
|
239
221
|
};
|
|
222
|
+
textAtaPresets = `ATA Presets: ${newDevices.ataPresets.length}`
|
|
223
|
+
newDevices.ata.push(deviceAta);
|
|
224
|
+
};
|
|
225
|
+
pluginConfig[0].accounts[this.deviceIndex].ataDevices = newDevices.ata;
|
|
226
|
+
textAta = `ATA: ${newDevices.ata.length}`
|
|
240
227
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const presetsAtaInConfig = pluginConfig[0].accounts[this.deviceIndex].ataDevices[index].presets;
|
|
244
|
-
presetsAtaInConfig = syncArrays(presetsOnMelCloud, presetsAtaInConfig);
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
//get device info fom devices atw
|
|
248
|
-
devicesByType.atw.forEach(async (device, index) => {
|
|
228
|
+
//device atw
|
|
229
|
+
for (const device of devicesByType.atw) {
|
|
249
230
|
const deviceId = device.DeviceID;
|
|
250
231
|
const deviceType = device.Type;
|
|
251
|
-
const deviceTypeText = "Heat Pump";
|
|
252
232
|
const deviceName = device.DeviceName;
|
|
253
233
|
const devicePresets = device.Presets ?? [];
|
|
254
234
|
|
|
255
|
-
//device atw
|
|
256
235
|
const deviceAtw = {
|
|
257
236
|
id: deviceId,
|
|
258
237
|
type: deviceType,
|
|
259
|
-
typeString:
|
|
238
|
+
typeString: "Heat Pump",
|
|
260
239
|
name: deviceName,
|
|
261
240
|
displayMode: 1,
|
|
262
241
|
temperatureSensor: false,
|
|
@@ -273,15 +252,8 @@
|
|
|
273
252
|
presets: [],
|
|
274
253
|
buttonsSensors: []
|
|
275
254
|
};
|
|
276
|
-
|
|
277
|
-
|
|
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
|
|
255
|
+
|
|
256
|
+
//presets
|
|
285
257
|
for (const preset of devicePresets) {
|
|
286
258
|
const presetId = preset.ID;
|
|
287
259
|
const presetName = preset.NumberDescription;
|
|
@@ -290,34 +262,25 @@
|
|
|
290
262
|
preset.name = presetName;
|
|
291
263
|
preset.displayType == 0;
|
|
292
264
|
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}`
|
|
265
|
+
deviceAtw.presets.push(preset);
|
|
301
266
|
};
|
|
267
|
+
textAtwPresets = `ATW Presets: ${newDevices.atwPresets.length}`
|
|
268
|
+
newDevices.ata.push(deviceAtw);
|
|
269
|
+
};
|
|
270
|
+
pluginConfig[0].accounts[this.deviceIndex].atwDevices = newDevices.atw;
|
|
271
|
+
textAtw = `ATW: ${newDevices.atw.length}`
|
|
302
272
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
presetsAtwInConfig = syncArrays(presetsOnMelCloud, presetsAtwInConfig);
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
//get device info fom devices erv
|
|
309
|
-
devicesByType.erv.forEach(async (device, index) => {
|
|
273
|
+
//device erv
|
|
274
|
+
for (const device of devicesByType.erv) {
|
|
310
275
|
const deviceId = device.DeviceID;
|
|
311
276
|
const deviceType = device.Type;
|
|
312
|
-
const deviceTypeText = "Energy Recovery Ventilation";
|
|
313
277
|
const deviceName = device.DeviceName;
|
|
314
278
|
const devicePresets = device.Presets ?? [];
|
|
315
279
|
|
|
316
|
-
//device erv
|
|
317
280
|
const deviceErv = {
|
|
318
281
|
id: deviceId,
|
|
319
282
|
type: deviceType,
|
|
320
|
-
typeString:
|
|
283
|
+
typeString: "Energy Recovery Ventilation",
|
|
321
284
|
name: deviceName,
|
|
322
285
|
displayMode: 1,
|
|
323
286
|
temperatureSensor: false,
|
|
@@ -328,13 +291,6 @@
|
|
|
328
291
|
presets: [],
|
|
329
292
|
buttonsSensors: []
|
|
330
293
|
};
|
|
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
294
|
|
|
339
295
|
//presets
|
|
340
296
|
for (const preset of devicePresets) {
|
|
@@ -345,31 +301,13 @@
|
|
|
345
301
|
preset.name = presetName;
|
|
346
302
|
preset.displayType == 0;
|
|
347
303
|
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}`
|
|
304
|
+
deviceErv.presets.push(preset);
|
|
356
305
|
};
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
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);
|
|
306
|
+
textErvPresets = `ERV Presets: ${newDevices.ErvPresets.length}`
|
|
307
|
+
newDevices.erv.push(deviceErv);
|
|
308
|
+
};
|
|
309
|
+
pluginConfig[0].accounts[this.deviceIndex].ervDevices = newDevices.erv;
|
|
310
|
+
textErv = `ERV: ${newDevices.erv.length}`
|
|
373
311
|
|
|
374
312
|
const newDevicesCount = newDevices.ata.length + newDevices.atw.length + newDevices.erv.length ?? 0;
|
|
375
313
|
const newPresetsCount = newDevices.ataPresets.length + newDevices.atwPresets.length + newDevices.ervPresets.length ?? 0;
|
|
@@ -414,23 +352,6 @@
|
|
|
414
352
|
break;
|
|
415
353
|
};
|
|
416
354
|
|
|
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
355
|
homebridge.hideSpinner();
|
|
435
356
|
} catch (e) {
|
|
436
357
|
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.11",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|