trane-thermostat-api 1.0.1 → 1.0.2

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.
Files changed (38) hide show
  1. package/README.md +11 -20
  2. package/dist/client/auth.d.ts.map +1 -1
  3. package/dist/client/auth.js +27 -13
  4. package/dist/client/auth.js.map +1 -1
  5. package/dist/client/trane-client.d.ts +49 -0
  6. package/dist/client/trane-client.d.ts.map +1 -0
  7. package/dist/client/trane-client.js +332 -0
  8. package/dist/client/trane-client.js.map +1 -0
  9. package/dist/devices/trane-automation.d.ts +15 -0
  10. package/dist/devices/trane-automation.d.ts.map +1 -0
  11. package/dist/devices/trane-automation.js +39 -0
  12. package/dist/devices/trane-automation.js.map +1 -0
  13. package/dist/devices/trane-sensor.d.ts +34 -0
  14. package/dist/devices/trane-sensor.d.ts.map +1 -0
  15. package/dist/devices/trane-sensor.js +152 -0
  16. package/dist/devices/trane-sensor.js.map +1 -0
  17. package/dist/devices/trane-thermostat.d.ts +74 -0
  18. package/dist/devices/trane-thermostat.d.ts.map +1 -0
  19. package/dist/devices/trane-thermostat.js +457 -0
  20. package/dist/devices/trane-thermostat.js.map +1 -0
  21. package/dist/devices/trane-zone.d.ts +61 -0
  22. package/dist/devices/trane-zone.d.ts.map +1 -0
  23. package/dist/devices/trane-zone.js +370 -0
  24. package/dist/devices/trane-zone.js.map +1 -0
  25. package/dist/index.d.ts +5 -5
  26. package/dist/index.js +11 -11
  27. package/dist/types/api.d.ts +36 -6
  28. package/dist/types/api.d.ts.map +1 -1
  29. package/dist/types/constants.d.ts +2 -5
  30. package/dist/types/constants.d.ts.map +1 -1
  31. package/dist/types/constants.js +3 -6
  32. package/dist/types/constants.js.map +1 -1
  33. package/dist/types/interfaces.d.ts +18 -18
  34. package/dist/utils/errors.d.ts +13 -13
  35. package/dist/utils/errors.js +21 -21
  36. package/dist/utils/validation.d.ts +1 -1
  37. package/dist/utils/validation.js +3 -3
  38. package/package.json +2 -5
