homebridge-tsvesync 1.0.49 → 1.0.51

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/README.md CHANGED
@@ -132,7 +132,14 @@ Add the following to your Homebridge `config.json`:
132
132
  "username": "YOUR_VESYNC_EMAIL",
133
133
  "password": "YOUR_VESYNC_PASSWORD",
134
134
  "updateInterval": 30,
135
- "debug": false
135
+ "debug": false,
136
+ "exclude": {
137
+ "type": ["fan", "outlet"],
138
+ "model": ["Core300S", "LV600S"],
139
+ "name": ["Living Room Light"],
140
+ "namePattern": ["Bedroom.*"],
141
+ "id": ["cid123456"]
142
+ }
136
143
  }
137
144
  ]
138
145
  }
@@ -144,6 +151,64 @@ Add the following to your Homebridge `config.json`:
144
151
  * `name` (required): Can be anything, this is the name that will appear in your Homebridge log
145
152
  * `username` (required): Your VeSync account email
146
153
  * `password` (required): Your VeSync account password
154
+ * `updateInterval` (optional): How often to update device states in seconds (default: 300)
155
+ * `debug` (optional): Enable debug logging (default: false)
156
+
157
+ ### Device Exclusions
158
+
159
+ You can exclude specific devices from being added to HomeKit using the `exclude` configuration. All exclusion options are optional and can be combined:
160
+
161
+ * `type`: Array of device types to exclude. Valid types are:
162
+ * `fan` - All fan devices
163
+ * `outlet` - All outlet devices
164
+ * `switch` - All switch devices
165
+ * `bulb` - All light bulb devices
166
+ * `purifier` - All air purifier devices
167
+ * `humidifier` - All humidifier devices
168
+
169
+ * `model`: Array of device models to exclude. Examples:
170
+ * `Core300S` - Levoit Core 300S Air Purifier
171
+ * `LV600S` - Levoit LV600S Humidifier
172
+ * `ESL100` - Etekcity ESL100 Light Bulb
173
+
174
+ * `name`: Array of exact device names to exclude (case-sensitive)
175
+ * Matches the name shown in the VeSync app
176
+ * Must match exactly (including spaces and case)
177
+ * Example: `["Living Room Light", "Bedroom Fan"]`
178
+
179
+ * `namePattern`: Array of regex patterns to match device names
180
+ * Uses JavaScript regular expressions
181
+ * Case-sensitive matching
182
+ * Examples:
183
+ * `"Bedroom.*"` - Excludes all devices with names starting with "Bedroom"
184
+ * `".*Light"` - Excludes all devices with names ending in "Light"
185
+ * `"(Kitchen|Living Room).*"` - Excludes all devices with names starting with "Kitchen" or "Living Room"
186
+
187
+ * `id`: Array of device IDs to exclude
188
+ * Can use either the device's `cid` or `uuid`
189
+ * Useful for excluding specific devices when you have multiple of the same model
190
+ * You can find the ID in the VeSync app or Homebridge logs
191
+
192
+ Example configuration with all exclusion options:
193
+ ```json
194
+ {
195
+ "platforms": [
196
+ {
197
+ "platform": "TSVESyncPlatform",
198
+ "name": "TSVESync",
199
+ "username": "YOUR_VESYNC_EMAIL",
200
+ "password": "YOUR_VESYNC_PASSWORD",
201
+ "exclude": {
202
+ "type": ["fan", "outlet"],
203
+ "model": ["Core300S", "LV600S"],
204
+ "name": ["Living Room Light", "Kitchen Outlet"],
205
+ "namePattern": ["Bedroom.*", ".*Nightlight"],
206
+ "id": ["cid123456", "cid789012"]
207
+ }
208
+ }
209
+ ]
210
+ }
211
+ ```
147
212
 
148
213
  ## Features
149
214
 
@@ -43,6 +43,106 @@
43
43
  "required": false,
44
44
  "default": false,
45
45
  "description": "Enable debug logging for troubleshooting"
