homebridge-kasa-python 2.7.0-beta.8 → 2.7.0

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 (49) hide show
  1. package/README.md +343 -562
  2. package/config.schema.json +23 -1
  3. package/dist/accessoryInformation.js +28 -13
  4. package/dist/accessoryInformation.js.map +1 -1
  5. package/dist/config.d.ts +8 -3
  6. package/dist/config.js +37 -42
  7. package/dist/config.js.map +1 -1
  8. package/dist/devices/create.js +15 -9
  9. package/dist/devices/create.js.map +1 -1
  10. package/dist/devices/deviceManager.d.ts +5 -3
  11. package/dist/devices/deviceManager.js +32 -66
  12. package/dist/devices/deviceManager.js.map +1 -1
  13. package/dist/devices/homekitLightBulb.d.ts +11 -1
  14. package/dist/devices/homekitLightBulb.js +221 -116
  15. package/dist/devices/homekitLightBulb.js.map +1 -1
  16. package/dist/devices/homekitPlug.d.ts +10 -0
  17. package/dist/devices/homekitPlug.js +184 -80
  18. package/dist/devices/homekitPlug.js.map +1 -1
  19. package/dist/devices/homekitPowerStrip.d.ts +10 -0
  20. package/dist/devices/homekitPowerStrip.js +199 -91
  21. package/dist/devices/homekitPowerStrip.js.map +1 -1
  22. package/dist/devices/homekitSwitch.d.ts +11 -1
  23. package/dist/devices/homekitSwitch.js +190 -89
  24. package/dist/devices/homekitSwitch.js.map +1 -1
  25. package/dist/devices/homekitSwitchWithChildren.d.ts +34 -0
  26. package/dist/devices/homekitSwitchWithChildren.js +365 -0
  27. package/dist/devices/homekitSwitchWithChildren.js.map +1 -0
  28. package/dist/devices/index.d.ts +5 -6
  29. package/dist/devices/index.js +18 -17
  30. package/dist/devices/index.js.map +1 -1
  31. package/dist/devices/kasaDevices.d.ts +4 -11
  32. package/dist/devices/kasaDevices.js +83 -95
  33. package/dist/devices/kasaDevices.js.map +1 -1
  34. package/dist/platform.d.ts +8 -2
  35. package/dist/platform.js +111 -46
  36. package/dist/platform.js.map +1 -1
  37. package/dist/python/kasaApi.py +349 -171
  38. package/dist/python/pythonChecker.d.ts +6 -4
  39. package/dist/python/pythonChecker.js +53 -20
  40. package/dist/python/pythonChecker.js.map +1 -1
  41. package/dist/python/startKasaApi.py +25 -0
  42. package/dist/taskQueue.d.ts +11 -0
  43. package/dist/taskQueue.js +44 -0
  44. package/dist/taskQueue.js.map +1 -0
  45. package/dist/utils.d.ts +1 -1
  46. package/dist/utils.js +8 -4
  47. package/dist/utils.js.map +1 -1
  48. package/package.json +15 -23
  49. package/requirements.txt +3 -3
@@ -40,6 +40,12 @@
40
40
  "functionBody": "return model.enableCredentials && model.username && model.username !== '';"
41
41
  }
42
42
  },
43
+ "hideHomeKitMatter": {
44
+ "title": "Hide HomeKit or Matter Devices",
45
+ "type": "boolean",
46
+ "description": "Hide HomeKit or Matter Devices from Homebridge.",
47
+ "default": true
48
+ },
43
49
  "pollingInterval": {
44
50
  "title": "Polling Interval (seconds)",
45
51
  "type": "integer",
@@ -95,6 +101,12 @@
95
101
  "type": "integer",
96
102
  "description": "The time to wait to combine similar commands for a device before sending a command to a device (milliseconds). Default: 100.",
97
103
  "default": 100
104
+ },
105
+ "advancedPythonLogging": {
106
+ "title": "Advanced Python Logging",
107
+ "type": "boolean",
108
+ "description": "Enable detailed logging for Python scripts.",
109
+ "default": false
98
110
  }
99
111
  }
100
112
  },
@@ -113,6 +125,15 @@
113
125
  "type": "help",
114
126
  "helpvalue": "Username and Password will be required for specific devices only."
115
127
  },
128
+ {
129
+ "type": "fieldset",
130
+ "title": "HomeKit (Optional)",
131
+ "description": "Customize HomeKit options.",
132
+ "expandable": true,
133
+ "items": [
134
+ "hideHomeKitMatter"
135
+ ]
136
+ },
116
137
  {
117
138
  "type": "fieldset",
118
139
  "title": "Device Discovery (Optional)",
@@ -165,7 +186,8 @@
165
186
  "description": "Don't change these, unless you understand what you're doing.",
166
187
  "expandable": true,
167
188
  "items": [
168
- "waitTimeUpdate"
189
+ "waitTimeUpdate",
190
+ "advancedPythonLogging"
169
191
  ]
170
192
  }
