homebridge-tsvesync 1.0.15 → 1.0.18
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/dist/__tests__/mocks/characteristic.mock.d.ts +32 -0
- package/dist/__tests__/mocks/characteristic.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/characteristic.mock.js +36 -0
- package/dist/__tests__/mocks/characteristic.mock.js.map +1 -0
- package/dist/__tests__/mocks/service.mock.d.ts +11 -0
- package/dist/__tests__/mocks/service.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/service.mock.js +19 -0
- package/dist/__tests__/mocks/service.mock.js.map +1 -0
- package/dist/__tests__/setup.d.ts +10 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +82 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/accessories/base.accessory.d.ts +1 -9
- package/dist/accessories/base.accessory.d.ts.map +1 -1
- package/dist/accessories/base.accessory.js +22 -45
- package/dist/accessories/base.accessory.js.map +1 -1
- package/dist/platform.d.ts +2 -0
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +124 -16
- package/dist/platform.js.map +1 -1
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/retry.d.ts +7 -8
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +18 -31
- package/dist/utils/retry.js.map +1 -1
- package/jest.config.js +25 -0
- package/package.json +10 -3
- package/src/__tests__/base.accessory.test.ts +322 -0
- package/src/__tests__/mocks/characteristic.mock.ts +31 -0
- package/src/__tests__/mocks/service.mock.ts +14 -0
- package/src/__tests__/platform.test.ts +347 -0
- package/src/__tests__/setup.ts +80 -0
- package/src/accessories/base.accessory.ts +20 -44
- package/src/platform.ts +134 -17
- package/src/types/tsvesync.d.ts +51 -0
- package/src/types.ts +21 -0
- package/src/utils/retry.ts +27 -47
- package/tsconfig.json +5 -4
- package/tsconfig.test.json +12 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare class MockCharacteristic {
|
|
2
|
+
static readonly On = "On";
|
|
3
|
+
static readonly Active = "Active";
|
|
4
|
+
static readonly Name = "Name";
|
|
5
|
+
static readonly Model = "Model";
|
|
6
|
+
static readonly Manufacturer = "Manufacturer";
|
|
7
|
+
static readonly SerialNumber = "SerialNumber";
|
|
8
|
+
static readonly FirmwareRevision = "FirmwareRevision";
|
|
9
|
+
static readonly RotationSpeed = "RotationSpeed";
|
|
10
|
+
static readonly CurrentAirPurifierState = "CurrentAirPurifierState";
|
|
11
|
+
static readonly TargetAirPurifierState = "TargetAirPurifierState";
|
|
12
|
+
static readonly CurrentFanState = "CurrentFanState";
|
|
13
|
+
static readonly TargetFanState = "TargetFanState";
|
|
14
|
+
static readonly FilterChangeIndication = "FilterChangeIndication";
|
|
15
|
+
static readonly FilterLifeLevel = "FilterLifeLevel";
|
|
16
|
+
static readonly AirQuality = "AirQuality";
|
|
17
|
+
static readonly PM2_5Density = "PM2_5Density";
|
|
18
|
+
static readonly CurrentRelativeHumidity = "CurrentRelativeHumidity";
|
|
19
|
+
static readonly TargetRelativeHumidity = "TargetRelativeHumidity";
|
|
20
|
+
static readonly WaterLevel = "WaterLevel";
|
|
21
|
+
static readonly LockPhysicalControls = "LockPhysicalControls";
|
|
22
|
+
static readonly SwingMode = "SwingMode";
|
|
23
|
+
static readonly Brightness = "Brightness";
|
|
24
|
+
static readonly ColorTemperature = "ColorTemperature";
|
|
25
|
+
static readonly Hue = "Hue";
|
|
26
|
+
static readonly Saturation = "Saturation";
|
|
27
|
+
static readonly OutletInUse = "OutletInUse";
|
|
28
|
+
static readonly Voltage = "Voltage";
|
|
29
|
+
static readonly ElectricCurrent = "ElectricCurrent";
|
|
30
|
+
static readonly PowerMeterVisible = "PowerMeterVisible";
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=characteristic.mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"characteristic.mock.d.ts","sourceRoot":"","sources":["../../../src/__tests__/mocks/characteristic.mock.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAChC,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,gBAAgB,sBAAsB;IACtD,MAAM,CAAC,QAAQ,CAAC,aAAa,mBAAmB;IAChD,MAAM,CAAC,QAAQ,CAAC,uBAAuB,6BAA6B;IACpE,MAAM,CAAC,QAAQ,CAAC,sBAAsB,4BAA4B;IAClE,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,cAAc,oBAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,sBAAsB,4BAA4B;IAClE,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,uBAAuB,6BAA6B;IACpE,MAAM,CAAC,QAAQ,CAAC,sBAAsB,4BAA4B;IAClE,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,oBAAoB,0BAA0B;IAC9D,MAAM,CAAC,QAAQ,CAAC,SAAS,eAAe;IACxC,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,gBAAgB,sBAAsB;IACtD,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,WAAW,iBAAiB;IAC5C,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IACpC,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,uBAAuB;CACzD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockCharacteristic = void 0;
|
|
4
|
+
class MockCharacteristic {
|
|
5
|
+
}
|
|
6
|
+
exports.MockCharacteristic = MockCharacteristic;
|
|
7
|
+
MockCharacteristic.On = 'On';
|
|
8
|
+
MockCharacteristic.Active = 'Active';
|
|
9
|
+
MockCharacteristic.Name = 'Name';
|
|
10
|
+
MockCharacteristic.Model = 'Model';
|
|
11
|
+
MockCharacteristic.Manufacturer = 'Manufacturer';
|
|
12
|
+
MockCharacteristic.SerialNumber = 'SerialNumber';
|
|
13
|
+
MockCharacteristic.FirmwareRevision = 'FirmwareRevision';
|
|
14
|
+
MockCharacteristic.RotationSpeed = 'RotationSpeed';
|
|
15
|
+
MockCharacteristic.CurrentAirPurifierState = 'CurrentAirPurifierState';
|
|
16
|
+
MockCharacteristic.TargetAirPurifierState = 'TargetAirPurifierState';
|
|
17
|
+
MockCharacteristic.CurrentFanState = 'CurrentFanState';
|
|
18
|
+
MockCharacteristic.TargetFanState = 'TargetFanState';
|
|
19
|
+
MockCharacteristic.FilterChangeIndication = 'FilterChangeIndication';
|
|
20
|
+
MockCharacteristic.FilterLifeLevel = 'FilterLifeLevel';
|
|
21
|
+
MockCharacteristic.AirQuality = 'AirQuality';
|
|
22
|
+
MockCharacteristic.PM2_5Density = 'PM2_5Density';
|
|
23
|
+
MockCharacteristic.CurrentRelativeHumidity = 'CurrentRelativeHumidity';
|
|
24
|
+
MockCharacteristic.TargetRelativeHumidity = 'TargetRelativeHumidity';
|
|
25
|
+
MockCharacteristic.WaterLevel = 'WaterLevel';
|
|
26
|
+
MockCharacteristic.LockPhysicalControls = 'LockPhysicalControls';
|
|
27
|
+
MockCharacteristic.SwingMode = 'SwingMode';
|
|
28
|
+
MockCharacteristic.Brightness = 'Brightness';
|
|
29
|
+
MockCharacteristic.ColorTemperature = 'ColorTemperature';
|
|
30
|
+
MockCharacteristic.Hue = 'Hue';
|
|
31
|
+
MockCharacteristic.Saturation = 'Saturation';
|
|
32
|
+
MockCharacteristic.OutletInUse = 'OutletInUse';
|
|
33
|
+
MockCharacteristic.Voltage = 'Voltage';
|
|
34
|
+
MockCharacteristic.ElectricCurrent = 'ElectricCurrent';
|
|
35
|
+
MockCharacteristic.PowerMeterVisible = 'PowerMeterVisible';
|
|
36
|
+
//# sourceMappingURL=characteristic.mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"characteristic.mock.js","sourceRoot":"","sources":["../../../src/__tests__/mocks/characteristic.mock.ts"],"names":[],"mappings":";;;AAAA,MAAa,kBAAkB;;AAA/B,gDA8BC;AA7BiB,qBAAE,GAAG,IAAI,CAAC;AACV,yBAAM,GAAG,QAAQ,CAAC;AAClB,uBAAI,GAAG,MAAM,CAAC;AACd,wBAAK,GAAG,OAAO,CAAC;AAChB,+BAAY,GAAG,cAAc,CAAC;AAC9B,+BAAY,GAAG,cAAc,CAAC;AAC9B,mCAAgB,GAAG,kBAAkB,CAAC;AACtC,gCAAa,GAAG,eAAe,CAAC;AAChC,0CAAuB,GAAG,yBAAyB,CAAC;AACpD,yCAAsB,GAAG,wBAAwB,CAAC;AAClD,kCAAe,GAAG,iBAAiB,CAAC;AACpC,iCAAc,GAAG,gBAAgB,CAAC;AAClC,yCAAsB,GAAG,wBAAwB,CAAC;AAClD,kCAAe,GAAG,iBAAiB,CAAC;AACpC,6BAAU,GAAG,YAAY,CAAC;AAC1B,+BAAY,GAAG,cAAc,CAAC;AAC9B,0CAAuB,GAAG,yBAAyB,CAAC;AACpD,yCAAsB,GAAG,wBAAwB,CAAC;AAClD,6BAAU,GAAG,YAAY,CAAC;AAC1B,uCAAoB,GAAG,sBAAsB,CAAC;AAC9C,4BAAS,GAAG,WAAW,CAAC;AACxB,6BAAU,GAAG,YAAY,CAAC;AAC1B,mCAAgB,GAAG,kBAAkB,CAAC;AACtC,sBAAG,GAAG,KAAK,CAAC;AACZ,6BAAU,GAAG,YAAY,CAAC;AAC1B,8BAAW,GAAG,aAAa,CAAC;AAC5B,0BAAO,GAAG,SAAS,CAAC;AACpB,kCAAe,GAAG,iBAAiB,CAAC;AACpC,oCAAiB,GAAG,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="jest" />
|
|
2
|
+
export declare class MockService {
|
|
3
|
+
readonly UUID: string;
|
|
4
|
+
constructor(UUID: string);
|
|
5
|
+
getCharacteristic(): {
|
|
6
|
+
on: jest.Mock<any, any, any>;
|
|
7
|
+
updateValue: jest.Mock<any, any, any>;
|
|
8
|
+
};
|
|
9
|
+
setCharacteristic(): this;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=service.mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.mock.d.ts","sourceRoot":"","sources":["../../../src/__tests__/mocks/service.mock.ts"],"names":[],"mappings":";AAAA,qBAAa,WAAW;aACM,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAExC,iBAAiB;;;;IAOjB,iBAAiB;CAGlB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockService = void 0;
|
|
4
|
+
class MockService {
|
|
5
|
+
constructor(UUID) {
|
|
6
|
+
this.UUID = UUID;
|
|
7
|
+
}
|
|
8
|
+
getCharacteristic() {
|
|
9
|
+
return {
|
|
10
|
+
on: jest.fn().mockReturnThis(),
|
|
11
|
+
updateValue: jest.fn(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
setCharacteristic() {
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.MockService = MockService;
|
|
19
|
+
//# sourceMappingURL=service.mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.mock.js","sourceRoot":"","sources":["../../../src/__tests__/mocks/service.mock.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IACtB,YAA4B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE5C,iBAAiB;QACf,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;YAC9B,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;SACvB,CAAC;IACJ,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAbD,kCAaC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="jest" />
|
|
2
|
+
export declare const TEST_CONFIG: {
|
|
3
|
+
username: string | undefined;
|
|
4
|
+
password: string | undefined;
|
|
5
|
+
apiUrl: string | undefined;
|
|
6
|
+
};
|
|
7
|
+
export declare const canRunIntegrationTests: () => boolean;
|
|
8
|
+
export declare const skipWithoutCredentials: () => jest.It;
|
|
9
|
+
export declare const resetApiUrl: () => void;
|
|
10
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":";AAwCA,eAAO,MAAM,WAAW;;;;CAIvB,CAAC;AAaF,eAAO,MAAM,sBAAsB,QAAO,OAMzC,CAAC;AAGF,eAAO,MAAM,sBAAsB,eAKlC,CAAC;AAGF,eAAO,MAAM,WAAW,YAKvB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resetApiUrl = exports.skipWithoutCredentials = exports.canRunIntegrationTests = exports.TEST_CONFIG = void 0;
|
|
7
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const helpers_1 = require("tsvesync/src/lib/helpers");
|
|
10
|
+
// Load test environment variables
|
|
11
|
+
const envPath = path_1.default.resolve(__dirname, '../../.env.test');
|
|
12
|
+
if (process.env.DEBUG) {
|
|
13
|
+
console.log('Loading environment variables from:', envPath);
|
|
14
|
+
}
|
|
15
|
+
const result = dotenv_1.default.config({ path: envPath });
|
|
16
|
+
if (process.env.DEBUG) {
|
|
17
|
+
if (result.error) {
|
|
18
|
+
console.log('Error loading .env.test:', result.error);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.log('Environment variables loaded:', {
|
|
22
|
+
VESYNC_TEST_USERNAME: process.env.VESYNC_TEST_USERNAME,
|
|
23
|
+
VESYNC_TEST_PASSWORD: process.env.VESYNC_TEST_PASSWORD ? '***' : undefined,
|
|
24
|
+
VESYNC_API_URL: process.env.VESYNC_API_URL,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Helper to check if a string is not empty or commented out
|
|
29
|
+
const isValidEnvVar = (value) => {
|
|
30
|
+
return !!value && !value.startsWith('#');
|
|
31
|
+
};
|
|
32
|
+
// Set API URL if provided in environment variables
|
|
33
|
+
const apiUrl = process.env.VESYNC_API_URL;
|
|
34
|
+
if (process.env.DEBUG) {
|
|
35
|
+
console.log('API URL from env:', apiUrl);
|
|
36
|
+
}
|
|
37
|
+
if (isValidEnvVar(apiUrl)) {
|
|
38
|
+
if (process.env.DEBUG) {
|
|
39
|
+
console.log('Setting API URL to:', apiUrl);
|
|
40
|
+
}
|
|
41
|
+
(0, helpers_1.setApiBaseUrl)(apiUrl);
|
|
42
|
+
}
|
|
43
|
+
exports.TEST_CONFIG = {
|
|
44
|
+
username: isValidEnvVar(process.env.VESYNC_TEST_USERNAME) ? process.env.VESYNC_TEST_USERNAME : undefined,
|
|
45
|
+
password: isValidEnvVar(process.env.VESYNC_TEST_PASSWORD) ? process.env.VESYNC_TEST_PASSWORD : undefined,
|
|
46
|
+
apiUrl: isValidEnvVar(process.env.VESYNC_API_URL) ? process.env.VESYNC_API_URL : undefined,
|
|
47
|
+
};
|
|
48
|
+
if (process.env.DEBUG) {
|
|
49
|
+
console.log('Test config:', {
|
|
50
|
+
hasUsername: !!exports.TEST_CONFIG.username,
|
|
51
|
+
hasPassword: !!exports.TEST_CONFIG.password,
|
|
52
|
+
apiUrl: exports.TEST_CONFIG.apiUrl,
|
|
53
|
+
username: exports.TEST_CONFIG.username,
|
|
54
|
+
password: exports.TEST_CONFIG.password ? '***' : undefined,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// Helper to check if we can run integration tests
|
|
58
|
+
const canRunIntegrationTests = () => {
|
|
59
|
+
const canRun = !!(exports.TEST_CONFIG.username && exports.TEST_CONFIG.password);
|
|
60
|
+
if (process.env.DEBUG) {
|
|
61
|
+
console.log('Can run integration tests:', canRun);
|
|
62
|
+
}
|
|
63
|
+
return canRun;
|
|
64
|
+
};
|
|
65
|
+
exports.canRunIntegrationTests = canRunIntegrationTests;
|
|
66
|
+
// Helper to skip tests that require real credentials
|
|
67
|
+
const skipWithoutCredentials = () => {
|
|
68
|
+
if (!(0, exports.canRunIntegrationTests)()) {
|
|
69
|
+
return test.skip;
|
|
70
|
+
}
|
|
71
|
+
return test;
|
|
72
|
+
};
|
|
73
|
+
exports.skipWithoutCredentials = skipWithoutCredentials;
|
|
74
|
+
// Export a function to reset API URL for mocked tests
|
|
75
|
+
const resetApiUrl = () => {
|
|
76
|
+
if (process.env.DEBUG) {
|
|
77
|
+
console.log('Resetting API URL to default');
|
|
78
|
+
}
|
|
79
|
+
(0, helpers_1.setApiBaseUrl)('https://smartapi.vesync.com');
|
|
80
|
+
};
|
|
81
|
+
exports.resetApiUrl = resetApiUrl;
|
|
82
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,14 +74,6 @@ export declare abstract class BaseAccessory {
|
|
|
74
74
|
/**
|
|
75
75
|
* Handle device errors with appropriate recovery actions
|
|
76
76
|
*/
|
|
77
|
-
protected handleDeviceError(
|
|
78
|
-
/**
|
|
79
|
-
* Attempt to reconnect to the device by triggering device discovery
|
|
80
|
-
*/
|
|
81
|
-
private attemptReconnection;
|
|
82
|
-
/**
|
|
83
|
-
* Mark the device for retry on next update cycle
|
|
84
|
-
*/
|
|
85
|
-
private markForRetry;
|
|
77
|
+
protected handleDeviceError(message: string, error: Error | any): Promise<void>;
|
|
86
78
|
}
|
|
87
79
|
//# sourceMappingURL=base.accessory.d.ts.map
|
|
@@ -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;gBAGzB,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,qBAAqB;IA6B/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;cACa,SAAS,CAAC,CAAC,EACzB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,CAAC,CAAC;IAsBb;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;IAEvC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1E;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,IAAI,kBAAkB;IAE9D;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM;IAgBjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAM9B;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAI7B;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIrD;;OAEG;cACa,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BhD;;OAEG;IACH,SAAS,CAAC,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQ1D;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAC3B,cAAc,EAAE,GAAG,EACnB,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,EAC1C,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,EACrD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,OAAO,GAChB,IAAI;IAwDP;;OAEG;IACH,SAAS,CAAC,yBAAyB,CACjC,cAAc,EAAE,GAAG,EACnB,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAUP;;OAEG;cACa,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB9E;;OAEG;cACa,iBAAiB,CAAC,
|
|
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;gBAGzB,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,qBAAqB;IA6B/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;cACa,SAAS,CAAC,CAAC,EACzB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,CAAC,CAAC;IAsBb;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;IAEvC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1E;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,IAAI,kBAAkB;IAE9D;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM;IAgBjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAM9B;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAI7B;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIrD;;OAEG;cACa,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BhD;;OAEG;IACH,SAAS,CAAC,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQ1D;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAC3B,cAAc,EAAE,GAAG,EACnB,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,EAC1C,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,EACrD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,OAAO,GAChB,IAAI;IAwDP;;OAEG;IACH,SAAS,CAAC,yBAAyB,CACjC,cAAc,EAAE,GAAG,EACnB,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAUP;;OAEG;cACa,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB9E;;OAEG;cACa,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BtF"}
|
|
@@ -215,51 +215,28 @@ class BaseAccessory {
|
|
|
215
215
|
/**
|
|
216
216
|
* Handle device errors with appropriate recovery actions
|
|
217
217
|
*/
|
|
218
|
-
async handleDeviceError(
|
|
219
|
-
var _a, _b;
|
|
220
|
-
const
|
|
221
|
-
const
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
this.markForRetry();
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Attempt to reconnect to the device by triggering device discovery
|
|
248
|
-
*/
|
|
249
|
-
async attemptReconnection() {
|
|
250
|
-
try {
|
|
251
|
-
// Attempt to refresh the device list
|
|
252
|
-
await this.platform.discoverDevices();
|
|
253
|
-
this.platform.log.info(`[${this.accessory.displayName}] Successfully refreshed device list`);
|
|
254
|
-
}
|
|
255
|
-
catch (error) {
|
|
256
|
-
this.platform.log.error(`[${this.accessory.displayName}] Failed to reconnect: ${error}`);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Mark the device for retry on next update cycle
|
|
261
|
-
*/
|
|
262
|
-
markForRetry() {
|
|
218
|
+
async handleDeviceError(message, error) {
|
|
219
|
+
var _a, _b, _c, _d, _e, _f;
|
|
220
|
+
const context = this.getLogContext();
|
|
221
|
+
const retryCount = this.retryManager.getRetryCount();
|
|
222
|
+
const wrappedError = error instanceof Error ? error : new Error(JSON.stringify(error));
|
|
223
|
+
// Handle device not found error
|
|
224
|
+
if (((_a = error === null || error === void 0 ? void 0 : error.error) === null || _a === void 0 ? void 0 : _a.code) === 4041008 || ((_c = (_b = error === null || error === void 0 ? void 0 : error.error) === null || _b === void 0 ? void 0 : _b.msg) === null || _c === void 0 ? void 0 : _c.includes('Device not found'))) {
|
|
225
|
+
this.logger.warn('Device not found', context, wrappedError);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
// Handle rate limit error
|
|
229
|
+
if (((_d = error === null || error === void 0 ? void 0 : error.message) === null || _d === void 0 ? void 0 : _d.includes('rate limit')) || ((_e = error === null || error === void 0 ? void 0 : error.message) === null || _e === void 0 ? void 0 : _e.includes('429'))) {
|
|
230
|
+
this.logger.warn(`Hit API rate limit (attempt ${retryCount})`, context, wrappedError);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
// Handle network errors
|
|
234
|
+
if (((_f = error === null || error === void 0 ? void 0 : error.code) === null || _f === void 0 ? void 0 : _f.startsWith('ECONN')) || (error === null || error === void 0 ? void 0 : error.code) === 'ETIMEDOUT') {
|
|
235
|
+
this.logger.warn('Network error', context, wrappedError);
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
// Handle other errors
|
|
239
|
+
this.logger.error(message, context, wrappedError);
|
|
263
240
|
this.needsRetry = true;
|
|
264
241
|
}
|
|
265
242
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.accessory.js","sourceRoot":"","sources":["../../src/accessories/base.accessory.ts"],"names":[],"mappings":"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
|
|
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
|
@@ -17,6 +17,8 @@ export declare class TSVESyncPlatform implements DynamicPlatformPlugin {
|
|
|
17
17
|
private readonly updateInterval;
|
|
18
18
|
private readonly debug;
|
|
19
19
|
private lastLogin;
|
|
20
|
+
private lastLoginAttempt;
|
|
21
|
+
private loginBackoffTime;
|
|
20
22
|
constructor(log: Logger, config: PlatformConfig, api: API);
|
|
21
23
|
/**
|
|
22
24
|
* This function is invoked when homebridge restores cached accessories from disk at startup.
|
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;
|
|
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;AAO5H;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;aAiB1C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IAlB1B,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;gBAGd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;IAyD1B;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,WAAW;IAyEzB;;;OAGG;IACU,yBAAyB,CAAC,cAAc,UAAQ;IAkH7D;;OAEG;YACW,kBAAkB;IAIhC;;OAEG;IACG,eAAe;CAyEtB"}
|
package/dist/platform.js
CHANGED
|
@@ -20,6 +20,8 @@ class TSVESyncPlatform {
|
|
|
20
20
|
this.accessories = [];
|
|
21
21
|
this.deviceAccessories = new Map();
|
|
22
22
|
this.lastLogin = new Date(0); // Track last successful login
|
|
23
|
+
this.lastLoginAttempt = new Date(0);
|
|
24
|
+
this.loginBackoffTime = 1000; // Start with 1 second
|
|
23
25
|
// Validate configuration
|
|
24
26
|
if (!config.username || !config.password) {
|
|
25
27
|
log.error('Missing required configuration. Please check your config.json');
|
|
@@ -28,14 +30,16 @@ class TSVESyncPlatform {
|
|
|
28
30
|
// Get config values with defaults
|
|
29
31
|
this.updateInterval = config.updateInterval || 30;
|
|
30
32
|
this.debug = config.debug || false;
|
|
31
|
-
// Initialize VeSync client
|
|
32
|
-
this.client = new tsvesync_1.VeSync(config.username, config.password, Intl.DateTimeFormat().resolvedOptions().timeZone, this.debug
|
|
33
|
+
// Initialize VeSync client with all configuration
|
|
34
|
+
this.client = new tsvesync_1.VeSync(config.username, config.password, Intl.DateTimeFormat().resolvedOptions().timeZone, this.debug, true, // redact sensitive info
|
|
35
|
+
config.apiUrl, this.log);
|
|
33
36
|
if (this.debug) {
|
|
34
37
|
this.log.debug('Initialized platform with config:', {
|
|
35
38
|
name: config.name,
|
|
36
39
|
username: config.username,
|
|
37
40
|
updateInterval: this.updateInterval,
|
|
38
41
|
debug: this.debug,
|
|
42
|
+
apiUrl: config.apiUrl,
|
|
39
43
|
});
|
|
40
44
|
}
|
|
41
45
|
this.log.info('Finished initializing platform:', this.config.name);
|
|
@@ -99,6 +103,7 @@ class TSVESyncPlatform {
|
|
|
99
103
|
* Ensure client is logged in, but avoid unnecessary logins
|
|
100
104
|
*/
|
|
101
105
|
async ensureLogin(forceLogin = false) {
|
|
106
|
+
var _a, _b;
|
|
102
107
|
try {
|
|
103
108
|
// If not forcing login and last login was less than 23 hours ago, try using existing session
|
|
104
109
|
const loginAge = Date.now() - this.lastLogin.getTime();
|
|
@@ -108,16 +113,58 @@ class TSVESyncPlatform {
|
|
|
108
113
|
}
|
|
109
114
|
return true;
|
|
110
115
|
}
|
|
116
|
+
// Check if we need to wait due to backoff
|
|
117
|
+
const timeSinceLastAttempt = Date.now() - this.lastLoginAttempt.getTime();
|
|
118
|
+
if (timeSinceLastAttempt < this.loginBackoffTime) {
|
|
119
|
+
const waitTime = this.loginBackoffTime - timeSinceLastAttempt;
|
|
120
|
+
if (this.debug) {
|
|
121
|
+
this.log.debug(`Waiting ${waitTime}ms before next login attempt`);
|
|
122
|
+
}
|
|
123
|
+
await new Promise(resolve => setTimeout(resolve, waitTime));
|
|
124
|
+
}
|
|
111
125
|
// Need to login again
|
|
112
126
|
if (this.debug) {
|
|
113
127
|
this.log.debug(forceLogin ? 'Forcing new login to VeSync API' : 'Logging in to VeSync API');
|
|
114
128
|
}
|
|
115
|
-
|
|
129
|
+
this.lastLoginAttempt = new Date();
|
|
130
|
+
const loginResult = await this.client.login();
|
|
131
|
+
if (!loginResult) {
|
|
132
|
+
this.log.error('Login failed - invalid credentials or API error');
|
|
133
|
+
this.loginBackoffTime = Math.min(this.loginBackoffTime * 2, 300000);
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
116
136
|
this.lastLogin = new Date();
|
|
137
|
+
// Reset backoff on successful login
|
|
138
|
+
this.loginBackoffTime = 1000;
|
|
117
139
|
return true;
|
|
118
140
|
}
|
|
119
141
|
catch (error) {
|
|
120
|
-
|
|
142
|
+
// Handle specific "Not logged in" error
|
|
143
|
+
const errorObj = error;
|
|
144
|
+
const errorMsg = ((_a = errorObj === null || errorObj === void 0 ? void 0 : errorObj.error) === null || _a === void 0 ? void 0 : _a.msg) || (errorObj === null || errorObj === void 0 ? void 0 : errorObj.msg) || String(error);
|
|
145
|
+
if (errorMsg.includes('Not logged in')) {
|
|
146
|
+
if (this.debug) {
|
|
147
|
+
this.log.debug('Session expired, forcing new login');
|
|
148
|
+
}
|
|
149
|
+
// Clear last login time to force a new login on next attempt
|
|
150
|
+
this.lastLogin = new Date(0);
|
|
151
|
+
// Use minimal backoff for session expiry
|
|
152
|
+
this.loginBackoffTime = Math.min(this.loginBackoffTime, 5000);
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
// Increase backoff time exponentially, max 5 minutes
|
|
156
|
+
this.loginBackoffTime = Math.min(this.loginBackoffTime * 2, 300000);
|
|
157
|
+
const errorCode = ((_b = errorObj === null || errorObj === void 0 ? void 0 : errorObj.error) === null || _b === void 0 ? void 0 : _b.code) || (errorObj === null || errorObj === void 0 ? void 0 : errorObj.code);
|
|
158
|
+
if (errorCode === 'ECONNRESET' || errorCode === 'ETIMEDOUT' || errorMsg.includes('timeout')) {
|
|
159
|
+
this.log.warn('Network error during login, will retry with backoff:', errorMsg);
|
|
160
|
+
}
|
|
161
|
+
else if (errorMsg.includes('rate limit')) {
|
|
162
|
+
this.log.warn('Hit API rate limit, will retry with longer backoff');
|
|
163
|
+
this.loginBackoffTime = Math.max(this.loginBackoffTime, 60000); // At least 1 minute for rate limits
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
this.log.error('Failed to login:', errorMsg);
|
|
167
|
+
}
|
|
121
168
|
return false;
|
|
122
169
|
}
|
|
123
170
|
}
|
|
@@ -126,19 +173,63 @@ class TSVESyncPlatform {
|
|
|
126
173
|
* @param isPolledUpdate Whether this update is from the polling interval
|
|
127
174
|
*/
|
|
128
175
|
async updateDeviceStatesFromAPI(isPolledUpdate = false) {
|
|
176
|
+
var _a, _b;
|
|
129
177
|
try {
|
|
130
178
|
if (this.debug) {
|
|
131
179
|
this.log.debug(isPolledUpdate ? 'Polling device states' : 'Updating device states on demand');
|
|
132
180
|
}
|
|
133
181
|
// Try using cached login first
|
|
134
|
-
|
|
135
|
-
|
|
182
|
+
let loginSuccess = await this.ensureLogin();
|
|
183
|
+
if (!loginSuccess) {
|
|
184
|
+
// If first login fails, try one more time with force login
|
|
185
|
+
this.log.debug('Initial login failed, attempting forced login...');
|
|
186
|
+
loginSuccess = await this.ensureLogin(true);
|
|
187
|
+
if (!loginSuccess) {
|
|
188
|
+
this.log.error('Failed to login after retry, will attempt again later');
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
136
191
|
}
|
|
137
|
-
// Get fresh device list
|
|
138
|
-
let success =
|
|
139
|
-
|
|
192
|
+
// Get fresh device list with retries
|
|
193
|
+
let success = false;
|
|
194
|
+
let retryCount = 0;
|
|
195
|
+
const maxRetries = 3;
|
|
196
|
+
while (!success && retryCount < maxRetries) {
|
|
197
|
+
try {
|
|
198
|
+
success = await this.client.getDevices();
|
|
199
|
+
if (!success) {
|
|
200
|
+
if (retryCount < maxRetries - 1) {
|
|
201
|
+
this.log.debug(`Failed to get devices (attempt ${retryCount + 1}/${maxRetries}), retrying...`);
|
|
202
|
+
await new Promise(resolve => setTimeout(resolve, Math.pow(2, retryCount) * 1000));
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
this.log.error('Failed to get devices after all retries');
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
const errorObj = error;
|
|
211
|
+
const errorMsg = ((_a = errorObj === null || errorObj === void 0 ? void 0 : errorObj.error) === null || _a === void 0 ? void 0 : _a.msg) || (errorObj === null || errorObj === void 0 ? void 0 : errorObj.msg) || String(error);
|
|
212
|
+
if (errorMsg.includes('Not logged in')) {
|
|
213
|
+
this.log.debug('Session expired while getting devices, attempting re-login...');
|
|
214
|
+
if (await this.ensureLogin(true)) {
|
|
215
|
+
// Reset retry count if we successfully logged in again
|
|
216
|
+
retryCount = 0;
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
if (retryCount < maxRetries - 1) {
|
|
221
|
+
this.log.warn(`Error getting devices (attempt ${retryCount + 1}/${maxRetries}): ${errorMsg}, retrying...`);
|
|
222
|
+
await new Promise(resolve => setTimeout(resolve, Math.pow(2, retryCount) * 1000));
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
throw error;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
retryCount++;
|
|
229
|
+
}
|
|
230
|
+
// If getting devices failed after retries, try forcing a new login
|
|
140
231
|
if (!success) {
|
|
141
|
-
this.log.debug('Failed to get devices, trying to re-login...');
|
|
232
|
+
this.log.debug('Failed to get devices after retries, trying to re-login...');
|
|
142
233
|
if (!await this.ensureLogin(true)) {
|
|
143
234
|
this.log.error('Failed to re-login');
|
|
144
235
|
return;
|
|
@@ -158,16 +249,33 @@ class TSVESyncPlatform {
|
|
|
158
249
|
for (const accessory of this.accessories) {
|
|
159
250
|
const device = devices.find(d => this.api.hap.uuid.generate(d.cid) === accessory.UUID);
|
|
160
251
|
if (device) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
252
|
+
try {
|
|
253
|
+
// Create fresh device context
|
|
254
|
+
const context = this.createDeviceContext(device);
|
|
255
|
+
// Only update if there are actual changes
|
|
256
|
+
if (JSON.stringify(accessory.context.device) !== JSON.stringify(context)) {
|
|
257
|
+
accessory.context.device = context;
|
|
258
|
+
// Update platform accessories to persist changes
|
|
259
|
+
this.api.updatePlatformAccessories([accessory]);
|
|
260
|
+
if (this.debug) {
|
|
261
|
+
this.log.debug(`Updated state for device: ${device.deviceName}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
this.log.error(`Failed to update device state for ${device.deviceName}:`, error);
|
|
267
|
+
}
|
|
166
268
|
}
|
|
167
269
|
}
|
|
168
270
|
}
|
|
169
271
|
catch (error) {
|
|
170
|
-
|
|
272
|
+
const errorObj = error;
|
|
273
|
+
const errorMsg = ((_b = errorObj === null || errorObj === void 0 ? void 0 : errorObj.error) === null || _b === void 0 ? void 0 : _b.msg) || (errorObj === null || errorObj === void 0 ? void 0 : errorObj.msg) || String(error);
|
|
274
|
+
this.log.error('Failed to update device states:', errorMsg);
|
|
275
|
+
// If this was a polled update, we'll let the next poll try again
|
|
276
|
+
if (!isPolledUpdate) {
|
|
277
|
+
throw error; // Re-throw for non-polled updates to handle at caller
|
|
278
|
+
}
|
|
171
279
|
}
|
|
172
280
|
}
|
|
173
281
|
/**
|