homebridge-smarthq-client 1.2.5-debug.1 → 1.2.5-debug.10
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,25 @@ 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.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
172
|
+
this.sendCommand(cmdBody);
|
|
155
173
|
}
|
|
156
174
|
else {
|
|
157
175
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
@@ -161,14 +179,22 @@ export class AirConditioner {
|
|
|
161
179
|
for (const service of this.fanOutlets.values()) {
|
|
162
180
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
163
181
|
}
|
|
182
|
+
// 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.
|
|
183
|
+
const cmdBody = {
|
|
184
|
+
command: {
|
|
185
|
+
on: this.isOn,
|
|
186
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
187
|
+
},
|
|
188
|
+
kind: 'service#command',
|
|
189
|
+
deviceId: this.deviceId,
|
|
190
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
191
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
192
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
193
|
+
};
|
|
194
|
+
this.client.debug(chalk.yellow(`## Turning off AC:`));
|
|
195
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
196
|
+
this.sendCommand(cmdBody);
|
|
164
197
|
}
|
|
165
|
-
const cmdBody = {
|
|
166
|
-
command: {
|
|
167
|
-
on: this.isOn,
|
|
168
|
-
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
this.sendCommand(cmdBody);
|
|
172
198
|
});
|
|
173
199
|
this.acThermostat
|
|
174
200
|
.getCharacteristic(this.Characteristic.CurrentHeaterCoolerState)
|
|
@@ -197,12 +223,20 @@ export class AirConditioner {
|
|
|
197
223
|
// Clip celsius to hardware bounds to prevent API errors
|
|
198
224
|
const clippedCelsius = Math.max(this.coolCelsiusMin, Math.min(this.coolCelsiusMax, this.lastActiveCelsius));
|
|
199
225
|
const coolFahrenheit = Math.round(clippedCelsius * 1.8 + 32);
|
|
226
|
+
// Set temperature on the AC unit via API command
|
|
200
227
|
const cmdBody = {
|
|
201
228
|
command: {
|
|
202
229
|
coolFahrenheit: coolFahrenheit,
|
|
203
230
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
204
|
-
}
|
|
231
|
+
},
|
|
232
|
+
kind: 'service#command',
|
|
233
|
+
deviceId: this.deviceId,
|
|
234
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
235
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
236
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
205
237
|
};
|
|
238
|
+
this.client.debug(chalk.yellow('## Setting AC Temperature:'));
|
|
239
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
206
240
|
this.sendCommand(cmdBody);
|
|
207
241
|
});
|
|
208
242
|
this.acThermostat
|
|
@@ -259,8 +293,8 @@ export class AirConditioner {
|
|
|
259
293
|
this.acThermostat.updateCharacteristic(this.Characteristic.Active, 1);
|
|
260
294
|
const stateVal = mode === this.MODE_FANONLY ? 1 : 3;
|
|
261
295
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, stateVal);
|
|
262
|
-
for (const [
|
|
263
|
-
service.updateCharacteristic(this.Characteristic.On, this.
|
|
296
|
+
for (const [fanspeedMode, service] of this.fanOutlets.entries()) {
|
|
297
|
+
service.updateCharacteristic(this.Characteristic.On, this.lastActiveFanSpeedMode === fanspeedMode);
|
|
264
298
|
}
|
|
265
299
|
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed - force Fan Speed to Low
|
|
266
300
|
// Dry mode sets fan speed to Auto, which is valid. Only Fan Only mode needs to be adjusted.
|
|
@@ -272,27 +306,45 @@ export class AirConditioner {
|
|
|
272
306
|
mode: this.MODE_FANONLY,
|
|
273
307
|
fanSpeed: this.FAN_SPEED_LOW,
|
|
274
308
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
275
|
-
}
|
|
309
|
+
},
|
|
310
|
+
kind: 'service#command',
|
|
311
|
+
deviceId: this.deviceId,
|
|
312
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
313
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
314
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
276
315
|
};
|
|
277
316
|
break;
|
|
278
317
|
case this.MODE_DRY:
|
|
279
318
|
cmdBody = {
|
|
280
319
|
command: {
|
|
281
320
|
mode: this.MODE_DRY,
|
|
282
|
-
fanSpeed: this.FAN_SPEED_AUTO,
|
|
321
|
+
// fanSpeed: this.FAN_SPEED_AUTO, set to Auto by default for Dry mode, which is valid
|
|
283
322
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
284
|
-
}
|
|
323
|
+
},
|
|
324
|
+
kind: 'service#command',
|
|
325
|
+
deviceId: this.deviceId,
|
|
326
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
327
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
328
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
285
329
|
};
|
|
286
330
|
break;
|
|
287
331
|
// Default case handles Cool and Heat modes, which support all(?) fan speeds
|
|
288
332
|
default:
|
|
333
|
+
// Set mode on the AC unit via API command with special handling for Fan Only and Dry modes
|
|
289
334
|
cmdBody = {
|
|
290
335
|
command: {
|
|
291
336
|
mode: mode,
|
|
292
337
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
293
|
-
}
|
|
338
|
+
},
|
|
339
|
+
kind: 'service#command',
|
|
340
|
+
deviceId: this.deviceId,
|
|
341
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
342
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
343
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
294
344
|
};
|
|
295
345
|
}
|
|
346
|
+
this.client.debug(chalk.yellow('## Setting AC Mode:'));
|
|
347
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
296
348
|
this.sendCommand(cmdBody);
|
|
297
349
|
}
|
|
298
350
|
else {
|
|
@@ -309,9 +361,14 @@ export class AirConditioner {
|
|
|
309
361
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
310
362
|
const cmdBody = {
|
|
311
363
|
command: {
|
|
312
|
-
|
|
364
|
+
on: this.isOn,
|
|
313
365
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
314
|
-
}
|
|
366
|
+
},
|
|
367
|
+
kind: 'service#command',
|
|
368
|
+
deviceId: this.deviceId,
|
|
369
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
370
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
371
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
315
372
|
};
|
|
316
373
|
this.sendCommand(cmdBody);
|
|
317
374
|
}
|
|
@@ -328,16 +385,16 @@ export class AirConditioner {
|
|
|
328
385
|
.setCharacteristic(this.Characteristic.SerialNumber, this.parentAccessory.context.device.serial || 'Unknown');
|
|
329
386
|
// Clean up stale Fan Speed outlets from cache
|
|
330
387
|
const activeFanServiceUUIDs = new Set();
|
|
331
|
-
for (const
|
|
332
|
-
const [displayName] = this.getLastElementAndCapitalize(
|
|
388
|
+
for (const fanspeedMode of supportedFanSpeeds) {
|
|
389
|
+
const [displayName] = this.getLastElementAndCapitalize(fanspeedMode, '.');
|
|
333
390
|
const service = this.fanAccessory.getService(displayName) ||
|
|
334
|
-
this.fanAccessory.addService(this.Service.Outlet, displayName,
|
|
391
|
+
this.fanAccessory.addService(this.Service.Outlet, displayName, fanspeedMode);
|
|
335
392
|
if (!service.getCharacteristic(this.Characteristic.ConfiguredName)) {
|
|
336
393
|
service.addOptionalCharacteristic(this.Characteristic.ConfiguredName);
|
|
337
394
|
}
|
|
338
395
|
service.setCharacteristic(this.Characteristic.Name, displayName);
|
|
339
396
|
service.setCharacteristic(this.Characteristic.ConfiguredName, displayName);
|
|
340
|
-
activeFanServiceUUIDs.add(service.UUID + (
|
|
397
|
+
activeFanServiceUUIDs.add(service.UUID + (fanspeedMode || ''));
|
|
341
398
|
}
|
|
342
399
|
for (const service of [...this.fanAccessory.services]) {
|
|
343
400
|
if (service.UUID === this.Service.AccessoryInformation.UUID)
|
|
@@ -351,21 +408,25 @@ export class AirConditioner {
|
|
|
351
408
|
}
|
|
352
409
|
}
|
|
353
410
|
// Bind Fan Speed Outlets characteristics
|
|
354
|
-
for (const
|
|
355
|
-
const [displayName] = this.getLastElementAndCapitalize(
|
|
411
|
+
for (const fanspeedMode of supportedFanSpeeds) {
|
|
412
|
+
const [displayName] = this.getLastElementAndCapitalize(fanspeedMode, '.');
|
|
356
413
|
const service = this.fanAccessory.getService(displayName);
|
|
357
|
-
this.fanOutlets.set(
|
|
414
|
+
this.fanOutlets.set(fanspeedMode, service);
|
|
358
415
|
service
|
|
359
416
|
.getCharacteristic(this.Characteristic.On)
|
|
360
|
-
.onGet(() => this.isOn && this.
|
|
417
|
+
.onGet(() => this.isOn && this.lastActiveFanSpeedMode === fanspeedMode)
|
|
361
418
|
.onSet(async (value) => {
|
|
362
419
|
if (value) {
|
|
420
|
+
// If mode is Dry, then fan speed is automatically set to Auto and cannot be changed.
|
|
421
|
+
if (this.lastActiveMode === this.MODE_DRY) {
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
363
424
|
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed
|
|
364
425
|
if (this.lastActiveMode === this.MODE_FANONLY &&
|
|
365
|
-
|
|
426
|
+
fanspeedMode === this.FAN_SPEED_AUTO) {
|
|
366
427
|
setTimeout(() => {
|
|
367
428
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
368
|
-
const activeService = this.fanOutlets.get(this.
|
|
429
|
+
const activeService = this.fanOutlets.get(this.lastActiveFanSpeedMode);
|
|
369
430
|
if (activeService) {
|
|
370
431
|
activeService.updateCharacteristic(this.Characteristic.On, this.isOn);
|
|
371
432
|
}
|
|
@@ -373,9 +434,9 @@ export class AirConditioner {
|
|
|
373
434
|
return;
|
|
374
435
|
}
|
|
375
436
|
this.isOn = true;
|
|
376
|
-
this.
|
|
437
|
+
this.lastActiveFanSpeedMode = fanspeedMode;
|
|
377
438
|
for (const [fanSpeed, service] of this.fanOutlets.entries()) {
|
|
378
|
-
if (fanSpeed !==
|
|
439
|
+
if (fanSpeed !== fanspeedMode) {
|
|
379
440
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
380
441
|
}
|
|
381
442
|
}
|
|
@@ -387,15 +448,25 @@ export class AirConditioner {
|
|
|
387
448
|
}
|
|
388
449
|
const cmdBody = {
|
|
389
450
|
command: {
|
|
390
|
-
|
|
451
|
+
mode: this.lastActiveMode,
|
|
452
|
+
fanspeed: this.lastActiveFanSpeedMode,
|
|
391
453
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
392
|
-
}
|
|
454
|
+
},
|
|
455
|
+
kind: 'service#command',
|
|
456
|
+
deviceId: this.deviceId,
|
|
457
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
458
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
459
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
393
460
|
};
|
|
461
|
+
this.client.debug(chalk.yellow('## Setting Fan Speed from mode:' + this.lastActiveMode));
|
|
462
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
394
463
|
this.sendCommand(cmdBody);
|
|
395
464
|
}
|
|
396
465
|
else {
|
|
397
466
|
// Toggling active fan speed OFF powers down system
|
|
398
|
-
|
|
467
|
+
// note: Fan Speed OFF is not a supported state for the AC unit, so we treat it as a power down command
|
|
468
|
+
// note: don't think the else block is ever reached
|
|
469
|
+
if (this.lastActiveFanSpeedMode === fanspeedMode) {
|
|
399
470
|
this.isOn = false;
|
|
400
471
|
for (const service of this.modeOutlets.values()) {
|
|
401
472
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
@@ -407,9 +478,14 @@ export class AirConditioner {
|
|
|
407
478
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
408
479
|
const cmdBody = {
|
|
409
480
|
command: {
|
|
410
|
-
|
|
481
|
+
on: this.isOn,
|
|
411
482
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
412
|
-
}
|
|
483
|
+
},
|
|
484
|
+
kind: 'service#command',
|
|
485
|
+
deviceId: this.deviceId,
|
|
486
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
487
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
488
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
413
489
|
};
|
|
414
490
|
this.sendCommand(cmdBody);
|
|
415
491
|
}
|
|
@@ -423,75 +499,95 @@ export class AirConditioner {
|
|
|
423
499
|
// ---------------------------
|
|
424
500
|
// API COMMAND SENDER
|
|
425
501
|
// ---------------------------
|
|
426
|
-
sendCommand(cmdBody) {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
this.executeSendCommand(cmdBody);
|
|
433
|
-
}, 150);
|
|
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
|
-
});
|
|
502
|
+
async sendCommand(cmdBody) {
|
|
503
|
+
try {
|
|
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 setActive command");
|
|
507
|
+
return false;
|
|
486
508
|
}
|
|
487
|
-
|
|
488
|
-
this.
|
|
509
|
+
else {
|
|
510
|
+
this.client.debug("=======================Response from set 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,31 @@ 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
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
218
|
+
|
|
219
|
+
this.sendCommand(cmdBody);
|
|
220
|
+
|
|
197
221
|
} else {
|
|
198
222
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
199
223
|
for (const service of this.modeOutlets.values()) {
|
|
@@ -202,15 +226,28 @@ export class AirConditioner {
|
|
|
202
226
|
for (const service of this.fanOutlets.values()) {
|
|
203
227
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
204
228
|
}
|
|
229
|
+
|
|
230
|
+
// 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.
|
|
231
|
+
|
|
232
|
+
const cmdBody = {
|
|
233
|
+
command: {
|
|
234
|
+
on: this.isOn,
|
|
235
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
236
|
+
},
|
|
237
|
+
kind: 'service#command',
|
|
238
|
+
deviceId: this.deviceId,
|
|
239
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
240
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
241
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
this.client.debug(chalk.yellow(`## Turning off AC:`));
|
|
245
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
246
|
+
|
|
247
|
+
this.sendCommand(cmdBody);
|
|
205
248
|
}
|
|
206
|
-
const cmdBody = {
|
|
207
|
-
command: {
|
|
208
|
-
on: this.isOn,
|
|
209
|
-
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
249
|
|
|
213
|
-
|
|
250
|
+
|
|
214
251
|
});
|
|
215
252
|
|
|
216
253
|
this.acThermostat
|
|
@@ -246,12 +283,24 @@ export class AirConditioner {
|
|
|
246
283
|
);
|
|
247
284
|
const coolFahrenheit = Math.round(clippedCelsius * 1.8 + 32);
|
|
248
285
|
|
|
286
|
+
|
|
287
|
+
// Set temperature on the AC unit via API command
|
|
288
|
+
|
|
249
289
|
const cmdBody = {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
290
|
+
command: {
|
|
291
|
+
coolFahrenheit: coolFahrenheit,
|
|
292
|
+
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
293
|
+
},
|
|
294
|
+
kind: 'service#command',
|
|
295
|
+
deviceId: this.deviceId,
|
|
296
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
297
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
298
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
this.client.debug(chalk.yellow('## Setting AC Temperature:'));
|
|
302
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
303
|
+
|
|
255
304
|
this.sendCommand(cmdBody);
|
|
256
305
|
});
|
|
257
306
|
|
|
@@ -326,13 +375,15 @@ export class AirConditioner {
|
|
|
326
375
|
const stateVal = mode === this.MODE_FANONLY ? 1 : 3;
|
|
327
376
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, stateVal);
|
|
328
377
|
|
|
329
|
-
for (const [
|
|
330
|
-
service.updateCharacteristic(this.Characteristic.On, this.
|
|
378
|
+
for (const [fanspeedMode, service] of this.fanOutlets.entries()) {
|
|
379
|
+
service.updateCharacteristic(this.Characteristic.On, this.lastActiveFanSpeedMode === fanspeedMode);
|
|
331
380
|
}
|
|
332
381
|
|
|
333
382
|
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed - force Fan Speed to Low
|
|
334
383
|
// Dry mode sets fan speed to Auto, which is valid. Only Fan Only mode needs to be adjusted.
|
|
335
|
-
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
let cmdBody: SendCommandRequest;
|
|
336
387
|
switch (mode) {
|
|
337
388
|
case this.MODE_FANONLY:
|
|
338
389
|
cmdBody = {
|
|
@@ -340,28 +391,49 @@ export class AirConditioner {
|
|
|
340
391
|
mode: this.MODE_FANONLY,
|
|
341
392
|
fanSpeed: this.FAN_SPEED_LOW,
|
|
342
393
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
343
|
-
}
|
|
394
|
+
},
|
|
395
|
+
kind: 'service#command',
|
|
396
|
+
deviceId: this.deviceId,
|
|
397
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
398
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
399
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
344
400
|
};
|
|
345
401
|
break;
|
|
346
402
|
case this.MODE_DRY:
|
|
347
403
|
cmdBody = {
|
|
348
404
|
command: {
|
|
349
405
|
mode: this.MODE_DRY,
|
|
350
|
-
|
|
406
|
+
// fanSpeed: this.FAN_SPEED_AUTO, set to Auto by default for Dry mode, which is valid
|
|
351
407
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
352
|
-
}
|
|
353
|
-
|
|
408
|
+
},
|
|
409
|
+
kind: 'service#command',
|
|
410
|
+
deviceId: this.deviceId,
|
|
411
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
412
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
413
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
414
|
+
};
|
|
354
415
|
break;
|
|
355
416
|
// Default case handles Cool and Heat modes, which support all(?) fan speeds
|
|
356
417
|
default:
|
|
418
|
+
// Set mode on the AC unit via API command with special handling for Fan Only and Dry modes
|
|
419
|
+
|
|
357
420
|
cmdBody = {
|
|
358
421
|
command: {
|
|
359
|
-
mode:
|
|
422
|
+
mode: mode,
|
|
360
423
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
361
|
-
}
|
|
424
|
+
},
|
|
425
|
+
kind: 'service#command',
|
|
426
|
+
deviceId: this.deviceId,
|
|
427
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
428
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
429
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
362
430
|
};
|
|
363
431
|
}
|
|
364
|
-
|
|
432
|
+
|
|
433
|
+
this.client.debug(chalk.yellow('## Setting AC Mode:'));
|
|
434
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
435
|
+
|
|
436
|
+
|
|
365
437
|
this.sendCommand(cmdBody);
|
|
366
438
|
} else {
|
|
367
439
|
// Toggling active mode OFF powers down system
|
|
@@ -378,11 +450,16 @@ export class AirConditioner {
|
|
|
378
450
|
this.acThermostat.updateCharacteristic(this.Characteristic.Active, 0);
|
|
379
451
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
380
452
|
|
|
381
|
-
const cmdBody:
|
|
453
|
+
const cmdBody: SendCommandRequest = {
|
|
382
454
|
command: {
|
|
383
|
-
|
|
455
|
+
on: this.isOn,
|
|
384
456
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
385
|
-
}
|
|
457
|
+
},
|
|
458
|
+
kind: 'service#command',
|
|
459
|
+
deviceId: this.deviceId,
|
|
460
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
461
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
462
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
386
463
|
};
|
|
387
464
|
|
|
388
465
|
this.sendCommand(cmdBody);
|
|
@@ -408,11 +485,11 @@ export class AirConditioner {
|
|
|
408
485
|
|
|
409
486
|
// Clean up stale Fan Speed outlets from cache
|
|
410
487
|
const activeFanServiceUUIDs = new Set<string>();
|
|
411
|
-
for (const
|
|
412
|
-
const [displayName] = this.getLastElementAndCapitalize(
|
|
488
|
+
for (const fanspeedMode of supportedFanSpeeds) {
|
|
489
|
+
const [displayName] = this.getLastElementAndCapitalize(fanspeedMode, '.');
|
|
413
490
|
const service =
|
|
414
491
|
this.fanAccessory.getService(displayName) ||
|
|
415
|
-
this.fanAccessory.addService(this.Service.Outlet, displayName,
|
|
492
|
+
this.fanAccessory.addService(this.Service.Outlet, displayName, fanspeedMode);
|
|
416
493
|
|
|
417
494
|
if (!service.getCharacteristic(this.Characteristic.ConfiguredName)) {
|
|
418
495
|
service.addOptionalCharacteristic(this.Characteristic.ConfiguredName);
|
|
@@ -420,7 +497,7 @@ export class AirConditioner {
|
|
|
420
497
|
service.setCharacteristic(this.Characteristic.Name, displayName);
|
|
421
498
|
service.setCharacteristic(this.Characteristic.ConfiguredName, displayName);
|
|
422
499
|
|
|
423
|
-
activeFanServiceUUIDs.add(service.UUID + (
|
|
500
|
+
activeFanServiceUUIDs.add(service.UUID + (fanspeedMode || ''));
|
|
424
501
|
}
|
|
425
502
|
|
|
426
503
|
for (const service of [...this.fanAccessory.services]) {
|
|
@@ -435,25 +512,30 @@ export class AirConditioner {
|
|
|
435
512
|
}
|
|
436
513
|
|
|
437
514
|
// Bind Fan Speed Outlets characteristics
|
|
438
|
-
for (const
|
|
439
|
-
const [displayName] = this.getLastElementAndCapitalize(
|
|
515
|
+
for (const fanspeedMode of supportedFanSpeeds) {
|
|
516
|
+
const [displayName] = this.getLastElementAndCapitalize(fanspeedMode, '.');
|
|
440
517
|
const service = this.fanAccessory.getService(displayName)!;
|
|
441
518
|
|
|
442
|
-
this.fanOutlets.set(
|
|
519
|
+
this.fanOutlets.set(fanspeedMode, service);
|
|
443
520
|
|
|
444
521
|
service
|
|
445
522
|
.getCharacteristic(this.Characteristic.On)
|
|
446
|
-
.onGet(() => this.isOn && this.
|
|
523
|
+
.onGet(() => this.isOn && this.lastActiveFanSpeedMode === fanspeedMode)
|
|
447
524
|
.onSet(async (value) => {
|
|
448
525
|
if (value) {
|
|
526
|
+
// If mode is Dry, then fan speed is automatically set to Auto and cannot be changed.
|
|
527
|
+
if (this.lastActiveMode === this.MODE_DRY) {
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
|
|
449
531
|
// Handle behavior constraint: Fan Only mode does not support Auto Fan Speed
|
|
450
532
|
if (
|
|
451
533
|
this.lastActiveMode === this.MODE_FANONLY &&
|
|
452
|
-
|
|
534
|
+
fanspeedMode === this.FAN_SPEED_AUTO
|
|
453
535
|
) {
|
|
454
536
|
setTimeout(() => {
|
|
455
537
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
456
|
-
const activeService = this.fanOutlets.get(this.
|
|
538
|
+
const activeService = this.fanOutlets.get(this.lastActiveFanSpeedMode);
|
|
457
539
|
if (activeService) {
|
|
458
540
|
activeService.updateCharacteristic(this.Characteristic.On, this.isOn);
|
|
459
541
|
}
|
|
@@ -462,10 +544,10 @@ export class AirConditioner {
|
|
|
462
544
|
}
|
|
463
545
|
|
|
464
546
|
this.isOn = true;
|
|
465
|
-
this.
|
|
547
|
+
this.lastActiveFanSpeedMode = fanspeedMode;
|
|
466
548
|
|
|
467
549
|
for (const [fanSpeed, service] of this.fanOutlets.entries()) {
|
|
468
|
-
if (fanSpeed !==
|
|
550
|
+
if (fanSpeed !== fanspeedMode) {
|
|
469
551
|
service.updateCharacteristic(this.Characteristic.On, false);
|
|
470
552
|
}
|
|
471
553
|
}
|
|
@@ -478,17 +560,28 @@ export class AirConditioner {
|
|
|
478
560
|
service.updateCharacteristic(this.Characteristic.On, this.lastActiveMode === modeKey);
|
|
479
561
|
}
|
|
480
562
|
|
|
481
|
-
const cmdBody:
|
|
563
|
+
const cmdBody: SendCommandRequest = {
|
|
482
564
|
command: {
|
|
483
|
-
|
|
565
|
+
mode: this.lastActiveMode,
|
|
566
|
+
fanspeed: this.lastActiveFanSpeedMode,
|
|
484
567
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
485
|
-
}
|
|
568
|
+
},
|
|
569
|
+
kind: 'service#command',
|
|
570
|
+
deviceId: this.deviceId,
|
|
571
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
572
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
573
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
486
574
|
};
|
|
487
575
|
|
|
576
|
+
this.client.debug(chalk.yellow('## Setting Fan Speed from mode:' + this.lastActiveMode));
|
|
577
|
+
this.client.debug(chalk.yellow(JSON.stringify(cmdBody, null, 2)));
|
|
578
|
+
|
|
488
579
|
this.sendCommand(cmdBody);
|
|
489
580
|
} else {
|
|
490
581
|
// Toggling active fan speed OFF powers down system
|
|
491
|
-
|
|
582
|
+
// note: Fan Speed OFF is not a supported state for the AC unit, so we treat it as a power down command
|
|
583
|
+
// note: don't think the else block is ever reached
|
|
584
|
+
if (this.lastActiveFanSpeedMode === fanspeedMode) {
|
|
492
585
|
this.isOn = false;
|
|
493
586
|
|
|
494
587
|
for (const service of this.modeOutlets.values()) {
|
|
@@ -500,11 +593,16 @@ export class AirConditioner {
|
|
|
500
593
|
|
|
501
594
|
this.acThermostat.updateCharacteristic(this.Characteristic.Active, 0);
|
|
502
595
|
this.acThermostat.updateCharacteristic(this.Characteristic.CurrentHeaterCoolerState, 0);
|
|
503
|
-
const cmdBody:
|
|
596
|
+
const cmdBody: SendCommandRequest = {
|
|
504
597
|
command: {
|
|
505
|
-
|
|
598
|
+
on: this.isOn,
|
|
506
599
|
commandType: 'cloud.smarthq.command.thermostat.v1.set',
|
|
507
|
-
}
|
|
600
|
+
},
|
|
601
|
+
kind: 'service#command',
|
|
602
|
+
deviceId: this.deviceId,
|
|
603
|
+
serviceDeviceType: 'cloud.smarthq.device.airconditioner',
|
|
604
|
+
serviceType: 'cloud.smarthq.service.thermostat.v1',
|
|
605
|
+
domainType: 'cloud.smarthq.domain.thermostat',
|
|
508
606
|
};
|
|
509
607
|
|
|
510
608
|
this.sendCommand(cmdBody);
|
|
@@ -521,18 +619,36 @@ export class AirConditioner {
|
|
|
521
619
|
// ---------------------------
|
|
522
620
|
// API COMMAND SENDER
|
|
523
621
|
// ---------------------------
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
622
|
+
async sendCommand(cmdBody: SendCommandRequest) {
|
|
623
|
+
|
|
624
|
+
try {
|
|
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 setActive command");
|
|
629
|
+
return false;
|
|
630
|
+
} else {
|
|
631
|
+
this.client.debug(
|
|
632
|
+
"=======================Response from set 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) {
|