homebridge-tsvesync 1.0.30 → 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 +5 -0
- 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 -62
- 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/accessories/air-purifier.accessory.ts +3 -2
- package/src/accessories/base.accessory.ts +81 -70
- package/src/platform.ts +77 -64
- 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,55 +223,57 @@ class TSVESyncPlatform {
|
|
|
217
223
|
return;
|
|
218
224
|
}
|
|
219
225
|
try {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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 ===');
|
|
230
241
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
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();
|
|
236
250
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
this.log.debug(`Updating states for ${devices.length} devices`);
|
|
241
|
-
}
|
|
242
|
-
// Update each device
|
|
243
|
-
for (const device of devices) {
|
|
244
|
-
const accessory = this.deviceAccessories.get(this.generateDeviceUUID(device));
|
|
245
|
-
if (accessory) {
|
|
246
|
-
try {
|
|
247
|
-
await accessory.syncDeviceState();
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
this.log.error(`Failed to update state for device ${device.deviceName}:`, error);
|
|
251
|
-
}
|
|
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);
|
|
252
254
|
}
|
|
253
255
|
}
|
|
254
|
-
}
|
|
256
|
+
}
|
|
255
257
|
}
|
|
256
258
|
catch (error) {
|
|
257
|
-
const
|
|
258
|
-
const errorMsg = (errorObj === null || errorObj === void 0 ? void 0 : errorObj.msg) || String(error);
|
|
259
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
259
260
|
if (!isPolledUpdate || this.debug) {
|
|
260
|
-
this.log.error('Failed to update device states
|
|
261
|
+
this.log.error('=== UPDATE API: Failed to update device states ===', err);
|
|
261
262
|
}
|
|
263
|
+
throw err;
|
|
262
264
|
}
|
|
263
265
|
}
|
|
264
266
|
/**
|
|
265
267
|
* Update device states periodically
|
|
266
268
|
*/
|
|
267
269
|
async updateDeviceStates() {
|
|
268
|
-
|
|
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
|
+
}
|
|
269
277
|
}
|
|
270
278
|
/**
|
|
271
279
|
* This function discovers and registers your devices as accessories
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IAKrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGjB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,WAA+B;IAK1D;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACU,OAAO,CAAC,CAAC,EACpB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GACjD,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IAKrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGjB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,WAA+B;IAK1D;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACU,OAAO,CAAC,CAAC,EACpB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GACjD,OAAO,CAAC,CAAC,CAAC;CAsCd"}
|
package/dist/utils/retry.js
CHANGED
|
@@ -22,15 +22,29 @@ class RetryManager {
|
|
|
22
22
|
while (this.retryCount < this.maxRetries) {
|
|
23
23
|
try {
|
|
24
24
|
const result = await operation();
|
|
25
|
+
// If result is null and we have retries left, try again
|
|
26
|
+
if (result === null && this.retryCount < this.maxRetries - 1) {
|
|
27
|
+
this.retryCount++;
|
|
28
|
+
const delay = Math.min(2000 * Math.pow(2, this.retryCount - 1), 10000);
|
|
29
|
+
this.log.debug(`[${context.deviceName}] === RETRY MANAGER: Attempt ${this.retryCount}/${this.maxRetries}, waiting ${delay}ms ===`);
|
|
30
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
// If this is our last try and result is null, throw error
|
|
34
|
+
if (result === null && this.retryCount >= this.maxRetries - 1) {
|
|
35
|
+
throw new Error(`Failed to ${context.operation} - got null result after ${this.maxRetries} attempts`);
|
|
36
|
+
}
|
|
25
37
|
return result;
|
|
26
38
|
}
|
|
27
39
|
catch (error) {
|
|
28
40
|
this.retryCount++;
|
|
29
41
|
if (this.retryCount >= this.maxRetries) {
|
|
30
|
-
this.log.error(`[${context.deviceName}] Failed to ${context.operation} after ${this.maxRetries} attempts:`, error);
|
|
31
42
|
throw error;
|
|
32
43
|
}
|
|
33
|
-
|
|
44
|
+
// Calculate delay based on attempt number
|
|
45
|
+
const delay = Math.min(2000 * Math.pow(2, this.retryCount - 1), 10000);
|
|
46
|
+
this.log.debug(`[${context.deviceName}] === RETRY MANAGER: Attempt ${this.retryCount}/${this.maxRetries}, waiting ${delay}ms ===`);
|
|
47
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
34
48
|
}
|
|
35
49
|
}
|
|
36
50
|
throw new Error(`Failed to ${context.operation} after ${this.maxRetries} attempts`);
|
package/dist/utils/retry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":";;;AAMA,MAAa,YAAY;IAIvB,YACmB,GAAW,EACX,SAAsB,EAAE,UAAU,EAAE,CAAC,EAAE;QADvC,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAiC;QALlD,eAAU,GAAG,CAAC,CAAC;QAOrB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,aAAa;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAClB,SAA2B,EAC3B,OAAkD;QAElD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACxC,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":";;;AAMA,MAAa,YAAY;IAIvB,YACmB,GAAW,EACX,SAAsB,EAAE,UAAU,EAAE,CAAC,EAAE;QADvC,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAiC;QALlD,eAAU,GAAG,CAAC,CAAC;QAOrB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,aAAa;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAClB,SAA2B,EAC3B,OAAkD;QAElD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACxC,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;gBAEjC,wDAAwD;gBACxD,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;oBAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oBACvE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,gCAAgC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,CAAC;oBACnI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBACzD,SAAS;iBACV;gBAED,0DAA0D;gBAC1D,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;oBAC7D,MAAM,IAAI,KAAK,CAAC,aAAa,OAAO,CAAC,SAAS,4BAA4B,IAAI,CAAC,UAAU,WAAW,CAAC,CAAC;iBACvG;gBAED,OAAO,MAAM,CAAC;aACf;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,UAAU,EAAE,CAAC;gBAElB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;oBACtC,MAAM,KAAK,CAAC;iBACb;gBAED,0CAA0C;gBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACvE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,gCAAgC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,CAAC;gBACnI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;aAC1D;SACF;QAED,MAAM,IAAI,KAAK,CAAC,aAAa,OAAO,CAAC,SAAS,UAAU,IAAI,CAAC,UAAU,WAAW,CAAC,CAAC;IACtF,CAAC;CACF;AA9DD,oCA8DC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-tsvesync",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.31",
|
|
4
4
|
"description": "Homebridge plugin for VeSync devices including Levoit air purifiers, humidifiers, and Etekcity smart outlets",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"axios": "^1.6.5",
|
|
98
98
|
"dotenv": "^16.3.1",
|
|
99
99
|
"js-yaml": "^4.1.0",
|
|
100
|
-
"tsvesync": "1.0.
|
|
100
|
+
"tsvesync": "1.0.25"
|
|
101
101
|
},
|
|
102
102
|
"devDependencies": {
|
|
103
103
|
"@types/jest": "^29.5.11",
|
|
@@ -130,8 +130,9 @@ export class AirPurifierAccessory extends BaseAccessory {
|
|
|
130
130
|
this.service.updateCharacteristic(this.platform.Characteristic.CurrentAirPurifierState, isOn ? 2 : 0);
|
|
131
131
|
|
|
132
132
|
// Update rotation speed
|
|
133
|
-
const speed = details.speed;
|
|
134
|
-
const
|
|
133
|
+
const speed = details.speed ?? 0;
|
|
134
|
+
const maxSpeed = this.device.maxSpeed ?? 5; // Default to 5 if maxSpeed is not defined
|
|
135
|
+
const rotationSpeed = Math.round((speed / maxSpeed) * 100);
|
|
135
136
|
this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, rotationSpeed);
|
|
136
137
|
|
|
137
138
|
// Update air quality if available
|
|
@@ -18,6 +18,8 @@ export abstract class BaseAccessory {
|
|
|
18
18
|
private initializationPromise: Promise<void>;
|
|
19
19
|
private initializationResolver!: () => void;
|
|
20
20
|
private isInitializing = false;
|
|
21
|
+
private initializationAttempts = 0;
|
|
22
|
+
private readonly maxInitializationAttempts = 5;
|
|
21
23
|
|
|
22
24
|
constructor(
|
|
23
25
|
platform: TSVESyncPlatform,
|
|
@@ -81,25 +83,14 @@ export abstract class BaseAccessory {
|
|
|
81
83
|
operationName: string
|
|
82
84
|
): Promise<T> {
|
|
83
85
|
const context = this.getLogContext(operationName);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
|
|
86
87
|
try {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
deviceName: this.device.deviceName,
|
|
91
|
-
operation: operationName,
|
|
92
|
-
});
|
|
88
|
+
return await this.retryManager.execute(operation, {
|
|
89
|
+
deviceName: this.device.deviceName,
|
|
90
|
+
operation: operationName,
|
|
93
91
|
});
|
|
94
|
-
|
|
95
|
-
this.logger.operationEnd(context);
|
|
96
|
-
return result;
|
|
97
92
|
} catch (error) {
|
|
98
|
-
|
|
99
|
-
await this.handleDeviceError(
|
|
100
|
-
`Failed to ${operationName}`,
|
|
101
|
-
error instanceof Error ? error : new Error(String(error))
|
|
102
|
-
);
|
|
93
|
+
// Don't log here - let the error propagate up to be logged at a higher level
|
|
103
94
|
throw error;
|
|
104
95
|
}
|
|
105
96
|
}
|
|
@@ -148,16 +139,26 @@ export abstract class BaseAccessory {
|
|
|
148
139
|
|
|
149
140
|
this.isInitializing = true;
|
|
150
141
|
try {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
142
|
+
while (this.initializationAttempts < this.maxInitializationAttempts) {
|
|
143
|
+
try {
|
|
144
|
+
await this.initializeDeviceState();
|
|
145
|
+
this.isInitialized = true;
|
|
146
|
+
return;
|
|
147
|
+
} catch (error) {
|
|
148
|
+
this.initializationAttempts++;
|
|
149
|
+
|
|
150
|
+
if (this.initializationAttempts >= this.maxInitializationAttempts) {
|
|
151
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
152
|
+
this.logger.error(`=== INIT: Failed to initialize accessory after ${this.maxInitializationAttempts} attempts ===`, this.getLogContext(), err);
|
|
153
|
+
throw err;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const delay = Math.min(5000 * Math.pow(2, this.initializationAttempts - 1), 40000);
|
|
157
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
158
160
|
} finally {
|
|
159
161
|
this.isInitializing = false;
|
|
160
|
-
// Signal initialization completion regardless of success
|
|
161
162
|
this.initializationResolver();
|
|
162
163
|
}
|
|
163
164
|
}
|
|
@@ -166,19 +167,19 @@ export abstract class BaseAccessory {
|
|
|
166
167
|
* Initialize the device state
|
|
167
168
|
*/
|
|
168
169
|
private async initializeDeviceState(): Promise<void> {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// Attempt to get initial device state
|
|
176
|
-
await this.syncDeviceState();
|
|
177
|
-
} catch (error) {
|
|
178
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
179
|
-
this.logger.warn('Failed to get initial device state, will retry during polling', this.getLogContext());
|
|
180
|
-
throw err;
|
|
170
|
+
|
|
171
|
+
// Wait for platform to be ready
|
|
172
|
+
if (typeof this.platform.isReady === 'function') {
|
|
173
|
+
await this.platform.isReady();
|
|
181
174
|
}
|
|
175
|
+
|
|
176
|
+
// Attempt to get initial device state
|
|
177
|
+
const success = await this.syncDeviceState();
|
|
178
|
+
|
|
179
|
+
if (!success) {
|
|
180
|
+
throw new Error('Failed to get initial device state - got null details');
|
|
181
|
+
}
|
|
182
|
+
|
|
182
183
|
}
|
|
183
184
|
|
|
184
185
|
/**
|
|
@@ -197,33 +198,54 @@ export abstract class BaseAccessory {
|
|
|
197
198
|
// Set up device-specific service
|
|
198
199
|
this.setupService();
|
|
199
200
|
|
|
200
|
-
//
|
|
201
|
-
this.
|
|
201
|
+
// Don't start polling immediately - wait for successful initialization
|
|
202
|
+
this.initializationPromise.then(() => {
|
|
203
|
+
if (this.isInitialized) {
|
|
204
|
+
this.startPolling();
|
|
205
|
+
} else {
|
|
206
|
+
this.logger.warn('=== INIT: Device failed to initialize, not starting polling ===', this.getLogContext());
|
|
207
|
+
}
|
|
208
|
+
});
|
|
202
209
|
}
|
|
203
210
|
|
|
204
211
|
/**
|
|
205
212
|
* Start polling for device updates
|
|
206
213
|
*/
|
|
207
214
|
protected startPolling(): void {
|
|
215
|
+
// Only start polling if device is initialized
|
|
216
|
+
if (!this.isInitialized) {
|
|
217
|
+
this.logger.warn('=== POLLING: Cannot start polling - device not initialized ===', this.getLogContext());
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
208
221
|
this.pollingManager.startPolling(async () => {
|
|
209
222
|
try {
|
|
210
|
-
// Wait for initialization before starting polling
|
|
211
|
-
await this.initializationPromise;
|
|
212
|
-
|
|
213
223
|
// Wait for platform to be ready
|
|
214
224
|
if (typeof this.platform.isReady === 'function') {
|
|
215
225
|
await this.platform.isReady();
|
|
216
226
|
}
|
|
217
227
|
|
|
228
|
+
// If device becomes uninitialized, try to reinitialize
|
|
218
229
|
if (!this.isInitialized) {
|
|
219
|
-
|
|
220
|
-
await this.
|
|
221
|
-
|
|
222
|
-
|
|
230
|
+
this.logger.warn('=== POLLING: Device lost initialization, attempting to reinitialize ===', this.getLogContext());
|
|
231
|
+
await this.initialize();
|
|
232
|
+
if (!this.isInitialized) {
|
|
233
|
+
this.logger.error('=== POLLING: Failed to reinitialize device, stopping polling ===', this.getLogContext());
|
|
234
|
+
this.stopPolling();
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
223
237
|
}
|
|
238
|
+
|
|
239
|
+
await this.syncDeviceState();
|
|
224
240
|
} catch (error) {
|
|
225
241
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
226
242
|
this.logger.error('Failed during polling', this.getLogContext(), err);
|
|
243
|
+
|
|
244
|
+
// If error during polling and device is not initialized, stop polling
|
|
245
|
+
if (!this.isInitialized) {
|
|
246
|
+
this.logger.error('=== POLLING: Device not initialized after error, stopping polling ===', this.getLogContext());
|
|
247
|
+
this.stopPolling();
|
|
248
|
+
}
|
|
227
249
|
}
|
|
228
250
|
});
|
|
229
251
|
}
|
|
@@ -245,38 +267,27 @@ export abstract class BaseAccessory {
|
|
|
245
267
|
/**
|
|
246
268
|
* Sync the device state with VeSync
|
|
247
269
|
*/
|
|
248
|
-
public async syncDeviceState(): Promise<
|
|
270
|
+
public async syncDeviceState(): Promise<boolean> {
|
|
249
271
|
try {
|
|
250
|
-
|
|
251
|
-
this.platform.log.debug(`[${this.accessory.displayName}] Retrying previous failed operation`);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
await this.withRetry(
|
|
272
|
+
const details = await this.withRetry(
|
|
255
273
|
async () => {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
if (!
|
|
260
|
-
|
|
274
|
+
await this.device.getDetails();
|
|
275
|
+
|
|
276
|
+
// After getDetails(), the device object should have updated internal state
|
|
277
|
+
if (!this.device.deviceStatus) {
|
|
278
|
+
return null;
|
|
261
279
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
// Clear retry flag on success
|
|
267
|
-
this.needsRetry = false;
|
|
280
|
+
|
|
281
|
+
await this.updateDeviceSpecificStates(this.device);
|
|
282
|
+
return this.device;
|
|
268
283
|
},
|
|
269
284
|
'sync device state'
|
|
270
285
|
);
|
|
286
|
+
|
|
287
|
+
return details !== null;
|
|
271
288
|
} catch (error) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
this.logger.warn('Device not initialized, will retry initialization', this.getLogContext());
|
|
275
|
-
}
|
|
276
|
-
await this.handleDeviceError(
|
|
277
|
-
'Failed to sync device state',
|
|
278
|
-
error instanceof Error ? error : new Error(String(error))
|
|
279
|
-
);
|
|
289
|
+
this.isInitialized = false;
|
|
290
|
+
throw error;
|
|
280
291
|
}
|
|
281
292
|
}
|
|
282
293
|
|
package/src/platform.ts
CHANGED
|
@@ -83,7 +83,10 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
83
83
|
|
|
84
84
|
// Set up periodic device updates
|
|
85
85
|
this.deviceUpdateInterval = setInterval(() => {
|
|
86
|
-
this.updateDeviceStates()
|
|
86
|
+
this.updateDeviceStates().catch(error => {
|
|
87
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
88
|
+
this.log.error('=== UPDATE INTERVAL: Failed to update device states ===', err);
|
|
89
|
+
});
|
|
87
90
|
}, this.updateInterval * 1000);
|
|
88
91
|
} catch (error) {
|
|
89
92
|
this.log.error('Failed to initialize platform:', error);
|
|
@@ -107,6 +110,34 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
107
110
|
}
|
|
108
111
|
}
|
|
109
112
|
|
|
113
|
+
/**
|
|
114
|
+
* Initialize all accessories
|
|
115
|
+
*/
|
|
116
|
+
private async initializeAccessories(): Promise<void> {
|
|
117
|
+
|
|
118
|
+
// Initialize accessories in batches to avoid overwhelming the API
|
|
119
|
+
const batchSize = 2;
|
|
120
|
+
const delay = 5000; // 5 second delay between batches
|
|
121
|
+
const accessories = Array.from(this.deviceAccessories.entries());
|
|
122
|
+
|
|
123
|
+
for (let i = 0; i < accessories.length; i += batchSize) {
|
|
124
|
+
const batch = accessories.slice(i, i + batchSize);
|
|
125
|
+
|
|
126
|
+
const batchPromises = batch.map(([uuid, accessory]) => {
|
|
127
|
+
const deviceName = this.accessories.find(acc => acc.UUID === uuid)?.displayName || uuid;
|
|
128
|
+
return accessory.initialize().catch(error => {
|
|
129
|
+
this.log.error(`=== INIT: Failed to initialize accessory ${deviceName} ===`, error);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
await Promise.all(batchPromises);
|
|
134
|
+
|
|
135
|
+
if (i + batchSize < accessories.length) {
|
|
136
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
110
141
|
/**
|
|
111
142
|
* Initialize the platform
|
|
112
143
|
*/
|
|
@@ -114,30 +145,27 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
114
145
|
try {
|
|
115
146
|
// Try to login first
|
|
116
147
|
if (!await this.ensureLogin()) {
|
|
148
|
+
this.log.error('=== INIT: Initial login failed ===');
|
|
117
149
|
throw new Error('Failed to login to VeSync API');
|
|
118
150
|
}
|
|
119
151
|
|
|
120
152
|
// Get devices from API
|
|
121
153
|
const success = await this.client.getDevices();
|
|
122
154
|
if (!success) {
|
|
155
|
+
this.log.error('=== INIT: Failed to get devices from API ===');
|
|
123
156
|
throw new Error('Failed to get devices from API');
|
|
124
157
|
}
|
|
125
158
|
|
|
126
159
|
// Discover devices
|
|
127
160
|
await this.discoverDevices();
|
|
128
161
|
|
|
129
|
-
//
|
|
130
|
-
const initPromises = Array.from(this.deviceAccessories.entries()).map(([uuid, accessory]) => {
|
|
131
|
-
const deviceName = this.accessories.find(acc => acc.UUID === uuid)?.displayName || uuid;
|
|
132
|
-
return accessory.initialize().catch(error => {
|
|
133
|
-
this.log.error(`Failed to initialize accessory ${deviceName}:`, error);
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
await Promise.all(initPromises);
|
|
138
|
-
|
|
162
|
+
// Mark platform as initialized before accessory initialization
|
|
139
163
|
this.isInitialized = true;
|
|
140
164
|
this.initializationResolver();
|
|
165
|
+
|
|
166
|
+
// Initialize all accessories with staggered approach
|
|
167
|
+
await this.initializeAccessories();
|
|
168
|
+
|
|
141
169
|
} catch (error) {
|
|
142
170
|
this.log.error('Failed to initialize platform:', error);
|
|
143
171
|
// Still resolve the promise to allow retries during polling
|
|
@@ -189,7 +217,7 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
189
217
|
/**
|
|
190
218
|
* Ensure client is logged in
|
|
191
219
|
*/
|
|
192
|
-
private async ensureLogin(
|
|
220
|
+
private async ensureLogin(): Promise<boolean> {
|
|
193
221
|
try {
|
|
194
222
|
// Check if we need to wait due to backoff
|
|
195
223
|
const timeSinceLastAttempt = Date.now() - this.lastLoginAttempt.getTime();
|
|
@@ -227,22 +255,6 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
227
255
|
}
|
|
228
256
|
}
|
|
229
257
|
|
|
230
|
-
/**
|
|
231
|
-
* Handle operation retry with token refresh
|
|
232
|
-
*/
|
|
233
|
-
public async withTokenRefresh<T>(operation: () => Promise<T>): Promise<T> {
|
|
234
|
-
try {
|
|
235
|
-
return await operation();
|
|
236
|
-
} catch (error) {
|
|
237
|
-
// If operation fails, try one login refresh and retry
|
|
238
|
-
const loginSuccess = await this.ensureLogin(true);
|
|
239
|
-
if (loginSuccess) {
|
|
240
|
-
return await operation();
|
|
241
|
-
}
|
|
242
|
-
throw error;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
258
|
/**
|
|
247
259
|
* Update device states from the API
|
|
248
260
|
*/
|
|
@@ -255,51 +267,47 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
255
267
|
}
|
|
256
268
|
|
|
257
269
|
try {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// Get devices from API
|
|
266
|
-
const success = await this.client.getDevices();
|
|
267
|
-
if (!success) {
|
|
268
|
-
throw new Error('Failed to get devices from API');
|
|
269
|
-
}
|
|
270
|
+
// Ensure we're logged in
|
|
271
|
+
const loginSuccess = await this.ensureLogin();
|
|
272
|
+
if (!loginSuccess) {
|
|
273
|
+
throw new Error('Failed to login for device state update');
|
|
274
|
+
}
|
|
270
275
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
}
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
276
|
+
// Get devices from API
|
|
277
|
+
const success = await this.client.getDevices();
|
|
278
|
+
if (!success) {
|
|
279
|
+
throw new Error('Failed to get devices from API');
|
|
280
|
+
}
|
|
279
281
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
+
// Get all devices
|
|
283
|
+
const devices = this.getAllDevices();
|
|
284
|
+
if (!devices || !devices.length) {
|
|
285
|
+
if (!isPolledUpdate) {
|
|
286
|
+
this.log.warn('=== UPDATE API: No devices found during state update ===');
|
|
282
287
|
}
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
283
290
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
}
|
|
291
|
+
// Update each device
|
|
292
|
+
for (const device of devices) {
|
|
293
|
+
const accessory = this.deviceAccessories.get(this.generateDeviceUUID(device));
|
|
294
|
+
if (accessory) {
|
|
295
|
+
try {
|
|
296
|
+
await accessory.syncDeviceState();
|
|
297
|
+
} catch (error) {
|
|
298
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
299
|
+
this.log.error(`=== UPDATE API: Failed to update state for device ${device.deviceName} ===`, err);
|
|
293
300
|
}
|
|
294
301
|
}
|
|
295
|
-
}
|
|
302
|
+
}
|
|
303
|
+
|
|
296
304
|
} catch (error) {
|
|
297
|
-
const
|
|
298
|
-
const errorMsg = errorObj?.msg || String(error);
|
|
305
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
299
306
|
|
|
300
307
|
if (!isPolledUpdate || this.debug) {
|
|
301
|
-
this.log.error('Failed to update device states
|
|
308
|
+
this.log.error('=== UPDATE API: Failed to update device states ===', err);
|
|
302
309
|
}
|
|
310
|
+
throw err;
|
|
303
311
|
}
|
|
304
312
|
}
|
|
305
313
|
|
|
@@ -307,7 +315,12 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
307
315
|
* Update device states periodically
|
|
308
316
|
*/
|
|
309
317
|
private async updateDeviceStates() {
|
|
310
|
-
|
|
318
|
+
try {
|
|
319
|
+
await this.updateDeviceStatesFromAPI(true);
|
|
320
|
+
} catch (error) {
|
|
321
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
322
|
+
this.log.error('=== UPDATE STATES: Periodic update failed ===', err);
|
|
323
|
+
}
|
|
311
324
|
}
|
|
312
325
|
|
|
313
326
|
/**
|
package/src/utils/retry.ts
CHANGED
|
@@ -34,21 +34,33 @@ export class RetryManager {
|
|
|
34
34
|
while (this.retryCount < this.maxRetries) {
|
|
35
35
|
try {
|
|
36
36
|
const result = await operation();
|
|
37
|
+
|
|
38
|
+
// If result is null and we have retries left, try again
|
|
39
|
+
if (result === null && this.retryCount < this.maxRetries - 1) {
|
|
40
|
+
this.retryCount++;
|
|
41
|
+
const delay = Math.min(2000 * Math.pow(2, this.retryCount - 1), 10000);
|
|
42
|
+
this.log.debug(`[${context.deviceName}] === RETRY MANAGER: Attempt ${this.retryCount}/${this.maxRetries}, waiting ${delay}ms ===`);
|
|
43
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// If this is our last try and result is null, throw error
|
|
48
|
+
if (result === null && this.retryCount >= this.maxRetries - 1) {
|
|
49
|
+
throw new Error(`Failed to ${context.operation} - got null result after ${this.maxRetries} attempts`);
|
|
50
|
+
}
|
|
51
|
+
|
|
37
52
|
return result;
|
|
38
53
|
} catch (error) {
|
|
39
54
|
this.retryCount++;
|
|
40
55
|
|
|
41
56
|
if (this.retryCount >= this.maxRetries) {
|
|
42
|
-
this.log.error(
|
|
43
|
-
`[${context.deviceName}] Failed to ${context.operation} after ${this.maxRetries} attempts:`,
|
|
44
|
-
error
|
|
45
|
-
);
|
|
46
57
|
throw error;
|
|
47
58
|
}
|
|
48
59
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
);
|
|
60
|
+
// Calculate delay based on attempt number
|
|
61
|
+
const delay = Math.min(2000 * Math.pow(2, this.retryCount - 1), 10000);
|
|
62
|
+
this.log.debug(`[${context.deviceName}] === RETRY MANAGER: Attempt ${this.retryCount}/${this.maxRetries}, waiting ${delay}ms ===`);
|
|
63
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
52
64
|
}
|
|
53
65
|
}
|
|
54
66
|
|