homebridge-melcloud-control 3.1.11 → 3.1.17

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;
@@ -864,7 +870,11 @@ class DeviceAtw extends EventEmitter {
864
870
  .setCharacteristic(Characteristic.FirmwareRevision, this.firmwareRevision);
865
871
 
866
872
  //melcloud services
873
+ const displayMode = this.displayMode;
867
874
  const zonesCount = this.zonesCount;
875
+ const caseHotWater = this.caseHotWater;
876
+ const caseZone2 = this.caseZone2;
877
+ const heatCoolModes = this.heatCoolModes;
868
878
  const presetsOnServer = this.accessory.presetsOnServer;
869
879
  const temperatureSensor = this.temperatureSensor;
870
880
  const temperatureSensorFlow = this.temperatureSensorFlow;
@@ -875,14 +885,6 @@ class DeviceAtw extends EventEmitter {
875
885
  const temperatureSensorReturnWaterTank = this.temperatureSensorReturnWaterTank;
876
886
  const temperatureSensorFlowZone2 = this.temperatureSensorFlowZone2;
877
887
  const temperatureSensorReturnZone2 = this.temperatureSensorReturnZone2;
878
- const presetsConfigured = this.presetsConfigured;
879
- const presetsConfiguredCount = this.presetsConfiguredCount;
880
- const buttonsConfigured = this.buttonsConfigured;
881
- const buttonsConfiguredCount = this.buttonsConfiguredCount;
882
- const displayMode = this.displayMode;
883
- const caseHotWater = this.caseHotWater;
884
- const caseZone2 = this.caseZone2;
885
- const heatCoolModes = this.heatCoolModes;
886
888
 
887
889
  this.melCloudServices = [];
888
890
  for (let i = 0; i < zonesCount; i++) {
@@ -901,9 +903,9 @@ class DeviceAtw extends EventEmitter {
901
903
  try {
902
904
  switch (i) {
903
905
  case 0: //Heat Pump
904
- deviceState.Power = [false, true][state];
905
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
906
- await this.melCloudAtw.send(deviceState);
906
+ deviceData.Device.Power = [false, true][state];
907
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
908
+ await this.melCloudAtw.send(deviceData);
907
909
  const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set power: ${state ? 'ON' : 'OFF'}`);
908
910
  break;
909
911
  };
@@ -933,76 +935,76 @@ class DeviceAtw extends EventEmitter {
933
935
  case 0: //Heat Pump - ON, HEAT, COOL
934
936
  switch (value) {
935
937
  case 0: //AUTO
936
- deviceState.Power = true;
937
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
938
+ deviceData.Device.Power = true;
939
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
938
940
  break;
939
941
  case 1: //HEAT
940
- deviceState.Power = true;
941
- deviceState.UnitStatus = 0;
942
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
942
+ deviceData.Device.Power = true;
943
+ deviceData.Device.UnitStatus = 0;
944
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
943
945
  break;
944
946
  case 2: //COOL
945
- deviceState.Power = true;
946
- deviceState.UnitStatus = 1;
947
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
947
+ deviceData.Device.Power = true;
948
+ deviceData.Device.UnitStatus = 1;
949
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
948
950
  break;
949
951
  };
950
- operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceState.UnitStatus]][this.accessory.power];
952
+ operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
951
953
  break;
952
954
  case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
953
955
  switch (value) {
954
956
  case 0: //AUTO - HEAT CURVE
955
- deviceState.OperationModeZone1 = 2;
956
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
957
+ deviceData.Device.OperationModeZone1 = 2;
958
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
957
959
  break;
958
960
  case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
959
- deviceState.OperationModeZone1 = [0, 3][this.unitStatus];
960
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
961
+ deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
962
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
961
963
  break;
962
964
  case 2: //COOL - HEAT FLOW / COOL FLOW
963
- deviceState.OperationModeZone1 = [1, 4][this.unitStatus];
964
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
965
+ deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
966
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
965
967
  break;
966
968
  };
967
- operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceState.OperationModeZone1];
969
+ operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
968
970
  break;
969
971
  case caseHotWater: //Hot Water - AUTO, HEAT NOW
970
972
  switch (value) {
971
973
  case 0: //AUTO
972
- deviceState.ForcedHotWaterMode = false;
973
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
974
+ deviceData.Device.ForcedHotWaterMode = false;
975
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
974
976
  break;
975
977
  case 1: //HEAT
976
- deviceState.ForcedHotWaterMode = true;
977
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
978
+ deviceData.Device.ForcedHotWaterMode = true;
979
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
978
980
  break;
979
981
  case 2: //COOL
980
- deviceState.ForcedHotWaterMode = false;
981
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
982
+ deviceData.Device.ForcedHotWaterMode = false;
983
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
982
984
  break
983
985
  };
984
- operationModeText = deviceState.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceState.ForcedHotWaterMode ? 1 : 0];
986
+ operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
985
987
  break;
986
988
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
987
989
  switch (value) {
988
990
  case 0: //AUTO
989
- deviceState.OperationModeZone2 = 2;
990
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
991
+ deviceData.Device.OperationModeZone2 = 2;
992
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
991
993
  break;
992
994
  case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
993
- deviceState.OperationModeZone2 = [0, 3][this.unitStatus];
994
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
995
+ deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
996
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
995
997
  break;
996
998
  case 2: //COOL - HEAT FLOW / COOL FLOW
997
- deviceState.OperationModeZone2 = [1, 4][this.unitStatus];
998
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
999
+ deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
1000
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
999
1001
  break;
1000
1002
  };
1001
- operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceState.OperationModeZone2];
1003
+ operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
1002
1004
  break;
1003
1005
  };
1004
1006
 
1005
- await this.melCloudAtw.send(deviceState);
1007
+ await this.melCloudAtw.send(deviceData);
1006
1008
  const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
1007
1009
  } catch (error) {
1008
1010
  this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
@@ -1034,24 +1036,24 @@ class DeviceAtw extends EventEmitter {
1034
1036
  try {
1035
1037
  switch (i) {
1036
1038
  case 0: //Heat Pump
1037
- //deviceState.SetTemperatureZone1 = value;
1038
- //deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1039
+ //deviceData.Device.SetTemperatureZone1 = value;
1040
+ //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1039
1041
  break;
1040
1042
  case 1: //Zone 1
1041
- deviceState.SetTemperatureZone1 = value;
1042
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1043
+ deviceData.Device.SetTemperatureZone1 = value;
1044
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1043
1045
  break;
1044
1046
  case caseHotWater: //Hot Water
1045
- deviceState.SetTankWaterTemperature = value;
1046
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1047
+ deviceData.Device.SetTankWaterTemperature = value;
1048
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1047
1049
  break;
1048
1050
  case caseZone2: //Zone 2
1049
- deviceState.SetTemperatureZone2 = value;
1050
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1051
+ deviceData.Device.SetTemperatureZone2 = value;
1052
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1051
1053
  break;
1052
1054
  };
1053
1055
 
1054
- const set = i > 0 ? await this.melCloudAtw.send(deviceState) : false;
1056
+ const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
1055
1057
  const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
1056
1058
  } catch (error) {
1057
1059
  this.emit('warn', `${zoneName}, Set heating threshold temperature error: ${error}`);
@@ -1074,24 +1076,24 @@ class DeviceAtw extends EventEmitter {
1074
1076
  try {
1075
1077
  switch (i) {
1076
1078
  case 0: //Heat Pump
1077
- //deviceState.SetTemperatureZone1 = value;
1078
- //deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1079
+ //deviceData.Device.SetTemperatureZone1 = value;
1080
+ //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1079
1081
  break;
1080
1082
  case 1: //Zone 1
1081
- deviceState.SetTemperatureZone1 = value;
1082
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1083
+ deviceData.Device.SetTemperatureZone1 = value;
1084
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1083
1085
  break;
1084
1086
  case caseHotWater: //Hot Water
1085
- deviceState.SetTankWaterTemperature = value;
1086
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1087
+ deviceData.Device.SetTankWaterTemperature = value;
1088
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1087
1089
  break;
1088
1090
  case caseZone2: //Zone 2
1089
- deviceState.SetTemperatureZone2 = value;
1090
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1091
+ deviceData.Device.SetTemperatureZone2 = value;
1092
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1091
1093
  break;
1092
1094
  };
1093
1095
 
1094
- const set = i > 0 ? await this.melCloudAtw.send(deviceState) : false;
1096
+ const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
1095
1097
  const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
1096
1098
  } catch (error) {
1097
1099
  this.emit('warn', `${zoneName}, Set cooling threshold temperature error: ${error}`);
@@ -1108,26 +1110,26 @@ class DeviceAtw extends EventEmitter {
1108
1110
  value = value ? true : false;
1109
1111
  switch (i) {
1110
1112
  case 0: //Heat Pump
1111
- deviceState.ProhibitZone1 = value;
1112
- deviceState.ProhibitHotWater = value;
1113
- deviceState.ProhibitZone2 = value;
1113
+ deviceData.Device.ProhibitZone1 = value;
1114
+ deviceData.Device.ProhibitHotWater = value;
1115
+ deviceData.Device.ProhibitZone2 = value;
1114
1116
  CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1115
1117
  break;
1116
1118
  case 1: //Zone 1
1117
- deviceState.ProhibitZone1 = value;
1119
+ deviceData.Device.ProhibitZone1 = value;
1118
1120
  CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
1119
1121
  break;
1120
1122
  case caseHotWater: //Hot Water
1121
- deviceState.ProhibitHotWater = value;
1123
+ deviceData.Device.ProhibitHotWater = value;
1122
1124
  CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
1123
1125
  break;
1124
1126
  case caseZone2: //Zone 2
1125
- deviceState.ProhibitZone2 = value;
1127
+ deviceData.Device.ProhibitZone2 = value;
1126
1128
  CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1127
1129
  break;
1128
1130
  };
1129
1131
 
1130
- await this.melCloudAtw.send(deviceState);
1132
+ await this.melCloudAtw.send(deviceData);
1131
1133
  const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set lock physical controls: ${value ? 'LOCK' : 'UNLOCK'}`);
1132
1134
  } catch (error) {
1133
1135
  this.emit('warn', `${zoneName}, Set lock physical controls error: ${error}`);
@@ -1175,92 +1177,92 @@ class DeviceAtw extends EventEmitter {
1175
1177
  case 0: //Heat Pump - HEAT, COOL
1176
1178
  switch (value) {
1177
1179
  case 0: //OFF
1178
- deviceState.Power = false;
1179
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1180
+ deviceData.Device.Power = false;
1181
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1180
1182
  break;
1181
1183
  case 1: //HEAT
1182
- deviceState.Power = true;
1183
- deviceState.UnitStatus = 0;
1184
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1184
+ deviceData.Device.Power = true;
1185
+ deviceData.Device.UnitStatus = 0;
1186
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1185
1187
  break;
1186
1188
  case 2: //COOL
1187
- deviceState.Power = true;
1188
- deviceState.UnitStatus = 1;
1189
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1189
+ deviceData.Device.Power = true;
1190
+ deviceData.Device.UnitStatus = 1;
1191
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1190
1192
  break;
1191
1193
  case 3: //AUTO
1192
- deviceState.Power = true;
1193
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1194
+ deviceData.Device.Power = true;
1195
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1194
1196
  break;
1195
1197
  };
1196
- operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceState.UnitStatus]][this.accessory.power];
1198
+ operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
1197
1199
  break;
1198
1200
  case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1199
1201
  switch (value) {
1200
1202
  case 0: //OFF - HEAT CURVE
1201
- deviceState.OperationModeZone1 = 2;
1202
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1203
+ deviceData.Device.OperationModeZone1 = 2;
1204
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1203
1205
  break;
1204
1206
  case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
1205
- deviceState.OperationModeZone1 = [0, 3][this.unitStatus];
1206
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1207
+ deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
1208
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1207
1209
  break;
1208
1210
  case 2: //COOL - HEAT FLOW / COOL FLOW
1209
- deviceState.OperationModeZone1 = [1, 4][this.unitStatus];
1210
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1211
+ deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
1212
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1211
1213
  break;
1212
1214
  case 3: //AUTO - HEAT CURVE
1213
- deviceState.OperationModeZone1 = 2;
1214
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1215
+ deviceData.Device.OperationModeZone1 = 2;
1216
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1215
1217
  break;
1216
1218
  };
1217
- operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceState.OperationModeZone1];
1219
+ operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
1218
1220
  break;
1219
1221
  case caseHotWater: //Hot Water - AUTO, HEAT NOW
1220
1222
  switch (value) {
1221
1223
  case 0: //OFF
1222
- deviceState.ForcedHotWaterMode = false;
1223
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1224
+ deviceData.Device.ForcedHotWaterMode = false;
1225
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1224
1226
  break;
1225
1227
  case 1: //HEAT
1226
- deviceState.ForcedHotWaterMode = true;
1227
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1228
+ deviceData.Device.ForcedHotWaterMode = true;
1229
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1228
1230
  break;
1229
1231
  case 2: //COOL
1230
- deviceState.ForcedHotWaterMode = false;
1231
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1232
+ deviceData.Device.ForcedHotWaterMode = false;
1233
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1232
1234
  break;
1233
1235
  case 3: //AUTO
1234
- deviceState.ForcedHotWaterMode = false;
1235
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1236
+ deviceData.Device.ForcedHotWaterMode = false;
1237
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1236
1238
  break;
1237
1239
  };
1238
- operationModeText = deviceState.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceState.ForcedHotWaterMode ? 1 : 0];
1240
+ operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
1239
1241
  break;
1240
1242
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1241
1243
  switch (value) {
1242
1244
  case 0: //OFF - HEAT CURVE
1243
- deviceState.OperationModeZone2 = 2;
1244
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1245
+ deviceData.Device.OperationModeZone2 = 2;
1246
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1245
1247
  break;
1246
1248
  case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
1247
- deviceState.OperationModeZone2 = [0, 3][this.unitStatus];
1248
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1249
+ deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
1250
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1249
1251
  break;
1250
1252
  case 2: //COOL - HEAT FLOW / COOL FLOW
1251
- deviceState.OperationModeZone2 = [1, 4][this.unitStatus];
1252
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1253
+ deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
1254
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1253
1255
  break;
1254
1256
  case 3: //AUTO - HEAT CURVE
1255
- deviceState.OperationModeZone2 = 2;
1256
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1257
+ deviceData.Device.OperationModeZone2 = 2;
1258
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1257
1259
  break;
1258
1260
  };
1259
- operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceState.OperationModeZone2];
1261
+ operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
1260
1262
  break;
1261
1263
  };
