homebridge-kasa-python 2.9.1 → 3.0.0-beta.1

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 (57) hide show
  1. package/README.md +1 -1
  2. package/config.schema.json +17 -2
  3. package/dist/accessoryInformation.d.ts +2 -2
  4. package/dist/accessoryInformation.js +24 -28
  5. package/dist/accessoryInformation.js.map +1 -1
  6. package/dist/config.d.ts +5 -1
  7. package/dist/config.js +24 -16
  8. package/dist/config.js.map +1 -1
  9. package/dist/devices/baseDevice.d.ts +61 -0
  10. package/dist/devices/baseDevice.js +361 -0
  11. package/dist/devices/baseDevice.js.map +1 -0
  12. package/dist/devices/baseParent.d.ts +19 -0
  13. package/dist/devices/baseParent.js +150 -0
  14. package/dist/devices/baseParent.js.map +1 -0
  15. package/dist/devices/create.d.ts +3 -3
  16. package/dist/devices/create.js +21 -27
  17. package/dist/devices/create.js.map +1 -1
  18. package/dist/devices/descriptorHelpers.d.ts +14 -0
  19. package/dist/devices/descriptorHelpers.js +146 -0
  20. package/dist/devices/descriptorHelpers.js.map +1 -0
  21. package/dist/devices/deviceManager.d.ts +13 -13
  22. package/dist/devices/deviceManager.js +115 -137
  23. package/dist/devices/deviceManager.js.map +1 -1
  24. package/dist/devices/{kasaDevices.d.ts → deviceTypes.d.ts} +58 -42
  25. package/dist/devices/deviceTypes.js +20 -0
  26. package/dist/devices/deviceTypes.js.map +1 -0
  27. package/dist/devices/homekitLightBulb.d.ts +7 -28
  28. package/dist/devices/homekitLightBulb.js +42 -365
  29. package/dist/devices/homekitLightBulb.js.map +1 -1
  30. package/dist/devices/homekitPlug.d.ts +6 -25
  31. package/dist/devices/homekitPlug.js +21 -322
  32. package/dist/devices/homekitPlug.js.map +1 -1
  33. package/dist/devices/homekitPowerStrip.d.ts +6 -26
  34. package/dist/devices/homekitPowerStrip.js +25 -345
  35. package/dist/devices/homekitPowerStrip.js.map +1 -1
  36. package/dist/devices/homekitSwitch.d.ts +5 -26
  37. package/dist/devices/homekitSwitch.js +18 -302
  38. package/dist/devices/homekitSwitch.js.map +1 -1
  39. package/dist/devices/homekitSwitchWithChildren.d.ts +5 -29
  40. package/dist/devices/homekitSwitchWithChildren.js +24 -371
  41. package/dist/devices/homekitSwitchWithChildren.js.map +1 -1
  42. package/dist/energyCharacteristics.d.ts +8 -0
  43. package/dist/energyCharacteristics.js +88 -0
  44. package/dist/energyCharacteristics.js.map +1 -0
  45. package/dist/platform.d.ts +4 -2
  46. package/dist/platform.js +68 -63
  47. package/dist/platform.js.map +1 -1
  48. package/dist/python/kasaApi.py +68 -55
  49. package/dist/python/pythonChecker.js +2 -2
  50. package/dist/python/pythonChecker.js.map +1 -1
  51. package/package.json +15 -15
  52. package/requirements.txt +2 -2
  53. package/dist/devices/index.d.ts +0 -33
  54. package/dist/devices/index.js +0 -100
  55. package/dist/devices/index.js.map +0 -1
  56. package/dist/devices/kasaDevices.js +0 -102
  57. package/dist/devices/kasaDevices.js.map +0 -1
package/dist/platform.js CHANGED
@@ -5,6 +5,7 @@ import create from './devices/create.js';
5
5
  import DeviceManager, { deviceEventEmitter } from './devices/deviceManager.js';
6
6
  import PythonChecker from './python/pythonChecker.js';
7
7
  import { parseConfig } from './config.js';
8
+ import { createEnergyCharacteristics } from './energyCharacteristics.js';
8
9
  import { TaskQueue } from './taskQueue.js';
9
10
  import { deferAndCombine, runCommand } from './utils.js';
10
11
  import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
@@ -15,6 +16,7 @@ export default class KasaPythonPlatform {
15
16
  log;
16
17
  api;
17
18
  Characteristic;
19
+ energyCharacteristics;
18
20
  configuredAccessories = new Map();
19
21
  offlineAccessories = new Map();
20
22
  Service;
@@ -39,6 +41,9 @@ export default class KasaPythonPlatform {
39
41
  this.Characteristic = this.api.hap.Characteristic;
40
42
  this.storagePath = this.api.user.storagePath();
41
43
  this.config = parseConfig(config);
44
+ if (this.config.enableEnergyMonitoring) {
45
+ this.energyCharacteristics = createEnergyCharacteristics(this.api.hap);
46
+ }
42
47
  this.periodicDeviceDiscoveryEmitter = new EventEmitter();
43
48
  this.taskQueue = new TaskQueue(this.log);
44
49
  this.setupDeviceEventEmitter('firstDiscovery');
@@ -74,10 +79,10 @@ export default class KasaPythonPlatform {
74
79
  this.stopKasaApi();
75
80
  });
76
81
  }
