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
|
@@ -1,321 +1,37 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { deferAndCombine } from '../utils.js';
|
|
1
|
+
import HomeKitDevice from './baseDevice.js';
|
|
2
|
+
import { buildOnDescriptor, buildBrightnessDescriptor, } from './descriptorHelpers.js';
|
|
4
3
|
export default class HomeKitDeviceSwitch extends HomeKitDevice {
|
|
5
4
|
kasaDevice;
|
|
6
|
-
isUpdating = false;
|
|
7
|
-
previousKasaDevice;
|
|
8
|
-
getSysInfo;
|
|
9
5
|
hasBrightness;
|
|
10
|
-
pollingInterval;
|
|
11
|
-
updateEmitter = new EventEmitter();
|
|
12
|
-
static locks = new Map();
|
|
13
6
|
constructor(platform, kasaDevice) {
|
|
14
7
|
super(platform, kasaDevice, 8 /* Categories.SWITCH */, 'SWITCH');
|
|
15
8
|
this.kasaDevice = kasaDevice;
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
this.checkService();
|
|
19
|
-
this.getSysInfo = deferAndCombine(async () => {
|
|
20
|
-
if (!this.deviceManager) {
|
|
21
|
-
this.log.warn('Device manager is not available');
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
const host = this.kasaDevice.sys_info?.host;
|
|
25
|
-
if (!host) {
|
|
26
|
-
this.log.warn('No host found in sys_info for device');
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
try {
|
|
30
|
-
this.previousKasaDevice = { ...this.kasaDevice };
|
|
31
|
-
const updatedSysInfo = await this.deviceManager.getSysInfo(host);
|
|
32
|
-
if (!updatedSysInfo) {
|
|
33
|
-
this.log.warn('getSysInfo returned undefined');
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
this.kasaDevice.sys_info = updatedSysInfo;
|
|
37
|
-
this.log.debug(`Updated sys_info for device: ${updatedSysInfo.alias ?? host}`);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
const errorMsg = 'Error updating sys_info:';
|
|
41
|
-
if (err instanceof Error) {
|
|
42
|
-
this.log.error(`${errorMsg} ${err.message}`);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.log.error(`${errorMsg} ${String(err)}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}, platform.config.advancedOptions.waitTimeUpdate);
|
|
49
|
-
platform.periodicDeviceDiscoveryEmitter.on('periodicDeviceDiscoveryComplete', () => {
|
|
50
|
-
this.updateEmitter.emit('periodicDeviceDiscoveryComplete');
|
|
51
|
-
});
|
|
9
|
+
this.hasBrightness = !!kasaDevice.feature_info.brightness;
|
|
10
|
+
this.setupPrimaryService();
|
|
52
11
|
}
|
|
53
12
|
async initialize() {
|
|
54
|
-
this.log.debug(`Initializing polling for device: ${this.kasaDevice.sys_info.alias}`);
|
|
55
13
|
await this.startPolling();
|
|
56
14
|
}
|
|
57
|
-
|
|
58
|
-
let lock = HomeKitDeviceSwitch.locks.get(key);
|
|
59
|
-
if (!lock) {
|
|
60
|
-
lock = Promise.resolve();
|
|
61
|
-
}
|
|
62
|
-
const currentLock = lock.then(async () => {
|
|
63
|
-
try {
|
|
64
|
-
return await action();
|
|
65
|
-
}
|
|
66
|
-
finally {
|
|
67
|
-
if (HomeKitDeviceSwitch.locks.get(key) === currentLock) {
|
|
68
|
-
HomeKitDeviceSwitch.locks.delete(key);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
HomeKitDeviceSwitch.locks.set(key, currentLock.then(() => { }));
|
|
73
|
-
return currentLock;
|
|
74
|
-
}
|
|
75
|
-
checkService() {
|
|
76
|
-
const serviceType = this.getServiceType();
|
|
77
|
-
const service = this.homebridgeAccessory.getService(serviceType) ?? this.addService(serviceType, this.name);
|
|
78
|
-
this.checkCharacteristics(service);
|
|
79
|
-
}
|
|
80
|
-
getServiceType() {
|
|
15
|
+
getPrimaryServiceType() {
|
|
81
16
|
const { Switch, Lightbulb } = this.platform.Service;
|
|
82
17
|
return this.hasBrightness ? Lightbulb : Switch;
|
|
83
18
|
}
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const characteristics = [];
|
|
92
|
-
characteristics.push({
|
|
93
|
-
type: this.platform.Characteristic.On,
|
|
94
|
-
name: this.platform.getCharacteristicName(this.platform.Characteristic.On),
|
|
95
|
-
});
|
|
19
|
+
buildPrimaryDescriptors() {
|
|
20
|
+
const C = this.platform.Characteristic;
|
|
21
|
+
const list = [
|
|
22
|
+
buildOnDescriptor(C, async (value, context) => {
|
|
23
|
+
await this.deviceManager.controlDevice(context.device.host, 'state', value);
|
|
24
|
+
}),
|
|
25
|
+
];
|
|
96
26
|
if (this.hasBrightness) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
return characteristics;
|
|
103
|
-
}
|
|
104
|
-
getOrAddCharacteristic(service, characteristicType, characteristicName) {
|
|
105
|
-
const characteristic = service.getCharacteristic(characteristicType) ??
|
|
106
|
-
service.addCharacteristic(characteristicType);
|
|
107
|
-
characteristic.onGet(this.handleOnGet.bind(this, service, characteristicType, characteristicName));
|
|
108
|
-
characteristic.onSet(this.handleOnSet.bind(this, service, characteristicType, characteristicName));
|
|
109
|
-
}
|
|
110
|
-
async handleOnGet(service, characteristicType, characteristicName) {
|
|
111
|
-
if (this.kasaDevice.offline || this.platform.isShuttingDown) {
|
|
112
|
-
this.log.warn(`Device is offline or platform is shutting down, cannot get value for characteristic ${characteristicName}`);
|
|
113
|
-
return this.getDefaultValue(characteristicType);
|
|
114
|
-
}
|
|
115
|
-
try {
|
|
116
|
-
let characteristicValue = service.getCharacteristic(characteristicType).value;
|
|
117
|
-
if (!characteristicValue) {
|
|
118
|
-
characteristicValue = this.getInitialValue(characteristicType);
|
|
119
|
-
service.getCharacteristic(characteristicType).updateValue(characteristicValue);
|
|
120
|
-
}
|
|
121
|
-
this.log.debug(`Got value for characteristic ${characteristicName}: ${characteristicValue}`);
|
|
122
|
-
return characteristicValue ?? this.getDefaultValue(characteristicType);
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
this.log.error(`Error getting current value for characteristic ${characteristicName} for device: ${this.name}:`, error);
|
|
126
|
-
this.kasaDevice.offline = true;
|
|
127
|
-
await this.stopPolling();
|
|
128
|
-
return this.getDefaultValue(characteristicType);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
getDefaultValue(characteristicType) {
|
|
132
|
-
if (characteristicType === this.platform.Characteristic.Brightness) {
|
|
133
|
-
return 0;
|
|
134
|
-
}
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
getInitialValue(characteristicType) {
|
|
138
|
-
if (characteristicType === this.platform.Characteristic.On) {
|
|
139
|
-
return this.kasaDevice.sys_info.state ?? false;
|
|
140
|
-
}
|
|
141
|
-
else if (characteristicType === this.platform.Characteristic.Brightness) {
|
|
142
|
-
return this.kasaDevice.sys_info.brightness ?? 0;
|
|
143
|
-
}
|
|
144
|
-
return this.getDefaultValue(characteristicType);
|
|
145
|
-
}
|
|
146
|
-
async handleOnSet(service, characteristicType, characteristicName, value) {
|
|
147
|
-
const lockKey = `${this.kasaDevice.sys_info.device_id}`;
|
|
148
|
-
await this.withLock(lockKey, async () => {
|
|
149
|
-
if (this.kasaDevice.offline || this.platform.isShuttingDown) {
|
|
150
|
-
this.log.warn(`Device is offline or platform is shutting down, cannot set value for characteristic ${characteristicName}`);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
const task = async () => {
|
|
154
|
-
if (this.deviceManager) {
|
|
155
|
-
try {
|
|
156
|
-
this.isUpdating = true;
|
|
157
|
-
this.log.debug(`Setting value for characteristic ${characteristicName} to ${value}`);
|
|
158
|
-
const characteristicKey = this.getCharacteristicKey(characteristicName);
|
|
159
|
-
if (!characteristicKey) {
|
|
160
|
-
throw new Error(`Characteristic key not found for ${characteristicName}`);
|
|
161
|
-
}
|
|
162
|
-
await this.deviceManager.controlDevice(this.kasaDevice.sys_info.host, characteristicKey, value);
|
|
163
|
-
this.kasaDevice.sys_info[characteristicKey] = value;
|
|
164
|
-
this.updateValue(service, service.getCharacteristic(characteristicType), this.name, value);
|
|
165
|
-
this.previousKasaDevice = JSON.parse(JSON.stringify(this.kasaDevice));
|
|
166
|
-
this.log.debug(`Set value for characteristic ${characteristicName} to ${value} successfully`);
|
|
167
|
-
}
|
|
168
|
-
catch (error) {
|
|
169
|
-
this.log.error(`Error setting current value for characteristic ${characteristicName} for device: ${this.name}:`, error);
|
|
170
|
-
this.kasaDevice.offline = true;
|
|
171
|
-
await this.stopPolling();
|
|
172
|
-
}
|
|
173
|
-
finally {
|
|
174
|
-
this.isUpdating = false;
|
|
175
|
-
this.updateEmitter.emit('updateComplete');
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
throw new Error('Device manager is undefined.');
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
await task();
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
getCharacteristicKey(characteristicName) {
|
|
186
|
-
const characteristicMap = {
|
|
187
|
-
On: 'state',
|
|
188
|
-
Brightness: 'brightness',
|
|
189
|
-
};
|
|
190
|
-
return characteristicMap[characteristicName ?? ''];
|
|
191
|
-
}
|
|
192
|
-
async updateState() {
|
|
193
|
-
const lockKey = `${this.kasaDevice.sys_info.device_id}`;
|
|
194
|
-
await this.withLock(lockKey, async () => {
|
|
195
|
-
if (this.kasaDevice.offline || this.platform.isShuttingDown) {
|
|
196
|
-
await this.stopPolling();
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
if (this.isUpdating || this.platform.periodicDeviceDiscovering) {
|
|
200
|
-
let periodicDiscoveryComplete = false;
|
|
201
|
-
await Promise.race([
|
|
202
|
-
new Promise((resolve) => this.updateEmitter.once('updateComplete', resolve)),
|
|
203
|
-
new Promise((resolve) => {
|
|
204
|
-
this.updateEmitter.once('periodicDeviceDiscoveryComplete', () => {
|
|
205
|
-
periodicDiscoveryComplete = true;
|
|
206
|
-
resolve();
|
|
207
|
-
});
|
|
208
|
-
}),
|
|
209
|
-
]);
|
|
210
|
-
if (periodicDiscoveryComplete) {
|
|
211
|
-
if (this.pollingInterval) {
|
|
212
|
-
await new Promise((resolve) => setTimeout(resolve, this.platform.config.discoveryOptions.pollingInterval));
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
this.isUpdating = true;
|
|
220
|
-
const task = async () => {
|
|
221
|
-
try {
|
|
222
|
-
await this.getSysInfo();
|
|
223
|
-
const service = this.getService();
|
|
224
|
-
if (service && this.previousKasaDevice) {
|
|
225
|
-
this.updateDeviceState(service);
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
this.log.warn(`Service not found for device: ${this.name} or previous Kasa device is undefined`);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
this.log.error('Error updating device state:', error);
|
|
233
|
-
this.kasaDevice.offline = true;
|
|
234
|
-
await this.stopPolling();
|
|
235
|
-
}
|
|
236
|
-
finally {
|
|
237
|
-
this.isUpdating = false;
|
|
238
|
-
this.updateEmitter.emit('updateComplete');
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
await task();
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
getService() {
|
|
245
|
-
return this.homebridgeAccessory.getService(this.platform.Service.Switch) ??
|
|
246
|
-
this.homebridgeAccessory.getService(this.platform.Service.Lightbulb);
|
|
247
|
-
}
|
|
248
|
-
updateDeviceState(service) {
|
|
249
|
-
const { state, brightness } = this.kasaDevice.sys_info;
|
|
250
|
-
const prevState = this.previousKasaDevice.sys_info;
|
|
251
|
-
if (prevState.state !== state) {
|
|
252
|
-
this.updateValue(service, service.getCharacteristic(this.platform.Characteristic.On), this.name, state ?? false);
|
|
253
|
-
this.log.debug(`Updated state for device: ${this.name} to state: ${state}`);
|
|
254
|
-
}
|
|
255
|
-
if (this.hasBrightness && prevState.brightness !== brightness) {
|
|
256
|
-
this.updateValue(service, service.getCharacteristic(this.platform.Characteristic.Brightness), this.name, brightness ?? 0);
|
|
257
|
-
this.log.debug(`Updated brightness for device: ${this.name} to brightness: ${brightness}`);
|
|
27
|
+
list.push(buildBrightnessDescriptor(C, async (value, context) => {
|
|
28
|
+
await this.deviceManager.controlDevice(context.device.host, 'brightness', value);
|
|
29
|
+
}));
|
|
258
30
|
}
|
|
31
|
+
return list;
|
|
259
32
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
const service = this.homebridgeAccessory.getService(serviceType);
|
|
263
|
-
if (service) {
|
|
264
|
-
this.updateCharacteristics(service);
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
this.log.debug(`Service not found for device: ${this.name}`);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
updateCharacteristics(service) {
|
|
271
|
-
const characteristics = this.getCharacteristics();
|
|
272
|
-
characteristics.forEach(({ type, name }) => {
|
|
273
|
-
const characteristic = service.getCharacteristic(type);
|
|
274
|
-
if (characteristic) {
|
|
275
|
-
const characteristicKey = this.getCharacteristicKey(name);
|
|
276
|
-
if (this.kasaDevice.sys_info[characteristicKey] !== undefined) {
|
|
277
|
-
const value = this.kasaDevice.sys_info[characteristicKey];
|
|
278
|
-
this.log.debug(`Setting value for characteristic ${name} to ${value}`);
|
|
279
|
-
this.updateValue(service, characteristic, this.name, value);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
async startPolling() {
|
|
285
|
-
if (this.kasaDevice.offline || this.platform.isShuttingDown) {
|
|
286
|
-
await this.stopPolling();
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
if (this.pollingInterval) {
|
|
290
|
-
clearInterval(this.pollingInterval);
|
|
291
|
-
}
|
|
292
|
-
this.log.debug('Starting polling for device:', this.name);
|
|
293
|
-
this.pollingInterval = setInterval(async () => {
|
|
294
|
-
if (this.kasaDevice.offline || this.platform.isShuttingDown) {
|
|
295
|
-
if (this.isUpdating) {
|
|
296
|
-
this.isUpdating = false;
|
|
297
|
-
this.updateEmitter.emit('updateComplete');
|
|
298
|
-
}
|
|
299
|
-
await this.stopPolling();
|
|
300
|
-
}
|
|
301
|
-
else {
|
|
302
|
-
await this.updateState();
|
|
303
|
-
}
|
|
304
|
-
}, this.platform.config.discoveryOptions.pollingInterval);
|
|
305
|
-
}
|
|
306
|
-
async stopPolling() {
|
|
307
|
-
if (this.pollingInterval) {
|
|
308
|
-
clearInterval(this.pollingInterval);
|
|
309
|
-
this.pollingInterval = undefined;
|
|
310
|
-
this.log.debug('Stopped polling');
|
|
311
|
-
}
|
|
312
|
-
if (this.isUpdating) {
|
|
313
|
-
this.log.debug('Waiting for ongoing polling task to complete for device:', this.name);
|
|
314
|
-
await new Promise((resolve) => {
|
|
315
|
-
this.isUpdating = false;
|
|
316
|
-
this.updateEmitter.once('updateComplete', resolve);
|
|
317
|
-
});
|
|
318
|
-
}
|
|
33
|
+
async updateAllServicesAndCharacteristics(forceUpdate) {
|
|
34
|
+
await super.updateAllServicesAndCharacteristics(forceUpdate);
|
|
319
35
|
}
|
|
320
36
|
identify() {
|
|
321
37
|
this.log.info('identify');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"homekitSwitch.js","sourceRoot":"","sources":["../../src/devices/homekitSwitch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"homekitSwitch.js","sourceRoot":"","sources":["../../src/devices/homekitSwitch.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAIhC,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,aAAa;IAKnD;IAJD,aAAa,CAAU;IAE/B,YACE,QAA4B,EACrB,UAAkB;QAEzB,KAAK,CAAC,QAAQ,EAAE,UAAU,6BAAqB,QAAQ,CAAC,CAAC;QAFlD,eAAU,GAAV,UAAU,CAAQ;QAGzB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC;QAC1D,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAES,qBAAqB;QAC7B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpD,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IACjD,CAAC;IAES,uBAAuB;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAEvC,MAAM,IAAI,GAA+B;YACvC,iBAAiB,CACf,CAAC,EACD,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACvB,MAAM,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/E,CAAC,CACF;SACF,CAAC;QAEF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,yBAAyB,CACjC,CAAC,EACD,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACvB,MAAM,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YACpF,CAAC,CACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAES,KAAK,CAAC,mCAAmC,CAAC,WAAoB;QACtE,MAAM,KAAK,CAAC,mCAAmC,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -1,35 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import HomeKitParentDevice from './baseParent.js';
|
|
2
2
|
import type KasaPythonPlatform from '../platform.js';
|
|
3
|
-
import type { Switch } from './
|
|
4
|
-
export default class HomeKitDeviceSwitchWithChildren extends
|
|
3
|
+
import type { ChildDevice, Switch, CharacteristicDescriptor } from './deviceTypes.js';
|
|
4
|
+
export default class HomeKitDeviceSwitchWithChildren extends HomeKitParentDevice {
|
|
5
5
|
kasaDevice: Switch;
|
|
6
|
-
isUpdating: boolean;
|
|
7
|
-
private previousKasaDevice;
|
|
8
|
-
private getSysInfo;
|
|
9
|
-
private pollingInterval;
|
|
10
|
-
private updateEmitter;
|
|
11
|
-
private static locks;
|
|
12
6
|
constructor(platform: KasaPythonPlatform, kasaDevice: Switch);
|
|
13
7
|
initialize(): Promise<void>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
private getServiceType;
|
|
17
|
-
private checkCharacteristics;
|
|
18
|
-
private getCharacteristics;
|
|
19
|
-
private getOrAddCharacteristic;
|
|
20
|
-
private handleOnGet;
|
|
21
|
-
private getDefaultValue;
|
|
22
|
-
private getInitialValue;
|
|
23
|
-
private mapRotationSpeedToValue;
|
|
24
|
-
private handleOnSet;
|
|
25
|
-
private getCharacteristicKey;
|
|
26
|
-
private getControlValue;
|
|
27
|
-
protected updateState(): Promise<void>;
|
|
28
|
-
private getService;
|
|
29
|
-
private updateChildState;
|
|
30
|
-
updateAfterPeriodicDiscovery(): void;
|
|
31
|
-
private updateCharacteristics;
|
|
32
|
-
startPolling(): Promise<void>;
|
|
33
|
-
stopPolling(): Promise<void>;
|
|
8
|
+
protected getChildServiceType(child: ChildDevice): typeof import("hap-nodejs/dist/lib/definitions/ServiceDefinitions.js").Fanv2;
|
|
9
|
+
protected buildChildDescriptors(child: ChildDevice): CharacteristicDescriptor[];
|
|
34
10
|
identify(): void;
|
|
35
11
|
}
|