homebridge-smarthq-client 1.1.2 → 1.2.0

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 CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.2.0](https://github.com/ceb400/homebridge-smarthq-client/releases/tag/v1.2.0) (2026-07-01)
6
+ - Added initial support for air conditioner
7
+ - minor bug fixes to correct invalid name error
8
+
9
+ ## What's Changed
10
+
5
11
  ## [1.1.1](https://github.com/ceb400/homebridge-smarthq-client/releases/tag/v1.1.1) (2026-04-25)
6
12
 
7
13
  ## What's Changed
package/Readme.md CHANGED
@@ -5,6 +5,7 @@
5
5
  A homebridge plugin for GE appliances using the SmartHQ API s (Identity and Access Management API, Digital Twin API) from npm pkg 'ge-smarthq'. The following devices are implemented:
6
6
  * refrigerator
7
7
  * dishwasher
8
+ * air conditioner
8
9
  * Other devices will be discovered and service information could be written to the log to assist in adding support for more devices.
9
10
 
10
11
  The refrigerator services include controls for:
@@ -28,6 +29,11 @@ The dishwasher services include controls for:
28
29
  * Wash zones
29
30
  * Options for steam, bottlewash, silverware, sabbath mode, controls lock
30
31
 
32
+ The air conditioner services include controls for:
33
+ * AC temperature
34
+ * AC fan speed
35
+ * AC modes (Cool, ECO, Dry, Fan Only)
36
+
31
37
 
32
38
 
33
39
  ## Installation
@@ -0,0 +1,37 @@
1
+ import { CharacteristicValue, PlatformAccessory, Service, Characteristic } from 'homebridge';
2
+ import { DeviceService } from 'ge-smarthq';
3
+ import { SmartHqPlatform } from '../platform.js';
4
+ export declare class AirConditioner {
5
+ private readonly platform;
6
+ private readonly accessory;
7
+ readonly deviceServices: DeviceService[];
8
+ readonly deviceId: string;
9
+ private targetCelsius;
10
+ private targetMode;
11
+ private targetFanSpeed;
12
+ private isOn;
13
+ private client;
14
+ Service: typeof Service;
15
+ Characteristic: typeof Characteristic;
16
+ private api;
17
+ private readonly modeToHK;
18
+ private hkToMode;
19
+ private acThermostat;
20
+ private acFan;
21
+ private modeSwitches;
22
+ constructor(platform: SmartHqPlatform, accessory: PlatformAccessory, deviceServices: DeviceService[], deviceId: string);
23
+ private updateModeSwitches;
24
+ private fanSpeedToPercent;
25
+ private percentToFanSpeed;
26
+ private sendThermostatCommand;
27
+ private findService;
28
+ getCurrentHeatingCoolingState(): Promise<number>;
29
+ getTargetHeatingCoolingState(): number;
30
+ setTargetHeatingCoolingState(value: CharacteristicValue): Promise<void>;
31
+ getCurrentTemperature(): Promise<number>;
32
+ getTargetTemperature(): number;
33
+ setTargetTemperature(value: CharacteristicValue): Promise<void>;
34
+ handleTemperatureDisplayUnitsGet(): number;
35
+ handleTemperatureDisplayUnitsSet(value: CharacteristicValue): void;
36
+ setupWebSocket(): Promise<void>;
37
+ }
@@ -0,0 +1,377 @@
1
+ import { SmartHQClient } from 'ge-smarthq';
2
+ export class AirConditioner {
3
+ platform;
4
+ accessory;
5
+ deviceServices;
6
+ deviceId;
7
+ targetCelsius = 22.22;
8
+ targetMode = 'cloud.smarthq.type.thermostatmode.cool';
9
+ targetFanSpeed = 'cloud.smarthq.type.fanspeed.auto';
10
+ isOn = false;
11
+ client;
12
+ Service;
13
+ Characteristic;
14
+ api;
15
+ modeToHK = {};
16
+ hkToMode = {};
17
+ // Promoted to class properties so handlers outside constructor can access them
18
+ acThermostat;
19
+ acFan;
20
+ // Mode switch service references for mutual exclusion updates
21
+ modeSwitches = {};
22
+ constructor(platform, accessory, deviceServices, deviceId) {
23
+ this.platform = platform;
24
+ this.accessory = accessory;
25
+ this.deviceServices = deviceServices;
26
+ this.deviceId = deviceId;
27
+ this.api = platform.api;
28
+ this.Service = this.api.hap.Service;
29
+ this.Characteristic = this.api.hap.Characteristic;
30
+ this.client = new SmartHQClient({
31
+ clientId: platform.config.clientId,
32
+ clientSecret: platform.config.clientSecret,
33
+ redirectUri: platform.config.redirectUri,
34
+ debug: platform.config.debugLogging || false,
35
+ });
36
+ const HK = this.Characteristic.TargetHeatingCoolingState;
37
+ this.modeToHK = {
38
+ 'cloud.smarthq.type.thermostatmode.cool': HK.COOL,
39
+ 'cloud.smarthq.type.thermostatmode.cool.energysaver': HK.AUTO,
40
+ 'cloud.smarthq.type.thermostatmode.fanonly': HK.OFF,
41
+ 'cloud.smarthq.type.thermostatmode.dry': HK.COOL,
42
+ };
43
+ this.hkToMode = {
44
+ [HK.OFF]: 'cloud.smarthq.type.thermostatmode.fanonly',
45
+ [HK.COOL]: 'cloud.smarthq.type.thermostatmode.cool',
46
+ [HK.HEAT]: 'cloud.smarthq.type.thermostatmode.cool',
47
+ [HK.AUTO]: 'cloud.smarthq.type.thermostatmode.cool.energysaver',
48
+ };
49
+ // Seed initial state from service data at startup
50
+ const thermoSvc = this.findService('cloud.smarthq.service.thermostat.v1', 'cloud.smarthq.domain.thermostat');
51
+ if (thermoSvc?.state) {
52
+ if (thermoSvc.state.coolCelsiusConverted != null)
53
+ this.targetCelsius = thermoSvc.state.coolCelsiusConverted;
54
+ if (thermoSvc.state.mode != null)
55
+ this.targetMode = thermoSvc.state.mode;
56
+ if (thermoSvc.state.fanSpeed != null)
57
+ this.targetFanSpeed = thermoSvc.state.fanSpeed;
58
+ if (thermoSvc.state.on != null)
59
+ this.isOn = thermoSvc.state.on;
60
+ }
61
+ // authenticate() before connect() so both sendCommand and WebSocket work
62
+ this.setupWebSocket();
63
+ // WebSocket push updates
64
+ this.client.on('service_update', (message) => {
65
+ if (message.domainType === 'cloud.smarthq.domain.thermostat') {
66
+ if (message.state?.on !== undefined) {
67
+ this.isOn = message.state.on;
68
+ this.acFan.getCharacteristic(this.Characteristic.On).updateValue(this.isOn);
69
+ }
70
+ if (message.state?.coolCelsiusConverted !== undefined) {
71
+ this.targetCelsius = message.state.coolCelsiusConverted;
72
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetTemperature).updateValue(this.targetCelsius);
73
+ }
74
+ if (message.state?.mode !== undefined) {
75
+ this.targetMode = message.state.mode;
76
+ const hkMode = this.modeToHK[this.targetMode] ?? HK.COOL;
77
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetHeatingCoolingState).updateValue(hkMode);
78
+ this.updateModeSwitches(this.targetMode);
79
+ }
80
+ if (message.state?.fanSpeed !== undefined) {
81
+ this.targetFanSpeed = message.state.fanSpeed;
82
+ this.acFan.getCharacteristic(this.Characteristic.RotationSpeed).updateValue(this.fanSpeedToPercent(this.targetFanSpeed));
83
+ }
84
+ }
85
+ if (message.domainType === 'cloud.smarthq.domain.state.compressor') {
86
+ const running = message.state?.on;
87
+ const currentState = running
88
+ ? this.Characteristic.CurrentHeatingCoolingState.COOL
89
+ : this.Characteristic.CurrentHeatingCoolingState.OFF;
90
+ this.acThermostat.getCharacteristic(this.Characteristic.CurrentHeatingCoolingState).updateValue(currentState);
91
+ }
92
+ });
93
+ // ── Accessory information ────────────────────────────────────────────────
94
+ this.accessory.getService(this.Service.AccessoryInformation)
95
+ .setCharacteristic(this.Characteristic.Manufacturer, 'GE')
96
+ .setCharacteristic(this.Characteristic.Model, accessory.context.device.model || 'AHTT08BC')
97
+ .setCharacteristic(this.Characteristic.SerialNumber, accessory.context.device.serial || 'Default-Serial');
98
+ // ── Thermostat service ───────────────────────────────────────────────────
99
+ const displayName = 'Air Conditioner';
100
+ this.acThermostat = this.accessory.getService(displayName)
101
+ || this.accessory.addService(this.Service.Thermostat, displayName, 'ac-thermo1');
102
+ this.acThermostat.setCharacteristic(this.Characteristic.Name, displayName);
103
+ this.acThermostat.addOptionalCharacteristic(this.Characteristic.ConfiguredName);
104
+ this.acThermostat.setCharacteristic(this.Characteristic.ConfiguredName, displayName);
105
+ this.acThermostat.getCharacteristic(this.Characteristic.CurrentHeatingCoolingState).setProps({
106
+ minValue: this.Characteristic.CurrentHeatingCoolingState.OFF,
107
+ maxValue: this.Characteristic.CurrentHeatingCoolingState.COOL,
108
+ validValues: [
109
+ this.Characteristic.CurrentHeatingCoolingState.OFF,
110
+ this.Characteristic.CurrentHeatingCoolingState.COOL,
111
+ ],
112
+ });
113
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetHeatingCoolingState).setProps({
114
+ minValue: this.Characteristic.TargetHeatingCoolingState.OFF,
115
+ maxValue: this.Characteristic.TargetHeatingCoolingState.AUTO,
116
+ validValues: [
117
+ this.Characteristic.TargetHeatingCoolingState.OFF,
118
+ this.Characteristic.TargetHeatingCoolingState.COOL,
119
+ this.Characteristic.TargetHeatingCoolingState.AUTO,
120
+ ],
121
+ });
122
+ this.acThermostat.getCharacteristic(this.Characteristic.CurrentTemperature).setProps({
123
+ minValue: -20,
124
+ maxValue: 50,
125
+ minStep: 0.1,
126
+ });
127
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetTemperature).setProps({
128
+ minValue: 17.78,
129
+ maxValue: 30.0,
130
+ minStep: 0.5,
131
+ });
132
+ this.acThermostat.getCharacteristic(this.Characteristic.CurrentHeatingCoolingState)
133
+ .onGet(this.getCurrentHeatingCoolingState.bind(this));
134
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetHeatingCoolingState)
135
+ .onGet(this.getTargetHeatingCoolingState.bind(this))
136
+ .onSet(this.setTargetHeatingCoolingState.bind(this));
137
+ this.acThermostat.getCharacteristic(this.Characteristic.CurrentTemperature)
138
+ .onGet(this.getCurrentTemperature.bind(this));
139
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetTemperature)
140
+ .onGet(this.getTargetTemperature.bind(this))
141
+ .onSet(this.setTargetTemperature.bind(this));
142
+ this.acThermostat.getCharacteristic(this.Characteristic.TemperatureDisplayUnits)
143
+ .onGet(this.handleTemperatureDisplayUnitsGet.bind(this))
144
+ .onSet(this.handleTemperatureDisplayUnitsSet.bind(this));
145
+ // ── Fan service ───────────────────────────────────────────────────────────
146
+ const fanDisplayName = 'AC Fan Speed';
147
+ this.acFan = this.accessory.getService(fanDisplayName)
148
+ || this.accessory.addService(this.Service.Fan, fanDisplayName, 'ac-fan1');
149
+ this.acFan.setCharacteristic(this.Characteristic.Name, fanDisplayName);
150
+ this.acFan.addOptionalCharacteristic(this.Characteristic.ConfiguredName);
151
+ this.acFan.setCharacteristic(this.Characteristic.ConfiguredName, fanDisplayName);
152
+ this.acFan.getCharacteristic(this.Characteristic.On)
153
+ .onGet(() => this.isOn)
154
+ .onSet(async (value) => {
155
+ await this.setTargetHeatingCoolingState(value
156
+ ? this.Characteristic.TargetHeatingCoolingState.COOL
157
+ : this.Characteristic.TargetHeatingCoolingState.OFF);
158
+ });
159
+ this.acFan.getCharacteristic(this.Characteristic.RotationSpeed)
160
+ .setProps({ minValue: 0, maxValue: 100, minStep: 25 })
161
+ .onGet(() => this.fanSpeedToPercent(this.targetFanSpeed))
162
+ .onSet(async (value) => {
163
+ this.targetFanSpeed = this.percentToFanSpeed(value);
164
+ await this.sendThermostatCommand(this.targetMode, this.targetCelsius, this.targetFanSpeed, this.isOn);
165
+ });
166
+ // ── Mode switches ─────────────────────────────────────────────────────────
167
+ const modes = [
168
+ { name: 'Cool', mode: 'cloud.smarthq.type.thermostatmode.cool', subtype: 'ac-mode-cool' },
169
+ { name: 'Eco', mode: 'cloud.smarthq.type.thermostatmode.cool.energysaver', subtype: 'ac-mode-eco' },
170
+ { name: 'Dry', mode: 'cloud.smarthq.type.thermostatmode.dry', subtype: 'ac-mode-dry' },
171
+ { name: 'Fan Only', mode: 'cloud.smarthq.type.thermostatmode.fanonly', subtype: 'ac-mode-fanonly' },
172
+ ];
173
+ for (const { name, mode, subtype } of modes) {
174
+ const svc = this.accessory.getService(name)
175
+ || this.accessory.addService(this.Service.Switch, name, subtype);
176
+ svc.setCharacteristic(this.Characteristic.Name, name);
177
+ svc.addOptionalCharacteristic(this.Characteristic.ConfiguredName);
178
+ svc.setCharacteristic(this.Characteristic.ConfiguredName, name);
179
+ svc.getCharacteristic(this.Characteristic.On)
180
+ .onGet(() => this.isOn && this.targetMode === mode)
181
+ .onSet(async (value) => {
182
+ if (value) {
183
+ // Switching to this mode turns the AC on and deactivates others
184
+ this.isOn = true;
185
+ this.targetMode = mode;
186
+ await this.sendThermostatCommand(mode, this.targetCelsius, this.targetFanSpeed, true);
187
+ this.updateModeSwitches(mode);
188
+ // Keep thermostat tile in sync
189
+ const hkMode = this.modeToHK[mode] ?? HK.COOL;
190
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetHeatingCoolingState).updateValue(hkMode);
191
+ this.acFan.getCharacteristic(this.Characteristic.On).updateValue(true);
192
+ }
193
+ else {
194
+ // Turning off a mode switch turns the AC off entirely
195
+ this.isOn = false;
196
+ await this.sendThermostatCommand(this.targetMode, this.targetCelsius, this.targetFanSpeed, false);
197
+ this.updateModeSwitches('');
198
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetHeatingCoolingState)
199
+ .updateValue(this.Characteristic.TargetHeatingCoolingState.OFF);
200
+ this.acFan.getCharacteristic(this.Characteristic.On).updateValue(false);
201
+ }
202
+ });
203
+ this.modeSwitches[mode] = svc;
204
+ }
205
+ // Set initial switch states
206
+ this.updateModeSwitches(this.isOn ? this.targetMode : '');
207
+ // ── Polling (every 30 s) ──────────────────────────────────────────────────
208
+ setInterval(() => {
209
+ this.getCurrentTemperature().then(temp => {
210
+ this.acThermostat.getCharacteristic(this.Characteristic.CurrentTemperature).updateValue(temp);
211
+ });
212
+ this.getCurrentHeatingCoolingState().then(state => {
213
+ const running = state === this.Characteristic.CurrentHeatingCoolingState.COOL;
214
+ this.acThermostat.getCharacteristic(this.Characteristic.CurrentHeatingCoolingState).updateValue(state);
215
+ this.acFan.getCharacteristic(this.Characteristic.On).updateValue(running);
216
+ // Keep TargetHeatingCoolingState in sync with actual on/off state
217
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetHeatingCoolingState).updateValue(this.isOn
218
+ ? (this.modeToHK[this.targetMode] ?? this.Characteristic.TargetHeatingCoolingState.COOL)
219
+ : this.Characteristic.TargetHeatingCoolingState.OFF);
220
+ });
221
+ }, 30000);
222
+ }
223
+ // ── Mode switch mutual exclusion ───────────────────────────────────────────
224
+ updateModeSwitches(activeMode) {
225
+ for (const [mode, svc] of Object.entries(this.modeSwitches)) {
226
+ svc.getCharacteristic(this.Characteristic.On).updateValue(this.isOn && mode === activeMode);
227
+ }
228
+ }
229
+ // ── Fan speed helpers ──────────────────────────────────────────────────────
230
+ fanSpeedToPercent(fanSpeed) {
231
+ switch (fanSpeed) {
232
+ case 'cloud.smarthq.type.fanspeed.high': return 100;
233
+ case 'cloud.smarthq.type.fanspeed.medium': return 50;
234
+ case 'cloud.smarthq.type.fanspeed.low': return 25;
235
+ default: return 0;
236
+ }
237
+ }
238
+ percentToFanSpeed(percent) {
239
+ if (percent >= 75)
240
+ return 'cloud.smarthq.type.fanspeed.high';
241
+ if (percent >= 40)
242
+ return 'cloud.smarthq.type.fanspeed.medium';
243
+ if (percent >= 15)
244
+ return 'cloud.smarthq.type.fanspeed.low';
245
+ return 'cloud.smarthq.type.fanspeed.auto';
246
+ }
247
+ // ── Shared command helper ──────────────────────────────────────────────────
248
+ async sendThermostatCommand(mode, celsius, fanSpeed, on) {
249
+ const svc = this.findService('cloud.smarthq.service.thermostat.v1', 'cloud.smarthq.domain.thermostat');
250
+ if (!svc)
251
+ return;
252
+ const command = {
253
+ commandType: 'cloud.smarthq.command.thermostat.v1.set',
254
+ on,
255
+ };
256
+ // Only send mode and fanSpeed when turning on
257
+ if (on) {
258
+ command.mode = mode;
259
+ // Dry mode doesn't accept fanSpeed
260
+ const isDry = mode === 'cloud.smarthq.type.thermostatmode.dry';
261
+ if (!isDry) {
262
+ command.fanSpeed = fanSpeed;
263
+ }
264
+ // Only send coolFahrenheit for cool modes
265
+ const needsCoolTemp = mode === 'cloud.smarthq.type.thermostatmode.cool'
266
+ || mode === 'cloud.smarthq.type.thermostatmode.cool.energysaver';
267
+ if (needsCoolTemp) {
268
+ command.coolFahrenheit = Math.round(celsius * 9 / 5 + 32);
269
+ }
270
+ }
271
+ const cmdBody = {
272
+ command,
273
+ kind: 'service#command',
274
+ deviceId: this.deviceId,
275
+ serviceDeviceType: 'cloud.smarthq.device.airconditioner',
276
+ serviceType: 'cloud.smarthq.service.thermostat.v1',
277
+ domainType: 'cloud.smarthq.domain.thermostat',
278
+ };
279
+ try {
280
+ await this.client.sendCommand(cmdBody);
281
+ }
282
+ catch (error) {
283
+ // handleApiError in ge-smarthq is async but callers don't await it,
284
+ // so the thrown value is a Promise<Error> — await it to get the real message.
285
+ const resolved = error instanceof Promise ? await error : error;
286
+ const msg = resolved instanceof Error ? resolved.message : JSON.stringify(resolved);
287
+ this.client.debug('Error sending AC thermostat command: ' + msg);
288
+ }
289
+ }
290
+ // ── Service helpers ────────────────────────────────────────────────────────
291
+ findService(serviceType, domainType) {
292
+ return this.deviceServices.find(s => s.serviceType === serviceType && s.domainType === domainType);
293
+ }
294
+ // ── Handlers ──────────────────────────────────────────────────────────────
295
+ async getCurrentHeatingCoolingState() {
296
+ const svc = this.findService('cloud.smarthq.service.toggle', 'cloud.smarthq.domain.state.compressor');
297
+ if (!svc)
298
+ return this.Characteristic.CurrentHeatingCoolingState.OFF;
299
+ try {
300
+ const response = await this.client.getServiceDetails(this.deviceId, svc.serviceId);
301
+ const running = response?.state?.on ?? false;
302
+ this.isOn = running;
303
+ return running
304
+ ? this.Characteristic.CurrentHeatingCoolingState.COOL
305
+ : this.Characteristic.CurrentHeatingCoolingState.OFF;
306
+ }
307
+ catch (error) {
308
+ this.client.debug('Error getting AC compressor state: ' + error);
309
+ return this.Characteristic.CurrentHeatingCoolingState.OFF;
310
+ }
311
+ }
312
+ getTargetHeatingCoolingState() {
313
+ if (!this.isOn)
314
+ return this.Characteristic.TargetHeatingCoolingState.OFF;
315
+ return this.modeToHK[this.targetMode] ?? this.Characteristic.TargetHeatingCoolingState.COOL;
316
+ }
317
+ async setTargetHeatingCoolingState(value) {
318
+ const hkValue = value;
319
+ const HK = this.Characteristic.TargetHeatingCoolingState;
320
+ if (hkValue === HK.OFF) {
321
+ this.isOn = false;
322
+ await this.sendThermostatCommand(this.targetMode, this.targetCelsius, this.targetFanSpeed, false);
323
+ this.updateModeSwitches('');
324
+ // Explicitly update thermostat tile to OFF
325
+ this.acThermostat.getCharacteristic(this.Characteristic.TargetHeatingCoolingState).updateValue(HK.OFF);
326
+ return;
327
+ }
328
+ this.isOn = true;
329
+ const newMode = this.hkToMode[hkValue] ?? 'cloud.smarthq.type.thermostatmode.cool';
330
+ this.targetMode = newMode;
331
+ await this.sendThermostatCommand(newMode, this.targetCelsius, this.targetFanSpeed, true);
332
+ this.updateModeSwitches(newMode);
333
+ }
334
+ async getCurrentTemperature() {
335
+ const svc = this.findService('cloud.smarthq.service.temperature', 'cloud.smarthq.domain.indoor.ambient');
336
+ if (!svc)
337
+ return this.targetCelsius;
338
+ try {
339
+ const response = await this.client.getServiceDetails(this.deviceId, svc.serviceId);
340
+ if (response?.state?.celsiusConverted == null)
341
+ return this.targetCelsius;
342
+ return Number(response.state.celsiusConverted);
343
+ }
344
+ catch (error) {
345
+ this.client.debug('Error getting AC current temperature: ' + error);
346
+ return this.targetCelsius;
347
+ }
348
+ }
349
+ getTargetTemperature() {
350
+ return this.targetCelsius;
351
+ }
352
+ // Only send command when AC is already on — don't turn it on just by moving the temp slider
353
+ async setTargetTemperature(value) {
354
+ this.targetCelsius = value;
355
+ if (this.isOn) {
356
+ await this.sendThermostatCommand(this.targetMode, this.targetCelsius, this.targetFanSpeed, true);
357
+ }
358
+ }
359
+ handleTemperatureDisplayUnitsGet() {
360
+ return this.Characteristic.TemperatureDisplayUnits.FAHRENHEIT;
361
+ }
362
+ handleTemperatureDisplayUnitsSet(value) {
363
+ this.client.debug('AC Temperature Display Units set to: ' + value);
364
+ }
365
+ // authenticate() before connect() so token is valid for both
366
+ // sendCommand HTTP calls and the WebSocket connection
367
+ async setupWebSocket() {
368
+ try {
369
+ await this.client.authenticate();
370
+ await this.client.connect();
371
+ }
372
+ catch (error) {
373
+ this.client.debug('Failed to connect to SmartHQ WebSocket for AC: ' + error);
374
+ }
375
+ }
376
+ }
377
+ //# sourceMappingURL=airConditioner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"airConditioner.js","sourceRoot":"","sources":["../../src/airConditioner/airConditioner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { PlatformAccessory } from 'homebridge';
2
+ import { SmartHqPlatform } from './platform.js';
3
+ import { DeviceService } from 'ge-smarthq';
4
+ export declare function setupAirConditionerServices(this: SmartHqPlatform, accessory: PlatformAccessory, deviceServices: DeviceService[], deviceId: string): void;
@@ -0,0 +1,5 @@
1
+ import { AirConditioner } from './airConditioner/airConditioner.js';
2
+ export function setupAirConditionerServices(accessory, deviceServices, deviceId) {
3
+ new AirConditioner(this, accessory, deviceServices, deviceId);
4
+ }
5
+ //# sourceMappingURL=airConditionerServices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"airConditionerServices.js","sourceRoot":"","sources":["../src/airConditionerServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAKpE,MAAM,UAAU,2BAA2B,CAAwB,SAA4B,EAAE,cAA+B,EAAE,QAAgB;IAChJ,IAAI,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC"}
@@ -112,7 +112,11 @@ export class ControlLock {
112
112
  }
