homebridge-kasa-python 2.5.6 → 2.5.7
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 +22 -24
- package/dist/config.d.ts +3 -4
- package/dist/config.js +5 -3
- package/dist/config.js.map +1 -1
- package/dist/devices/deviceManager.d.ts +1 -1
- package/dist/devices/deviceManager.js +63 -22
- package/dist/devices/deviceManager.js.map +1 -1
- package/dist/devices/kasaDevices.d.ts +5 -0
- package/dist/devices/kasaDevices.js +1 -1
- package/dist/devices/kasaDevices.js.map +1 -1
- package/dist/python/kasaApi.py +20 -10
- package/package.json +1 -1
package/config.schema.json
CHANGED
|
@@ -37,13 +37,6 @@
|
|
|
37
37
|
"placeholder": "Password",
|
|
38
38
|
"minLength": 1
|
|
39
39
|
},
|
|
40
|
-
"powerStrip": {
|
|
41
|
-
"title": "Create Multi-Outlet Devices as a Power Strip",
|
|
42
|
-
"type": "boolean",
|
|
43
|
-
"required": false,
|
|
44
|
-
"description": "Enable to create a single power strip accessory with multiple outlets, used for models HS107, KP200, HS300, KP303, KP400, and EP40. Default: false",
|
|
45
|
-
"default": false
|
|
46
|
-
},
|
|
47
40
|
"pollingInterval": {
|
|
48
41
|
"title": "Polling Interval (seconds)",
|
|
49
42
|
"type": "integer",
|
|
@@ -66,13 +59,29 @@
|
|
|
66
59
|
"manualDevices": {
|
|
67
60
|
"title": "Manual List Of Devices",
|
|
68
61
|
"type": "array",
|
|
62
|
+
"buttonText": "Add Manual Device",
|
|
69
63
|
"items": {
|
|
70
64
|
"title": "Manual Device",
|
|
71
|
-
"type": "
|
|
72
|
-
"required":
|
|
65
|
+
"type": "object",
|
|
66
|
+
"required": ["host", "alias", "breakoutChildDevices"],
|
|
67
|
+
"properties": {
|
|
68
|
+
"host": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"title": "Host"
|
|
71
|
+
},
|
|
72
|
+
"alias": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"title": "Alias"
|
|
75
|
+
},
|
|
76
|
+
"breakoutChildDevices": {
|
|
77
|
+
"type": "boolean",
|
|
78
|
+
"title": "Breakout Child Devices",
|
|
79
|
+
"default": false
|
|
80
|
+
}
|
|
81
|
+
}
|
|
73
82
|
},
|
|
74
83
|
"required": false,
|
|
75
|
-
"description": "List of devices to manually add.
|
|
84
|
+
"description": "List of devices to manually add."
|
|
76
85
|
},
|
|
77
86
|
"waitTimeUpdate": {
|
|
78
87
|
"title": "Wait Time Update (milliseconds)",
|
|
@@ -133,15 +142,6 @@
|
|
|
133
142
|
"type": "help",
|
|
134
143
|
"helpvalue": "Username and Password will be required for specific devices only."
|
|
135
144
|
},
|
|
136
|
-
{
|
|
137
|
-
"type": "fieldset",
|
|
138
|
-
"title": "HomeKit (Optional)",
|
|
139
|
-
"description": "Customize how devices are exposed in HomeKit",
|
|
140
|
-
"expandable": true,
|
|
141
|
-
"items": [
|
|
142
|
-
"powerStrip"
|
|
143
|
-
]
|
|
144
|
-
},
|
|
145
145
|
{
|
|
146
146
|
"type": "fieldset",
|
|
147
147
|
"title": "Device Discovery (Optional)",
|
|
@@ -177,11 +177,9 @@
|
|
|
177
177
|
"key": "manualDevices",
|
|
178
178
|
"type": "array",
|
|
179
179
|
"buttonText": "Add Manual Device",
|
|
180
|
-
"items":
|
|
181
|
-
"
|
|
182
|
-
|
|
183
|
-
"required": true
|
|
184
|
-
}
|
|
180
|
+
"items": [
|
|
181
|
+
"manualDevices[].host", "manualDevices[].alias", "manualDevices[].breakoutChildDevices"
|
|
182
|
+
]
|
|
185
183
|
},
|
|
186
184
|
{
|
|
187
185
|
"type": "help",
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ErrorObject } from 'ajv';
|
|
2
|
+
import type { ConfigDevice } from './devices/kasaDevices.js';
|
|
2
3
|
export declare class ConfigParseError extends Error {
|
|
3
4
|
errors?: (ErrorObject<string, Record<string, unknown>, unknown>[] | null) | undefined;
|
|
4
5
|
unknownError?: unknown;
|
|
@@ -10,10 +11,9 @@ export interface KasaPythonConfigInput {
|
|
|
10
11
|
enableCredentials?: boolean;
|
|
11
12
|
username?: string;
|
|
12
13
|
password?: string;
|
|
13
|
-
powerStrip?: boolean;
|
|
14
14
|
pollingInterval?: number;
|
|
15
15
|
additionalBroadcasts?: string[];
|
|
16
|
-
manualDevices?:
|
|
16
|
+
manualDevices?: ConfigDevice[];
|
|
17
17
|
waitTimeUpdate?: number;
|
|
18
18
|
}
|
|
19
19
|
export type KasaPythonConfig = {
|
|
@@ -21,11 +21,10 @@ export type KasaPythonConfig = {
|
|
|
21
21
|
enableCredentials: boolean;
|
|
22
22
|
username: string;
|
|
23
23
|
password: string;
|
|
24
|
-
powerStrip: boolean;
|
|
25
24
|
discoveryOptions: {
|
|
26
25
|
pollingInterval: number;
|
|
27
26
|
additionalBroadcasts: string[];
|
|
28
|
-
manualDevices:
|
|
27
|
+
manualDevices: ConfigDevice[];
|
|
29
28
|
};
|
|
30
29
|
waitTimeUpdate: number;
|
|
31
30
|
};
|
package/dist/config.js
CHANGED
|
@@ -39,7 +39,6 @@ export const defaultConfig = {
|
|
|
39
39
|
enableCredentials: false,
|
|
40
40
|
username: '',
|
|
41
41
|
password: '',
|
|
42
|
-
powerStrip: false,
|
|
43
42
|
discoveryOptions: {
|
|
44
43
|
pollingInterval: 5,
|
|
45
44
|
additionalBroadcasts: [],
|
|
@@ -90,12 +89,15 @@ export function parseConfig(config) {
|
|
|
90
89
|
enableCredentials: c.enableCredentials ?? defaultConfig.enableCredentials,
|
|
91
90
|
username: c.username ?? defaultConfig.username,
|
|
92
91
|
password: c.password ?? defaultConfig.password,
|
|
93
|
-
powerStrip: c.powerStrip ?? defaultConfig.powerStrip,
|
|
94
92
|
waitTimeUpdate: c.waitTimeUpdate ?? defaultConfig.waitTimeUpdate,
|
|
95
93
|
discoveryOptions: {
|
|
96
94
|
pollingInterval: (c.pollingInterval ?? defaultConfig.discoveryOptions.pollingInterval) * 1000,
|
|
97
95
|
additionalBroadcasts: c.additionalBroadcasts ?? defaultConfig.discoveryOptions.additionalBroadcasts,
|
|
98
|
-
manualDevices: c.manualDevices
|
|
96
|
+
manualDevices: c.manualDevices?.map(device => ({
|
|
97
|
+
host: device.host,
|
|
98
|
+
alias: device.alias,
|
|
99
|
+
breakoutChildDevices: device.breakoutChildDevices ?? false,
|
|
100
|
+
})) ?? defaultConfig.discoveryOptions.manualDevices,
|
|
99
101
|
},
|
|
100
102
|
};
|
|
101
103
|
}
|
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;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@ export default class DeviceManager {
|
|
|
10
10
|
private additionalBroadcasts;
|
|
11
11
|
private manualDevices;
|
|
12
12
|
constructor(platform: KasaPythonPlatform);
|
|
13
|
-
private performDeviceAction;
|
|
14
13
|
discoverDevices(): Promise<void>;
|
|
15
14
|
getSysInfo(device: HomekitDevice): Promise<KasaDevice | undefined>;
|
|
16
15
|
toggleDevice(device: HomekitDevice, state: boolean, child_num?: number): Promise<void>;
|
|
16
|
+
private performDeviceAction;
|
|
17
17
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { promises as fs } from 'node:fs';
|
|
2
4
|
export default class DeviceManager {
|
|
3
5
|
platform;
|
|
4
6
|
log;
|
|
@@ -14,28 +16,7 @@ export default class DeviceManager {
|
|
|
14
16
|
this.password = platform.config.password;
|
|
15
17
|
this.apiUrl = `http://127.0.0.1:${platform.port}`;
|
|
16
18
|
this.additionalBroadcasts = platform.config.discoveryOptions.additionalBroadcasts;
|
|
17
|
-
this.manualDevices = platform.config.discoveryOptions.manualDevices;
|
|
18
|
-
}
|
|
19
|
-
async performDeviceAction(device, action, childNumber) {
|
|
20
|
-
const url = `${this.apiUrl}/controlDevice`;
|
|
21
|
-
const data = {
|
|
22
|
-
device_config: device.deviceConfig,
|
|
23
|
-
action,
|
|
24
|
-
...(childNumber !== undefined && { child_num: childNumber }),
|
|
25
|
-
};
|
|
26
|
-
try {
|
|
27
|
-
const response = await axios.post(url, data);
|
|
28
|
-
if (response.data.status !== 'success') {
|
|
29
|
-
this.log.error(`Error performing action: ${response.data.message}`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
this.log.error(`Error performing action: ${axios.isAxiosError(error) ? error.message : 'An unknown error occurred'}`);
|
|
34
|
-
if (axios.isAxiosError(error) && error.response) {
|
|
35
|
-
this.log.error(`Response status: ${error.response.status}`);
|
|
36
|
-
this.log.error(`Response data: ${JSON.stringify(error.response.data)}`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
19
|
+
this.manualDevices = platform.config.discoveryOptions.manualDevices.map((device) => device.host);
|
|
39
20
|
}
|
|
40
21
|
async discoverDevices() {
|
|
41
22
|
this.log.info('Discovering devices...');
|
|
@@ -56,6 +37,24 @@ export default class DeviceManager {
|
|
|
56
37
|
}, config);
|
|
57
38
|
const devices = response.data;
|
|
58
39
|
this.log.info(`Devices discovered: ${Object.keys(devices).length}`);
|
|
40
|
+
const configPath = path.join(this.platform.storagePath, 'config.json');
|
|
41
|
+
let fileConfig;
|
|
42
|
+
try {
|
|
43
|
+
const configData = await fs.readFile(configPath, 'utf8');
|
|
44
|
+
fileConfig = JSON.parse(configData);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
this.log.error('Error reading config file:', error);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const platformConfig = fileConfig.platforms.find((platformConfig) => platformConfig.platform === 'KasaPython');
|
|
51
|
+
if (!platformConfig) {
|
|
52
|
+
this.log.error('KasaPython configuration not found in config file.');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!platformConfig.manualDevices) {
|
|
56
|
+
platformConfig.manualDevices = [];
|
|
57
|
+
}
|
|
59
58
|
Object.keys(devices).forEach(ip => {
|
|
60
59
|
const device = devices[ip].device_info;
|
|
61
60
|
if (device.alias) {
|
|
@@ -72,8 +71,29 @@ export default class DeviceManager {
|
|
|
72
71
|
}
|
|
73
72
|
}
|
|
74
73
|
device.device_config = devices[ip].device_config;
|
|
74
|
+
if (device.sys_info.child_num !== undefined) {
|
|
75
|
+
const existingDevice = platformConfig.manualDevices.find((d) => d.host === device.host);
|
|
76
|
+
if (existingDevice) {
|
|
77
|
+
this.log.debug(`Device ${device.alias} already exists in config, skipping.`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
platformConfig.manualDevices.push({
|
|
81
|
+
host: device.host,
|
|
82
|
+
alias: device.alias,
|
|
83
|
+
breakoutChildDevices: false,
|
|
84
|
+
});
|
|
85
|
+
this.log.debug(`Device ${device.alias} added to config file.`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
75
88
|
this.platform.foundDevice(device);
|
|
76
89
|
});
|
|
90
|
+
try {
|
|
91
|
+
await fs.writeFile(configPath, JSON.stringify(fileConfig, null, 2), 'utf8');
|
|
92
|
+
this.log.debug('Config file updated with discovered devices.');
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
this.log.error('Error writing config file:', error);
|
|
96
|
+
}
|
|
77
97
|
}
|
|
78
98
|
catch (error) {
|
|
79
99
|
this.log.error(`An error occurred during device discovery: ${axios.isAxiosError(error) ? error.message : 'An unknown error occurred'}`);
|
|
@@ -124,5 +144,26 @@ export default class DeviceManager {
|
|
|
124
144
|
}
|
|
125
145
|
}
|
|
126
146
|
}
|
|
147
|
+
async performDeviceAction(device, action, childNumber) {
|
|
148
|
+
const url = `${this.apiUrl}/controlDevice`;
|
|
149
|
+
const data = {
|
|
150
|
+
device_config: device.deviceConfig,
|
|
151
|
+
action,
|
|
152
|
+
...(childNumber !== undefined && { child_num: childNumber }),
|
|
153
|
+
};
|
|
154
|
+
try {
|
|
155
|
+
const response = await axios.post(url, data);
|
|
156
|
+
if (response.data.status !== 'success') {
|
|
157
|
+
this.log.error(`Error performing action: ${response.data.message}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
this.log.error(`Error performing action: ${axios.isAxiosError(error) ? error.message : 'An unknown error occurred'}`);
|
|
162
|
+
if (axios.isAxiosError(error) && error.response) {
|
|
163
|
+
this.log.error(`Response status: ${error.response.status}`);
|
|
164
|
+
this.log.error(`Response data: ${JSON.stringify(error.response.data)}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
127
168
|
}
|
|
128
169
|
//# sourceMappingURL=deviceManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceManager.js","sourceRoot":"","sources":["../../src/devices/deviceManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"deviceManager.js","sourceRoot":"","sources":["../../src/devices/deviceManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,11 @@ export interface DeviceConfig {
|
|
|
34
34
|
};
|
|
35
35
|
uses_http: boolean;
|
|
36
36
|
}
|
|
37
|
+
export interface ConfigDevice {
|
|
38
|
+
host: string;
|
|
39
|
+
alias: string;
|
|
40
|
+
breakoutChildDevices: boolean;
|
|
41
|
+
}
|
|
37
42
|
export interface Plug extends DeviceCommonInfo {
|
|
38
43
|
children?: ChildPlug[];
|
|
39
44
|
device_config: DeviceConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kasaDevices.js","sourceRoot":"","sources":["../../src/devices/kasaDevices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kasaDevices.js","sourceRoot":"","sources":["../../src/devices/kasaDevices.ts"],"names":[],"mappings":"AA6DA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,YAAY;IACZ,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,aAAa;IACb,aAAa;IACb,WAAW;IACX,WAAW;IACX,aAAa;IACb,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,WAAW;IACX,WAAW;IACX,UAAU;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;CACX,CAAC"}
|
package/dist/python/kasaApi.py
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import asyncio, eventlet, eventlet.wsgi, json, os, requests, sys
|
|
2
2
|
from flask import Flask, request, jsonify
|
|
3
3
|
from flask_socketio import SocketIO
|
|
4
|
-
from kasa import Discover, Device
|
|
4
|
+
from kasa import Credentials, Discover, Device, UnsupportedDeviceException
|
|
5
5
|
from loguru import logger
|
|
6
6
|
|
|
7
7
|
app = Flask(__name__)
|
|
8
8
|
socketio = SocketIO(app, cors_allowed_origins="*")
|
|
9
9
|
|
|
10
|
-
# Configure loguru to send logs to the logging server
|
|
11
10
|
logging_server_url = os.getenv('LOGGING_SERVER_URL')
|
|
12
11
|
|
|
13
12
|
class RemoteLogger:
|
|
@@ -20,7 +19,6 @@ class RemoteLogger:
|
|
|
20
19
|
|
|
21
20
|
logger.add(RemoteLogger(logging_server_url), level="DEBUG")
|
|
22
21
|
|
|
23
|
-
# Replace app.logger with loguru logger
|
|
24
22
|
app.logger = logger
|
|
25
23
|
|
|
26
24
|
device_cache = {}
|
|
@@ -54,15 +52,19 @@ async def discover_devices(username=None, password=None, additional_broadcasts=N
|
|
|
54
52
|
app.logger.debug("Starting device discovery")
|
|
55
53
|
devices = {}
|
|
56
54
|
broadcasts = ["255.255.255.255"] + (additional_broadcasts or [])
|
|
55
|
+
creds = Credentials(username, password) if username and password else None
|
|
57
56
|
|
|
57
|
+
def on_unsupported(ip, dev):
|
|
58
|
+
app.logger.warning(f"Unsupported device found: {ip} - {dev}")
|
|
59
|
+
|
|
58
60
|
for broadcast in broadcasts:
|
|
59
61
|
try:
|
|
60
62
|
app.logger.debug(f"Discovering devices on broadcast: {broadcast}")
|
|
61
|
-
discovered_devices = await Discover.discover(target=broadcast,
|
|
63
|
+
discovered_devices = await Discover.discover(target=broadcast, credentials=creds, on_unsupported=on_unsupported)
|
|
62
64
|
for ip, dev in discovered_devices.items():
|
|
63
65
|
if hasattr(dev, 'device_type'):
|
|
64
66
|
devices[ip] = dev
|
|
65
|
-
app.logger.debug(f"Added device {ip} from broadcast {broadcast} to devices list")
|
|
67
|
+
app.logger.debug(f"Added device {ip} with device type {dev.device_type} from broadcast {broadcast} to devices list")
|
|
66
68
|
else:
|
|
67
69
|
app.logger.debug(f"Device {ip} from broadcast {broadcast} does not have a device_type and was not added")
|
|
68
70
|
app.logger.debug(f"Discovered {len(discovered_devices)} devices on broadcast {broadcast}")
|
|
@@ -71,9 +73,12 @@ async def discover_devices(username=None, password=None, additional_broadcasts=N
|
|
|
71
73
|
|
|
72
74
|
if manual_devices:
|
|
73
75
|
for host in manual_devices:
|
|
76
|
+
if host in devices:
|
|
77
|
+
app.logger.debug(f"Manual device {host} already exists in devices, skipping.")
|
|
78
|
+
continue
|
|
74
79
|
try:
|
|
75
80
|
app.logger.debug(f"Discovering manual device: {host}")
|
|
76
|
-
discovered_device = await Discover.discover_single(host=host,
|
|
81
|
+
discovered_device = await Discover.discover_single(host=host, credentials=creds)
|
|
77
82
|
if discovered_device:
|
|
78
83
|
if hasattr(discovered_device, 'device_type'):
|
|
79
84
|
devices[host] = discovered_device
|
|
@@ -82,6 +87,8 @@ async def discover_devices(username=None, password=None, additional_broadcasts=N
|
|
|
82
87
|
app.logger.warning(f"Manual device {host} is missing device_type and was not added")
|
|
83
88
|
else:
|
|
84
89
|
app.logger.warning(f"Manual device {host} not found and was not added")
|
|
90
|
+
except UnsupportedDeviceException as e:
|
|
91
|
+
app.logger.warning(f"Unsupported device found during manual discovery: {host} - {str(e)}")
|
|
85
92
|
except Exception as e:
|
|
86
93
|
app.logger.error(f"Error discovering manual device {host}: {str(e)}")
|
|
87
94
|
|
|
@@ -91,11 +98,14 @@ async def discover_devices(username=None, password=None, additional_broadcasts=N
|
|
|
91
98
|
for ip, dev in devices.items():
|
|
92
99
|
try:
|
|
93
100
|
dev_type = dev.sys_info.get("mic_type") or dev.sys_info.get("type")
|
|
94
|
-
if hasattr(dev, 'device_type')
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
if hasattr(dev, 'device_type'):
|
|
102
|
+
if dev_type and dev_type not in UNSUPPORTED_TYPES:
|
|
103
|
+
tasks.append(update_device_info(ip, dev))
|
|
104
|
+
app.logger.debug(f"Device {ip} with type {dev_type} added to update tasks")
|
|
105
|
+
else:
|
|
106
|
+
app.logger.debug(f"Device {ip} with type {dev_type} is unsupported and was not added to update tasks")
|
|
97
107
|
else:
|
|
98
|
-
app.logger.debug(f"Device {ip}
|
|
108
|
+
app.logger.debug(f"Device {ip} does not have a device_type and was not added to update tasks")
|
|
99
109
|
except KeyError:
|
|
100
110
|
app.logger.debug(f"Device {ip} has missing keys in sys_info and was not added to update tasks")
|
|
101
111
|
continue
|
package/package.json
CHANGED