@@ -0,0 +1,457 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TraneThermostat = void 0;
4
+ const constants_1 = require("../types/constants");
5
+ const trane_zone_1 = require("./trane-zone");
6
+ const validation_1 = require("../utils/validation");
7
+ const errors_1 = require("../utils/errors");
8
+ class TraneThermostat {
9
+ constructor(client, rawData) {
10
+ this.zonesMap = new Map();
11
+ this.client = client;
12
+ this.data = this.transformApiData(rawData);
13
+ this.initializeZones();
14
+ }
15
+ transformApiData(rawData) {
16
+ const hasSettingsObject = rawData.settings && typeof rawData.settings === 'object' && !Array.isArray(rawData.settings);
17
+ const hasFeaturesObject = rawData.features && typeof rawData.features === 'object' && !Array.isArray(rawData.features);
18
+ if (hasSettingsObject || hasFeaturesObject) {
19
+ return rawData;
20
+ }
21
+ const features = Array.isArray(rawData.features) ? rawData.features : [];
22
+ const advancedInfo = features.find((f) => f.name === 'advanced_info');
23
+ const thermostatFeature = features.find((f) => f.name === 'thermostat');
24
+ const connectionFeature = features.find((f) => f.name === 'connection');
25
+ let model = 'Unknown';
26
+ let firmware = 'Unknown';
27
+ if (advancedInfo?.items) {
28
+ for (const item of advancedInfo.items) {
29
+ if (item.label === 'Model')
30
+ model = item.value;
31
+ if (item.label === 'Firmware Version')
32
+ firmware = item.value;
33
+ }
34
+ }
35
+ const transformed = {
36
+ id: rawData.id,
37
+ name: rawData.name,
38
+ model,
39
+ firmware,
40
+ is_online: connectionFeature?.is_connected ?? true,
41
+ features: {
42
+ has_zones: false,
43
+ has_outdoor_temperature: false,
44
+ has_relative_humidity: false,
45
+ has_variable_speed_compressor: false,
46
+ has_emergency_heat: false,
47
+ has_variable_fan_speed: false,
48
+ has_dehumidify_support: false,
49
+ has_humidify_support: false,
50
+ has_air_cleaner: false
51
+ },
52
+ settings: {},
53
+ zones: [],
54
+ _rawFeatures: features
55
+ };
56
+ if (thermostatFeature) {
57
+ transformed.settings = {
58
+ temperature_unit: thermostatFeature.scale === 'c' ? constants_1.TemperatureUnit.CELSIUS : constants_1.TemperatureUnit.FAHRENHEIT,
59
+ deadband: thermostatFeature.setpoint_delta || 3,
60
+ system_status: thermostatFeature.system_status || thermostatFeature.status
61
+ };
62
+ }
63
+ return transformed;
64
+ }
65
+ get id() {
66
+ return String(this.data.id);
67
+ }
68
+ get name() {
69
+ return this.data.name || `Thermostat ${this.id}`;
70
+ }
71
+ get model() {
72
+ return this.data.model || 'Unknown';
73
+ }
74
+ get firmware() {
75
+ return this.data.firmware || 'Unknown';
76
+ }
77
+ get isOnline() {
78
+ return this.data.is_online !== false;
79
+ }
80
+ get temperatureUnit() {
81
+ const unit = this.data.settings?.temperature_unit;
82
+ return unit === constants_1.TemperatureUnit.CELSIUS ? constants_1.TemperatureUnit.CELSIUS : constants_1.TemperatureUnit.FAHRENHEIT;
83
+ }
84
+ get deadband() {
85
+ return this.data.settings?.deadband || 3;
86
+ }
87
+ get capabilities() {
88
+ const features = this.data.features || {};
89
+ return {
90
+ model: this.model,
91
+ firmware: this.firmware,
92
+ hasZones: features.has_zones || false,
93
+ hasOutdoorTemperature: features.has_outdoor_temperature || false,
94
+ hasRelativeHumidity: features.has_relative_humidity || false,
95
+ hasVariableSpeedCompressor: features.has_variable_speed_compressor || false,
96
+ hasEmergencyHeat: features.has_emergency_heat || false,
97
+ hasVariableFanSpeed: features.has_variable_fan_speed || false,
98
+ hasDehumidifySupport: features.has_dehumidify_support || false,
99
+ hasHumidifySupport: features.has_humidify_support || false,
100
+ hasAirCleaner: features.has_air_cleaner || false
101
+ };
102
+ }
103
+ get hasZones() {
104
+ return this.capabilities.hasZones;
105
+ }
106
+ get hasOutdoorTemperature() {
107
+ return this.capabilities.hasOutdoorTemperature;
108
+ }
109
+ get hasRelativeHumidity() {
110
+ return this.capabilities.hasRelativeHumidity;
111
+ }
112
+ get hasVariableSpeedCompressor() {
113
+ return this.capabilities.hasVariableSpeedCompressor;
114
+ }
115
+ get hasEmergencyHeat() {
116
+ return this.capabilities.hasEmergencyHeat;
117
+ }
118
+ get hasVariableFanSpeed() {
119
+ return this.capabilities.hasVariableFanSpeed;
120
+ }
121
+ get hasDehumidifySupport() {
122
+ return this.capabilities.hasDehumidifySupport;
123
+ }
124
+ get hasHumidifySupport() {
125
+ return this.capabilities.hasHumidifySupport;
126
+ }
127
+ get hasAirCleaner() {
128
+ return this.capabilities.hasAirCleaner;
129
+ }
130
+ get systemStatus() {
131
+ const settings = this.data.settings || {};
132
+ const status = this.parseSystemStatus(settings.system_status);
133
+ return {
134
+ systemStatus: status,
135
+ isOnline: this.isOnline,
136
+ isBlowerActive: this.isBlowerActive,
137
+ isEmergencyHeatActive: this.isEmergencyHeatActive,
138
+ currentCompressorSpeed: this.currentCompressorSpeed,
139
+ relativeHumidity: this.relativeHumidity,
140
+ outdoorTemperature: this.outdoorTemperature
141
+ };
142
+ }
143
+ get isBlowerActive() {
144
+ const status = this.parseSystemStatus(this.data.settings?.system_status);
145
+ return !constants_1.BLOWER_OFF_STATUSES.has(status);
146
+ }
147
+ get isEmergencyHeatActive() {
148
+ if (!this.hasEmergencyHeat) {
149
+ return false;
150
+ }
151
+ return this.data.settings?.emergency_heat_active || false;
152
+ }
153
+ get currentCompressorSpeed() {
154
+ if (!this.hasVariableSpeedCompressor) {
155
+ return 0;
156
+ }
157
+ return this.data.settings?.current_compressor_speed || 0;
158
+ }
159
+ get relativeHumidity() {
160
+ if (!this.hasRelativeHumidity) {
161
+ return null;
162
+ }
163
+ const humidity = this.data.settings?.relative_humidity;
164
+ return typeof humidity === 'number' ? humidity : null;
165
+ }
166
+ get outdoorTemperature() {
167
+ if (!this.hasOutdoorTemperature) {
168
+ return null;
169
+ }
170
+ const temp = this.data.settings?.outdoor_temperature;
171
+ return typeof temp === 'number' ? temp : null;
172
+ }
173
+ get setpointLimits() {
174
+ const limits = validation_1.TemperatureValidator.getTemperatureLimits(this.temperatureUnit);
175
+ return {
176
+ heatMin: limits.min,
177
+ heatMax: limits.max,
178
+ coolMin: limits.min,
179
+ coolMax: limits.max
180
+ };
181
+ }
182
+ get availableFanModes() {
183
+ return this.extractAvailableValues() || ['auto', 'on', 'circulate'];
184
+ }
185
+ get currentFanMode() {
186
+ return this.data.settings?.fan_mode || null;
187
+ }
188
+ get fanSpeedLimits() {
189
+ if (!this.hasVariableFanSpeed) {
190
+ return { min: 0, max: 1 };
191
+ }
192
+ return {
193
+ min: 0.0,
194
+ max: 1.0
195
+ };
196
+ }
197
+ get currentFanSpeed() {
198
+ if (!this.hasVariableFanSpeed) {
199
+ return 0;
200
+ }
201
+ return this.data.settings?.fan_speed || 0;
202
+ }
203
+ async setFanMode(mode) {
204
+ const validMode = validation_1.GeneralValidator.validateRequiredString(mode, 'fanMode');
205
+ if (!this.availableFanModes.includes(validMode)) {
206
+ throw new errors_1.ValidationError(`Invalid fan mode '${validMode}'. Available modes: ${this.availableFanModes.join(', ')}`, 'fanMode', validMode);
207
+ }
208
+ const endpoint = await this.getThermostatEndpoint('fan_mode');
209
+ await this.client.post(endpoint, { fan_mode: validMode });
210
+ await this.delayedUpdate();
211
+ }
212
+ async setFanSpeed(speed) {
213
+ if (!this.hasVariableFanSpeed) {
214
+ throw new errors_1.FeatureNotSupportedError('variable fan speed', this.model);
215
+ }
216
+ const validSpeed = validation_1.FanSpeedValidator.roundFanSpeed(speed);
217
+ validation_1.FanSpeedValidator.validateFanSpeed(validSpeed);
218
+ const endpoint = await this.getThermostatEndpoint('fan_speed');
219
+ await this.client.post(endpoint, { fan_speed: validSpeed });
220
+ await this.delayedUpdate();
221
+ }
222
+ async setFanOptions(options) {
223
+ const validOptions = this.validateFanOptions(options);
224
+ if (validOptions.mode !== undefined) {
225
+ await this.setFanMode(validOptions.mode);
226
+ }
227
+ if (validOptions.speed !== undefined) {
228
+ await this.setFanSpeed(validOptions.speed);
229
+ }
230
+ }
231
+ get humidifySetpoint() {
232
+ if (!this.hasHumidifySupport) {
233
+ return 0;
234
+ }
235
+ return this.data.settings?.humidify_setpoint || 0.35;
236
+ }
237
+ get dehumidifySetpoint() {
238
+ if (!this.hasDehumidifySupport) {
239
+ return 1;
240
+ }
241
+ return this.data.settings?.dehumidify_setpoint || 0.60;
242
+ }
243
+ get humiditySetpoints() {
244
+ return validation_1.HumidityValidator.getAvailableSetpoints();
245
+ }
246
+ get dehumidifySetpoints() {
247
+ return validation_1.HumidityValidator.getAvailableSetpoints();
248
+ }
249
+ async setHumiditySetpoints(options) {
250
+ validation_1.TraneValidator.validateHumidityConfig(options);
251
+ if (options.humidify !== undefined) {
252
+ if (!this.hasHumidifySupport) {
253
+ throw new errors_1.FeatureNotSupportedError('humidify control', this.model);
254
+ }
255
+ await this.setHumidifySetpoint(options.humidify);
256
+ }
257
+ if (options.dehumidify !== undefined) {
258
+ if (!this.hasDehumidifySupport) {
259
+ throw new errors_1.FeatureNotSupportedError('dehumidify control', this.model);
260
+ }
261
+ await this.setDehumidifySetpoint(options.dehumidify);
262
+ }
263
+ }
264
+ async setDehumidifySetpoint(value) {
265
+ if (!this.hasDehumidifySupport) {
266
+ throw new errors_1.FeatureNotSupportedError('dehumidify control', this.model);
267
+ }
268
+ const validValue = validation_1.HumidityValidator.roundHumidity(value);
269
+ validation_1.HumidityValidator.validateHumiditySetpoint(validValue);
270
+ const endpoint = await this.getThermostatEndpoint('dehumidify');
271
+ await this.client.post(endpoint, { dehumidify_setpoint: validValue });
272
+ await this.delayedUpdate();
273
+ }
274
+ async setHumidifySetpoint(value) {
275
+ if (!this.hasHumidifySupport) {
276
+ throw new errors_1.FeatureNotSupportedError('humidify control', this.model);
277
+ }
278
+ const validValue = validation_1.HumidityValidator.roundHumidity(value);
279
+ validation_1.HumidityValidator.validateHumiditySetpoint(validValue);
280
+ const endpoint = await this.getThermostatEndpoint('humidify');
281
+ await this.client.post(endpoint, { humidify_setpoint: validValue });
282
+ await this.delayedUpdate();
283
+ }
284
+ get airCleanerMode() {
285
+ return this.data.settings?.air_cleaner_mode || null;
286
+ }
287
+ get availableAirCleanerModes() {
288
+ return [constants_1.AirCleanerMode.AUTO, constants_1.AirCleanerMode.QUICK, constants_1.AirCleanerMode.ALLERGY];
289
+ }
290
+ async setAirCleanerMode(mode) {
291
+ if (!this.hasAirCleaner) {
292
+ throw new errors_1.FeatureNotSupportedError('air cleaner', this.model);
293
+ }
294
+ const validMode = validation_1.GeneralValidator.validateEnum(mode, constants_1.AirCleanerMode, 'airCleanerMode');
295
+ const endpoint = await this.getThermostatEndpoint('air_cleaner_mode');
296
+ await this.client.post(endpoint, { air_cleaner_mode: validMode });
297
+ await this.delayedUpdate();
298
+ }
299
+ async setEmergencyHeat(enabled) {
300
+ if (!this.hasEmergencyHeat) {
301
+ throw new errors_1.FeatureNotSupportedError('emergency heat', this.model);
302
+ }
303
+ const validEnabled = validation_1.GeneralValidator.validateBoolean(enabled, 'enabled');
304
+ const endpoint = await this.getThermostatEndpoint('emergency_heat');
305
+ await this.client.post(endpoint, { emergency_heat: validEnabled });
306
+ await this.delayedUpdate();
307
+ }
308
+ async setFollowSchedule(follow) {
309
+ const validFollow = validation_1.GeneralValidator.validateBoolean(follow, 'follow');
310
+ const endpoint = await this.getThermostatEndpoint('scheduling_enabled');
311
+ await this.client.post(endpoint, { scheduling_enabled: validFollow });
312
+ await this.delayedUpdate();
313
+ }
314
+ get zones() {
315
+ return Array.from(this.zonesMap.values());
316
+ }
317
+ get zoneIds() {
318
+ return Array.from(this.zonesMap.keys());
319
+ }
320
+ getZoneById(zoneId) {
321
+ return this.zonesMap.get(zoneId);
322
+ }
323
+ async refresh() {
324
+ await this.client.update({ forceUpdate: true });
325
+ }
326
+ initializeZones() {
327
+ this.zonesMap.clear();
328
+ if (this.data.zones && this.data.zones.length > 0) {
329
+ for (const zoneData of this.data.zones) {
330
+ try {
331
+ const zone = new trane_zone_1.TraneZone(this.client, this, zoneData);
332
+ this.zonesMap.set(zone.id, zone);
333
+ }
334
+ catch (error) {
335
+ console.warn(`Failed to create zone ${zoneData.id}:`, error);
336
+ }
337
+ }
338
+ return;
339
+ }
340
+ const rawFeatures = this.data._rawFeatures;
341
+ if (rawFeatures && Array.isArray(rawFeatures)) {
342
+ const thermostatFeature = rawFeatures.find((f) => f.name === 'thermostat');
343
+ const modeFeature = rawFeatures.find((f) => f.name === 'thermostat_mode');
344
+ const runModeFeature = rawFeatures.find((f) => f.name === 'thermostat_run_mode');
345
+ const sensorFeature = rawFeatures.find((f) => f.name === 'room_iq_sensors');
346
+ if (thermostatFeature) {
347
+ let zoneId = String(this.data.id);
348
+ if (thermostatFeature.device_identifier) {
349
+ const match = thermostatFeature.device_identifier.match(/XxlZone-(\d+)/);
350
+ if (match) {
351
+ zoneId = match[1];
352
+ }
353
+ }
354
+ let currentTemp = thermostatFeature.temperature;
355
+ if (sensorFeature?.sensors?.length > 0) {
356
+ const primarySensor = sensorFeature.sensors[0];
357
+ if (primarySensor.temperature_valid) {
358
+ currentTemp = primarySensor.temperature;
359
+ }
360
+ }
361
+ const zoneData = {
362
+ id: zoneId,
363
+ name: this.data.name || 'Zone 1',
364
+ features: {
365
+ heating_setpoint: thermostatFeature.setpoint_heat,
366
+ cooling_setpoint: thermostatFeature.setpoint_cool,
367
+ current_mode: modeFeature?.value,
368
+ setpoint_status: runModeFeature?.value,
369
+ is_calling: thermostatFeature.operating_state !== 'idle'
370
+ },
371
+ settings: {
372
+ temperature: currentTemp,
373
+ status: thermostatFeature.operating_state || thermostatFeature.status
374
+ },
375
+ _rawActions: {
376
+ setpoints: thermostatFeature.actions?.set_heat_setpoint?.href,
377
+ zone_mode: modeFeature?.actions?.update_thermostat_mode?.href,
378
+ run_mode: runModeFeature?.actions?.update_thermostat_run_mode?.href
379
+ }
380
+ };
381
+ try {
382
+ const zone = new trane_zone_1.TraneZone(this.client, this, zoneData);
383
+ this.zonesMap.set(zone.id, zone);
384
+ }
385
+ catch (error) {
386
+ console.warn(`Failed to create zone from thermostat feature:`, error);
387
+ }
388
+ }
389
+ }
390
+ }
391
+ parseSystemStatus(status) {
392
+ if (!status) {
393
+ return constants_1.SystemStatus.OFF;
394
+ }
395
+ switch (status) {
396
+ case 'Cooling':
397
+ return constants_1.SystemStatus.COOLING;
398
+ case 'Heating':
399
+ return constants_1.SystemStatus.HEATING;
400
+ case 'Waiting...':
401
+ return constants_1.SystemStatus.WAITING;
402
+ case 'System Idle':
403
+ return constants_1.SystemStatus.IDLE;
404
+ case 'System Off':
405
+ return constants_1.SystemStatus.OFF;
406
+ default:
407
+ return constants_1.SystemStatus.IDLE;
408
+ }
409
+ }
410
+ extractAvailableValues() {
411
+ return null;
412
+ }
413
+ async getThermostatEndpoint(operation) {
414
+ const selfLink = this.data._links?.self?.href;
415
+ if (selfLink) {
416
+ return `${selfLink}/${operation}`;
417
+ }
418
+ return `${constants_1.API_ENDPOINTS.THERMOSTAT}/${this.id}/${operation}`;
419
+ }
420
+ validateFanOptions(options) {
421
+ const validated = {};
422
+ if (options.mode !== undefined) {
423
+ validated.mode = validation_1.GeneralValidator.validateRequiredString(options.mode, 'fanMode');
424
+ }
425
+ if (options.speed !== undefined) {
426
+ validation_1.FanSpeedValidator.validateFanSpeed(options.speed);
427
+ validated.speed = validation_1.FanSpeedValidator.roundFanSpeed(options.speed);
428
+ }
429
+ if (options.schedule !== undefined) {
430
+ validated.schedule = validation_1.GeneralValidator.validateBoolean(options.schedule, 'schedule');
431
+ }
432
+ return validated;
433
+ }
434
+ async delayedUpdate() {
435
+ await this.client.delayedUpdate(constants_1.API_CONSTANTS.UPDATE_DELAY_SECONDS * 1000);
436
+ }
437
+ getStatusSummary() {
438
+ return {
439
+ id: this.id,
440
+ name: this.name,
441
+ model: this.model,
442
+ firmware: this.firmware,
443
+ isOnline: this.isOnline,
444
+ temperatureUnit: this.temperatureUnit,
445
+ systemStatus: this.systemStatus,
446
+ capabilities: this.capabilities,
447
+ zones: this.zones.length,
448
+ currentFanMode: this.currentFanMode,
449
+ currentFanSpeed: this.currentFanSpeed,
450
+ airCleanerMode: this.airCleanerMode,
451
+ humidifySetpoint: this.humidifySetpoint,
452
+ dehumidifySetpoint: this.dehumidifySetpoint
453
+ };
454
+ }
455
+ }
456
+ exports.TraneThermostat = TraneThermostat;
457
+ //# sourceMappingURL=trane-thermostat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trane-thermostat.js","sourceRoot":"","sources":["../../src/devices/trane-thermostat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { ZoneData, ZoneStatusSummary, TemperatureOptions, HoldOptions, SensorSelectionOptions } from '../types/api';
2
+ import { ITraneZone, ITraneThermostat, ITraneSensor } from '../types/interfaces';
3
+ import { OperationMode, PresetMode } from '../types/constants';
4
+ import { TraneClient } from '../client/trane-client';
5
+ export declare class TraneZone implements ITraneZone {
6
+ private readonly client;
7
+ private readonly thermostatRef;
8
+ private readonly data;
9
+ private readonly sensorsMap;
10
+ constructor(client: TraneClient, thermostat: ITraneThermostat, data: ZoneData);
11
+ get id(): string;
12
+ get name(): string;
13
+ get isNativeZone(): boolean;
14
+ get currentTemperature(): number;
15
+ get heatingSetpoint(): number;
16
+ get coolingSetpoint(): number;
17
+ get currentMode(): OperationMode;
18
+ get requestedMode(): OperationMode;
19
+ get availableModes(): OperationMode[];
20
+ setMode(mode: OperationMode): Promise<void>;
21
+ setTemperatures(options: TemperatureOptions): Promise<void>;
22
+ setHeatingSetpoint(temperature: number): Promise<void>;
23
+ setCoolingSetpoint(temperature: number): Promise<void>;
24
+ get status(): ZoneStatusSummary;
25
+ get isCalling(): boolean;
26
+ get setpointStatus(): string;
27
+ get isInPermanentHold(): boolean;
28
+ setPermanentHold(options?: HoldOptions): Promise<void>;
29
+ returnToSchedule(): Promise<void>;
30
+ get availablePresets(): PresetMode[];
31
+ get currentPreset(): PresetMode | null;
32
+ setPreset(preset: PresetMode): Promise<void>;
33
+ get sensors(): ITraneSensor[];
34
+ get activeSensorIds(): Set<number>;
35
+ get sensorIds(): number[];
36
+ getSensorById(sensorId: number): ITraneSensor | undefined;
37
+ selectActiveSensors(options: SensorSelectionOptions): Promise<void>;
38
+ loadCurrentSensorState(): Promise<void>;
39
+ get thermostat(): ITraneThermostat;
40
+ validateTemperatureSetpoints(heatTemp: number, coolTemp: number): boolean;
41
+ roundTemperature(temperature: number): number;
42
+ private initializeSensors;
43
+ private parseOperationMode;
44
+ private parseZoneStatus;
45
+ private parsePresetMode;
46
+ private getZoneEndpoint;
47
+ private delayedUpdate;
48
+ private delay;
49
+ private setsAreEqual;
50
+ getStatusSummary(): Record<string, any>;
51
+ setTemporaryHold(temperatures: TemperatureOptions, durationMinutes?: number): Promise<void>;
52
+ setHome(): Promise<void>;
53
+ setAway(): Promise<void>;
54
+ setSleep(): Promise<void>;
55
+ getTemperatureDifference(): {
56
+ fromHeating: number;
57
+ fromCooling: number;
58
+ };
59
+ isAtDesiredTemperature(tolerance?: number): boolean;
60
+ }
61
+ //# sourceMappingURL=trane-zone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trane-zone.d.ts","sourceRoot":"","sources":["../../src/devices/trane-zone.ts"],"names":[],"mappings":"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"}