77
- setupDeviceEventEmitter(name, discoveredDeviceIds) {
82
+ setupDeviceEventEmitter(mode, discoveredDeviceIds) {
78
83
  deviceEventEmitter.removeAllListeners('deviceDiscovered');
79
- this.log.debug(`Setting up device event emitter: ${name}`);
80
- if (name === 'periodicDiscovery' && discoveredDeviceIds) {
84
+ this.log.debug(`Setting up device event emitter: ${mode}`);
85
+ if (mode === 'periodicDiscovery' && discoveredDeviceIds) {
81
86
  deviceEventEmitter.on('deviceDiscovered', async (device) => {
82
87
  this.log.debug(`Device discovered during periodic discovery: ${device.sys_info.device_id}`);
83
88
  discoveredDeviceIds.add(device.sys_info.device_id);
@@ -124,10 +129,10 @@ export default class KasaPythonPlatform {
124
129
  if (this.api.versionGreaterOrEqual &&
125
130
  !(this.api.versionGreaterOrEqual('1.11.0') ||
126
131
  this.api.versionGreaterOrEqual('2.0.0'))) {
127
- throw new Error(`homebridge-kasa-python requires Homebridge ^1.11.0 || ^2.0. Currently running: ${this.api.serverVersion}`);
132
+ throw new Error(`homebridge-kasa-python requires Homebridge ^1.11.0 || ^2.0.0-beta.0. Currently running: ${this.api.serverVersion}`);
128
133
  }
129
134
  else {
130
- this.log.debug(`Homebridge version ${this.api.serverVersion} satisfies the requirement ^1.11.0 || ^2.0.0`);
135
+ this.log.debug(`Homebridge version ${this.api.serverVersion} satisfies the requirement ^1.11.0 || ^2.0.0-beta.0`);
131
136
  }
132
137
  }
133
138
  catch (error) {
@@ -160,8 +165,13 @@ export default class KasaPythonPlatform {
160
165
  setupPeriodicDiscovery(discoveredDeviceIds) {
161
166
  this.log.debug('Setting up periodic device discovery');
162
167
  this.setupDeviceEventEmitter('periodicDiscovery', discoveredDeviceIds);
163
- setInterval(async () => {
168
+ const discoveryTask = async () => {
164
169
  await this.periodicDeviceDiscovery(discoveredDeviceIds);
170
+ };
171
+ const deferredDiscoveryTask = deferAndCombine(discoveryTask, this.config.advancedOptions.waitTimeUpdate);
172
+ setInterval(async () => {
173
+ this.taskQueue.addTask(deferredDiscoveryTask);
174
+ await deferredDiscoveryTask();
165
175
  }, this.config.discoveryOptions.discoveryPollingInterval);
166
176
  this.log.debug('Periodic device discovery setup completed');
167
177
  }
@@ -188,25 +198,20 @@ export default class KasaPythonPlatform {
188
198
  this.periodicDeviceDiscovering = true;
189
199
  discoveredDeviceIds.clear();
190
200
  this.log.debug('Cleared discoveredDeviceIds set before discovery.');
191
- const task = async () => {
192
- try {
193
- if (this.deviceManager) {
194
- await this.deviceManager.discoverDevices();
195
- }
196
- }
197
- catch (error) {
198
- this.log.error('Error during periodic device discovery:', error);
199
- }
200
- finally {
201
- this.handleOfflineDevices(discoveredDeviceIds);
202
- this.periodicDeviceDiscovering = false;
203
- this.periodicDeviceDiscoveryEmitter.emit('periodicDeviceDiscoveryComplete');
204
- this.log.debug('Finished periodic device discovery');
201
+ try {
202
+ if (this.deviceManager) {
203
+ await this.deviceManager.discoverDevices();
205
204
  }
206
- };
207
- const deferAndCombinedTask = deferAndCombine(task, this.config.advancedOptions.waitTimeUpdate);
208
- this.taskQueue.addTask(deferAndCombinedTask);
209
- await deferAndCombinedTask();
205
+ }
206
+ catch (error) {
207
+ this.log.error('Error during periodic device discovery:', error);
208
+ }
209
+ finally {
210
+ this.handleOfflineDevices(discoveredDeviceIds);
211
+ this.periodicDeviceDiscovering = false;
212
+ this.periodicDeviceDiscoveryEmitter.emit('periodicDeviceDiscoveryComplete');
213
+ this.log.debug('Finished periodic device discovery');
214
+ }
210
215
  }
211
216
  async processDevice(device) {
212
217
  this.log.debug(`Processing device: ${device.sys_info.device_id}`);
@@ -214,9 +219,9 @@ export default class KasaPythonPlatform {
214
219
  const now = new Date();
215
220
  device.last_seen = now;
216
221
  device.offline = false;
217
- const platformAccessory = this.findPlatformAccessory(device.sys_info.device_id);
218
- if (platformAccessory) {
219
- await this.updateExistingDevice(platformAccessory, device, now);
222
+ const accessory = this.findPlatformAccessory(device.sys_info.device_id);
223
+ if (accessory) {
224
+ await this.updateExistingDevice(accessory, device, now);
220
225
  }
221
226
  else {
222
227
  await this.addNewDevice(device);
@@ -264,9 +269,9 @@ export default class KasaPythonPlatform {
264
269
  }
265
270
  return undefined;
266
271
  }
267
- async updateExistingDevice(platformAccessory, device, now) {
272
+ async updateExistingDevice(accessory, device, now) {
268
273
  this.log.debug(`Device [${device.sys_info.device_id}] is already configured, updating status.`);
269
- this.updateAccessoryStatus(platformAccessory, now, false);
274
+ this.updateAccessoryStatus(accessory, now, false);
270
275
  const existingDevice = this.homekitDevicesById.get(device.sys_info.device_id);
271
276
  if (existingDevice) {
272
277
  if (!existingDevice.isUpdating) {
@@ -355,7 +360,7 @@ export default class KasaPythonPlatform {
355
360
  return result;
356
361
  }
357
362
  getServiceName(service) {
358
- const serviceName = lookup(this.api.hap.Service, (thisKeyValue, value) => isObjectLike(thisKeyValue) && 'UUID' in thisKeyValue && thisKeyValue.UUID === value, service.UUID);
363
+ const serviceName = lookup(this.api.hap.Service, (objectProp, value) => isObjectLike(objectProp) && 'UUID' in objectProp && objectProp.UUID === value, service.UUID);
359
364
  return serviceName;
360
365
  }
361
366
  getCharacteristicName(characteristic) {
@@ -364,54 +369,54 @@ export default class KasaPythonPlatform {
364
369
  const lookupName = lookupCharacteristicNameByUUID(this.api.hap.Characteristic, characteristic.UUID);
365
370
  return name ?? displayName ?? lookupName;
366
371
  }
367
- registerPlatformAccessory(platformAccessory) {
368
- this.log.debug('Registering platform platformAccessory:', platformAccessory.displayName);
369
- if (!this.configuredAccessories.has(platformAccessory.UUID)) {
370
- this.log.debug(`Platform Accessory ${platformAccessory.displayName} is not in configuredAccessories, adding it.`);
371
- this.configuredAccessories.set(platformAccessory.UUID, platformAccessory);
372
+ registerPlatformAccessory(accessory) {
373
+ this.log.debug('Registering platform accessory:', accessory.displayName);
374
+ if (!this.configuredAccessories.has(accessory.UUID)) {
375
+ this.log.debug(`Platform Accessory ${accessory.displayName} is not in configuredAccessories, adding it.`);
376
+ this.configuredAccessories.set(accessory.UUID, accessory);
372
377
  }
373
378
  else {
374
- this.log.debug(`Platform Accessory ${platformAccessory.displayName} is already in configuredAccessories.`);
379
+ this.log.debug(`Platform Accessory ${accessory.displayName} is already in configuredAccessories.`);
375
380
  }
376
- this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [platformAccessory]);
377
- this.log.debug(`Platform Accessory ${platformAccessory.displayName} registered with Homebridge.`);
381
+ this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
382
+ this.log.debug(`Platform Accessory ${accessory.displayName} registered with Homebridge.`);
378
383
  }
379
- configureAccessory(platformAccessory) {
380
- this.log.debug(`Configuring Platform Accessory: [${platformAccessory.displayName}] UUID: ${platformAccessory.UUID}`);
381
- if (!platformAccessory.context.lastSeen && !platformAccessory.context.offline) {
382
- this.log.debug(`Setting initial lastSeen and offline status for Platform Accessory: [${platformAccessory.displayName}]`);
383
- platformAccessory.context.lastSeen = new Date();
384
- platformAccessory.context.offline = false;
385
- }
386
- if (platformAccessory.context.lastSeen) {
384
+ configureAccessory(accessory) {
385
+ this.log.debug(`Configuring Platform Accessory: [${accessory.displayName}] UUID: ${accessory.UUID}`);
386
+ if (!accessory.context.lastSeen && !accessory.context.offline) {
387
+ this.log.debug(`Setting initial lastSeen and offline status for Platform Accessory: [${accessory.displayName}]`);
388
+ accessory.context.lastSeen = new Date();
389
+ accessory.context.offline = false;
390
+ }
391
+ if (accessory.context.lastSeen) {
387
392
  const now = new Date();
388
- const timeSinceLastSeen = now.getTime() - new Date(platformAccessory.context.lastSeen).getTime();
393
+ const timeSinceLastSeen = now.getTime() - new Date(accessory.context.lastSeen).getTime();
389
394
  const offlineInterval = this.config.discoveryOptions.offlineInterval;
390
- this.log.debug(`Platform Accessory [${platformAccessory.displayName}] last seen ${timeSinceLastSeen}ms ago, ` +
391
- `offline interval is ${offlineInterval}ms, offline status: ${platformAccessory.context.offline}`);
392
- if (timeSinceLastSeen > offlineInterval && platformAccessory.context.offline === true) {
393
- this.log.info(`Platform Accessory [${platformAccessory.displayName}] is offline and outside the offline interval, ` +
395
+ this.log.debug(`Platform Accessory [${accessory.displayName}] last seen ${timeSinceLastSeen}ms ago, ` +
396
+ `offline interval is ${offlineInterval}ms, offline status: ${accessory.context.offline}`);
397
+ if (timeSinceLastSeen > offlineInterval && accessory.context.offline === true) {
398
+ this.log.info(`Platform Accessory [${accessory.displayName}] is offline and outside the offline interval, ` +
394
399
  'moving to offlineAccessories');
395
- this.configuredAccessories.delete(platformAccessory.UUID);
396
- this.offlineAccessories.set(platformAccessory.UUID, platformAccessory);
400
+ this.configuredAccessories.delete(accessory.UUID);
401
+ this.offlineAccessories.set(accessory.UUID, accessory);
397
402
  return;
398
403
  }
399
- else if (timeSinceLastSeen < offlineInterval && platformAccessory.context.offline === true) {
400
- this.log.debug(`Platform Accessory [${platformAccessory.displayName}] is offline and within offline interval.`);
404
+ else if (timeSinceLastSeen < offlineInterval && accessory.context.offline === true) {
405
+ this.log.debug(`Platform Accessory [${accessory.displayName}] is offline and within offline interval.`);
401
406
  }
402
- else if (platformAccessory.context.offline === false) {
403
- this.log.debug(`Platform Accessory [${platformAccessory.displayName}] is online, updating lastSeen time.`);
404
- this.updateAccessoryStatus(platformAccessory, now, false);
407
+ else if (accessory.context.offline === false) {
408
+ this.log.debug(`Platform Accessory [${accessory.displayName}] is online, updating lastSeen time.`);
409
+ this.updateAccessoryStatus(accessory, now, false);
405
410
  }
406
411
  }
407
- if (!this.configuredAccessories.has(platformAccessory.UUID)) {
408
- this.log.debug(`Platform Accessory [${platformAccessory.displayName}] with UUID [${platformAccessory.UUID}] ` +
412
+ if (!this.configuredAccessories.has(accessory.UUID)) {
413
+ this.log.debug(`Platform Accessory [${accessory.displayName}] with UUID [${accessory.UUID}] ` +
409
414
  'is not in configuredAccessories, adding it.');
410
- this.configuredAccessories.set(platformAccessory.UUID, platformAccessory);
415
+ this.configuredAccessories.set(accessory.UUID, accessory);
411
416
  }
412
417
  else {
413
- this.log.debug(`Platform Accessory [${platformAccessory.displayName}] with UUID ` +
414
- `[${platformAccessory.UUID}] is already in configuredAccessories.`);
418
+ this.log.debug(`Platform Accessory [${accessory.displayName}] with UUID ` +
419
+ `[${accessory.UUID}] is already in configuredAccessories.`);
415
420
  }
416
421
  }
417
422
  async foundDevice(device) {
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAWA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,aAAa,EAAE,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,aAAa,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,8BAA8B,EAC9B,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAUpB,IAAI,aAA2E,CAAC;AAChF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,kBAAkB;IAoBT;IAAsD;IAnBlE,cAAc,CAAwB;IACtC,qBAAqB,GAA+D,IAAI,GAAG,EAAE,CAAC;IAC9F,kBAAkB,GAA+D,IAAI,GAAG,EAAE,CAAC;IAC3F,OAAO,CAAiB;IACxB,WAAW,CAAS;IAC7B,oBAAoB,GAAW,EAAE,CAAC;IAClC,MAAM,CAAmB;IACzB,aAAa,CAA4B;IACzC,cAAc,GAAY,KAAK,CAAC;IAChC,yBAAyB,GAAY,KAAK,CAAC;IAC3C,8BAA8B,CAAe;IAC7C,IAAI,GAAW,CAAC,CAAC;IACjB,SAAS,CAAY;IACX,kBAAkB,GAA+B,IAAI,GAAG,EAAE,CAAC;IACpE,iBAAiB,GAAY,IAAI,CAAC;IAClC,SAAS,GAAY,KAAK,CAAC;IAC3B,WAAW,GAAsD,IAAI,CAAC;IACtE,sBAAsB,CAAgB;IAE9C,YAA4B,GAAY,EAAE,MAAsB,EAAkB,GAAQ;QAA9D,QAAG,GAAH,GAAG,CAAS;QAA0C,QAAG,GAAH,GAAG,CAAK;QACxF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,8BAA8B,GAAG,IAAI,YAAY,EAAE,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;QAE/C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACtE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACzD,MAAM,IAAI,CAAC,sBAAsB,CAAC;YAClC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACjH,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAClC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC7C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtD,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8DAA8D,EAAE,KAAK,CAAC,CAAC;YACxF,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,IAAY,EAAE,mBAAiC;QAC7E,kBAAkB,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,KAAK,mBAAmB,IAAI,mBAAmB,EAAE,CAAC;YACxD,kBAAkB,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAkB,EAAE,EAAE;gBACrE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gDAAgD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC5F,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACnD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2CAA2C,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;gBACvF,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,kBAAkB,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAkB,EAAE,EAAE;gBACrE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+CAA+C,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC3F,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,MAAM,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAClF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAEO,wBAAwB;QAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,GAAG,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,IAAI;YAC5E,eAAe,IAAI,CAAC,GAAG,CAAC,aAAa,UAAU,IAAI,CAAC,GAAG,CAAC,OAAO,kBAAkB,CAClF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAExC,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC3C,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACxF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,OAAO,8BAA8B,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/G,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC9C,IACE,IAAI,CAAC,GAAG,CAAC,qBAAqB;gBAC9B,CAAC,CACC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC;oBACxC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAC,CACxC,EACD,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,kFAAkF,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAC3G,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,sBAAsB,IAAI,CAAC,GAAG,CAAC,aAAa,8CAA8C,CAC3F,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC9C,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEvC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,GAAG,MAAM,gBAAgB,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAE9C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC7C,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAE5C,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,MAAM,aAAa,CAAC,oBAAoB,IAAI,CAAC,IAAI,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEtE,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAE7C,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;YAC9C,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,mBAAgC;QAC7D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACvD,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;QACvE,WAAW,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;QAC1D,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,mBAAgC;QACpE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QACtC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;gBAC/C,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;gBACvC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAC5E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC;QACF,MAAM,oBAAoB,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAC/F,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC7C,MAAM,oBAAoB,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAAkB;QAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;YACvB,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAChF,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,KAAK,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,mBAAgC;QAC3D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE;YACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,WAAW,0BAA0B,CAAC,CAAC;gBAC7E,OAAO;YACT,CAAC;YACD,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,SAAS,CAAC,WAAW,iCAAiC,CAAC,CAAC;gBACrF,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAC5B,SAAwD,EACxD,IAAY,EACZ,GAAS;QAET,MAAM,iBAAiB,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9F,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC;QACrE,IAAI,iBAAiB,GAAG,eAAe,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,WAAW,0DAA0D,CAAC,CAAC;YAC7G,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,SAAS,CAAC,WAAW,+CAA+C,CAAC,CAAC;YACnG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,QAAgB;QAC5C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5D,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC5C,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,iBAAgE,EAChE,MAAkB,EAClB,GAAS;QAET,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,SAAS,2CAA2C,CAAC,CAAC;QAChG,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC9E,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;gBAC/B,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACzD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,SAAS,iEAAiE,CAAC,CAAC;oBACtH,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC;oBACnC,cAAc,CAAC,4BAA4B,EAAE,CAAC;oBAC9C,cAAc,CAAC,YAAY,EAAE,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qCAAqC,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;oBACnF,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC;oBACnC,cAAc,CAAC,4BAA4B,EAAE,CAAC;gBAChD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,QAAQ,CAAC,SAAS,2CAA2C,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAkB;QAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,SAAS,6BAA6B,CAAC,CAAC;QACtF,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,mBAAmB,GAAG,IAAI,CAAC,8BAA8B,CAAC,aAAa,CAAC,iCAAiC,CAAC,CAAC;QACjH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8CAA8C,mBAAmB,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,8BAA8B,CAAC,eAAe,CAAC,IAAI,CAAC,8BAA8B,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QAChH,MAAM,kBAAkB,GAAG,IAAI,CAAC,8BAA8B,CAAC,aAAa,CAAC,iCAAiC,CAAC,CAAC;QAChH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6CAA6C,kBAAkB,EAAE,CAAC,CAAC;IACpF,CAAC;IAEO,qBAAqB,CAC3B,SAAwD,EACxD,QAAc,EACd,OAAgB;QAEhB,SAAS,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACtC,SAAS,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,SAAkB;QAC1C,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAC;YACrE,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACrE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,UAAU,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,AAAD,EAAG,AAAD,EAAG,mBAAmB,CAAC,GAAG,MAAM,UAAU,CAClD,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,oBAAoB,EACzB,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EACrE,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAChE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAChE,IAAI,CACL,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YACjH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACzE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAEM,GAAG,CACR,uBAAoE,EACpE,cAAkD;QAElD,MAAM,WAAW,GAAG,uBAAuB,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO;YACzE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,kBAAkB,GAAG,cAAc,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc;YAC9E,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC;YAC5C,CAAC,CAAC,uBAAuB,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,IAAI,uBAAuB;gBACnG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC;gBACrD,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;YACpC,GAAG,WAAW,IAAI,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACjD,GAAG,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QAClE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,cAAc,CAAC,OAAyB;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CACvE,YAAY,CAAC,YAAY,CAAC,IAAI,MAAM,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACrG,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,qBAAqB,CAAC,cAA+E;QACnG,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;QACjC,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC;QAC/C,MAAM,UAAU,GAAG,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QACpG,OAAO,IAAI,IAAI,WAAW,IAAI,UAAU,CAAC;IAC3C,CAAC;IAED,yBAAyB,CAAC,iBAAgE;QACxF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEzF,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,iBAAiB,CAAC,WAAW,8CAA8C,CAAC,CAAC;YAClH,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,iBAAiB,CAAC,WAAW,uCAAuC,CAAC,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,iBAAiB,CAAC,WAAW,8BAA8B,CAAC,CAAC;IACpG,CAAC;IAED,kBAAkB,CAAC,iBAAgE;QACjF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,iBAAiB,CAAC,WAAW,WAAW,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;QAErH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wEAAwE,iBAAiB,CAAC,WAAW,GAAG,CAAC,CAAC;YACzH,iBAAiB,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;YAChD,iBAAiB,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5C,CAAC;QAED,IAAI,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,iBAAiB,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YACjG,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC;YAErE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,iBAAiB,CAAC,WAAW,eAAe,iBAAiB,UAAU;gBAC3G,uBAAuB,eAAe,uBAAuB,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAEpG,IAAI,iBAAiB,GAAG,eAAe,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBACtF,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,uBAAuB,iBAAiB,CAAC,WAAW,iDAAiD;oBACrG,8BAA8B,CAC/B,CAAC;gBACF,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC1D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;iBAAM,IAAI,iBAAiB,GAAG,eAAe,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC7F,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,iBAAiB,CAAC,WAAW,2CAA2C,CAAC,CAAC;YAClH,CAAC;iBAAM,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBACvD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,iBAAiB,CAAC,WAAW,sCAAsC,CAAC,CAAC;gBAC3G,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,uBAAuB,iBAAiB,CAAC,WAAW,gBAAgB,iBAAiB,CAAC,IAAI,IAAI;gBAC9F,6CAA6C,CAC9C,CAAC;YACF,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,uBAAuB,iBAAiB,CAAC,WAAW,cAAc;gBAClE,IAAI,iBAAiB,CAAC,IAAI,wCAAwC,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAkB;QAC1C,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC;QAEpH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,WAAW,KAAK,UAAU,KAAK,QAAQ,GAAG,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,WAAW,KAAK,UAAU,KAAK,QAAQ,cAAc,UAAU,GAAG,CAAC,CAAC;QAC7G,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAA8B,CAAC;QAC1F,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,WAAW,KAAK,UAAU,KAAK,QAAQ,sBAAsB,CAAC,CAAC;QACnG,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,WAAW,KAAK,UAAU,KAAK,QAAQ,GAAG,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,UAAsB;QACtD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpE,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import json
3
3
  import os
4
4
  import re
5
5
  import sys
6
- from typing import Any, Dict, List, Optional, Tuple
6
+ from typing import Any, Optional
7
7
 
8
8
  from kasa import (
9
9
  AuthenticationError,
@@ -20,9 +20,9 @@ from quart import Quart, jsonify, request, Response
20
20
  app = Quart(__name__)
21
21
 
22
22
  hide_homekit_matter = os.getenv("HIDE_HOMEKIT_MATTER", "false").lower() == "true"
23
- device_cache: Dict[str, Device] = {}
24
- device_lock_cache: Dict[str, asyncio.Lock] = {}
25
- device_config_cache: Dict[str, dict] = {}
23
+ device_cache: dict[str, Device] = {}
24
+ device_lock_cache: dict[str, asyncio.Lock] = {}
25
+ device_config_cache: dict[str, dict] = {}
26
26
 
27
27
  device_queue: asyncio.Queue = asyncio.Queue()
28
28
 
@@ -38,18 +38,23 @@ UNSUPPORTED_TYPES = {
38
38
  DeviceType.Unknown.value,
39
39
  }
40
40
 
41
- HOMEKIT_MIRED_RANGE = (140, 500)
42
- TPLINK_KELVIN_RANGE = (2500, 6500)
43
-
44
41
  def kelvin_to_mired(kelvin: int) -> int:
45
42
  if not kelvin or kelvin <= 0:
46
- return HOMEKIT_MIRED_RANGE[0]
47
- return max(HOMEKIT_MIRED_RANGE[0], min(round(1_000_000 / kelvin), HOMEKIT_MIRED_RANGE[1]))
43
+ return 140
44
+ return max(140, min(round(1_000_000 / kelvin), 500))
48
45
 
49
46
  def mired_to_kelvin(mired: int) -> int:
50
47
  if not mired or mired <= 0:
51
- return TPLINK_KELVIN_RANGE[0]
52
- return max(TPLINK_KELVIN_RANGE[0], min(round(1_000_000 / mired), TPLINK_KELVIN_RANGE[1]))
48
+ return 2500
49
+ return max(2500, min(round(1_000_000 / mired), 6500))
50
+
51
+ def _percent_to_level(percent: int) -> int:
52
+ mapping = {0: 0, 25: 1, 50: 2, 75: 3, 100: 4}
53
+ return mapping[percent]
54
+
55
+ def _level_to_percent(level: int) -> int:
56
+ mapping = {0: 0, 1: 25, 2: 50, 3: 75, 4: 100}
57
+ return mapping[level]
53
58
 
54
59
  def log(message: str, level: str = "INFO", host: Optional[str] = None, alias: Optional[str] = None):
55
60
  context = []
@@ -65,7 +70,7 @@ def _extract_child_suffix_index(device_id: str) -> int:
65
70
  m = re.search(r'(\d{1,2})$', base)
66
71
  return int(m.group(1)) if m else 0
67
72
 
68
- def serialize_child(child: Device) -> Dict[str, Any]:
73
+ def serialize_child(child: Device) -> dict[str, Any]:
69
74
  log("Serializing child device", alias=child.alias)
70
75
  child_info = {
71
76
  "alias": child.alias,
@@ -78,30 +83,31 @@ def serialize_child(child: Device) -> Dict[str, Any]:
78
83
  if light_module:
79
84
  child_info.update(get_light_info(child))
80
85
  if fan_module:
81
- child_info.update({"fan_speed_level": fan_module.fan_speed_level})
86
+ level = getattr(fan_module, "fan_speed_level")
87
+ percent = _level_to_percent(level)
88
+ child_info.update({
89
+ "fan_speed_level": percent,
90
+ })
82
91
  if energy_module:
83
92
  child_info.update(get_energy_info(child))
84
93
  return child_info
85
94
 
86
- def get_light_info(device: Device) -> Dict[str, Any]:
95
+ def get_light_info(device: Device) -> dict[str, Any]:
87
96
  log("Getting light info for device", alias=device.alias)
88
97
  light_module = device.modules.get(Module.Light)
89
- light_info = {}
98
+ light_info: dict[str, Any] = {}
90
99
  if light_module.has_feature("brightness"):
91
100
  light_info["brightness"] = light_module.brightness
92
101
  if light_module.has_feature("color_temp"):
93
102
  kelvin = light_module.color_temp
94
- if kelvin and kelvin > 0:
95
- mired = kelvin_to_mired(kelvin)
96
- else:
97
- mired = HOMEKIT_MIRED_RANGE[0]
103
+ mired = kelvin_to_mired(kelvin) if kelvin and kelvin > 0 else 140
98
104
  light_info["color_temp"] = mired
99
105
  if light_module.has_feature("hsv"):
100
106
  hue, saturation, _ = light_module.hsv
101
107
  light_info["hsv"] = {"hue": hue, "saturation": saturation}
102
108
  return light_info
103
109
 
104
- def get_energy_info(device: Device) -> Dict[str, Any]:
110
+ def get_energy_info(device: Device) -> dict[str, Any]:
105
111
  log("Getting energy info for device", alias=device.alias)
106
112
  energy_module = device.modules.get(Module.Energy)
107
113
  energy_fields = (
@@ -115,10 +121,10 @@ def get_energy_info(device: Device) -> Dict[str, Any]:
115
121
  energy_dict = {key: getattr(energy_module, attr) for key, attr in energy_fields}
116
122
  return {"energy": energy_dict}
117
123
 
118
- def custom_serializer(device: Device) -> Dict[str, Any]:
124
+ def custom_serializer(device: Device) -> dict[str, Any]:
119
125
  log("Serializing device", host=device.host, alias=device.alias)
120
126
  child_num = len(device.children) if device.children else 0
121
- sys_info = {
127
+ sys_info: dict[str, Any] = {
122
128
  "alias": device.alias or f'{device.device_type}_{device.host}',
123
129
  "child_num": child_num,
124
130
  "device_id": device.device_id if device.mac != device.device_id else device.sys_info.get("deviceId"),
@@ -140,7 +146,11 @@ def custom_serializer(device: Device) -> Dict[str, Any]:
140
146
  if light_module:
141
147
  sys_info.update(get_light_info(device))
142
148
  if fan_module:
143
- sys_info.update({"fan_speed_level": fan_module.fan_speed_level})
149
+ level = getattr(fan_module, "fan_speed_level")
150
+ percent = _level_to_percent(level)
151
+ sys_info.update({
152
+ "fan_speed_level": percent,
153
+ })
144
154
  if energy_module:
145
155
  sys_info.update(get_energy_info(device))
146
156
  feature_info = {
@@ -165,10 +175,10 @@ def custom_serializer(device: Device) -> Dict[str, Any]:
165
175
  async def discover_devices(
166
176
  username: Optional[str] = None,
167
177
  password: Optional[str] = None,
168
- additional_broadcasts: Optional[List[str]] = None,
169
- manual_devices: Optional[List[str]] = None,
170
- exclude_mac_addresses: Optional[List[str]] = None,
171
- include_mac_addresses: Optional[List[str]] = None,
178
+ additional_broadcasts: Optional[list[str]] = None,
179
+ manual_devices: Optional[list[str]] = None,
180
+ exclude_mac_addresses: Optional[list[str]] = None,
181
+ include_mac_addresses: Optional[list[str]] = None,
172
182
  ) -> None:
173
183
  broadcasts = ["255.255.255.255"] + (additional_broadcasts or [])
174
184
  credentials = Credentials(username, password) if username and password else None
@@ -192,7 +202,7 @@ async def discover_devices(
192
202
  log(f"Device discovery: {e}", level="ERROR", host=device.host, alias=device.alias)
193
203
  await safe_disconnect(device)
194
204
 
195
- async def process_device(device: Device) -> Optional[Dict[str, Any]]:
205
+ async def process_device(device: Device) -> Optional[dict[str, Any]]:
196
206
  log("Processing device", host=device.host, alias=device.alias)
197
207
  if include_mac_addresses and device.mac not in include_mac_addresses:
198
208
  log("Excluding device due to MAC address inclusion", host=device.host, alias=device.alias)
@@ -267,7 +277,7 @@ async def close_all_connections():
267
277
  await asyncio.gather(*disconnect_tasks, return_exceptions=True)
268
278
  device_cache.clear()
269
279
 
270
- async def create_device_info(device: Device) -> Tuple[str, Dict[str, Any]]:
280
+ async def create_device_info(device: Device) -> dict[str, Any]:
271
281
  log("Creating device info", host=device.host, alias=device.alias)
272
282
  try:
273
283
  device_info = custom_serializer(device)
@@ -281,7 +291,7 @@ async def create_device_info(device: Device) -> Tuple[str, Dict[str, Any]]:
281
291
  log(f"Creating device info: {e}", level="ERROR", host=device.host, alias=device.alias)
282
292
  return {"error": str(e)}
283
293
 
284
- async def get_sys_info(host: str) -> Dict[str, Any]:
294
+ async def get_sys_info(host: str) -> dict[str, Any]:
285
295
  log("Getting sys_info", host=host)
286
296
  try:
287
297
  device_config_dict = device_config_cache.get(host)
@@ -317,7 +327,7 @@ async def control_device(
317
327
  action: str,
318
328
  value: Any,
319
329
  child_num: Optional[int] = None,
320
- ) -> Dict[str, Any]:
330
+ ) -> dict[str, Any]:
321
331
  log("Controlling device", host=host)
322
332
  try:
323
333
  device_config_dict = device_config_cache.get(host)
@@ -335,7 +345,7 @@ async def perform_device_action(
335
345
  action: str,
336
346
  value: Any,
337
347
  child_num: Optional[int] = None,
338
- ) -> Dict[str, Any]:
348
+ ) -> dict[str, Any]:
339
349
  try:
340
350
  target = device.children[child_num] if child_num is not None else device
341
351
  log(f"Performing action={action} on feature={feature}", alias=target.alias)
@@ -363,42 +373,42 @@ async def handle_brightness(target: Device, action: str, value: int):
363
373
  light = target.modules.get(Module.Light)
364
374
  if value == 0:
365
375
  await target.turn_off()
366
- else:
367
- value = max(1, min(value, 100))
368
- await getattr(light, action)(value)
369
- if target.is_off:
370
- await target.turn_on()
376
+ return
377
+ value = max(1, min(value, 100))
378
+ await getattr(light, action)(value)
379
+ if target.is_off:
380
+ await target.turn_on()
371
381
 
372
382
  async def handle_color_temp(target: Device, action: str, value: int):
373
383
  log(f"Handling color temperature: action={action}, value={value}", alias=target.alias)
374
384
  light = target.modules.get(Module.Light)
375
385
  color_temp = target.modules.get(Module.ColorTemperature)
376
- mired = max(HOMEKIT_MIRED_RANGE[0], min(value, HOMEKIT_MIRED_RANGE[1]))
386
+ mired = max(140, min(value, 500))
377
387
  kelvin = mired_to_kelvin(mired)
378
388
  if color_temp and hasattr(color_temp, "valid_temperature_range"):
379
389
  min_temp, max_temp = color_temp.valid_temperature_range
380
390
  else:
381
- min_temp, max_temp = TPLINK_KELVIN_RANGE
391
+ min_temp, max_temp = (2500, 6500)
382
392
  kelvin = max(min_temp, min(kelvin, max_temp))
383
393
  await getattr(light, action)(kelvin)
384
394
 
385
395
  async def handle_fan_speed_level(target: Device, action: str, value: int):
386
396
  log(f"Handling fan speed level: action={action}, value={value}", alias=target.alias)
387
397
  fan = target.modules.get(Module.Fan)
388
- if value == 0:
398
+ level = _percent_to_level(value)
399
+ if level == 0:
389
400
  await target.turn_off()
390
- else:
391
- value = max(1, min(value, 100))
392
- await getattr(fan, action)(value)
393
- if target.is_off:
394
- await target.turn_on()
401
+ return
402
+ await getattr(fan, action)(level)
403
+ if target.is_off:
404
+ await target.turn_on()
395
405
 
396
406
  async def handle_hsv(target: Device, action: str, feature: str, value: dict):
397
407
  log(f"Handling HSV: action={action}, feature={feature}, value={value}", alias=target.alias)
398
408
  light = target.modules.get(Module.Light)
399
- hsv = list(light.hsv)
400
- h = int(value.get("hue", hsv[0]))
401
- s = int(value.get("saturation", hsv[1]))
409
+ hsv = light.hsv
410
+ h = value.get("hue", hsv[0])
411
+ s = value.get("saturation", hsv[1])
402
412
  v = hsv[2]
403
413
  hsv[0] = max(0, min(h, 360))
404
414
  hsv[1] = max(0, min(s, 100))
@@ -408,10 +418,13 @@ async def handle_hsv(target: Device, action: str, feature: str, value: dict):
408
418
  @app.route('/discover', methods=['POST'])
409
419
  async def discover_route():
410
420
  try:
421
+ username: str = None
422
+ password: str = None
411
423
  auth = request.authorization
412
- username = auth.username if auth else None
413
- password = auth.password if auth else None
414
- data: Dict[str, Any] = await request.get_json()
424
+ if auth:
425
+ username = getattr(auth, "username")
426
+ password = getattr(auth, "password")
427
+ data: dict[str, Any] = await request.get_json()
415
428
  additional_broadcasts = data.get('additionalBroadcasts', [])
416
429
  manual_devices = data.get('manualDevices', [])
417
430
  exclude_mac_addresses = data.get('excludeMacAddresses', [])
@@ -450,7 +463,7 @@ async def get_sys_info_route():
450
463
  @app.route('/controlDevice', methods=['POST'])
451
464
  async def control_device_route():
452
465
  try:
453
- data: Dict[str, Any] = await request.get_json()
466
+ data: dict[str, Any] = await request.get_json()
454
467
  host = data['host']
455
468
  feature = data['feature']
456
469
  action = data['action']
@@ -473,7 +486,7 @@ async def safe_disconnect(device: Optional[Device]):
473
486
  except Exception as e:
474
487
  log(f"Disconnecting device: {e}", level="ERROR", host=device.host, alias=device.alias)
475
488
 
476
- async def handle_device_error(host: str, error: Optional[Exception] = None) -> Dict[str, Any]:
489
+ async def handle_device_error(host: str, error: Optional[Exception] = None) -> dict[str, Any]:
477
490
  log(f"Handling device: {error}", level="ERROR", host=host)
478
491
  try:
479
492
  device_config_dict = device_config_cache.get(host)
@@ -486,8 +499,8 @@ async def handle_device_error(host: str, error: Optional[Exception] = None) -> D
486
499
  log(f"Error handling: {e}", level="ERROR", host=host)
487
500
  return {"error": str(error)}
488
501
 
489
- async def disconnect_all_devices(devices: Dict[str, Device]):
490
- for host, device in devices.items():
502
+ async def disconnect_all_devices(devices: dict[str, Device]):
503
+ for _, device in devices.items():
491
504
  await safe_disconnect(device)
492
505
  log("Disconnected device", host=device.host, alias=device.alias)
493
506
 
@@ -85,8 +85,8 @@ class PythonChecker {
85
85
  }
86
86
  }
87
87
  }
88
- this.log.error('No supported Python version found. Install Python 3.11+ and restart Homebridge.');
89
- throw new Error('No supported Python version found. Install Python 3.11+ and restart Homebridge.');
88
+ this.log.error('No supported Python version found. Install Python 3.11, 3.12, or 3.13 and restart Homebridge.');
89
+ throw new Error('No supported Python version found. Install Python 3.11, 3.12, or 3.13 and restart Homebridge.');
90
90
  }
91
91
  async getPythonVersion(executablePath) {
92
92
  try {