homebridge-melcloud-control 3.7.6 → 3.8.0-beta.0

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.
@@ -829,6 +829,65 @@
829
829
  "description": "Select device control mode displayed in HomeKit app.",
830
830
  "required": true
831
831
  },
832
+ "hideZone": {
833
+ "title": "Hide zone",
834
+ "type": "integer",
835
+ "minimum": 0,
836
+ "maximum": 7,
837
+ "default": 0,
838
+ "oneOf": [
839
+ {
840
+ "title": "None/Disabled",
841
+ "enum": [
842
+ 0
843
+ ]
844
+ },
845
+ {
846
+ "title": "Zone 1",
847
+ "enum": [
848
+ 1
849
+ ]
850
+ },
851
+ {
852
+ "title": "Zone 2",
853
+ "enum": [
854
+ 2
855
+ ]
856
+ },
857
+ {
858
+ "title": "Zone 1/2",
859
+ "enum": [
860
+ 3
861
+ ]
862
+ },
863
+ {
864
+ "title": "Hot Water",
865
+ "enum": [
866
+ 4
867
+ ]
868
+ },
869
+ {
870
+ "title": "Zone 1/Hot Water",
871
+ "enum": [
872
+ 5
873
+ ]
874
+ },
875
+ {
876
+ "title": "Zone 2/Hot Water",
877
+ "enum": [
878
+ 6
879
+ ]
880
+ },
881
+ {
882
+ "title": "Zone 1/2/Hot Water",
883
+ "enum": [
884
+ 7
885
+ ]
886
+ }
887
+ ],
888
+ "description": "Select which zone need to be hidden in HomeKit app, if present.",
889
+ "required": true
890
+ },
832
891
  "temperatureSensor": {
833
892
  "title": "Temperature Sensor Room",
834
893
  "type": "boolean",
@@ -1836,7 +1895,8 @@
1836
1895
  "expanded": false,
1837
1896
  "items": [
1838
1897
  "accounts[].atwDevices[].name",
1839
- "accounts[].atwDevices[].refreshInterval"
1898
+ "accounts[].atwDevices[].refreshInterval",
1899
+ "accounts[].atwDevices[].hideZone"
1840
1900
  ]
1841
1901
  },
1842
1902
  {
@@ -276,6 +276,7 @@
276
276
  disableAccessory: false,
277
277
  name: deviceName,
278
278
  displayMode: 1,
279
+ hideZone: 0,
279
280
  temperatureSensor: false,
280
281
  temperatureSensorFlow: false,
281
282
  temperatureSensorReturn: false,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "3.7.6",
4
+ "version": "3.8.0-beta.0",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
@@ -37,7 +37,7 @@
37
37
  "dependencies": {
38
38
  "@homebridge/plugin-ui-utils": "^2.0.2",
39
39
  "async-mqtt": "^2.6.3",
40
- "axios": "^1.8.4",
40
+ "axios": "^1.9.0",
41
41
  "express": "^5.1.0"
42
42
  },
43
43
  "keywords": [
package/src/deviceata.js CHANGED
@@ -50,43 +50,39 @@ class DeviceAta extends EventEmitter {
50
50
  //presets configured
51
51
  this.presetsConfigured = [];
52
52
  for (const preset of this.presets) {
53
- const presetName = preset.name ?? false;
54
53
  const presetDisplayType = preset.displayType ?? 0;
55
- const presetNamePrefix = preset.namePrefix ?? false;
56
- if (presetName && presetDisplayType > 0) {
57
- const presetyServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][presetDisplayType];
58
- const presetCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][presetDisplayType];
59
- preset.namePrefix = presetNamePrefix;
60
- preset.serviceType = presetyServiceType;
61
- preset.characteristicType = presetCharacteristicType;
62
- preset.state = false;
63
- preset.previousSettings = {};
64
- this.presetsConfigured.push(preset);
65
- } else {
66
- const log = presetDisplayType === 0 ? false : this.emit('warn', `Preset Name: ${preset ? preset : 'Missing'}`);
54
+ if (presetDisplayType === 0) {
55
+ continue;
67
56
  };
57
+
58
+ const presetyServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][presetDisplayType];
59
+ const presetCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][presetDisplayType];
60
+ preset.name = preset.name || 'Preset'
61
+ preset.serviceType = presetyServiceType;
62
+ preset.characteristicType = presetCharacteristicType;
63
+ preset.state = false;
64
+ preset.previousSettings = {};
65
+ this.presetsConfigured.push(preset);
68
66
  }