46
+ },
47
+ "exclude": {
48
+ "title": "Device Exclusions",
49
+ "type": "object",
50
+ "required": false,
51
+ "description": "Configure which devices to exclude from HomeKit",
52
+ "properties": {
53
+ "type": {
54
+ "title": "Exclude Device Types",
55
+ "type": "array",
56
+ "items": {
57
+ "title": "Device Type",
58
+ "type": "string",
59
+ "enum": ["fan", "outlet", "switch", "bulb", "purifier", "humidifier"]
60
+ },
61
+ "uniqueItems": true,
62
+ "description": "Select device types to exclude from HomeKit",
63
+ "default": []
64
+ },
65
+ "model": {
66
+ "title": "Exclude Device Models",
67
+ "type": "array",
68
+ "items": {
69
+ "title": "Device Model",
70
+ "type": "string",
71
+ "placeholder": "Core300S"
72
+ },
73
+ "uniqueItems": true,
74
+ "description": "Enter device models to exclude (e.g., Core300S, LV600S, ESL100)",
75
+ "default": []
76
+ },
77
+ "name": {
78
+ "title": "Exclude by Name",
79
+ "type": "array",
80
+ "items": {
81
+ "title": "Device Name",
82
+ "type": "string",
83
+ "placeholder": "Living Room Light"
84
+ },
85
+ "uniqueItems": true,
86
+ "description": "Enter exact device names to exclude (case-sensitive)",
87
+ "default": []
88
+ },
89
+ "namePattern": {
90
+ "title": "Exclude by Name Pattern",
91
+ "type": "array",
92
+ "items": {
93
+ "title": "Pattern",
94
+ "type": "string",
95
+ "placeholder": "Bedroom.*"
96
+ },
97
+ "uniqueItems": true,
98
+ "description": "Enter regex patterns to match device names for exclusion (e.g., 'Bedroom.*' to exclude all bedroom devices)",
99
+ "default": []
100
+ },
101
+ "id": {
102
+ "title": "Exclude by Device ID",
103
+ "type": "array",
104
+ "items": {
105
+ "title": "Device ID",
106
+ "type": "string",
107
+ "placeholder": "cid123456"
108
+ },
109
+ "uniqueItems": true,
110
+ "description": "Enter device IDs (cid/uuid) to exclude",
111
+ "default": []
112
+ }
113
+ }
114
+ },
115
+ "retry": {
116
+ "title": "API Retry Configuration",
117
+ "type": "object",
118
+ "required": false,
119
+ "description": "Configure retry behavior for API calls",
120
+ "properties": {
121
+ "maxRetries": {
122
+ "title": "Maximum Retries",
123
+ "type": "integer",
124
+ "minimum": 1,
125
+ "maximum": 10,
126
+ "default": 3,
127
+ "description": "Maximum number of retry attempts for failed API calls"
128
+ },
129
+ "initialDelay": {
130
+ "title": "Initial Retry Delay",
131
+ "type": "integer",
132
+ "minimum": 1000,
133
+ "maximum": 10000,
134
+ "default": 2000,
135
+ "description": "Initial delay between retries in milliseconds"
136
+ },
137
+ "maxDelay": {
138
+ "title": "Maximum Retry Delay",
139
+ "type": "integer",
140
+ "minimum": 5000,
141
+ "maximum": 30000,
142
+ "default": 10000,
143
+ "description": "Maximum delay between retries in milliseconds"
144
+ }
145
+ }
46
146
  }
47
147
  }
48
148
  },
@@ -51,6 +151,88 @@
51
151
  "username",
52
152
  "password",
53
153
  "updateInterval",
