homebridge-melcloud-control 3.1.11 → 3.1.16

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/src/deviceatw.js CHANGED
@@ -42,6 +42,7 @@ class DeviceAtw extends EventEmitter {
42
42
  this.refreshInterval = refreshInterval;
43
43
  this.useFahrenheit = useFahrenheit;
44
44
  this.startPrepareAccessory = true;
45
+ this.displayDeviceInfo = true;
45
46
 
46
47
  //external integrations
47
48
  this.restFul = account.restFul ?? {};
@@ -76,10 +77,10 @@ class DeviceAtw extends EventEmitter {
76
77
  this.buttonsConfigured = [];
77
78
  for (const button of this.buttons) {
78
79
  const buttonName = button.name ?? false;
79
- const buttonMode = button.mode ?? false;
80
+ const buttonMode = button.mode ?? -1;
80
81
  const buttonDisplayType = button.displayType ?? 0;
81
82
  const buttonNamePrefix = button.namePrefix ?? false;
82
- if (buttonName && buttonMode && buttonDisplayType > 0) {
83
+ if (buttonName && buttonMode >= 0 && buttonDisplayType > 0) {
83
84
  const buttonServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][buttonDisplayType];
84
85
  const buttonCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][buttonDisplayType];
85
86
  button.namePrefix = buttonNamePrefix;
@@ -107,7 +108,7 @@ class DeviceAtw extends EventEmitter {
107
108
  debugLog: this.enableDebugMode
108
109
  });
109
110
 
110
- this.melCloudAtw.on('externalIntegrations', (deviceData, deviceState) => {
111
+ this.melCloudAtw.on('externalIntegrations', (deviceData) => {
111
112
  try {
112
113
  //RESTFul server
113
114
  const restFulEnabled = this.restFul.enable || false;
@@ -124,7 +125,7 @@ class DeviceAtw extends EventEmitter {
124
125
  })
125
126
  .on('set', async (key, value) => {
126
127
  try {
127
- await this.setOverExternalIntegration('RESTFul', deviceState, key, value);
128
+ await this.setOverExternalIntegration('RESTFul', deviceData, key, value);
128
129
  } catch (error) {
129
130
  this.emit('warn', `RESTFul set error: ${error}.`);
130
131
  };
@@ -137,7 +138,7 @@ class DeviceAtw extends EventEmitter {
137
138
  });
138
139
  }
139
140
  const restFul0 = this.restFulConnected ? this.restFul1.update('info', deviceData) : false;
140
- const restFul1 = this.restFulConnected ? this.restFul1.update('state', deviceState) : false;
141
+ const restFul1 = this.restFulConnected ? this.restFul1.update('state', deviceData.Device) : false;
141
142
  }
142
143
 
143
144
  //MQTT client
@@ -163,7 +164,7 @@ class DeviceAtw extends EventEmitter {
163
164
  })
164
165
  .on('set', async (key, value) => {
165
166
  try {
166
- await this.setOverExternalIntegration('MQTT', deviceState, key, value);
167
+ await this.setOverExternalIntegration('MQTT', deviceData, key, value);
167
168
  } catch (error) {
168
169
  this.emit('warn', `MQTT set error: ${error}.`);
169
170
  };
@@ -176,13 +177,17 @@ class DeviceAtw extends EventEmitter {
176
177
  });
177
178
  }
178
179
  const mqtt0 = this.mqttConnected ? this.mqtt1.emit('publish', `Info`, deviceData) : false;
179
- const mqtt1 = this.mqttConnected ? this.mqtt1.emit('publish', `State`, deviceState) : false;
180
+ const mqtt1 = this.mqttConnected ? this.mqtt1.emit('publish', `State`, deviceData.Device) : false;
180
181
  }
181
182
  } catch (error) {
182
183
  this.emit('warn', `External integration start error: ${error.message || error}.`);
183
184
  };
184
185
  })