69
67
  this.presetsConfiguredCount = this.presetsConfigured.length || 0;
70
68
 
71
69
  //buttons configured
72
70
  this.buttonsConfigured = [];
73
71
  for (const button of this.buttons) {
74
- const buttonName = button.name ?? false;
75
- const buttonMode = button.mode ?? -1;
76
72
  const buttonDisplayType = button.displayType ?? 0;
77
- const buttonNamePrefix = button.namePrefix ?? false;
78
- if (buttonName && buttonMode >= 0 && buttonDisplayType > 0) {
79
- const buttonServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][buttonDisplayType];
80
- const buttonCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][buttonDisplayType];
81
- button.namePrefix = buttonNamePrefix;
82
- button.serviceType = buttonServiceType;
83
- button.characteristicType = buttonCharacteristicType;
84
- button.state = false;
85
- button.previousValue = null;
86
- this.buttonsConfigured.push(button);
87
- } else {
88
- const log = buttonDisplayType === 0 ? false : this.emit('warn', `Button Name: ${buttonName ? buttonName : 'Missing'}, Mode: ${buttonMode ? buttonMode : 'Missing'}`);
73
+ if (presetDisplayType === 0) {
74
+ continue;
89
75
  };
76
+
77
+ const buttonServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][buttonDisplayType];
78
+ const buttonCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][buttonDisplayType];
79
+ button.name = button.name || 'Button'
80
+ button.namePrefix = buttonNamePrefix;
81
+ button.serviceType = buttonServiceType;
82
+ button.characteristicType = buttonCharacteristicType;
83
+ button.state = false;
84
+ button.previousValue = null;
85
+ this.buttonsConfigured.push(button);;
90
86
  }
91
87
  this.buttonsConfiguredCount = this.buttonsConfigured.length || 0;
92
88
 
@@ -281,7 +277,7 @@ class DeviceAta extends EventEmitter {
281
277
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare accessory`) : false;
282
278
  const accessoryName = deviceName;
283
279
  const accessoryUUID = AccessoryUUID.generate(accountName + deviceId.toString());
284
- const accessoryCategory = Categories.AIR_CONDITIONER;
280
+ const accessoryCategory = [Categories.OTHER, Categories.AIR_HEATER, Categories.THERMOSTAT][this.displayType];
285
281
  const accessory = new Accessory(accessoryName, accessoryUUID, accessoryCategory);
286
282
 
287
283
  //information service
@@ -299,6 +295,7 @@ class DeviceAta extends EventEmitter {
299
295
  case 1: //Heater Cooler
300
296
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare heater/cooler service`) : false;
301
297
  this.melCloudService = new Service.HeaterCooler(serviceName, `HeaterCooler ${deviceId}`);
298
+ this.melCloudService.setPrimaryService(true);
302
299
  this.melCloudService.getCharacteristic(Characteristic.Active)
