homebridge-kasa-python 2.4.0 → 2.4.2
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 +56 -13
- package/dist/config.d.ts +4 -3
- package/dist/config.js +4 -2
- package/dist/config.js.map +1 -1
- package/dist/devices/deviceManager.d.ts +2 -1
- package/dist/devices/deviceManager.js +18 -5
- package/dist/devices/deviceManager.js.map +1 -1
- package/dist/python/kasaApi.py +23 -9
- package/package.json +1 -1
package/config.schema.json
CHANGED
|
@@ -51,17 +51,34 @@
|
|
|
51
51
|
"description": "How often to check device status in the background (seconds)",
|
|
52
52
|
"placeholder": "5"
|
|
53
53
|
},
|
|
54
|
-
"
|
|
55
|
-
"title": "Additional
|
|
54
|
+
"additionalBroadcasts": {
|
|
55
|
+
"title": "Additional Broadcast Addresses",
|
|
56
56
|
"type": "array",
|
|
57
|
-
"buttonText": "Add
|
|
57
|
+
"buttonText": "Add Broadcast Address",
|
|
58
58
|
"items": {
|
|
59
|
-
"title": "
|
|
59
|
+
"title": "Broadcast Address",
|
|
60
60
|
"type": "string",
|
|
61
61
|
"required": true
|
|
62
62
|
},
|
|
63
63
|
"required": false,
|
|
64
|
-
"description": "List of additional
|
|
64
|
+
"description": "List of additional broadcast addresses to discover devices on. Format: 192.168.1.255"
|
|
65
|
+
},
|
|
66
|
+
"manualDevices": {
|
|
67
|
+
"title": "Manual List Of Devices",
|
|
68
|
+
"type": "array",
|
|
69
|
+
"items": {
|
|
70
|
+
"title": "Device",
|
|
71
|
+
"type": "object",
|
|
72
|
+
"required": ["host"],
|
|
73
|
+
"properties": {
|
|
74
|
+
"host": {
|
|
75
|
+
"title": "Host",
|
|
76
|
+
"type": "string"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"required": false,
|
|
81
|
+
"description": "List of devices to manually add. Format: 192.168.1.100"
|
|
65
82
|
},
|
|
66
83
|
"waitTimeUpdate": {
|
|
67
84
|
"title": "Wait Time Update (milliseconds)",
|
|
@@ -139,14 +156,40 @@
|
|
|
139
156
|
"items": [
|
|
140
157
|
"pollingInterval",
|
|
141
158
|
{
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
"
|
|
145
|
-
"
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
159
|
+
"type": "fieldset",
|
|
160
|
+
"title": "Additional Broadcasts",
|
|
161
|
+
"description": "Specify additional broadcast addresses for device discovery.",
|
|
162
|
+
"expandable": true,
|
|
163
|
+
"items": [
|
|
164
|
+
{
|
|
165
|
+
"key": "additionalBroadcasts",
|
|
166
|
+
"type": "array",
|
|
167
|
+
"buttonText": "Add Broadcast Address",
|
|
168
|
+
"items": {
|
|
169
|
+
"title": "Broadcast Address",
|
|
170
|
+
"type": "string",
|
|
171
|
+
"required": true
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"type": "fieldset",
|
|
178
|
+
"title": "Manual Devices",
|
|
179
|
+
"description": "If automatic discovery is not working, try this.",
|
|
180
|
+
"expandable": true,
|
|
181
|
+
"items": [
|
|
182
|
+
{
|
|
183
|
+
"key": "manualDevices",
|
|
184
|
+
"type": "array",
|
|
185
|
+
"buttonText": "Add Device",
|
|
186
|
+
"items": ["manualDevices[].host"]
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"type": "help",
|
|
190
|
+
"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."
|
|
191
|
+
}
|
|
192
|
+
]
|
|
150
193
|
}
|
|
151
194
|
]
|
|
152
195
|
},
|
package/dist/config.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ export declare class ConfigParseError extends Error {
|
|
|
7
7
|
}
|
|
8
8
|
export interface DeviceConfigInput {
|
|
9
9
|
host: string;
|
|
10
|
-
port?: number;
|
|
11
10
|
}
|
|
12
11
|
export interface KasaPythonConfigInput {
|
|
13
12
|
name?: string;
|
|
@@ -16,8 +15,9 @@ export interface KasaPythonConfigInput {
|
|
|
16
15
|
password?: string;
|
|
17
16
|
powerStrip?: boolean;
|
|
18
17
|
pollingInterval?: number;
|
|
18
|
+
additionalBroadcasts?: string[];
|
|
19
|
+
manualDevices?: DeviceConfigInput[];
|
|
19
20
|
waitTimeUpdate?: number;
|
|
20
|
-
additionalNetworks?: string[];
|
|
21
21
|
}
|
|
22
22
|
export type KasaPythonConfig = {
|
|
23
23
|
name: string;
|
|
@@ -27,7 +27,8 @@ export type KasaPythonConfig = {
|
|
|
27
27
|
powerStrip: boolean;
|
|
28
28
|
discoveryOptions: {
|
|
29
29
|
pollingInterval: number;
|
|
30
|
-
|
|
30
|
+
additionalBroadcasts: string[];
|
|
31
|
+
manualDevices: DeviceConfigInput[];
|
|
31
32
|
};
|
|
32
33
|
waitTimeUpdate: number;
|
|
33
34
|
};
|
package/dist/config.js
CHANGED
|
@@ -42,7 +42,8 @@ export const defaultConfig = {
|
|
|
42
42
|
powerStrip: false,
|
|
43
43
|
discoveryOptions: {
|
|
44
44
|
pollingInterval: 5,
|
|
45
|
-
|
|
45
|
+
additionalBroadcasts: [],
|
|
46
|
+
manualDevices: [],
|
|
46
47
|
},
|
|
47
48
|
waitTimeUpdate: 100,
|
|
48
49
|
};
|
|
@@ -93,7 +94,8 @@ export function parseConfig(config) {
|
|
|
93
94
|
waitTimeUpdate: c.waitTimeUpdate ?? defaultConfig.waitTimeUpdate,
|
|
94
95
|
discoveryOptions: {
|
|
95
96
|
pollingInterval: (c.discoveryOptions.pollingInterval ?? defaultConfig.discoveryOptions.pollingInterval) * 1000,
|
|
96
|
-
|
|
97
|
+
additionalBroadcasts: c.discoveryOptions.additionalBroadcasts ?? defaultConfig.discoveryOptions.additionalBroadcasts,
|
|
98
|
+
manualDevices: c.discoveryOptions.manualDevices ?? defaultConfig.discoveryOptions.manualDevices,
|
|
97
99
|
},
|
|
98
100
|
};
|
|
99
101
|
}
|
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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"}
|
|
@@ -7,7 +7,8 @@ export default class DeviceManager {
|
|
|
7
7
|
private apiUrl;
|
|
8
8
|
private username;
|
|
9
9
|
private password;
|
|
10
|
-
private
|
|
10
|
+
private additionalBroadcasts;
|
|
11
|
+
private manualDevices;
|
|
11
12
|
constructor(platform: KasaPythonPlatform);
|
|
12
13
|
private performDeviceAction;
|
|
13
14
|
discoverDevices(): Promise<void>;
|
|
@@ -5,14 +5,16 @@ export default class DeviceManager {
|
|
|
5
5
|
apiUrl;
|
|
6
6
|
username;
|
|
7
7
|
password;
|
|
8
|
-
|
|
8
|
+
additionalBroadcasts;
|
|
9
|
+
manualDevices;
|
|
9
10
|
constructor(platform) {
|
|
10
11
|
this.platform = platform;
|
|
11
12
|
this.log = platform.log;
|
|
12
13
|
this.username = platform.config.username;
|
|
13
14
|
this.password = platform.config.password;
|
|
14
15
|
this.apiUrl = `http://127.0.0.1:${platform.port}`;
|
|
15
|
-
this.
|
|
16
|
+
this.additionalBroadcasts = platform.config.discoveryOptions.additionalBroadcasts;
|
|
17
|
+
this.manualDevices = platform.config.discoveryOptions.manualDevices;
|
|
16
18
|
}
|
|
17
19
|
async performDeviceAction(device, action, childNumber) {
|
|
18
20
|
const url = `${this.apiUrl}/controlDevice`;
|
|
@@ -47,7 +49,8 @@ export default class DeviceManager {
|
|
|
47
49
|
}),
|
|
48
50
|
};
|
|
49
51
|
const response = await axios.post(`${this.apiUrl}/discover`, {
|
|
50
|
-
|
|
52
|
+
additionalBroadcasts: this.additionalBroadcasts,
|
|
53
|
+
manualDevices: this.manualDevices,
|
|
51
54
|
}, config);
|
|
52
55
|
const devices = response.data;
|
|
53
56
|
this.log.info(`Devices discovered: ${Object.keys(devices).length}`);
|
|
@@ -73,8 +76,18 @@ export default class DeviceManager {
|
|
|
73
76
|
try {
|
|
74
77
|
const response = await axios.post(`${this.apiUrl}/getSysInfo`, { device_config: device.deviceConfig });
|
|
75
78
|
const kasaDevice = response.data.device_info;
|
|
76
|
-
if (kasaDevice.alias
|
|
77
|
-
|
|
79
|
+
if (kasaDevice.alias) {
|
|
80
|
+
const aliasMappings = {
|
|
81
|
+
'TP-LINK_Power Strip_': 'Power Strip',
|
|
82
|
+
'TP-LINK_Smart Plug_': 'Smart Plug',
|
|
83
|
+
'TP-LINK_Smart Bulb_': 'Smart Bulb',
|
|
84
|
+
};
|
|
85
|
+
for (const [pattern, replacement] of Object.entries(aliasMappings)) {
|
|
86
|
+
if (kasaDevice.alias.includes(pattern)) {
|
|
87
|
+
kasaDevice.alias = `${replacement} ${kasaDevice.alias.slice(-4)}`;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
78
91
|
}
|
|
79
92
|
return kasaDevice;
|
|
80
93
|
}
|
|
@@ -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
|
@@ -32,18 +32,25 @@ def custom_device_serializer(device):
|
|
|
32
32
|
serialized_data[attr] = value
|
|
33
33
|
return serialized_data
|
|
34
34
|
|
|
35
|
-
async def discover_devices(username=None, password=None,
|
|
35
|
+
async def discover_devices(username=None, password=None, additional_broadcasts=None, manual_devices=None):
|
|
36
36
|
devices = {}
|
|
37
|
-
|
|
38
|
-
additional_networks = [f"{'.'.join(network.split('.')[:-1])}.255" for network in additional_networks]
|
|
39
|
-
networks = ["255.255.255.255"] + (additional_networks or [])
|
|
37
|
+
broadcasts = ["255.255.255.255"] + (additional_broadcasts or [])
|
|
40
38
|
|
|
41
|
-
for
|
|
39
|
+
for broadcast in broadcasts:
|
|
42
40
|
try:
|
|
43
|
-
discovered_devices = await Discover.discover(target=
|
|
41
|
+
discovered_devices = await Discover.discover(target=broadcast, username=username, password=password)
|
|
44
42
|
devices.update(discovered_devices)
|
|
45
43
|
except Exception as e:
|
|
46
|
-
app.logger.error(f"Error discovering devices on
|
|
44
|
+
app.logger.error(f"Error discovering devices on broadcast {broadcast}: {str(e)}")
|
|
45
|
+
|
|
46
|
+
if manual_devices:
|
|
47
|
+
for device in manual_devices:
|
|
48
|
+
try:
|
|
49
|
+
discovered_device = await Discover.discover_single(host=device['host'], username=username, password=password)
|
|
50
|
+
if discovered_device:
|
|
51
|
+
devices[device['host']] = discovered_device
|
|
52
|
+
except Exception as e:
|
|
53
|
+
app.logger.error(f"Error discovering manual device {device['host']}: {str(e)}")
|
|
47
54
|
|
|
48
55
|
all_device_info = {}
|
|
49
56
|
tasks = []
|
|
@@ -81,6 +88,12 @@ async def update_device_info(ip, dev: Device):
|
|
|
81
88
|
async def get_device_info(device_config):
|
|
82
89
|
dev = await Device.connect(config=Device.Config.from_dict(device_config))
|
|
83
90
|
try:
|
|
91
|
+
await dev.update()
|
|
92
|
+
if not dev.alias:
|
|
93
|
+
app.logger.warning(f"Alias not found for device {dev.host}. Reconnecting and updating...")
|
|
94
|
+
await dev.disconnect()
|
|
95
|
+
dev = await Device.connect(config=Device.Config.from_dict(device_config))
|
|
96
|
+
await dev.update()
|
|
84
97
|
device_info = custom_device_serializer(dev)
|
|
85
98
|
return {"device_info": device_info}
|
|
86
99
|
finally:
|
|
@@ -109,8 +122,9 @@ def discover():
|
|
|
109
122
|
auth = request.authorization
|
|
110
123
|
username = auth.username if auth else None
|
|
111
124
|
password = auth.password if auth else None
|
|
112
|
-
|
|
113
|
-
|
|
125
|
+
additional_broadcasts = request.json.get('additionalBroadcasts', [])
|
|
126
|
+
manual_devices = request.json.get('manualDevices', [])
|
|
127
|
+
devices_info = run_async(discover_devices, username, password, additional_broadcasts, manual_devices)
|
|
114
128
|
return jsonify(devices_info)
|
|
115
129
|
|
|
116
130
|
@app.route('/getSysInfo', methods=['POST'])
|
package/package.json
CHANGED