54
- "debug"
154
+ "debug",
155
+ {
156
+ "key": "exclude",
157
+ "type": "section",
158
+ "title": "Device Exclusions",
159
+ "expandable": true,
160
+ "expanded": false,
161
+ "orderable": false,
162
+ "items": [
163
+ {
164
+ "key": "exclude.type",
165
+ "type": "array",
166
+ "title": "Device Types to Exclude",
167
+ "buttonText": "Add Device Type",
168
+ "items": [
169
+ {
170
+ "key": "exclude.type[]",
171
+ "type": "select"
172
+ }
173
+ ]
174
+ },
175
+ {
176
+ "key": "exclude.model",
177
+ "type": "array",
178
+ "title": "Device Models to Exclude",
179
+ "buttonText": "Add Device Model",
180
+ "items": [
181
+ {
182
+ "key": "exclude.model[]",
183
+ "type": "string"
184
+ }
185
+ ]
186
+ },
187
+ {
188
+ "key": "exclude.name",
189
+ "type": "array",
190
+ "title": "Device Names to Exclude",
191
+ "buttonText": "Add Device Name",
192
+ "items": [
193
+ {
194
+ "key": "exclude.name[]",
195
+ "type": "string"
196
+ }
197
+ ]
198
+ },
199
+ {
200
+ "key": "exclude.namePattern",
201
+ "type": "array",
202
+ "title": "Name Patterns to Exclude",
203
+ "buttonText": "Add Name Pattern",
204
+ "items": [
205
+ {
206
+ "key": "exclude.namePattern[]",
207
+ "type": "string"
208
+ }
209
+ ]
210
+ },
211
+ {
212
+ "key": "exclude.id",
213
+ "type": "array",
214
+ "title": "Device IDs to Exclude",
215
+ "buttonText": "Add Device ID",
216
+ "items": [
217
+ {
218
+ "key": "exclude.id[]",
219
+ "type": "string"
220
+ }
221
+ ]
222
+ }
223
+ ]
224
+ },
225
+ {
226
+ "key": "retry",
227
+ "type": "section",
228
+ "title": "API Retry Settings",
229
+ "expandable": true,
230
+ "expanded": false,
231
+ "items": [
232
+ "retry.maxRetries",
233
+ "retry.initialDelay",
234
+ "retry.maxDelay"
235
+ ]
236
+ }
55
237
  ]
56
238
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,yCAAwD;AACxD,yCAA8C;AAK9C,iBAAS,CAAC,GAAQ,EAAE,EAAE;IACpB,GAAG,CAAC,gBAAgB,CAAC,sBAAW,EAAE,wBAAa,EAAE,2BAAgB,CAAC,CAAC;AACrE,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,yCAAwD;AACxD,yCAA8C;AAK9C,iBAAS,CAAC,GAAQ,EAAE,EAAE;IACpB,GAAG,CAAC,gBAAgB,CAAC,sBAAW,EAAE,wBAAa,EAAE,2BAAuB,CAAC,CAAC;AAC5E,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
- import { API, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig, Service, Characteristic } from 'homebridge';
1
+ import { API, DynamicPlatformPlugin, Logger, PlatformAccessory, Service, Characteristic } from 'homebridge';
2
+ import { PlatformConfig as TSVESyncPlatformConfig } from './types/device.types';
2
3
  /**
3
4
  * HomebridgePlatform
4
5
  * This class is the main constructor for your plugin, this is where you should
@@ -6,7 +7,7 @@ import { API, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig,
6
7
  */
