trane-thermostat-api 1.0.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/LICENSE +21 -0
- package/README.md +150 -0
- package/dist/client/auth.d.ts +50 -0
- package/dist/client/auth.d.ts.map +1 -0
- package/dist/client/auth.js +236 -0
- package/dist/client/auth.js.map +1 -0
- package/dist/client/nexia-client.d.ts +48 -0
- package/dist/client/nexia-client.d.ts.map +1 -0
- package/dist/client/nexia-client.js +311 -0
- package/dist/client/nexia-client.js.map +1 -0
- package/dist/devices/nexia-automation.d.ts +15 -0
- package/dist/devices/nexia-automation.d.ts.map +1 -0
- package/dist/devices/nexia-automation.js +39 -0
- package/dist/devices/nexia-automation.js.map +1 -0
- package/dist/devices/nexia-sensor.d.ts +34 -0
- package/dist/devices/nexia-sensor.d.ts.map +1 -0
- package/dist/devices/nexia-sensor.js +152 -0
- package/dist/devices/nexia-sensor.js.map +1 -0
- package/dist/devices/nexia-thermostat.d.ts +73 -0
- package/dist/devices/nexia-thermostat.d.ts.map +1 -0
- package/dist/devices/nexia-thermostat.js +357 -0
- package/dist/devices/nexia-thermostat.js.map +1 -0
- package/dist/devices/nexia-zone.d.ts +61 -0
- package/dist/devices/nexia-zone.d.ts.map +1 -0
- package/dist/devices/nexia-zone.js +370 -0
- package/dist/devices/nexia-zone.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/types/api.d.ts +277 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +3 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/constants.d.ts +137 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/constants.js +160 -0
- package/dist/types/constants.js.map +1 -0
- package/dist/types/interfaces.d.ts +211 -0
- package/dist/types/interfaces.d.ts.map +1 -0
- package/dist/types/interfaces.js +3 -0
- package/dist/types/interfaces.js.map +1 -0
- package/dist/utils/errors.d.ts +94 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +231 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/http-utils.d.ts +59 -0
- package/dist/utils/http-utils.d.ts.map +1 -0
- package/dist/utils/http-utils.js +273 -0
- package/dist/utils/http-utils.js.map +1 -0
- package/dist/utils/json-utils.d.ts +32 -0
- package/dist/utils/json-utils.d.ts.map +1 -0
- package/dist/utils/json-utils.js +389 -0
- package/dist/utils/json-utils.js.map +1 -0
- package/dist/utils/validation.d.ts +52 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +272 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NexiaClient = void 0;
|
|
4
|
+
const constants_1 = require("../types/constants");
|
|
5
|
+
const http_utils_1 = require("../utils/http-utils");
|
|
6
|
+
const auth_1 = require("./auth");
|
|
7
|
+
const nexia_thermostat_1 = require("../devices/nexia-thermostat");
|
|
8
|
+
const nexia_automation_1 = require("../devices/nexia-automation");
|
|
9
|
+
const errors_1 = require("../utils/errors");
|
|
10
|
+
const validation_1 = require("../utils/validation");
|
|
11
|
+
class NexiaClient {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.thermostats = new Map();
|
|
14
|
+
this.automations = new Map();
|
|
15
|
+
this._lastUpdate = null;
|
|
16
|
+
this.isInitialized = false;
|
|
17
|
+
this.config = this.validateConfig(config);
|
|
18
|
+
const baseURL = constants_1.BRAND_URLS[this.config.brand];
|
|
19
|
+
this.httpClient = (0, http_utils_1.createHttpClient)({
|
|
20
|
+
baseURL,
|
|
21
|
+
timeout: this.config.timeout || 30000,
|
|
22
|
+
retryAttempts: this.config.retryAttempts || 3,
|
|
23
|
+
headers: {
|
|
24
|
+
'Content-Type': 'application/json'
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
const authConfig = {
|
|
28
|
+
username: this.config.username,
|
|
29
|
+
password: this.config.password,
|
|
30
|
+
brand: this.config.brand,
|
|
31
|
+
deviceName: this.config.deviceName,
|
|
32
|
+
stateFile: this.config.stateFile,
|
|
33
|
+
houseId: this.config.houseId
|
|
34
|
+
};
|
|
35
|
+
this.authManager = new auth_1.AuthManager(this.httpClient, authConfig);
|
|
36
|
+
}
|
|
37
|
+
async initialize() {
|
|
38
|
+
if (this.isInitialized) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
await this.authManager.initialize();
|
|
42
|
+
if (!this.authManager.isSessionValid()) {
|
|
43
|
+
await this.login();
|
|
44
|
+
}
|
|
45
|
+
this.isInitialized = true;
|
|
46
|
+
}
|
|
47
|
+
async login() {
|
|
48
|
+
try {
|
|
49
|
+
await this.authManager.authenticate();
|
|
50
|
+
const sessionInfo = await this.authManager.getSessionInfo();
|
|
51
|
+
this._houseId = sessionInfo.houseId;
|
|
52
|
+
this._houseName = sessionInfo.houseName;
|
|
53
|
+
await this.update({ forceUpdate: true });
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error instanceof errors_1.AuthenticationError) {
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
const nexiaError = errors_1.ErrorHandler.handle(error);
|
|
60
|
+
throw new errors_1.AuthenticationError(`Login failed: ${nexiaError.message}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async logout() {
|
|
64
|
+
await this.authManager.logout();
|
|
65
|
+
this.clearDeviceCache();
|
|
66
|
+
this.isInitialized = false;
|
|
67
|
+
}
|
|
68
|
+
isAuthenticated() {
|
|
69
|
+
return this.authManager.isSessionValid();
|
|
70
|
+
}
|
|
71
|
+
async getThermostats() {
|
|
72
|
+
await this.ensureAuthenticated();
|
|
73
|
+
return Array.from(this.thermostats.values());
|
|
74
|
+
}
|
|
75
|
+
async getAutomations() {
|
|
76
|
+
await this.ensureAuthenticated();
|
|
77
|
+
return Array.from(this.automations.values());
|
|
78
|
+
}
|
|
79
|
+
getThermostatById(id) {
|
|
80
|
+
return this.thermostats.get(id);
|
|
81
|
+
}
|
|
82
|
+
getAutomationById(id) {
|
|
83
|
+
return this.automations.get(id);
|
|
84
|
+
}
|
|
85
|
+
async update(options = {}) {
|
|
86
|
+
await this.ensureAuthenticated();
|
|
87
|
+
if (!this._houseId) {
|
|
88
|
+
throw new errors_1.ApiError('House ID not available. Please ensure login was successful.');
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const { forceUpdate = false } = options;
|
|
92
|
+
const houseUrl = `${constants_1.API_ENDPOINTS.HOUSES}/${this._houseId}`;
|
|
93
|
+
const response = forceUpdate
|
|
94
|
+
? await this.httpClient.get(houseUrl)
|
|
95
|
+
: await this.httpClient.getWithETag(houseUrl);
|
|
96
|
+
if (!('fromCache' in response) || !response.fromCache || forceUpdate) {
|
|
97
|
+
await this.processHouseData(response.data);
|
|
98
|
+
this._lastUpdate = new Date();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (this.isSessionExpiredError(error)) {
|
|
103
|
+
await this.handleSessionExpiry();
|
|
104
|
+
return this.update(options);
|
|
105
|
+
}
|
|
106
|
+
throw errors_1.ErrorHandler.handle(error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async get(url, headers) {
|
|
110
|
+
await this.ensureAuthenticated();
|
|
111
|
+
try {
|
|
112
|
+
const response = await this.httpClient.get(url, { headers });
|
|
113
|
+
return response.data;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (this.isSessionExpiredError(error)) {
|
|
117
|
+
await this.handleSessionExpiry();
|
|
118
|
+
const response = await this.httpClient.get(url, { headers });
|
|
119
|
+
return response.data;
|
|
120
|
+
}
|
|
121
|
+
throw errors_1.ErrorHandler.handle(error);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async post(url, data, headers) {
|
|
125
|
+
await this.ensureAuthenticated();
|
|
126
|
+
try {
|
|
127
|
+
const response = await this.httpClient.post(url, data, { headers });
|
|
128
|
+
return response.data;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (this.isSessionExpiredError(error)) {
|
|
132
|
+
await this.handleSessionExpiry();
|
|
133
|
+
const response = await this.httpClient.post(url, data, { headers });
|
|
134
|
+
return response.data;
|
|
135
|
+
}
|
|
136
|
+
throw errors_1.ErrorHandler.handle(error);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async put(url, data, headers) {
|
|
140
|
+
await this.ensureAuthenticated();
|
|
141
|
+
try {
|
|
142
|
+
const response = await this.httpClient.put(url, data, { headers });
|
|
143
|
+
return response.data;
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
if (this.isSessionExpiredError(error)) {
|
|
147
|
+
await this.handleSessionExpiry();
|
|
148
|
+
const response = await this.httpClient.put(url, data, { headers });
|
|
149
|
+
return response.data;
|
|
150
|
+
}
|
|
151
|
+
throw errors_1.ErrorHandler.handle(error);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
get brand() {
|
|
155
|
+
return this.config.brand;
|
|
156
|
+
}
|
|
157
|
+
get username() {
|
|
158
|
+
return this.config.username;
|
|
159
|
+
}
|
|
160
|
+
getHouseId() {
|
|
161
|
+
return this._houseId;
|
|
162
|
+
}
|
|
163
|
+
get lastUpdate() {
|
|
164
|
+
return this._lastUpdate;
|
|
165
|
+
}
|
|
166
|
+
getThermostatIds() {
|
|
167
|
+
return Array.from(this.thermostats.keys());
|
|
168
|
+
}
|
|
169
|
+
getAutomationIds() {
|
|
170
|
+
return Array.from(this.automations.keys());
|
|
171
|
+
}
|
|
172
|
+
clearCache() {
|
|
173
|
+
this.httpClient.clearETagCache();
|
|
174
|
+
}
|
|
175
|
+
validateConfig(config) {
|
|
176
|
+
const username = validation_1.GeneralValidator.validateRequiredString(config.username, 'username');
|
|
177
|
+
const password = validation_1.GeneralValidator.validateRequiredString(config.password, 'password');
|
|
178
|
+
const brand = validation_1.GeneralValidator.validateOptional(config.brand, (b) => validation_1.GeneralValidator.validateEnum(b, constants_1.BrandType, 'brand'), constants_1.BrandType.NEXIA);
|
|
179
|
+
return {
|
|
180
|
+
...config,
|
|
181
|
+
username,
|
|
182
|
+
password,
|
|
183
|
+
brand,
|
|
184
|
+
deviceName: config.deviceName || 'Homebridge',
|
|
185
|
+
timeout: config.timeout || 30000,
|
|
186
|
+
retryAttempts: config.retryAttempts || 3
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
async ensureAuthenticated() {
|
|
190
|
+
if (!this.isInitialized) {
|
|
191
|
+
await this.initialize();
|
|
192
|
+
}
|
|
193
|
+
if (!this.isAuthenticated()) {
|
|
194
|
+
await this.login();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async processHouseData(houseData) {
|
|
198
|
+
if (!houseData.success || !houseData.result) {
|
|
199
|
+
throw new errors_1.ApiError('Invalid house data received');
|
|
200
|
+
}
|
|
201
|
+
const result = houseData.result;
|
|
202
|
+
this.clearDeviceCache();
|
|
203
|
+
if (result._links?.child) {
|
|
204
|
+
for (const deviceLink of result._links.child) {
|
|
205
|
+
try {
|
|
206
|
+
if (deviceLink.type === 'thermostat' || deviceLink.href.includes('xxl_thermostats')) {
|
|
207
|
+
await this.processThermostat(deviceLink);
|
|
208
|
+
}
|
|
209
|
+
else if (deviceLink.type === 'automation' || deviceLink.href.includes('automation')) {
|
|
210
|
+
await this.processAutomation(deviceLink);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
console.warn(`Failed to process device ${deviceLink.id}:`, error);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (result.devices) {
|
|
219
|
+
for (const device of result.devices) {
|
|
220
|
+
try {
|
|
221
|
+
const thermostat = new nexia_thermostat_1.NexiaThermostat(this, device);
|
|
222
|
+
this.thermostats.set(thermostat.id, thermostat);
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
console.warn('Failed to create thermostat from device data:', error);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (result.automations) {
|
|
230
|
+
for (const automation of result.automations) {
|
|
231
|
+
try {
|
|
232
|
+
const automationObj = new nexia_automation_1.NexiaAutomation(this, automation);
|
|
233
|
+
this.automations.set(automationObj.id, automationObj);
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
console.warn('Failed to create automation from data:', error);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async processThermostat(deviceLink) {
|
|
242
|
+
try {
|
|
243
|
+
const thermostatData = await this.get(deviceLink.href);
|
|
244
|
+
const thermostat = new nexia_thermostat_1.NexiaThermostat(this, thermostatData);
|
|
245
|
+
this.thermostats.set(thermostat.id, thermostat);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.warn(`Failed to load thermostat ${deviceLink.id}:`, error);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async processAutomation(deviceLink) {
|
|
252
|
+
try {
|
|
253
|
+
const automationData = await this.get(deviceLink.href);
|
|
254
|
+
const automation = new nexia_automation_1.NexiaAutomation(this, automationData);
|
|
255
|
+
this.automations.set(automation.id, automation);
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
console.warn(`Failed to load automation ${deviceLink.id}:`, error);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
clearDeviceCache() {
|
|
262
|
+
this.thermostats.clear();
|
|
263
|
+
this.automations.clear();
|
|
264
|
+
}
|
|
265
|
+
isSessionExpiredError(error) {
|
|
266
|
+
return (error instanceof errors_1.SessionExpiredError ||
|
|
267
|
+
(error instanceof errors_1.ApiError && error.statusCode === constants_1.HTTP_STATUS.REDIRECT) ||
|
|
268
|
+
(error instanceof errors_1.AuthenticationError && error.message.includes('session')));
|
|
269
|
+
}
|
|
270
|
+
async handleSessionExpiry() {
|
|
271
|
+
console.info('Session expired, refreshing authentication...');
|
|
272
|
+
try {
|
|
273
|
+
this.authManager.handleSessionExpired();
|
|
274
|
+
await this.authManager.authenticate();
|
|
275
|
+
const sessionInfo = await this.authManager.getSessionInfo();
|
|
276
|
+
this._houseId = sessionInfo.houseId;
|
|
277
|
+
this._houseName = sessionInfo.houseName;
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
this.clearDeviceCache();
|
|
281
|
+
throw new errors_1.AuthenticationError('Failed to refresh expired session');
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
async delayedUpdate(delayMs = 7000) {
|
|
285
|
+
return new Promise((resolve, reject) => {
|
|
286
|
+
setTimeout(async () => {
|
|
287
|
+
try {
|
|
288
|
+
await this.update();
|
|
289
|
+
resolve();
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
reject(error);
|
|
293
|
+
}
|
|
294
|
+
}, delayMs);
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
getBaseUrl() {
|
|
298
|
+
return constants_1.BRAND_URLS[this.config.brand];
|
|
299
|
+
}
|
|
300
|
+
getMobileUrl() {
|
|
301
|
+
return `${this.getBaseUrl()}/mobile`;
|
|
302
|
+
}
|
|
303
|
+
getUpdateUrl() {
|
|
304
|
+
return this._houseId ? `${constants_1.API_ENDPOINTS.HOUSES}/${this._houseId}` : null;
|
|
305
|
+
}
|
|
306
|
+
getHouseName() {
|
|
307
|
+
return this._houseName;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
exports.NexiaClient = NexiaClient;
|
|
311
|
+
//# sourceMappingURL=nexia-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexia-client.js","sourceRoot":"","sources":["../../src/client/nexia-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AutomationData } from '../types/api';
|
|
2
|
+
import { INexiaAutomation } from '../types/interfaces';
|
|
3
|
+
import { NexiaClient } from '../client/nexia-client';
|
|
4
|
+
export declare class NexiaAutomation implements INexiaAutomation {
|
|
5
|
+
private readonly client;
|
|
6
|
+
private readonly data;
|
|
7
|
+
constructor(client: NexiaClient, data: AutomationData);
|
|
8
|
+
get id(): string;
|
|
9
|
+
get name(): string;
|
|
10
|
+
get description(): string;
|
|
11
|
+
get enabled(): boolean;
|
|
12
|
+
setEnabled(enabled: boolean): Promise<void>;
|
|
13
|
+
activate(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=nexia-automation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexia-automation.d.ts","sourceRoot":"","sources":["../../src/devices/nexia-automation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAIrD,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;gBAE1B,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc;IAMrD,IAAW,EAAE,IAAI,MAAM,CAEtB;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,WAAW,IAAI,MAAM,CAE/B;IAGD,IAAW,OAAO,IAAI,OAAO,CAE5B;IAEY,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAUvC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NexiaAutomation = void 0;
|
|
4
|
+
const validation_1 = require("../utils/validation");
|
|
5
|
+
const errors_1 = require("../utils/errors");
|
|
6
|
+
class NexiaAutomation {
|
|
7
|
+
constructor(client, data) {
|
|
8
|
+
this.client = client;
|
|
9
|
+
this.data = data;
|
|
10
|
+
}
|
|
11
|
+
get id() {
|
|
12
|
+
return String(this.data.id);
|
|
13
|
+
}
|
|
14
|
+
get name() {
|
|
15
|
+
return this.data.name || 'Unknown Automation';
|
|
16
|
+
}
|
|
17
|
+
get description() {
|
|
18
|
+
return this.data.description || '';
|
|
19
|
+
}
|
|
20
|
+
get enabled() {
|
|
21
|
+
return this.data.enabled || false;
|
|
22
|
+
}
|
|
23
|
+
async setEnabled(enabled) {
|
|
24
|
+
const validEnabled = validation_1.GeneralValidator.validateBoolean(enabled, 'enabled');
|
|
25
|
+
if (!this.data._links?.self?.href) {
|
|
26
|
+
throw new errors_1.DeviceNotFoundError('Automation endpoint not available', this.id, 'automation');
|
|
27
|
+
}
|
|
28
|
+
await this.client.put(this.data._links.self.href, { enabled: validEnabled });
|
|
29
|
+
}
|
|
30
|
+
async activate() {
|
|
31
|
+
if (!this.data._links?.self?.href) {
|
|
32
|
+
throw new errors_1.DeviceNotFoundError('Automation endpoint not available', this.id, 'automation');
|
|
33
|
+
}
|
|
34
|
+
const activateUrl = `${this.data._links.self.href}/activate`;
|
|
35
|
+
await this.client.post(activateUrl, {});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.NexiaAutomation = NexiaAutomation;
|
|
39
|
+
//# sourceMappingURL=nexia-automation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexia-automation.js","sourceRoot":"","sources":["../../src/devices/nexia-automation.ts"],"names":[],"mappings":";;;AAQA,oDAAuD;AACvD,4CAAsD;AAEtD,MAAa,eAAe;IAI1B,YAAY,MAAmB,EAAE,IAAoB;QACnD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAGD,IAAW,EAAE;QACX,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,oBAAoB,CAAC;IAChD,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IACrC,CAAC;IAGD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,OAAgB;QACtC,MAAM,YAAY,GAAG,6BAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE1E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,4BAAmB,CAAC,mCAAmC,EAAE,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QAC5F,CAAC;QAID,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IAC/E,CAAC;IAGM,KAAK,CAAC,QAAQ;QACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,4BAAmB,CAAC,mCAAmC,EAAE,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QAC5F,CAAC;QAID,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;QAC7D,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAlDD,0CAkDC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SensorData } from '../types/api';
|
|
2
|
+
import { INexiaSensor } from '../types/interfaces';
|
|
3
|
+
import { SensorType } from '../types/constants';
|
|
4
|
+
export declare class NexiaSensor implements INexiaSensor {
|
|
5
|
+
private readonly data;
|
|
6
|
+
constructor(data: SensorData);
|
|
7
|
+
get id(): number;
|
|
8
|
+
get name(): string;
|
|
9
|
+
get type(): SensorType;
|
|
10
|
+
get serialNumber(): string;
|
|
11
|
+
get weight(): number;
|
|
12
|
+
get isActive(): boolean;
|
|
13
|
+
get isConnected(): boolean | null;
|
|
14
|
+
get temperature(): number;
|
|
15
|
+
get temperatureValid(): boolean;
|
|
16
|
+
get humidity(): number;
|
|
17
|
+
get humidityValid(): boolean;
|
|
18
|
+
get hasBattery(): boolean;
|
|
19
|
+
get batteryLevel(): number | null;
|
|
20
|
+
get batteryLow(): boolean | null;
|
|
21
|
+
get batteryValid(): boolean | null;
|
|
22
|
+
get batteryStatus(): 'good' | 'low' | 'critical' | 'unknown';
|
|
23
|
+
get hasOnlineStatus(): boolean;
|
|
24
|
+
getStatusSummary(): Record<string, any>;
|
|
25
|
+
isDataValid(): boolean;
|
|
26
|
+
getDescription(): string;
|
|
27
|
+
static compare(a: INexiaSensor, b: INexiaSensor): number;
|
|
28
|
+
static filterActive(sensors: INexiaSensor[]): INexiaSensor[];
|
|
29
|
+
static filterConnected(sensors: INexiaSensor[]): INexiaSensor[];
|
|
30
|
+
static filterValidData(sensors: INexiaSensor[]): INexiaSensor[];
|
|
31
|
+
static filterBatteryPowered(sensors: INexiaSensor[]): INexiaSensor[];
|
|
32
|
+
static getLowBatterySensors(sensors: INexiaSensor[]): INexiaSensor[];
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=nexia-sensor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexia-sensor.d.ts","sourceRoot":"","sources":["../../src/devices/nexia-sensor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAsB,MAAM,oBAAoB,CAAC;AAEpE,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;gBAEtB,IAAI,EAAE,UAAU;IAK5B,IAAW,EAAE,IAAI,MAAM,CAEtB;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,IAAI,IAAI,UAAU,CAU5B;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAGD,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,WAAW,IAAI,OAAO,GAAG,IAAI,CAEvC;IAGD,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,gBAAgB,IAAI,OAAO,CAErC;IAGD,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,aAAa,IAAI,OAAO,CAElC;IAGD,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,YAAY,IAAI,MAAM,GAAG,IAAI,CAKvC;IAED,IAAW,UAAU,IAAI,OAAO,GAAG,IAAI,CAKtC;IAED,IAAW,YAAY,IAAI,OAAO,GAAG,IAAI,CAKxC;IAED,IAAW,aAAa,IAAI,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,CAclE;IAGD,IAAW,eAAe,IAAI,OAAO,CAEpC;IAKM,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAsBvC,WAAW,IAAI,OAAO;IAWtB,cAAc,IAAI,MAAM;WAyBjB,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM;WAYjD,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;WAIrD,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;WAIxD,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;WAIxD,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;WAO7D,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;CAM5E"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NexiaSensor = void 0;
|
|
4
|
+
const constants_1 = require("../types/constants");
|
|
5
|
+
class NexiaSensor {
|
|
6
|
+
constructor(data) {
|
|
7
|
+
this.data = data;
|
|
8
|
+
}
|
|
9
|
+
get id() {
|
|
10
|
+
return this.data.id;
|
|
11
|
+
}
|
|
12
|
+
get name() {
|
|
13
|
+
return this.data.name || 'Unknown Sensor';
|
|
14
|
+
}
|
|
15
|
+
get type() {
|
|
16
|
+
switch (this.data.type?.toLowerCase()) {
|
|
17
|
+
case 'roomiq':
|
|
18
|
+
return constants_1.SensorType.ROOMIQ;
|
|
19
|
+
case 'thermostat':
|
|
20
|
+
return constants_1.SensorType.THERMOSTAT;
|
|
21
|
+
default:
|
|
22
|
+
return constants_1.SensorType.ROOMIQ;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
get serialNumber() {
|
|
26
|
+
return this.data.serial_number || this.data.serialNumber || 'Unknown';
|
|
27
|
+
}
|
|
28
|
+
get weight() {
|
|
29
|
+
return this.data.weight || 0;
|
|
30
|
+
}
|
|
31
|
+
get isActive() {
|
|
32
|
+
return this.weight > 0;
|
|
33
|
+
}
|
|
34
|
+
get isConnected() {
|
|
35
|
+
return this.data.connected || null;
|
|
36
|
+
}
|
|
37
|
+
get temperature() {
|
|
38
|
+
return this.data.temperature || 0;
|
|
39
|
+
}
|
|
40
|
+
get temperatureValid() {
|
|
41
|
+
return this.data.temperature_valid || false;
|
|
42
|
+
}
|
|
43
|
+
get humidity() {
|
|
44
|
+
return this.data.humidity || 0;
|
|
45
|
+
}
|
|
46
|
+
get humidityValid() {
|
|
47
|
+
return this.data.humidity_valid || false;
|
|
48
|
+
}
|
|
49
|
+
get hasBattery() {
|
|
50
|
+
return this.data.has_battery || false;
|
|
51
|
+
}
|
|
52
|
+
get batteryLevel() {
|
|
53
|
+
if (this.data.battery?.level !== undefined) {
|
|
54
|
+
return this.data.battery.level;
|
|
55
|
+
}
|
|
56
|
+
return this.data.battery_level || null;
|
|
57
|
+
}
|
|
58
|
+
get batteryLow() {
|
|
59
|
+
if (this.data.battery?.low !== undefined) {
|
|
60
|
+
return this.data.battery.low;
|
|
61
|
+
}
|
|
62
|
+
return this.data.battery_low || null;
|
|
63
|
+
}
|
|
64
|
+
get batteryValid() {
|
|
65
|
+
if (this.data.battery?.valid !== undefined) {
|
|
66
|
+
return this.data.battery.valid;
|
|
67
|
+
}
|
|
68
|
+
return this.data.battery_valid || null;
|
|
69
|
+
}
|
|
70
|
+
get batteryStatus() {
|
|
71
|
+
if (!this.hasBattery || this.batteryLevel === null || !this.batteryValid) {
|
|
72
|
+
return 'unknown';
|
|
73
|
+
}
|
|
74
|
+
const level = this.batteryLevel;
|
|
75
|
+
if (level <= constants_1.BATTERY_THRESHOLDS.CRITICAL) {
|
|
76
|
+
return 'critical';
|
|
77
|
+
}
|
|
78
|
+
else if (level <= constants_1.BATTERY_THRESHOLDS.LOW) {
|
|
79
|
+
return 'low';
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return 'good';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
get hasOnlineStatus() {
|
|
86
|
+
return this.data.has_online || false;
|
|
87
|
+
}
|
|
88
|
+
getStatusSummary() {
|
|
89
|
+
return {
|
|
90
|
+
id: this.id,
|
|
91
|
+
name: this.name,
|
|
92
|
+
type: this.type,
|
|
93
|
+
isActive: this.isActive,
|
|
94
|
+
weight: this.weight,
|
|
95
|
+
temperature: this.temperature,
|
|
96
|
+
temperatureValid: this.temperatureValid,
|
|
97
|
+
humidity: this.humidity,
|
|
98
|
+
humidityValid: this.humidityValid,
|
|
99
|
+
isConnected: this.isConnected,
|
|
100
|
+
hasBattery: this.hasBattery,
|
|
101
|
+
batteryLevel: this.batteryLevel,
|
|
102
|
+
batteryStatus: this.batteryStatus,
|
|
103
|
+
serialNumber: this.serialNumber
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
isDataValid() {
|
|
107
|
+
return (this.isConnected !== false &&
|
|
108
|
+
(this.temperatureValid || this.humidityValid) &&
|
|
109
|
+
(!this.hasBattery || this.batteryStatus !== 'critical'));
|
|
110
|
+
}
|
|
111
|
+
getDescription() {
|
|
112
|
+
const parts = [this.name];
|
|
113
|
+
if (this.temperatureValid) {
|
|
114
|
+
parts.push(`${this.temperature}°`);
|
|
115
|
+
}
|
|
116
|
+
if (this.humidityValid) {
|
|
117
|
+
parts.push(`${this.humidity}% humidity`);
|
|
118
|
+
}
|
|
119
|
+
if (this.hasBattery && this.batteryLevel !== null) {
|
|
120
|
+
parts.push(`${this.batteryLevel}% battery`);
|
|
121
|
+
}
|
|
122
|
+
if (this.isConnected === false) {
|
|
123
|
+
parts.push('(disconnected)');
|
|
124
|
+
}
|
|
125
|
+
return parts.join(' ');
|
|
126
|
+
}
|
|
127
|
+
static compare(a, b) {
|
|
128
|
+
if (a.isActive && !b.isActive)
|
|
129
|
+
return -1;
|
|
130
|
+
if (!a.isActive && b.isActive)
|
|
131
|
+
return 1;
|
|
132
|
+
return a.name.localeCompare(b.name);
|
|
133
|
+
}
|
|
134
|
+
static filterActive(sensors) {
|
|
135
|
+
return sensors.filter(sensor => sensor.isActive);
|
|
136
|
+
}
|
|
137
|
+
static filterConnected(sensors) {
|
|
138
|
+
return sensors.filter(sensor => sensor.isConnected !== false);
|
|
139
|
+
}
|
|
140
|
+
static filterValidData(sensors) {
|
|
141
|
+
return sensors.filter(sensor => sensor.isDataValid());
|
|
142
|
+
}
|
|
143
|
+
static filterBatteryPowered(sensors) {
|
|
144
|
+
return sensors.filter(sensor => sensor.hasBattery);
|
|
145
|
+
}
|
|
146
|
+
static getLowBatterySensors(sensors) {
|
|
147
|
+
return sensors.filter(sensor => sensor.hasBattery &&
|
|
148
|
+
(sensor.batteryStatus === 'low' || sensor.batteryStatus === 'critical'));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.NexiaSensor = NexiaSensor;
|
|
152
|
+
//# sourceMappingURL=nexia-sensor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexia-sensor.js","sourceRoot":"","sources":["../../src/devices/nexia-sensor.ts"],"names":[],"mappings":";;;AAOA,kDAAoE;AAEpE,MAAa,WAAW;IAGtB,YAAY,IAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAGD,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACtB,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,gBAAgB,CAAC;IAC5C,CAAC;IAED,IAAW,IAAI;QAEb,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,sBAAU,CAAC,MAAM,CAAC;YAC3B,KAAK,YAAY;gBACf,OAAO,sBAAU,CAAC,UAAU,CAAC;YAC/B;gBACE,OAAO,sBAAU,CAAC,MAAM,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;IACxE,CAAC;IAGD,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IACrC,CAAC;IAGD,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC;IAC9C,CAAC;IAGD,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC;IAC3C,CAAC;IAGD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC;IACxC,CAAC;IAED,IAAW,YAAY;QACrB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,IAAW,UAAU;QACnB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,IAAW,YAAY;QACrB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,IAAW,aAAa;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACzE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAEhC,IAAI,KAAK,IAAI,8BAAkB,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO,UAAU,CAAC;QACpB,CAAC;aAAM,IAAI,KAAK,IAAI,8BAAkB,CAAC,GAAG,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAGD,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;IACvC,CAAC;IAKM,gBAAgB;QACrB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IACJ,CAAC;IAKM,WAAW;QAChB,OAAO,CACL,IAAI,CAAC,WAAW,KAAK,KAAK;YAC1B,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC;YAC7C,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,KAAK,UAAU,CAAC,CACxD,CAAC;IACJ,CAAC;IAKM,cAAc;QACnB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,YAAY,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,WAAW,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAKM,MAAM,CAAC,OAAO,CAAC,CAAe,EAAE,CAAe;QAEpD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC;QAGxC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAKM,MAAM,CAAC,YAAY,CAAC,OAAuB;QAChD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,OAAuB;QACnD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,OAAuB;QACnD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,OAAuB;QACxD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IAKM,MAAM,CAAC,oBAAoB,CAAC,OAAuB;QACxD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC7B,MAAM,CAAC,UAAU;YACjB,CAAC,MAAM,CAAC,aAAa,KAAK,KAAK,IAAI,MAAM,CAAC,aAAa,KAAK,UAAU,CAAC,CACxE,CAAC;IACJ,CAAC;CACF;AAhND,kCAgNC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { ThermostatData, DeviceCapabilities, SystemStatusSummary, HumidityOptions, FanOptions } from '../types/api';
|
|
2
|
+
import { INexiaThermostat, INexiaZone } from '../types/interfaces';
|
|
3
|
+
import { AirCleanerMode, TemperatureUnit } from '../types/constants';
|
|
4
|
+
import { NexiaClient } from '../client/nexia-client';
|
|
5
|
+
export declare class NexiaThermostat implements INexiaThermostat {
|
|
6
|
+
private readonly client;
|
|
7
|
+
private readonly data;
|
|
8
|
+
private readonly zonesMap;
|
|
9
|
+
constructor(client: NexiaClient, data: ThermostatData);
|
|
10
|
+
get id(): string;
|
|
11
|
+
get name(): string;
|
|
12
|
+
get model(): string;
|
|
13
|
+
get firmware(): string;
|
|
14
|
+
get isOnline(): boolean;
|
|
15
|
+
get temperatureUnit(): TemperatureUnit;
|
|
16
|
+
get deadband(): number;
|
|
17
|
+
get capabilities(): DeviceCapabilities;
|
|
18
|
+
get hasZones(): boolean;
|
|
19
|
+
get hasOutdoorTemperature(): boolean;
|
|
20
|
+
get hasRelativeHumidity(): boolean;
|
|
21
|
+
get hasVariableSpeedCompressor(): boolean;
|
|
22
|
+
get hasEmergencyHeat(): boolean;
|
|
23
|
+
get hasVariableFanSpeed(): boolean;
|
|
24
|
+
get hasDehumidifySupport(): boolean;
|
|
25
|
+
get hasHumidifySupport(): boolean;
|
|
26
|
+
get hasAirCleaner(): boolean;
|
|
27
|
+
get systemStatus(): SystemStatusSummary;
|
|
28
|
+
get isBlowerActive(): boolean;
|
|
29
|
+
get isEmergencyHeatActive(): boolean;
|
|
30
|
+
get currentCompressorSpeed(): number;
|
|
31
|
+
get relativeHumidity(): number | null;
|
|
32
|
+
get outdoorTemperature(): number | null;
|
|
33
|
+
get setpointLimits(): {
|
|
34
|
+
heatMin: number;
|
|
35
|
+
heatMax: number;
|
|
36
|
+
coolMin: number;
|
|
37
|
+
coolMax: number;
|
|
38
|
+
};
|
|
39
|
+
get availableFanModes(): string[];
|
|
40
|
+
get currentFanMode(): string | null;
|
|
41
|
+
get fanSpeedLimits(): {
|
|
42
|
+
min: number;
|
|
43
|
+
max: number;
|
|
44
|
+
};
|
|
45
|
+
get currentFanSpeed(): number;
|
|
46
|
+
setFanMode(mode: string): Promise<void>;
|
|
47
|
+
setFanSpeed(speed: number): Promise<void>;
|
|
48
|
+
setFanOptions(options: FanOptions): Promise<void>;
|
|
49
|
+
get humidifySetpoint(): number;
|
|
50
|
+
get dehumidifySetpoint(): number;
|
|
51
|
+
get humiditySetpoints(): number[];
|
|
52
|
+
get dehumidifySetpoints(): number[];
|
|
53
|
+
setHumiditySetpoints(options: HumidityOptions): Promise<void>;
|
|
54
|
+
setDehumidifySetpoint(value: number): Promise<void>;
|
|
55
|
+
setHumidifySetpoint(value: number): Promise<void>;
|
|
56
|
+
get airCleanerMode(): string | null;
|
|
57
|
+
get availableAirCleanerModes(): AirCleanerMode[];
|
|
58
|
+
setAirCleanerMode(mode: AirCleanerMode): Promise<void>;
|
|
59
|
+
setEmergencyHeat(enabled: boolean): Promise<void>;
|
|
60
|
+
setFollowSchedule(follow: boolean): Promise<void>;
|
|
61
|
+
get zones(): INexiaZone[];
|
|
62
|
+
get zoneIds(): string[];
|
|
63
|
+
getZoneById(zoneId: string): INexiaZone | undefined;
|
|
64
|
+
refresh(): Promise<void>;
|
|
65
|
+
private initializeZones;
|
|
66
|
+
private parseSystemStatus;
|
|
67
|
+
private extractAvailableValues;
|
|
68
|
+
private getThermostatEndpoint;
|
|
69
|
+
private validateFanOptions;
|
|
70
|
+
private delayedUpdate;
|
|
71
|
+
getStatusSummary(): Record<string, any>;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=nexia-thermostat.d.ts.map
|