homebridge-tsvesync 1.0.29 → 1.0.31
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 +6 -1
- package/dist/accessories/air-purifier.accessory.d.ts.map +1 -1
- package/dist/accessories/air-purifier.accessory.js +5 -4
- package/dist/accessories/air-purifier.accessory.js.map +1 -1
- package/dist/accessories/base.accessory.d.ts +3 -1
- package/dist/accessories/base.accessory.d.ts.map +1 -1
- package/dist/accessories/base.accessory.js +68 -57
- package/dist/accessories/base.accessory.js.map +1 -1
- package/dist/platform.d.ts +4 -4
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +70 -57
- package/dist/platform.js.map +1 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +16 -2
- package/dist/utils/retry.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/base.accessory.test.ts +1 -0
- package/src/__tests__/platform.test.ts +90 -54
- package/src/accessories/air-purifier.accessory.ts +3 -2
- package/src/accessories/base.accessory.ts +81 -70
- package/src/platform.ts +77 -58
- package/src/utils/retry.ts +19 -7
package/CHANGELOG.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"air-purifier.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/air-purifier.accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAG3C,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,iBAAiB;IAO3B;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAmF9B;;OAEG;IACH,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAcrD;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"air-purifier.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/air-purifier.accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAG3C,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,iBAAiB;IAO3B;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAmF9B;;OAEG;IACH,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAcrD;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCvE;;OAEG;YACW,eAAe;IAc7B;;OAEG;YACW,oBAAoB;IAYlC;;OAEG;YACW,sBAAsB;IA8BpC;;OAEG;YACW,kBAAkB;YAYlB,SAAS;YAIT,SAAS;YAeT,0BAA0B;YAI1B,yBAAyB;YAIzB,yBAAyB;YAezB,aAAa;YAMb,cAAc;IAe5B;;OAEG;YACW,gBAAgB;YAiBhB,uBAAuB;YAIvB,uBAAuB;YAmBvB,yBAAyB;YAIzB,kBAAkB;cAIhB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlE"}
|
|
@@ -61,18 +61,19 @@ class AirPurifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
61
61
|
* Update device states based on the latest details
|
|
62
62
|
*/
|
|
63
63
|
async updateDeviceSpecificStates(details) {
|
|
64
|
-
var _a, _b;
|
|
64
|
+
var _a, _b, _c, _d;
|
|
65
65
|
// Update power state
|
|
66
66
|
const isOn = details.enabled;
|
|
67
67
|
this.service.updateCharacteristic(this.platform.Characteristic.Active, isOn ? 1 : 0);
|
|
68
68
|
this.service.updateCharacteristic(this.platform.Characteristic.CurrentAirPurifierState, isOn ? 2 : 0);
|
|
69
69
|
// Update rotation speed
|
|
70
|
-
const speed = details.speed;
|
|
71
|
-
const
|
|
70
|
+
const speed = (_a = details.speed) !== null && _a !== void 0 ? _a : 0;
|
|
71
|
+
const maxSpeed = (_b = this.device.maxSpeed) !== null && _b !== void 0 ? _b : 5; // Default to 5 if maxSpeed is not defined
|
|
72
|
+
const rotationSpeed = Math.round((speed / maxSpeed) * 100);
|
|
72
73
|
this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, rotationSpeed);
|
|
73
74
|
// Update air quality if available
|
|
74
75
|
if (this.capabilities.hasAirQuality) {
|
|
75
|
-
const pm25 = (
|
|
76
|
+
const pm25 = (_d = (_c = details.airQuality) === null || _c === void 0 ? void 0 : _c.pm25) !== null && _d !== void 0 ? _d : 0;
|
|
76
77
|
const airQuality = this.convertAirQualityToHomeKit(pm25);
|
|
77
78
|
this.service.updateCharacteristic(this.platform.Characteristic.AirQuality, airQuality);
|
|
78
79
|
this.service.updateCharacteristic(this.platform.Characteristic.PM2_5Density, pm25);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"air-purifier.accessory.js","sourceRoot":"","sources":["../../src/accessories/air-purifier.accessory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"air-purifier.accessory.js","sourceRoot":"","sources":["../../src/accessories/air-purifier.accessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,8 @@ export declare abstract class BaseAccessory {
|
|
|
14
14
|
private initializationPromise;
|
|
15
15
|
private initializationResolver;
|
|
16
16
|
private isInitializing;
|
|
17
|
+
private initializationAttempts;
|
|
18
|
+
private readonly maxInitializationAttempts;
|
|
17
19
|
constructor(platform: TSVESyncPlatform, accessory: PlatformAccessory, device: VeSyncDeviceWithPower);
|
|
18
20
|
/**
|
|
19
21
|
* Get base context for logging
|
|
@@ -66,7 +68,7 @@ export declare abstract class BaseAccessory {
|
|
|
66
68
|
/**
|
|
67
69
|
* Sync the device state with VeSync
|
|
68
70
|
*/
|
|
69
|
-
syncDeviceState(): Promise<
|
|
71
|
+
syncDeviceState(): Promise<boolean>;
|
|
70
72
|
/**
|
|
71
73
|
* Helper method to convert air quality values to HomeKit format
|
|
72
74
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/base.accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAKlF,8BAAsB,aAAa;IACjC,SAAS,CAAC,OAAO,EAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IAChD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,cAAc,CAAS;
|
|
1
|
+
{"version":3,"file":"base.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/base.accessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ class BaseAccessory {
|
|
|
9
9
|
this.needsRetry = false;
|
|
10
10
|
this.isInitialized = false;
|
|
11
11
|
this.isInitializing = false;
|
|
12
|
+
this.initializationAttempts = 0;
|
|
13
|
+
this.maxInitializationAttempts = 5;
|
|
12
14
|
this.platform = platform;
|
|
13
15
|
this.accessory = accessory;
|
|
14
16
|
this.device = device;
|
|
@@ -41,21 +43,14 @@ class BaseAccessory {
|
|
|
41
43
|
*/
|
|
42
44
|
async withRetry(operation, operationName) {
|
|
43
45
|
const context = this.getLogContext(operationName);
|
|
44
|
-
this.logger.operationStart(context);
|
|
45
46
|
try {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
deviceName: this.device.deviceName,
|
|
50
|
-
operation: operationName,
|
|
51
|
-
});
|
|
47
|
+
return await this.retryManager.execute(operation, {
|
|
48
|
+
deviceName: this.device.deviceName,
|
|
49
|
+
operation: operationName,
|
|
52
50
|
});
|
|
53
|
-
this.logger.operationEnd(context);
|
|
54
|
-
return result;
|
|
55
51
|
}
|
|
56
52
|
catch (error) {
|
|
57
|
-
|
|
58
|
-
await this.handleDeviceError(`Failed to ${operationName}`, error instanceof Error ? error : new Error(String(error)));
|
|
53
|
+
// Don't log here - let the error propagate up to be logged at a higher level
|
|
59
54
|
throw error;
|
|
60
55
|
}
|
|
61
56
|
}
|
|
@@ -90,18 +85,26 @@ class BaseAccessory {
|
|
|
90
85
|
}
|
|
91
86
|
this.isInitializing = true;
|
|
92
87
|
try {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
88
|
+
while (this.initializationAttempts < this.maxInitializationAttempts) {
|
|
89
|
+
try {
|
|
90
|
+
await this.initializeDeviceState();
|
|
91
|
+
this.isInitialized = true;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
this.initializationAttempts++;
|
|
96
|
+
if (this.initializationAttempts >= this.maxInitializationAttempts) {
|
|
97
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
98
|
+
this.logger.error(`=== INIT: Failed to initialize accessory after ${this.maxInitializationAttempts} attempts ===`, this.getLogContext(), err);
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
const delay = Math.min(5000 * Math.pow(2, this.initializationAttempts - 1), 40000);
|
|
102
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
101
105
|
}
|
|
102
106
|
finally {
|
|
103
107
|
this.isInitializing = false;
|
|
104
|
-
// Signal initialization completion regardless of success
|
|
105
108
|
this.initializationResolver();
|
|
106
109
|
}
|
|
107
110
|
}
|
|
@@ -109,18 +112,14 @@ class BaseAccessory {
|
|
|
109
112
|
* Initialize the device state
|
|
110
113
|
*/
|
|
111
114
|
async initializeDeviceState() {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
await this.platform.isReady();
|
|
116
|
-
}
|
|
117
|
-
// Attempt to get initial device state
|
|
118
|
-
await this.syncDeviceState();
|
|
115
|
+
// Wait for platform to be ready
|
|
116
|
+
if (typeof this.platform.isReady === 'function') {
|
|
117
|
+
await this.platform.isReady();
|
|
119
118
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
throw
|
|
119
|
+
// Attempt to get initial device state
|
|
120
|
+
const success = await this.syncDeviceState();
|
|
121
|
+
if (!success) {
|
|
122
|
+
throw new Error('Failed to get initial device state - got null details');
|
|
124
123
|
}
|
|
125
124
|
}
|
|
126
125
|
/**
|
|
@@ -137,32 +136,51 @@ class BaseAccessory {
|
|
|
137
136
|
}
|
|
138
137
|
// Set up device-specific service
|
|
139
138
|
this.setupService();
|
|
140
|
-
//
|
|
141
|
-
this.
|
|
139
|
+
// Don't start polling immediately - wait for successful initialization
|
|
140
|
+
this.initializationPromise.then(() => {
|
|
141
|
+
if (this.isInitialized) {
|
|
142
|
+
this.startPolling();
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
this.logger.warn('=== INIT: Device failed to initialize, not starting polling ===', this.getLogContext());
|
|
146
|
+
}
|
|
147
|
+
});
|
|
142
148
|
}
|
|
143
149
|
/**
|
|
144
150
|
* Start polling for device updates
|
|
145
151
|
*/
|
|
146
152
|
startPolling() {
|
|
153
|
+
// Only start polling if device is initialized
|
|
154
|
+
if (!this.isInitialized) {
|
|
155
|
+
this.logger.warn('=== POLLING: Cannot start polling - device not initialized ===', this.getLogContext());
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
147
158
|
this.pollingManager.startPolling(async () => {
|
|
148
159
|
try {
|
|
149
|
-
// Wait for initialization before starting polling
|
|
150
|
-
await this.initializationPromise;
|
|
151
160
|
// Wait for platform to be ready
|
|
152
161
|
if (typeof this.platform.isReady === 'function') {
|
|
153
162
|
await this.platform.isReady();
|
|
154
163
|
}
|
|
164
|
+
// If device becomes uninitialized, try to reinitialize
|
|
155
165
|
if (!this.isInitialized) {
|
|
156
|
-
|
|
157
|
-
await this.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
166
|
+
this.logger.warn('=== POLLING: Device lost initialization, attempting to reinitialize ===', this.getLogContext());
|
|
167
|
+
await this.initialize();
|
|
168
|
+
if (!this.isInitialized) {
|
|
169
|
+
this.logger.error('=== POLLING: Failed to reinitialize device, stopping polling ===', this.getLogContext());
|
|
170
|
+
this.stopPolling();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
161
173
|
}
|
|
174
|
+
await this.syncDeviceState();
|
|
162
175
|
}
|
|
163
176
|
catch (error) {
|
|
164
177
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
165
178
|
this.logger.error('Failed during polling', this.getLogContext(), err);
|
|
179
|
+
// If error during polling and device is not initialized, stop polling
|
|
180
|
+
if (!this.isInitialized) {
|
|
181
|
+
this.logger.error('=== POLLING: Device not initialized after error, stopping polling ===', this.getLogContext());
|
|
182
|
+
this.stopPolling();
|
|
183
|
+
}
|
|
166
184
|
}
|
|
167
185
|
});
|
|
168
186
|
}
|
|
@@ -183,27 +201,20 @@ class BaseAccessory {
|
|
|
183
201
|
*/
|
|
184
202
|
async syncDeviceState() {
|
|
185
203
|
try {
|
|
186
|
-
|
|
187
|
-
this.
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
const details = await this.device.getDetails();
|
|
192
|
-
if (!details) {
|
|
193
|
-
throw new Error('Failed to get device details');
|
|
204
|
+
const details = await this.withRetry(async () => {
|
|
205
|
+
await this.device.getDetails();
|
|
206
|
+
// After getDetails(), the device object should have updated internal state
|
|
207
|
+
if (!this.device.deviceStatus) {
|
|
208
|
+
return null;
|
|
194
209
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
// Clear retry flag on success
|
|
198
|
-
this.needsRetry = false;
|
|
210
|
+
await this.updateDeviceSpecificStates(this.device);
|
|
211
|
+
return this.device;
|
|
199
212
|
}, 'sync device state');
|
|
213
|
+
return details !== null;
|
|
200
214
|
}
|
|
201
215
|
catch (error) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
this.logger.warn('Device not initialized, will retry initialization', this.getLogContext());
|
|
205
|
-
}
|
|
206
|
-
await this.handleDeviceError('Failed to sync device state', error instanceof Error ? error : new Error(String(error)));
|
|
216
|
+
this.isInitialized = false;
|
|
217
|
+
throw error;
|
|
207
218
|
}
|
|
208
219
|
}
|
|
209
220
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.accessory.js","sourceRoot":"","sources":["../../src/accessories/base.accessory.ts"],"names":[],"mappings":";;;AAGA,8DAA0D;AAC1D,0CAA8C;AAC9C,4CAA2D;AAE3D,MAAsB,aAAa;
|
|
1
|
+
{"version":3,"file":"base.accessory.js","sourceRoot":"","sources":["../../src/accessories/base.accessory.ts"],"names":[],"mappings":"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"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -27,6 +27,10 @@ export declare class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
27
27
|
* Check if platform is ready
|
|
28
28
|
*/
|
|
29
29
|
isReady(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Initialize all accessories
|
|
32
|
+
*/
|
|
33
|
+
private initializeAccessories;
|
|
30
34
|
/**
|
|
31
35
|
* Initialize the platform
|
|
32
36
|
*/
|
|
@@ -47,10 +51,6 @@ export declare class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
47
51
|
* Ensure client is logged in
|
|
48
52
|
*/
|
|
49
53
|
private ensureLogin;
|
|
50
|
-
/**
|
|
51
|
-
* Handle operation retry with token refresh
|
|
52
|
-
*/
|
|
53
|
-
withTokenRefresh<T>(operation: () => Promise<T>): Promise<T>;
|
|
54
54
|
/**
|
|
55
55
|
* Update device states from the API
|
|
56
56
|
*/
|
package/dist/platform.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM5H;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;aAoB1C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IArB1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IAGpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAE3E,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,aAAa,CAAS;gBAGZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM5H;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;aAoB1C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IArB1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IAGpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAE3E,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,aAAa,CAAS;gBAGZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;IAsE1B;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrC;;OAEG;YACW,qBAAqB;IAyBnC;;OAEG;YACW,kBAAkB;IAiChC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,WAAW;IAsCzB;;OAEG;IACU,yBAAyB,CAAC,cAAc,UAAQ;IAqD7D;;OAEG;YACW,kBAAkB;IAShC;;OAEG;IACG,eAAe;IA0ErB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAO3B"}
|
package/dist/platform.js
CHANGED
|
@@ -58,7 +58,10 @@ class TSVESyncPlatform {
|
|
|
58
58
|
await this.initializePlatform();
|
|
59
59
|
// Set up periodic device updates
|
|
60
60
|
this.deviceUpdateInterval = setInterval(() => {
|
|
61
|
-
this.updateDeviceStates()
|
|
61
|
+
this.updateDeviceStates().catch(error => {
|
|
62
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
63
|
+
this.log.error('=== UPDATE INTERVAL: Failed to update device states ===', err);
|
|
64
|
+
});
|
|
62
65
|
}, this.updateInterval * 1000);
|
|
63
66
|
}
|
|
64
67
|
catch (error) {
|
|
@@ -80,6 +83,29 @@ class TSVESyncPlatform {
|
|
|
80
83
|
await this.initializationPromise;
|
|
81
84
|
}
|
|
82
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Initialize all accessories
|
|
88
|
+
*/
|
|
89
|
+
async initializeAccessories() {
|
|
90
|
+
// Initialize accessories in batches to avoid overwhelming the API
|
|
91
|
+
const batchSize = 2;
|
|
92
|
+
const delay = 5000; // 5 second delay between batches
|
|
93
|
+
const accessories = Array.from(this.deviceAccessories.entries());
|
|
94
|
+
for (let i = 0; i < accessories.length; i += batchSize) {
|
|
95
|
+
const batch = accessories.slice(i, i + batchSize);
|
|
96
|
+
const batchPromises = batch.map(([uuid, accessory]) => {
|
|
97
|
+
var _a;
|
|
98
|
+
const deviceName = ((_a = this.accessories.find(acc => acc.UUID === uuid)) === null || _a === void 0 ? void 0 : _a.displayName) || uuid;
|
|
99
|
+
return accessory.initialize().catch(error => {
|
|
100
|
+
this.log.error(`=== INIT: Failed to initialize accessory ${deviceName} ===`, error);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
await Promise.all(batchPromises);
|
|
104
|
+
if (i + batchSize < accessories.length) {
|
|
105
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
83
109
|
/**
|
|
84
110
|
* Initialize the platform
|
|
85
111
|
*/
|
|
@@ -87,26 +113,22 @@ class TSVESyncPlatform {
|
|
|
87
113
|
try {
|
|
88
114
|
// Try to login first
|
|
89
115
|
if (!await this.ensureLogin()) {
|
|
116
|
+
this.log.error('=== INIT: Initial login failed ===');
|
|
90
117
|
throw new Error('Failed to login to VeSync API');
|
|
91
118
|
}
|
|
92
119
|
// Get devices from API
|
|
93
120
|
const success = await this.client.getDevices();
|
|
94
121
|
if (!success) {
|
|
122
|
+
this.log.error('=== INIT: Failed to get devices from API ===');
|
|
95
123
|
throw new Error('Failed to get devices from API');
|
|
96
124
|
}
|
|
97
125
|
// Discover devices
|
|
98
126
|
await this.discoverDevices();
|
|
99
|
-
//
|
|
100
|
-
const initPromises = Array.from(this.deviceAccessories.entries()).map(([uuid, accessory]) => {
|
|
101
|
-
var _a;
|
|
102
|
-
const deviceName = ((_a = this.accessories.find(acc => acc.UUID === uuid)) === null || _a === void 0 ? void 0 : _a.displayName) || uuid;
|
|
103
|
-
return accessory.initialize().catch(error => {
|
|
104
|
-
this.log.error(`Failed to initialize accessory ${deviceName}:`, error);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
await Promise.all(initPromises);
|
|
127
|
+
// Mark platform as initialized before accessory initialization
|
|
108
128
|
this.isInitialized = true;
|
|
109
129
|
this.initializationResolver();
|
|
130
|
+
// Initialize all accessories with staggered approach
|
|
131
|
+
await this.initializeAccessories();
|
|
110
132
|
}
|
|
111
133
|
catch (error) {
|
|
112
134
|
this.log.error('Failed to initialize platform:', error);
|
|
@@ -155,7 +177,7 @@ class TSVESyncPlatform {
|
|
|
155
177
|
/**
|
|
156
178
|
* Ensure client is logged in
|
|
157
179
|
*/
|
|
158
|
-
async ensureLogin(
|
|
180
|
+
async ensureLogin() {
|
|
159
181
|
try {
|
|
160
182
|
// Check if we need to wait due to backoff
|
|
161
183
|
const timeSinceLastAttempt = Date.now() - this.lastLoginAttempt.getTime();
|
|
@@ -190,22 +212,6 @@ class TSVESyncPlatform {
|
|
|
190
212
|
return false;
|
|
191
213
|
}
|
|
192
214
|
}
|
|
193
|
-
/**
|
|
194
|
-
* Handle operation retry with token refresh
|
|
195
|
-
*/
|
|
196
|
-
async withTokenRefresh(operation) {
|
|
197
|
-
try {
|
|
198
|
-
return await operation();
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
// If operation fails, try one login refresh and retry
|
|
202
|
-
const loginSuccess = await this.ensureLogin(true);
|
|
203
|
-
if (loginSuccess) {
|
|
204
|
-
return await operation();
|
|
205
|
-
}
|
|
206
|
-
throw error;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
215
|
/**
|
|
210
216
|
* Update device states from the API
|
|
211
217
|
*/
|
|
@@ -217,50 +223,57 @@ class TSVESyncPlatform {
|
|
|
217
223
|
return;
|
|
218
224
|
}
|
|
219
225
|
try {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
226
|
+
// Ensure we're logged in
|
|
227
|
+
const loginSuccess = await this.ensureLogin();
|
|
228
|
+
if (!loginSuccess) {
|
|
229
|
+
throw new Error('Failed to login for device state update');
|
|
230
|
+
}
|
|
231
|
+
// Get devices from API
|
|
232
|
+
const success = await this.client.getDevices();
|
|
233
|
+
if (!success) {
|
|
234
|
+
throw new Error('Failed to get devices from API');
|
|
235
|
+
}
|
|
236
|
+
// Get all devices
|
|
237
|
+
const devices = this.getAllDevices();
|
|
238
|
+
if (!devices || !devices.length) {
|
|
239
|
+
if (!isPolledUpdate) {
|
|
240
|
+
this.log.warn('=== UPDATE API: No devices found during state update ===');
|
|
225
241
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
// Update each device
|
|
245
|
+
for (const device of devices) {
|
|
246
|
+
const accessory = this.deviceAccessories.get(this.generateDeviceUUID(device));
|
|
247
|
+
if (accessory) {
|
|
248
|
+
try {
|
|
249
|
+
await accessory.syncDeviceState();
|
|
231
250
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
this.log.debug(`Updating states for ${devices.length} devices`);
|
|
236
|
-
}
|
|
237
|
-
// Update each device
|
|
238
|
-
for (const device of devices) {
|
|
239
|
-
const accessory = this.deviceAccessories.get(this.generateDeviceUUID(device));
|
|
240
|
-
if (accessory) {
|
|
241
|
-
try {
|
|
242
|
-
await accessory.syncDeviceState();
|
|
243
|
-
}
|
|
244
|
-
catch (error) {
|
|
245
|
-
this.log.error(`Failed to update state for device ${device.deviceName}:`, error);
|
|
246
|
-
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
253
|
+
this.log.error(`=== UPDATE API: Failed to update state for device ${device.deviceName} ===`, err);
|
|
247
254
|
}
|
|
248
255
|
}
|
|
249
|
-
}
|
|
256
|
+
}
|
|
250
257
|
}
|
|
251
258
|
catch (error) {
|
|
252
|
-
const
|
|
253
|
-
const errorMsg = (errorObj === null || errorObj === void 0 ? void 0 : errorObj.msg) || String(error);
|
|
259
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
254
260
|
if (!isPolledUpdate || this.debug) {
|
|
255
|
-
this.log.error('Failed to update device states
|
|
261
|
+
this.log.error('=== UPDATE API: Failed to update device states ===', err);
|
|
256
262
|
}
|
|
263
|
+
throw err;
|
|
257
264
|
}
|
|
258
265
|
}
|
|
259
266
|
/**
|
|
260
267
|
* Update device states periodically
|
|
261
268
|
*/
|
|
262
269
|
async updateDeviceStates() {
|
|
263
|
-
|
|
270
|
+
try {
|
|
271
|
+
await this.updateDeviceStatesFromAPI(true);
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
275
|
+
this.log.error('=== UPDATE STATES: Periodic update failed ===', err);
|
|
276
|
+
}
|
|
264
277
|
}
|
|
265
278
|
/**
|
|
266
279
|
* This function discovers and registers your devices as accessories
|