homebridge-kasa-python 2.9.1 → 3.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/config.schema.json +17 -2
- package/dist/accessoryInformation.d.ts +2 -2
- package/dist/accessoryInformation.js +24 -28
- package/dist/accessoryInformation.js.map +1 -1
- package/dist/config.d.ts +5 -1
- package/dist/config.js +24 -16
- package/dist/config.js.map +1 -1
- package/dist/devices/baseDevice.d.ts +61 -0
- package/dist/devices/baseDevice.js +361 -0
- package/dist/devices/baseDevice.js.map +1 -0
- package/dist/devices/baseParent.d.ts +19 -0
- package/dist/devices/baseParent.js +150 -0
- package/dist/devices/baseParent.js.map +1 -0
- package/dist/devices/create.d.ts +3 -3
- package/dist/devices/create.js +21 -27
- package/dist/devices/create.js.map +1 -1
- package/dist/devices/descriptorHelpers.d.ts +14 -0
- package/dist/devices/descriptorHelpers.js +146 -0
- package/dist/devices/descriptorHelpers.js.map +1 -0
- package/dist/devices/deviceManager.d.ts +13 -13
- package/dist/devices/deviceManager.js +115 -137
- package/dist/devices/deviceManager.js.map +1 -1
- package/dist/devices/{kasaDevices.d.ts → deviceTypes.d.ts} +58 -42
- package/dist/devices/deviceTypes.js +20 -0
- package/dist/devices/deviceTypes.js.map +1 -0
- package/dist/devices/homekitLightBulb.d.ts +7 -28
- package/dist/devices/homekitLightBulb.js +42 -365
- package/dist/devices/homekitLightBulb.js.map +1 -1
- package/dist/devices/homekitPlug.d.ts +6 -25
- package/dist/devices/homekitPlug.js +21 -322
- package/dist/devices/homekitPlug.js.map +1 -1
- package/dist/devices/homekitPowerStrip.d.ts +6 -26
- package/dist/devices/homekitPowerStrip.js +25 -345
- package/dist/devices/homekitPowerStrip.js.map +1 -1
- package/dist/devices/homekitSwitch.d.ts +5 -26
- package/dist/devices/homekitSwitch.js +18 -302
- package/dist/devices/homekitSwitch.js.map +1 -1
- package/dist/devices/homekitSwitchWithChildren.d.ts +5 -29
- package/dist/devices/homekitSwitchWithChildren.js +24 -371
- package/dist/devices/homekitSwitchWithChildren.js.map +1 -1
- package/dist/energyCharacteristics.d.ts +8 -0
- package/dist/energyCharacteristics.js +88 -0
- package/dist/energyCharacteristics.js.map +1 -0
- package/dist/platform.d.ts +4 -2
- package/dist/platform.js +68 -63
- package/dist/platform.js.map +1 -1
- package/dist/python/kasaApi.py +68 -55
- package/dist/python/pythonChecker.js +2 -2
- package/dist/python/pythonChecker.js.map +1 -1
- package/package.json +15 -15
- package/requirements.txt +2 -2
- package/dist/devices/index.d.ts +0 -33
- package/dist/devices/index.js +0 -100
- package/dist/devices/index.js.map +0 -1
- package/dist/devices/kasaDevices.js +0 -102
- package/dist/devices/kasaDevices.js.map +0 -1
package/dist/platform.js
CHANGED
|
@@ -5,6 +5,7 @@ import create from './devices/create.js';
|
|
|
5
5
|
import DeviceManager, { deviceEventEmitter } from './devices/deviceManager.js';
|
|
6
6
|
import PythonChecker from './python/pythonChecker.js';
|
|
7
7
|
import { parseConfig } from './config.js';
|
|
8
|
+
import { createEnergyCharacteristics } from './energyCharacteristics.js';
|
|
8
9
|
import { TaskQueue } from './taskQueue.js';
|
|
9
10
|
import { deferAndCombine, runCommand } from './utils.js';
|
|
10
11
|
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
@@ -15,6 +16,7 @@ export default class KasaPythonPlatform {
|
|
|
15
16
|
log;
|
|
16
17
|
api;
|
|
17
18
|
Characteristic;
|
|
19
|
+
energyCharacteristics;
|
|
18
20
|
configuredAccessories = new Map();
|
|
19
21
|
offlineAccessories = new Map();
|
|
20
22
|
Service;
|
|
@@ -39,6 +41,9 @@ export default class KasaPythonPlatform {
|
|
|
39
41
|
this.Characteristic = this.api.hap.Characteristic;
|
|
40
42
|
this.storagePath = this.api.user.storagePath();
|
|
41
43
|
this.config = parseConfig(config);
|
|
44
|
+
if (this.config.enableEnergyMonitoring) {
|
|
45
|
+
this.energyCharacteristics = createEnergyCharacteristics(this.api.hap);
|
|
46
|
+
}
|
|
42
47
|
this.periodicDeviceDiscoveryEmitter = new EventEmitter();
|
|
43
48
|
this.taskQueue = new TaskQueue(this.log);
|
|
44
49
|
this.setupDeviceEventEmitter('firstDiscovery');
|
|
@@ -74,10 +79,10 @@ export default class KasaPythonPlatform {
|
|
|
74
79
|
this.stopKasaApi();
|
|
75
80
|
});
|
|
76
81
|
}
|
|
77
|
-
setupDeviceEventEmitter(
|
|
82
|
+
setupDeviceEventEmitter(mode, discoveredDeviceIds) {
|
|
78
83
|
deviceEventEmitter.removeAllListeners('deviceDiscovered');
|
|
79
|
-
this.log.debug(`Setting up device event emitter: ${
|
|
80
|
-
if (
|
|
84
|
+
this.log.debug(`Setting up device event emitter: ${mode}`);
|
|
85
|
+
if (mode === 'periodicDiscovery' && discoveredDeviceIds) {
|
|
81
86
|
deviceEventEmitter.on('deviceDiscovered', async (device) => {
|
|
82
87
|
this.log.debug(`Device discovered during periodic discovery: ${device.sys_info.device_id}`);
|
|
83
88
|
discoveredDeviceIds.add(device.sys_info.device_id);
|
|
@@ -124,10 +129,10 @@ export default class KasaPythonPlatform {
|
|
|
124
129
|
if (this.api.versionGreaterOrEqual &&
|
|
125
130
|
!(this.api.versionGreaterOrEqual('1.11.0') ||
|
|
126
131
|
this.api.versionGreaterOrEqual('2.0.0'))) {
|
|
127
|
-
throw new Error(`homebridge-kasa-python requires Homebridge ^1.11.0 || ^2.0. Currently running: ${this.api.serverVersion}`);
|
|
132
|
+
throw new Error(`homebridge-kasa-python requires Homebridge ^1.11.0 || ^2.0.0-beta.0. Currently running: ${this.api.serverVersion}`);
|
|
128
133
|
}
|
|
129
134
|
else {
|
|
130
|
-
this.log.debug(`Homebridge version ${this.api.serverVersion} satisfies the requirement ^1.11.0 || ^2.0.0`);
|
|
135
|
+
this.log.debug(`Homebridge version ${this.api.serverVersion} satisfies the requirement ^1.11.0 || ^2.0.0-beta.0`);
|
|
131
136
|
}
|
|
132
137
|
}
|
|
133
138
|
catch (error) {
|
|
@@ -160,8 +165,13 @@ export default class KasaPythonPlatform {
|
|
|
160
165
|
setupPeriodicDiscovery(discoveredDeviceIds) {
|
|
161
166
|
this.log.debug('Setting up periodic device discovery');
|
|
162
167
|
this.setupDeviceEventEmitter('periodicDiscovery', discoveredDeviceIds);
|
|
163
|
-
|
|
168
|
+
const discoveryTask = async () => {
|
|
164
169
|
await this.periodicDeviceDiscovery(discoveredDeviceIds);
|
|
170
|
+
};
|
|
171
|
+
const deferredDiscoveryTask = deferAndCombine(discoveryTask, this.config.advancedOptions.waitTimeUpdate);
|
|
172
|
+
setInterval(async () => {
|
|
173
|
+
this.taskQueue.addTask(deferredDiscoveryTask);
|
|
174
|
+
await deferredDiscoveryTask();
|
|
165
175
|
}, this.config.discoveryOptions.discoveryPollingInterval);
|
|
166
176
|
this.log.debug('Periodic device discovery setup completed');
|
|
167
177
|
}
|
|
@@ -188,25 +198,20 @@ export default class KasaPythonPlatform {
|
|
|
188
198
|
this.periodicDeviceDiscovering = true;
|
|
189
199
|
discoveredDeviceIds.clear();
|
|
190
200
|
this.log.debug('Cleared discoveredDeviceIds set before discovery.');
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
await this.deviceManager.discoverDevices();
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
this.log.error('Error during periodic device discovery:', error);
|
|
199
|
-
}
|
|
200
|
-
finally {
|
|
201
|
-
this.handleOfflineDevices(discoveredDeviceIds);
|
|
202
|
-
this.periodicDeviceDiscovering = false;
|
|
203
|
-
this.periodicDeviceDiscoveryEmitter.emit('periodicDeviceDiscoveryComplete');
|
|
204
|
-
this.log.debug('Finished periodic device discovery');
|
|
201
|
+
try {
|
|
202
|
+
if (this.deviceManager) {
|
|
203
|
+
await this.deviceManager.discoverDevices();
|
|
205
204
|
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
this.log.error('Error during periodic device discovery:', error);
|
|
208
|
+
}
|
|
209
|
+
finally {
|
|
210
|
+
this.handleOfflineDevices(discoveredDeviceIds);
|
|
211
|
+
this.periodicDeviceDiscovering = false;
|
|
212
|
+
this.periodicDeviceDiscoveryEmitter.emit('periodicDeviceDiscoveryComplete');
|
|
213
|
+
this.log.debug('Finished periodic device discovery');
|
|
214
|
+
}
|
|
210
215
|
}
|
|
211
216
|
async processDevice(device) {
|
|
212
217
|
this.log.debug(`Processing device: ${device.sys_info.device_id}`);
|
|
@@ -214,9 +219,9 @@ export default class KasaPythonPlatform {
|
|
|
214
219
|
const now = new Date();
|
|
215
220
|
device.last_seen = now;
|
|
216
221
|
device.offline = false;
|
|
217
|
-
const
|
|
218
|
-
if (
|
|
219
|
-
await this.updateExistingDevice(
|
|
222
|
+
const accessory = this.findPlatformAccessory(device.sys_info.device_id);
|
|
223
|
+
if (accessory) {
|
|
224
|
+
await this.updateExistingDevice(accessory, device, now);
|
|
220
225
|
}
|
|
221
226
|
else {
|
|
222
227
|
await this.addNewDevice(device);
|
|
@@ -264,9 +269,9 @@ export default class KasaPythonPlatform {
|
|
|
264
269
|
}
|
|
265
270
|
return undefined;
|
|
266
271
|
}
|
|
267
|
-
async updateExistingDevice(
|
|
272
|
+
async updateExistingDevice(accessory, device, now) {
|
|
268
273
|
this.log.debug(`Device [${device.sys_info.device_id}] is already configured, updating status.`);
|
|
269
|
-
this.updateAccessoryStatus(
|
|
274
|
+
this.updateAccessoryStatus(accessory, now, false);
|
|
270
275
|
const existingDevice = this.homekitDevicesById.get(device.sys_info.device_id);
|
|
271
276
|
if (existingDevice) {
|
|
272
277
|
if (!existingDevice.isUpdating) {
|
|
@@ -355,7 +360,7 @@ export default class KasaPythonPlatform {
|
|
|
355
360
|
return result;
|
|
356
361
|
}
|
|
357
362
|
getServiceName(service) {
|
|
358
|
-
const serviceName = lookup(this.api.hap.Service, (
|
|
363
|
+
const serviceName = lookup(this.api.hap.Service, (objectProp, value) => isObjectLike(objectProp) && 'UUID' in objectProp && objectProp.UUID === value, service.UUID);
|
|
359
364
|
return serviceName;
|
|
360
365
|
}
|
|
361
366
|
getCharacteristicName(characteristic) {
|
|
@@ -364,54 +369,54 @@ export default class KasaPythonPlatform {
|
|
|
364
369
|
const lookupName = lookupCharacteristicNameByUUID(this.api.hap.Characteristic, characteristic.UUID);
|
|
365
370
|
return name ?? displayName ?? lookupName;
|
|
366
371
|
}
|
|
367
|
-
registerPlatformAccessory(
|
|
368
|
-
this.log.debug('Registering platform
|
|
369
|
-
if (!this.configuredAccessories.has(
|
|
370
|
-
this.log.debug(`Platform Accessory ${
|
|
371
|
-
this.configuredAccessories.set(
|
|
372
|
+
registerPlatformAccessory(accessory) {
|
|
373
|
+
this.log.debug('Registering platform accessory:', accessory.displayName);
|
|
374
|
+
if (!this.configuredAccessories.has(accessory.UUID)) {
|
|
375
|
+
this.log.debug(`Platform Accessory ${accessory.displayName} is not in configuredAccessories, adding it.`);
|
|
376
|
+
this.configuredAccessories.set(accessory.UUID, accessory);
|
|
372
377
|
}
|
|
373
378
|
else {
|
|
374
|
-
this.log.debug(`Platform Accessory ${
|
|
379
|
+
this.log.debug(`Platform Accessory ${accessory.displayName} is already in configuredAccessories.`);
|
|
375
380
|
}
|
|
376
|
-
this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [
|
|
377
|
-
this.log.debug(`Platform Accessory ${
|
|
381
|
+
this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
|
|
382
|
+
this.log.debug(`Platform Accessory ${accessory.displayName} registered with Homebridge.`);
|
|
378
383
|
}
|
|
379
|
-
configureAccessory(
|
|
380
|
-
this.log.debug(`Configuring Platform Accessory: [${
|
|
381
|
-
if (!
|
|
382
|
-
this.log.debug(`Setting initial lastSeen and offline status for Platform Accessory: [${
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
}
|
|
386
|
-
if (
|
|
384
|
+
configureAccessory(accessory) {
|
|
385
|
+
this.log.debug(`Configuring Platform Accessory: [${accessory.displayName}] UUID: ${accessory.UUID}`);
|
|
386
|
+
if (!accessory.context.lastSeen && !accessory.context.offline) {
|
|
387
|
+
this.log.debug(`Setting initial lastSeen and offline status for Platform Accessory: [${accessory.displayName}]`);
|
|
388
|
+
accessory.context.lastSeen = new Date();
|
|
389
|
+
accessory.context.offline = false;
|
|
390
|
+
}
|
|
391
|
+
if (accessory.context.lastSeen) {
|
|
387
392
|
const now = new Date();
|
|
388
|
-
const timeSinceLastSeen = now.getTime() - new Date(
|
|
393
|
+
const timeSinceLastSeen = now.getTime() - new Date(accessory.context.lastSeen).getTime();
|
|
389
394
|
const offlineInterval = this.config.discoveryOptions.offlineInterval;
|
|
390
|
-
this.log.debug(`Platform Accessory [${
|
|
391
|
-
`offline interval is ${offlineInterval}ms, offline status: ${
|
|
392
|
-
if (timeSinceLastSeen > offlineInterval &&
|
|
393
|
-
this.log.info(`Platform Accessory [${
|
|
395
|
+
this.log.debug(`Platform Accessory [${accessory.displayName}] last seen ${timeSinceLastSeen}ms ago, ` +
|
|
396
|
+
`offline interval is ${offlineInterval}ms, offline status: ${accessory.context.offline}`);
|
|
397
|
+
if (timeSinceLastSeen > offlineInterval && accessory.context.offline === true) {
|
|
398
|
+
this.log.info(`Platform Accessory [${accessory.displayName}] is offline and outside the offline interval, ` +
|
|
394
399
|
'moving to offlineAccessories');
|
|
395
|
-
this.configuredAccessories.delete(
|
|
396
|
-
this.offlineAccessories.set(
|
|
400
|
+
this.configuredAccessories.delete(accessory.UUID);
|
|
401
|
+
this.offlineAccessories.set(accessory.UUID, accessory);
|
|
397
402
|
return;
|
|
398
403
|
}
|
|
399
|
-
else if (timeSinceLastSeen < offlineInterval &&
|
|
400
|
-
this.log.debug(`Platform Accessory [${
|
|
404
|
+
else if (timeSinceLastSeen < offlineInterval && accessory.context.offline === true) {
|
|
405
|
+
this.log.debug(`Platform Accessory [${accessory.displayName}] is offline and within offline interval.`);
|
|
401
406
|
}
|
|
402
|
-
else if (
|
|
403
|
-
this.log.debug(`Platform Accessory [${
|
|
404
|
-
this.updateAccessoryStatus(
|
|
407
|
+
else if (accessory.context.offline === false) {
|
|
408
|
+
this.log.debug(`Platform Accessory [${accessory.displayName}] is online, updating lastSeen time.`);
|
|
409
|
+
this.updateAccessoryStatus(accessory, now, false);
|
|
405
410
|
}
|
|
406
411
|
}
|
|
407
|
-
if (!this.configuredAccessories.has(
|
|
408
|
-
this.log.debug(`Platform Accessory [${
|
|
412
|
+
if (!this.configuredAccessories.has(accessory.UUID)) {
|
|
413
|
+
this.log.debug(`Platform Accessory [${accessory.displayName}] with UUID [${accessory.UUID}] ` +
|
|
409
414
|
'is not in configuredAccessories, adding it.');
|
|
410
|
-
this.configuredAccessories.set(
|
|
415
|
+
this.configuredAccessories.set(accessory.UUID, accessory);
|
|
411
416
|
}
|
|
412
417
|
else {
|
|
413
|
-
this.log.debug(`Platform Accessory [${
|
|
414
|
-
`[${
|
|
418
|
+
this.log.debug(`Platform Accessory [${accessory.displayName}] with UUID ` +
|
|
419
|
+
`[${accessory.UUID}] is already in configuredAccessories.`);
|
|
415
420
|
}
|
|
416
421
|
}
|
|
417
422
|
async foundDevice(device) {
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
package/dist/python/kasaApi.py
CHANGED
|
@@ -3,7 +3,7 @@ import json
|
|
|
3
3
|
import os
|
|
4
4
|
import re
|
|
5
5
|
import sys
|
|
6
|
-
from typing import Any,
|
|
6
|
+
from typing import Any, Optional
|
|
7
7
|
|
|
8
8
|
from kasa import (
|
|
9
9
|
AuthenticationError,
|
|
@@ -20,9 +20,9 @@ from quart import Quart, jsonify, request, Response
|
|
|
20
20
|
app = Quart(__name__)
|
|
21
21
|
|
|
22
22
|
hide_homekit_matter = os.getenv("HIDE_HOMEKIT_MATTER", "false").lower() == "true"
|
|
23
|
-
device_cache:
|
|
24
|
-
device_lock_cache:
|
|
25
|
-
device_config_cache:
|
|
23
|
+
device_cache: dict[str, Device] = {}
|
|
24
|
+
device_lock_cache: dict[str, asyncio.Lock] = {}
|
|
25
|
+
device_config_cache: dict[str, dict] = {}
|
|
26
26
|
|
|
27
27
|
device_queue: asyncio.Queue = asyncio.Queue()
|
|
28
28
|
|
|
@@ -38,18 +38,23 @@ UNSUPPORTED_TYPES = {
|
|
|
38
38
|
DeviceType.Unknown.value,
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
HOMEKIT_MIRED_RANGE = (140, 500)
|
|
42
|
-
TPLINK_KELVIN_RANGE = (2500, 6500)
|
|
43
|
-
|
|
44
41
|
def kelvin_to_mired(kelvin: int) -> int:
|
|
45
42
|
if not kelvin or kelvin <= 0:
|
|
46
|
-
return
|
|
47
|
-
return max(
|
|
43
|
+
return 140
|
|
44
|
+
return max(140, min(round(1_000_000 / kelvin), 500))
|
|
48
45
|
|
|
49
46
|
def mired_to_kelvin(mired: int) -> int:
|
|
50
47
|
if not mired or mired <= 0:
|
|
51
|
-
return
|
|
52
|
-
return max(
|
|
48
|
+
return 2500
|
|
49
|
+
return max(2500, min(round(1_000_000 / mired), 6500))
|
|
50
|
+
|
|
51
|
+
def _percent_to_level(percent: int) -> int:
|
|
52
|
+
mapping = {0: 0, 25: 1, 50: 2, 75: 3, 100: 4}
|
|
53
|
+
return mapping[percent]
|
|
54
|
+
|
|
55
|
+
def _level_to_percent(level: int) -> int:
|
|
56
|
+
mapping = {0: 0, 1: 25, 2: 50, 3: 75, 4: 100}
|
|
57
|
+
return mapping[level]
|
|
53
58
|
|
|
54
59
|
def log(message: str, level: str = "INFO", host: Optional[str] = None, alias: Optional[str] = None):
|
|
55
60
|
context = []
|
|
@@ -65,7 +70,7 @@ def _extract_child_suffix_index(device_id: str) -> int:
|
|
|
65
70
|
m = re.search(r'(\d{1,2})$', base)
|
|
66
71
|
return int(m.group(1)) if m else 0
|
|
67
72
|
|
|
68
|
-
def serialize_child(child: Device) ->
|
|
73
|
+
def serialize_child(child: Device) -> dict[str, Any]:
|
|
69
74
|
log("Serializing child device", alias=child.alias)
|
|
70
75
|
child_info = {
|
|
71
76
|
"alias": child.alias,
|
|
@@ -78,30 +83,31 @@ def serialize_child(child: Device) -> Dict[str, Any]:
|
|
|
78
83
|
if light_module:
|
|
79
84
|
child_info.update(get_light_info(child))
|
|
80
85
|
if fan_module:
|
|
81
|
-
|
|
86
|
+
level = getattr(fan_module, "fan_speed_level")
|
|
87
|
+
percent = _level_to_percent(level)
|
|
88
|
+
child_info.update({
|
|
89
|
+
"fan_speed_level": percent,
|
|
90
|
+
})
|
|
82
91
|
if energy_module:
|
|
83
92
|
child_info.update(get_energy_info(child))
|
|
84
93
|
return child_info
|
|
85
94
|
|
|
86
|
-
def get_light_info(device: Device) ->
|
|
95
|
+
def get_light_info(device: Device) -> dict[str, Any]:
|
|
87
96
|
log("Getting light info for device", alias=device.alias)
|
|
88
97
|
light_module = device.modules.get(Module.Light)
|
|
89
|
-
light_info = {}
|
|
98
|
+
light_info: dict[str, Any] = {}
|
|
90
99
|
if light_module.has_feature("brightness"):
|
|
91
100
|
light_info["brightness"] = light_module.brightness
|
|
92
101
|
if light_module.has_feature("color_temp"):
|
|
93
102
|
kelvin = light_module.color_temp
|
|
94
|
-
if kelvin and kelvin > 0
|
|
95
|
-
mired = kelvin_to_mired(kelvin)
|
|
96
|
-
else:
|
|
97
|
-
mired = HOMEKIT_MIRED_RANGE[0]
|
|
103
|
+
mired = kelvin_to_mired(kelvin) if kelvin and kelvin > 0 else 140
|
|
98
104
|
light_info["color_temp"] = mired
|
|
99
105
|
if light_module.has_feature("hsv"):
|
|
100
106
|
hue, saturation, _ = light_module.hsv
|
|
101
107
|
light_info["hsv"] = {"hue": hue, "saturation": saturation}
|
|
102
108
|
return light_info
|
|
103
109
|
|
|
104
|
-
def get_energy_info(device: Device) ->
|
|
110
|
+
def get_energy_info(device: Device) -> dict[str, Any]:
|
|
105
111
|
log("Getting energy info for device", alias=device.alias)
|
|
106
112
|
energy_module = device.modules.get(Module.Energy)
|
|
107
113
|
energy_fields = (
|
|
@@ -115,10 +121,10 @@ def get_energy_info(device: Device) -> Dict[str, Any]:
|
|
|
115
121
|
energy_dict = {key: getattr(energy_module, attr) for key, attr in energy_fields}
|
|
116
122
|
return {"energy": energy_dict}
|
|
117
123
|
|
|
118
|
-
def custom_serializer(device: Device) ->
|
|
124
|
+
def custom_serializer(device: Device) -> dict[str, Any]:
|
|
119
125
|
log("Serializing device", host=device.host, alias=device.alias)
|
|
120
126
|
child_num = len(device.children) if device.children else 0
|
|
121
|
-
sys_info = {
|
|
127
|
+
sys_info: dict[str, Any] = {
|
|
122
128
|
"alias": device.alias or f'{device.device_type}_{device.host}',
|
|
123
129
|
"child_num": child_num,
|
|
124
130
|
"device_id": device.device_id if device.mac != device.device_id else device.sys_info.get("deviceId"),
|
|
@@ -140,7 +146,11 @@ def custom_serializer(device: Device) -> Dict[str, Any]:
|
|
|
140
146
|
if light_module:
|
|
141
147
|
sys_info.update(get_light_info(device))
|
|
142
148
|
if fan_module:
|
|
143
|
-
|
|
149
|
+
level = getattr(fan_module, "fan_speed_level")
|
|
150
|
+
percent = _level_to_percent(level)
|
|
151
|
+
sys_info.update({
|
|
152
|
+
"fan_speed_level": percent,
|
|
153
|
+
})
|
|
144
154
|
if energy_module:
|
|
145
155
|
sys_info.update(get_energy_info(device))
|
|
146
156
|
feature_info = {
|
|
@@ -165,10 +175,10 @@ def custom_serializer(device: Device) -> Dict[str, Any]:
|
|
|
165
175
|
async def discover_devices(
|
|
166
176
|
username: Optional[str] = None,
|
|
167
177
|
password: Optional[str] = None,
|
|
168
|
-
additional_broadcasts: Optional[
|
|
169
|
-
manual_devices: Optional[
|
|
170
|
-
exclude_mac_addresses: Optional[
|
|
171
|
-
include_mac_addresses: Optional[
|
|
178
|
+
additional_broadcasts: Optional[list[str]] = None,
|
|
179
|
+
manual_devices: Optional[list[str]] = None,
|
|
180
|
+
exclude_mac_addresses: Optional[list[str]] = None,
|
|
181
|
+
include_mac_addresses: Optional[list[str]] = None,
|
|
172
182
|
) -> None:
|
|
173
183
|
broadcasts = ["255.255.255.255"] + (additional_broadcasts or [])
|
|
174
184
|
credentials = Credentials(username, password) if username and password else None
|
|
@@ -192,7 +202,7 @@ async def discover_devices(
|
|
|
192
202
|
log(f"Device discovery: {e}", level="ERROR", host=device.host, alias=device.alias)
|
|
193
203
|
await safe_disconnect(device)
|
|
194
204
|
|
|
195
|
-
async def process_device(device: Device) -> Optional[
|
|
205
|
+
async def process_device(device: Device) -> Optional[dict[str, Any]]:
|
|
196
206
|
log("Processing device", host=device.host, alias=device.alias)
|
|
197
207
|
if include_mac_addresses and device.mac not in include_mac_addresses:
|
|
198
208
|
log("Excluding device due to MAC address inclusion", host=device.host, alias=device.alias)
|
|
@@ -267,7 +277,7 @@ async def close_all_connections():
|
|
|
267
277
|
await asyncio.gather(*disconnect_tasks, return_exceptions=True)
|
|
268
278
|
device_cache.clear()
|
|
269
279
|
|
|
270
|
-
async def create_device_info(device: Device) ->
|
|
280
|
+
async def create_device_info(device: Device) -> dict[str, Any]:
|
|
271
281
|
log("Creating device info", host=device.host, alias=device.alias)
|
|
272
282
|
try:
|
|
273
283
|
device_info = custom_serializer(device)
|
|
@@ -281,7 +291,7 @@ async def create_device_info(device: Device) -> Tuple[str, Dict[str, Any]]:
|
|
|
281
291
|
log(f"Creating device info: {e}", level="ERROR", host=device.host, alias=device.alias)
|
|
282
292
|
return {"error": str(e)}
|
|
283
293
|
|
|
284
|
-
async def get_sys_info(host: str) ->
|
|
294
|
+
async def get_sys_info(host: str) -> dict[str, Any]:
|
|
285
295
|
log("Getting sys_info", host=host)
|
|
286
296
|
try:
|
|
287
297
|
device_config_dict = device_config_cache.get(host)
|
|
@@ -317,7 +327,7 @@ async def control_device(
|
|
|
317
327
|
action: str,
|
|
318
328
|
value: Any,
|
|
319
329
|
child_num: Optional[int] = None,
|
|
320
|
-
) ->
|
|
330
|
+
) -> dict[str, Any]:
|
|
321
331
|
log("Controlling device", host=host)
|
|
322
332
|
try:
|
|
323
333
|
device_config_dict = device_config_cache.get(host)
|
|
@@ -335,7 +345,7 @@ async def perform_device_action(
|
|
|
335
345
|
action: str,
|
|
336
346
|
value: Any,
|
|
337
347
|
child_num: Optional[int] = None,
|
|
338
|
-
) ->
|
|
348
|
+
) -> dict[str, Any]:
|
|
339
349
|
try:
|
|
340
350
|
target = device.children[child_num] if child_num is not None else device
|
|
341
351
|
log(f"Performing action={action} on feature={feature}", alias=target.alias)
|
|
@@ -363,42 +373,42 @@ async def handle_brightness(target: Device, action: str, value: int):
|
|
|
363
373
|
light = target.modules.get(Module.Light)
|
|
364
374
|
if value == 0:
|
|
365
375
|
await target.turn_off()
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
376
|
+
return
|
|
377
|
+
value = max(1, min(value, 100))
|
|
378
|
+
await getattr(light, action)(value)
|
|
379
|
+
if target.is_off:
|
|
380
|
+
await target.turn_on()
|
|
371
381
|
|
|
372
382
|
async def handle_color_temp(target: Device, action: str, value: int):
|
|
373
383
|
log(f"Handling color temperature: action={action}, value={value}", alias=target.alias)
|
|
374
384
|
light = target.modules.get(Module.Light)
|
|
375
385
|
color_temp = target.modules.get(Module.ColorTemperature)
|
|
376
|
-
mired = max(
|
|
386
|
+
mired = max(140, min(value, 500))
|
|
377
387
|
kelvin = mired_to_kelvin(mired)
|
|
378
388
|
if color_temp and hasattr(color_temp, "valid_temperature_range"):
|
|
379
389
|
min_temp, max_temp = color_temp.valid_temperature_range
|
|
380
390
|
else:
|
|
381
|
-
min_temp, max_temp =
|
|
391
|
+
min_temp, max_temp = (2500, 6500)
|
|
382
392
|
kelvin = max(min_temp, min(kelvin, max_temp))
|
|
383
393
|
await getattr(light, action)(kelvin)
|
|
384
394
|
|
|
385
395
|
async def handle_fan_speed_level(target: Device, action: str, value: int):
|
|
386
396
|
log(f"Handling fan speed level: action={action}, value={value}", alias=target.alias)
|
|
387
397
|
fan = target.modules.get(Module.Fan)
|
|
388
|
-
|
|
398
|
+
level = _percent_to_level(value)
|
|
399
|
+
if level == 0:
|
|
389
400
|
await target.turn_off()
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
await target.turn_on()
|
|
401
|
+
return
|
|
402
|
+
await getattr(fan, action)(level)
|
|
403
|
+
if target.is_off:
|
|
404
|
+
await target.turn_on()
|
|
395
405
|
|
|
396
406
|
async def handle_hsv(target: Device, action: str, feature: str, value: dict):
|
|
397
407
|
log(f"Handling HSV: action={action}, feature={feature}, value={value}", alias=target.alias)
|
|
398
408
|
light = target.modules.get(Module.Light)
|
|
399
|
-
hsv =
|
|
400
|
-
h =
|
|
401
|
-
s =
|
|
409
|
+
hsv = light.hsv
|
|
410
|
+
h = value.get("hue", hsv[0])
|
|
411
|
+
s = value.get("saturation", hsv[1])
|
|
402
412
|
v = hsv[2]
|
|
403
413
|
hsv[0] = max(0, min(h, 360))
|
|
404
414
|
hsv[1] = max(0, min(s, 100))
|
|
@@ -408,10 +418,13 @@ async def handle_hsv(target: Device, action: str, feature: str, value: dict):
|
|
|
408
418
|
@app.route('/discover', methods=['POST'])
|
|
409
419
|
async def discover_route():
|
|
410
420
|
try:
|
|
421
|
+
username: str = None
|
|
422
|
+
password: str = None
|
|
411
423
|
auth = request.authorization
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
424
|
+
if auth:
|
|
425
|
+
username = getattr(auth, "username")
|
|
426
|
+
password = getattr(auth, "password")
|
|
427
|
+
data: dict[str, Any] = await request.get_json()
|
|
415
428
|
additional_broadcasts = data.get('additionalBroadcasts', [])
|
|
416
429
|
manual_devices = data.get('manualDevices', [])
|
|
417
430
|
exclude_mac_addresses = data.get('excludeMacAddresses', [])
|
|
@@ -450,7 +463,7 @@ async def get_sys_info_route():
|
|
|
450
463
|
@app.route('/controlDevice', methods=['POST'])
|
|
451
464
|
async def control_device_route():
|
|
452
465
|
try:
|
|
453
|
-
data:
|
|
466
|
+
data: dict[str, Any] = await request.get_json()
|
|
454
467
|
host = data['host']
|
|
455
468
|
feature = data['feature']
|
|
456
469
|
action = data['action']
|
|
@@ -473,7 +486,7 @@ async def safe_disconnect(device: Optional[Device]):
|
|
|
473
486
|
except Exception as e:
|
|
474
487
|
log(f"Disconnecting device: {e}", level="ERROR", host=device.host, alias=device.alias)
|
|
475
488
|
|
|
476
|
-
async def handle_device_error(host: str, error: Optional[Exception] = None) ->
|
|
489
|
+
async def handle_device_error(host: str, error: Optional[Exception] = None) -> dict[str, Any]:
|
|
477
490
|
log(f"Handling device: {error}", level="ERROR", host=host)
|
|
478
491
|
try:
|
|
479
492
|
device_config_dict = device_config_cache.get(host)
|
|
@@ -486,8 +499,8 @@ async def handle_device_error(host: str, error: Optional[Exception] = None) -> D
|
|
|
486
499
|
log(f"Error handling: {e}", level="ERROR", host=host)
|
|
487
500
|
return {"error": str(error)}
|
|
488
501
|
|
|
489
|
-
async def disconnect_all_devices(devices:
|
|
490
|
-
for
|
|
502
|
+
async def disconnect_all_devices(devices: dict[str, Device]):
|
|
503
|
+
for _, device in devices.items():
|
|
491
504
|
await safe_disconnect(device)
|
|
492
505
|
log("Disconnected device", host=device.host, alias=device.alias)
|
|
493
506
|
|
|
@@ -85,8 +85,8 @@ class PythonChecker {
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
this.log.error('No supported Python version found. Install Python 3.11
|
|
89
|
-
throw new Error('No supported Python version found. Install Python 3.11
|
|
88
|
+
this.log.error('No supported Python version found. Install Python 3.11, 3.12, or 3.13 and restart Homebridge.');
|
|
89
|
+
throw new Error('No supported Python version found. Install Python 3.11, 3.12, or 3.13 and restart Homebridge.');
|
|
90
90
|
}
|
|
91
91
|
async getPythonVersion(executablePath) {
|
|
92
92
|
try {
|