homebridge-melcloud-control 4.1.2-beta.43 → 4.1.2-beta.45
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 +60 -32
- package/package.json +1 -1
|
@@ -254,47 +254,75 @@
|
|
|
254
254
|
const removedErv = removeStaleDevices(account.ervDevices, devicesByType.erv);
|
|
255
255
|
|
|
256
256
|
const handleDevices = (devicesInMelCloud, devicesInConfig, typeString, newArr, newPresets) => {
|
|
257
|
-
|
|
258
|
-
const
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
if (deviceInConfig) {
|
|
276
|
-
const idKey = account.type === 'melcloud' ? 'ID' : 'Id';
|
|
277
|
-
const typeKey = account.type === 'melcloud' ? 'Presets' : 'Schedule';
|
|
278
|
-
const typeKey1 = account.type === 'melcloud' ? 'presets' : 'schedules';
|
|
279
|
-
const presets = device[typeKey] || [];
|
|
280
|
-
presets.forEach((preset, index) => {
|
|
281
|
-
const presetObj = {
|
|
282
|
-
id: preset[idKey],
|
|
257
|
+
try {
|
|
258
|
+
const configDevicesMap = new Map(devicesInConfig.map(dev => [String(dev.id), dev]));
|
|
259
|
+
const isMelcloud = account.type === 'melcloud';
|
|
260
|
+
|
|
261
|
+
const idKey = isMelcloud ? 'ID' : 'Id';
|
|
262
|
+
const typeKey = isMelcloud ? 'Presets' : 'Schedule';
|
|
263
|
+
const typeKey1 = isMelcloud ? 'presets' : 'schedules';
|
|
264
|
+
|
|
265
|
+
devicesInMelCloud.forEach(device => {
|
|
266
|
+
const deviceId = String(device.DeviceID);
|
|
267
|
+
let deviceInConfig = configDevicesMap.get(deviceId);
|
|
268
|
+
|
|
269
|
+
// === Create device if missing ===
|
|
270
|
+
if (!deviceInConfig) {
|
|
271
|
+
deviceInConfig = {
|
|
272
|
+
id: device.DeviceID,
|
|
273
|
+
type: device.Type,
|
|
274
|
+
typeString,
|
|
283
275
|
displayType: 0,
|
|
284
|
-
name:
|
|
285
|
-
|
|
276
|
+
name: device.DeviceName,
|
|
277
|
+
presets: [],
|
|
278
|
+
schedules: [],
|
|
279
|
+
buttonsSensors: []
|
|
286
280
|
};
|
|
281
|
+
devicesInConfig.push(deviceInConfig);
|
|
282
|
+
newArr.push(deviceInConfig);
|
|
283
|
+
configDevicesMap.set(deviceId, deviceInConfig);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// === Process presets/schedules ===
|
|
287
|
+
const presets = device[typeKey] || [];
|
|
288
|
+
const presetsInConfig = deviceInConfig[typeKey1] || [];
|
|
289
|
+
const presetIds = new Set(presetsInConfig.map(p => String(p.id)));
|
|
290
|
+
|
|
291
|
+
let addedNewPreset = false;
|
|
287
292
|
|
|
288
|
-
|
|
289
|
-
|
|
293
|
+
presets.forEach((preset, index) => {
|
|
294
|
+
const presetId = String(preset[idKey]);
|
|
295
|
+
if (!presetIds.has(presetId)) {
|
|
296
|
+
const presetObj = {
|
|
297
|
+
id: presetId,
|
|
298
|
+
displayType: 0,
|
|
299
|
+
name: preset.NumberDescription || `Schedule ${index}`,
|
|
300
|
+
namePrefix: false
|
|
301
|
+
};
|
|
290
302
|
presetsInConfig.push(presetObj);
|
|
291
303
|
newPresets.push(presetObj);
|
|
304
|
+
presetIds.add(presetId);
|
|
305
|
+
addedNewPreset = true;
|
|
292
306
|
}
|
|
293
307
|
});
|
|
294
|
-
|
|
295
|
-
|
|
308
|
+
|
|
309
|
+
// === Remove placeholder presets/schedules (id === '0') if new ones were added ===
|
|
310
|
+
if (addedNewPreset) {
|
|
311
|
+
const beforeCount = presetsInConfig.length;
|
|
312
|
+
deviceInConfig[typeKey1] = presetsInConfig.filter(p => String(p.id) !== '0');
|
|
313
|
+
const removedCount = beforeCount - deviceInConfig[typeKey1].length;
|
|
314
|
+
|
|
315
|
+
if (removedCount > 0 && removedCount < beforeCount) {
|
|
316
|
+
updateInfo('info', `Removed ${removedCount} placeholder ${typeKey1} from device ${device.DeviceID}`, 'yellow');
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
} catch (error) {
|
|
321
|
+
updateInfo('info', `Error while processing device: ${error.message || error}`, 'red');
|
|
322
|
+
}
|
|
296
323
|
};
|
|
297
324
|
|
|
325
|
+
|
|
298
326
|
handleDevices(devicesByType.ata, account.ataDevices, "Air Conditioner", newDevices.ata, newDevices.ataPresets);
|
|
299
327
|
handleDevices(devicesByType.atw, account.atwDevices, "Heat Pump", newDevices.atw, newDevices.atwPresets);
|
|
300
328
|
handleDevices(devicesByType.erv, account.ervDevices, "Energy Recovery Ventilation", newDevices.erv, newDevices.ervPresets);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "4.1.2-beta.
|
|
4
|
+
"version": "4.1.2-beta.45",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|