homebridge-melcloud-control 4.1.2-beta.3 → 4.1.2-beta.5
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 +0 -2
- package/package.json +1 -1
- package/src/deviceata.js +4 -3
- package/src/deviceatw.js +3 -2
- package/src/deviceerv.js +1 -1
- package/src/melcloud.js +20 -16
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.5",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|
package/src/deviceata.js
CHANGED
|
@@ -683,8 +683,9 @@ class DeviceAta extends EventEmitter {
|
|
|
683
683
|
if (this.presets.length > 0) {
|
|
684
684
|
if (this.logDebug) this.emit('debug', `Prepare presets services`);
|
|
685
685
|
this.presetsServices = [];
|
|
686
|
+
const presetsIdKey = this.accountType === 'melcloud' ? 'ID' : 'Id';
|
|
686
687
|
this.presets.forEach((preset, i) => {
|
|
687
|
-
const presetData = presetsOnServer.find(p => p
|
|
688
|
+
const presetData = presetsOnServer.find(p => p[presetsIdKey] === preset.id);
|
|
688
689
|
|
|
689
690
|
//get preset name
|
|
690
691
|
const name = preset.name;
|
|
@@ -765,7 +766,7 @@ class DeviceAta extends EventEmitter {
|
|
|
765
766
|
})
|
|
766
767
|
.onSet(async (state) => {
|
|
767
768
|
try {
|
|
768
|
-
const
|
|
769
|
+
const fanKey = this.accountType === 'melcloud' ? 'FanSpeed' : 'SetFanSpeed';
|
|
769
770
|
let effectiveFlags = null;
|
|
770
771
|
switch (mode) {
|
|
771
772
|
case 0: //POWER ON,OFF
|
|
@@ -1017,7 +1018,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1017
1018
|
|
|
1018
1019
|
//keys
|
|
1019
1020
|
const presetsKey = this.accountType === 'melcloud' ? 'Presets' : 'Schedule';
|
|
1020
|
-
const presetsIdKey =
|
|
1021
|
+
const presetsIdKey = this.accountType === 'melcloud' ? 'ID' : 'Id';
|
|
1021
1022
|
const setTempKey = this.accountType === 'melcloud' ? 'SetTemperature' : 'SetPoint';
|
|
1022
1023
|
const fanKey = this.accountType === 'melcloud' ? 'FanSpeed' : 'SetFanSpeed';
|
|
1023
1024
|
const tempStepKey = this.accountType === 'melcloud' ? 'TemperatureIncrement' : 'HasHalfDegreeIncrements';
|
package/src/deviceatw.js
CHANGED
|
@@ -1055,8 +1055,9 @@ class DeviceAtw extends EventEmitter {
|
|
|
1055
1055
|
if (this.presets.length > 0) {
|
|
1056
1056
|
if (this.logDebug) this.emit('debug', `Prepare presets services`);
|
|
1057
1057
|
this.presetsServices = [];
|
|
1058
|
+
const presetsIdKey = this.accountType === 'melcloud' ? 'ID' : 'Id';
|
|
1058
1059
|
this.presets.forEach((preset, i) => {
|
|
1059
|
-
const presetData = presetsOnServer.find(p => p
|
|
1060
|
+
const presetData = presetsOnServer.find(p => p[presetsIdKey] === preset.id);
|
|
1060
1061
|
|
|
1061
1062
|
//get preset name
|
|
1062
1063
|
const name = preset.name;
|
|
@@ -1331,7 +1332,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1331
1332
|
|
|
1332
1333
|
//keys
|
|
1333
1334
|
const presetsKey = this.accountType === 'melcloud' ? 'Presets' : 'Schedule';
|
|
1334
|
-
const presetsIdKey =
|
|
1335
|
+
const presetsIdKey = accountType === 'melcloud' ? 'ID' : 'Id';
|
|
1335
1336
|
const tempStepKey = this.accountType === 'melcloud' ? 'TemperatureIncrement' : 'HasHalfDegreeIncrements';
|
|
1336
1337
|
const errorKey = this.accountType === 'melcloud' ? 'HasError' : 'IsInError';
|
|
1337
1338
|
|
package/src/deviceerv.js
CHANGED
|
@@ -877,7 +877,7 @@ class DeviceErv extends EventEmitter {
|
|
|
877
877
|
|
|
878
878
|
//keys
|
|
879
879
|
const presetsKey = this.accountType === 'melcloud' ? 'Presets' : 'Schedule';
|
|
880
|
-
const presetsIdKey =
|
|
880
|
+
const presetsIdKey = accountType === 'melcloud' ? 'ID' : 'Id';
|
|
881
881
|
const fanKey = this.accountType === 'melcloud' ? 'FanSpeed' : 'SetFanSpeed';
|
|
882
882
|
const tempStepKey = this.accountType === 'melcloud' ? 'TemperatureIncrement' : 'HasHalfDegreeIncrements';
|
|
883
883
|
const errorKey = this.accountType === 'melcloud' ? 'HasError' : 'IsInError';
|
package/src/melcloud.js
CHANGED
|
@@ -235,17 +235,18 @@ class MelCloud extends EventEmitter {
|
|
|
235
235
|
if (this.logDebug) this.emit('debug', `Buildings list saved`);
|
|
236
236
|
|
|
237
237
|
const devices = buildingsList.flatMap(building => {
|
|
238
|
-
//
|
|
239
|
-
// Rekurencyjna funkcja kapitalizująca klucze w całym obiekcie (łącznie z tablicami)
|
|
238
|
+
// Rekurencyjna funkcja kapitalizująca klucze w całym obiekcie (bezpieczna)
|
|
240
239
|
const capitalizeKeysDeep = obj => {
|
|
241
240
|
if (Array.isArray(obj)) {
|
|
242
241
|
return obj.map(item => capitalizeKeysDeep(item));
|
|
243
242
|
} else if (obj && typeof obj === 'object' && obj.constructor === Object) {
|
|
244
243
|
return Object.fromEntries(
|
|
245
|
-
Object.entries(obj).map(([key, value]) =>
|
|
246
|
-
key
|
|
247
|
-
|
|
248
|
-
|
|
244
|
+
Object.entries(obj).map(([key, value]) => {
|
|
245
|
+
const safeKey = typeof key === 'string'
|
|
246
|
+
? key.charAt(0).toUpperCase() + key.slice(1)
|
|
247
|
+
: key;
|
|
248
|
+
return [safeKey, capitalizeKeysDeep(value)];
|
|
249
|
+
})
|
|
249
250
|
);
|
|
250
251
|
}
|
|
251
252
|
return obj;
|
|
@@ -253,18 +254,20 @@ class MelCloud extends EventEmitter {
|
|
|
253
254
|
|
|
254
255
|
// Funkcja tworząca finalny obiekt Device
|
|
255
256
|
const createDevice = (device, type, headers = {}) => {
|
|
256
|
-
const settingsArray = device.Settings
|
|
257
|
+
const settingsArray = Array.isArray(device.Settings) ? device.Settings : [];
|
|
257
258
|
|
|
258
259
|
const settingsObject = Object.fromEntries(
|
|
259
|
-
settingsArray
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
260
|
+
settingsArray
|
|
261
|
+
.filter(item => item && typeof item.name === 'string') // 🔒 tylko poprawne wpisy
|
|
262
|
+
.map(({ name, value }) => {
|
|
263
|
+
let parsedValue = value;
|
|
264
|
+
if (value === "True") parsedValue = true;
|
|
265
|
+
else if (value === "False") parsedValue = false;
|
|
266
|
+
else if (typeof value === 'string' && !isNaN(Number(value)) && value.trim() !== "") parsedValue = Number(value);
|
|
267
|
+
|
|
268
|
+
const key = name.charAt(0).toUpperCase() + name.slice(1);
|
|
269
|
+
return [key, parsedValue];
|
|
270
|
+
})
|
|
268
271
|
);
|
|
269
272
|
|
|
270
273
|
const deviceObject = {
|
|
@@ -291,6 +294,7 @@ class MelCloud extends EventEmitter {
|
|
|
291
294
|
...(building.airToWaterUnits || []).map(d => createDevice(capitalizeKeysDeep(d), 1)),
|
|
292
295
|
...(building.airToVentilationUnits || []).map(d => createDevice(capitalizeKeysDeep(d), 3))
|
|
293
296
|
];
|
|
297
|
+
|
|
294
298
|
});
|
|
295
299
|
|
|
296
300
|
const devicesCount = devices.length;
|