homebridge-kasa-python 2.2.9 → 2.3.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.
|
@@ -19,14 +19,14 @@ export default class DeviceManager {
|
|
|
19
19
|
action,
|
|
20
20
|
...(childNumber !== undefined && { child_num: childNumber }),
|
|
21
21
|
};
|
|
22
|
-
this.log.
|
|
22
|
+
this.log.info(`Performing action '${action}' on device: ${device.name}`);
|
|
23
23
|
try {
|
|
24
24
|
const response = await axios.post(url, data);
|
|
25
25
|
if (response.data.status !== 'success') {
|
|
26
26
|
this.log.error(`Error performing action: ${response.data.message}`);
|
|
27
27
|
}
|
|
28
28
|
else {
|
|
29
|
-
this.log.
|
|
29
|
+
this.log.info(`Action '${action}' performed successfully on device: ${device.name}`);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
catch (error) {
|
|
@@ -38,7 +38,7 @@ export default class DeviceManager {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
async discoverDevices() {
|
|
41
|
-
this.log.
|
|
41
|
+
this.log.info('Discovering devices...');
|
|
42
42
|
try {
|
|
43
43
|
const config = {
|
|
44
44
|
...(this.username && this.password && {
|
|
@@ -50,18 +50,15 @@ export default class DeviceManager {
|
|
|
50
50
|
};
|
|
51
51
|
const response = await axios.get(`${this.apiUrl}/discover`, config);
|
|
52
52
|
const devices = response.data;
|
|
53
|
-
this.log.
|
|
53
|
+
this.log.info(`Devices discovered: ${Object.keys(devices).length}`);
|
|
54
54
|
Object.keys(devices).forEach(ip => {
|
|
55
55
|
const device = devices[ip].device_info;
|
|
56
|
-
this.log.debug(`Processing device at IP: ${ip} with info: ${JSON.stringify(device)}`);
|
|
57
56
|
if (device.alias.includes('TP-LINK_Power Strip_')) {
|
|
58
57
|
device.alias = `Power Strip ${device.alias.slice(-4)}`;
|
|
59
|
-
this.log.debug(`Updated device alias to: ${device.alias}`);
|
|
60
58
|
}
|
|
61
59
|
device.device_config = devices[ip].device_config;
|
|
62
60
|
this.platform.foundDevice(device);
|
|
63
61
|
});
|
|
64
|
-
this.log.debug(`Discovered ${Object.keys(devices).length} devices.`);
|
|
65
62
|
}
|
|
66
63
|
catch (error) {
|
|
67
64
|
this.log.error(`An error occurred during device discovery: ${axios.isAxiosError(error) ? error.message : 'An unknown error occurred'}`);
|
|
@@ -72,15 +69,12 @@ export default class DeviceManager {
|
|
|
72
69
|
}
|
|
73
70
|
}
|
|
74
71
|
async getSysInfo(device) {
|
|
75
|
-
this.log.
|
|
72
|
+
this.log.info(`Getting system info for device: ${device.name}`);
|
|
76
73
|
try {
|
|
77
|
-
this.log.debug(`Requesting system info with config: ${JSON.stringify(device.deviceConfig)}`);
|
|
78
74
|
const response = await axios.post(`${this.apiUrl}/getSysInfo`, { device_config: device.deviceConfig });
|
|
79
75
|
const kasaDevice = response.data.device_info;
|
|
80
|
-
this.log.debug(`Received system info: ${JSON.stringify(kasaDevice)}`);
|
|
81
76
|
if (kasaDevice.alias.includes('TP-LINK_Power Strip_')) {
|
|
82
77
|
kasaDevice.alias = `Power Strip ${kasaDevice.alias.slice(-4)}`;
|
|
83
|
-
this.log.debug(`Updated device alias to: ${kasaDevice.alias}`);
|
|
84
78
|
}
|
|
85
79
|
return kasaDevice;
|
|
86
80
|
}
|
|
@@ -95,10 +89,10 @@ export default class DeviceManager {
|
|
|
95
89
|
async toggleDevice(device, state, child_num) {
|
|
96
90
|
const action = state ? 'turn_on' : 'turn_off';
|
|
97
91
|
const childText = child_num !== undefined ? ` child ${child_num}` : '';
|
|
98
|
-
this.log.
|
|
92
|
+
this.log.info(`Toggling device: ${device.name}${childText} to state: ${state}`);
|
|
99
93
|
try {
|
|
100
94
|
await this.performDeviceAction(device, action, child_num);
|
|
101
|
-
this.log.
|
|
95
|
+
this.log.info(`Turned ${state ? 'on' : 'off'} device: ${device.name}${childText}`);
|
|
102
96
|
}
|
|
103
97
|
catch (error) {
|
|
104
98
|
this.log.error(`An error occurred turning ${state ? 'on' : 'off'} device ${device.name}${childText}: ${axios.isAxiosError(error) ? error.message : 'An unknown error occurred'}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceManager.js","sourceRoot":"","sources":["../../src/devices/deviceManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,CAAC,OAAO,OAAO,aAAa;IAMZ;IALZ,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,QAAQ,CAAS;IAEzB,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;IACpD,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,MAAqB,EAAE,MAAc,EAAE,WAAoB;QAC3F,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,gBAAgB,CAAC;QAC3C,MAAM,IAAI,GAAG;YACX,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,MAAM;YACN,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;SAC7D,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"deviceManager.js","sourceRoot":"","sources":["../../src/devices/deviceManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,CAAC,OAAO,OAAO,aAAa;IAMZ;IALZ,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,QAAQ,CAAS;IAEzB,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;IACpD,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,MAAqB,EAAE,MAAc,EAAE,WAAoB;QAC3F,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,gBAAgB,CAAC;QAC3C,MAAM,IAAI,GAAG;YACX,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,MAAM;YACN,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;SAC7D,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,MAAM,gBAAgB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,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;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,MAAM,uCAAuC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,EAAE,CAAC,CAAC;YACtH,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG;gBACb,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI;oBACpC,IAAI,EAAE;wBACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;qBACxB;iBACF,CAAC;aACH,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,WAAW,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBAChC,MAAM,MAAM,GAAe,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;gBACnD,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBAClD,MAAM,CAAC,KAAK,GAAG,eAAe,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,CAAC;gBACD,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC;gBACjD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,8CAA8C,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,EAAE,CACxH,CAAC;YACF,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAqB;QACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,aAAa,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YACvG,MAAM,UAAU,GAAe,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;YACzD,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBACtD,UAAU,CAAC,KAAK,GAAG,eAAe,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,wCAAwC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,EAAE,CAClH,CAAC;YACF,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAqB,EAAE,KAAc,EAAE,SAAkB;QAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9C,MAAM,SAAS,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,IAAI,GAAG,SAAS,cAAc,KAAK,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,MAAM,CAAC,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,6BAA6B,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,MAAM,CAAC,IAAI,GAAG,SAAS,KACjF,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAC9C,EAAE,CACH,CAAC;YACF,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
package/dist/platform.js
CHANGED
|
@@ -36,7 +36,7 @@ async function checkForUpgrade(storagePath, logger) {
|
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
38
38
|
if (error.code === 'ENOENT') {
|
|
39
|
-
logger.info('Version file does not exist, treating as new install or
|
|
39
|
+
logger.info('Version file does not exist, treating as new install or version change.');
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
42
|
logger.error('Error reading version file:', error);
|
|
@@ -119,7 +119,6 @@ export default class KasaPythonPlatform {
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
async didFinishLaunching() {
|
|
122
|
-
this.log.debug('Did Finish Launching Event Received');
|
|
123
122
|
try {
|
|
124
123
|
await this.checkPython(this.isUpgrade);
|
|
125
124
|
this.port = await getPort();
|
|
@@ -142,11 +141,8 @@ export default class KasaPythonPlatform {
|
|
|
142
141
|
async startKasaApi() {
|
|
143
142
|
const scriptPath = `${this.storagePath}/node_modules/homebridge-kasa-python/dist/python/kasaApi.py`;
|
|
144
143
|
try {
|
|
145
|
-
const [,
|
|
144
|
+
const [, , , process] = await runCommand(this.log, this.venvPythonExecutable, [scriptPath, this.port.toString()], undefined, true, true, true);
|
|
146
145
|
this.kasaProcess = process;
|
|
147
|
-
if (stderr) {
|
|
148
|
-
this.log.debug(`kasaApi.py process started: ${stderr}`);
|
|
149
|
-
}
|
|
150
146
|
}
|
|
151
147
|
catch (error) {
|
|
152
148
|
if (error instanceof Error) {
|
|
@@ -161,7 +157,6 @@ export default class KasaPythonPlatform {
|
|
|
161
157
|
if (this.kasaProcess) {
|
|
162
158
|
this.kasaProcess.kill();
|
|
163
159
|
this.kasaProcess = null;
|
|
164
|
-
this.log.debug('kasaApi.py process terminated');
|
|
165
160
|
}
|
|
166
161
|
}
|
|
167
162
|
lsc(serviceOrCharacteristic, characteristic) {
|
|
@@ -189,7 +184,6 @@ export default class KasaPythonPlatform {
|
|
|
189
184
|
return this.categories ? this.categories[category] : 'Unknown';
|
|
190
185
|
}
|
|
191
186
|
registerPlatformAccessory(platformAccessory) {
|
|
192
|
-
this.log.debug(`registerPlatformAccessory([${platformAccessory.displayName}])`);
|
|
193
187
|
this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [platformAccessory]);
|
|
194
188
|
}
|
|
195
189
|
configureAccessory(accessory) {
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAaA,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAS,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,aAAa,MAAM,4BAA4B,CAAC;AAEvD,OAAO,aAAa,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,8BAA8B,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQhG,IAAI,aAAmF,CAAC;AAExF,KAAK,UAAU,iBAAiB,CAAC,MAAe;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACrE,MAAM,GAAG,GAAW,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACvE,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;QAClD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,MAAe;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC;IAC1E,IAAI,aAAa,GAAG,EAAE,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC/D,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
package/dist/python/kasaApi.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import asyncio, eventlet, eventlet.wsgi, json,
|
|
1
|
+
import asyncio, eventlet, eventlet.wsgi, json, sys
|
|
2
2
|
from flask import Flask, request, jsonify
|
|
3
3
|
from flask_socketio import SocketIO
|
|
4
4
|
from kasa import Discover, Device
|
|
@@ -22,91 +22,56 @@ def custom_device_serializer(device):
|
|
|
22
22
|
value = getattr(device, attr)
|
|
23
23
|
if is_serializable(value):
|
|
24
24
|
serialized_data[attr] = value
|
|
25
|
-
else:
|
|
26
|
-
app.logger.debug(f"Skipping non-serializable attribute: {attr} with value: {value}")
|
|
27
|
-
app.logger.debug(f"Serialized data for device: {serialized_data}")
|
|
28
25
|
return serialized_data
|
|
29
26
|
|
|
30
27
|
async def discover_devices(username=None, password=None):
|
|
31
|
-
app.logger.debug('Starting device discovery...')
|
|
32
28
|
try:
|
|
33
29
|
devices = await Discover.discover(username=username, password=password)
|
|
34
|
-
except Exception
|
|
35
|
-
app.logger.error(f'Error during device discovery: {str(e)}')
|
|
36
|
-
app.logger.error(f'Traceback: {traceback.format_exc()}')
|
|
30
|
+
except Exception:
|
|
37
31
|
return {}
|
|
38
32
|
|
|
39
33
|
all_device_info = {}
|
|
40
34
|
tasks = []
|
|
41
35
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
else:
|
|
49
|
-
app.logger.debug(f'Device at {ip} does not have a device_type: {dev}')
|
|
50
|
-
except KeyError as e:
|
|
51
|
-
app.logger.debug(f'Device at {ip} is missing key: {str(e)}')
|
|
52
|
-
continue
|
|
53
|
-
except Exception as e:
|
|
54
|
-
app.logger.error(f'Error processing device at {ip}: {str(e)}')
|
|
55
|
-
app.logger.error(f'Traceback: {traceback.format_exc()}')
|
|
56
|
-
continue
|
|
57
|
-
except Exception as e:
|
|
58
|
-
app.logger.error(f'Error iterating through devices: {str(e)}')
|
|
59
|
-
app.logger.error(f'Traceback: {traceback.format_exc()}')
|
|
36
|
+
for ip, dev in devices.items():
|
|
37
|
+
try:
|
|
38
|
+
if hasattr(dev, 'device_type'):
|
|
39
|
+
tasks.append(update_device_info(ip, dev))
|
|
40
|
+
except KeyError:
|
|
41
|
+
continue
|
|
60
42
|
|
|
61
43
|
try:
|
|
62
44
|
results = await asyncio.gather(*tasks)
|
|
63
|
-
|
|
64
|
-
except Exception as e:
|
|
65
|
-
app.logger.error(f'Error during update tasks: {str(e)}')
|
|
66
|
-
app.logger.error(f'Traceback: {traceback.format_exc()}')
|
|
45
|
+
except Exception:
|
|
67
46
|
return {}
|
|
68
47
|
|
|
69
48
|
for ip, info in results:
|
|
70
|
-
|
|
71
|
-
all_device_info[ip] = info
|
|
72
|
-
app.logger.debug(f'Updated device info for {ip}: {info}')
|
|
73
|
-
except Exception as e:
|
|
74
|
-
app.logger.error(f'Error updating device info for {ip}: {str(e)}')
|
|
75
|
-
app.logger.error(f'Traceback: {traceback.format_exc()}')
|
|
49
|
+
all_device_info[ip] = info
|
|
76
50
|
|
|
77
|
-
app.logger.debug(f'All device info: {all_device_info}')
|
|
78
51
|
return all_device_info
|
|
79
52
|
|
|
80
53
|
async def update_device_info(ip, dev: Device):
|
|
81
|
-
app.logger.debug(f'Updating device info for {ip}')
|
|
82
54
|
try:
|
|
83
55
|
await dev.update()
|
|
84
|
-
app.logger.debug(f'Device updated for {ip}: {dev}')
|
|
85
56
|
device_info = custom_device_serializer(dev)
|
|
86
57
|
device_config = dev.config.to_dict()
|
|
87
58
|
device_cache[ip] = {
|
|
88
59
|
"device_info": device_info,
|
|
89
60
|
"device_config": device_config
|
|
90
61
|
}
|
|
91
|
-
app.logger.debug(f'Updated device info for {ip}: {device_cache[ip]}')
|
|
92
62
|
return ip, device_cache[ip]
|
|
93
|
-
except Exception
|
|
94
|
-
app.logger.error(f'Error updating device info for {ip}: {str(e)}')
|
|
95
|
-
app.logger.error(f'Traceback: {traceback.format_exc()}')
|
|
63
|
+
except Exception:
|
|
96
64
|
return ip, {}
|
|
97
65
|
|
|
98
66
|
async def get_device_info(device_config):
|
|
99
|
-
app.logger.debug(f'Getting device info for config: {device_config}')
|
|
100
67
|
dev = await Device.connect(config=Device.Config.from_dict(device_config))
|
|
101
68
|
try:
|
|
102
69
|
device_info = custom_device_serializer(dev)
|
|
103
|
-
app.logger.debug(f'Device info: {device_info}')
|
|
104
70
|
return {"device_info": device_info}
|
|
105
71
|
finally:
|
|
106
72
|
await dev.disconnect()
|
|
107
73
|
|
|
108
74
|
async def control_device(device_config, action, child_num=None):
|
|
109
|
-
app.logger.debug(f'Controlling device with config: {device_config}, action: {action}, child_num: {child_num}')
|
|
110
75
|
kasa_device = await Device.connect(config=Device.Config.from_dict(device_config))
|
|
111
76
|
try:
|
|
112
77
|
if child_num is not None:
|
|
@@ -114,10 +79,8 @@ async def control_device(device_config, action, child_num=None):
|
|
|
114
79
|
await getattr(child, action)()
|
|
115
80
|
else:
|
|
116
81
|
await getattr(kasa_device, action)()
|
|
117
|
-
app.logger.debug(f'Action {action} performed successfully')
|
|
118
82
|
return {"status": "success", f"is_{action.split('_')[1]}": True}
|
|
119
83
|
except Exception as e:
|
|
120
|
-
app.logger.error(f'Error performing action {action}: {str(e)}')
|
|
121
84
|
return {"status": "error", "message": str(e)}
|
|
122
85
|
finally:
|
|
123
86
|
await kasa_device.disconnect()
|
|
@@ -128,42 +91,27 @@ def run_async(func, *args):
|
|
|
128
91
|
|
|
129
92
|
@app.route('/discover', methods=['GET'])
|
|
130
93
|
def discover():
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
devices_info = run_async(discover_devices, username, password)
|
|
137
|
-
return jsonify(devices_info)
|
|
138
|
-
except Exception as e:
|
|
139
|
-
app.logger.error(f"Error in /discover: {str(e)}")
|
|
140
|
-
return jsonify({"status": "error", "message": str(e)}), 500
|
|
94
|
+
auth = request.authorization
|
|
95
|
+
username = auth.username if auth else None
|
|
96
|
+
password = auth.password if auth else None
|
|
97
|
+
devices_info = run_async(discover_devices, username, password)
|
|
98
|
+
return jsonify(devices_info)
|
|
141
99
|
|
|
142
100
|
@app.route('/getSysInfo', methods=['POST'])
|
|
143
101
|
def get_sys_info_route():
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
device_info = run_async(get_device_info, device_config)
|
|
149
|
-
return jsonify(device_info)
|
|
150
|
-
except Exception as e:
|
|
151
|
-
app.logger.error(f"Error in /getSysInfo: {str(e)}")
|
|
152
|
-
return jsonify({"status": "error", "message": str(e)}), 500
|
|
102
|
+
data = request.json
|
|
103
|
+
device_config = data['device_config']
|
|
104
|
+
device_info = run_async(get_device_info, device_config)
|
|
105
|
+
return jsonify(device_info)
|
|
153
106
|
|
|
154
107
|
@app.route('/controlDevice', methods=['POST'])
|
|
155
108
|
def control_device_route():
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
result = run_async(control_device, device_config, action, child_num)
|
|
163
|
-
return jsonify(result)
|
|
164
|
-
except Exception as e:
|
|
165
|
-
app.logger.error(f"Error in /controlDevice: {str(e)}")
|
|
166
|
-
return jsonify({"status": "error", "message": str(e)}), 500
|
|
109
|
+
data = request.json
|
|
110
|
+
device_config = data['device_config']
|
|
111
|
+
action = data['action']
|
|
112
|
+
child_num = data.get('child_num')
|
|
113
|
+
result = run_async(control_device, device_config, action, child_num)
|
|
114
|
+
return jsonify(result)
|
|
167
115
|
|
|
168
116
|
if __name__ == '__main__':
|
|
169
117
|
port = int(sys.argv[1])
|
package/package.json
CHANGED