homebridge-melcloud-control 4.1.2-beta.2 → 4.1.2-beta.20

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.
@@ -224,8 +224,6 @@
224
224
 
225
225
  document.getElementById('logIn').addEventListener('click', async () => {
226
226
  document.getElementById(`logIn`).className = "btn btn-primary";
227
-
228
- updateInfo('info', 'Connecting...', 'yellow');
229
227
  homebridge.showSpinner();
230
228
 
231
229
  try {
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.2",
4
+ "version": "4.1.2-beta.20",
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.ID === preset.Id);
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 key = this.accountType === 'melcloud' ? 'FanSpeed' : 'SetFanSpeed';
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,6 +1018,7 @@ class DeviceAta extends EventEmitter {
1017
1018
 
1018
1019
  //keys
1019
1020
  const presetsKey = this.accountType === 'melcloud' ? 'Presets' : 'Schedule';
1021
+ const presetsIdKey = this.accountType === 'melcloud' ? 'ID' : 'Id';
1020
1022
  const setTempKey = this.accountType === 'melcloud' ? 'SetTemperature' : 'SetPoint';
1021
1023
  const fanKey = this.accountType === 'melcloud' ? 'FanSpeed' : 'SetFanSpeed';
1022
1024
  const tempStepKey = this.accountType === 'melcloud' ? 'TemperatureIncrement' : 'HasHalfDegreeIncrements';
@@ -1033,12 +1035,12 @@ class DeviceAta extends EventEmitter {
1033
1035
  const presetsOnServer = deviceData[presetsKey] ?? [];
1034
1036
 
1035
1037
  //protection
1036
- const frostProtectionEnabled = deviceData.FrostProtection?.enabled;
1037
- const frostProtectionActive = deviceData.FrostProtection?.active;
1038
- const overheatProtectionEnabled = deviceData.OverheatProtection?.enabled;
1039
- const overheatProtectionActive = deviceData.OverheatProtection?.active;
1040
- const holidayModeEnabled = deviceData.HolidayMode?.enabled;
1041
- const holidayModeActive = deviceData.HolidayMode?.active;
1038
+ const frostProtectionEnabled = deviceData.FrostProtection?.Enabled;
1039
+ const frostProtectionActive = deviceData.FrostProtection?.Active;
1040
+ const overheatProtectionEnabled = deviceData.OverheatProtection?.Enabled;
1041
+ const overheatProtectionActive = deviceData.OverheatProtection?.Active;
1042
+ const holidayModeEnabled = deviceData.HolidayMode?.Enabled;
1043
+ const holidayModeActive = deviceData.HolidayMode?.Active;
1042
1044
  const scheduleEnabled = deviceData.ScheduleEnabled;
1043
1045
 
1044
1046
  //device control
@@ -1283,7 +1285,7 @@ class DeviceAta extends EventEmitter {
1283
1285
  //update presets state
1284
1286
  if (this.presets.length > 0) {
1285
1287
  this.presets.forEach((preset, i) => {
1286
- const presetData = presetsOnServer.find(p => p.ID === preset.Id);
1288
+ const presetData = presetsOnServer.find(p => p[presetsIdKey] === preset.id);
1287
1289
 
1288
1290
  preset.state = presetData ? (presetData.Power === power
1289
1291
  && presetData[setTempKey] === setTemperature
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.ID === preset.Id);
1060
+ const presetData = presetsOnServer.find(p => p[presetsIdKey] === preset.id);
1060
1061
 
1061
1062
  //get preset name
1062
1063
  const name = preset.name;
@@ -1330,11 +1331,13 @@ class DeviceAtw extends EventEmitter {
1330
1331
  this.deviceData = deviceData;
1331
1332
 
1332
1333
  //keys
1334
+ const presetsKey = this.accountType === 'melcloud' ? 'Presets' : 'Schedule';
1335
+ const presetsIdKey = accountType === 'melcloud' ? 'ID' : 'Id';
1333
1336
  const tempStepKey = this.accountType === 'melcloud' ? 'TemperatureIncrement' : 'HasHalfDegreeIncrements';
1334
1337
  const errorKey = this.accountType === 'melcloud' ? 'HasError' : 'IsInError';
1335
1338
 
1336
1339
  //presets
1337
- const presetsOnServer = deviceData.Presets ?? [];
1340
+ const presetsOnServer = deviceData[presetsKey] ?? [];
1338
1341
 
1339
1342
  //device info
1340
1343
  const hasHeatPump = ![1, 2, 3, 4, 5, 6, 7, 15].includes(this.hideZone);
@@ -1816,7 +1819,7 @@ class DeviceAtw extends EventEmitter {
1816
1819
  //update presets state
1817
1820
  if (this.presets.length > 0) {
1818
1821
  this.presets.forEach((preset, i) => {
1819
- const presetData = presetsOnServer.find(p => p.ID === preset.Id);
1822
+ const presetData = presetsOnServer.find(p => p[presetsIdKey] === preset.id);
1820
1823
 
1821
1824
  preset.state = presetData ? (presetData.Power === power
1822
1825
  && presetData.EcoHotWater === ecoHotWater
package/src/deviceerv.js CHANGED
@@ -675,7 +675,7 @@ class DeviceErv extends EventEmitter {
675
675
  if (this.logDebug) this.emit('debug', `Prepare presets services`);
676
676
  this.presetsServices = [];
677
677
  this.presets.forEach((preset, i) => {
678
- const presetData = presetsOnServer.find(p => p.ID === preset.Id);
678
+ const presetData = presetsOnServer.find(p => p.ID === preset.id);
679
679
 
680
680
  //get preset name
681
681
  const name = preset.name;
@@ -876,12 +876,14 @@ class DeviceErv extends EventEmitter {
876
876
  this.deviceData = deviceData;
877
877
 
878
878
  //keys
879
+ const presetsKey = this.accountType === 'melcloud' ? 'Presets' : 'Schedule';
880
+ const presetsIdKey = accountType === 'melcloud' ? 'ID' : 'Id';
879
881
  const fanKey = this.accountType === 'melcloud' ? 'FanSpeed' : 'SetFanSpeed';
880
882
  const tempStepKey = this.accountType === 'melcloud' ? 'TemperatureIncrement' : 'HasHalfDegreeIncrements';
881
883
  const errorKey = this.accountType === 'melcloud' ? 'HasError' : 'IsInError';
882
884
 
883
885
  //presets
884
- const presetsOnServer = deviceData.Presets ?? [];
886
+ const presetsOnServer = deviceData[presetsKey] ?? [];
885
887
 
886
888
  //device control
887
889
  const hideRoomTemperature = deviceData.HideRoomTemperature;
@@ -1113,7 +1115,7 @@ class DeviceErv extends EventEmitter {
1113
1115
  //update presets state
1114
1116
  if (this.presets.length > 0) {
1115
1117
  this.presets.forEach((preset, i) => {
1116
- const presetData = presetsOnServer.find(p => p.ID === preset.Id);
1118
+ const presetData = presetsOnServer.find(p => p[presetsIdKey] === preset.id);
1117
1119
 
1118
1120
  preset.state = presetData ? (presetData.Power === power
1119
1121
  && presetData.SetTemperature === setTemperature
package/src/melcloud.js CHANGED
@@ -236,11 +236,18 @@ class MelCloud extends EventEmitter {
236
236
 
237
237
  const devices = buildingsList.flatMap(building => {
238
238
  // Funkcja kapitalizująca klucze obiektu
239
- // Rekurencyjna funkcja kapitalizująca klucze w całym obiekcie (łącznie z tablicami)
239
+ const capitalizeKeys = obj =>
240
+ Object.fromEntries(
241
+ Object.entries(obj).map(([key, value]) => [
242
+ key.charAt(0).toUpperCase() + key.slice(1),
243
+ value
244
+ ])
245
+ );
246
+
247
+ // Rekurencyjna kapitalizacja kluczy w obiekcie lub tablicy
240
248
  const capitalizeKeysDeep = obj => {
241
- if (Array.isArray(obj)) {
242
- return obj.map(item => capitalizeKeysDeep(item));
243
- } else if (obj && typeof obj === 'object' && obj.constructor === Object) {
249
+ if (Array.isArray(obj)) return obj.map(capitalizeKeysDeep);
250
+ if (obj && typeof obj === 'object') {
244
251
  return Object.fromEntries(
245
252
  Object.entries(obj).map(([key, value]) => [
246
253
  key.charAt(0).toUpperCase() + key.slice(1),
@@ -252,7 +259,8 @@ class MelCloud extends EventEmitter {
252
259
  };
253
260
 
254
261
  // Funkcja tworząca finalny obiekt Device
255
- const createDevice = (device, type, headers = {}) => {
262
+ const createDevice = (device, type) => {
263
+ // Settings już kapitalizowane w nazwach
256
264
  const settingsArray = device.Settings || [];
257
265
 
258
266
  const settingsObject = Object.fromEntries(
@@ -260,23 +268,34 @@ class MelCloud extends EventEmitter {
260
268
  let parsedValue = value;
261
269
  if (value === "True") parsedValue = true;
262
270
  else if (value === "False") parsedValue = false;
263
- else if (!isNaN(Number(value)) && value.trim() !== "") parsedValue = Number(value);
271
+ else if (!isNaN(value) && value !== "") parsedValue = Number(value);
264
272
 
265
273
  const key = name.charAt(0).toUpperCase() + name.slice(1);
266
274
  return [key, parsedValue];
267
275
  })
268
276
  );
269
277
 
278
+ // Scal Capabilities + Settings + DeviceType w Device
270
279
  const deviceObject = {
271
- ...capitalizeKeysDeep(device.Capabilities || {}),
280
+ ...capitalizeKeys(device.Capabilities || {}),
272
281
  ...settingsObject,
273
282
  DeviceType: type
274
283
  };
275
284
 
285
+ // Kapitalizacja brakujących obiektów/tablic
286
+ if (device.FrostProtection) device.FrostProtection = { ...capitalizeKeys(device.FrostProtection || {}) };
287
+ if (device.OverheatProtection) device.OverheatProtection = { ...capitalizeKeys(device.OverheatProtection || {}) };
288
+ if (device.HolidayMode) device.HolidayMode = { ...capitalizeKeys(device.HolidayMode || {}) };
289
+
290
+ if (Array.isArray(device.Schedule)) {
291
+ device.Schedule = device.Schedule.map(capitalizeKeysDeep);
292
+ }
293
+
294
+ // Usuń stare pola Settings i Capabilities
276
295
  const { Settings, Capabilities, Id, GivenDisplayName, ...rest } = device;
277
296
 
278
297
  return {
279
- ...capitalizeKeysDeep(rest),
298
+ ...rest,
280
299
  Type: type,
281
300
  DeviceID: Id,
282
301
  DeviceName: GivenDisplayName,
@@ -285,14 +304,14 @@ class MelCloud extends EventEmitter {
285
304
  };
286
305
  };
287
306
 
288
- // Mapowanie urządzeń
289
307
  return [
290
- ...(building.airToAirUnits || []).map(d => createDevice(capitalizeKeysDeep(d), 0)),
291
- ...(building.airToWaterUnits || []).map(d => createDevice(capitalizeKeysDeep(d), 1)),
292
- ...(building.airToVentilationUnits || []).map(d => createDevice(capitalizeKeysDeep(d), 3))
308
+ ...(building.airToAirUnits || []).map(d => createDevice(capitalizeKeys(d), 0)),
309
+ ...(building.airToWaterUnits || []).map(d => createDevice(capitalizeKeys(d), 1)),
310
+ ...(building.airToVentilationUnits || []).map(d => createDevice(capitalizeKeys(d), 3))
293
311
  ];
294
312
  });
295
313
 
314
+
296
315
  const devicesCount = devices.length;
297
316
  if (devicesCount === 0) {
298
317
  devicesList.Info = 'No devices found'