homebridge-smarthq-client 1.2.5-debug.1 → 1.2.5-debug.11
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PlatformAccessory, Service, Characteristic } from 'homebridge';
|
|
2
|
-
import { DeviceService } from 'ge-smarthq-api';
|
|
2
|
+
import { DeviceService, SendCommandRequest } from 'ge-smarthq-api';
|
|
3
3
|
import { SmartHqPlatform } from '../platform.js';
|
|
4
4
|
export declare class AirConditioner {
|
|
5
5
|
private readonly platform;
|
|
@@ -8,7 +8,7 @@ export declare class AirConditioner {
|
|
|
8
8
|
private readonly deviceId;
|
|
9
9
|
private readonly groupAccessory;
|
|
10
10
|
private lastActiveMode;
|
|
11
|
-
private
|
|
11
|
+
private lastActiveFanSpeedMode;
|
|
12
12
|
private lastActiveCelsius;
|
|
13
13
|
private isOn;
|
|
14
14
|
private physicalOnState;
|
|
@@ -44,8 +44,7 @@ export declare class AirConditioner {
|
|
|
44
44
|
constructor(platform: SmartHqPlatform, accessory: PlatformAccessory, // Parent: Air Conditioner
|
|
45
45
|
deviceServices: DeviceService[], deviceId: string, groupAccessory: PlatformAccessory[]);
|
|
46
46
|
private setupAccessories;
|
|
47
|
-
|
|
48
|
-
private executeSendCommand;
|
|
47
|
+
sendCommand(cmdBody: SendCommandRequest): Promise<boolean>;
|
|
49
48
|
private handleUpdate;
|
|
50
49
|
private findService;
|
|
51
50
|
private getLastElementAndCapitalize;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SmartHQClient } from 'ge-smarthq-api';
|
|
2
|
+
import chalk from 'chalk';
|
|
2
3
|
export class AirConditioner {
|
|
3
4
|
platform;
|
|
4
5
|
accessory;
|
|
@@ -7,7 +8,7 @@ export class AirConditioner {
|
|
|
7
8
|
groupAccessory;
|
|
8
9
|
// State cache
|
|
9
10
|
lastActiveMode = 'cloud.smarthq.type.thermostatmode.cool';
|
|
10
|
-
|
|
11
|
+
lastActiveFanSpeedMode = 'cloud.smarthq.type.fanspeed.low';
|
|
11
12
|
lastActiveCelsius = 22.22;
|
|
12
13
|
isOn = false;
|
|
13
14
|
physicalOnState = false;
|
|
@@ -78,7 +79,7 @@ export class AirConditioner {
|
|
|
78
79
|
this.lastActiveMode = thermostatService.state.mode;
|
|
79
80
|
}
|
|
80
81
|
if (thermostatService.state.fanSpeed != null) {
|
|
81
|
-
this.
|
|
82
|
+
this.lastActiveFanSpeedMode = thermostatService.state.fanSpeed;
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
// Load Celsius min/max bounds from thermostat config
|
|
@@ -150,8 +151,24 @@ export class AirConditioner {
|
|
|
150
151
|
service.updateCharacteristic(this.Characteristic.On, this.lastActiveMode === mode);
|
|
151
152
|
}
|
|
152
153
|
for (const [fanSpeed, service] of this.fanOutlets.entries()) {
|
|
153
|
-
service.updateCharacteristic(this.Characteristic.On, this.
|
|
154
|
+
service.updateCharacteristic(this.Characteristic.On, this.lastActiveFanSpeedMode === fanSpeed);
|
|
154
155
|
}
|
|
156
|
+
// Turned on, so set mode, fan speed and temperature to last active values. Default to Cool and Low and 22.22C if no last active values.
|
|
157
|
+
const cmdBody = {
|
|
158
|
+
command: {
|
|
159
|
+
mode: this.lastActiveMode || this.MODE_COOL,
|
|
160
|
+
fanSpeed: this.lastActiveFanSpeedMode || this.FAN_SPEED_LOW,
|
|
161
|
+
temperature: this.lastActiveCelsius || 22.22,
|
|
162
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
163
|
+
},
|
|
164
|
+
kind: 'service#command',
|
|
165
|
+
deviceId: this.deviceId,
|
|
166
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
167
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
168
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
169
|
+
};
|
|
170
|
+
this.client.debug(chalk.yellow(`## Turning on AC:`));
|
|
171
|
+
this.sendCommand(cmdBody);
|
|
155
172
|
}
|
|
156
173
|
else {
|
|
157
174
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
@@ -161,14 +178,21 @@ export class AirConditioner {
|
|
|
161
178
|
for (const service of this.fanOutlets.values()) {
|
|
162
179
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
163
180
|
}
|
|
181
|
+
// Turned off, so send command to power down AC unit. Note: GE firmware does not support a "power off" command, so we just send the "on" parameter as false to turn off the unit.
|
|
182
|
+
const cmdBody = {
|
|
183
|
+
command: {
|
|
184
|
+
on: this.isOn,
|
|
185
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
186
|
+
},
|
|
187
|
+
kind: 'service#command',
|
|
188
|
+
deviceId: this.deviceId,
|
|
189
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
190
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
191
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
192
|
+
};
|
|
193
|
+
this.client.debug(chalk.yellow(`## Turning off AC:`));
|
|
194
|
+
this.sendCommand(cmdBody);
|
|
164
195
|
}
|
|
165
|
-
const cmdBody = {
|
|
166
|
-
command: {
|
|
167
|
-
on: this.isOn,
|
|
168
|
-
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
this.sendCommand(cmdBody);
|
|
172
196
|
});
|
|
173
197
|
this.acThermostat
|
|
174
198
|
.getCharacteristic(this.Characteristic.CurrentHeaterCoolerState)
|
|
@@ -197,12 +221,19 @@ export class AirConditioner {
|
|
|
197
221
|
// Clip celsius to hardware bounds to prevent API errors
|
|
198
222
|
const clippedCelsius = Math.max(this.coolCelsiusMin, Math.min(this.coolCelsiusMax, this.lastActiveCelsius));
|
|
199
223
|
const coolFahrenheit = Math.round(clippedCelsius * 1.8 + 32);
|
|
224
|
+
// Set temperature on the AC unit via API command
|
|
200
225
|
const cmdBody = {
|
|
201
226
|
command: {
|
|
202
227
|
coolFahrenheit: coolFahrenheit,
|
|
203
228
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
204
|
-
}
|
|
229
|
+
},
|
|
230
|
+
kind: 'service#command',
|
|
231
|
+
deviceId: this.deviceId,
|
|
232
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
233
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
234
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
205
235
|
};
|
|
236
|
+
this.client.debug(chalk.yellow('## Setting AC Temperature:'));
|
|
206
237
|
this.sendCommand(cmdBody);
|
|
207
238
|
});
|
|
208
239
|
this.acThermostat
|
|
@@ -259,8 +290,8 @@ export class AirConditioner {
|
|
|
259
290
|
this.acThermostat.updateCharacteristic(this.Characteristic.Active, 1);
|
|
260
291
|
const stateVal = mode === this.MODE_FANONLY ? 1 : 3;
|
|
261
292
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, stateVal);
|
|
262
|
-
for (const [
|
|
263
|
-
service.updateCharacteristic(this.Characteristic.On, this.
|
|
293
|
+
for (const [fanspeedMode, service] of this.fanOutlets.entries()) {
|
|
294
|
+
service.updateCharacteristic(this.Characteristic.On, this.lastActiveFanSpeedMode === fanspeedMode);
|
|
264
295
|
}
|
|
265
296
|
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed - force Fan Speed to Low
|
|
266
297
|
// Dry mode sets fan speed to Auto, which is valid. Only Fan Only mode needs to be adjusted.
|
|
@@ -272,27 +303,44 @@ export class AirConditioner {
|
|
|
272
303
|
mode: this.MODE_FANONLY,
|
|
273
304
|
fanSpeed: this.FAN_SPEED_LOW,
|
|
274
305
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
275
|
-
}
|
|
306
|
+
},
|
|
307
|
+
kind: 'service#command',
|
|
308
|
+
deviceId: this.deviceId,
|
|
309
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
310
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
311
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
276
312
|
};
|
|
277
313
|
break;
|
|
278
314
|
case this.MODE_DRY:
|
|
279
315
|
cmdBody = {
|
|
280
316
|
command: {
|
|
281
317
|
mode: this.MODE_DRY,
|
|
282
|
-
fanSpeed: this.FAN_SPEED_AUTO,
|
|
318
|
+
// fanSpeed: this.FAN_SPEED_AUTO, set to Auto by default for Dry mode, which is valid
|
|
283
319
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
284
|
-
}
|
|
320
|
+
},
|
|
321
|
+
kind: 'service#command',
|
|
322
|
+
deviceId: this.deviceId,
|
|
323
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
324
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
325
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
285
326
|
};
|
|
286
327
|
break;
|
|
287
328
|
// Default case handles Cool and Heat modes, which support all(?) fan speeds
|
|
288
329
|
default:
|
|
330
|
+
// Set mode on the AC unit via API command with special handling for Fan Only and Dry modes
|
|
289
331
|
cmdBody = {
|
|
290
332
|
command: {
|
|
291
333
|
mode: mode,
|
|
292
334
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
293
|
-
}
|
|
335
|
+
},
|
|
336
|
+
kind: 'service#command',
|
|
337
|
+
deviceId: this.deviceId,
|
|
338
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
339
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
340
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
294
341
|
};
|
|
295
342
|
}
|
|
343
|
+
this.client.debug(chalk.yellow('## Setting AC Mode:'));
|
|
296
344
|
this.sendCommand(cmdBody);
|
|
297
345
|
}
|
|
298
346
|
else {
|
|
@@ -309,9 +357,14 @@ export class AirConditioner {
|
|
|
309
357
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
310
358
|
const cmdBody = {
|
|
311
359
|
command: {
|
|
312
|
-
|
|
360
|
+
on: this.isOn,
|
|
313
361
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
314
|
-
}
|
|
362
|
+
},
|
|
363
|
+
kind: 'service#command',
|
|
364
|
+
deviceId: this.deviceId,
|
|
365
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
366
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
367
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
315
368
|
};
|
|
316
369
|
this.sendCommand(cmdBody);
|
|
317
370
|
}
|
|
@@ -328,16 +381,16 @@ export class AirConditioner {
|
|
|
328
381
|
.setCharacteristic(this.Characteristic.SerialNumber, this.parentAccessory.context.device.serial || 'Unknown');
|
|
329
382
|
// Clean up stale Fan Speed outlets from cache
|
|
330
383
|
const activeFanServiceUUIDs = new Set();
|
|
331
|
-
for (const
|
|
332
|
-
const [displayName] = this.getLastElementAndCapitalize(
|
|
384
|
+
for (const fanspeedMode of supportedFanSpeeds) {
|
|
385
|
+
const [displayName] = this.getLastElementAndCapitalize(fanspeedMode, '.');
|
|
333
386
|
const service = this.fanAccessory.getService(displayName) ||
|
|
334
|
-
this.fanAccessory.addService(this.Service.Outlet, displayName,
|
|
387
|
+
this.fanAccessory.addService(this.Service.Outlet, displayName, fanspeedMode);
|
|
335
388
|
if (!service.getCharacteristic(this.Characteristic.ConfiguredName)) {
|
|
336
389
|
service.addOptionalCharacteristic(this.Characteristic.ConfiguredName);
|
|
337
390
|
}
|
|
338
391
|
service.setCharacteristic(this.Characteristic.Name, displayName);
|
|
339
392
|
service.setCharacteristic(this.Characteristic.ConfiguredName, displayName);
|
|
340
|
-
activeFanServiceUUIDs.add(service.UUID + (
|
|
393
|
+
activeFanServiceUUIDs.add(service.UUID + (fanspeedMode || ''));
|
|
341
394
|
}
|
|
342
395
|
for (const service of [...this.fanAccessory.services]) {
|
|
343
396
|
if (service.UUID === this.Service.AccessoryInformation.UUID)
|
|
@@ -351,21 +404,26 @@ export class AirConditioner {
|
|
|
351
404
|
}
|
|
352
405
|
}
|
|
353
406
|
// Bind Fan Speed Outlets characteristics
|
|
354
|
-
|
|
355
|
-
|
|
407
|
+
let cmdBody;
|
|
408
|
+
for (const fanspeedMode of supportedFanSpeeds) {
|
|
409
|
+
const [displayName] = this.getLastElementAndCapitalize(fanspeedMode, '.');
|
|
356
410
|
const service = this.fanAccessory.getService(displayName);
|
|
357
|
-
this.fanOutlets.set(
|
|
411
|
+
this.fanOutlets.set(fanspeedMode, service);
|
|
358
412
|
service
|
|
359
413
|
.getCharacteristic(this.Characteristic.On)
|
|
360
|
-
.onGet(() => this.isOn && this.
|
|
414
|
+
.onGet(() => this.isOn && this.lastActiveFanSpeedMode === fanspeedMode)
|
|
361
415
|
.onSet(async (value) => {
|
|
362
416
|
if (value) {
|
|
363
|
-
//
|
|
417
|
+
// If mode is Dry, then fan speed is automatically set to Auto and cannot be changed.
|
|
418
|
+
if (this.lastActiveMode === this.MODE_DRY) {
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed so return to last active fan speed mode if user tries to set Auto while in Fan Only mode
|
|
364
422
|
if (this.lastActiveMode === this.MODE_FANONLY &&
|
|
365
|
-
|
|
423
|
+
fanspeedMode === this.FAN_SPEED_AUTO) {
|
|
366
424
|
setTimeout(() => {
|
|
367
425
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
368
|
-
const activeService = this.fanOutlets.get(this.
|
|
426
|
+
const activeService = this.fanOutlets.get(this.lastActiveFanSpeedMode);
|
|
369
427
|
if (activeService) {
|
|
370
428
|
activeService.updateCharacteristic(this.Characteristic.On, this.isOn);
|
|
371
429
|
}
|
|
@@ -373,9 +431,10 @@ export class AirConditioner {
|
|
|
373
431
|
return;
|
|
374
432
|
}
|
|
375
433
|
this.isOn = true;
|
|
376
|
-
this.
|
|
434
|
+
this.lastActiveFanSpeedMode = fanspeedMode;
|
|
435
|
+
// Update all other fan speed outlets to OFF
|
|
377
436
|
for (const [fanSpeed, service] of this.fanOutlets.entries()) {
|
|
378
|
-
if (fanSpeed !==
|
|
437
|
+
if (fanSpeed !== fanspeedMode) {
|
|
379
438
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
380
439
|
}
|
|
381
440
|
}
|
|
@@ -385,17 +444,26 @@ export class AirConditioner {
|
|
|
385
444
|
for (const [modeKey, service] of this.modeOutlets.entries()) {
|
|
386
445
|
service.updateCharacteristic(this.Characteristic.On, this.lastActiveMode === modeKey);
|
|
387
446
|
}
|
|
388
|
-
|
|
447
|
+
cmdBody = {
|
|
389
448
|
command: {
|
|
390
|
-
|
|
449
|
+
mode: this.lastActiveMode,
|
|
450
|
+
fanspeed: this.lastActiveFanSpeedMode,
|
|
391
451
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
392
|
-
}
|
|
452
|
+
},
|
|
453
|
+
kind: 'service#command',
|
|
454
|
+
deviceId: this.deviceId,
|
|
455
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
456
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
457
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
393
458
|
};
|
|
459
|
+
this.client.debug(chalk.yellow(`## Set Fan Speed to ${this.lastActiveFanSpeedMode} with mode: ${this.lastActiveMode}`));
|
|
394
460
|
this.sendCommand(cmdBody);
|
|
395
461
|
}
|
|
396
462
|
else {
|
|
397
463
|
// Toggling active fan speed OFF powers down system
|
|
398
|
-
|
|
464
|
+
// note: Fan Speed OFF is not a supported state for the AC unit, so we treat it as a power down command
|
|
465
|
+
// note: don't think the else block is ever reached
|
|
466
|
+
if (this.lastActiveFanSpeedMode === fanspeedMode) {
|
|
399
467
|
this.isOn = false;
|
|
400
468
|
for (const service of this.modeOutlets.values()) {
|
|
401
469
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
@@ -407,9 +475,14 @@ export class AirConditioner {
|
|
|
407
475
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
408
476
|
const cmdBody = {
|
|
409
477
|
command: {
|
|
410
|
-
|
|
478
|
+
on: this.isOn,
|
|
411
479
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
412
|
-
}
|
|
480
|
+
},
|
|
481
|
+
kind: 'service#command',
|
|
482
|
+
deviceId: this.deviceId,
|
|
483
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
484
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
485
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
413
486
|
};
|
|
414
487
|
this.sendCommand(cmdBody);
|
|
415
488
|
}
|
|
@@ -423,75 +496,98 @@ export class AirConditioner {
|
|
|
423
496
|
// ---------------------------
|
|
424
497
|
// API COMMAND SENDER
|
|
425
498
|
// ---------------------------
|
|
426
|
-
sendCommand(cmdBody) {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
this.
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
async executeSendCommand(command) {
|
|
436
|
-
const service = this.findService('cloud.smarthq.service.thermostat.v1', 'cloud.smarthq.domain.thermostat');
|
|
437
|
-
if (!service)
|
|
438
|
-
return;
|
|
439
|
-
this.commandQueue = this.commandQueue.then(async () => {
|
|
440
|
-
/*
|
|
441
|
-
const command: Record<string, unknown> = {
|
|
442
|
-
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
443
|
-
};
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
// Only send the 'on' parameter if it is transitioning (prevents GE firmware from resetting to ECO)
|
|
447
|
-
if (!this.isOn) {
|
|
448
|
-
command.on = false;
|
|
449
|
-
} else if (!this.physicalOnState) {
|
|
450
|
-
command.on = true;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
if (this.isOn) {
|
|
454
|
-
command.mode = this.lastActiveMode;
|
|
455
|
-
|
|
456
|
-
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed
|
|
457
|
-
if (
|
|
458
|
-
this.lastActiveMode === this.MODE_FANONLY &&
|
|
459
|
-
this.lastActiveFanSpeed === this.FAN_SPEED_AUTO
|
|
460
|
-
) {
|
|
461
|
-
command.fanSpeed = this.FAN_SPEED_LOW;
|
|
462
|
-
} else {
|
|
463
|
-
command.fanSpeed = this.lastActiveFanSpeed;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
// Omit coolFahrenheit in Fan Only mode (thermostat has no cooling setpoint)
|
|
467
|
-
if (this.lastActiveMode !== this.MODE_FANONLY) {
|
|
468
|
-
// Clip celsius to hardware bounds to prevent API errors
|
|
469
|
-
const clippedCelsius = Math.max(
|
|
470
|
-
this.coolCelsiusMin,
|
|
471
|
-
Math.min(this.coolCelsiusMax, this.lastActiveCelsius),
|
|
472
|
-
);
|
|
473
|
-
command.coolFahrenheit = Math.round(clippedCelsius * 1.8 + 32);
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
*/
|
|
477
|
-
try {
|
|
478
|
-
await this.client.sendCommand({
|
|
479
|
-
command,
|
|
480
|
-
kind: 'service#command',
|
|
481
|
-
deviceId: this.deviceId,
|
|
482
|
-
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
483
|
-
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
484
|
-
domainType: 'cloud.smarthq.domain.thermostat',
|
|
485
|
-
});
|
|
499
|
+
async sendCommand(cmdBody) {
|
|
500
|
+
try {
|
|
501
|
+
this.client.debug('=======================');
|
|
502
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
503
|
+
this.client.debug('=======================');
|
|
504
|
+
const response = await this.client.sendCommand(cmdBody); // This command sets the mode and options
|
|
505
|
+
if (response == null) {
|
|
506
|
+
this.client.debug("No response from send command");
|
|
507
|
+
return false;
|
|
486
508
|
}
|
|
487
|
-
|
|
488
|
-
this.
|
|
509
|
+
else {
|
|
510
|
+
this.client.debug("## Response from send command : " + response.outcome);
|
|
511
|
+
return response.success;
|
|
489
512
|
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
513
|
+
}
|
|
514
|
+
catch (error) {
|
|
515
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
516
|
+
const stack = error instanceof Error ? error.stack : undefined;
|
|
517
|
+
this.platform.log.error("sendCommand failed", {
|
|
518
|
+
message,
|
|
519
|
+
stack,
|
|
520
|
+
raw: error,
|
|
521
|
+
});
|
|
522
|
+
this.client.debug(`sendCommand failed: ${message}`);
|
|
523
|
+
return false;
|
|
524
|
+
}
|
|
494
525
|
}
|
|
526
|
+
/*
|
|
527
|
+
private async executeSendCommand(command: SendCommandRequest) {
|
|
528
|
+
const service = this.findService(
|
|
529
|
+
'cloud.smarthq.service.thermostat.v1',
|
|
530
|
+
'cloud.smarthq.domain.thermostat',
|
|
531
|
+
);
|
|
532
|
+
|
|
533
|
+
if (!service) return;
|
|
534
|
+
|
|
535
|
+
//this.commandQueue = this.commandQueue.then(async () => {
|
|
536
|
+
|
|
537
|
+
const command: Record<string, unknown> = {
|
|
538
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
539
|
+
};
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
// Only send the 'on' parameter if it is transitioning (prevents GE firmware from resetting to ECO)
|
|
543
|
+
if (!this.isOn) {
|
|
544
|
+
command.on = false;
|
|
545
|
+
} else if (!this.physicalOnState) {
|
|
546
|
+
command.on = true;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
if (this.isOn) {
|
|
550
|
+
command.mode = this.lastActiveMode;
|
|
551
|
+
|
|
552
|
+
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed
|
|
553
|
+
if (
|
|
554
|
+
this.lastActiveMode === this.MODE_FANONLY &&
|
|
555
|
+
this.lastActiveFanSpeedMode === this.FAN_SPEED_AUTO
|
|
556
|
+
) {
|
|
557
|
+
command.fanSpeed = this.FAN_SPEED_LOW;
|
|
558
|
+
} else {
|
|
559
|
+
command.fanSpeed = this.lastActiveFanSpeedMode;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// Omit coolFahrenheit in Fan Only mode (thermostat has no cooling setpoint)
|
|
563
|
+
if (this.lastActiveMode !== this.MODE_FANONLY) {
|
|
564
|
+
// Clip celsius to hardware bounds to prevent API errors
|
|
565
|
+
const clippedCelsius = Math.max(
|
|
566
|
+
this.coolCelsiusMin,
|
|
567
|
+
Math.min(this.coolCelsiusMax, this.lastActiveCelsius),
|
|
568
|
+
);
|
|
569
|
+
command.coolFahrenheit = Math.round(clippedCelsius * 1.8 + 32);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
try {
|
|
575
|
+
const response = await this.client.sendCommand(command);
|
|
576
|
+
|
|
577
|
+
if (response == null) {
|
|
578
|
+
this.client.debug("No response from send command");
|
|
579
|
+
} else {
|
|
580
|
+
this.client.debug(
|
|
581
|
+
"#### Response from send command : " + response.outcome,
|
|
582
|
+
);
|
|
583
|
+
return response.success;
|
|
584
|
+
}
|
|
585
|
+
} catch (error) {
|
|
586
|
+
this.platform.log.error(`Error sending command to AC:`, error);
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
return true;
|
|
590
|
+
}*/
|
|
495
591
|
// ---------------------------
|
|
496
592
|
// WEBSOCKET UPDATES HANDLING
|
|
497
593
|
// ---------------------------
|
|
@@ -513,7 +609,7 @@ export class AirConditioner {
|
|
|
513
609
|
this.lastActiveMode = state.mode;
|
|
514
610
|
}
|
|
515
611
|
if (state.fanSpeed !== undefined) {
|
|
516
|
-
this.
|
|
612
|
+
this.lastActiveFanSpeedMode = state.fanSpeed;
|
|
517
613
|
}
|
|
518
614
|
// Update HeaterCooler state dynamically based on power and mode
|
|
519
615
|
const stateVal = !this.isOn
|
|
@@ -525,7 +621,7 @@ export class AirConditioner {
|
|
|
525
621
|
service.updateCharacteristic(this.Characteristic.On, this.isOn && this.lastActiveMode === mode);
|
|
526
622
|
}
|
|
527
623
|
for (const [fanSpeed, service] of this.fanOutlets.entries()) {
|
|
528
|
-
service.updateCharacteristic(this.Characteristic.On, this.isOn && this.
|
|
624
|
+
service.updateCharacteristic(this.Characteristic.On, this.isOn && this.lastActiveFanSpeedMode === fanSpeed);
|
|
529
625
|
}
|
|
530
626
|
}
|
|
531
627
|
else if (message.domainType === 'cloud.smarthq.domain.indoor.ambient') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"airConditioner.js","sourceRoot":"","sources":["../../src/airConditioner/airConditioner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"airConditioner.js","sourceRoot":"","sources":["../../src/airConditioner/airConditioner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,14 +5,15 @@ import {
|
|
|
5
5
|
Characteristic,
|
|
6
6
|
} from 'homebridge';
|
|
7
7
|
|
|
8
|
-
import { SmartHQClient, DeviceService } from 'ge-smarthq-api';
|
|
8
|
+
import { SmartHQClient, DeviceService, SendCommandRequest } from 'ge-smarthq-api';
|
|
9
9
|
import { SmartHqPlatform } from '../platform.js';
|
|
10
10
|
import { ServiceMessage } from '../index.js';
|
|
11
|
+
import chalk from 'chalk';
|
|
11
12
|
|
|
12
13
|
export class AirConditioner {
|
|
13
14
|
// State cache
|
|
14
15
|
private lastActiveMode = 'cloud.smarthq.type.thermostatmode.cool';
|
|
15
|
-
private
|
|
16
|
+
private lastActiveFanSpeedMode = 'cloud.smarthq.type.fanspeed.low';
|
|
16
17
|
private lastActiveCelsius = 22.22;
|
|
17
18
|
private isOn = false;
|
|
18
19
|
private physicalOnState = false;
|
|
@@ -99,7 +100,7 @@ export class AirConditioner {
|
|
|
99
100
|
this.lastActiveMode = thermostatService.state.mode as string;
|
|
100
101
|
}
|
|
101
102
|
if (thermostatService.state.fanSpeed != null) {
|
|
102
|
-
this.
|
|
103
|
+
this.lastActiveFanSpeedMode = thermostatService.state.fanSpeed as string;
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
|
|
@@ -192,8 +193,30 @@ export class AirConditioner {
|
|
|
192
193
|
service.updateCharacteristic(this.Characteristic.On, this.lastActiveMode === mode);
|
|
193
194
|
}
|
|
194
195
|
for (const [fanSpeed, service] of this.fanOutlets.entries()) {
|
|
195
|
-
service.updateCharacteristic(this.Characteristic.On, this.
|
|
196
|
+
service.updateCharacteristic(this.Characteristic.On, this.lastActiveFanSpeedMode === fanSpeed);
|
|
196
197
|
}
|
|
198
|
+
|
|
199
|
+
// Turned on, so set mode, fan speed and temperature to last active values. Default to Cool and Low and 22.22C if no last active values.
|
|
200
|
+
|
|
201
|
+
const cmdBody = {
|
|
202
|
+
command: {
|
|
203
|
+
mode: this.lastActiveMode || this.MODE_COOL,
|
|
204
|
+
fanSpeed: this.lastActiveFanSpeedMode || this.FAN_SPEED_LOW,
|
|
205
|
+
temperature: this.lastActiveCelsius || 22.22,
|
|
206
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
207
|
+
},
|
|
208
|
+
kind: 'service#command',
|
|
209
|
+
deviceId: this.deviceId,
|
|
210
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
211
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
212
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
this.client.debug(chalk.yellow(`## Turning on AC:`));
|
|
217
|
+
|
|
218
|
+
this.sendCommand(cmdBody);
|
|
219
|
+
|
|
197
220
|
} else {
|
|
198
221
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
199
222
|
for (const service of this.modeOutlets.values()) {
|
|
@@ -202,15 +225,27 @@ export class AirConditioner {
|
|
|
202
225
|
for (const service of this.fanOutlets.values()) {
|
|
203
226
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
204
227
|
}
|
|
228
|
+
|
|
229
|
+
// Turned off, so send command to power down AC unit. Note: GE firmware does not support a "power off" command, so we just send the "on" parameter as false to turn off the unit.
|
|
230
|
+
|
|
231
|
+
const cmdBody = {
|
|
232
|
+
command: {
|
|
233
|
+
on: this.isOn,
|
|
234
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
235
|
+
},
|
|
236
|
+
kind: 'service#command',
|
|
237
|
+
deviceId: this.deviceId,
|
|
238
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
239
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
240
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
this.client.debug(chalk.yellow(`## Turning off AC:`));
|
|
244
|
+
|
|
245
|
+
this.sendCommand(cmdBody);
|
|
205
246
|
}
|
|
206
|
-
const cmdBody = {
|
|
207
|
-
command: {
|
|
208
|
-
on: this.isOn,
|
|
209
|
-
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
247
|
|
|
213
|
-
|
|
248
|
+
|
|
214
249
|
});
|
|
215
250
|
|
|
216
251
|
this.acThermostat
|
|
@@ -246,12 +281,23 @@ export class AirConditioner {
|
|
|
246
281
|
);
|
|
247
282
|
const coolFahrenheit = Math.round(clippedCelsius * 1.8 + 32);
|
|
248
283
|
|
|
284
|
+
|
|
285
|
+
// Set temperature on the AC unit via API command
|
|
286
|
+
|
|
249
287
|
const cmdBody = {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
288
|
+
command: {
|
|
289
|
+
coolFahrenheit: coolFahrenheit,
|
|
290
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
291
|
+
},
|
|
292
|
+
kind: 'service#command',
|
|
293
|
+
deviceId: this.deviceId,
|
|
294
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
295
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
296
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
this.client.debug(chalk.yellow('## Setting AC Temperature:'));
|
|
300
|
+
|
|
255
301
|
this.sendCommand(cmdBody);
|
|
256
302
|
});
|
|
257
303
|
|
|
@@ -326,13 +372,15 @@ export class AirConditioner {
|
|
|
326
372
|
const stateVal = mode === this.MODE_FANONLY ? 1 : 3;
|
|
327
373
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, stateVal);
|
|
328
374
|
|
|
329
|
-
for (const [
|
|
330
|
-
service.updateCharacteristic(this.Characteristic.On, this.
|
|
375
|
+
for (const [fanspeedMode, service] of this.fanOutlets.entries()) {
|
|
376
|
+
service.updateCharacteristic(this.Characteristic.On, this.lastActiveFanSpeedMode === fanspeedMode);
|
|
331
377
|
}
|
|
332
378
|
|
|
333
379
|
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed - force Fan Speed to Low
|
|
334
380
|
// Dry mode sets fan speed to Auto, which is valid. Only Fan Only mode needs to be adjusted.
|
|
335
|
-
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
let cmdBody: SendCommandRequest;
|
|
336
384
|
switch (mode) {
|
|
337
385
|
case this.MODE_FANONLY:
|
|
338
386
|
cmdBody = {
|
|
@@ -340,28 +388,47 @@ export class AirConditioner {
|
|
|
340
388
|
mode: this.MODE_FANONLY,
|
|
341
389
|
fanSpeed: this.FAN_SPEED_LOW,
|
|
342
390
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
343
|
-
}
|
|
391
|
+
},
|
|
392
|
+
kind: 'service#command',
|
|
393
|
+
deviceId: this.deviceId,
|
|
394
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
395
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
396
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
344
397
|
};
|
|
345
398
|
break;
|
|
346
399
|
case this.MODE_DRY:
|
|
347
400
|
cmdBody = {
|
|
348
401
|
command: {
|
|
349
402
|
mode: this.MODE_DRY,
|
|
350
|
-
|
|
403
|
+
// fanSpeed: this.FAN_SPEED_AUTO, set to Auto by default for Dry mode, which is valid
|
|
351
404
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
352
|
-
}
|
|
353
|
-
|
|
405
|
+
},
|
|
406
|
+
kind: 'service#command',
|
|
407
|
+
deviceId: this.deviceId,
|
|
408
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
409
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
410
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
411
|
+
};
|
|
354
412
|
break;
|
|
355
413
|
// Default case handles Cool and Heat modes, which support all(?) fan speeds
|
|
356
414
|
default:
|
|
415
|
+
// Set mode on the AC unit via API command with special handling for Fan Only and Dry modes
|
|
416
|
+
|
|
357
417
|
cmdBody = {
|
|
358
418
|
command: {
|
|
359
|
-
mode:
|
|
419
|
+
mode: mode,
|
|
360
420
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
361
|
-
}
|
|
421
|
+
},
|
|
422
|
+
kind: 'service#command',
|
|
423
|
+
deviceId: this.deviceId,
|
|
424
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
425
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
426
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
362
427
|
};
|
|
363
428
|
}
|
|
364
|
-
|
|
429
|
+
|
|
430
|
+
this.client.debug(chalk.yellow('## Setting AC Mode:'));
|
|
431
|
+
|
|
365
432
|
this.sendCommand(cmdBody);
|
|
366
433
|
} else {
|
|
367
434
|
// Toggling active mode OFF powers down system
|
|
@@ -378,11 +445,16 @@ export class AirConditioner {
|
|
|
378
445
|
this.acThermostat.updateCharacteristic(this.Characteristic.Active, 0);
|
|
379
446
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
380
447
|
|
|
381
|
-
const cmdBody:
|
|
448
|
+
const cmdBody: SendCommandRequest = {
|
|
382
449
|
command: {
|
|
383
|
-
|
|
450
|
+
on: this.isOn,
|
|
384
451
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
385
|
-
}
|
|
452
|
+
},
|
|
453
|
+
kind: 'service#command',
|
|
454
|
+
deviceId: this.deviceId,
|
|
455
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
456
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
457
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
386
458
|
};
|
|
387
459
|
|
|
388
460
|
this.sendCommand(cmdBody);
|
|
@@ -408,11 +480,11 @@ export class AirConditioner {
|
|
|
408
480
|
|
|
409
481
|
// Clean up stale Fan Speed outlets from cache
|
|
410
482
|
const activeFanServiceUUIDs = new Set<string>();
|
|
411
|
-
for (const
|
|
412
|
-
const [displayName] = this.getLastElementAndCapitalize(
|
|
483
|
+
for (const fanspeedMode of supportedFanSpeeds) {
|
|
484
|
+
const [displayName] = this.getLastElementAndCapitalize(fanspeedMode, '.');
|
|
413
485
|
const service =
|
|
414
486
|
this.fanAccessory.getService(displayName) ||
|
|
415
|
-
this.fanAccessory.addService(this.Service.Outlet, displayName,
|
|
487
|
+
this.fanAccessory.addService(this.Service.Outlet, displayName, fanspeedMode);
|
|
416
488
|
|
|
417
489
|
if (!service.getCharacteristic(this.Characteristic.ConfiguredName)) {
|
|
418
490
|
service.addOptionalCharacteristic(this.Characteristic.ConfiguredName);
|
|
@@ -420,7 +492,7 @@ export class AirConditioner {
|
|
|
420
492
|
service.setCharacteristic(this.Characteristic.Name, displayName);
|
|
421
493
|
service.setCharacteristic(this.Characteristic.ConfiguredName, displayName);
|
|
422
494
|
|
|
423
|
-
activeFanServiceUUIDs.add(service.UUID + (
|
|
495
|
+
activeFanServiceUUIDs.add(service.UUID + (fanspeedMode || ''));
|
|
424
496
|
}
|
|
425
497
|
|
|
426
498
|
for (const service of [...this.fanAccessory.services]) {
|
|
@@ -435,25 +507,31 @@ export class AirConditioner {
|
|
|
435
507
|
}
|
|
436
508
|
|
|
437
509
|
// Bind Fan Speed Outlets characteristics
|
|
438
|
-
|
|
439
|
-
|
|
510
|
+
let cmdBody: SendCommandRequest;
|
|
511
|
+
for (const fanspeedMode of supportedFanSpeeds) {
|
|
512
|
+
const [displayName] = this.getLastElementAndCapitalize(fanspeedMode, '.');
|
|
440
513
|
const service = this.fanAccessory.getService(displayName)!;
|
|
441
514
|
|
|
442
|
-
this.fanOutlets.set(
|
|
515
|
+
this.fanOutlets.set(fanspeedMode, service);
|
|
443
516
|
|
|
444
517
|
service
|
|
445
518
|
.getCharacteristic(this.Characteristic.On)
|
|
446
|
-
.onGet(() => this.isOn && this.
|
|
519
|
+
.onGet(() => this.isOn && this.lastActiveFanSpeedMode === fanspeedMode)
|
|
447
520
|
.onSet(async (value) => {
|
|
448
521
|
if (value) {
|
|
449
|
-
//
|
|
522
|
+
// If mode is Dry, then fan speed is automatically set to Auto and cannot be changed.
|
|
523
|
+
if (this.lastActiveMode === this.MODE_DRY) {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed so return to last active fan speed mode if user tries to set Auto while in Fan Only mode
|
|
450
528
|
if (
|
|
451
529
|
this.lastActiveMode === this.MODE_FANONLY &&
|
|
452
|
-
|
|
530
|
+
fanspeedMode === this.FAN_SPEED_AUTO
|
|
453
531
|
) {
|
|
454
532
|
setTimeout(() => {
|
|
455
533
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
456
|
-
const activeService = this.fanOutlets.get(this.
|
|
534
|
+
const activeService = this.fanOutlets.get(this.lastActiveFanSpeedMode);
|
|
457
535
|
if (activeService) {
|
|
458
536
|
activeService.updateCharacteristic(this.Characteristic.On, this.isOn);
|
|
459
537
|
}
|
|
@@ -462,10 +540,11 @@ export class AirConditioner {
|
|
|
462
540
|
}
|
|
463
541
|
|
|
464
542
|
this.isOn = true;
|
|
465
|
-
this.
|
|
543
|
+
this.lastActiveFanSpeedMode = fanspeedMode;
|
|
466
544
|
|
|
545
|
+
// Update all other fan speed outlets to OFF
|
|
467
546
|
for (const [fanSpeed, service] of this.fanOutlets.entries()) {
|
|
468
|
-
if (fanSpeed !==
|
|
547
|
+
if (fanSpeed !== fanspeedMode) {
|
|
469
548
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
470
549
|
}
|
|
471
550
|
}
|
|
@@ -478,17 +557,27 @@ export class AirConditioner {
|
|
|
478
557
|
service.updateCharacteristic(this.Characteristic.On, this.lastActiveMode === modeKey);
|
|
479
558
|
}
|
|
480
559
|
|
|
481
|
-
|
|
560
|
+
cmdBody = {
|
|
482
561
|
command: {
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
562
|
+
mode: this.lastActiveMode,
|
|
563
|
+
fanspeed: this.lastActiveFanSpeedMode,
|
|
564
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
565
|
+
},
|
|
566
|
+
kind: 'service#command',
|
|
567
|
+
deviceId: this.deviceId,
|
|
568
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
569
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
570
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
486
571
|
};
|
|
487
572
|
|
|
573
|
+
this.client.debug(chalk.yellow(`## Set Fan Speed to ${this.lastActiveFanSpeedMode} with mode: ${this.lastActiveMode}`));
|
|
574
|
+
|
|
488
575
|
this.sendCommand(cmdBody);
|
|
489
576
|
} else {
|
|
490
577
|
// Toggling active fan speed OFF powers down system
|
|
491
|
-
|
|
578
|
+
// note: Fan Speed OFF is not a supported state for the AC unit, so we treat it as a power down command
|
|
579
|
+
// note: don't think the else block is ever reached
|
|
580
|
+
if (this.lastActiveFanSpeedMode === fanspeedMode) {
|
|
492
581
|
this.isOn = false;
|
|
493
582
|
|
|
494
583
|
for (const service of this.modeOutlets.values()) {
|
|
@@ -500,11 +589,16 @@ export class AirConditioner {
|
|
|
500
589
|
|
|
501
590
|
this.acThermostat.updateCharacteristic(this.Characteristic.Active, 0);
|
|
502
591
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
503
|
-
const cmdBody:
|
|
592
|
+
const cmdBody: SendCommandRequest = {
|
|
504
593
|
command: {
|
|
505
|
-
|
|
594
|
+
on: this.isOn,
|
|
506
595
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
507
|
-
}
|
|
596
|
+
},
|
|
597
|
+
kind: 'service#command',
|
|
598
|
+
deviceId: this.deviceId,
|
|
599
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
600
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
601
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
508
602
|
};
|
|
509
603
|
|
|
510
604
|
this.sendCommand(cmdBody);
|
|
@@ -521,18 +615,40 @@ export class AirConditioner {
|
|
|
521
615
|
// ---------------------------
|
|
522
616
|
// API COMMAND SENDER
|
|
523
617
|
// ---------------------------
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
618
|
+
async sendCommand(cmdBody: SendCommandRequest) {
|
|
619
|
+
|
|
620
|
+
try {
|
|
621
|
+
this.client.debug('=======================');
|
|
622
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
623
|
+
this.client.debug('=======================');
|
|
624
|
+
|
|
625
|
+
const response = await this.client.sendCommand(cmdBody); // This command sets the mode and options
|
|
626
|
+
|
|
627
|
+
if (response == null) {
|
|
628
|
+
this.client.debug("No response from send command");
|
|
629
|
+
return false;
|
|
630
|
+
} else {
|
|
631
|
+
this.client.debug(
|
|
632
|
+
"## Response from send command : " + response.outcome,
|
|
633
|
+
);
|
|
634
|
+
return response.success;
|
|
635
|
+
}
|
|
636
|
+
} catch (error: unknown) {
|
|
637
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
638
|
+
const stack = error instanceof Error ? error.stack : undefined;
|
|
639
|
+
|
|
640
|
+
this.platform.log.error("sendCommand failed", {
|
|
641
|
+
message,
|
|
642
|
+
stack,
|
|
643
|
+
raw: error,
|
|
644
|
+
});
|
|
528
645
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
}, 150);
|
|
646
|
+
this.client.debug(`sendCommand failed: ${message}`);
|
|
647
|
+
return false;
|
|
648
|
+
}
|
|
533
649
|
}
|
|
534
|
-
|
|
535
|
-
private async executeSendCommand(command:
|
|
650
|
+
/*
|
|
651
|
+
private async executeSendCommand(command: SendCommandRequest) {
|
|
536
652
|
const service = this.findService(
|
|
537
653
|
'cloud.smarthq.service.thermostat.v1',
|
|
538
654
|
'cloud.smarthq.domain.thermostat',
|
|
@@ -540,8 +656,8 @@ export class AirConditioner {
|
|
|
540
656
|
|
|
541
657
|
if (!service) return;
|
|
542
658
|
|
|
543
|
-
this.commandQueue = this.commandQueue.then(async () => {
|
|
544
|
-
|
|
659
|
+
//this.commandQueue = this.commandQueue.then(async () => {
|
|
660
|
+
|
|
545
661
|
const command: Record<string, unknown> = {
|
|
546
662
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
547
663
|
};
|
|
@@ -560,11 +676,11 @@ export class AirConditioner {
|
|
|
560
676
|
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed
|
|
561
677
|
if (
|
|
562
678
|
this.lastActiveMode === this.MODE_FANONLY &&
|
|
563
|
-
this.
|
|
679
|
+
this.lastActiveFanSpeedMode === this.FAN_SPEED_AUTO
|
|
564
680
|
) {
|
|
565
681
|
command.fanSpeed = this.FAN_SPEED_LOW;
|
|
566
682
|
} else {
|
|
567
|
-
command.fanSpeed = this.
|
|
683
|
+
command.fanSpeed = this.lastActiveFanSpeedMode;
|
|
568
684
|
}
|
|
569
685
|
|
|
570
686
|
// Omit coolFahrenheit in Fan Only mode (thermostat has no cooling setpoint)
|
|
@@ -577,26 +693,25 @@ export class AirConditioner {
|
|
|
577
693
|
command.coolFahrenheit = Math.round(clippedCelsius * 1.8 + 32);
|
|
578
694
|
}
|
|
579
695
|
}
|
|
580
|
-
|
|
696
|
+
|
|
581
697
|
|
|
582
698
|
try {
|
|
583
|
-
await this.client.sendCommand(
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
699
|
+
const response = await this.client.sendCommand(command);
|
|
700
|
+
|
|
701
|
+
if (response == null) {
|
|
702
|
+
this.client.debug("No response from send command");
|
|
703
|
+
} else {
|
|
704
|
+
this.client.debug(
|
|
705
|
+
"#### Response from send command : " + response.outcome,
|
|
706
|
+
);
|
|
707
|
+
return response.success;
|
|
708
|
+
}
|
|
591
709
|
} catch (error) {
|
|
592
710
|
this.platform.log.error(`Error sending command to AC:`, error);
|
|
593
711
|
}
|
|
594
|
-
}).catch((err) => {
|
|
595
|
-
this.platform.log.error(`Error in AC command queue:`, err);
|
|
596
|
-
});
|
|
597
712
|
|
|
598
|
-
return
|
|
599
|
-
}
|
|
713
|
+
return true;
|
|
714
|
+
}*/
|
|
600
715
|
|
|
601
716
|
// ---------------------------
|
|
602
717
|
// WEBSOCKET UPDATES HANDLING
|
|
@@ -622,7 +737,7 @@ export class AirConditioner {
|
|
|
622
737
|
}
|
|
623
738
|
|
|
624
739
|
if (state.fanSpeed !== undefined) {
|
|
625
|
-
this.
|
|
740
|
+
this.lastActiveFanSpeedMode = state.fanSpeed as string;
|
|
626
741
|
}
|
|
627
742
|
|
|
628
743
|
// Update HeaterCooler state dynamically based on power and mode
|
|
@@ -636,7 +751,7 @@ export class AirConditioner {
|
|
|
636
751
|
service.updateCharacteristic(this.Characteristic.On, this.isOn && this.lastActiveMode === mode);
|
|
637
752
|
}
|
|
638
753
|
for (const [fanSpeed, service] of this.fanOutlets.entries()) {
|
|
639
|
-
service.updateCharacteristic(this.Characteristic.On, this.isOn && this.
|
|
754
|
+
service.updateCharacteristic(this.Characteristic.On, this.isOn && this.lastActiveFanSpeedMode === fanSpeed);
|
|
640
755
|
}
|
|
641
756
|
} else if (message.domainType === 'cloud.smarthq.domain.indoor.ambient') {
|
|
642
757
|
if (state.celsiusConverted !== undefined) {
|