homebridge-tsvesync 1.0.15 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/__tests__/mocks/characteristic.mock.d.ts +32 -0
  2. package/dist/__tests__/mocks/characteristic.mock.d.ts.map +1 -0
  3. package/dist/__tests__/mocks/characteristic.mock.js +36 -0
  4. package/dist/__tests__/mocks/characteristic.mock.js.map +1 -0
  5. package/dist/__tests__/mocks/service.mock.d.ts +11 -0
  6. package/dist/__tests__/mocks/service.mock.d.ts.map +1 -0
  7. package/dist/__tests__/mocks/service.mock.js +19 -0
  8. package/dist/__tests__/mocks/service.mock.js.map +1 -0
  9. package/dist/__tests__/setup.d.ts +10 -0
  10. package/dist/__tests__/setup.d.ts.map +1 -0
  11. package/dist/__tests__/setup.js +82 -0
  12. package/dist/__tests__/setup.js.map +1 -0
  13. package/dist/accessories/air-purifier.accessory.d.ts +2 -3
  14. package/dist/accessories/air-purifier.accessory.d.ts.map +1 -1
  15. package/dist/accessories/air-purifier.accessory.js +38 -12
  16. package/dist/accessories/air-purifier.accessory.js.map +1 -1
  17. package/dist/accessories/base.accessory.d.ts +14 -10
  18. package/dist/accessories/base.accessory.d.ts.map +1 -1
  19. package/dist/accessories/base.accessory.js +94 -44
  20. package/dist/accessories/base.accessory.js.map +1 -1
  21. package/dist/accessories/fan.accessory.d.ts.map +1 -1
  22. package/dist/accessories/fan.accessory.js +38 -2
  23. package/dist/accessories/fan.accessory.js.map +1 -1
  24. package/dist/accessories/humidifier.accessory.d.ts.map +1 -1
  25. package/dist/accessories/humidifier.accessory.js +54 -2
  26. package/dist/accessories/humidifier.accessory.js.map +1 -1
  27. package/dist/platform.d.ts +13 -0
  28. package/dist/platform.d.ts.map +1 -1
  29. package/dist/platform.js +200 -25
  30. package/dist/platform.js.map +1 -1
  31. package/dist/types.d.ts +22 -0
  32. package/dist/types.d.ts.map +1 -0
  33. package/dist/types.js +3 -0
  34. package/dist/types.js.map +1 -0
  35. package/dist/utils/retry.d.ts +7 -8
  36. package/dist/utils/retry.d.ts.map +1 -1
  37. package/dist/utils/retry.js +18 -31
  38. package/dist/utils/retry.js.map +1 -1
  39. package/jest.config.js +25 -0
  40. package/package.json +10 -3
  41. package/src/__tests__/base.accessory.test.ts +322 -0
  42. package/src/__tests__/mocks/characteristic.mock.ts +31 -0
  43. package/src/__tests__/mocks/service.mock.ts +14 -0
  44. package/src/__tests__/platform.test.ts +347 -0
  45. package/src/__tests__/setup.ts +80 -0
  46. package/src/accessories/air-purifier.accessory.ts +37 -12
  47. package/src/accessories/base.accessory.ts +101 -47
  48. package/src/accessories/fan.accessory.ts +38 -2
  49. package/src/accessories/humidifier.accessory.ts +50 -2
  50. package/src/platform.ts +222 -29
  51. package/src/types/tsvesync.d.ts +51 -0
  52. package/src/types.ts +21 -0
  53. package/src/utils/retry.ts +27 -47
  54. package/tsconfig.json +5 -4
  55. 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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"}