113
113
  }
114
114
  catch (error) {
115
- this.client.debug("Error sending setcontrolsLock command: " + error);
115
+ // handleApiError in ge-smarthq is async but callers don't await it,
116
+ // so the thrown value is a Promise<Error> — await it to get the real message.
117
+ const resolved = error instanceof Promise ? await error : error;
118
+ const msg = resolved instanceof Error ? resolved.message : JSON.stringify(resolved);
119
+ this.client.debug("Error sending setcontrolsLock command: " + msg);
116
120
  }
117
121
  }
118
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"controlLock.js","sourceRoot":"","sources":["../../src/dishwasher/controlLock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controlLock.js","sourceRoot":"","sources":["../../src/dishwasher/controlLock.ts"],"names":[],"mappings":"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"}
@@ -177,9 +177,9 @@ export class Dishwasher {
177
177
  //=====================================================================================
178
178
  // create a new Lightbulb service for the Cycle % Done
179
179
  //=====================================================================================
180
- displayName = "Cycle % Done";
180
+ displayName = "Cycle Pct Done";
181
181
  const cyclePct = this.accessory.getService(displayName) ||
182
- this.accessory.addService(this.Service.Lightbulb, displayName, "cycle-done-2");
182
+ this.accessory.addService(this.Service.Lightbulb, displayName, "cycle-done-3");
183
183
  cyclePct.setCharacteristic(this.Characteristic.Name, displayName);
184
184
  cyclePct.addOptionalCharacteristic(this.Characteristic.ConfiguredName);
185
185
  cyclePct.setCharacteristic(this.Characteristic.ConfiguredName, displayName);
@@ -742,6 +742,9 @@ export class Dishwasher {
742
742
  }
743
743
  setupGroupService(serviceType, displayName, serviceIdSuffix, accessory) {
744
744
  let service;
745
+ if (displayName === "1") {
746
+ displayName = "1 Hour";
747
+ }
745
748
  this.client.debug(chalk.blue("Setting up " + serviceType + " for " + displayName));
746
749
  switch (serviceType) {
747
750
  case "Outlet":