185
186
  .on('deviceInfo', (manufacturer, modelIndoor, modelOutdoor, serialNumber, firmwareAppVersion, hasHotWaterTank, hasZone2) => {
187
+ if (!this.displayDeviceInfo) {
188
+ return;
189
+ }
190
+
186
191
  if (!this.disableLogDeviceInfo) {
187
192
  this.emit('devInfo', `---- ${this.deviceTypeText}: ${this.deviceName} ----`);
188
193
  this.emit('devInfo', `Account: ${this.accountName}`);
@@ -202,8 +207,9 @@ class DeviceAtw extends EventEmitter {
202
207
  this.model = modelIndoor ? modelIndoor : modelOutdoor ? modelOutdoor : `${this.deviceTypeText} ${this.deviceId}`;
203
208
  this.serialNumber = serialNumber;
204
209
  this.firmwareRevision = firmwareAppVersion;
210
+ this.displayDeviceInfo = false;
205
211
  })
206
- .on('deviceState', async (deviceData, deviceState) => {
212
+ .on('deviceState', async (deviceData) => {
207
213
  //device info
208
214
  const displayMode = this.displayMode;
209
215
  const heatPumpName = 'Heat Pump';
@@ -245,36 +251,36 @@ class DeviceAtw extends EventEmitter {
245
251
  this.caseZone2 = caseZone2;
246
252
 
247
253
  //device state
248
- const setTemperatureZone1 = deviceState.SetTemperatureZone1;
249
- const setTemperatureZone2 = deviceState.SetTemperatureZone2;
250
- const roomTemperatureZone1 = deviceState.RoomTemperatureZone1;
251
- const roomTemperatureZone2 = deviceState.RoomTemperatureZone2;
252
- const operationMode = deviceState.OperationMode;
253
- const operationModeZone1 = deviceState.OperationModeZone1;
254
- const operationModeZone2 = deviceState.OperationModeZone2;
255
- const setHeatFlowTemperatureZone1 = deviceState.SetHeatFlowTemperatureZone1;
256
- const setHeatFlowTemperatureZone2 = deviceState.SetHeatFlowTemperatureZone2;
257
- const setCoolFlowTemperatureZone1 = deviceState.SetCoolFlowTemperatureZone1;
258
- const setCoolFlowTemperatureZone2 = deviceState.SetCoolFlowTemperatureZone2;
259
- const tankWaterTemperature = deviceState.TankWaterTemperature;
260
- const setTankWaterTemperature = deviceState.SetTankWaterTemperature;
261
- const forcedHotWaterMode = deviceState.ForcedHotWaterMode ? 1 : 0;
262
- const unitStatus = deviceState.UnitStatus;
263
- const outdoorTemperature = deviceState.OutdoorTemperature;
264
- const ecoHotWater = deviceState.EcoHotWater;
265
- const holidayMode = deviceState.HolidayMode;
266
- const prohibitZone1 = deviceState.ProhibitZone1;
267
- const prohibitZone2 = deviceState.ProhibitZone2;
268
- const prohibitHotWater = deviceState.ProhibitHotWater;
269
- const idleZone1 = deviceState.IdleZone1;
270
- const idleZone2 = deviceState.IdleZone2;
271
- const power = deviceState.Power;
272
- const offline = deviceState.Offline;
254
+ const power = deviceData.Device.Power ?? false;
255
+ const offline = deviceData.Device.Offline ?? false;
256
+ const setTemperatureZone1 = deviceData.Device.SetTemperatureZone1;
257
+ const setTemperatureZone2 = deviceData.Device.SetTemperatureZone2;
258
+ const roomTemperatureZone1 = deviceData.Device.RoomTemperatureZone1;
259
+ const roomTemperatureZone2 = deviceData.Device.RoomTemperatureZone2;
260
+ const operationMode = deviceData.Device.OperationMode;
261
+ const operationModeZone1 = deviceData.Device.OperationModeZone1;
262
+ const operationModeZone2 = deviceData.Device.OperationModeZone2;
263
+ const setHeatFlowTemperatureZone1 = deviceData.Device.SetHeatFlowTemperatureZone1;
264
+ const setHeatFlowTemperatureZone2 = deviceData.Device.SetHeatFlowTemperatureZone2;
265
+ const setCoolFlowTemperatureZone1 = deviceData.Device.SetCoolFlowTemperatureZone1;
266
+ const setCoolFlowTemperatureZone2 = deviceData.Device.SetCoolFlowTemperatureZone2;
267
+ const tankWaterTemperature = deviceData.Device.TankWaterTemperature;
268
+ const setTankWaterTemperature = deviceData.Device.SetTankWaterTemperature;
269
+ const forcedHotWaterMode = deviceData.Device.ForcedHotWaterMode ? 1 : 0;
270
+ const unitStatus = deviceData.Device.UnitStatus ?? 0;
271
+ const outdoorTemperature = deviceData.Device.OutdoorTemperature;
272
+ const ecoHotWater = deviceData.Device.EcoHotWater ?? false;
273
+ const holidayMode = deviceData.Device.HolidayMode ?? false;
274
+ const prohibitZone1 = deviceData.Device.ProhibitZone1 ?? false;
275
+ const prohibitZone2 = deviceData.Device.ProhibitZone2 ?? false;
276
+ const prohibitHotWater = deviceData.Device.ProhibitHotWater ?? false;
277
+ const idleZone1 = deviceData.Device.IdleZone1 ?? false;
278
+ const idleZone2 = deviceData.Device.IdleZone2 ?? false;
273
279
 
274
280
  //accessory
275
281
  this.accessory.presetsOnServer = presetsOnServer;
276
282
  this.accessory.power = power ? 1 : 0;
277
- this.accessory.offline = offline;
283
+ this.accessory.offline = offline ?? false;
278
284
  this.accessory.unitStatus = unitStatus;
279
285
  this.accessory.idleZone1 = idleZone1;
280
286
  this.accessory.idleZone2 = idleZone2;
@@ -454,6 +460,9 @@ class DeviceAtw extends EventEmitter {
454
460
  .updateCharacteristic(Characteristic.TemperatureDisplayUnits, this.accessory.useFahrenheit);
455
461
  }
456
462
  break;
463
+ default:
464
+ this.emit('warn', `Unknown display mode: ${displayMode}`);
465
+ return;
457
466
  };
458
467
 
459
468
  //push value to arrays
@@ -594,8 +603,7 @@ class DeviceAtw extends EventEmitter {
594
603
  if (this.presetsConfigured.length > 0) {
595
604
  for (let i = 0; i < this.presetsConfigured.length; i++) {
596
605
  const preset = this.presetsConfigured[i];
597
- const index = presetsOnServer.findIndex(p => p.ID === preset.Id);
598
- const presetData = presetsOnServer[index];
606
+ const presetData = presetsOnServer.find(p => p.ID === preset.Id);
599
607
 
600
608
  preset.state = presetData ? (presetData.Power === power
601
609
  && presetData.EcoHotWater === ecoHotWater
@@ -713,7 +721,7 @@ class DeviceAtw extends EventEmitter {
713
721
  }
714
722
 
715
723
  try {
716
- const accessory = await this.prepareAccessory(this.accountInfo, deviceState, this.deviceId, this.deviceTypeText, this.deviceName, this.accountName);
724
+ const accessory = await this.prepareAccessory(this.accountInfo, deviceData, this.deviceId, this.deviceTypeText, this.deviceName, this.accountName);
717
725
  this.emit('publishAccessory', accessory);
718
726
  this.startPrepareAccessory = false;
719
727
  } catch (error) {
@@ -731,8 +739,6 @@ class DeviceAtw extends EventEmitter {
731
739
  })
732
740
  .on('error', async (error) => {
733
741
  this.emit('error', error);
734
- await new Promise(resolve => setTimeout(resolve, 15000));
735
- await this.melCloudAtw.impulseGenerator.start([{ name: 'checkState', sampling: this.refreshInterval }]);
736
742
  });
737
743
 
738
744
  //check state
@@ -747,94 +753,94 @@ class DeviceAtw extends EventEmitter {
747
753
  };
748
754
  };
749
755
 
750
- async setOverExternalIntegration(integration, deviceState, key, value) {
756
+ async setOverExternalIntegration(integration, deviceData, key, value) {
751
757
  try {
752
758
  let set = false
753
759
  switch (key) {
754
760
  case 'Power':
755
- deviceState[key] = value;
756
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
757
- set = await this.melCloudAtw.send(deviceState);
761
+ deviceData.Device[key] = value;
762
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
763
+ set = await this.melCloudAtw.send(deviceData);
758
764
  break;
759
765
  case 'OperationMode':
760
- deviceState[key] = value;
761
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
762
- set = await this.melCloudAtw.send(deviceState);
766
+ deviceData.Device[key] = value;
767
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
768
+ set = await this.melCloudAtw.send(deviceData);
763
769
  break;
764
770
  case 'OperationModeZone1':
765
- deviceState[key] = value;
766
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
767
- set = await this.melCloudAtw.send(deviceState);
771
+ deviceData.Device[key] = value;
772
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
773
+ set = await this.melCloudAtw.send(deviceData);
768
774
  break;
769
775
  case 'OperationModeZone2':
770
- deviceState[key] = value;
771
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
772
- set = await this.melCloudAtw.send(deviceState);
776
+ deviceData.Device[key] = value;
777
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
778
+ set = await this.melCloudAtw.send(deviceData);
773
779
  break;
774
780
  case 'SetTemperatureZone1':
775
- deviceState[key] = value;
776
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
777
- set = await this.melCloudAtw.send(deviceState);
781
+ deviceData.Device[key] = value;
782
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
783
+ set = await this.melCloudAtw.send(deviceData);
778
784
  break;
779
785
  case 'SetTemperatureZone2':
780
- deviceState[key] = value;
781
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
782
- set = await this.melCloudAtw.send(deviceState);
786
+ deviceData.Device[key] = value;
787
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
788
+ set = await this.melCloudAtw.send(deviceData);
783
789
  break;
784
790
  case 'SetHeatFlowTemperatureZone1':
785
- deviceState[key] = value;
786
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
787
- set = await this.melCloudAtw.send(deviceState);
791
+ deviceData.Device[key] = value;
792
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
793
+ set = await this.melCloudAtw.send(deviceData);
788
794
  break;
789
795
  case 'SetHeatFlowTemperatureZone2':
790
- deviceState[key] = value;
791
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
792
- set = await this.melCloudAtw.send(deviceState);
796
+ deviceData.Device[key] = value;
797
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
798
+ set = await this.melCloudAtw.send(deviceData);
793
799
  break;
794
800
  case 'SetCoolFlowTemperatureZone1':
795
- deviceState[key] = value;
796
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone1;
797
- set = await this.melCloudAtw.send(deviceState);
801
+ deviceData.Device[key] = value;
802
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone1;
803
+ set = await this.melCloudAtw.send(deviceData);
798
804
  break;
799
805
  case 'SetCoolFlowTemperatureZone2':
800
- deviceState[key] = value;
801
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone2;
802
- set = await this.melCloudAtw.send(deviceState);
806
+ deviceData.Device[key] = value;
807
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone2;
808
+ set = await this.melCloudAtw.send(deviceData);
803
809
  break;
804
810
  case 'SetTankWaterTemperature':
805
- deviceState[key] = value;
806
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
807
- set = await this.melCloudAtw.send(deviceState);
811
+ deviceData.Device[key] = value;
812
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
813
+ set = await this.melCloudAtw.send(deviceData);
808
814
  break;
809
815
  case 'ForcedHotWaterMode':
810
- deviceState[key] = value;
811
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
812
- set = await this.melCloudAtw.send(deviceState);
816
+ deviceData.Device[key] = value;
817
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
818
+ set = await this.melCloudAtw.send(deviceData);
813
819
  break;
814
820
  case 'EcoHotWater':
815
- deviceState[key] = value;
816
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.EcoHotWater;
817
- set = await this.melCloudAtw.send(deviceState);
821
+ deviceData.Device[key] = value;
822
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.EcoHotWater;
823
+ set = await this.melCloudAtw.send(deviceData);
818
824
  break;
819
825
  case 'HolidayMode':
820
- deviceState[key] = value;
821
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.HolidayMode;
822
- set = await this.melCloudAtw.send(deviceState);
826
+ deviceData.Device[key] = value;
827
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.HolidayMode;
828
+ set = await this.melCloudAtw.send(deviceData);
823
829
  break;
824
830
  case 'ProhibitZone1':
825
- deviceState[key] = value;
826
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitZone1;
827
- set = await this.melCloudAtw.send(deviceState);
831
+ deviceData.Device[key] = value;
832
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitZone1;
833
+ set = await this.melCloudAtw.send(deviceData);
828
834
  break;
829
835
  case 'ProhibitZone2':
830
- deviceState[key] = value;
831
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitZone2;
832
- set = await this.melCloudAtw.send(deviceState);
836
+ deviceData.Device[key] = value;
837
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitZone2;
838
+ set = await this.melCloudAtw.send(deviceData);
833
839
  break;
834
840
  case 'ProhibitHotWater':
835
- deviceState[key] = value;
836
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
837
- set = await this.melCloudAtw.send(deviceState);
841
+ deviceData.Device[key] = value;
842
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
843
+ set = await this.melCloudAtw.send(deviceData);
838
844
  break;
839
845
  default:
840
846
  this.emit('warn', `${integration}, received key: ${key}, value: ${value}`);
@@ -846,7 +852,7 @@ class DeviceAtw extends EventEmitter {
846
852
  };
847
853
  }
848
854
  //prepare accessory
849
- async prepareAccessory(accountInfo, deviceState, deviceId, deviceTypeText, deviceName, accountName) {
855
+ async prepareAccessory(accountInfo, deviceData, deviceId, deviceTypeText, deviceName, accountName) {
850
856
  try {
851
857
  //accessory
852
858
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare accessory`) : false;
@@ -901,9 +907,9 @@ class DeviceAtw extends EventEmitter {
901
907
  try {
902
908
  switch (i) {
903
909
  case 0: //Heat Pump
904
- deviceState.Power = [false, true][state];
905
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
906
- await this.melCloudAtw.send(deviceState);
910
+ deviceData.Device.Power = [false, true][state];
911
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
912
+ await this.melCloudAtw.send(deviceData);
907
913
  const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set power: ${state ? 'ON' : 'OFF'}`);
908
914
  break;
909
915
  };
@@ -933,76 +939,76 @@ class DeviceAtw extends EventEmitter {
933
939
  case 0: //Heat Pump - ON, HEAT, COOL
934
940
  switch (value) {
935
941
  case 0: //AUTO
936
- deviceState.Power = true;
937
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
942
+ deviceData.Device.Power = true;
943
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
938
944
  break;
939
945
  case 1: //HEAT
940
- deviceState.Power = true;
941
- deviceState.UnitStatus = 0;
942
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
946
+ deviceData.Device.Power = true;
947
+ deviceData.Device.UnitStatus = 0;
948
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
943
949
  break;
944
950
  case 2: //COOL
945
- deviceState.Power = true;
946
- deviceState.UnitStatus = 1;
947
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
951
+ deviceData.Device.Power = true;
952
+ deviceData.Device.UnitStatus = 1;
953
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
948
954
  break;
949
955
  };
950
- operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceState.UnitStatus]][this.accessory.power];
956
+ operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
951
957
  break;
952
958
  case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
953
959
  switch (value) {
954
960
  case 0: //AUTO - HEAT CURVE
955
- deviceState.OperationModeZone1 = 2;
956
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
961
+ deviceData.Device.OperationModeZone1 = 2;
962
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
957
963
  break;
958
964
  case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
959
- deviceState.OperationModeZone1 = [0, 3][this.unitStatus];
960
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
965
+ deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
966
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
961
967
  break;
962
968
  case 2: //COOL - HEAT FLOW / COOL FLOW
963
- deviceState.OperationModeZone1 = [1, 4][this.unitStatus];
964
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
969
+ deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
970
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
965
971
  break;
966
972
  };
967
- operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceState.OperationModeZone1];
973
+ operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
968
974
  break;
969
975
  case caseHotWater: //Hot Water - AUTO, HEAT NOW
970
976
  switch (value) {
971
977
  case 0: //AUTO
972
- deviceState.ForcedHotWaterMode = false;
973
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
978
+ deviceData.Device.ForcedHotWaterMode = false;
979
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
974
980
  break;
975
981
  case 1: //HEAT
976
- deviceState.ForcedHotWaterMode = true;
977
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
982
+ deviceData.Device.ForcedHotWaterMode = true;
983
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
978
984
  break;
979
985
  case 2: //COOL
980
- deviceState.ForcedHotWaterMode = false;
981
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
986
+ deviceData.Device.ForcedHotWaterMode = false;
987
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
982
988
  break
983
989
  };
984
- operationModeText = deviceState.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceState.ForcedHotWaterMode ? 1 : 0];
990
+ operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
985
991
  break;
986
992
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
987
993
  switch (value) {
988
994
  case 0: //AUTO
989
- deviceState.OperationModeZone2 = 2;
990
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
995
+ deviceData.Device.OperationModeZone2 = 2;
996
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
991
997
  break;
992
998
  case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
993
- deviceState.OperationModeZone2 = [0, 3][this.unitStatus];
994
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
999
+ deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
1000
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
995
1001
  break;
996
1002
  case 2: //COOL - HEAT FLOW / COOL FLOW
997
- deviceState.OperationModeZone2 = [1, 4][this.unitStatus];
998
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1003
+ deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
1004
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
999
1005
  break;
1000
1006
  };
1001
- operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceState.OperationModeZone2];
1007
+ operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
1002
1008
  break;
1003
1009
  };
1004
1010
 
1005
- await this.melCloudAtw.send(deviceState);
1011
+ await this.melCloudAtw.send(deviceData);
1006
1012
  const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
1007
1013
  } catch (error) {
1008
1014
  this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
@@ -1034,24 +1040,24 @@ class DeviceAtw extends EventEmitter {
1034
1040
  try {
1035
1041
  switch (i) {
1036
1042
  case 0: //Heat Pump
1037
- //deviceState.SetTemperatureZone1 = value;
1038
- //deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1043
+ //deviceData.Device.SetTemperatureZone1 = value;
1044
+ //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1039
1045
  break;
1040
1046
  case 1: //Zone 1
1041
- deviceState.SetTemperatureZone1 = value;
1042
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1047
+ deviceData.Device.SetTemperatureZone1 = value;
1048
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1043
1049
  break;
1044
1050
  case caseHotWater: //Hot Water
1045
- deviceState.SetTankWaterTemperature = value;
1046
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1051
+ deviceData.Device.SetTankWaterTemperature = value;
1052
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1047
1053
  break;
1048
1054
  case caseZone2: //Zone 2
1049
- deviceState.SetTemperatureZone2 = value;
1050
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1055
+ deviceData.Device.SetTemperatureZone2 = value;
1056
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1051
1057
  break;
1052
1058
  };
1053
1059
 
1054
- const set = i > 0 ? await this.melCloudAtw.send(deviceState) : false;
1060
+ const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
1055
1061
  const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
1056
1062
  } catch (error) {
1057
1063
  this.emit('warn', `${zoneName}, Set heating threshold temperature error: ${error}`);
@@ -1074,24 +1080,24 @@ class DeviceAtw extends EventEmitter {
1074
1080
  try {
1075
1081
  switch (i) {
1076
1082
  case 0: //Heat Pump
1077
- //deviceState.SetTemperatureZone1 = value;
1078
- //deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1083
+ //deviceData.Device.SetTemperatureZone1 = value;
1084
+ //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1079
1085
  break;
1080
1086
  case 1: //Zone 1
1081
- deviceState.SetTemperatureZone1 = value;
1082
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1087
+ deviceData.Device.SetTemperatureZone1 = value;
1088
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1083
1089
  break;
1084
1090
  case caseHotWater: //Hot Water
1085
- deviceState.SetTankWaterTemperature = value;
1086
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1091
+ deviceData.Device.SetTankWaterTemperature = value;
1092
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1087
1093
  break;
1088
1094
  case caseZone2: //Zone 2
1089
- deviceState.SetTemperatureZone2 = value;
1090
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1095
+ deviceData.Device.SetTemperatureZone2 = value;
1096
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1091
1097
  break;
1092
1098
  };
1093
1099
 
1094
- const set = i > 0 ? await this.melCloudAtw.send(deviceState) : false;
1100
+ const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
1095
1101
  const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
1096
1102
  } catch (error) {
1097
1103
  this.emit('warn', `${zoneName}, Set cooling threshold temperature error: ${error}`);
@@ -1108,26 +1114,26 @@ class DeviceAtw extends EventEmitter {
1108
1114
  value = value ? true : false;
1109
1115
  switch (i) {
1110
1116
  case 0: //Heat Pump
1111
- deviceState.ProhibitZone1 = value;
1112
- deviceState.ProhibitHotWater = value;
1113
- deviceState.ProhibitZone2 = value;
1117
+ deviceData.Device.ProhibitZone1 = value;
1118
+ deviceData.Device.ProhibitHotWater = value;
1119
+ deviceData.Device.ProhibitZone2 = value;
1114
1120
  CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1115
1121
  break;
1116
1122
  case 1: //Zone 1
1117
- deviceState.ProhibitZone1 = value;
1123
+ deviceData.Device.ProhibitZone1 = value;
1118
1124
  CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
1119
1125
  break;
1120
1126
  case caseHotWater: //Hot Water
1121
- deviceState.ProhibitHotWater = value;
1127
+ deviceData.Device.ProhibitHotWater = value;
1122
1128
  CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
1123
1129
  break;
1124
1130
  case caseZone2: //Zone 2
1125
- deviceState.ProhibitZone2 = value;
1131
+ deviceData.Device.ProhibitZone2 = value;
1126
1132
  CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1127
1133
  break;
1128
1134
  };
1129
1135
 
1130
- await this.melCloudAtw.send(deviceState);
1136
+ await this.melCloudAtw.send(deviceData);
1131
1137
  const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set lock physical controls: ${value ? 'LOCK' : 'UNLOCK'}`);
1132
1138
  } catch (error) {
1133
1139
  this.emit('warn', `${zoneName}, Set lock physical controls error: ${error}`);
@@ -1175,92 +1181,92 @@ class DeviceAtw extends EventEmitter {
1175
1181
  case 0: //Heat Pump - HEAT, COOL
1176
1182
  switch (value) {
1177
1183
  case 0: //OFF
1178
- deviceState.Power = false;
1179
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1184
+ deviceData.Device.Power = false;
1185
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1180
1186
  break;
1181
1187
  case 1: //HEAT
1182
- deviceState.Power = true;
1183
- deviceState.UnitStatus = 0;
1184
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1188
+ deviceData.Device.Power = true;
1189
+ deviceData.Device.UnitStatus = 0;
1190
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1185
1191
  break;
1186
1192
  case 2: //COOL
1187
- deviceState.Power = true;
1188
- deviceState.UnitStatus = 1;
1189
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1193
+ deviceData.Device.Power = true;
1194
+ deviceData.Device.UnitStatus = 1;
1195
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1190
1196
  break;
1191
1197
  case 3: //AUTO
1192
- deviceState.Power = true;
1193
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1198
+ deviceData.Device.Power = true;
1199
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1194
1200
  break;
1195
1201
  };
1196
- operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceState.UnitStatus]][this.accessory.power];
1202
+ operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
1197
1203
  break;
1198
1204
  case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1199
1205
  switch (value) {
1200
1206
  case 0: //OFF - HEAT CURVE
1201
- deviceState.OperationModeZone1 = 2;
1202
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1207
+ deviceData.Device.OperationModeZone1 = 2;
1208
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1203
1209
  break;
1204
1210
  case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
1205
- deviceState.OperationModeZone1 = [0, 3][this.unitStatus];
1206
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1211
+ deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
1212
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1207
1213
  break;
1208
1214
  case 2: //COOL - HEAT FLOW / COOL FLOW
1209
- deviceState.OperationModeZone1 = [1, 4][this.unitStatus];
1210
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1215
+ deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
1216
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1211
1217
  break;
1212
1218
  case 3: //AUTO - HEAT CURVE
1213
- deviceState.OperationModeZone1 = 2;
1214
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1219
+ deviceData.Device.OperationModeZone1 = 2;
1220
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1215
1221
  break;
1216
1222
  };
1217
- operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceState.OperationModeZone1];
1223
+ operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
1218
1224
  break;
1219
1225
  case caseHotWater: //Hot Water - AUTO, HEAT NOW
1220
1226
  switch (value) {
1221
1227
  case 0: //OFF
1222
- deviceState.ForcedHotWaterMode = false;
1223
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1228
+ deviceData.Device.ForcedHotWaterMode = false;
1229
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1224
1230
  break;
1225
1231
  case 1: //HEAT
1226
- deviceState.ForcedHotWaterMode = true;
1227
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1232
+ deviceData.Device.ForcedHotWaterMode = true;
1233
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1228
1234
  break;
1229
1235
  case 2: //COOL
1230
- deviceState.ForcedHotWaterMode = false;
1231
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1236
+ deviceData.Device.ForcedHotWaterMode = false;
1237
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1232
1238
  break;
1233
1239
  case 3: //AUTO
1234
- deviceState.ForcedHotWaterMode = false;
1235
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1240
+ deviceData.Device.ForcedHotWaterMode = false;
1241
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1236
1242
  break;
1237
1243
  };
1238
- operationModeText = deviceState.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceState.ForcedHotWaterMode ? 1 : 0];
1244
+ operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
1239
1245
  break;
1240
1246
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1241
1247
  switch (value) {
1242
1248
  case 0: //OFF - HEAT CURVE
1243
- deviceState.OperationModeZone2 = 2;
1244
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1249
+ deviceData.Device.OperationModeZone2 = 2;
1250
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1245
1251
  break;
1246
1252
  case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
1247
- deviceState.OperationModeZone2 = [0, 3][this.unitStatus];
1248
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1253
+ deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
1254
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1249
1255
  break;
1250
1256
  case 2: //COOL - HEAT FLOW / COOL FLOW
1251
- deviceState.OperationModeZone2 = [1, 4][this.unitStatus];
1252
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1257
+ deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
1258
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1253
1259
  break;
1254
1260
  case 3: //AUTO - HEAT CURVE
1255
- deviceState.OperationModeZone2 = 2;
1256
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1261
+ deviceData.Device.OperationModeZone2 = 2;
1262
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1257
1263
  break;
1258
1264
  };
1259
- operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceState.OperationModeZone2];
1265
+ operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
1260
1266
  break;
1261
1267
  };
1262
1268
 
1263
- await this.melCloudAtw.send(deviceState);
1269
+ await this.melCloudAtw.send(deviceData);
1264
1270
  const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
1265
1271
  } catch (error) {
1266
1272
  this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
@@ -1290,24 +1296,24 @@ class DeviceAtw extends EventEmitter {
1290
1296
  try {
1291
1297
  switch (i) {
1292
1298
  case 0: //Heat Pump
1293
- //deviceState.SetTemperatureZone1 = value;
1294
- //deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1299
+ //deviceData.Device.SetTemperatureZone1 = value;
1300
+ //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1295
1301
  break;
1296
1302
  case 1: //Zone 1
1297
- deviceState.SetTemperatureZone1 = value;
1298
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1303
+ deviceData.Device.SetTemperatureZone1 = value;
1304
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1299
1305
  break;
1300
1306
  case caseHotWater: //Hot Water
1301
- deviceState.SetTankWaterTemperature = value;
1302
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1307
+ deviceData.Device.SetTankWaterTemperature = value;
1308
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1303
1309
  break;
1304
1310
  case caseZone2: //Zone 2
1305
- deviceState.SetTemperatureZone2 = value;
1306
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1311
+ deviceData.Device.SetTemperatureZone2 = value;
1312
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1307
1313
  break;
1308
1314
  };
1309
1315
 
1310
- const set = i > 0 ? await this.melCloudAtw.send(deviceState) : false;
1316
+ const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
1311
1317
  const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set temperature: ${value}${this.accessory.temperatureUnit}`);
1312
1318
  } catch (error) {
1313
1319
  this.emit('warn', `${zoneName}, Set temperature error: ${error}`);
@@ -1565,8 +1571,7 @@ class DeviceAtw extends EventEmitter {
1565
1571
 
1566
1572
  for (let i = 0; i < presetsConfiguredCount; i++) {
1567
1573
  const preset = presetsConfigured[i];
1568
- const index = presetsOnServer.findIndex(p => p.ID === preset.Id);
1569
- const presetData = presetsOnServer[index];
1574
+ const presetData = presetsOnServer.find(p => p.ID === preset.Id);
1570
1575
 
1571
1576
  //get preset name
1572
1577
  const presetName = preset.name;
@@ -1593,34 +1598,34 @@ class DeviceAtw extends EventEmitter {
1593
1598
  try {
1594
1599
  switch (state) {
1595
1600
  case true:
1596
- previousPresets[i] = deviceState;
1597
- deviceState.Power = presetData.Power;
1598
- deviceState.EcoHotWater = presetData.EcoHotWater;
1599
- deviceState.OperationModeZone1 = presetData.OperationModeZone1;
1600
- deviceState.OperationModeZone2 = presetData.OperationModeZone2;
1601
- deviceState.SetTankWaterTemperature = presetData.SetTankWaterTemperature;
1602
- deviceState.SetTemperatureZone1 = presetData.SetTemperatureZone1;
1603
- deviceState.SetTemperatureZone2 = presetData.SetTemperatureZone2;
1604
- deviceState.ForcedHotWaterMode = presetData.ForcedHotWaterMode;
1605
- deviceState.SetHeatFlowTemperatureZone1 = presetData.SetHeatFlowTemperatureZone1;
1606
- deviceState.SetHeatFlowTemperatureZone2 = presetData.SetHeatFlowTemperatureZone2;
1607
- deviceState.SetCoolFlowTemperatureZone1 = presetData.SetCoolFlowTemperatureZone1;
1608
- deviceState.SetCoolFlowTemperatureZone2 = presetData.SetCoolFlowTemperatureZone2;
1609
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1601
+ previousPresets[i] = deviceData.Device;
1602
+ deviceData.Device.Power = presetData.Power;
1603
+ deviceData.Device.EcoHotWater = presetData.EcoHotWater;
1604
+ deviceData.Device.OperationModeZone1 = presetData.OperationModeZone1;
1605
+ deviceData.Device.OperationModeZone2 = presetData.OperationModeZone2;
1606
+ deviceData.Device.SetTankWaterTemperature = presetData.SetTankWaterTemperature;
1607
+ deviceData.Device.SetTemperatureZone1 = presetData.SetTemperatureZone1;
1608
+ deviceData.Device.SetTemperatureZone2 = presetData.SetTemperatureZone2;
1609
+ deviceData.Device.ForcedHotWaterMode = presetData.ForcedHotWaterMode;
1610
+ deviceData.Device.SetHeatFlowTemperatureZone1 = presetData.SetHeatFlowTemperatureZone1;
1611
+ deviceData.Device.SetHeatFlowTemperatureZone2 = presetData.SetHeatFlowTemperatureZone2;
1612
+ deviceData.Device.SetCoolFlowTemperatureZone1 = presetData.SetCoolFlowTemperatureZone1;
1613
+ deviceData.Device.SetCoolFlowTemperatureZone2 = presetData.SetCoolFlowTemperatureZone2;
1614
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1610
1615
  break;
1611
1616
  case false:
1612
- deviceState = previousPresets[i];
1617
+ deviceData.Device = previousPresets[i];
1613
1618
  break;
1614
1619
  };
1615
1620
 
1616
- await this.melCloudAtw.send(deviceState);
1621
+ await this.melCloudAtw.send(deviceData);
1617
1622
  const info = this.disableLogInfo ? false : this.emit('message', `Set: ${presetName}`);
1618
1623
  } catch (error) {
1619
1624
  this.emit('warn', `Set preset error: ${error}`);
1620
1625
  };
1621
1626
  });
1622
1627
  };
1623
- previousPresets.push(deviceState);
1628
+ previousPresets.push(deviceData.Device);
1624
1629
  this.presetsServices.push(presetService);
1625
1630
  accessory.addService(presetService);
1626
1631
  };
@@ -1657,128 +1662,128 @@ class DeviceAtw extends EventEmitter {
1657
1662
  const state = button.state;
1658
1663
  return state;
1659
1664
  })
1660
- if (displayType > 2) {
1661
- buttonService.onSet(async (state) => {
1662
- try {
1663
- switch (mode) {
1664
- case 0: //POWER ON,OFF
1665
- deviceState.Power = state;
1666
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1667
- break;
1668
- case 1: //HEAT PUMP HEAT
1669
- deviceState.Power = true;
1670
- deviceState.UnitStatus = 0;
1671
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1672
- break;
1673
- case 2: //COOL
1674
- deviceState.Power = true;
1675
- deviceState.UnitStatus = 1;
1676
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1677
- break;
1678
- case 3: //HOLIDAY
1679
- deviceState.HolidayMode = state;
1680
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.HolidayMode;
1681
- break;
1682
- case 10: //ALL ZONES PHYSICAL LOCK CONTROL
1683
- deviceState.ProhibitZone1 = state;
1684
- deviceState.ProhibitHotWater = state;
1685
- deviceState.ProhibitZone2 = state;
1686
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1687
- break;
1688
- case 20: //ZONE 1 HEAT THERMOSTAT
1689
- deviceState.Power = true;
1690
- deviceState.OperationModeZone1 = 0;
1691
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1692
- break;
1693
- case 21: //HEAT FLOW
1694
- deviceState.Power = true;
1695
- deviceState.OperationModeZone1 = 1;
1696
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1697
- break;
1698
- case 22: //HEAT CURVE
1699
- deviceState.Power = true;
1700
- deviceState.OperationModeZone1 = 2;
1701
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1702
- break;
1703
- case 23: //COOL THERMOSTAT
1704
- deviceState.Power = true;
1705
- deviceState.OperationModeZone1 = 3;
1706
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1707
- break;
1708
- case 24: //COOL FLOW
1709
- deviceState.Power = true;
1710
- deviceState.OperationModeZone1 = 4;
1711
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1712
- break;
1713
- case 25: //FLOOR DRY UP
1714
- deviceState.Power = true;
1715
- deviceState.OperationModeZone1 = 5;
1716
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1717
- break;
1718
- case 30: //PHYSICAL LOCK CONTROL
1719
- deviceState.ProhibitZone1 = state;
1720
- CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
1721
- break;
1722
- case 40: //HOT WATER NORMAL/FORCE HOT WATER
1723
- deviceState.Power = true;
1724
- deviceState.ForcedHotWaterMode = state;
1725
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1726
- break;
1727
- case 41: //NORMAL/ECO
1728
- deviceState.Power = true;
1729
- deviceState.EcoHotWater = state;
1730
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.EcoHotWater;
1731
- break;
1732
- case 50: //PHYSICAL LOCK CONTROL
1733
- deviceState.ProhibitHotWater = state;
1734
- CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
1735
- break;
1736
- case 60: //ZONE 2 HEAT THERMOSTAT
1737
- deviceState.Power = true;
1738
- deviceState.OperationModeZone2 = 0;
1739
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1740
- break;
1741
- case 61: // HEAT FLOW
1742
- deviceState.Power = true;
1743
- deviceState.OperationModeZone2 = 1;
1744
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1745
- break;
1746
- case 62: //HEAT CURVE
1747
- deviceState.Power = true;
1748
- deviceState.OperationModeZone2 = 2;
1749
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1750
- break;
1751
- case 63: //COOL THERMOSTAT
1752
- deviceState.Power = true;
1753
- deviceState.OperationModeZone2 = 3;
1754
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1755
- break;
1756
- case 64: //COOL FLOW
1757
- deviceState.Power = true;
1758
- deviceState.OperationModeZone2 = 4;
1759
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1760
- break;
1761
- case 65: //FLOOR DRY UP
1762
- deviceState.Power = true;
1763
- deviceState.OperationModeZone2 = 5;
1764
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1765
- break;
1766
- case 70: //PHYSICAL LOCK CONTROL
1767
- deviceState.ProhibitZone2 = state;
1768
- CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1769
- break;
1770
- default:
1771
- this.emit('message', `Unknown button mode: ${mode}`);
1772
- break;
1773
- };
1665
+ .onSet(async (state) => {
1666
+ if (displayType > 0 && displayType < 3) {
1667
+ try {
1668
+ switch (mode) {
1669
+ case 0: //POWER ON,OFF
1670
+ deviceData.Device.Power = state;
1671
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1672
+ break;
1673
+ case 1: //HEAT PUMP HEAT
1674
+ deviceData.Device.Power = true;
1675
+ deviceData.Device.UnitStatus = 0;
1676
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1677
+ break;
1678
+ case 2: //COOL
1679
+ deviceData.Device.Power = true;
1680
+ deviceData.Device.UnitStatus = 1;
1681
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1682
+ break;
1683
+ case 3: //HOLIDAY
1684
+ deviceData.Device.HolidayMode = state;
1685
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.HolidayMode;
1686
+ break;
1687
+ case 10: //ALL ZONES PHYSICAL LOCK CONTROL
1688
+ deviceData.Device.ProhibitZone1 = state;
1689
+ deviceData.Device.ProhibitHotWater = state;
1690
+ deviceData.Device.ProhibitZone2 = state;
1691
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1692
+ break;
1693
+ case 20: //ZONE 1 HEAT THERMOSTAT
1694
+ deviceData.Device.Power = true;
1695
+ deviceData.Device.OperationModeZone1 = 0;
1696
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1697
+ break;
1698
+ case 21: //HEAT FLOW
1699
+ deviceData.Device.Power = true;
1700
+ deviceData.Device.OperationModeZone1 = 1;
1701
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1702
+ break;
1703
+ case 22: //HEAT CURVE
1704
+ deviceData.Device.Power = true;
1705
+ deviceData.Device.OperationModeZone1 = 2;
1706
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1707
+ break;
1708
+ case 23: //COOL THERMOSTAT
1709
+ deviceData.Device.Power = true;
1710
+ deviceData.Device.OperationModeZone1 = 3;
1711
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1712
+ break;
1713
+ case 24: //COOL FLOW
1714
+ deviceData.Device.Power = true;
1715
+ deviceData.Device.OperationModeZone1 = 4;
1716
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1717
+ break;
1718
+ case 25: //FLOOR DRY UP
1719
+ deviceData.Device.Power = true;
1720
+ deviceData.Device.OperationModeZone1 = 5;
1721
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1722
+ break;
1723
+ case 30: //PHYSICAL LOCK CONTROL
1724
+ deviceData.Device.ProhibitZone1 = state;
1725
+ CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
1726
+ break;
1727
+ case 40: //HOT WATER NORMAL/FORCE HOT WATER
1728
+ deviceData.Device.Power = true;
1729
+ deviceData.Device.ForcedHotWaterMode = state;
1730
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1731
+ break;
1732
+ case 41: //NORMAL/ECO
1733
+ deviceData.Device.Power = true;
1734
+ deviceData.Device.EcoHotWater = state;
1735
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.EcoHotWater;
1736
+ break;
1737
+ case 50: //PHYSICAL LOCK CONTROL
1738
+ deviceData.Device.ProhibitHotWater = state;
1739
+ CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
1740
+ break;
1741
+ case 60: //ZONE 2 HEAT THERMOSTAT
1742
+ deviceData.Device.Power = true;
1743
+ deviceData.Device.OperationModeZone2 = 0;
1744
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1745
+ break;
1746
+ case 61: // HEAT FLOW
1747
+ deviceData.Device.Power = true;
1748
+ deviceData.Device.OperationModeZone2 = 1;
1749
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1750
+ break;
1751
+ case 62: //HEAT CURVE
1752
+ deviceData.Device.Power = true;
1753
+ deviceData.Device.OperationModeZone2 = 2;
1754
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1755
+ break;
1756
+ case 63: //COOL THERMOSTAT
1757
+ deviceData.Device.Power = true;
1758
+ deviceData.Device.OperationModeZone2 = 3;
1759
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1760
+ break;
1761
+ case 64: //COOL FLOW
1762
+ deviceData.Device.Power = true;
1763
+ deviceData.Device.OperationModeZone2 = 4;
1764
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1765
+ break;
1766
+ case 65: //FLOOR DRY UP
1767
+ deviceData.Device.Power = true;
1768
+ deviceData.Device.OperationModeZone2 = 5;
1769
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1770
+ break;
1771
+ case 70: //PHYSICAL LOCK CONTROL
1772
+ deviceData.Device.ProhibitZone2 = state;
1773
+ CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1774
+ break;
1775
+ default:
1776
+ this.emit('message', `Unknown button mode: ${mode}`);
1777
+ break;
1778
+ };
1774
1779
 
1775
- await this.melCloudAtw.send(deviceState);
1776
- const info = this.disableLogInfo ? false : this.emit('message', `Set: ${buttonName}`);
1777
- } catch (error) {
1778
- this.emit('warn', `Set button error: ${error}`);
1780
+ await this.melCloudAtw.send(deviceData);
1781
+ const info = this.disableLogInfo ? false : this.emit('message', `Set: ${buttonName}`);
1782
+ } catch (error) {
1783
+ this.emit('warn', `Set button error: ${error}`);
1784
+ };
1779
1785
  };
1780
1786
  });
1781
- };
1782
1787
  this.buttonsServices.push(buttonService);
1783
1788
  accessory.addService(buttonService)
1784
1789
  };