171
193
  ]
@@ -1,20 +1,35 @@
1
1
  export default function platformAccessoryInformation(hap) {
2
2
  const { Characteristic, Service: { AccessoryInformation } } = hap;
3
3
  return (platformAccessory, homekitDevice) => {
4
- const infoService = platformAccessory.getService(AccessoryInformation) ?? platformAccessory.addService(AccessoryInformation);
5
- [Characteristic.Name, Characteristic.Manufacturer, Characteristic.Model, Characteristic.SerialNumber, Characteristic.FirmwareRevision]
6
- .forEach(characteristic => {
7
- if (!infoService.getCharacteristic(characteristic)) {
8
- infoService.addCharacteristic(characteristic);
4
+ const existingInfoService = platformAccessory.getService(AccessoryInformation);
5
+ if (existingInfoService) {
6
+ if (existingInfoService.getCharacteristic(Characteristic.Name).value !== homekitDevice.name) {
7
+ existingInfoService.setCharacteristic(Characteristic.Name, homekitDevice.name);
9
8
  }
10
- });
11
- infoService
12
- .setCharacteristic(Characteristic.Name, homekitDevice.name)
13
- .setCharacteristic(Characteristic.Manufacturer, homekitDevice.manufacturer)
14
- .setCharacteristic(Characteristic.Model, homekitDevice.model)
15
- .setCharacteristic(Characteristic.SerialNumber, homekitDevice.serialNumber)
16
- .setCharacteristic(Characteristic.FirmwareRevision, homekitDevice.firmwareRevision);
17
- return infoService;
9
+ else if (existingInfoService.getCharacteristic(Characteristic.Manufacturer).value !== homekitDevice.manufacturer) {
10
+ existingInfoService.setCharacteristic(Characteristic.Manufacturer, homekitDevice.manufacturer);
11
+ }
12
+ else if (existingInfoService.getCharacteristic(Characteristic.Model).value !== homekitDevice.model) {
13
+ existingInfoService.setCharacteristic(Characteristic.Model, homekitDevice.model);
14
+ }
15
+ else if (existingInfoService.getCharacteristic(Characteristic.SerialNumber).value !== homekitDevice.serialNumber) {
16
+ existingInfoService.setCharacteristic(Characteristic.SerialNumber, homekitDevice.serialNumber);
17
+ }
18
+ else if (existingInfoService.getCharacteristic(Characteristic.FirmwareRevision).value !== homekitDevice.firmwareRevision) {
19
+ existingInfoService.setCharacteristic(Characteristic.FirmwareRevision, homekitDevice.firmwareRevision);
20
+ }
21
+ return existingInfoService;
22
+ }
23
+ else {
24
+ const infoService = platformAccessory.addService(AccessoryInformation);
25
+ infoService
26
+ .setCharacteristic(Characteristic.Name, homekitDevice.name)
27
+ .setCharacteristic(Characteristic.Manufacturer, homekitDevice.manufacturer)
28
+ .setCharacteristic(Characteristic.Model, homekitDevice.model)
29
+ .setCharacteristic(Characteristic.SerialNumber, homekitDevice.serialNumber)
30
+ .setCharacteristic(Characteristic.FirmwareRevision, homekitDevice.firmwareRevision);
31
+ return infoService;
32
+ }
18
33
  };
19
34
  }
20
35
  //# sourceMappingURL=accessoryInformation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accessoryInformation.js","sourceRoot":"","sources":["../src/accessoryInformation.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,GAAQ;IAER,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,oBAAoB,EAAE,EAAE,GAAG,GAAG,CAAC;IAElE,OAAO,CAAC,iBAAoC,EAAE,aAA4B,EAAE,EAAE;QAC5E,MAAM,WAAW,GAAG,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QAE7H,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,gBAAgB,CAAC;aACnI,OAAO,CAAC,cAAc,CAAC,EAAE;YACxB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;gBACnD,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;QAEL,WAAW;aACR,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;aAC1D,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC;aAC1E,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;aAC5D,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC;aAC1E,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAEtF,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"accessoryInformation.js","sourceRoot":"","sources":["../src/accessoryInformation.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,GAAQ;IAER,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,oBAAoB,EAAE,EAAE,GAAG,GAAG,CAAC;IAElE,OAAO,CAAC,iBAAoC,EAAE,aAA4B,EAAE,EAAE;QAC5E,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QAC/E,IAAI,mBAAmB,EAAE,CAAC;YACxB,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBAC5F,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,YAAY,EAAE,CAAC;gBACnH,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;YACjG,CAAC;iBAAM,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;gBACrG,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACnF,CAAC;iBAAM,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,YAAY,EAAE,CAAC;gBACnH,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;YACjG,CAAC;iBAAM,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,gBAAgB,EAAE,CAAC;gBAC3H,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACzG,CAAC;YACD,OAAO,mBAAmB,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;YACvE,WAAW;iBACR,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;iBAC1D,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC;iBAC1E,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;iBAC5D,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC;iBAC1E,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACtF,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,9 +1,8 @@
1
- import { ErrorObject } from 'ajv';
2
1
  import type { ConfigDevice } from './devices/kasaDevices.js';
3
2
  export declare class ConfigParseError extends Error {
4
- errors?: ErrorObject<string, Record<string, unknown>, unknown>[] | null | undefined;
3
+ errors?: string[] | null | undefined;
5
4
  unknownError?: unknown | undefined;
6
- constructor(message: string, errors?: ErrorObject<string, Record<string, unknown>, unknown>[] | null | undefined, unknownError?: unknown | undefined);
5
+ constructor(message: string, errors?: string[] | null | undefined, unknownError?: unknown | undefined);
7
6
  private formatMessage;
8
7
  }
9
8
  export interface KasaPythonConfigInput {
@@ -11,18 +10,23 @@ export interface KasaPythonConfigInput {
11
10
  enableCredentials?: boolean;
12
11
  username?: string;
13
12
  password?: string;
13
+ hideHomeKitMatter?: boolean;
14
14
  pollingInterval?: number;
15
15
  discoveryPollingInterval?: number;
16
16
  offlineInterval?: number;
17
17
  additionalBroadcasts?: string[];
18
18
  manualDevices?: (string | ConfigDevice)[];
19
19
  waitTimeUpdate?: number;
20
+ advancedPythonLogging?: boolean;
20
21
  }
21
22
  export type KasaPythonConfig = {
22
23
  name: string;
23
24
  enableCredentials: boolean;
24
25
  username: string;
25
26
  password: string;
27
+ homekitOptions: {
28
+ hideHomeKitMatter: boolean;
29
+ };
26
30
  discoveryOptions: {
27
31
  pollingInterval: number;
28
32
  discoveryPollingInterval: number;
@@ -32,6 +36,7 @@ export type KasaPythonConfig = {
32
36
  };
33
37
  advancedOptions: {
34
38
  waitTimeUpdate: number;
39
+ advancedPythonLogging: boolean;
35
40
  };
36
41
  };
37
42
  export declare const defaultConfig: KasaPythonConfig;
package/dist/config.js CHANGED
@@ -1,10 +1,4 @@
1
- import Ajv from 'ajv';
2
- import addFormats from 'ajv-formats';
3
- import fs from 'node:fs';
4
- import path from 'node:path';
5
- import { fileURLToPath } from 'node:url';
6
1
  import { isObjectLike } from './utils.js';
7
- let schemaCache;
8
2
  export class ConfigParseError extends Error {
9
3
  errors;
10
4
  unknownError;
@@ -19,10 +13,7 @@ export class ConfigParseError extends Error {
19
13
  formatMessage(message, errors, unknownError) {
20
14
  let formattedMessage = message;
21
15
  if (errors && errors.length > 0) {
22
- const errorsAsString = errors.map((e) => {
23
- const allowedValues = 'allowedValues' in e.params ? `. Allowed values: ${JSON.stringify(e.params.allowedValues)}` : '';
24
- return `\`${e.instancePath.replace(/^\//, '')}\` ${e.message}${allowedValues}`;
25
- }).join('\n');
16
+ const errorsAsString = errors.join('\n');
26
17
  formattedMessage += `:\n${errorsAsString}`;
27
18
  }
28
19
  if (unknownError instanceof Error) {
@@ -39,6 +30,9 @@ export const defaultConfig = {
39
30
  enableCredentials: false,
40
31
  username: '',
41
32
  password: '',
33
+ homekitOptions: {
34
+ hideHomeKitMatter: true,
35
+ },
42
36
  discoveryOptions: {
43
37
  pollingInterval: 5,
44
38
  discoveryPollingInterval: 300,
@@ -48,22 +42,9 @@ export const defaultConfig = {
48
42
  },
49
43
  advancedOptions: {
50
44
  waitTimeUpdate: 100,
45
+ advancedPythonLogging: false,
51
46
  },
52
47
  };
53
- function loadSchema() {
54
- if (!schemaCache) {
55
- try {
56
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
57
- const schemaPath = path.join(__dirname, '../config.schema.json');
58
- const schemaData = fs.readFileSync(schemaPath, 'utf8');
59
- schemaCache = JSON.parse(schemaData);
60
- }
61
- catch (error) {
62
- throw new ConfigParseError('Error reading schema', undefined, error);
63
- }
64
- }
65
- return schemaCache;
66
- }
67
48
  function convertManualDevices(manualDevices) {
68
49
  if (!manualDevices || manualDevices.length === 0) {
69
50
  return [];
@@ -81,25 +62,35 @@ function convertManualDevices(manualDevices) {
81
62
  return device;
82
63
  });
83
64
  }
65
+ function validateConfig(config) {
66
+ const errors = [];
67
+ validateType(config, 'name', 'string', errors);
68
+ validateType(config, 'enableCredentials', 'boolean', errors);
69
+ validateType(config, 'username', 'string', errors);
70
+ validateType(config, 'password', 'string', errors);
71
+ validateType(config, 'hideHomeKitMatter', 'boolean', errors);
72
+ validateType(config, 'pollingInterval', 'number', errors);
73
+ validateType(config, 'discoveryPollingInterval', 'number', errors);
74
+ validateType(config, 'offlineInterval', 'number', errors);
75
+ if (config.additionalBroadcasts !== undefined && !Array.isArray(config.additionalBroadcasts)) {
76
+ errors.push('`additionalBroadcasts` should be an array of strings.');
77
+ }
78
+ if (config.manualDevices !== undefined && !Array.isArray(config.manualDevices)) {
79
+ errors.push('`manualDevices` should be an array.');
80
+ }
81
+ validateType(config, 'waitTimeUpdate', 'number', errors);
82
+ validateType(config, 'advancedPythonLogging', 'boolean', errors);
83
+ return errors;
84
+ }
85
+ function validateType(config, key, expectedType, errors) {
86
+ if (config[key] !== undefined && typeof config[key] !== expectedType) {
87
+ errors.push(`\`${key}\` should be a ${expectedType}.`);
88
+ }
89
+ }
84
90
  export function parseConfig(config) {
85
- const ajv = new Ajv({ allErrors: true, strict: 'log' });
86
- addFormats(ajv);
87
- ajv.addVocabulary([
88
- 'placeholder',
89
- 'titleMap',
90
- 'pluginAlias',
91
- 'pluginType',
92
- 'singular',
93
- 'headerDisplay',
94
- 'footerDisplay',
95
- 'schema',
96
- 'layout',
97
- ]);
98
- const schema = loadSchema();
99
- const validate = ajv.compile(schema);
100
- const valid = validate(config);
101
- if (!valid) {
102
- throw new ConfigParseError('Error parsing config', validate.errors);
91
+ const errors = validateConfig(config);
92
+ if (errors.length > 0) {
93
+ throw new ConfigParseError('Error parsing config', errors);
103
94
  }
104
95
  if (!isObjectLike(config)) {
105
96
  throw new ConfigParseError('Error parsing config');
@@ -110,6 +101,9 @@ export function parseConfig(config) {
110
101
  enableCredentials: c.enableCredentials ?? defaultConfig.enableCredentials,
111
102
  username: c.username ?? defaultConfig.username,
112
103
  password: c.password ?? defaultConfig.password,
104
+ homekitOptions: {
105
+ hideHomeKitMatter: c.hideHomeKitMatter ?? defaultConfig.homekitOptions.hideHomeKitMatter,
106
+ },
113
107
  discoveryOptions: {
114
108
  pollingInterval: (c.pollingInterval ?? defaultConfig.discoveryOptions.pollingInterval) * 1000,
115
109
  discoveryPollingInterval: (c.discoveryPollingInterval ?? defaultConfig.discoveryOptions.discoveryPollingInterval) * 1000,
@@ -119,6 +113,7 @@ export function parseConfig(config) {
119
113
  },
120
114
  advancedOptions: {
121
115
  waitTimeUpdate: c.waitTimeUpdate ?? defaultConfig.advancedOptions.waitTimeUpdate,
116
+ advancedPythonLogging: c.advancedPythonLogging ?? defaultConfig.advancedOptions.advancedPythonLogging,
122
117
  },
123
118
  };
124
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,GAAoB,MAAM,KAAK,CAAC;AACvC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,IAAI,WAA6B,CAAC;AAElC,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAGhC;IACA;IAHT,YACE,OAAe,EACR,MAAuE,EACvE,YAAsB;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,WAAM,GAAN,MAAM,CAAiE;QACvE,iBAAY,GAAZ,YAAY,CAAU;QAG7B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACjE,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAEO,aAAa,CACnB,OAAe,EACf,MAAuE,EACvE,YAAsB;QAEtB,IAAI,gBAAgB,GAAG,OAAO,CAAC;QAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,MAAM,aAAa,GAAG,eAAe,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvH,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;YACjF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,gBAAgB,IAAI,MAAM,cAAc,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,YAAY,YAAY,KAAK,EAAE,CAAC;YAClC,gBAAgB,IAAI,uBAAuB,YAAY,CAAC,OAAO,EAAE,CAAC;QACpE,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,gBAAgB,IAAI,qDAAqD,YAAY,GAAG,CAAC;QAC3F,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;CACF;AAgCD,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,IAAI,EAAE,aAAa;IACnB,iBAAiB,EAAE,KAAK;IACxB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,gBAAgB,EAAE;QAChB,eAAe,EAAE,CAAC;QAClB,wBAAwB,EAAE,GAAG;QAC7B,eAAe,EAAE,CAAC;QAClB,oBAAoB,EAAE,EAAE;QACxB,aAAa,EAAE,EAAE;KAClB;IACD,eAAe,EAAE;QACf,cAAc,EAAE,GAAG;KACpB;CACF,CAAC;AAEF,SAAS,UAAU;IACjB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACvD,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CAAC,sBAAsB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,oBAAoB,CAAC,aAA2D;IACvF,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;QAC5E,CAAC;aAAM,IAAI,sBAAsB,IAAI,MAAM,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,oBAAoB,CAAC;QACrC,CAAC;aAAM,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;YACnD,MAAuB,CAAC,KAAK,GAAG,yCAAyC,CAAC;QAC7E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAA+B;IACzD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,GAAG,CAAC,aAAa,CAAC;QAChB,aAAa;QACb,UAAU;QACV,aAAa;QACb,YAAY;QACZ,UAAU;QACV,eAAe;QACf,eAAe;QACf,QAAQ;QACR,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,gBAAgB,CAAC,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,EAA2B,CAAC;IAEnE,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI;QAClC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,aAAa,CAAC,iBAAiB;QACzE,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ;QAC9C,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ;QAC9C,gBAAgB,EAAE;YAChB,eAAe,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,GAAG,IAAI;YAC7F,wBAAwB,EAAE,CAAC,CAAC,CAAC,wBAAwB,IAAI,aAAa,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,GAAG,IAAI;YACxH,eAAe,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;YAC5G,oBAAoB,EAAE,CAAC,CAAC,oBAAoB,IAAI,aAAa,CAAC,gBAAgB,CAAC,oBAAoB;YACnG,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa;SACtH;QACD,eAAe,EAAE;YACf,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,aAAa,CAAC,eAAe,CAAC,cAAc;SACjF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -2,39 +2,45 @@ import HomeKitDeviceLightBulb from './homekitLightBulb.js';
2
2
  import HomeKitDevicePlug from './homekitPlug.js';
3
3
  import HomeKitDevicePowerStrip from './homekitPowerStrip.js';
4
4
  import HomeKitDeviceSwitch from './homekitSwitch.js';
5
+ import HomeKitDeviceSwitchWithChildren from './homekitSwitchWithChildren.js';
5
6
  import { LightBulbs, Plugs, PowerStrips, Switches } from './kasaDevices.js';
6
7
  function isLightBulb(device) {
7
- return LightBulbs.includes(device.disc_info.model);
8
+ return LightBulbs.includes(device.sys_info.model);
8
9
  }
9
10
  function isPlug(device) {
10
- return Plugs.includes(device.disc_info.model);
11
+ return Plugs.includes(device.sys_info.model);
11
12
  }
12
13
  function isPowerStrip(device) {
13
- return PowerStrips.includes(device.disc_info.model);
14
+ return PowerStrips.includes(device.sys_info.model);
14
15
  }
15
16
  function isSwitch(device) {
16
- return Switches.includes(device.disc_info.model);
17
+ return Switches.includes(device.sys_info.model);
17
18
  }
18
19
  export default function create(platform, kasaDevice) {
19
20
  if (isLightBulb(kasaDevice)) {
20
21
  const lightBulb = kasaDevice;
21
- platform.log.debug('HomeKit device is a LightBulb:', lightBulb.disc_info.model);
22
+ platform.log.debug('HomeKit device is a LightBulb:', lightBulb.sys_info.model);
22
23
  return new HomeKitDeviceLightBulb(platform, lightBulb);
23
24
  }
24
25
  if (isPlug(kasaDevice)) {
25
26
  const plug = kasaDevice;
26
- platform.log.debug('HomeKit device is a Plug:', plug.disc_info.model);
27
+ platform.log.debug('HomeKit device is a Plug:', plug.sys_info.model);
27
28
  return new HomeKitDevicePlug(platform, plug);
28
29
  }
29
30
  if (isPowerStrip(kasaDevice)) {
30
31
  const powerStrip = kasaDevice;
31
- platform.log.debug('HomeKit device is a PowerStrip:', powerStrip.disc_info.model);
32
+ platform.log.debug('HomeKit device is a PowerStrip:', powerStrip.sys_info.model);
32
33
  return new HomeKitDevicePowerStrip(platform, powerStrip);
33
34
  }
34
35
  if (isSwitch(kasaDevice)) {
35
36
  const switchDevice = kasaDevice;
36
- platform.log.debug('HomeKit device is a Switch:', switchDevice.disc_info.model);
37
- return new HomeKitDeviceSwitch(platform, switchDevice);
37
+ platform.log.debug('HomeKit device is a Switch:', switchDevice.sys_info.model);
38
+ if (switchDevice.sys_info.child_num > 0) {
39
+ return new HomeKitDeviceSwitchWithChildren(platform, switchDevice);
40
+ }
41
+ else {
42
+ return new HomeKitDeviceSwitch(platform, switchDevice);
43
+ }
38
44
  }
39
45
  platform.log.error('Unknown device type:', kasaDevice);
40
46
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/devices/create.ts"],"names":[],"mappings":"AACA,OAAO,sBAAsB,MAAM,uBAAuB,CAAC;AAC3D,OAAO,iBAAiB,MAAM,kBAAkB,CAAC;AACjD,OAAO,uBAAuB,MAAM,wBAAwB,CAAC;AAC7D,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5E,SAAS,WAAW,CAAC,MAAkB;IACrC,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,MAAM,CAAC,MAAkB;IAChC,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,MAAkB;IACtC,OAAO,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,QAAQ,CAAC,MAAkB;IAClC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,QAA4B,EAC5B,UAAsB;IAGtB,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,UAAuB,CAAC;QAC1C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChF,OAAO,IAAI,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,UAAkB,CAAC;QAChC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,UAAwB,CAAC;QAC5C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClF,OAAO,IAAI,uBAAuB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,UAAoB,CAAC;QAC1C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChF,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;IACvD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/devices/create.ts"],"names":[],"mappings":"AACA,OAAO,sBAAsB,MAAM,uBAAuB,CAAC;AAC3D,OAAO,iBAAiB,MAAM,kBAAkB,CAAC;AACjD,OAAO,uBAAuB,MAAM,wBAAwB,CAAC;AAC7D,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,+BAA+B,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5E,SAAS,WAAW,CAAC,MAAkB;IACrC,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,MAAM,CAAC,MAAkB;IAChC,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,MAAkB;IACtC,OAAO,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CAAC,MAAkB;IAClC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,QAA4B,EAC5B,UAAsB;IAGtB,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,UAAuB,CAAC;QAC1C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/E,OAAO,IAAI,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,UAAkB,CAAC;QAChC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrE,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,UAAwB,CAAC;QAC5C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjF,OAAO,IAAI,uBAAuB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,UAAoB,CAAC;QAC1C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/E,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,+BAA+B,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;IACvD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { CharacteristicValue } from 'homebridge';
2
2
  import KasaPythonPlatform from '../platform.js';
3
- import type { DeviceConfig, KasaDevice, SysInfo } from './kasaDevices.js';
3
+ import type { KasaDevice, SysInfo } from './kasaDevices.js';
4
4
  export default class DeviceManager {
5
5
  private platform;
6
6
  private log;
@@ -12,12 +12,14 @@ export default class DeviceManager {
12
12
  constructor(platform: KasaPythonPlatform);
13
13
  private convertManualDevices;
14
14
  private updateDeviceAlias;
15
+ private isKasaDevice;
15
16
  private readConfigFile;
16
17
  private writeConfigFile;
17
18
  discoverDevices(): Promise<Record<string, KasaDevice>>;
18
19
  private processDevice;
19
20
  private shouldConvertManualDevices;
20
- getSysInfo(deviceConfig: DeviceConfig): Promise<SysInfo | undefined>;
21
- controlDevice(deviceConfig: DeviceConfig, feature: string, value: CharacteristicValue, child_num?: number): Promise<void>;
21
+ getSysInfo(host: string): Promise<SysInfo | undefined>;
22
+ controlDevice(host: string, feature: string, value: CharacteristicValue, child_num?: number): Promise<void>;
22
23
  private performDeviceAction;
24
+ private handleAxiosError;
23
25
  }
@@ -2,7 +2,6 @@ import axios from 'axios';
2
2
  import path from 'node:path';
3
3
  import { promises as fs } from 'node:fs';
4
4
  import { parseConfig } from '../config.js';
5
- const enableLogging = false;
6
5
  export default class DeviceManager {
7
6
  platform;
8
7
  log;
@@ -35,7 +34,13 @@ export default class DeviceManager {
35
34
  });
36
35
  }
37
36
  updateDeviceAlias(device) {
38
- const sysInfo = 'sys_info' in device ? device.sys_info : device;
37
+ let sysInfo;
38
+ if (this.isKasaDevice(device)) {
39
+ sysInfo = device.sys_info;
40
+ }
41
+ else {
42
+ sysInfo = device;
43
+ }
39
44
  if (sysInfo.alias) {
40
45
  const aliasMappings = {
41
46
  'TP-LINK_Power Strip_': 'Power Strip',
@@ -50,6 +55,9 @@ export default class DeviceManager {
50
55
  }
51
56
  }
52
57
  }
58
+ isKasaDevice(device) {
59
+ return device.sys_info !== undefined;
60
+ }
53
61
  async readConfigFile(configPath) {
54
62
  try {
55
63
  const configData = await fs.readFile(configPath, 'utf8');
@@ -105,14 +113,10 @@ export default class DeviceManager {
105
113
  const processedDevices = {};
106
114
  Object.keys(devices).forEach(ip => {
107
115
  const deviceInfo = devices[ip].sys_info;
108
- const discoveryInfo = devices[ip].disc_info;
109
116
  const featureInfo = devices[ip].feature_info;
110
- const deviceConfig = devices[ip].device_config;
111
117
  const device = {
112
118
  sys_info: deviceInfo,
113
- disc_info: discoveryInfo,
114
119
  feature_info: featureInfo,
115
- device_config: deviceConfig,
116
120
  last_seen: new Date(),
117
121
  offline: false,
118
122
  };
@@ -127,25 +131,7 @@ export default class DeviceManager {
127
131
  return processedDevices;
128
132
  }
129
133
  catch (error) {
130
- if (axios.isAxiosError(error) && error.response) {
131
- const statusCode = error.response.status;
132
- const errorMessage = error.response.data.error;
133
- if (statusCode === 500) {
134
- if (enableLogging) {
135
- this.log.error(`Exception during getSysInfo post request: ${errorMessage}`);
136
- }
137
- }
138
- else {
139
- if (enableLogging) {
140
- this.log.error(`Unexpected error during getSysInfo post request: ${errorMessage}`);
141
- }
142
- }
143
- }
144
- else {
145
- if (enableLogging) {
146
- this.log.error('Error during getSysInfo post request:', error);
147
- }
148
- }
134
+ this.handleAxiosError(error, 'discoverDevices');
149
135
  return {};
150
136
  }
151
137
  }
@@ -167,40 +153,23 @@ export default class DeviceManager {
167
153
  (typeof manualDevices[0] === 'string' ||
168
154
  manualDevices.some((device) => typeof device !== 'string'));
169
155
  }
170
- async getSysInfo(deviceConfig) {
156
+ async getSysInfo(host) {
171
157
  try {
172
- const response = await axios.post(`${this.apiUrl}/getSysInfo`, { device_config: deviceConfig });
158
+ const response = await axios.post(`${this.apiUrl}/getSysInfo`, { host });
173
159
  const sysInfo = response.data.sys_info;
174
160
  this.updateDeviceAlias(sysInfo);
175
161
  return sysInfo;
176
162
  }
177
163
  catch (error) {
178
- if (axios.isAxiosError(error) && error.response) {
179
- const statusCode = error.response.status;
180
- const errorMessage = error.response.data.error;
181
- if (statusCode === 500) {
182
- if (enableLogging) {
183
- this.log.error(`Exception during getSysInfo post request: ${errorMessage}`);
184
- }
185
- }
186
- else {
187
- if (enableLogging) {
188
- this.log.error(`Unexpected error during getSysInfo post request: ${errorMessage}`);
189
- }
190
- }
191
- }
192
- else {
193
- if (enableLogging) {
194
- this.log.error('Error during getSysInfo post request:', error);
195
- }
196
- }
164
+ this.handleAxiosError(error, 'getSysInfo');
197
165
  }
198
166
  }
199
- async controlDevice(deviceConfig, feature, value, child_num) {
167
+ async controlDevice(host, feature, value, child_num) {
200
168
  let action;
201
169
  switch (feature) {
202
170
  case 'brightness':
203
171
  case 'color_temp':
172
+ case 'fan_speed_level':
204
173
  action = `set_${feature}`;
205
174
  break;
206
175
  case 'hue':
@@ -213,12 +182,12 @@ export default class DeviceManager {
213
182
  default:
214
183
  throw new Error(`Unsupported feature: ${feature}`);
215
184
  }
216
- await this.performDeviceAction(deviceConfig, feature, action, value, child_num);
185
+ await this.performDeviceAction(host, feature, action, value, child_num);
217
186
  }
218
- async performDeviceAction(deviceConfig, feature, action, value, childNumber) {
187
+ async performDeviceAction(host, feature, action, value, childNumber) {
219
188
  const url = `${this.apiUrl}/controlDevice`;
220
189
  const data = {
221
- device_config: deviceConfig,
190
+ host,
222
191
  feature,
223
192
  action,
224
193
  value,
@@ -231,26 +200,23 @@ export default class DeviceManager {
231
200
  }
232
201
  }
233
202
  catch (error) {
234
- if (axios.isAxiosError(error) && error.response) {
235
- const statusCode = error.response.status;
236
- const errorMessage = error.response.data.error;
237
- if (statusCode === 500) {
238
- if (enableLogging) {
239
- this.log.error(`Exception during getSysInfo post request: ${errorMessage}`);
240
- }
241
- }
242
- else {
243
- if (enableLogging) {
244
- this.log.error(`Unexpected error during getSysInfo post request: ${errorMessage}`);
245
- }
246
- }
203
+ this.handleAxiosError(error, 'controlDevice');
204
+ }
205
+ }
206
+ handleAxiosError(error, context) {
207
+ if (axios.isAxiosError(error) && error.response) {
208
+ const statusCode = error.response.status;
209
+ const errorMessage = error.response.data.error;
210
+ if (statusCode === 500) {
211
+ this.log.error(`Exception during ${context} post request: ${errorMessage}`);
247
212
  }
248
213
  else {
249
- if (enableLogging) {
250
- this.log.error('Error during getSysInfo post request:', error);
251
- }
214
+ this.log.error(`Unexpected error during ${context} post request: ${errorMessage}`);
252
215
  }
253
216
  }
217
+ else {
218
+ this.log.error(`Error during ${context} post request:`, error);
219
+ }
254
220
  }
255
221
  }
256
222
  //# sourceMappingURL=deviceManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deviceManager.js","sourceRoot":"","sources":["../../src/devices/deviceManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B,MAAM,CAAC,OAAO,OAAO,aAAa;IAQZ;IAPZ,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACjB,oBAAoB,CAAW;IAC/B,aAAa,CAAW;IAEhC,YAAoB,QAA4B;QAA5B,aAAQ,GAAR,QAAQ,CAAoB;QAC9C,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,oBAAoB,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;QAClF,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjG,CAAC;IAEO,oBAAoB,CAAC,aAAwC;QACnE,OAAO,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;YAC5E,CAAC;iBAAM,IAAI,sBAAsB,IAAI,MAAM,EAAE,CAAC;gBAC5C,OAAO,MAAM,CAAC,oBAAoB,CAAC;YACrC,CAAC;iBAAM,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;gBACnD,MAAuB,CAAC,KAAK,GAAG,yCAAyC,CAAC;YAC7E,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,MAA4B;QACpD,MAAM,OAAO,GAAG,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAmB,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3E,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,aAAa,GAA8B;gBAC/C,sBAAsB,EAAE,aAAa;gBACrC,qBAAqB,EAAE,YAAY;gBACnC,qBAAqB,EAAE,YAAY;aACpC,CAAC;YAEF,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnE,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,KAAK,GAAG,GAAG,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5D,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,UAAkB;QAC7C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,UAA0B;QAC1E,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAM/B,GAAG,IAAI,CAAC,MAAM,WAAW,EACzB;gBACE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;gBAC/C,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,EACD,MAAM,CACP,CAAC;YAEF,MAAM,OAAO,GAKR,QAAQ,CAAC,IAAI,CAAC;YAEnB,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACpC,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAEzD,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,cAA8B,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC;YAC/H,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACrE,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,cAAc,CAAC,aAAa,GAAG,cAAc,CAAC,aAAa,IAAI,EAAE,CAAC;YAElE,cAAc,CAAC,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,MAA6B,EAAE,EAAE;gBACnG,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,OAAO,IAAI,CAAC;gBACd,CAAC;qBAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAChF,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClE,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YACzF,CAAC;YAED,MAAM,gBAAgB,GAAkC,EAAE,CAAC;YAE3D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBAChC,MAAM,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;gBACxC,MAAM,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;gBAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC;gBAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC;gBAE/C,MAAM,MAAM,GAAe;oBACzB,QAAQ,EAAE,UAAU;oBACpB,SAAS,EAAE,aAAa;oBACxB,YAAY,EAAE,WAAW;oBACzB,aAAa,EAAE,YAAY;oBAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,OAAO,EAAE,KAAK;iBACf,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;gBAC3C,gBAAgB,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBACzC,OAAO,cAAc,CAAC,aAAa,CAAC;YACtC,CAAC;YAED,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;YAEnD,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/C,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;oBACvB,IAAI,aAAa,EAAE,CAAC;wBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,aAAa,EAAE,CAAC;wBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oDAAoD,YAAY,EAAE,CAAC,CAAC;oBACrF,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,aAAa,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,MAAkB,EAAE,cAA8B;QACtE,IAAI,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAE/B,MAAM,cAAc,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC/G,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC3C,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA6B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAEO,0BAA0B,CAAC,aAAwC;QACzE,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,KAAK,QAAQ;gBACnC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,YAA0B;QACzC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,aAAa,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;YAChG,MAAM,OAAO,GAAY,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YAChD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/C,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;oBACvB,IAAI,aAAa,EAAE,CAAC;wBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,aAAa,EAAE,CAAC;wBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oDAAoD,YAAY,EAAE,CAAC,CAAC;oBACrF,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,aAAa,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,YAA0B,EAAE,OAAe,EAAE,KAA0B,EAAE,SAAkB;QAC7G,IAAI,MAAc,CAAC;QACnB,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY;gBACf,MAAM,GAAG,OAAO,OAAO,EAAE,CAAC;gBAC1B,MAAM;YACR,KAAK,KAAK,CAAC;YACX,KAAK,YAAY;gBACf,MAAM,GAAG,SAAS,CAAC;gBACnB,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;gBACxC,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAClF,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,YAA0B,EAAE,OAAe,EAAE,MAAc,EAAE,KAA0B,EAAE,WAAoB;QAE7G,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,gBAAgB,CAAC;QAC3C,MAAM,IAAI,GAAG;YACX,aAAa,EAAE,YAAY;YAC3B,OAAO;YACP,MAAM;YACN,KAAK;YACL,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;SAC7D,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/C,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;oBACvB,IAAI,aAAa,EAAE,CAAC;wBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,aAAa,EAAE,CAAC;wBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oDAAoD,YAAY,EAAE,CAAC,CAAC;oBACrF,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,aAAa,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"deviceManager.js","sourceRoot":"","sources":["../../src/devices/deviceManager.ts"],"names":[],"mappings":"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"}