homebridge-kasa-python 2.3.0 → 2.4.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/config.schema.json +23 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/devices/deviceManager.d.ts +1 -0
- package/dist/devices/deviceManager.js +6 -8
- package/dist/devices/deviceManager.js.map +1 -1
- package/dist/python/kasaApi.py +24 -8
- package/package.json +1 -1
package/config.schema.json
CHANGED
|
@@ -51,6 +51,18 @@
|
|
|
51
51
|
"description": "How often to check device status in the background (seconds)",
|
|
52
52
|
"placeholder": "5"
|
|
53
53
|
},
|
|
54
|
+
"additionalNetworks": {
|
|
55
|
+
"title": "Additional Networks",
|
|
56
|
+
"type": "array",
|
|
57
|
+
"buttonText": "Add Network",
|
|
58
|
+
"items": {
|
|
59
|
+
"title": "Network",
|
|
60
|
+
"type": "string",
|
|
61
|
+
"required": true
|
|
62
|
+
},
|
|
63
|
+
"required": false,
|
|
64
|
+
"description": "List of additional networks to discover devices on. Format: 192.168.1.0"
|
|
65
|
+
},
|
|
54
66
|
"waitTimeUpdate": {
|
|
55
67
|
"title": "Wait Time Update (milliseconds)",
|
|
56
68
|
"type": "integer",
|
|
@@ -125,7 +137,17 @@
|
|
|
125
137
|
"description": "Customize device discovery",
|
|
126
138
|
"expandable": true,
|
|
127
139
|
"items": [
|
|
128
|
-
"pollingInterval"
|
|
140
|
+
"pollingInterval",
|
|
141
|
+
{
|
|
142
|
+
"key": "additionalNetworks",
|
|
143
|
+
"type": "array",
|
|
144
|
+
"buttonText": "Add Network",
|
|
145
|
+
"items": {
|
|
146
|
+
"title": "Network",
|
|
147
|
+
"type": "string",
|
|
148
|
+
"required": true
|
|
149
|
+
}
|
|
150
|
+
}
|
|
129
151
|
]
|
|
130
152
|
},
|
|
131
153
|
{
|
package/dist/config.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export interface KasaPythonConfigInput {
|
|
|
17
17
|
powerStrip?: boolean;
|
|
18
18
|
pollingInterval?: number;
|
|
19
19
|
waitTimeUpdate?: number;
|
|
20
|
+
additionalNetworks?: string[];
|
|
20
21
|
}
|
|
21
22
|
export type KasaPythonConfig = {
|
|
22
23
|
name: string;
|
|
@@ -26,6 +27,7 @@ export type KasaPythonConfig = {
|
|
|
26
27
|
powerStrip: boolean;
|
|
27
28
|
discoveryOptions: {
|
|
28
29
|
pollingInterval: number;
|
|
30
|
+
additionalNetworks: string[];
|
|
29
31
|
};
|
|
30
32
|
waitTimeUpdate: number;
|
|
31
33
|
};
|
package/dist/config.js
CHANGED
|
@@ -42,6 +42,7 @@ export const defaultConfig = {
|
|
|
42
42
|
powerStrip: false,
|
|
43
43
|
discoveryOptions: {
|
|
44
44
|
pollingInterval: 5,
|
|
45
|
+
additionalNetworks: [],
|
|
45
46
|
},
|
|
46
47
|
waitTimeUpdate: 100,
|
|
47
48
|
};
|
|
@@ -92,6 +93,7 @@ export function parseConfig(config) {
|
|
|
92
93
|
waitTimeUpdate: c.waitTimeUpdate ?? defaultConfig.waitTimeUpdate,
|
|
93
94
|
discoveryOptions: {
|
|
94
95
|
pollingInterval: (c.discoveryOptions.pollingInterval ?? defaultConfig.discoveryOptions.pollingInterval) * 1000,
|
|
96
|
+
additionalNetworks: c.discoveryOptions.additionalNetworks ?? defaultConfig.discoveryOptions.additionalNetworks,
|
|
95
97
|
},
|
|
96
98
|
};
|
|
97
99
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,GAAoB,MAAM,KAAK,CAAC;AACvC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,IAAI,WAA6B,CAAC;AAElC,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAGhC;IACA;IAHT,YACE,OAAe,EACR,MAAuE,EACvE,YAAsB;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,WAAM,GAAN,MAAM,CAAiE;QACvE,iBAAY,GAAZ,YAAY,CAAU;QAG7B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACjE,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAEO,aAAa,CACnB,OAAe,EACf,MAAuE,EACvE,YAAsB;QAEtB,IAAI,gBAAgB,GAAG,OAAO,CAAC;QAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,MAAM,aAAa,GAAG,eAAe,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvH,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;YACjF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,gBAAgB,IAAI,MAAM,cAAc,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,YAAY,YAAY,KAAK,EAAE,CAAC;YAClC,gBAAgB,IAAI,uBAAuB,YAAY,CAAC,OAAO,EAAE,CAAC;QACpE,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,gBAAgB,IAAI,qDAAqD,YAAY,GAAG,CAAC;QAC3F,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,14 @@ export default class DeviceManager {
|
|
|
5
5
|
apiUrl;
|
|
6
6
|
username;
|
|
7
7
|
password;
|
|
8
|
+
additionalNetworks;
|
|
8
9
|
constructor(platform) {
|
|
9
10
|
this.platform = platform;
|
|
10
11
|
this.log = platform.log;
|
|
11
12
|
this.username = platform.config.username;
|
|
12
13
|
this.password = platform.config.password;
|
|
13
14
|
this.apiUrl = `http://127.0.0.1:${platform.port}`;
|
|
15
|
+
this.additionalNetworks = platform.config.discoveryOptions.additionalNetworks;
|
|
14
16
|
}
|
|
15
17
|
async performDeviceAction(device, action, childNumber) {
|
|
16
18
|
const url = `${this.apiUrl}/controlDevice`;
|
|
@@ -19,15 +21,11 @@ export default class DeviceManager {
|
|
|
19
21
|
action,
|
|
20
22
|
...(childNumber !== undefined && { child_num: childNumber }),
|
|
21
23
|
};
|
|
22
|
-
this.log.info(`Performing action '${action}' on device: ${device.name}`);
|
|
23
24
|
try {
|
|
24
25
|
const response = await axios.post(url, data);
|
|
25
26
|
if (response.data.status !== 'success') {
|
|
26
27
|
this.log.error(`Error performing action: ${response.data.message}`);
|
|
27
28
|
}
|
|
28
|
-
else {
|
|
29
|
-
this.log.info(`Action '${action}' performed successfully on device: ${device.name}`);
|
|
30
|
-
}
|
|
31
29
|
}
|
|
32
30
|
catch (error) {
|
|
33
31
|
this.log.error(`Error performing action: ${axios.isAxiosError(error) ? error.message : 'An unknown error occurred'}`);
|
|
@@ -48,7 +46,9 @@ export default class DeviceManager {
|
|
|
48
46
|
},
|
|
49
47
|
}),
|
|
50
48
|
};
|
|
51
|
-
const response = await axios.
|
|
49
|
+
const response = await axios.post(`${this.apiUrl}/discover`, {
|
|
50
|
+
additionalNetworks: this.additionalNetworks,
|
|
51
|
+
}, config);
|
|
52
52
|
const devices = response.data;
|
|
53
53
|
this.log.info(`Devices discovered: ${Object.keys(devices).length}`);
|
|
54
54
|
Object.keys(devices).forEach(ip => {
|
|
@@ -69,7 +69,7 @@ export default class DeviceManager {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
async getSysInfo(device) {
|
|
72
|
-
this.log.
|
|
72
|
+
this.log.debug(`Getting system info for device: ${device.name}`);
|
|
73
73
|
try {
|
|
74
74
|
const response = await axios.post(`${this.apiUrl}/getSysInfo`, { device_config: device.deviceConfig });
|
|
75
75
|
const kasaDevice = response.data.device_info;
|
|
@@ -89,10 +89,8 @@ export default class DeviceManager {
|
|
|
89
89
|
async toggleDevice(device, state, child_num) {
|
|
90
90
|
const action = state ? 'turn_on' : 'turn_off';
|
|
91
91
|
const childText = child_num !== undefined ? ` child ${child_num}` : '';
|
|
92
|
-
this.log.info(`Toggling device: ${device.name}${childText} to state: ${state}`);
|
|
93
92
|
try {
|
|
94
93
|
await this.performDeviceAction(device, action, child_num);
|
|
95
|
-
this.log.info(`Turned ${state ? 'on' : 'off'} device: ${device.name}${childText}`);
|
|
96
94
|
}
|
|
97
95
|
catch (error) {
|
|
98
96
|
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;
|
|
1
|
+
{"version":3,"file":"deviceManager.js","sourceRoot":"","sources":["../../src/devices/deviceManager.ts"],"names":[],"mappings":"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"}
|
package/dist/python/kasaApi.py
CHANGED
|
@@ -8,6 +8,14 @@ socketio = SocketIO(app, cors_allowed_origins="*")
|
|
|
8
8
|
|
|
9
9
|
device_cache = {}
|
|
10
10
|
|
|
11
|
+
UNSUPPORTED_TYPES = {
|
|
12
|
+
'SMART.IPCAMERA',
|
|
13
|
+
'IOT.SMARTBULB',
|
|
14
|
+
'SMART.KASAHUB',
|
|
15
|
+
'SMART.TAPOBULB',
|
|
16
|
+
'SMART.TAPOHUB'
|
|
17
|
+
}
|
|
18
|
+
|
|
11
19
|
def custom_device_serializer(device):
|
|
12
20
|
def is_serializable(value):
|
|
13
21
|
try:
|
|
@@ -24,18 +32,25 @@ def custom_device_serializer(device):
|
|
|
24
32
|
serialized_data[attr] = value
|
|
25
33
|
return serialized_data
|
|
26
34
|
|
|
27
|
-
async def discover_devices(username=None, password=None):
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
async def discover_devices(username=None, password=None, additional_networks=None):
|
|
36
|
+
devices = {}
|
|
37
|
+
if additional_networks:
|
|
38
|
+
additional_networks = [f"{'.'.join(network.split('.')[:-1])}.255" for network in additional_networks]
|
|
39
|
+
networks = ["255.255.255.255"] + (additional_networks or [])
|
|
40
|
+
|
|
41
|
+
for network in networks:
|
|
42
|
+
try:
|
|
43
|
+
discovered_devices = await Discover.discover(target=network, username=username, password=password)
|
|
44
|
+
devices.update(discovered_devices)
|
|
45
|
+
except Exception as e:
|
|
46
|
+
app.logger.error(f"Error discovering devices on network {network}: {str(e)}")
|
|
32
47
|
|
|
33
48
|
all_device_info = {}
|
|
34
49
|
tasks = []
|
|
35
50
|
|
|
36
51
|
for ip, dev in devices.items():
|
|
37
52
|
try:
|
|
38
|
-
if hasattr(dev, 'device_type'):
|
|
53
|
+
if hasattr(dev, 'device_type') and dev.sys_info['mic_type'] not in UNSUPPORTED_TYPES:
|
|
39
54
|
tasks.append(update_device_info(ip, dev))
|
|
40
55
|
except KeyError:
|
|
41
56
|
continue
|
|
@@ -89,12 +104,13 @@ def run_async(func, *args):
|
|
|
89
104
|
loop = asyncio.get_event_loop()
|
|
90
105
|
return loop.run_until_complete(func(*args))
|
|
91
106
|
|
|
92
|
-
@app.route('/discover', methods=['
|
|
107
|
+
@app.route('/discover', methods=['POST'])
|
|
93
108
|
def discover():
|
|
94
109
|
auth = request.authorization
|
|
95
110
|
username = auth.username if auth else None
|
|
96
111
|
password = auth.password if auth else None
|
|
97
|
-
|
|
112
|
+
additional_networks = request.json.get('additionalNetworks', [])
|
|
113
|
+
devices_info = run_async(discover_devices, username, password, additional_networks)
|
|
98
114
|
return jsonify(devices_info)
|
|
99
115
|
|
|
100
116
|
@app.route('/getSysInfo', methods=['POST'])
|
package/package.json
CHANGED