1262
1264
 
1263
- await this.melCloudAtw.send(deviceState);
1265
+ await this.melCloudAtw.send(deviceData);
1264
1266
  const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
1265
1267
  } catch (error) {
1266
1268
  this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
@@ -1290,24 +1292,24 @@ class DeviceAtw extends EventEmitter {
1290
1292
  try {
1291
1293
  switch (i) {
1292
1294
  case 0: //Heat Pump
1293
- //deviceState.SetTemperatureZone1 = value;
1294
- //deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1295
+ //deviceData.Device.SetTemperatureZone1 = value;
1296
+ //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1295
1297
  break;
1296
1298
  case 1: //Zone 1
1297
- deviceState.SetTemperatureZone1 = value;
1298
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1299
+ deviceData.Device.SetTemperatureZone1 = value;
1300
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1299
1301
  break;
1300
1302
  case caseHotWater: //Hot Water
1301
- deviceState.SetTankWaterTemperature = value;
1302
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1303
+ deviceData.Device.SetTankWaterTemperature = value;
1304
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1303
1305
  break;
1304
1306
  case caseZone2: //Zone 2
1305
- deviceState.SetTemperatureZone2 = value;
1306
- deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1307
+ deviceData.Device.SetTemperatureZone2 = value;
1308
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
1307
1309
  break;
1308
1310
  };
1309
1311
 
1310
- const set = i > 0 ? await this.melCloudAtw.send(deviceState) : false;
1312
+ const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
1311
1313
  const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set temperature: ${value}${this.accessory.temperatureUnit}`);
1312
1314
  } catch (error) {
1313
1315
  this.emit('warn', `${zoneName}, Set temperature error: ${error}`);
@@ -1558,22 +1560,18 @@ class DeviceAtw extends EventEmitter {
1558
1560
  };
1559
1561
 
1560
1562
  //presets services
1561
- if (presetsConfiguredCount > 0) {
1563
+ if (this.presetsConfiguredCount > 0) {
1562
1564
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare presets services`) : false;
1563
1565
  this.presetsServices = [];
1564
1566
  const previousPresets = [];
1565
1567
 
1566
- for (let i = 0; i < presetsConfiguredCount; i++) {
1567
- const preset = presetsConfigured[i];
1568
- const index = presetsOnServer.findIndex(p => p.ID === preset.Id);
1569
- const presetData = presetsOnServer[index];
1568
+ for (let i = 0; i < this.presetsConfiguredCount; i++) {
1569
+ const preset = this.presetsConfigured[i];
1570
+ const presetData = presetsOnServer.find(p => p.ID === preset.Id);
1570
1571
 
1571
1572
  //get preset name
1572
1573
  const presetName = preset.name;
1573
1574
 
1574
- //get preset display type
1575
- const displayType = button.displayType;
1576
-
1577
1575
  //get preset name prefix
1578
1576
  const presetNamePrefix = preset.namePrefix;
1579
1577
 
@@ -1585,54 +1583,52 @@ class DeviceAtw extends EventEmitter {
1585
1583
  presetService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
1586
1584
  presetService.getCharacteristic(characteristicType)
1587
1585
  .onGet(async () => {
1588
- const state = this.presetsStates[i];
1586
+ const state = preset.state;
1589
1587
  return state;
1590
1588
  })
1591
- if (displayType > 2) {
1592
- presetService.onSet(async (state) => {
1589
+ .onSet(async (state) => {
1593
1590
  try {
1594
1591
  switch (state) {
1595
1592
  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;
1593
+ previousPresets[i] = deviceData.Device;
1594
+ deviceData.Device.Power = presetData.Power;
1595
+ deviceData.Device.EcoHotWater = presetData.EcoHotWater;
1596
+ deviceData.Device.OperationModeZone1 = presetData.OperationModeZone1;
1597
+ deviceData.Device.OperationModeZone2 = presetData.OperationModeZone2;
1598
+ deviceData.Device.SetTankWaterTemperature = presetData.SetTankWaterTemperature;
1599
+ deviceData.Device.SetTemperatureZone1 = presetData.SetTemperatureZone1;
1600
+ deviceData.Device.SetTemperatureZone2 = presetData.SetTemperatureZone2;
1601
+ deviceData.Device.ForcedHotWaterMode = presetData.ForcedHotWaterMode;
1602
+ deviceData.Device.SetHeatFlowTemperatureZone1 = presetData.SetHeatFlowTemperatureZone1;
1603
+ deviceData.Device.SetHeatFlowTemperatureZone2 = presetData.SetHeatFlowTemperatureZone2;
1604
+ deviceData.Device.SetCoolFlowTemperatureZone1 = presetData.SetCoolFlowTemperatureZone1;
1605
+ deviceData.Device.SetCoolFlowTemperatureZone2 = presetData.SetCoolFlowTemperatureZone2;
1606
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1610
1607
  break;
1611
1608
  case false:
1612
- deviceState = previousPresets[i];
1609
+ deviceData.Device = previousPresets[i];
1613
1610
  break;
1614
1611
  };
1615
1612
 
1616
- await this.melCloudAtw.send(deviceState);
1613
+ await this.melCloudAtw.send(deviceData);
1617
1614
  const info = this.disableLogInfo ? false : this.emit('message', `Set: ${presetName}`);
1618
1615
  } catch (error) {
1619
1616
  this.emit('warn', `Set preset error: ${error}`);
1620
1617
  };
1621
1618
  });
1622
- };
1623
- previousPresets.push(deviceState);
1619
+ previousPresets.push(deviceData.Device);
1624
1620
  this.presetsServices.push(presetService);
1625
1621
  accessory.addService(presetService);
1626
1622
  };
1627
1623
  };
1628
1624
 
1629
1625
  //buttons services
1630
- if (buttonsConfiguredCount > 0) {
1626
+ if (this.buttonsConfiguredCount > 0) {
1631
1627
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare buttons services`) : false;
1632
1628
  this.buttonsServices = [];
1633
1629
 
1634
- for (let i = 0; i < buttonsConfiguredCount; i++) {
1635
- const button = buttonsConfigured[i];
1630
+ for (let i = 0; i < this.buttonsConfiguredCount; i++) {
1631
+ const button = this.buttonsConfigured[i];
1636
1632
 
1637
1633
  //get button mode
1638
1634
  const mode = button.mode;
@@ -1657,128 +1653,128 @@ class DeviceAtw extends EventEmitter {
1657
1653
  const state = button.state;
1658
1654
  return state;
1659
1655
  })
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
- };
1656
+ .onSet(async (state) => {
1657
+ if (displayType > 0 && displayType < 3) {
1658
+ try {
1659
+ switch (mode) {
1660
+ case 0: //POWER ON,OFF
1661
+ deviceData.Device.Power = state;
1662
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1663
+ break;
1664
+ case 1: //HEAT PUMP HEAT
1665
+ deviceData.Device.Power = true;
1666
+ deviceData.Device.UnitStatus = 0;
1667
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1668
+ break;
1669
+ case 2: //COOL
1670
+ deviceData.Device.Power = true;
1671
+ deviceData.Device.UnitStatus = 1;
1672
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1673
+ break;
1674
+ case 3: //HOLIDAY
1675
+ deviceData.Device.HolidayMode = state;
1676
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.HolidayMode;
1677
+ break;
1678
+ case 10: //ALL ZONES PHYSICAL LOCK CONTROL
1679
+ deviceData.Device.ProhibitZone1 = state;
1680
+ deviceData.Device.ProhibitHotWater = state;
1681
+ deviceData.Device.ProhibitZone2 = state;
1682
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1683
+ break;
1684
+ case 20: //ZONE 1 HEAT THERMOSTAT
1685
+ deviceData.Device.Power = true;
1686
+ deviceData.Device.OperationModeZone1 = 0;
1687
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1688
+ break;
1689
+ case 21: //HEAT FLOW
1690
+ deviceData.Device.Power = true;
1691
+ deviceData.Device.OperationModeZone1 = 1;
1692
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1693
+ break;
1694
+ case 22: //HEAT CURVE
1695
+ deviceData.Device.Power = true;
1696
+ deviceData.Device.OperationModeZone1 = 2;
1697
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1698
+ break;
1699
+ case 23: //COOL THERMOSTAT
1700
+ deviceData.Device.Power = true;
1701
+ deviceData.Device.OperationModeZone1 = 3;
1702
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1703
+ break;
1704
+ case 24: //COOL FLOW
1705
+ deviceData.Device.Power = true;
1706
+ deviceData.Device.OperationModeZone1 = 4;
1707
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1708
+ break;
1709
+ case 25: //FLOOR DRY UP
1710
+ deviceData.Device.Power = true;
1711
+ deviceData.Device.OperationModeZone1 = 5;
1712
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1713
+ break;
1714
+ case 30: //PHYSICAL LOCK CONTROL
1715
+ deviceData.Device.ProhibitZone1 = state;
1716
+ CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
1717
+ break;
1718
+ case 40: //HOT WATER NORMAL/FORCE HOT WATER
1719
+ deviceData.Device.Power = true;
1720
+ deviceData.Device.ForcedHotWaterMode = state;
1721
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
1722
+ break;
1723
+ case 41: //NORMAL/ECO
1724
+ deviceData.Device.Power = true;
1725
+ deviceData.Device.EcoHotWater = state;
1726
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.EcoHotWater;
1727
+ break;
1728
+ case 50: //PHYSICAL LOCK CONTROL
1729
+ deviceData.Device.ProhibitHotWater = state;
1730
+ CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
1731
+ break;
1732
+ case 60: //ZONE 2 HEAT THERMOSTAT
1733
+ deviceData.Device.Power = true;
1734
+ deviceData.Device.OperationModeZone2 = 0;
1735
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1736
+ break;
1737
+ case 61: // HEAT FLOW
1738
+ deviceData.Device.Power = true;
1739
+ deviceData.Device.OperationModeZone2 = 1;
1740
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1741
+ break;
1742
+ case 62: //HEAT CURVE
1743
+ deviceData.Device.Power = true;
1744
+ deviceData.Device.OperationModeZone2 = 2;
1745
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1746
+ break;
1747
+ case 63: //COOL THERMOSTAT
1748
+ deviceData.Device.Power = true;
1749
+ deviceData.Device.OperationModeZone2 = 3;
1750
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1751
+ break;
1752
+ case 64: //COOL FLOW
1753
+ deviceData.Device.Power = true;
1754
+ deviceData.Device.OperationModeZone2 = 4;
1755
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1756
+ break;
1757
+ case 65: //FLOOR DRY UP
1758
+ deviceData.Device.Power = true;
1759
+ deviceData.Device.OperationModeZone2 = 5;
1760
+ deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1761
+ break;
1762
+ case 70: //PHYSICAL LOCK CONTROL
1763
+ deviceData.Device.ProhibitZone2 = state;
1764
+ CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1765
+ break;
1766
+ default:
1767
+ this.emit('message', `Unknown button mode: ${mode}`);
1768
+ break;
1769
+ };
1774
1770
 
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}`);
1771
+ await this.melCloudAtw.send(deviceData);
1772
+ const info = this.disableLogInfo ? false : this.emit('message', `Set: ${buttonName}`);
1773
+ } catch (error) {
1774
+ this.emit('warn', `Set button error: ${error}`);
1775
+ };
1779
1776
  };
1780
1777
  });
1781
- };
1782
1778
  this.buttonsServices.push(buttonService);
1783
1779
  accessory.addService(buttonService)
1784
1780
  };