303
300
  .onGet(async () => {
304
301
  const state = this.accessory.power;
@@ -499,6 +496,7 @@ class DeviceAta extends EventEmitter {
499
496
  case 2: //Thermostat
500
497
  const debug1 = this.enableDebugMode ? this.emit('debug', `Prepare thermostat service`) : false;
501
498
  this.melCloudService = new Service.Thermostat(serviceName, `Thermostat ${deviceId}`);
499
+ this.melCloudService.setPrimaryService(true);
502
500
  this.melCloudService.getCharacteristic(Characteristic.CurrentHeatingCoolingState)
503
501
  .onGet(async () => {
504
502
  const value = this.accessory.currentOperationMode;
package/src/deviceatw.js CHANGED
@@ -17,6 +17,7 @@ class DeviceAtw extends EventEmitter {
17
17
 
18
18
  //account config
19
19
  this.displayMode = device.displayMode;
20
+ this.hideZone = device.hideZone;
20
21
  this.temperatureSensor = device.temperatureSensor || false;
21
22
  this.temperatureSensorFlow = device.temperatureSensorFlow || false;
22
23
  this.temperatureSensorReturn = device.temperatureSensorReturn || false;
@@ -54,43 +55,39 @@ class DeviceAtw extends EventEmitter {
54
55
  //presets configured
55
56
  this.presetsConfigured = [];
56
57
  for (const preset of this.presets) {
57
- const presetName = preset.name ?? false;
58
58
  const presetDisplayType = preset.displayType ?? 0;
59
- const presetNamePrefix = preset.namePrefix ?? false;
60
- if (presetName && presetDisplayType > 0) {
61
- const presetyServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][presetDisplayType];
62
- const presetCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][presetDisplayType];
63
- preset.namePrefix = presetNamePrefix;
64
- preset.serviceType = presetyServiceType;
65
- preset.characteristicType = presetCharacteristicType;
66
- preset.state = false;
67
- preset.previousSettings = {};
68
- this.presetsConfigured.push(preset);
69
- } else {
70
- const log = presetDisplayType === 0 ? false : this.emit('warn', `Preset Name: ${preset ? preset : 'Missing'}`);
59
+ if (presetDisplayType === 0) {
60
+ continue;
71
61
  };
62
+
63
+ const presetyServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][presetDisplayType];
64
+ const presetCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][presetDisplayType];
65
+ preset.name = preset.name || 'Preset'
66
+ preset.serviceType = presetyServiceType;
67
+ preset.characteristicType = presetCharacteristicType;
68
+ preset.state = false;
69
+ preset.previousSettings = {};
70
+ this.presetsConfigured.push(preset);
72
71
  }
73
72
  this.presetsConfiguredCount = this.presetsConfigured.length || 0;
74
73
 
75
74
  //buttons configured
76
75
  this.buttonsConfigured = [];
77
76
  for (const button of this.buttons) {
78
- const buttonName = button.name ?? false;
79
- const buttonMode = button.mode ?? -1;
80
77
  const buttonDisplayType = button.displayType ?? 0;
81
- const buttonNamePrefix = button.namePrefix ?? false;
82
- if (buttonName && buttonMode >= 0 && buttonDisplayType > 0) {
83
- const buttonServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][buttonDisplayType];
84
- const buttonCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][buttonDisplayType];
85
- button.namePrefix = buttonNamePrefix;
86
- button.serviceType = buttonServiceType;
87
- button.characteristicType = buttonCharacteristicType;
88
- button.state = false;
89
- button.previousValue = null;
90
- this.buttonsConfigured.push(button);
91
- } else {
92
- const log = buttonDisplayType === 0 ? false : this.emit('warn', `Button Name: ${buttonName ? buttonName : 'Missing'}, Mode: ${buttonMode ? buttonMode : 'Missing'}`);
78
+ if (presetDisplayType === 0) {
79
+ continue;
93
80
  };
81
+
82
+ const buttonServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][buttonDisplayType];
83
+ const buttonCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][buttonDisplayType];
84
+ button.name = button.name || 'Button'
85
+ button.namePrefix = buttonNamePrefix;
86
+ button.serviceType = buttonServiceType;
87
+ button.characteristicType = buttonCharacteristicType;
88
+ button.state = false;
89
+ button.previousValue = null;
90
+ this.buttonsConfigured.push(button);;
94
91
  }
95
92
  this.buttonsConfiguredCount = this.buttonsConfigured.length || 0;
96
93
 
@@ -290,6 +287,7 @@ class DeviceAtw extends EventEmitter {
290
287
  try {
291
288
  const presetsOnServer = this.accessory.presets;
292
289
  const zonesCount = this.accessory.zonesCount;
290
+ const caseZone1 = this.accessory.caseZone1;
293
291
  const caseHotWater = this.accessory.caseHotWater;
294
292
  const caseZone2 = this.accessory.caseZone2;
295
293
  const heatCoolModes = this.accessory.heatCoolModes;
@@ -307,7 +305,7 @@ class DeviceAtw extends EventEmitter {
307
305
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare accessory`) : false;
308
306
  const accessoryName = deviceName;
309
307
  const accessoryUUID = AccessoryUUID.generate(accountName + deviceId.toString());
310
- const accessoryCategory = Categories.AIR_HEATER;
308
+ const accessoryCategory = [Categories.OTHER, Categories.AIR_HEATER, Categories.THERMOSTAT][this.displayType];
311
309
  const accessory = new Accessory(accessoryName, accessoryUUID, accessoryCategory);
312
310
 
313
311
  //information service
@@ -328,6 +326,7 @@ class DeviceAtw extends EventEmitter {
328
326
  case 1: //Heater Cooler
329
327
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare heather/cooler ${zoneName} service`) : false;
330
328
  const melCloudService = new Service.HeaterCooler(serviceName, `HeaterCooler ${deviceId} ${i}`);
329
+ melCloudService.setPrimaryService(true);
331
330
  melCloudService.getCharacteristic(Characteristic.Active)
332
331
  .onGet(async () => {
333
332
  const state = this.accessory.power;
@@ -385,7 +384,7 @@ class DeviceAtw extends EventEmitter {
385
384
  };
386
385
  operationModeText = [HeatPump.System[0], HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
387
386
  break;
388
- case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
387
+ case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
389
388
  switch (value) {
390
389
  case 0: //AUTO - HEAT CURVE
391
390
  deviceData.Device.OperationModeZone1 = 2;
@@ -473,7 +472,7 @@ class DeviceAtw extends EventEmitter {
473
472
  //deviceData.Device.SetTemperatureZone1 = value;
474
473
  //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
475
474
  break;
476
- case 1: //Zone 1
475
+ case caseZone1: //Zone 1
477
476
  switch (this.accessory.zones[i].operationMode) {
478
477
  case 1: //HEAT FLOW
479
478
  deviceData.Device.SetHeatFlowTemperatureZone1 = value;
@@ -537,7 +536,7 @@ class DeviceAtw extends EventEmitter {
537
536
  //deviceData.Device.SetTemperatureZone1 = value;
538
537
  //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
539
538
  break;
540
- case 1: //Zone 1
539
+ case caseZone1: //Zone 1
541
540
  switch (this.accessory.zones[i].operationMode) {
542
541
  case 1: //HEAT FLOW
543
542
  deviceData.Device.SetHeatFlowTemperatureZone1 = value;
@@ -597,7 +596,7 @@ class DeviceAtw extends EventEmitter {
597
596
  deviceData.Device.ProhibitZone2 = value;
598
597
  HeatPump.EffectiveFlags.ProhibitHeatingZone1 + HeatPump.EffectiveFlags.ProhibitHotWater + HeatPump.EffectiveFlags.ProhibitHeatingZone2;
599
598
  break;
600
- case 1: //Zone 1
599
+ case caseZone1: //Zone 1
601
600
  deviceData.Device.ProhibitZone1 = value;
602
601
  HeatPump.EffectiveFlags.ProhibitHeatingZone1;
603
602
  break;
@@ -638,6 +637,7 @@ class DeviceAtw extends EventEmitter {
638
637
  case 2: //Thermostat
639
638
  const debug3 = this.enableDebugMode ? this.emit('debug', `Prepare thermostat ${zoneName} service`) : false;
640
639
  const melCloudServiceT = new Service.Thermostat(serviceName, `Thermostat ${deviceId} ${i}`);
640
+ melCloudServiceT.setPrimaryService(true);
641
641
  melCloudServiceT.getCharacteristic(Characteristic.CurrentHeatingCoolingState)
642
642
  .onGet(async () => {
643
643
  const value = this.accessory.zones[i].currentOperationMode;
@@ -680,7 +680,7 @@ class DeviceAtw extends EventEmitter {
680
680
  };
681
681
  operationModeText = [HeatPump.System[0], HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
682
682
  break;
683
- case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
683
+ case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
684
684
  switch (value) {
685
685
  case 0: //OFF - HEAT CURVE
686
686
  deviceData.Device.OperationModeZone1 = 2;
@@ -778,7 +778,7 @@ class DeviceAtw extends EventEmitter {
778
778
  //deviceData.Device.SetTemperatureZone1 = value;
779
779
  //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
780
780
  break;
781
- case 1: //Zone 1
781
+ case caseZone1: //Zone 1
782
782
  deviceData.Device.SetTemperatureZone1 = value;
783
783
  deviceData.Device.EffectiveFlags = HeatPump.EffectiveFlags.SetTemperatureZone1;
784
784
  break;
@@ -875,7 +875,7 @@ class DeviceAtw extends EventEmitter {
875
875
  accessory.addService(this.returnTemperatureSensorService);
876
876
  };
877
877
  break;
878
- case 1: //Zone 1
878
+ case caseZone1: //Zone 1
879
879
  if (temperatureSensor && this.accessory.zones[i].roomTemperature !== null) {
880
880
  const debug = this.enableDebugMode ? this.emit('debug', `${zoneName}, Prepare temperature sensor service`) : false;
881
881
  this.roomTemperatureZone1SensorService = new Service.TemperatureSensor(`${serviceName}`, `${zoneName} Temperature Sensor ${deviceId} ${i}`);
@@ -1338,8 +1338,9 @@ class DeviceAtw extends EventEmitter {
1338
1338
  const presetsOnServer = deviceData.Presets ?? [];
1339
1339
 
1340
1340
  //device info
1341
- const hasHotWaterTank = deviceData.Device.HasHotWaterTank ?? false;
1342
- const hasZone2 = deviceData.Device.HasZone2 ?? false;
1341
+ const hasZone1 = this.hideZone !== 1 || this.hideZone !== 5 || this.hideZone !== 7 ? true : false;
1342
+ const hasHotWaterTank = (this.hideZone !== 4 || this.hideZone !== 5 || this.hideZone !== 6 || this.hideZone !== 7) && deviceData.Device.HasHotWaterTank ? true : false;
1343
+ const hasZone2 = (this.hideZone !== 2 || this.hideZone !== 3 || this.hideZone !== 6 || this.hideZone !== 7) && deviceData.Device.HasZone2 ? true : false;
1343
1344
  const canHeat = deviceData.Device.CanHeat ?? false;
1344
1345
  const canCool = deviceData.Device.CanCool ?? false;
1345
1346
  const heatCoolModes = canHeat && canCool ? 0 : canHeat ? 1 : canCool ? 2 : 3;
@@ -1349,9 +1350,13 @@ class DeviceAtw extends EventEmitter {
1349
1350
  const maxTankTemperature = deviceData.Device.MaxTankTemperature ?? 70
1350
1351
 
1351
1352
  //zones
1353
+ const zone1 = hasZone1 ? 1 : 0;
1352
1354
  const hotWater = hasHotWaterTank ? 1 : 0;
1353
1355
  const zone2 = hasZone2 ? 1 : 0;
1354
- const zonesCount = 2 + hotWater + zone2;
1356
+ const zonesCount = 1 + zone1 + hotWater + zone2;
1357
+
1358
+ //zone cases
1359
+ const caseZone1 = hasZone1 ? 1 : -1;
1355
1360
  const caseHotWater = hasHotWaterTank ? 2 : -1;
1356
1361
  const caseZone2 = hasZone2 ? hasHotWaterTank ? 3 : 2 : -1;
1357
1362
 
@@ -1410,6 +1415,7 @@ class DeviceAtw extends EventEmitter {
1410
1415
  this.accessory.hasZone2 = hasZone2;
1411
1416
  this.accessory.zonesCount = zonesCount;
1412
1417
  this.accessory.heatCoolModes = heatCoolModes;
1418
+ this.accessory.caseZone1 = caseZone1;
1413
1419
  this.accessory.caseHotWater = caseHotWater;
1414
1420
  this.accessory.caseZone2 = caseZone2;
1415
1421
 
@@ -1450,7 +1456,7 @@ class DeviceAtw extends EventEmitter {
1450
1456
  temperatureSetPropsMinValue = -35;
1451
1457
  temperatureSetPropsMaxValue = 100;
1452
1458
  break;
1453
- case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1459
+ case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1454
1460
  name = zone1Name;
1455
1461
  operationModeZone = operationMode;
1456
1462
  currentOperationMode = !power ? 0 : idleZone1 ? 1 : [2, 2, 2, 3, 3, 2][operationModeZone1]; //INACTIVE, IDLE, HEATING, COOLING
@@ -1571,7 +1577,7 @@ class DeviceAtw extends EventEmitter {
1571
1577
  temperatureSetPropsMinValue = 10;
1572
1578
  temperatureSetPropsMaxValue = 70;
1573
1579
  break;
1574
- case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1580
+ case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1575
1581
  name = zone1Name;
1576
1582
  operationModeZone = operationMode;
1577
1583
  currentOperationMode = !power ? 0 : idleZone1 ? 0 : [1, 1, 1, 2, 2, 1][operationModeZone1]; //OFF, HEAT, COOL
package/src/deviceerv.js CHANGED
@@ -48,43 +48,39 @@ class DeviceErv extends EventEmitter {
48
48
  //presets configured
49
49
  this.presetsConfigured = [];
50
50
  for (const preset of this.presets) {
51
- const presetName = preset.name ?? false;
52
51
  const presetDisplayType = preset.displayType ?? 0;
53
- const presetNamePrefix = preset.namePrefix ?? false;
54
- if (presetName && presetDisplayType > 0) {
55
- const presetyServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][presetDisplayType];
56
- const presetCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][presetDisplayType];
57
- preset.namePrefix = presetNamePrefix;
58
- preset.serviceType = presetyServiceType;
59
- preset.characteristicType = presetCharacteristicType;
60
- preset.state = false;
61
- preset.previousSettings = {};
62
- this.presetsConfigured.push(preset);
63
- } else {
64
- const log = presetDisplayType === 0 ? false : this.emit('warn', `Preset Name: ${preset ? preset : 'Missing'}`);
52
+ if (presetDisplayType === 0) {
53
+ continue;
65
54
  };
55
+
56
+ const presetyServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][presetDisplayType];
57
+ const presetCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][presetDisplayType];
58
+ preset.name = preset.name || 'Preset'
59
+ preset.serviceType = presetyServiceType;
60
+ preset.characteristicType = presetCharacteristicType;
61
+ preset.state = false;
62
+ preset.previousSettings = {};
63
+ this.presetsConfigured.push(preset);
66
64
  }
67
65
  this.presetsConfiguredCount = this.presetsConfigured.length || 0;
68
66
 
69
67
  //buttons configured
70
68
  this.buttonsConfigured = [];
71
69
  for (const button of this.buttons) {
72
- const buttonName = button.name ?? false;
73
- const buttonMode = button.mode ?? -1;
74
70
  const buttonDisplayType = button.displayType ?? 0;
75
- const buttonNamePrefix = button.namePrefix ?? false;
76
- if (buttonName && buttonMode >= 0 && buttonDisplayType > 0) {
77
- const buttonServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][buttonDisplayType];
78
- const buttonCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][buttonDisplayType];
79
- button.namePrefix = buttonNamePrefix;
80
- button.serviceType = buttonServiceType;
81
- button.characteristicType = buttonCharacteristicType;
82
- button.state = false;
83
- button.previousValue = null;
84
- this.buttonsConfigured.push(button);
85
- } else {
86
- const log = buttonDisplayType === 0 ? false : this.emit('warn', `Button Name: ${buttonName ? buttonName : 'Missing'}, Mode: ${buttonMode ? buttonMode : 'Missing'}`);
71
+ if (presetDisplayType === 0) {
72
+ continue;
87
73
  };
74
+
75
+ const buttonServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][buttonDisplayType];
76
+ const buttonCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][buttonDisplayType];
77
+ button.name = button.name || 'Button'
78
+ button.namePrefix = buttonNamePrefix;
79
+ button.serviceType = buttonServiceType;
80
+ button.characteristicType = buttonCharacteristicType;
81
+ button.state = false;
82
+ button.previousValue = null;
83
+ this.buttonsConfigured.push(button);;
88
84
  }
89
85
  this.buttonsConfiguredCount = this.buttonsConfigured.length || 0;
90
86
 
@@ -268,7 +264,7 @@ class DeviceErv extends EventEmitter {
268
264
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare accessory`) : false;
269
265
  const accessoryName = deviceName;
270
266
  const accessoryUUID = AccessoryUUID.generate(accountName + deviceId.toString());
271
- const accessoryCategory = Categories.AIR_PURIFIER;
267
+ const accessoryCategory = [Categories.OTHER, Categories.AIR_PURIFIER, Categories.THERMOSTAT][this.displayType];
272
268
  const accessory = new Accessory(accessoryName, accessoryUUID, accessoryCategory);
273
269
 
274
270
  //information service
@@ -286,6 +282,7 @@ class DeviceErv extends EventEmitter {
286
282
  case 1: //Heater Cooler
287
283
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare heather/cooler service`) : false;
288
284
  this.melCloudService = new Service.HeaterCooler(serviceName, `HeaterCooler ${deviceId}`);
285
+ this.melCloudService.setPrimaryService(true);
289
286
  this.melCloudService.getCharacteristic(Characteristic.Active)
290
287
  .onGet(async () => {
291
288
  const state = this.accessory.power;
@@ -464,6 +461,7 @@ class DeviceErv extends EventEmitter {
464
461
  case 2: //Thermostat
465
462
  const debug1 = this.enableDebugMode ? this.emit('debug', `Prepare thermostat service`) : false;
466
463
  this.melCloudService = new Service.Thermostat(serviceName, `Thermostat ${deviceId}`);
464
+ this.melCloudService.setPrimaryService(true);
467
465
  this.melCloudService.getCharacteristic(Characteristic.CurrentHeatingCoolingState)
468
466
  .onGet(async () => {
469
467
  const value = this.accessory.currentOperationMode;
@@ -12,6 +12,10 @@ class ImpulseGenerator extends EventEmitter {
12
12
  return true;
13
13
  }
14
14
 
15
+ //update state
16
+ const updateState = timers.length > 0 ? this.state(true) : false;
17
+
18
+ //add timers
15
19
  this.timers = [];
16
20
  for (const timer of timers) {
17
21
  this.emit(timer.name);
@@ -22,8 +26,6 @@ class ImpulseGenerator extends EventEmitter {
22
26
  this.timers.push(newTimer);
23
27
  };
24
28
 
25
- //update state
26
- this.state(true);
27
29
  return true;
28
30
  }
29
31
 
@@ -36,6 +38,7 @@ class ImpulseGenerator extends EventEmitter {
36
38
  //update state
37
39
  this.timers.forEach(timer => clearInterval(timer));
38
40
  this.timers = [];
41
+
39
42
  this.state(false);
40
43
  return true
41
44
  }