7
8
  export declare class TSVESyncPlatform implements DynamicPlatformPlugin {
8
9
  readonly log: Logger;
9
- readonly config: PlatformConfig;
10
+ readonly config: TSVESyncPlatformConfig;
10
11
  readonly api: API;
11
12
  readonly Service: typeof Service;
12
13
  readonly Characteristic: typeof Characteristic;
@@ -24,7 +25,7 @@ export declare class TSVESyncPlatform implements DynamicPlatformPlugin {
24
25
  private readonly logger;
25
26
  private readonly TOKEN_EXPIRY;
26
27
  private lastTokenRefresh;
27
- constructor(log: Logger, config: PlatformConfig, api: API);
28
+ constructor(log: Logger, config: TSVESyncPlatformConfig, api: API);
28
29
  /**
29
30
  * Check if platform is ready
30
31
  */
@@ -53,6 +54,10 @@ export declare class TSVESyncPlatform implements DynamicPlatformPlugin {
53
54
  * Update device states periodically
54
55
  */
55
56
  private updateDeviceStates;
57
+ /**
58
+ * Check if a device should be excluded based on configuration
59
+ */
60
+ private shouldExcludeDevice;
56
61
  /**
57
62
  * This function discovers and registers your devices as accessories
58
63
  */
@@ -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;AAQ5H;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;aAsB1C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IAvB1B,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,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,gBAAgB,CAAqB;gBAG3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;IAqE1B;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrC;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,WAAW;IAwDzB;;OAEG;YACW,kBAAkB;IAIhC;;OAEG;IACG,eAAe;IA8GrB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAO3B"}
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,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5G,OAAO,EAAmB,cAAc,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEjG;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;aAsB1C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,sBAAsB;aAC9B,GAAG,EAAE,GAAG;IAvB1B,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,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,gBAAgB,CAAqB;gBAG3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,GAAG;IAqE1B;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrC;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,WAAW;IAwDzB;;OAEG;YACW,kBAAkB;IAIhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACG,eAAe;IAkHrB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAO3B"}
package/dist/platform.js CHANGED
@@ -225,6 +225,52 @@ class TSVESyncPlatform {
225
225
  async updateDeviceStates() {
226
226
  await this.discoverDevices();
227
227
  }
228
+ /**
229
+ * Check if a device should be excluded based on configuration
230
+ */
231
+ shouldExcludeDevice(device) {
232
+ var _a, _b, _c, _d, _e;
233
+ const exclude = this.config.exclude;
234
+ if (!exclude) {
235
+ return false;
236
+ }
237
+ // Check device type
238
+ if ((_a = exclude.type) === null || _a === void 0 ? void 0 : _a.includes(device.deviceType.toLowerCase())) {
239
+ this.logger.debug(`Excluding device ${device.deviceName} by type: ${device.deviceType}`);
240
+ return true;
241
+ }
242
+ // Check device model
243
+ if ((_b = exclude.model) === null || _b === void 0 ? void 0 : _b.some(model => device.deviceType.toUpperCase().includes(model.toUpperCase()))) {
244
+ this.logger.debug(`Excluding device ${device.deviceName} by model: ${device.deviceType}`);
245
+ return true;
246
+ }
247
+ // Check exact name match
248
+ if ((_c = exclude.name) === null || _c === void 0 ? void 0 : _c.includes(device.deviceName.trim())) {
249
+ this.logger.debug(`Excluding device ${device.deviceName} by exact name match`);
250
+ return true;
251
+ }
252
+ // Check name patterns
253
+ if (exclude.namePattern) {
254
+ for (const pattern of exclude.namePattern) {
255
+ try {
256
+ const regex = new RegExp(pattern);
257
+ if (regex.test(device.deviceName.trim())) {
258
+ this.logger.debug(`Excluding device ${device.deviceName} by name pattern: ${pattern}`);
259
+ return true;
260
+ }
261
+ }
262
+ catch (error) {
263
+ this.logger.warn(`Invalid regex pattern in exclude config: ${pattern}`);
264
+ }
265
+ }
266
+ }
267
+ // Check device ID (cid or uuid)
268
+ if (((_d = exclude.id) === null || _d === void 0 ? void 0 : _d.includes(device.cid)) || ((_e = exclude.id) === null || _e === void 0 ? void 0 : _e.includes(device.uuid))) {
269
+ this.logger.debug(`Excluding device ${device.deviceName} by ID: ${device.cid}/${device.uuid}`);
270
+ return true;
271
+ }
272
+ return false;
273
+ }
228
274
  /**
229
275
  * This function discovers and registers your devices as accessories
230
276
  */
@@ -256,11 +302,14 @@ class TSVESyncPlatform {
256
302
  }
257
303
  }
258
304
  // Get all devices
259
- const devices = this.getAllDevices();
305
+ const devices = this.getAllDevices().filter(device => !this.shouldExcludeDevice(device));
306
+ // Track processed devices for cleanup
307
+ const processedDeviceUUIDs = new Set();
260
308
  // Loop over the discovered devices and register each one
261
309
  for (const device of devices) {
262
310
  // Generate a unique id for the accessory
263
311
  const uuid = this.generateDeviceUUID(device);
312
+ processedDeviceUUIDs.add(uuid);
264
313
  // Check if an accessory already exists
265
314
  let accessory = this.accessories.find(acc => acc.UUID === uuid);
266
315
  if (accessory) {
@@ -307,9 +356,9 @@ class TSVESyncPlatform {
307
356
  }
308
357
  }
309
358
  }
310
- // Remove platform accessories that no longer exist
359
+ // Remove platform accessories that no longer exist or are now excluded
311
360
  this.accessories
312
- .filter(accessory => !devices.find(device => this.generateDeviceUUID(device) === accessory.UUID))
361
+ .filter(accessory => !processedDeviceUUIDs.has(accessory.UUID))
313
362
  .forEach(accessory => {
314
363
  this.logger.info('Removing existing accessory:', accessory.displayName);
315
364
  this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":";;;AACA,yCAAwD;AAExD,2DAAuD;AAEvD,2CAA8C;AAC9C,iDAA4D;AAE5D;;;;GAIG;AACH,MAAa,gBAAgB;IAqB3B,YACkB,GAAW,EACX,MAAsB,EACtB,GAAQ;QAFR,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAgB;QACtB,QAAG,GAAH,GAAG,CAAK;QAvBV,YAAO,GAAmB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/C,mBAAc,GAA0B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;QAEpF,oDAAoD;QACpC,gBAAW,GAAwB,EAAE,CAAC;QACrC,sBAAiB,GAA+B,IAAI,GAAG,EAAE,CAAC;QAMnE,qBAAgB,GAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,qBAAgB,GAAG,KAAK,CAAC,CAAC,wBAAwB;QAGlD,kBAAa,GAAG,KAAK,CAAC;QAEb,iBAAY,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,yBAAyB;QACjE,qBAAgB,GAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAO3C,gCAAgC;QAChC,IAAI,CAAC,qBAAqB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnD,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;QAEnC,oBAAoB;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAErD,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YACnF,OAAO;SACR;QAED,kDAAkD;QAClD,IAAI,CAAC,MAAM,GAAG,IAAA,mCAAuB,EACnC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,EACf,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,EAChD,IAAI,CAAC,KAAK,EACV,IAAI,EAAE,wBAAwB;QAC9B,MAAM,CAAC,MAAM,EACb,IAAI,CAAC,MAAM,CACZ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE;YACrD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEtE,8FAA8F;QAC9F,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAE1D,IAAI;gBACF,sBAAsB;gBACtB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAEhC,gCAAgC;gBAChC,IAAI,CAAC,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;oBAC3C,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;aAChC;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;gBAC3D,kDAAkD;gBAClD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,sBAAsB,EAAE,CAAC;aAC/B;QACH,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC3B,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC7B,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;aAC1C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO;QAClB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI;gBACF,sDAAsD;gBACtD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBACrD,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAClF,CAAC,CAAC,CAAC;gBAEH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC,CAAC;aAClE;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBAC5D,gEAAgE;gBAChE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;aACb;SACF;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,IAAI;YACF,qBAAqB;YACrB,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;aAClD;YAED,uBAAuB;YACvB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAE3B,mBAAmB;YACnB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAE7B,sDAAsD;YACtD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE9B,6BAA6B;YAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE;;gBAC1F,MAAM,UAAU,GAAG,CAAA,MAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,0CAAE,WAAW,KAAI,IAAI,CAAC;gBACxF,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC5E,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;SACjC;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YAC3D,4DAA4D;YAC5D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,SAA4B;QAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;YACnB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;YACtB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;YACvB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;SACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,MAAW;QACrC,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;YACpC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;SAC5B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,UAAU,GAAG,KAAK;;QAC1C,+BAA+B;QAC/B,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC1E,IAAI,CAAC,UAAU,IAAI,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE;YAC3D,OAAO,IAAI,CAAC,CAAC,uBAAuB;SACrC;QAED,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,OAAO,CAAC,UAAU,EAAE,EAAG,+BAA+B;YACpD,IAAI;gBACF,uCAAuC;gBACvC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC1E,IAAI,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,EAAE;oBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC;oBAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,QAAQ,wCAAwC,CAAC,CAAC;oBAC/E,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;iBAC7D;gBAED,sBAAsB;gBACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC;gBAElG,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAE9C,IAAI,CAAC,WAAW,EAAE;oBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;oBACrE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;oBACpE,SAAS,CAAE,0BAA0B;iBACtC;gBAED,kEAAkE;gBAClE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC;gBACnC,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,IAAI,CAAC;aACb;YAAC,OAAO,KAAK,EAAE;gBACd,yBAAyB;gBACzB,MAAM,QAAQ,GAAG,KAAY,CAAC;gBAC9B,MAAM,QAAQ,GAAG,CAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,0CAAE,GAAG,MAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,CAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;gBAExE,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;oBACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBACxD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;oBAC9D,SAAS,CAAE,0BAA0B;iBACtC;gBAED,qDAAqD;gBACrD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;gBAEpE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBACzC,SAAS,CAAE,0BAA0B;aACtC;SACF;QACD,OAAO,IAAI,CAAC,CAAE,0DAA0D;IAC1E,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,IAAI;YACF,qBAAqB;YACrB,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE;gBAC7B,OAAO;aACR;YAED,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,0BAA0B;YAC1B,OAAO,CAAC,OAAO,EAAE;gBACf,IAAI;oBACF,8BAA8B;oBAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC3B,OAAO,GAAG,IAAI,CAAC;iBAChB;gBAAC,OAAO,KAAK,EAAE;oBACd,UAAU,EAAE,CAAC;oBACb,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;oBACtE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,UAAU,aAAa,WAAW,GAAC,IAAI,aAAa,CAAC,CAAC;oBACzG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;oBAE/D,0DAA0D;oBAC1D,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE;wBAC7B,SAAS;qBACV;iBACF;aACF;YAED,kBAAkB;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAErC,yDAAyD;YACzD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,yCAAyC;gBACzC,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAE7C,uCAAuC;gBACvC,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBAEhE,IAAI,SAAS,EAAE;oBACb,2BAA2B;oBAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;oBAEjF,+BAA+B;oBAC/B,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;oBAE5D,mBAAmB;oBACnB,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;iBACjD;qBAAM;oBACL,yBAAyB;oBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;oBAE7D,uBAAuB;oBACvB,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CACxC,MAAM,CAAC,UAAU,EACjB,IAAI,EACJ,8BAAa,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,CACtD,CAAC;oBAEF,sCAAsC;oBACtC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;iBAC7D;gBAED,+BAA+B;gBAC/B,MAAM,eAAe,GAAG,8BAAa,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC/E,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBAElD,2BAA2B;gBAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;oBACpD,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,sBAAW,EAAE,wBAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC9E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBAClC;gBAED,0CAA0C;gBAC1C,IAAI,eAAe,GAAG,CAAC,CAAC;gBACxB,IAAI,YAAY,GAAG,KAAK,CAAC;gBACzB,OAAO,CAAC,YAAY,EAAE;oBACpB,IAAI;wBACF,MAAM,eAAe,CAAC,eAAe,EAAE,CAAC;wBACxC,YAAY,GAAG,IAAI,CAAC;qBACrB;oBAAC,OAAO,KAAK,EAAE;wBACd,eAAe,EAAE,CAAC;wBAClB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;wBAC1E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,UAAU,mBAAmB,eAAe,aAAa,WAAW,GAAC,IAAI,aAAa,CAAC,CAAC;wBACnJ,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;wBAE/D,0DAA0D;wBAC1D,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE;4BAC7B,SAAS;yBACV;qBACF;iBACF;aACF;YAED,mDAAmD;YACnD,IAAI,CAAC,WAAW;iBACb,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;iBAChG,OAAO,CAAC,SAAS,CAAC,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;gBACxE,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,sBAAW,EAAE,wBAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBAChF,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;SAEN;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;SACzD;IACH,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CAAC,MAAoE;QAC7F,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;QACpB,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE;YAC1D,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;CACF;AAhYD,4CAgYC"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -76,4 +76,26 @@ export interface VeSyncOutlet extends VeSyncDeviceWithPower {
76
76
  export interface VeSyncSwitch extends VeSyncDeviceWithPower {
77
77
  power?: boolean;
78
78
  }
79
+ export interface DeviceExclusion {
80
+ type?: string[];
81
+ model?: string[];
82
+ name?: string[];
83
+ namePattern?: string[];
84
+ id?: string[];
85
+ }
86
+ export interface PlatformConfig {
87
+ platform: string;
88
+ name: string;
89
+ username: string;
90
+ password: string;
91
+ updateInterval?: number;
92
+ debug?: boolean;
93
+ apiUrl?: string;
94
+ exclude?: DeviceExclusion;
95
+ retry?: {
96
+ maxRetries: number;
97
+ initialDelay?: number;
98
+ maxDelay?: number;
99
+ };
100
+ }
79
101
  //# sourceMappingURL=device.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"device.types.d.ts","sourceRoot":"","sources":["../../src/types/device.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device.types.d.ts","sourceRoot":"","sources":["../../src/types/device.types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-tsvesync",
3
- "version": "1.0.49",
3
+ "version": "1.0.51",
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": {
@@ -98,7 +98,7 @@
98
98
  "axios": "^1.6.5",
99
99
  "dotenv": "^16.3.1",
100
100
  "js-yaml": "^4.1.0",
101
- "tsvesync": "1.0.44"
101
+ "tsvesync": "1.0.45"
102
102
  },
103
103
  "devDependencies": {
104
104
  "@types/jest": "^29.5.11",
package/src/index.ts CHANGED
@@ -6,5 +6,5 @@ import { TSVESyncPlatform } from './platform';
6
6
  * This method registers the platform with Homebridge
7
7
  */
8
8
  export = (api: API) => {
9
- api.registerPlatform(PLUGIN_NAME, PLATFORM_NAME, TSVESyncPlatform);
9
+ api.registerPlatform(PLUGIN_NAME, PLATFORM_NAME, TSVESyncPlatform as any);
10
10
  };
package/src/platform.ts CHANGED
@@ -1,10 +1,11 @@
1
- import { API, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig, Service, Characteristic } from 'homebridge';
1
+ import { API, DynamicPlatformPlugin, Logger, PlatformAccessory, Service, Characteristic } from 'homebridge';
2
2
  import { PLATFORM_NAME, PLUGIN_NAME } from './settings';
3
3
  import { VeSync } from 'tsvesync';
4
4
  import { DeviceFactory } from './utils/device-factory';
5
5
  import { BaseAccessory } from './accessories/base.accessory';
6
6
  import { PluginLogger } from './utils/logger';
7
7
  import { createRateLimitedVeSync } from './utils/api-proxy';
8
+ import { DeviceExclusion, PlatformConfig as TSVESyncPlatformConfig } from './types/device.types';
8
9
 
9
10
  /**
10
11
  * HomebridgePlatform
@@ -34,7 +35,7 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
34
35
 
35
36
  constructor(
36
37
  public readonly log: Logger,
37
- public readonly config: PlatformConfig,
38
+ public readonly config: TSVESyncPlatformConfig,
38
39
  public readonly api: API,
39
40
  ) {
40
41
  // Create initialization promise
@@ -270,6 +271,57 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
270
271
  await this.discoverDevices();
271
272
  }
272
273
 
274
+ /**
275
+ * Check if a device should be excluded based on configuration
276
+ */
277
+ private shouldExcludeDevice(device: any): boolean {
278
+ const exclude = this.config.exclude;
279
+ if (!exclude) {
280
+ return false;
281
+ }
282
+
283
+ // Check device type
284
+ if (exclude.type?.includes(device.deviceType.toLowerCase())) {
285
+ this.logger.debug(`Excluding device ${device.deviceName} by type: ${device.deviceType}`);
286
+ return true;
287
+ }
288
+
289
+ // Check device model
290
+ if (exclude.model?.some(model => device.deviceType.toUpperCase().includes(model.toUpperCase()))) {
291
+ this.logger.debug(`Excluding device ${device.deviceName} by model: ${device.deviceType}`);
292
+ return true;
293
+ }
294
+
295
+ // Check exact name match
296
+ if (exclude.name?.includes(device.deviceName.trim())) {
297
+ this.logger.debug(`Excluding device ${device.deviceName} by exact name match`);
298
+ return true;
299
+ }
300
+
301
+ // Check name patterns
302
+ if (exclude.namePattern) {
303
+ for (const pattern of exclude.namePattern) {
304
+ try {
305
+ const regex = new RegExp(pattern);
306
+ if (regex.test(device.deviceName.trim())) {
307
+ this.logger.debug(`Excluding device ${device.deviceName} by name pattern: ${pattern}`);
308
+ return true;
309
+ }
310
+ } catch (error) {
311
+ this.logger.warn(`Invalid regex pattern in exclude config: ${pattern}`);
312
+ }
313
+ }
314
+ }
315
+
316
+ // Check device ID (cid or uuid)
317
+ if (exclude.id?.includes(device.cid) || exclude.id?.includes(device.uuid)) {
318
+ this.logger.debug(`Excluding device ${device.deviceName} by ID: ${device.cid}/${device.uuid}`);
319
+ return true;
320
+ }
321
+
322
+ return false;
323
+ }
324
+
273
325
  /**
274
326
  * This function discovers and registers your devices as accessories
275
327
  */
@@ -304,12 +356,16 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
304
356
  }
305
357
 
306
358
  // Get all devices
307
- const devices = this.getAllDevices();
359
+ const devices = this.getAllDevices().filter(device => !this.shouldExcludeDevice(device));
360
+
361
+ // Track processed devices for cleanup
362
+ const processedDeviceUUIDs = new Set<string>();
308
363
 
309
364
  // Loop over the discovered devices and register each one
310
365
  for (const device of devices) {
311
366
  // Generate a unique id for the accessory
312
367
  const uuid = this.generateDeviceUUID(device);
368
+ processedDeviceUUIDs.add(uuid);
313
369
 
314
370
  // Check if an accessory already exists
315
371
  let accessory = this.accessories.find(acc => acc.UUID === uuid);
@@ -369,9 +425,9 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
369
425
  }
370
426
  }
371
427
 
372
- // Remove platform accessories that no longer exist
428
+ // Remove platform accessories that no longer exist or are now excluded
373
429
  this.accessories
374
- .filter(accessory => !devices.find(device => this.generateDeviceUUID(device) === accessory.UUID))
430
+ .filter(accessory => !processedDeviceUUIDs.has(accessory.UUID))
375
431
  .forEach(accessory => {
376
432
  this.logger.info('Removing existing accessory:', accessory.displayName);
377
433
  this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
@@ -88,4 +88,28 @@ export interface VeSyncOutlet extends VeSyncDeviceWithPower {
88
88
 
89
89
  export interface VeSyncSwitch extends VeSyncDeviceWithPower {
90
90
  power?: boolean;
91
+ }
92
+
93
+ export interface DeviceExclusion {
94
+ type?: string[]; // Device types to exclude (e.g., "fan", "outlet")
95
+ model?: string[]; // Device models to exclude (e.g., "Core300S", "LV600S")
96
+ name?: string[]; // Device names to exclude (exact match)
97
+ namePattern?: string[]; // Device names to exclude (regex patterns)
98
+ id?: string[]; // Device IDs to exclude (cid/uuid)
99
+ }
100
+
101
+ export interface PlatformConfig {
102
+ platform: string;
103
+ name: string;
104
+ username: string;
105
+ password: string;
106
+ updateInterval?: number;
107
+ debug?: boolean;
108
+ apiUrl?: string;
109
+ exclude?: DeviceExclusion;
110
+ retry?: {
111
+ maxRetries: number;
112
+ initialDelay?: number;
113
+ maxDelay?: number;
114
+ };
91
115
  }