homebridge-kasa-python 2.7.2-beta.1 → 2.7.2-beta.3
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 +12 -0
- package/config.schema.json +25 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/devices/deviceManager.d.ts +1 -0
- package/dist/devices/deviceManager.js +3 -0
- package/dist/devices/deviceManager.js.map +1 -1
- package/dist/devices/kasaDevices.js +2 -0
- package/dist/devices/kasaDevices.js.map +1 -1
- package/dist/python/kasaApi.py +48 -56
- package/package.json +12 -12
package/README.md
CHANGED
|
@@ -153,6 +153,7 @@ Some newer Kasa devices require authentication. These are marked with [*] in the
|
|
|
153
153
|
- **KS225**
|
|
154
154
|
- Hardware: 1.0 (US) / Firmware: 1.0.2[*]
|
|
155
155
|
- Hardware: 1.0 (US) / Firmware: 1.1.0[*]
|
|
156
|
+
- Hardware: 1.0 (US) / Firmware: 1.1.1[*]
|
|
156
157
|
- **KS230**
|
|
157
158
|
- Hardware: 1.0 (US) / Firmware: 1.0.14
|
|
158
159
|
- Hardware: 2.0 (US) / Firmware: 1.0.11
|
|
@@ -183,6 +184,8 @@ Some newer Kasa devices require authentication. These are marked with [*] in the
|
|
|
183
184
|
- **KL60**
|
|
184
185
|
- Hardware: 1.0 (UN) / Firmware: 1.1.4
|
|
185
186
|
- Hardware: 1.0 (US) / Firmware: 1.1.13
|
|
187
|
+
- **LB100**
|
|
188
|
+
- Hardware: 1.0 (US) / Firmware: 1.8.11
|
|
186
189
|
- **LB110**
|
|
187
190
|
- Hardware: 1.0 (US) / Firmware: 1.8.11
|
|
188
191
|
|
|
@@ -226,6 +229,7 @@ All Tapo devices require authentication.<br>Hub-Connected Devices may work acros
|
|
|
226
229
|
- Hardware: 1.0.0 (US) / Firmware: 1.3.7
|
|
227
230
|
- Hardware: 1.0.0 (US) / Firmware: 1.4.0
|
|
228
231
|
- **P110**
|
|
232
|
+
- Hardware: 1.0 (AU) / Firmware: 1.3.1
|
|
229
233
|
- Hardware: 1.0 (EU) / Firmware: 1.0.7
|
|
230
234
|
- Hardware: 1.0 (EU) / Firmware: 1.2.3
|
|
231
235
|
- Hardware: 1.0 (UK) / Firmware: 1.3.0
|
|
@@ -278,10 +282,13 @@ All Tapo devices require authentication.<br>Hub-Connected Devices may work acros
|
|
|
278
282
|
- **L510E**
|
|
279
283
|
- Hardware: 3.0 (US) / Firmware: 1.0.5
|
|
280
284
|
- Hardware: 3.0 (US) / Firmware: 1.1.2
|
|
285
|
+
- **L530B**
|
|
286
|
+
- Hardware: 3.0 (EU) / Firmware: 1.1.9
|
|
281
287
|
- **L530E**
|
|
282
288
|
- Hardware: 3.0 (EU) / Firmware: 1.0.6
|
|
283
289
|
- Hardware: 3.0 (EU) / Firmware: 1.1.0
|
|
284
290
|
- Hardware: 3.0 (EU) / Firmware: 1.1.6
|
|
291
|
+
- Hardware: 2.0 (TW) / Firmware: 1.1.1
|
|
285
292
|
- Hardware: 2.0 (US) / Firmware: 1.1.0
|
|
286
293
|
- **L630**
|
|
287
294
|
- Hardware: 1.0 (EU) / Firmware: 1.1.2
|
|
@@ -300,12 +307,15 @@ All Tapo devices require authentication.<br>Hub-Connected Devices may work acros
|
|
|
300
307
|
- Hardware: 1.0 (US) / Firmware: 1.1.0
|
|
301
308
|
- Hardware: 1.0 (US) / Firmware: 1.1.3
|
|
302
309
|
- **L930-5**
|
|
310
|
+
- Hardware: 1.0 (EU) / Firmware: 1.2.5
|
|
303
311
|
- Hardware: 1.0 (US) / Firmware: 1.1.2
|
|
304
312
|
|
|
305
313
|
### Cameras
|
|
306
314
|
|
|
307
315
|
- **C100**
|
|
308
316
|
- Hardware: 4.0 / Firmware: 1.3.14
|
|
317
|
+
- **C110**
|
|
318
|
+
- Hardware: 2.0 (EU) / Firmware: 1.4.3
|
|
309
319
|
- **C210**
|
|
310
320
|
- Hardware: 2.0 / Firmware: 1.3.11
|
|
311
321
|
- Hardware: 2.0 (EU) / Firmware: 1.4.2
|
|
@@ -344,6 +354,7 @@ All Tapo devices require authentication.<br>Hub-Connected Devices may work acros
|
|
|
344
354
|
### Hubs
|
|
345
355
|
|
|
346
356
|
- **H100**
|
|
357
|
+
- Hardware: 1.0 (AU) / Firmware: 1.5.23
|
|
347
358
|
- Hardware: 1.0 (EU) / Firmware: 1.2.3
|
|
348
359
|
- Hardware: 1.0 (EU) / Firmware: 1.5.10
|
|
349
360
|
- Hardware: 1.0 (EU) / Firmware: 1.5.5
|
|
@@ -362,6 +373,7 @@ All Tapo devices require authentication.<br>Hub-Connected Devices may work acros
|
|
|
362
373
|
- Hardware: 1.0 (EU) / Firmware: 1.12.0
|
|
363
374
|
- **T100**
|
|
364
375
|
- Hardware: 1.0 (EU) / Firmware: 1.12.0
|
|
376
|
+
- Hardware: 1.0 (US) / Firmware: 1.12.0
|
|
365
377
|
- **T110**
|
|
366
378
|
- Hardware: 1.0 (EU) / Firmware: 1.8.0
|
|
367
379
|
- Hardware: 1.0 (EU) / Firmware: 1.9.0
|
package/config.schema.json
CHANGED
|
@@ -96,6 +96,15 @@
|
|
|
96
96
|
},
|
|
97
97
|
"description": "List of devices to manually add."
|
|
98
98
|
},
|
|
99
|
+
"excludeMacAddresses": {
|
|
100
|
+
"title": "Exclude MAC Addresses",
|
|
101
|
+
"type": "array",
|
|
102
|
+
"items": {
|
|
103
|
+
"title": "MAC Address",
|
|
104
|
+
"type": "string"
|
|
105
|
+
},
|
|
106
|
+
"description": "List of MAC addresses to exclude from device discovery. Format: AA:BB:CC:11:22:33"
|
|
107
|
+
},
|
|
99
108
|
"waitTimeUpdate": {
|
|
100
109
|
"title": "Wait Time Update (milliseconds)",
|
|
101
110
|
"type": "integer",
|
|
@@ -177,6 +186,22 @@
|
|
|
177
186
|
"helpvalue": "Before resorting to manually specifying devices. Try setting the broadcast address and check your router/switch/firewall configuration. You must assign static IP addresses to your devices to use this configuration."
|
|
178
187
|
}
|
|
179
188
|
]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"type": "fieldset",
|
|
192
|
+
"title": "Exclude MAC Addresses",
|
|
193
|
+
"description": "Specify MAC addresses to exclude from device discovery.",
|
|
194
|
+
"expandable": true,
|
|
195
|
+
"items": [
|
|
196
|
+
{
|
|
197
|
+
"key": "excludeMacAddresses",
|
|
198
|
+
"type": "array",
|
|
199
|
+
"items": {
|
|
200
|
+
"title": "MAC Address",
|
|
201
|
+
"type": "string"
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
]
|
|
180
205
|
}
|
|
181
206
|
]
|
|
182
207
|
},
|
package/dist/config.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export interface KasaPythonConfigInput {
|
|
|
16
16
|
offlineInterval?: number;
|
|
17
17
|
additionalBroadcasts?: string[];
|
|
18
18
|
manualDevices?: (string | ConfigDevice)[];
|
|
19
|
+
excludeMacAddresses?: string[];
|
|
19
20
|
waitTimeUpdate?: number;
|
|
20
21
|
advancedPythonLogging?: boolean;
|
|
21
22
|
}
|
|
@@ -33,6 +34,7 @@ export type KasaPythonConfig = {
|
|
|
33
34
|
offlineInterval: number;
|
|
34
35
|
additionalBroadcasts: string[];
|
|
35
36
|
manualDevices: ConfigDevice[];
|
|
37
|
+
excludeMacAddresses: string[];
|
|
36
38
|
};
|
|
37
39
|
advancedOptions: {
|
|
38
40
|
waitTimeUpdate: number;
|
package/dist/config.js
CHANGED
|
@@ -39,6 +39,7 @@ export const defaultConfig = {
|
|
|
39
39
|
offlineInterval: 7,
|
|
40
40
|
additionalBroadcasts: [],
|
|
41
41
|
manualDevices: [],
|
|
42
|
+
excludeMacAddresses: [],
|
|
42
43
|
},
|
|
43
44
|
advancedOptions: {
|
|
44
45
|
waitTimeUpdate: 100,
|
|
@@ -78,6 +79,9 @@ function validateConfig(config) {
|
|
|
78
79
|
if (config.manualDevices !== undefined && !Array.isArray(config.manualDevices)) {
|
|
79
80
|
errors.push('`manualDevices` should be an array.');
|
|
80
81
|
}
|
|
82
|
+
if (config.excludeMacAddresses !== undefined && !Array.isArray(config.excludeMacAddresses)) {
|
|
83
|
+
errors.push('`excludeMacAddresses` should be an array of strings.');
|
|
84
|
+
}
|
|
81
85
|
validateType(config, 'waitTimeUpdate', 'number', errors);
|
|
82
86
|
validateType(config, 'advancedPythonLogging', 'boolean', errors);
|
|
83
87
|
return errors;
|
|
@@ -110,6 +114,7 @@ export function parseConfig(config) {
|
|
|
110
114
|
offlineInterval: (c.offlineInterval ?? defaultConfig.discoveryOptions.offlineInterval) * 24 * 60 * 60 * 1000,
|
|
111
115
|
additionalBroadcasts: c.additionalBroadcasts ?? defaultConfig.discoveryOptions.additionalBroadcasts,
|
|
112
116
|
manualDevices: c.manualDevices ? convertManualDevices(c.manualDevices) : defaultConfig.discoveryOptions.manualDevices,
|
|
117
|
+
excludeMacAddresses: c.excludeMacAddresses ?? defaultConfig.discoveryOptions.excludeMacAddresses,
|
|
113
118
|
},
|
|
114
119
|
advancedOptions: {
|
|
115
120
|
waitTimeUpdate: c.waitTimeUpdate ?? defaultConfig.advancedOptions.waitTimeUpdate,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAGhC;IACA;IAHT,YACE,OAAe,EACR,MAAwB,EACxB,YAAsB;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,WAAM,GAAN,MAAM,CAAkB;QACxB,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,MAAwB,EACxB,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,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,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;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export default class DeviceManager {
|
|
|
10
10
|
password;
|
|
11
11
|
additionalBroadcasts;
|
|
12
12
|
manualDevices;
|
|
13
|
+
excludeMacAddresses;
|
|
13
14
|
constructor(platform) {
|
|
14
15
|
this.platform = platform;
|
|
15
16
|
this.log = platform.log;
|
|
@@ -18,6 +19,7 @@ export default class DeviceManager {
|
|
|
18
19
|
this.apiUrl = `http://127.0.0.1:${platform.port}`;
|
|
19
20
|
this.additionalBroadcasts = platform.config.discoveryOptions.additionalBroadcasts;
|
|
20
21
|
this.manualDevices = platform.config.discoveryOptions.manualDevices.map(device => device.host);
|
|
22
|
+
this.excludeMacAddresses = platform.config.discoveryOptions.excludeMacAddresses;
|
|
21
23
|
}
|
|
22
24
|
convertManualDevices(manualDevices) {
|
|
23
25
|
return manualDevices.map(device => {
|
|
@@ -83,6 +85,7 @@ export default class DeviceManager {
|
|
|
83
85
|
const response = await axios.post(`${this.apiUrl}/discover`, {
|
|
84
86
|
additionalBroadcasts: this.additionalBroadcasts,
|
|
85
87
|
manualDevices: this.manualDevices,
|
|
88
|
+
excludeMacAddresses: this.excludeMacAddresses,
|
|
86
89
|
}, config);
|
|
87
90
|
const devices = response.data;
|
|
88
91
|
if (!devices || Object.keys(devices).length === 0) {
|
|
@@ -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,CAAC,OAAO,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"deviceManager.js","sourceRoot":"","sources":["../../src/devices/deviceManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,7 @@ export const LightBulbs = [
|
|
|
59
59
|
'KL135',
|
|
60
60
|
'KL50',
|
|
61
61
|
'KL60',
|
|
62
|
+
'LB100',
|
|
62
63
|
'LB110',
|
|
63
64
|
'L510',
|
|
64
65
|
'L530',
|
|
@@ -73,6 +74,7 @@ export const LightBulbs = [
|
|
|
73
74
|
];
|
|
74
75
|
export const Unsupported = [
|
|
75
76
|
'C100',
|
|
77
|
+
'C110',
|
|
76
78
|
'C210',
|
|
77
79
|
'C225',
|
|
78
80
|
'C325WB',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kasaDevices.js","sourceRoot":"","sources":["../../src/devices/kasaDevices.ts"],"names":[],"mappings":"AA4FA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACR,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,SAAS;IACT,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"kasaDevices.js","sourceRoot":"","sources":["../../src/devices/kasaDevices.ts"],"names":[],"mappings":"AA4FA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACR,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,SAAS;IACT,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC"}
|
package/dist/python/kasaApi.py
CHANGED
|
@@ -114,6 +114,7 @@ async def discover_devices(
|
|
|
114
114
|
password: Optional[str] = None,
|
|
115
115
|
additional_broadcasts: Optional[List[str]] = None,
|
|
116
116
|
manual_devices: Optional[List[str]] = None,
|
|
117
|
+
exclude_mac_addresses: Optional[List[str]] = None,
|
|
117
118
|
) -> Dict[str, Any]:
|
|
118
119
|
devices = {}
|
|
119
120
|
devices_to_remove = []
|
|
@@ -131,9 +132,11 @@ async def discover_devices(
|
|
|
131
132
|
except (UnsupportedDeviceError, AuthenticationError) as e:
|
|
132
133
|
print(f"{e.__class__.__name__}: {device.host}", file=sys.stderr)
|
|
133
134
|
devices_to_remove.append(device.host)
|
|
135
|
+
await safe_disconnect(device)
|
|
134
136
|
except Exception as e:
|
|
135
137
|
print(f"Error during discovery: {e}", file=sys.stderr)
|
|
136
138
|
devices_to_remove.append(device.host)
|
|
139
|
+
await safe_disconnect(device)
|
|
137
140
|
|
|
138
141
|
async def discover_on_broadcast(broadcast: str):
|
|
139
142
|
print(f"Discovering on broadcast: {broadcast}")
|
|
@@ -158,6 +161,8 @@ async def discover_devices(
|
|
|
158
161
|
devices[host] = device
|
|
159
162
|
except Exception as e:
|
|
160
163
|
print(f"Error during manual device discovery: {e}", file=sys.stderr)
|
|
164
|
+
devices_to_remove.append(host)
|
|
165
|
+
await safe_disconnect(device)
|
|
161
166
|
|
|
162
167
|
discover_tasks = [discover_on_broadcast(bc) for bc in broadcasts]
|
|
163
168
|
manual_discover_tasks = [discover_manual_device(host) for host in (manual_devices or [])]
|
|
@@ -168,11 +173,16 @@ async def discover_devices(
|
|
|
168
173
|
host: str
|
|
169
174
|
device: Device
|
|
170
175
|
|
|
176
|
+
for host in devices:
|
|
177
|
+
device = devices[host]
|
|
178
|
+
if device.mac in (exclude_mac_addresses or []):
|
|
179
|
+
devices_to_remove.append(host)
|
|
180
|
+
|
|
171
181
|
for host in devices_to_remove:
|
|
172
182
|
device = devices.pop(host, None)
|
|
173
183
|
if device:
|
|
174
184
|
print(f"Removing device: {device.alias}")
|
|
175
|
-
await device
|
|
185
|
+
await safe_disconnect(device)
|
|
176
186
|
|
|
177
187
|
for host, device_config_dict in device_config_cache.items():
|
|
178
188
|
device = devices.get(host)
|
|
@@ -188,8 +198,7 @@ async def discover_devices(
|
|
|
188
198
|
await device.update()
|
|
189
199
|
except Exception as e:
|
|
190
200
|
print(f"Error checking device: {e}", file=sys.stderr)
|
|
191
|
-
|
|
192
|
-
await device.disconnect()
|
|
201
|
+
await safe_disconnect(device)
|
|
193
202
|
continue
|
|
194
203
|
|
|
195
204
|
try:
|
|
@@ -201,11 +210,11 @@ async def discover_devices(
|
|
|
201
210
|
print(f"Skipping device {device.alias} due to Native HomeKit support")
|
|
202
211
|
if matter_component:
|
|
203
212
|
print(f"Skipping device {device.alias} due to Matter support")
|
|
204
|
-
await device
|
|
213
|
+
await safe_disconnect(device)
|
|
205
214
|
continue
|
|
206
215
|
except Exception as e:
|
|
207
216
|
print(f"Error checking HomeKit and Matter modules: {e}", file=sys.stderr)
|
|
208
|
-
await device
|
|
217
|
+
await safe_disconnect(device)
|
|
209
218
|
continue
|
|
210
219
|
|
|
211
220
|
device_type = device.device_type.value
|
|
@@ -217,7 +226,7 @@ async def discover_devices(
|
|
|
217
226
|
update_tasks.append(create_device_info(host, device))
|
|
218
227
|
else:
|
|
219
228
|
print(f"Skipping unsupported device: {host}")
|
|
220
|
-
await device
|
|
229
|
+
await safe_disconnect(device)
|
|
221
230
|
|
|
222
231
|
results = await asyncio.gather(*update_tasks, return_exceptions=True)
|
|
223
232
|
|
|
@@ -225,26 +234,12 @@ async def discover_devices(
|
|
|
225
234
|
host, info = result
|
|
226
235
|
if isinstance(info, Exception):
|
|
227
236
|
print(f"Error creating device info for host {host}: {info}", file=sys.stderr)
|
|
228
|
-
|
|
229
|
-
device_config_dict = device_config_cache.get(host)
|
|
230
|
-
if device_config_dict:
|
|
231
|
-
device_config = DeviceConfig.from_dict(device_config_dict)
|
|
232
|
-
device = await get_or_connect_device(host, device_config)
|
|
233
|
-
if device:
|
|
234
|
-
await device.disconnect()
|
|
235
|
-
device_cache.pop(host, None)
|
|
236
|
-
except Exception as e:
|
|
237
|
-
print(f"Error disconnecting device: {e}", file=sys.stderr)
|
|
237
|
+
await handle_device_error(host)
|
|
238
238
|
continue
|
|
239
239
|
print(f"Device info created for device: {host}")
|
|
240
240
|
all_device_info[host] = info
|
|
241
241
|
|
|
242
|
-
|
|
243
|
-
try:
|
|
244
|
-
await device.disconnect()
|
|
245
|
-
print(f"Disconnected device: {host}")
|
|
246
|
-
except Exception as e:
|
|
247
|
-
print(f"Error disconnecting device {host}: {e}", file=sys.stderr)
|
|
242
|
+
await disconnect_all_devices(devices)
|
|
248
243
|
|
|
249
244
|
return all_device_info
|
|
250
245
|
|
|
@@ -281,21 +276,7 @@ async def get_sys_info(host: str) -> Dict[str, Any]:
|
|
|
281
276
|
device_info = custom_serializer(device)
|
|
282
277
|
return {"sys_info": device_info["sys_info"]}
|
|
283
278
|
except Exception as e:
|
|
284
|
-
|
|
285
|
-
if device:
|
|
286
|
-
await device.disconnect()
|
|
287
|
-
device_cache.pop(host, None)
|
|
288
|
-
device_lock = device_lock_cache.get(host, asyncio.Lock())
|
|
289
|
-
async with device_lock:
|
|
290
|
-
device = await get_or_connect_device(host, device_config)
|
|
291
|
-
device_info = custom_serializer(device)
|
|
292
|
-
return {"sys_info": device_info["sys_info"]}
|
|
293
|
-
except Exception as e:
|
|
294
|
-
print(f"GetSysInfo failed: {e}", file=sys.stderr)
|
|
295
|
-
if device:
|
|
296
|
-
await device.disconnect()
|
|
297
|
-
device_cache.pop(host, None)
|
|
298
|
-
return {"error": str(e)}
|
|
279
|
+
return await handle_device_error(host, e)
|
|
299
280
|
|
|
300
281
|
async def get_or_connect_device(host: str, device_config: DeviceConfig) -> Device:
|
|
301
282
|
try:
|
|
@@ -307,9 +288,7 @@ async def get_or_connect_device(host: str, device_config: DeviceConfig) -> Devic
|
|
|
307
288
|
return device
|
|
308
289
|
except Exception as e:
|
|
309
290
|
print(f"Failed to connect to device: {e}", file=sys.stderr)
|
|
310
|
-
|
|
311
|
-
await device.disconnect()
|
|
312
|
-
device_cache.pop(host, None)
|
|
291
|
+
await safe_disconnect(device)
|
|
313
292
|
raise
|
|
314
293
|
|
|
315
294
|
async def control_device(
|
|
@@ -328,20 +307,7 @@ async def control_device(
|
|
|
328
307
|
device = await get_or_connect_device(host, device_config)
|
|
329
308
|
return await perform_device_action(device, feature, action, value, child_num)
|
|
330
309
|
except Exception as e:
|
|
331
|
-
|
|
332
|
-
if device:
|
|
333
|
-
await device.disconnect()
|
|
334
|
-
device_cache.pop(host, None)
|
|
335
|
-
device_lock = device_lock_cache.get(host, asyncio.Lock())
|
|
336
|
-
async with device_lock:
|
|
337
|
-
device = await get_or_connect_device(host, device_config)
|
|
338
|
-
return await perform_device_action(device, feature, action, value, child_num)
|
|
339
|
-
except Exception as e:
|
|
340
|
-
print(f"ControlDevice failed: {e}", file=sys.stderr)
|
|
341
|
-
if device:
|
|
342
|
-
await device.disconnect()
|
|
343
|
-
device_cache.pop(host, None)
|
|
344
|
-
return {"error": str(e)}
|
|
310
|
+
return await handle_device_error(host, e)
|
|
345
311
|
|
|
346
312
|
async def perform_device_action(
|
|
347
313
|
device: Device,
|
|
@@ -415,7 +381,8 @@ async def discover_route():
|
|
|
415
381
|
data: Dict[str, Any] = await request.get_json()
|
|
416
382
|
additional_broadcasts = data.get('additionalBroadcasts', [])
|
|
417
383
|
manual_devices = data.get('manualDevices', [])
|
|
418
|
-
|
|
384
|
+
exclude_mac_addresses = data.get('excludeMacAddresses', [])
|
|
385
|
+
devices_info = await discover_devices(username, password, additional_broadcasts, manual_devices, exclude_mac_addresses)
|
|
419
386
|
return jsonify(devices_info)
|
|
420
387
|
except Exception as e:
|
|
421
388
|
print(f"Discover route error: {e}", file=sys.stderr)
|
|
@@ -456,4 +423,29 @@ async def cleanup():
|
|
|
456
423
|
print("Cleaning up and disconnecting all devices.")
|
|
457
424
|
await close_all_connections()
|
|
458
425
|
device_lock_cache.clear()
|
|
459
|
-
device_config_cache.clear()
|
|
426
|
+
device_config_cache.clear()
|
|
427
|
+
|
|
428
|
+
async def safe_disconnect(device: Optional[Device]):
|
|
429
|
+
if device:
|
|
430
|
+
try:
|
|
431
|
+
await device.disconnect()
|
|
432
|
+
except Exception as e:
|
|
433
|
+
print(f"Error disconnecting device: {e}", file=sys.stderr)
|
|
434
|
+
|
|
435
|
+
async def handle_device_error(host: str, error: Optional[Exception] = None) -> Dict[str, Any]:
|
|
436
|
+
print(f"Handling device error for host {host}: {error}", file=sys.stderr)
|
|
437
|
+
try:
|
|
438
|
+
device_config_dict = device_config_cache.get(host)
|
|
439
|
+
if device_config_dict:
|
|
440
|
+
device_config = DeviceConfig.from_dict(device_config_dict)
|
|
441
|
+
device = await get_or_connect_device(host, device_config)
|
|
442
|
+
await safe_disconnect(device)
|
|
443
|
+
device_cache.pop(host, None)
|
|
444
|
+
except Exception as e:
|
|
445
|
+
print(f"Error during error handling: {e}", file=sys.stderr)
|
|
446
|
+
return {"error": str(error)}
|
|
447
|
+
|
|
448
|
+
async def disconnect_all_devices(devices: Dict[str, Device]):
|
|
449
|
+
for host, device in devices.items():
|
|
450
|
+
await safe_disconnect(device)
|
|
451
|
+
print(f"Disconnected device: {host}")
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "Homebridge Kasa Python",
|
|
3
3
|
"name": "homebridge-kasa-python",
|
|
4
|
-
"version": "2.7.2-beta.
|
|
4
|
+
"version": "2.7.2-beta.3",
|
|
5
5
|
"description": "Plugin that uses Python-Kasa API to communicate with Kasa Devices.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"engines": {
|
|
16
16
|
"homebridge": "^1.8.0 || ^2.0.0-beta.0",
|
|
17
|
-
"node": "^18.20.6 || ^20.18.3 || ^22.14.0 || ^23.
|
|
17
|
+
"node": "^18.20.6 || ^20.18.3 || ^22.14.0 || ^23.9.0",
|
|
18
18
|
"python": "^3.11.0"
|
|
19
19
|
},
|
|
20
20
|
"main": "dist/index.js",
|
|
@@ -48,19 +48,19 @@
|
|
|
48
48
|
"requirements.txt"
|
|
49
49
|
],
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@eslint/eslintrc": "^3.
|
|
52
|
-
"@eslint/js": "^9.
|
|
53
|
-
"@types/node": "^22.13.
|
|
54
|
-
"@typescript-eslint/parser": "^8.
|
|
55
|
-
"@stylistic/eslint-plugin": "^4.0
|
|
56
|
-
"eslint": "^9.
|
|
57
|
-
"globals": "^
|
|
51
|
+
"@eslint/eslintrc": "^3.3.0",
|
|
52
|
+
"@eslint/js": "^9.21.0",
|
|
53
|
+
"@types/node": "^22.13.9",
|
|
54
|
+
"@typescript-eslint/parser": "^8.26.0",
|
|
55
|
+
"@stylistic/eslint-plugin": "^4.2.0",
|
|
56
|
+
"eslint": "^9.21.0",
|
|
57
|
+
"globals": "^16.0.0",
|
|
58
58
|
"homebridge": "^2.0.0-beta.27",
|
|
59
59
|
"node-persist": "^4.0.4",
|
|
60
60
|
"nodemon": "^3.1.9",
|
|
61
61
|
"rimraf": "^6.0.1",
|
|
62
62
|
"ts-node": "^10.9.2",
|
|
63
|
-
"typescript-eslint": "^8.
|
|
63
|
+
"typescript-eslint": "^8.26.0"
|
|
64
64
|
},
|
|
65
65
|
"homepage": "https://github.com/ZeliardM/homebridge-kasa-python#readme",
|
|
66
66
|
"funding": [
|
|
@@ -74,9 +74,9 @@
|
|
|
74
74
|
}
|
|
75
75
|
],
|
|
76
76
|
"dependencies": {
|
|
77
|
-
"axios": "^1.
|
|
77
|
+
"axios": "^1.8.2",
|
|
78
78
|
"ts-essentials": "^10.0.4",
|
|
79
|
-
"typescript": "^5.
|
|
79
|
+
"typescript": "^5.8.2"
|
|
80
80
|
},
|
|
81
81
|
"overrides": {
|
|
82
82
|
"node-persist": "^4.0.4"
|