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.
- package/README.md +343 -562
- package/config.schema.json +23 -1
- package/dist/accessoryInformation.js +28 -13
- package/dist/accessoryInformation.js.map +1 -1
- package/dist/config.d.ts +8 -3
- package/dist/config.js +37 -42
- package/dist/config.js.map +1 -1
- package/dist/devices/create.js +15 -9
- package/dist/devices/create.js.map +1 -1
- package/dist/devices/deviceManager.d.ts +5 -3
- package/dist/devices/deviceManager.js +32 -66
- package/dist/devices/deviceManager.js.map +1 -1
- package/dist/devices/homekitLightBulb.d.ts +11 -1
- package/dist/devices/homekitLightBulb.js +221 -116
- package/dist/devices/homekitLightBulb.js.map +1 -1
- package/dist/devices/homekitPlug.d.ts +10 -0
- package/dist/devices/homekitPlug.js +184 -80
- package/dist/devices/homekitPlug.js.map +1 -1
- package/dist/devices/homekitPowerStrip.d.ts +10 -0
- package/dist/devices/homekitPowerStrip.js +199 -91
- package/dist/devices/homekitPowerStrip.js.map +1 -1
- package/dist/devices/homekitSwitch.d.ts +11 -1
- package/dist/devices/homekitSwitch.js +190 -89
- package/dist/devices/homekitSwitch.js.map +1 -1
- package/dist/devices/homekitSwitchWithChildren.d.ts +34 -0
- package/dist/devices/homekitSwitchWithChildren.js +365 -0
- package/dist/devices/homekitSwitchWithChildren.js.map +1 -0
- package/dist/devices/index.d.ts +5 -6
- package/dist/devices/index.js +18 -17
- package/dist/devices/index.js.map +1 -1
- package/dist/devices/kasaDevices.d.ts +4 -11
- package/dist/devices/kasaDevices.js +83 -95
- package/dist/devices/kasaDevices.js.map +1 -1
- package/dist/platform.d.ts +8 -2
- package/dist/platform.js +111 -46
- package/dist/platform.js.map +1 -1
- package/dist/python/kasaApi.py +349 -171
- package/dist/python/pythonChecker.d.ts +6 -4
- package/dist/python/pythonChecker.js +53 -20
- package/dist/python/pythonChecker.js.map +1 -1
- package/dist/python/startKasaApi.py +25 -0
- package/dist/taskQueue.d.ts +11 -0
- package/dist/taskQueue.js +44 -0
- package/dist/taskQueue.js.map +1 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +8 -4
- package/dist/utils.js.map +1 -1
- package/package.json +15 -23
- package/requirements.txt +3 -3
package/config.schema.json
CHANGED
|
@@ -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
|
|
5
|
-
|
|
6
|
-
.
|
|
7
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
.
|
|
17
|
-
|
|
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,
|
|
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?:
|
|
3
|
+
errors?: string[] | null | undefined;
|
|
5
4
|
unknownError?: unknown | undefined;
|
|
6
|
-
constructor(message: string, errors?:
|
|
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.
|
|
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
|
|
86
|
-
|
|
87
|
-
|
|
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
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/devices/create.js
CHANGED
|
@@ -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.
|
|
8
|
+
return LightBulbs.includes(device.sys_info.model);
|
|
8
9
|
}
|
|
9
10
|
function isPlug(device) {
|
|
10
|
-
return Plugs.includes(device.
|
|
11
|
+
return Plugs.includes(device.sys_info.model);
|
|
11
12
|
}
|
|
12
13
|
function isPowerStrip(device) {
|
|
13
|
-
return PowerStrips.includes(device.
|
|
14
|
+
return PowerStrips.includes(device.sys_info.model);
|
|
14
15
|
}
|
|
15
16
|
function isSwitch(device) {
|
|
16
|
-
return Switches.includes(device.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
37
|
-
|
|
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,
|
|
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 {
|
|
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(
|
|
21
|
-
controlDevice(
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
156
|
+
async getSysInfo(host) {
|
|
171
157
|
try {
|
|
172
|
-
const response = await axios.post(`${this.apiUrl}/getSysInfo`, {
|
|
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
|
-
|
|
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(
|
|
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(
|
|
185
|
+
await this.performDeviceAction(host, feature, action, value, child_num);
|
|
217
186
|
}
|
|
218
|
-
async performDeviceAction(
|
|
187
|
+
async performDeviceAction(host, feature, action, value, childNumber) {
|
|
219
188
|
const url = `${this.apiUrl}/controlDevice`;
|
|
220
189
|
const data = {
|
|
221
|
-
|
|
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
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
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
|
-
|
|
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,
|
|
1
|
+
{"version":3,"file":"deviceManager.js","sourceRoot":"","sources":["../../src/devices/deviceManager.ts"],"names":[],"mappings":"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"}
|