@@ -41,11 +41,10 @@ export declare class AirPurifierAccessory extends BaseAccessory {
41
41
  private setTargetAirPurifierState;
42
42
  private getAirQuality;
43
43
  private getPM25Density;
44
- private getRotationSpeed;
45
44
  /**
46
- * Convert HomeKit rotation speed (0-100) to fan speed (1-maxSpeed)
45
+ * Get rotation speed
47
46
  */
48
- private convertRotationSpeedToFanSpeed;
47
+ private getRotationSpeed;
49
48
  private getLockPhysicalControls;
50
49
  private setLockPhysicalControls;
51
50
  private getFilterChangeIndication;
@@ -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;IAiCvE;;OAEG;YACW,eAAe;IAc7B;;OAEG;YACW,oBAAoB;IAYlC;;OAEG;YACW,sBAAsB;IAOpC;;OAEG;YACW,kBAAkB;YAYlB,SAAS;YAIT,SAAS;YAeT,0BAA0B;YAI1B,yBAAyB;YAIzB,yBAAyB;YAezB,aAAa;YAMb,cAAc;YAed,gBAAgB;IAO9B;;OAEG;IACH,OAAO,CAAC,8BAA8B;YAQxB,uBAAuB;YAIvB,uBAAuB;YAmBvB,yBAAyB;YAIzB,kBAAkB;cAIhB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlE"}
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;IAiCvE;;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"}
@@ -123,7 +123,31 @@ class AirPurifierAccessory extends base_accessory_1.BaseAccessory {
123
123
  * Handle set rotation speed
124
124
  */
125
125
  async handleSetRotationSpeed(value) {
126
- const speed = Math.round((value / 100) * this.device.maxSpeed);
126
+ const percentage = value;
127
+ if (percentage === 0) {
128
+ // Turn off the device instead of setting speed to 0
129
+ await this.withRetry(async () => {
130
+ await this.device.turnOff();
131
+ }, 'turn off device');
132
+ return;
133
+ }
134
+ // Convert HomeKit percentage (0-100) to device speed (1-5)
135
+ let speed;
136
+ if (percentage <= 20) {
137
+ speed = 1; // Sleep
138
+ }
139
+ else if (percentage <= 40) {
140
+ speed = 2; // Low
141
+ }
142
+ else if (percentage <= 60) {
143
+ speed = 3; // Medium
144
+ }
145
+ else if (percentage <= 80) {
146
+ speed = 4; // High
147
+ }
148
+ else {
149
+ speed = 5; // Turbo
150
+ }
127
151
  await this.withRetry(async () => {
128
152
  await this.device.changeFanSpeed(speed);
129
153
  }, 'set rotation speed');
@@ -195,21 +219,23 @@ class AirPurifierAccessory extends base_accessory_1.BaseAccessory {
195
219
  // Return 0 if no valid value is available
196
220
  return 0;
197
221
  }
222
+ /**
223
+ * Get rotation speed
224
+ */
198
225
  async getRotationSpeed() {
199
- if (this.device.speed === undefined || this.device.speed === null || !this.device.maxSpeed) {
226
+ if (this.device.speed === undefined || this.device.speed === null) {
200
227
  return 0;
201
228
  }
202
- return Math.min(Math.max((this.device.speed / this.device.maxSpeed) * 100, 0), 100);
203
- }
204
- /**
205
- * Convert HomeKit rotation speed (0-100) to fan speed (1-maxSpeed)
206
- */
207
- convertRotationSpeedToFanSpeed(value) {
208
- if (value === 0) {
209
- return 0; // Off
229
+ // Convert device speed (1-5) to HomeKit percentage (0-100)
230
+ switch (this.device.speed) {
231
+ case 0: return 0; // Off
232
+ case 1: return 20; // Sleep
233
+ case 2: return 40; // Low
234
+ case 3: return 60; // Medium
235
+ case 4: return 80; // High
236
+ case 5: return 100; // Turbo
237
+ default: return 0;
210
238
  }
211
- // Convert from 0-100 to 1-maxSpeed
212
- return Math.max(1, Math.round((value / 100) * this.device.maxSpeed));
213
239
  }
214
240
  async getLockPhysicalControls() {
215
241
  return this.device.childLock ? 1 : 0;
@@ -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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"}
@@ -10,6 +10,10 @@ export declare abstract class BaseAccessory {
10
10
  private readonly retryManager;
11
11
  private readonly logger;
12
12
  private needsRetry;
13
+ private isInitialized;
14
+ private initializationPromise;
15
+ private initializationResolver;
16
+ private isInitializing;
13
17
  constructor(platform: TSVESyncPlatform, accessory: PlatformAccessory, device: VeSyncDeviceWithPower);
14
18
  /**
15
19
  * Get base context for logging
@@ -35,6 +39,14 @@ export declare abstract class BaseAccessory {
35
39
  * Get the device type for polling configuration
36
40
  */
37
41
  protected getDeviceType(): string;
42
+ /**
43
+ * Initialize the accessory
44
+ */
45
+ initialize(): Promise<void>;
46
+ /**
47
+ * Initialize the device state
48
+ */
49
+ private initializeDeviceState;
38
50
  /**
39
51
  * Set up the accessory services and start polling
40
52
  */
@@ -54,7 +66,7 @@ export declare abstract class BaseAccessory {
54
66
  /**
55
67
  * Sync the device state with VeSync
56
68
  */
57
- protected syncDeviceState(): Promise<void>;
69
+ syncDeviceState(): Promise<void>;
58
70
  /**
59
71
  * Helper method to convert air quality values to HomeKit format
60
72
  */
@@ -74,14 +86,6 @@ export declare abstract class BaseAccessory {
74
86
  /**
75
87
  * Handle device errors with appropriate recovery actions
76
88
  */
77
- protected handleDeviceError(operation: string, error: unknown): Promise<void>;
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;
89
+ protected handleDeviceError(message: string, error: Error | any): Promise<void>;
86
90
  }
87
91
  //# 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,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCnF;;OAEG;YACW,mBAAmB;IAUjC;;OAEG;IACH,OAAO,CAAC,YAAY;CAGrB"}
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;gBAG7B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,qBAAqB;IAkC/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;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBxC;;OAEG;YACW,qBAAqB;IAgBnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAwB9B;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAI7B;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIrD;;OAEG;IACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC7C;;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"}
@@ -7,16 +7,22 @@ const logger_1 = require("../utils/logger");
7
7
  class BaseAccessory {
8
8
  constructor(platform, accessory, device) {
9
9
  this.needsRetry = false;
10
+ this.isInitialized = false;
11
+ this.isInitializing = false;
10
12
  this.platform = platform;
11
13
  this.accessory = accessory;
12
14
  this.device = device;
15
+ // Create initialization promise
16
+ this.initializationPromise = new Promise((resolve) => {
17
+ this.initializationResolver = resolve;
18
+ });
13
19
  // Initialize managers
14
20
  this.logger = new logger_1.PluginLogger(this.platform.log, this.platform.config.debug);
15
21
  this.pollingManager = new polling_manager_1.PollingManager(this.getDeviceType(), this.platform.log, this.platform.config.polling);
16
22
  this.retryManager = new retry_1.RetryManager(this.platform.log, this.platform.config.retry);
17
23
  // Set up the accessory
18
24
  this.setupAccessory();
19
- this.logger.info('Accessory initialized', this.getLogContext());
25
+ this.logger.info('Accessory created', this.getLogContext());
20
26
  }
21
27
  /**
22
28
  * Get base context for logging
@@ -72,6 +78,48 @@ class BaseAccessory {
72
78
  }
73
79
  return 'default';
74
80
  }
81
+ /**
82
+ * Initialize the accessory
83
+ */
84
+ async initialize() {
85
+ if (this.isInitializing) {
86
+ return;
87
+ }
88
+ this.isInitializing = true;
89
+ try {
90
+ // Initialize the device state
91
+ await this.initializeDeviceState();
92
+ this.isInitialized = true;
93
+ this.logger.info('Accessory initialized', this.getLogContext());
94
+ }
95
+ catch (error) {
96
+ const err = error instanceof Error ? error : new Error(String(error));
97
+ this.logger.error('Failed to initialize device state', this.getLogContext(), err);
98
+ }
99
+ finally {
100
+ this.isInitializing = false;
101
+ // Signal initialization completion regardless of success
102
+ this.initializationResolver();
103
+ }
104
+ }
105
+ /**
106
+ * Initialize the device state
107
+ */
108
+ async initializeDeviceState() {
109
+ try {
110
+ // Wait for platform to be ready
111
+ if (typeof this.platform.isReady === 'function') {
112
+ await this.platform.isReady();
113
+ }
114
+ // Attempt to get initial device state
115
+ await this.syncDeviceState();
116
+ }
117
+ catch (error) {
118
+ const err = error instanceof Error ? error : new Error(String(error));
119
+ this.logger.warn('Failed to get initial device state, will retry during polling', this.getLogContext());
120
+ throw err;
121
+ }
122
+ }
75
123
  /**
76
124
  * Set up the accessory services and start polling
77
125
  */
@@ -94,7 +142,25 @@ class BaseAccessory {
94
142
  */
95
143
  startPolling() {
96
144
  this.pollingManager.startPolling(async () => {
97
- await this.syncDeviceState();
145
+ try {
146
+ // Wait for initialization before starting polling
147
+ await this.initializationPromise;
148
+ // Wait for platform to be ready
149
+ if (typeof this.platform.isReady === 'function') {
150
+ await this.platform.isReady();
151
+ }
152
+ if (!this.isInitialized) {
153
+ // If not initialized, try to initialize first
154
+ await this.initializeDeviceState();
155
+ }
156
+ else {
157
+ await this.syncDeviceState();
158
+ }
159
+ }
160
+ catch (error) {
161
+ const err = error instanceof Error ? error : new Error(String(error));
162
+ this.logger.error('Failed during polling', this.getLogContext(), err);
163
+ }
98
164
  });
99
165
  }
100
166
  /**
@@ -120,6 +186,9 @@ class BaseAccessory {
120
186
  await this.withRetry(async () => {
121
187
  // First try to get device details
122
188
  const details = await this.device.getDetails();
189
+ if (!details) {
190
+ throw new Error('Failed to get device details');
191
+ }
123
192
  // Then update device state with the details
124
193
  await this.updateDeviceSpecificStates(details);
125
194
  // Clear retry flag on success
@@ -127,6 +196,10 @@ class BaseAccessory {
127
196
  }, 'sync device state');
128
197
  }
129
198
  catch (error) {
199
+ // Set initialization state to false on error to force re-initialization
200
+ if (!this.isInitialized) {
201
+ this.logger.warn('Device not initialized, will retry initialization', this.getLogContext());
202
+ }
130
203
  await this.handleDeviceError('Failed to sync device state', error instanceof Error ? error : new Error(String(error)));
131
204
  }
132
205
  }
@@ -215,51 +288,28 @@ class BaseAccessory {
215
288
  /**
216
289
  * Handle device errors with appropriate recovery actions
217
290
  */
218
- async handleDeviceError(operation, error) {
219
- var _a, _b;
220
- const errorObj = error instanceof Error ? error : new Error(String(error));
221
- const errorDetails = errorObj;
222
- const errorCode = ((_a = errorDetails === null || errorDetails === void 0 ? void 0 : errorDetails.error) === null || _a === void 0 ? void 0 : _a.code) || (errorDetails === null || errorDetails === void 0 ? void 0 : errorDetails.code);
223
- const errorMsg = ((_b = errorDetails === null || errorDetails === void 0 ? void 0 : errorDetails.error) === null || _b === void 0 ? void 0 : _b.msg) || (errorDetails === null || errorDetails === void 0 ? void 0 : errorDetails.msg) || errorObj.message;
224
- // Log the error with context
225
- this.platform.log.error(`[${this.accessory.displayName}] ${operation}: ${errorMsg}`, (errorDetails === null || errorDetails === void 0 ? void 0 : errorDetails.error) || errorDetails || errorObj);
226
- // Handle specific error codes
227
- switch (errorCode) {
228
- case 4041008: // Device not found
229
- this.platform.log.warn(`[${this.accessory.displayName}] Device not found, will attempt to rediscover`);
230
- await this.attemptReconnection();
231
- break;
232
- case -11102086: // Internal error
233
- this.platform.log.warn(`[${this.accessory.displayName}] VeSync API internal error, will retry later`);
234
- this.markForRetry();
235
- break;
236
- default:
237
- if ((errorMsg === null || errorMsg === void 0 ? void 0 : errorMsg.includes('not found')) || (errorMsg === null || errorMsg === void 0 ? void 0 : errorMsg.includes('undefined')) || !errorMsg) {
238
- this.platform.log.warn(`[${this.accessory.displayName}] Connection issue detected, attempting to reconnect`);
239
- await this.attemptReconnection();
240
- }
241
- else {
242
- this.markForRetry();
243
- }
291
+ async handleDeviceError(message, error) {
292
+ var _a, _b, _c, _d, _e, _f;
293
+ const context = this.getLogContext();
294
+ const retryCount = this.retryManager.getRetryCount();
295
+ const wrappedError = error instanceof Error ? error : new Error(JSON.stringify(error));
296
+ // Handle device not found error
297
+ 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'))) {
298
+ this.logger.warn('Device not found', context, wrappedError);
299
+ return;
244
300
  }
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`);
301
+ // Handle rate limit error
302
+ 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'))) {
303
+ this.logger.warn(`Hit API rate limit (attempt ${retryCount})`, context, wrappedError);
304
+ return;
254
305
  }
255
- catch (error) {
256
- this.platform.log.error(`[${this.accessory.displayName}] Failed to reconnect: ${error}`);
306
+ // Handle network errors
307
+ 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') {
308
+ this.logger.warn('Network error', context, wrappedError);
309
+ return;
257
310
  }
258
- }
259
- /**
260
- * Mark the device for retry on next update cycle
261
- */
262
- markForRetry() {
311
+ // Handle other errors
312
+ this.logger.error(message, context, wrappedError);
263
313
  this.needsRetry = true;
264
314
  }
265
315
  }