homebridge-melcloud-control 2.3.1-beta.2 → 2.3.3
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/CHANGELOG.md +15 -0
- package/config.schema.json +3 -3
- package/index.js +7 -7
- package/package.json +1 -1
- package/src/deviceata.js +7 -13
- package/src/deviceatw.js +48 -53
- package/src/deviceerv.js +5 -8
package/CHANGELOG.md
CHANGED
|
@@ -21,6 +21,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
21
21
|
|
|
22
22
|
- After update to v2 from v1 only RESTFull and MQTT config settings need to be updated in config.
|
|
23
23
|
|
|
24
|
+
## [2.4.0] - (28.08.2024)
|
|
25
|
+
|
|
26
|
+
## Changes
|
|
27
|
+
|
|
28
|
+
- required upcomming homebridge 2.x.x required
|
|
29
|
+
- bump dependencies
|
|
30
|
+
- config schema updated
|
|
31
|
+
|
|
32
|
+
## [2.3.3] - (28.08.2024)
|
|
33
|
+
|
|
34
|
+
## Changes
|
|
35
|
+
|
|
36
|
+
- cleanup and refactor accessory code
|
|
37
|
+
- bump dependencies
|
|
38
|
+
|
|
24
39
|
## [2.3.0] - (25.08.2024)
|
|
25
40
|
|
|
26
41
|
## Changes
|
package/config.schema.json
CHANGED
|
@@ -629,7 +629,7 @@
|
|
|
629
629
|
]
|
|
630
630
|
}
|
|
631
631
|
],
|
|
632
|
-
"description": "Select the
|
|
632
|
+
"description": "Select the characteristic type to be displayed in HomeKit app.",
|
|
633
633
|
"required": true
|
|
634
634
|
},
|
|
635
635
|
"namePrefix": {
|
|
@@ -956,7 +956,7 @@
|
|
|
956
956
|
]
|
|
957
957
|
}
|
|
958
958
|
],
|
|
959
|
-
"description": "Select the
|
|
959
|
+
"description": "Select the characteristic type to be displayed in HomeKit app.",
|
|
960
960
|
"required": true
|
|
961
961
|
},
|
|
962
962
|
"namePrefix": {
|
|
@@ -1193,7 +1193,7 @@
|
|
|
1193
1193
|
]
|
|
1194
1194
|
}
|
|
1195
1195
|
],
|
|
1196
|
-
"description": "Select the
|
|
1196
|
+
"description": "Select the characteristic type to be displayed in HomeKit app.",
|
|
1197
1197
|
"required": false
|
|
1198
1198
|
},
|
|
1199
1199
|
"namePrefix": {
|
package/index.js
CHANGED
|
@@ -98,13 +98,13 @@ class MelCloudPlatform {
|
|
|
98
98
|
|
|
99
99
|
//publish device
|
|
100
100
|
api.publishExternalAccessories(CONSTANTS.PluginName, [accessory]);
|
|
101
|
-
log.
|
|
101
|
+
log.info(`${accountName}, ${deviceTypeText} ${deviceName}, published as external accessory.`);
|
|
102
102
|
})
|
|
103
103
|
.on('devInfo', (devInfo) => {
|
|
104
104
|
log.info(devInfo);
|
|
105
105
|
})
|
|
106
106
|
.on('success', (message) => {
|
|
107
|
-
log.
|
|
107
|
+
log.info(`${deviceTypeText}, ${deviceName}, ${message}`);
|
|
108
108
|
})
|
|
109
109
|
.on('message', (message) => {
|
|
110
110
|
log.info(`${deviceTypeText}, ${deviceName}, ${message}`);
|
|
@@ -130,13 +130,13 @@ class MelCloudPlatform {
|
|
|
130
130
|
|
|
131
131
|
//publish device
|
|
132
132
|
api.publishExternalAccessories(CONSTANTS.PluginName, [accessory]);
|
|
133
|
-
log.
|
|
133
|
+
log.info(`${accountName}, ${deviceTypeText} ${deviceName}, published as external accessory.`);
|
|
134
134
|
})
|
|
135
135
|
.on('devInfo', (devInfo) => {
|
|
136
136
|
log.info(devInfo);
|
|
137
137
|
})
|
|
138
138
|
.on('success', (message) => {
|
|
139
|
-
log.
|
|
139
|
+
log.info(`${deviceTypeText}, ${deviceName}, ${message}`);
|
|
140
140
|
})
|
|
141
141
|
.on('message', (message) => {
|
|
142
142
|
log.info(`${deviceTypeText}, ${deviceName}, ${message}`);
|
|
@@ -162,13 +162,13 @@ class MelCloudPlatform {
|
|
|
162
162
|
|
|
163
163
|
//publish device
|
|
164
164
|
api.publishExternalAccessories(CONSTANTS.PluginName, [accessory]);
|
|
165
|
-
log.
|
|
165
|
+
log.info(`${accountName}, ${deviceTypeText} ${deviceName}, published as external accessory.`);
|
|
166
166
|
})
|
|
167
167
|
.on('devInfo', (devInfo) => {
|
|
168
168
|
log.info(devInfo);
|
|
169
169
|
})
|
|
170
170
|
.on('success', (message) => {
|
|
171
|
-
log.
|
|
171
|
+
log.info(`${deviceTypeText}, ${deviceName}, ${message}`);
|
|
172
172
|
})
|
|
173
173
|
.on('message', (message) => {
|
|
174
174
|
log.info(`${deviceTypeText}, ${deviceName}, ${message}`);
|
|
@@ -189,7 +189,7 @@ class MelCloudPlatform {
|
|
|
189
189
|
}
|
|
190
190
|
})
|
|
191
191
|
.on('success', (message) => {
|
|
192
|
-
log.
|
|
192
|
+
log.info(`Account ${accountName}, ${message}`);
|
|
193
193
|
})
|
|
194
194
|
.on('message', (message) => {
|
|
195
195
|
log.info(`Account ${accountName}, ${message}`);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.3",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|
package/src/deviceata.js
CHANGED
|
@@ -197,8 +197,7 @@ class DeviceAta extends EventEmitter {
|
|
|
197
197
|
const offline = deviceState.Offline;
|
|
198
198
|
|
|
199
199
|
//presets
|
|
200
|
-
const presets = deviceData.Presets
|
|
201
|
-
this.presetsCount = this.presetsEnabled ? presets.length : 0;
|
|
200
|
+
const presets = this.presetsEnabled ? deviceData.Presets : [];
|
|
202
201
|
|
|
203
202
|
//accessory
|
|
204
203
|
this.accessory.power = power;
|
|
@@ -212,6 +211,8 @@ class DeviceAta extends EventEmitter {
|
|
|
212
211
|
this.accessory.targetOperationMode = 0;
|
|
213
212
|
this.accessory.vaneHorizontal = vaneHorizontal;
|
|
214
213
|
this.accessory.vaneVertical = vaneVertical;
|
|
214
|
+
this.accessory.swingMode = swingFunction && vaneHorizontal === 12 && vaneVertical === 7 ? 1 : 0;
|
|
215
|
+
this.accessory.lockPhysicalControl = prohibitSetTemperature && prohibitOperationMode && prohibitPower ? 1 : 0;
|
|
215
216
|
this.accessory.temperatureIncrement = temperatureIncrement;
|
|
216
217
|
this.accessory.useFahrenheit = useFahrenheit;
|
|
217
218
|
this.accessory.hasAutomaticFanSpeed = hasAutomaticFanSpeed;
|
|
@@ -312,12 +313,6 @@ class DeviceAta extends EventEmitter {
|
|
|
312
313
|
};
|
|
313
314
|
};
|
|
314
315
|
|
|
315
|
-
//swing and vane mode
|
|
316
|
-
this.accessory.swingMode = swingFunction && vaneHorizontal === 12 && vaneVertical === 7 ? 1 : 0;
|
|
317
|
-
|
|
318
|
-
//lock physical controls
|
|
319
|
-
this.accessory.lockPhysicalControl = prohibitSetTemperature && prohibitOperationMode && prohibitPower ? 1 : 0;
|
|
320
|
-
|
|
321
316
|
//update characteristics
|
|
322
317
|
if (this.melCloudService) {
|
|
323
318
|
this.melCloudService
|
|
@@ -538,10 +533,10 @@ class DeviceAta extends EventEmitter {
|
|
|
538
533
|
};
|
|
539
534
|
|
|
540
535
|
//update presets state
|
|
541
|
-
if (
|
|
536
|
+
if (presets.length > 0) {
|
|
542
537
|
this.presetsStates = [];
|
|
543
538
|
|
|
544
|
-
for (let i = 0; i <
|
|
539
|
+
for (let i = 0; i < presets.length; i++) {
|
|
545
540
|
const preset = presets[i];
|
|
546
541
|
const state = preset.Power === power
|
|
547
542
|
&& preset.SetTemperature === setTemperature
|
|
@@ -703,7 +698,6 @@ class DeviceAta extends EventEmitter {
|
|
|
703
698
|
const buttonsConfigured = this.buttonsConfigured;
|
|
704
699
|
const buttonsConfiguredCount = this.buttonsConfiguredCount;
|
|
705
700
|
const presets = this.accessory.presets;
|
|
706
|
-
const presetsCount = this.presetsCount;
|
|
707
701
|
const hasAutomaticFanSpeed = this.accessory.hasAutomaticFanSpeed;
|
|
708
702
|
const modelSupportsFanSpeed = this.accessory.modelSupportsFanSpeed;
|
|
709
703
|
const modelSupportsDry = this.accessory.modelSupportsDry;
|
|
@@ -1285,12 +1279,12 @@ class DeviceAta extends EventEmitter {
|
|
|
1285
1279
|
};
|
|
1286
1280
|
|
|
1287
1281
|
//presets services
|
|
1288
|
-
if (
|
|
1282
|
+
if (presets.length > 0) {
|
|
1289
1283
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare presets service`) : false;
|
|
1290
1284
|
this.presetsServices = [];
|
|
1291
1285
|
const previousPresets = [];
|
|
1292
1286
|
|
|
1293
|
-
for (let i = 0; i <
|
|
1287
|
+
for (let i = 0; i < presets.length; i++) {
|
|
1294
1288
|
const preset = presets[i];
|
|
1295
1289
|
const presetName = preset.NumberDescription;
|
|
1296
1290
|
|
package/src/deviceatw.js
CHANGED
|
@@ -65,18 +65,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
65
65
|
|
|
66
66
|
//accessory
|
|
67
67
|
this.startPrepareAccessory = true;
|
|
68
|
-
this.accessory = {
|
|
69
|
-
power: false,
|
|
70
|
-
offline: false,
|
|
71
|
-
unitStatus: 0,
|
|
72
|
-
idleZone1: false,
|
|
73
|
-
idleZone2: false,
|
|
74
|
-
useFahrenheit: 0,
|
|
75
|
-
temperatureUnit: '°C',
|
|
76
|
-
temperatureIncrement: 1,
|
|
77
|
-
presets: [],
|
|
78
|
-
zones: [{}, {}, {}, {}]
|
|
79
|
-
};
|
|
68
|
+
this.accessory = { zones: [{}, {}, {}, {}] };
|
|
80
69
|
|
|
81
70
|
//melcloud device
|
|
82
71
|
this.melCloudAtw = new MelCloudAtw({
|
|
@@ -196,26 +185,15 @@ class DeviceAtw extends EventEmitter {
|
|
|
196
185
|
const minSetTemperature = deviceData.Device.MinSetTemperature ?? 10;
|
|
197
186
|
const maxSetTemperature = deviceData.Device.MaxSetTemperature ?? 30;
|
|
198
187
|
const maxTankTemperature = deviceData.Device.MaxTankTemperature ?? 70;
|
|
199
|
-
const
|
|
188
|
+
const flowTemperatureHeatPump = deviceData.Device.FlowTemperature;
|
|
200
189
|
const flowTemperatureZone1 = deviceData.Device.FlowTemperatureZone1;
|
|
201
190
|
const flowTemperatureZone2 = deviceData.Device.FlowTemperatureZone2;
|
|
202
191
|
const flowTemperatureWaterTank = deviceData.Device.FlowTemperatureBoiler;
|
|
203
|
-
const
|
|
192
|
+
const returnTemperatureHeatPump = deviceData.Device.ReturnTemperature;
|
|
204
193
|
const returnTemperatureZone1 = deviceData.Device.ReturnTemperatureZone1;
|
|
205
194
|
const returnTemperatureZone2 = deviceData.Device.ReturnTemperatureZone2;
|
|
206
195
|
const returnTemperatureWaterTank = deviceData.Device.ReturnTemperatureBoiler;
|
|
207
196
|
|
|
208
|
-
this.hasHotWaterTank = hasHotWaterTank;
|
|
209
|
-
this.hasZone2 = hasZone2;
|
|
210
|
-
this.flowTemperature = flowTemperature;
|
|
211
|
-
this.flowTemperatureZone1 = flowTemperatureZone1;
|
|
212
|
-
this.flowTemperatureZone2 = flowTemperatureZone2;
|
|
213
|
-
this.flowTemperatureWaterTank = flowTemperatureWaterTank;
|
|
214
|
-
this.returnTemperature = returnTemperature;
|
|
215
|
-
this.returnTemperatureZone1 = returnTemperatureZone1;
|
|
216
|
-
this.returnTemperatureZone2 = returnTemperatureZone2;
|
|
217
|
-
this.returnTemperatureWaterTank = returnTemperatureWaterTank;
|
|
218
|
-
|
|
219
197
|
//zones
|
|
220
198
|
const hotWater = hasHotWaterTank ? 1 : 0;
|
|
221
199
|
const zone2 = hasZone2 ? 1 : 0;
|
|
@@ -256,8 +234,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
256
234
|
const offline = deviceState.Offline;
|
|
257
235
|
|
|
258
236
|
//presets
|
|
259
|
-
const presets = deviceData.Presets
|
|
260
|
-
this.presetsCount = this.presetsEnabled ? presets.length : 0;
|
|
237
|
+
const presets = this.presetsEnabled ? deviceData.Presets : [];
|
|
261
238
|
|
|
262
239
|
//accessory
|
|
263
240
|
this.accessory.power = power;
|
|
@@ -268,15 +245,19 @@ class DeviceAtw extends EventEmitter {
|
|
|
268
245
|
this.accessory.useFahrenheit = useFahrenheit;
|
|
269
246
|
this.accessory.temperatureUnit = temperatureUnit;
|
|
270
247
|
this.accessory.temperatureIncrement = temperatureIncrement;
|
|
248
|
+
this.accessory.hasHotWaterTank = hasHotWaterTank;
|
|
249
|
+
this.accessory.hasZone2 = hasZone2;
|
|
271
250
|
this.accessory.presets = presets;
|
|
272
251
|
|
|
273
252
|
//default values
|
|
253
|
+
let name = 'Heat Pump'
|
|
274
254
|
let currentOperationMode = 0;
|
|
275
255
|
let targetOperationMode = 0;
|
|
276
256
|
let roomTemperature = 20;
|
|
277
257
|
let setTemperature = 20;
|
|
278
258
|
let lockPhysicalControl = 0;
|
|
279
|
-
|
|
259
|
+
let flowTemperature = 0;
|
|
260
|
+
let returnTemperature = 0;
|
|
280
261
|
let operationModeSetPropsMinValue = 0;
|
|
281
262
|
let operationModeSetPropsMaxValue = 3;
|
|
282
263
|
let operationModeSetPropsValidValues = [0];
|
|
@@ -288,60 +269,68 @@ class DeviceAtw extends EventEmitter {
|
|
|
288
269
|
case 0: //Heater Cooler
|
|
289
270
|
switch (i) {
|
|
290
271
|
case 0: //Heat Pump Operation Mode - IDLE, HOT WATER, HEATING ZONES, COOLING, HOT WATER STORAGE, FREEZE STAT, LEGIONELLA, HEATING ECO, MODE 1, MODE 2, MODE 3, HEATING UP /// Unit Status - HEAT, COOL
|
|
272
|
+
name = heatPumpName;
|
|
291
273
|
currentOperationMode = !power ? 0 : [1, 2, 2, 3, 2, 1, 1, 2, 1, 1, 1, 2][operationMode]; //INACTIVE, IDLE, HEATING, COOLING
|
|
292
274
|
targetOperationMode = [1, 2][unitStatus]; //AUTO, HEAT, COOL
|
|
293
275
|
roomTemperature = outdoorTemperature;
|
|
294
276
|
setTemperature = outdoorTemperature;
|
|
295
277
|
lockPhysicalControl = hasHotWaterTank && hasZone2 ? (prohibitZone1 && prohibitHotWater && prohibitZone2 ? 1 : 0) : hasHotWaterTank ? (prohibitZone1 && prohibitHotWater ? 1 : 0) : hasZone2 ? (prohibitZone1 && prohibitZone2 ? 1 : 0) : 0;
|
|
278
|
+
flowTemperature = flowTemperatureHeatPump;
|
|
279
|
+
returnTemperature = returnTemperatureHeatPump;
|
|
296
280
|
|
|
297
281
|
operationModeSetPropsMinValue = [1, 1, 2, 0][heatCoolModes];
|
|
298
282
|
operationModeSetPropsMaxValue = [2, 1, 2, 0][heatCoolModes];
|
|
299
283
|
operationModeSetPropsValidValues = [[1, 2], [1], [2], [0]][heatCoolModes];
|
|
300
284
|
temperatureSetPropsMinValue = -35;
|
|
301
285
|
temperatureSetPropsMaxValue = 100;
|
|
302
|
-
this.accessory.zones[i].name = heatPumpName;
|
|
303
286
|
break;
|
|
304
287
|
case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
288
|
+
name = zone1Name;
|
|
305
289
|
currentOperationMode = !power ? 0 : idleZone1 ? 1 : [2, 2, 2, 3, 3, 2][operationModeZone1]; //INACTIVE, IDLE, HEATING, COOLING
|
|
306
290
|
targetOperationMode = [1, 2, 0, 1, 2, 1][operationModeZone1]; //AUTO, HEAT, COOL
|
|
307
291
|
roomTemperature = roomTemperatureZone1;
|
|
308
292
|
setTemperature = setTemperatureZone1;
|
|
309
293
|
lockPhysicalControl = prohibitZone1 ? 1 : 0;
|
|
294
|
+
flowTemperature = flowTemperatureZone1;
|
|
295
|
+
returnTemperature = returnTemperatureZone1;
|
|
310
296
|
|
|
311
297
|
operationModeSetPropsMinValue = [0, 0, 1, 0][heatCoolModes];
|
|
312
298
|
operationModeSetPropsMaxValue = [2, 2, 2, 0][heatCoolModes];
|
|
313
299
|
operationModeSetPropsValidValues = [[0, 1, 2], [0, 1, 2], [1, 2], [0]][heatCoolModes];
|
|
314
300
|
temperatureSetPropsMinValue = 0;
|
|
315
301
|
temperatureSetPropsMaxValue = 31;
|
|
316
|
-
this.accessory.zones[i].name = zone1Name;
|
|
317
302
|
break;
|
|
318
303
|
case caseHotWater: //Hot Water - NORMAL, HEAT NOW
|
|
304
|
+
name = hotWaterName;
|
|
319
305
|
currentOperationMode = !power ? 0 : operationMode === 1 ? 2 : [1, 2][forcedHotWaterMode]; //INACTIVE, IDLE, HEATING, COOLING
|
|
320
306
|
targetOperationMode = [0, 1][forcedHotWaterMode] //AUTO, HEAT, COOL
|
|
321
307
|
roomTemperature = tankWaterTemperature;
|
|
322
308
|
setTemperature = setTankWaterTemperature;
|
|
323
309
|
lockPhysicalControl = prohibitHotWater ? 1 : 0;
|
|
310
|
+
flowTemperature = flowTemperatureWaterTank;
|
|
311
|
+
returnTemperature = returnTemperatureWaterTank;
|
|
324
312
|
|
|
325
313
|
operationModeSetPropsMinValue = 0;
|
|
326
314
|
operationModeSetPropsMaxValue = 1;
|
|
327
315
|
operationModeSetPropsValidValues = [0, 1];
|
|
328
316
|
temperatureSetPropsMinValue = 0;
|
|
329
317
|
temperatureSetPropsMaxValue = maxTankTemperature;
|
|
330
|
-
this.accessory.zones[i].name = hotWaterName;
|
|
331
318
|
break;
|
|
332
319
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
320
|
+
name = zone2Name;
|
|
333
321
|
currentOperationMode = !power ? 0 : idleZone2 ? 1 : [2, 2, 2, 3, 3, 2][operationModeZone2]; //INACTIVE, IDLE, HEATING, COOLING
|
|
334
322
|
targetOperationMode = [1, 2, 0, 1, 2, 1][operationModeZone2]; //AUTO, HEAT, COOL
|
|
335
323
|
roomTemperature = roomTemperatureZone2;
|
|
336
324
|
setTemperature = setTemperatureZone2;
|
|
337
325
|
lockPhysicalControl = prohibitZone2 ? 1 : 0;
|
|
326
|
+
flowTemperature = flowTemperatureZone2;
|
|
327
|
+
returnTemperature = returnTemperatureZone2;
|
|
338
328
|
|
|
339
329
|
operationModeSetPropsMinValue = [0, 0, 1, 0][heatCoolModes];
|
|
340
330
|
operationModeSetPropsMaxValue = [2, 2, 2, 0][heatCoolModes];
|
|
341
331
|
operationModeSetPropsValidValues = [[0, 1, 2], [0, 1, 2], [1, 2], [0]][heatCoolModes];
|
|
342
332
|
temperatureSetPropsMinValue = 0;
|
|
343
333
|
temperatureSetPropsMaxValue = 31;
|
|
344
|
-
this.accessory.zones[i].name = zone2Name;
|
|
345
334
|
break;
|
|
346
335
|
default: //unknown zone detected
|
|
347
336
|
this.emit('message', `Unknown zone: ${i} detected.`);
|
|
@@ -374,6 +363,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
374
363
|
operationModeSetPropsValidValues = [[0, 1, 2], [0, 1], [0, 2], [0]][heatCoolModes];
|
|
375
364
|
temperatureSetPropsMinValue = -35;
|
|
376
365
|
temperatureSetPropsMaxValue = 100;
|
|
366
|
+
this.accessory.zones[i].name = heatPumpName;
|
|
377
367
|
break;
|
|
378
368
|
case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
379
369
|
currentOperationMode = !power ? 0 : idleZone1 ? 0 : [1, 1, 1, 2, 2, 1][operationModeZone1]; //OFF, HEAT, COOL
|
|
@@ -386,6 +376,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
386
376
|
operationModeSetPropsValidValues = [[1, 2, 3], [1, 2, 3], [1, 2], [0]][heatCoolModes];
|
|
387
377
|
temperatureSetPropsMinValue = 0;
|
|
388
378
|
temperatureSetPropsMaxValue = 31;
|
|
379
|
+
this.accessory.zones[i].name = heatPumpName;
|
|
389
380
|
break;
|
|
390
381
|
case caseHotWater: //Hot Water - NORMAL, HEAT NOW
|
|
391
382
|
currentOperationMode = !power ? 0 : operationMode === 1 ? 1 : [0, 1][forcedHotWaterMode]; //OFF, HEAT, COOL
|
|
@@ -398,6 +389,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
398
389
|
operationModeSetPropsValidValues = [1, 3];
|
|
399
390
|
temperatureSetPropsMinValue = 0;
|
|
400
391
|
temperatureSetPropsMaxValue = 60;
|
|
392
|
+
this.accessory.zones[i].name = heatPumpName;
|
|
401
393
|
break;
|
|
402
394
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
403
395
|
currentOperationMode = !power ? 0 : idleZone2 ? 0 : [1, 1, 1, 2, 2, 1][operationModeZone2]; //OFF, HEAT, COOL
|
|
@@ -410,6 +402,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
410
402
|
operationModeSetPropsValidValues = [[1, 2, 3], [1, 2, 3], [1, 2], [0]][heatCoolModes];
|
|
411
403
|
temperatureSetPropsMinValue = 0;
|
|
412
404
|
temperatureSetPropsMaxValue = 31;
|
|
405
|
+
this.accessory.zones[i].name = heatPumpName;
|
|
413
406
|
break;
|
|
414
407
|
default: //unknown zone detected
|
|
415
408
|
this.emit('message', `Unknown zone: ${i} detected.`);
|
|
@@ -432,11 +425,14 @@ class DeviceAtw extends EventEmitter {
|
|
|
432
425
|
};
|
|
433
426
|
|
|
434
427
|
//push value to arrays
|
|
428
|
+
this.accessory.zones[i].name = name;
|
|
435
429
|
this.accessory.zones[i].currentOperationMode = currentOperationMode;
|
|
436
430
|
this.accessory.zones[i].targetOperationMode = targetOperationMode;
|
|
437
431
|
this.accessory.zones[i].roomTemperature = roomTemperature;
|
|
438
432
|
this.accessory.zones[i].setTemperature = setTemperature;
|
|
439
433
|
this.accessory.zones[i].lockPhysicalControl = lockPhysicalControl;
|
|
434
|
+
this.accessory.zones[i].flowTemperature = flowTemperature;
|
|
435
|
+
this.accessory.zones[i].returnTemperature = returnTemperature;
|
|
440
436
|
this.accessory.zones[i].operationModesSetPropsMinValue = operationModeSetPropsMinValue;
|
|
441
437
|
this.accessory.zones[i].operationModesSetPropsMaxValue = operationModeSetPropsMaxValue;
|
|
442
438
|
this.accessory.zones[i].operationModesSetPropsValidValues = operationModeSetPropsValidValues;
|
|
@@ -648,10 +644,10 @@ class DeviceAtw extends EventEmitter {
|
|
|
648
644
|
};
|
|
649
645
|
|
|
650
646
|
//update presets state
|
|
651
|
-
if (
|
|
647
|
+
if (presets.length > 0) {
|
|
652
648
|
this.presetsStates = [];
|
|
653
649
|
|
|
654
|
-
for (let i = 0; i <
|
|
650
|
+
for (let i = 0; i < presets.length; i++) {
|
|
655
651
|
const preset = presets[i];
|
|
656
652
|
const state = preset.Power === power
|
|
657
653
|
&& preset.EcoHotWater === ecoHotWater
|
|
@@ -829,7 +825,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
829
825
|
const buttonsConfigured = this.buttonsConfigured;
|
|
830
826
|
const buttonsConfiguredCount = this.buttonsConfiguredCount;
|
|
831
827
|
const presets = this.accessory.presets;
|
|
832
|
-
const presetsCount = this.presetsCount;
|
|
833
828
|
const displayMode = this.displayMode;
|
|
834
829
|
const caseHotWater = this.caseHotWater;
|
|
835
830
|
const caseZone2 = this.caseZone2;
|
|
@@ -1307,7 +1302,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1307
1302
|
accessory.addService(this.roomTemperatureSensorService);
|
|
1308
1303
|
};
|
|
1309
1304
|
|
|
1310
|
-
if (temperatureSensorFlow && this.flowTemperature !== null) {
|
|
1305
|
+
if (temperatureSensorFlow && this.accessory.zones[i].flowTemperature !== null) {
|
|
1311
1306
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare flow temperature sensor service`) : false;
|
|
1312
1307
|
this.flowTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Flow`, `${zoneName} Temperature Sensor Flow ${deviceId} ${i}`);
|
|
1313
1308
|
this.flowTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1319,13 +1314,13 @@ class DeviceAtw extends EventEmitter {
|
|
|
1319
1314
|
minStep: 0.5
|
|
1320
1315
|
})
|
|
1321
1316
|
.onGet(async () => {
|
|
1322
|
-
const state = this.flowTemperature;
|
|
1317
|
+
const state = this.accessory.zones[i].flowTemperature;
|
|
1323
1318
|
return state;
|
|
1324
1319
|
})
|
|
1325
1320
|
accessory.addService(this.flowTemperatureSensorService);
|
|
1326
1321
|
|
|
1327
1322
|
};
|
|
1328
|
-
if (temperatureSensorReturn && this.returnTemperature !== null) {
|
|
1323
|
+
if (temperatureSensorReturn && this.accessory.zones[i].returnTemperature !== null) {
|
|
1329
1324
|
const debug1 = this.enableDebugMode ? this.emit('debug', `Prepare return temperature sensor service`) : false;
|
|
1330
1325
|
this.returnTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Return`, `${zoneName} Temperature Sensor Return ${deviceId} ${i}`);
|
|
1331
1326
|
this.returnTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1337,7 +1332,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1337
1332
|
minStep: 0.5
|
|
1338
1333
|
})
|
|
1339
1334
|
.onGet(async () => {
|
|
1340
|
-
const state = this.returnTemperature;
|
|
1335
|
+
const state = this.accessory.zones[i].returnTemperature;
|
|
1341
1336
|
return state;
|
|
1342
1337
|
})
|
|
1343
1338
|
accessory.addService(this.returnTemperatureSensorService);
|
|
@@ -1362,7 +1357,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1362
1357
|
accessory.addService(this.roomTemperatureZone1SensorService);
|
|
1363
1358
|
};
|
|
1364
1359
|
|
|
1365
|
-
if (temperatureSensorFlowZone1 && this.
|
|
1360
|
+
if (temperatureSensorFlowZone1 && this.accessory.zones[i].flowTemperature !== null) {
|
|
1366
1361
|
const debug2 = this.enableDebugMode ? this.emit('debug', `Prepare flow temperature zone 1 sensor service`) : false;
|
|
1367
1362
|
this.flowTemperatureZone1SensorService = new Service.TemperatureSensor(`${serviceName} Flow`, `${zoneName} Temperature Sensor Flow ${deviceId} ${i}`);
|
|
1368
1363
|
this.flowTemperatureZone1SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1374,13 +1369,13 @@ class DeviceAtw extends EventEmitter {
|
|
|
1374
1369
|
minStep: 0.5
|
|
1375
1370
|
})
|
|
1376
1371
|
.onGet(async () => {
|
|
1377
|
-
const state = this.
|
|
1372
|
+
const state = this.accessory.zones[i].flowTemperature;
|
|
1378
1373
|
return state;
|
|
1379
1374
|
})
|
|
1380
1375
|
accessory.addService(this.flowTemperatureZone1SensorService);
|
|
1381
1376
|
};
|
|
1382
1377
|
|
|
1383
|
-
if (temperatureSensorReturnZone1 && this.
|
|
1378
|
+
if (temperatureSensorReturnZone1 && this.accessory.zones[i].returnTemperature !== null) {
|
|
1384
1379
|
const debug3 = this.enableDebugMode ? this.emit('debug', `Prepare return temperature zone 1 sensor service`) : false;
|
|
1385
1380
|
this.returnTemperatureZone1SensorService = new Service.TemperatureSensor(`${serviceName} Return`, `${zoneName} Temperature Sensor Return ${deviceId} ${i}`);
|
|
1386
1381
|
this.returnTemperatureZone1SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1392,7 +1387,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1392
1387
|
minStep: 0.5
|
|
1393
1388
|
})
|
|
1394
1389
|
.onGet(async () => {
|
|
1395
|
-
const state = this.
|
|
1390
|
+
const state = this.accessory.zones[i].returnTemperature;
|
|
1396
1391
|
return state;
|
|
1397
1392
|
})
|
|
1398
1393
|
accessory.addService(this.returnTemperatureZone1SensorService);
|
|
@@ -1417,7 +1412,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1417
1412
|
accessory.addService(this.roomTemperatureWaterTankSensorService);
|
|
1418
1413
|
};
|
|
1419
1414
|
|
|
1420
|
-
if (temperatureSensorFlowWaterTank && this.
|
|
1415
|
+
if (temperatureSensorFlowWaterTank && this.accessory.zones[i].flowTemperature !== null) {
|
|
1421
1416
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare flow temperature water tank sensor service`) : false;
|
|
1422
1417
|
this.flowTemperatureWaterTankSensorService = new Service.TemperatureSensor(`${serviceName} Flow`, `${zoneName} Temperature Sensor Flow ${deviceId} ${i}`);
|
|
1423
1418
|
this.flowTemperatureWaterTankSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1429,13 +1424,13 @@ class DeviceAtw extends EventEmitter {
|
|
|
1429
1424
|
minStep: 0.5
|
|
1430
1425
|
})
|
|
1431
1426
|
.onGet(async () => {
|
|
1432
|
-
const state = this.
|
|
1427
|
+
const state = this.accessory.zones[i].flowTemperature;
|
|
1433
1428
|
return state;
|
|
1434
1429
|
})
|
|
1435
1430
|
accessory.addService(this.flowTemperatureWaterTankSensorService);
|
|
1436
1431
|
};
|
|
1437
1432
|
|
|
1438
|
-
if (temperatureSensorReturnWaterTank && this.
|
|
1433
|
+
if (temperatureSensorReturnWaterTank && this.accessory.zones[i].returnTemperature !== null) {
|
|
1439
1434
|
const debug1 = this.enableDebugMode ? this.emit('debug', `Prepare return temperature water tank sensor service`) : false;
|
|
1440
1435
|
this.returnTemperatureWaterTankSensorService = new Service.TemperatureSensor(`${serviceName} Return`, `${zoneName} Temperature Sensor Return ${deviceId} ${i}`);
|
|
1441
1436
|
this.returnTemperatureWaterTankSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1447,7 +1442,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1447
1442
|
minStep: 0.5
|
|
1448
1443
|
})
|
|
1449
1444
|
.onGet(async () => {
|
|
1450
|
-
const state = this.
|
|
1445
|
+
const state = this.accessory.zones[i].returnTemperature;
|
|
1451
1446
|
return state;
|
|
1452
1447
|
})
|
|
1453
1448
|
accessory.addService(this.returnTemperatureWaterTankSensorService);
|
|
@@ -1472,7 +1467,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1472
1467
|
accessory.addService(this.roomTemperatureZone2SensorService);
|
|
1473
1468
|
};
|
|
1474
1469
|
|
|
1475
|
-
if (temperatureSensorFlowZone2 && this.
|
|
1470
|
+
if (temperatureSensorFlowZone2 && this.accessory.zones[i].flowTemperature !== null) {
|
|
1476
1471
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare flow temperature zone 2 sensor service`) : false;
|
|
1477
1472
|
this.flowTemperatureZone2SensorService = new Service.TemperatureSensor(`${serviceName} Flow`, `${zoneName} Temperature Sensor Flow${deviceId} ${i}`);
|
|
1478
1473
|
this.flowTemperatureZone2SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1484,13 +1479,13 @@ class DeviceAtw extends EventEmitter {
|
|
|
1484
1479
|
minStep: 0.5
|
|
1485
1480
|
})
|
|
1486
1481
|
.onGet(async () => {
|
|
1487
|
-
const state = this.
|
|
1482
|
+
const state = this.accessory.zones[i].flowTemperature;
|
|
1488
1483
|
return state;
|
|
1489
1484
|
})
|
|
1490
1485
|
accessory.addService(this.flowTemperatureZone2SensorService);
|
|
1491
1486
|
};
|
|
1492
1487
|
|
|
1493
|
-
if (temperatureSensorReturnZone2 && this.
|
|
1488
|
+
if (temperatureSensorReturnZone2 && this.accessory.zones[i].returnTemperature !== null) {
|
|
1494
1489
|
const debug1 = this.enableDebugMode ? this.emit('debug', `Prepare return temperature zone 2 sensor service`) : false;
|
|
1495
1490
|
this.returnTemperatureZone2SensorService = new Service.TemperatureSensor(`${serviceName} Return`, `${zoneName} Temperature Sensor Return${deviceId} ${i}`);
|
|
1496
1491
|
this.returnTemperatureZone2SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1502,7 +1497,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1502
1497
|
minStep: 0.5
|
|
1503
1498
|
})
|
|
1504
1499
|
.onGet(async () => {
|
|
1505
|
-
const state = this.
|
|
1500
|
+
const state = this.accessory.zones[i].returnTemperature;
|
|
1506
1501
|
return state;
|
|
1507
1502
|
})
|
|
1508
1503
|
accessory.addService(this.returnTemperatureZone2SensorService);
|
|
@@ -1674,12 +1669,12 @@ class DeviceAtw extends EventEmitter {
|
|
|
1674
1669
|
};
|
|
1675
1670
|
|
|
1676
1671
|
//presets services
|
|
1677
|
-
if (
|
|
1672
|
+
if (presets.length > 0) {
|
|
1678
1673
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare presets service`) : false;
|
|
1679
1674
|
this.presetsServices = [];
|
|
1680
1675
|
const previousPresets = [];
|
|
1681
1676
|
|
|
1682
|
-
for (let i = 0; i <
|
|
1677
|
+
for (let i = 0; i < presets.length; i++) {
|
|
1683
1678
|
const preset = presets[i];
|
|
1684
1679
|
const presetName = preset.NumberDescription;
|
|
1685
1680
|
|
package/src/deviceerv.js
CHANGED
|
@@ -204,9 +204,7 @@ class DeviceErv extends EventEmitter {
|
|
|
204
204
|
const temperatureUnit = CONSTANTS.TemperatureDisplayUnits[useFahrenheit];
|
|
205
205
|
|
|
206
206
|
//presets
|
|
207
|
-
const presets = deviceData.Presets
|
|
208
|
-
this.presetsCount = this.presetsEnabled ? presets.length : 0;
|
|
209
|
-
|
|
207
|
+
const presets = this.presetsEnabled ? deviceData.Presets : [];
|
|
210
208
|
|
|
211
209
|
//set temperature
|
|
212
210
|
const targetTemperature = hasCoolOperationMode || hasHeatOperationMode ? setTemperature : 20;
|
|
@@ -483,10 +481,10 @@ class DeviceErv extends EventEmitter {
|
|
|
483
481
|
};
|
|
484
482
|
|
|
485
483
|
//update presets state
|
|
486
|
-
if (
|
|
484
|
+
if (presets.length > 0) {
|
|
487
485
|
this.presetsStates = [];
|
|
488
486
|
|
|
489
|
-
for (let i = 0; i <
|
|
487
|
+
for (let i = 0; i < presets.length; i++) {
|
|
490
488
|
const preset = presets[i];
|
|
491
489
|
const state = preset.Power === power
|
|
492
490
|
&& preset.SetTemperature === targetTemperature
|
|
@@ -643,7 +641,6 @@ class DeviceErv extends EventEmitter {
|
|
|
643
641
|
const buttonsConfigured = this.buttonsConfigured;
|
|
644
642
|
const buttonsConfiguredCount = this.buttonsConfiguredCount;
|
|
645
643
|
const presets = this.accessory.presets;
|
|
646
|
-
const presetsCount = this.presetsCount;
|
|
647
644
|
const hasCoolOperationMode = this.accessory.hasCoolOperationMode;
|
|
648
645
|
const hasHeatOperationMode = this.accessory.hasHeatOperationMode;
|
|
649
646
|
const hasCO2Sensor = this.accessory.hasCO2Sensor;
|
|
@@ -1175,12 +1172,12 @@ class DeviceErv extends EventEmitter {
|
|
|
1175
1172
|
};
|
|
1176
1173
|
|
|
1177
1174
|
//presets services
|
|
1178
|
-
if (
|
|
1175
|
+
if (presets.length > 0) {
|
|
1179
1176
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare presets service`) : false;
|
|
1180
1177
|
this.presetsServices = [];
|
|
1181
1178
|
const previousPresets = [];
|
|
1182
1179
|
|
|
1183
|
-
for (let i = 0; i <
|
|
1180
|
+
for (let i = 0; i < presets.length; i++) {
|
|
1184
1181
|
const preset = presets[i];
|
|
1185
1182
|
const presetName = preset.NumberDescription;
|
|
1186
1183
|
|