@switchbot/homebridge-switchbot 1.12.7-beta.6 → 1.12.7-beta.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.
@@ -0,0 +1,464 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MeterPlus = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const settings_1 = require("../settings");
7
+ /**
8
+ * Platform Accessory
9
+ * An instance of this class is created for each accessory your platform registers
10
+ * Each accessory may expose multiple services of different service types.
11
+ */
12
+ class MeterPlus {
13
+ constructor(platform, accessory, device) {
14
+ this.platform = platform;
15
+ this.accessory = accessory;
16
+ this.device = device;
17
+ // default placeholders
18
+ this.logs(device);
19
+ this.scan(device);
20
+ this.refreshRate(device);
21
+ this.config(device);
22
+ if (this.CurrentRelativeHumidity === undefined) {
23
+ this.CurrentRelativeHumidity = 0;
24
+ }
25
+ else {
26
+ this.CurrentRelativeHumidity = this.accessory.context.CurrentRelativeHumidity;
27
+ }
28
+ if (this.CurrentTemperature === undefined) {
29
+ this.CurrentTemperature = 0;
30
+ }
31
+ else {
32
+ this.CurrentTemperature = this.accessory.context.CurrentTemperature;
33
+ }
34
+ // this is subject we use to track when we need to POST changes to the SwitchBot API
35
+ this.doMeterUpdate = new rxjs_1.Subject();
36
+ this.meterUpdateInProgress = false;
37
+ // Retrieve initial values and updateHomekit
38
+ this.refreshStatus();
39
+ // set accessory information
40
+ accessory
41
+ .getService(this.platform.Service.AccessoryInformation)
42
+ .setCharacteristic(this.platform.Characteristic.Manufacturer, 'SwitchBot')
43
+ .setCharacteristic(this.platform.Characteristic.Model, this.model(device))
44
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId);
45
+ // Temperature Sensor Service
46
+ if (device.meter?.hide_temperature) {
47
+ this.debugLog(`Meter Plus: ${accessory.displayName} Removing Temperature Sensor Service`);
48
+ this.temperatureservice = this.accessory.getService(this.platform.Service.TemperatureSensor);
49
+ accessory.removeService(this.temperatureservice);
50
+ }
51
+ else if (!this.temperatureservice) {
52
+ this.debugLog(`Meter Plus: ${accessory.displayName} Add Temperature Sensor Service`);
53
+ (this.temperatureservice =
54
+ this.accessory.getService(this.platform.Service.TemperatureSensor) || this.accessory.addService(this.platform.Service.TemperatureSensor)),
55
+ `${accessory.displayName} Temperature Sensor`;
56
+ this.temperatureservice.setCharacteristic(this.platform.Characteristic.Name, `${accessory.displayName} Temperature Sensor`);
57
+ this.temperatureservice
58
+ .getCharacteristic(this.platform.Characteristic.CurrentTemperature)
59
+ .setProps({
60
+ unit: "celsius" /* 'CELSIUS' */,
61
+ validValueRanges: [-273.15, 100],
62
+ minValue: -273.15,
63
+ maxValue: 100,
64
+ minStep: 0.1,
65
+ })
66
+ .onGet(() => {
67
+ return this.CurrentTemperature;
68
+ });
69
+ }
70
+ else {
71
+ this.debugLog(`Meter Plus: ${accessory.displayName} Temperature Sensor Service Not Added`);
72
+ }
73
+ // Humidity Sensor Service
74
+ if (device.meter?.hide_humidity) {
75
+ this.debugLog(`Meter Plus: ${accessory.displayName} Removing Humidity Sensor Service`);
76
+ this.humidityservice = this.accessory.getService(this.platform.Service.HumiditySensor);
77
+ accessory.removeService(this.humidityservice);
78
+ }
79
+ else if (!this.humidityservice) {
80
+ this.debugLog(`Meter Plus: ${accessory.displayName} Add Humidity Sensor Service`);
81
+ (this.humidityservice =
82
+ this.accessory.getService(this.platform.Service.HumiditySensor) || this.accessory.addService(this.platform.Service.HumiditySensor)),
83
+ `${accessory.displayName} Humidity Sensor`;
84
+ this.humidityservice.setCharacteristic(this.platform.Characteristic.Name, `${accessory.displayName} Humidity Sensor`);
85
+ this.humidityservice
86
+ .getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
87
+ .setProps({
88
+ minStep: 0.1,
89
+ })
90
+ .onGet(() => {
91
+ return this.CurrentRelativeHumidity;
92
+ });
93
+ }
94
+ else {
95
+ this.debugLog(`Meter Plus: ${accessory.displayName} Humidity Sensor Service Not Added`);
96
+ }
97
+ // Battery Service
98
+ if (!device.ble) {
99
+ this.debugLog(`Meter Plus: ${accessory.displayName} Removing Battery Service`);
100
+ this.batteryService = this.accessory.getService(this.platform.Service.Battery);
101
+ accessory.removeService(this.batteryService);
102
+ }
103
+ else if (device.ble && !this.batteryService) {
104
+ this.debugLog(`Meter Plus: ${accessory.displayName} Add Battery Service`);
105
+ (this.batteryService = this.accessory.getService(this.platform.Service.Battery) || this.accessory.addService(this.platform.Service.Battery)),
106
+ `${accessory.displayName} Battery`;
107
+ this.batteryService.setCharacteristic(this.platform.Characteristic.Name, `${accessory.displayName} Battery`);
108
+ this.batteryService.setCharacteristic(this.platform.Characteristic.ChargingState, this.platform.Characteristic.ChargingState.NOT_CHARGEABLE);
109
+ }
110
+ else {
111
+ this.debugLog(`Meter Plus: ${accessory.displayName} Battery Service Not Added`);
112
+ }
113
+ // Retrieve initial values and updateHomekit
114
+ this.updateHomeKitCharacteristics();
115
+ // Start an update interval
116
+ (0, rxjs_1.interval)(this.deviceRefreshRate * 1000)
117
+ .pipe((0, operators_1.skipWhile)(() => this.meterUpdateInProgress))
118
+ .subscribe(async () => {
119
+ await this.refreshStatus();
120
+ });
121
+ }
122
+ /**
123
+ * Parse the device status from the SwitchBot api
124
+ */
125
+ async parseStatus() {
126
+ if (this.SwitchToOpenAPI || !this.device.ble) {
127
+ await this.openAPIparseStatus();
128
+ }
129
+ else {
130
+ await this.BLEparseStatus();
131
+ }
132
+ }
133
+ async BLEparseStatus() {
134
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} BLE parseStatus`);
135
+ // Battery
136
+ this.BatteryLevel = Number(this.battery);
137
+ if (this.BatteryLevel < 15) {
138
+ this.StatusLowBattery = this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
139
+ }
140
+ else {
141
+ this.StatusLowBattery = this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
142
+ }
143
+ this.debugLog(`${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}, StatusLowBattery: ${this.StatusLowBattery}`);
144
+ // Humidity
145
+ if (!this.device.meter?.hide_humidity) {
146
+ this.CurrentRelativeHumidity = this.humidity;
147
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Humidity: ${this.CurrentRelativeHumidity}%`);
148
+ }
149
+ // Current Temperature
150
+ if (!this.device.meter?.hide_temperature) {
151
+ this.temperature < 0 ? 0 : this.temperature > 100 ? 100 : this.temperature;
152
+ this.CurrentTemperature = this.temperature;
153
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Temperature: ${this.CurrentTemperature}°c`);
154
+ }
155
+ }
156
+ async openAPIparseStatus() {
157
+ if (this.device.ble) {
158
+ this.SwitchToOpenAPI = false;
159
+ }
160
+ if (this.platform.config.credentials?.openToken) {
161
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} OpenAPI parseStatus`);
162
+ // Current Relative Humidity
163
+ if (!this.device.meter?.hide_humidity) {
164
+ this.CurrentRelativeHumidity = this.Humidity;
165
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Humidity: ${this.CurrentRelativeHumidity}%`);
166
+ }
167
+ // Current Temperature
168
+ if (!this.device.meter?.hide_temperature) {
169
+ this.CurrentTemperature = this.Temperature;
170
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Temperature: ${this.CurrentTemperature}°c`);
171
+ }
172
+ }
173
+ }
174
+ /**
175
+ * Asks the SwitchBot API for the latest device information
176
+ */
177
+ async refreshStatus() {
178
+ if (this.device.ble) {
179
+ this.BLErefreshStatus();
180
+ }
181
+ else {
182
+ this.openAPIRefreshStatus();
183
+ }
184
+ }
185
+ async BLErefreshStatus() {
186
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} BLE RefreshStatus`);
187
+ const switchbot = await this.platform.connectBLE();
188
+ // Convert to BLE Address
189
+ this.device.bleMac = this.device
190
+ .deviceId.match(/.{1,2}/g)
191
+ .join(':')
192
+ .toLowerCase();
193
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} BLE Address: ${this.device.bleMac}`);
194
+ this.getCustomBLEAddress(switchbot);
195
+ // Start to monitor advertisement packets
196
+ if (switchbot !== false) {
197
+ switchbot
198
+ .startScan({
199
+ model: 'i',
200
+ id: this.device.bleMac,
201
+ })
202
+ .then(() => {
203
+ // Set an event hander
204
+ switchbot.onadvertisement = (ad) => {
205
+ this.address = ad.address;
206
+ if (this.deviceLogging.includes('debug')) {
207
+ this.infoLog(this.address);
208
+ this.infoLog(this.device.bleMac);
209
+ this.infoLog(`Meter Plus: ${this.accessory.displayName} BLE Address Found: ${this.address}`);
210
+ this.infoLog(`Meter Plus: ${this.accessory.displayName} Config BLE Address: ${this.device.bleMac}`);
211
+ }
212
+ this.serviceData = ad.serviceData;
213
+ this.temperature = ad.serviceData.temperature.c;
214
+ this.humidity = ad.serviceData.humidity;
215
+ this.battery = ad.serviceData.battery;
216
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
217
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} model: ${ad.serviceData.model}, modelName: ${ad.serviceData.modelName}, ` +
218
+ `temperature: ${JSON.stringify(ad.serviceData.temperature?.c)}, humidity: ${ad.serviceData.humidity}, ` +
219
+ `battery: ${ad.serviceData.battery}`);
220
+ if (this.serviceData) {
221
+ this.connected = true;
222
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} connected: ${this.connected}`);
223
+ }
224
+ else {
225
+ this.connected = false;
226
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} connected: ${this.connected}`);
227
+ }
228
+ };
229
+ // Wait 10 seconds
230
+ return switchbot.wait(this.scanDuration * 1000);
231
+ })
232
+ .then(async () => {
233
+ // Stop to monitor
234
+ switchbot.stopScan();
235
+ if (this.connected) {
236
+ this.parseStatus();
237
+ this.updateHomeKitCharacteristics();
238
+ }
239
+ else {
240
+ await this.BLEconnection(switchbot);
241
+ }
242
+ })
243
+ .catch(async (e) => {
244
+ this.errorLog(`Meter Plus: ${this.accessory.displayName} failed refreshStatus with BLE Connection`);
245
+ if (this.deviceLogging.includes('debug')) {
246
+ this.errorLog(`Meter Plus: ${this.accessory.displayName} failed refreshStatus with BLE Connection,` + ` Error Message: ${JSON.stringify(e.message)}`);
247
+ }
248
+ if (this.platform.config.credentials?.openToken) {
249
+ this.warnLog(`Meter Plus: ${this.accessory.displayName} Using OpenAPI Connection`);
250
+ this.SwitchToOpenAPI = true;
251
+ this.openAPIRefreshStatus();
252
+ }
253
+ this.apiError(e);
254
+ });
255
+ }
256
+ else {
257
+ await this.BLEconnection(switchbot);
258
+ }
259
+ }
260
+ async getCustomBLEAddress(switchbot) {
261
+ if (this.device.customBLEaddress && this.deviceLogging.includes('debug')) {
262
+ (async () => {
263
+ // Start to monitor advertisement packets
264
+ await switchbot.startScan({
265
+ model: 'i',
266
+ });
267
+ // Set an event handler
268
+ switchbot.onadvertisement = (ad) => {
269
+ this.warnLog(JSON.stringify(ad, null, ' '));
270
+ };
271
+ await switchbot.wait(10000);
272
+ // Stop to monitor
273
+ switchbot.stopScan();
274
+ })();
275
+ }
276
+ }
277
+ async BLEconnection(switchbot) {
278
+ this.errorLog(`Meter Plus: ${this.accessory.displayName} wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`);
279
+ if (this.platform.config.credentials?.openToken) {
280
+ this.warnLog(`Meter Plus: ${this.accessory.displayName} Using OpenAPI Connection`);
281
+ this.SwitchToOpenAPI = true;
282
+ await this.openAPIRefreshStatus();
283
+ }
284
+ }
285
+ async openAPIRefreshStatus() {
286
+ if (this.platform.config.credentials?.openToken) {
287
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} OpenAPI RefreshStatus`);
288
+ try {
289
+ this.deviceStatus = (await this.platform.axios.get(`${settings_1.DeviceURL}/${this.device.deviceId}/status`)).data;
290
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} openAPIRefreshStatus: ${JSON.stringify(this.deviceStatus)}`);
291
+ this.Humidity = this.deviceStatus.body.humidity;
292
+ this.Temperature = this.deviceStatus.body.temperature;
293
+ this.parseStatus();
294
+ this.updateHomeKitCharacteristics();
295
+ }
296
+ catch (e) {
297
+ this.errorLog(`Meter Plus: ${this.accessory.displayName} failed refreshStatus with OpenAPI Connection`);
298
+ if (this.deviceLogging.includes('debug')) {
299
+ this.errorLog(`Meter Plus: ${this.accessory.displayName} failed refreshStatus with OpenAPI Connection,` +
300
+ ` Error Message: ${JSON.stringify(e.message)}`);
301
+ }
302
+ this.apiError(e);
303
+ }
304
+ }
305
+ }
306
+ /**
307
+ * Updates the status for each of the HomeKit Characteristics
308
+ */
309
+ async updateHomeKitCharacteristics() {
310
+ if (!this.device.meter?.hide_humidity) {
311
+ if (this.CurrentRelativeHumidity === undefined) {
312
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`);
313
+ }
314
+ else {
315
+ this.humidityservice?.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, this.CurrentRelativeHumidity);
316
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} updateCharacteristic CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`);
317
+ }
318
+ }
319
+ if (!this.device.meter?.hide_temperature) {
320
+ if (this.CurrentTemperature === undefined) {
321
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} CurrentTemperature: ${this.CurrentTemperature}`);
322
+ }
323
+ else {
324
+ this.temperatureservice?.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, this.CurrentTemperature);
325
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} updateCharacteristic CurrentTemperature: ${this.CurrentTemperature}`);
326
+ }
327
+ }
328
+ if (this.device.ble) {
329
+ if (this.BatteryLevel === undefined) {
330
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}`);
331
+ }
332
+ else {
333
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, this.BatteryLevel);
334
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.BatteryLevel}`);
335
+ }
336
+ if (this.StatusLowBattery === undefined) {
337
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} StatusLowBattery: ${this.StatusLowBattery}`);
338
+ }
339
+ else {
340
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.StatusLowBattery);
341
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
342
+ }
343
+ }
344
+ }
345
+ async apiError(e) {
346
+ if (!this.device.meter?.hide_humidity) {
347
+ this.humidityservice?.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, e);
348
+ }
349
+ if (!this.device.meter?.hide_temperature) {
350
+ this.temperatureservice?.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, e);
351
+ }
352
+ if (this.device.ble) {
353
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, e);
354
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
355
+ }
356
+ //throw new this.platform.api.hap.HapStatusError(HAPStatus.SERVICE_COMMUNICATION_FAILURE);
357
+ }
358
+ model(device) {
359
+ let model;
360
+ if (device.deviceType === 'Meter Plus (JP)') {
361
+ model = 'W2201500';
362
+ }
363
+ else {
364
+ model = 'W2301500';
365
+ }
366
+ return model;
367
+ }
368
+ async config(device) {
369
+ let config = {};
370
+ if (device.meter) {
371
+ config = device.meter;
372
+ }
373
+ if (device.ble !== undefined) {
374
+ config['ble'] = device.ble;
375
+ }
376
+ if (device.logging !== undefined) {
377
+ config['logging'] = device.logging;
378
+ }
379
+ if (device.refreshRate !== undefined) {
380
+ config['refreshRate'] = device.refreshRate;
381
+ }
382
+ if (device.scanDuration !== undefined) {
383
+ config['scanDuration'] = device.scanDuration;
384
+ }
385
+ if (Object.entries(config).length !== 0) {
386
+ this.infoLog(`Meter Plus: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
387
+ }
388
+ }
389
+ async refreshRate(device) {
390
+ if (device.refreshRate) {
391
+ this.deviceRefreshRate = this.accessory.context.refreshRate = device.refreshRate;
392
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Using Device Config refreshRate: ${this.deviceRefreshRate}`);
393
+ }
394
+ else if (this.platform.config.options.refreshRate) {
395
+ this.deviceRefreshRate = this.accessory.context.refreshRate = this.platform.config.options.refreshRate;
396
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Using Platform Config refreshRate: ${this.deviceRefreshRate}`);
397
+ }
398
+ }
399
+ async scan(device) {
400
+ if (device.scanDuration) {
401
+ this.scanDuration = this.accessory.context.scanDuration = device.scanDuration;
402
+ if (device.ble) {
403
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Using Device Config scanDuration: ${this.scanDuration}`);
404
+ }
405
+ }
406
+ else {
407
+ this.scanDuration = this.accessory.context.scanDuration = 1;
408
+ if (this.device.ble) {
409
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Using Default scanDuration: ${this.scanDuration}`);
410
+ }
411
+ }
412
+ }
413
+ async logs(device) {
414
+ if (this.platform.debugMode) {
415
+ this.deviceLogging = this.accessory.context.logging = 'debugMode';
416
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Using Debug Mode Logging: ${this.deviceLogging}`);
417
+ }
418
+ else if (device.logging) {
419
+ this.deviceLogging = this.accessory.context.logging = device.logging;
420
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Using Device Config Logging: ${this.deviceLogging}`);
421
+ }
422
+ else if (this.platform.config.options?.logging) {
423
+ this.deviceLogging = this.accessory.context.logging = this.platform.config.options?.logging;
424
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Using Platform Config Logging: ${this.deviceLogging}`);
425
+ }
426
+ else {
427
+ this.deviceLogging = this.accessory.context.logging = 'standard';
428
+ this.debugLog(`Meter Plus: ${this.accessory.displayName} Logging Not Set, Using: ${this.deviceLogging}`);
429
+ }
430
+ }
431
+ /**
432
+ * Logging for Device
433
+ */
434
+ infoLog(...log) {
435
+ if (this.enablingDeviceLogging()) {
436
+ this.platform.log.info(String(...log));
437
+ }
438
+ }
439
+ warnLog(...log) {
440
+ if (this.enablingDeviceLogging()) {
441
+ this.platform.log.warn(String(...log));
442
+ }
443
+ }
444
+ errorLog(...log) {
445
+ if (this.enablingDeviceLogging()) {
446
+ this.platform.log.error(String(...log));
447
+ }
448
+ }
449
+ debugLog(...log) {
450
+ if (this.enablingDeviceLogging()) {
451
+ if (this.deviceLogging === 'debug') {
452
+ this.platform.log.info('[DEBUG]', String(...log));
453
+ }
454
+ else {
455
+ this.platform.log.debug(String(...log));
456
+ }
457
+ }
458
+ }
459
+ enablingDeviceLogging() {
460
+ return this.deviceLogging.includes('debug') || this.deviceLogging === 'standard';
461
+ }
462
+ }
463
+ exports.MeterPlus = MeterPlus;
464
+ //# sourceMappingURL=meterplus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meterplus.js","sourceRoot":"","sources":["../../src/device/meterplus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { Subject } from 'rxjs';
3
+ import { SwitchBotPlatform } from '../platform';
4
+ import { Service, PlatformAccessory, CharacteristicValue, ControllerConstructor, Controller, ControllerServiceMap } from 'homebridge';
5
+ import { device, devicesConfig, switchbot, deviceStatusResponse, deviceStatus } from '../settings';
6
+ /**
7
+ * Platform Accessory
8
+ * An instance of this class is created for each accessory your platform registers
9
+ * Each accessory may expose multiple services of different service types.
10
+ */
11
+ export declare class StripLight {
12
+ private readonly platform;
13
+ private accessory;
14
+ device: device & devicesConfig;
15
+ lightBulbService: Service;
16
+ On: CharacteristicValue;
17
+ OnCached: CharacteristicValue;
18
+ Hue: CharacteristicValue;
19
+ HueCached: CharacteristicValue;
20
+ Saturation: CharacteristicValue;
21
+ SaturationCached: CharacteristicValue;
22
+ Brightness: CharacteristicValue;
23
+ BrightnessCached: CharacteristicValue;
24
+ power: deviceStatus['power'];
25
+ color: deviceStatus['color'];
26
+ brightness: deviceStatus['brightness'];
27
+ deviceStatus: deviceStatusResponse;
28
+ switchbot: switchbot;
29
+ set_minStep?: number;
30
+ deviceLogging: string;
31
+ deviceRefreshRate: number;
32
+ adaptiveLightingShift?: number;
33
+ AdaptiveLightingController?: ControllerConstructor | Controller<ControllerServiceMap>;
34
+ minKelvin: number;
35
+ maxKelvin: number;
36
+ cacheKelvin: number;
37
+ colorBulbUpdateInProgress: boolean;
38
+ doColorBulbUpdate: Subject<void>;
39
+ constructor(platform: SwitchBotPlatform, accessory: PlatformAccessory, device: device & devicesConfig);
40
+ parseStatus(): Promise<void>;
41
+ refreshStatus(): Promise<void>;
42
+ /**
43
+ * Pushes the requested changes to the SwitchBot API
44
+ * deviceType commandType Command command parameter Description
45
+ * Strip Light - "command" "turnOn" "default" = set to ON state |
46
+ * Strip Light - "command" "turnOff" "default" = set to OFF state |
47
+ * Strip Light - "command" "toggle" "default" = toggle state |
48
+ * Strip Light - "command" "setBrightness" "`{1-100}`" = set brightness |
49
+ * Strip Light - "command" "setColor" "`"{0-255}:{0-255}:{0-255}"`" = set RGB color value |
50
+ *
51
+ */
52
+ pushChanges(): Promise<void>;
53
+ pushHueSaturationChanges(): Promise<void>;
54
+ pushBrightnessChanges(): Promise<void>;
55
+ updateHomeKitCharacteristics(): Promise<void>;
56
+ apiError(e: any): void;
57
+ statusCode(push: AxiosResponse<{
58
+ statusCode: number;
59
+ }>): void;
60
+ offlineOff(): Promise<void>;
61
+ /**
62
+ * Handle requests to set the value of the "On" characteristic
63
+ */
64
+ OnSet(value: CharacteristicValue): Promise<void>;
65
+ /**
66
+ * Handle requests to set the value of the "Brightness" characteristic
67
+ */
68
+ BrightnessSet(value: CharacteristicValue): Promise<void>;
69
+ /**
70
+ * Handle requests to set the value of the "Hue" characteristic
71
+ */
72
+ HueSet(value: CharacteristicValue): Promise<void>;
73
+ /**
74
+ * Handle requests to set the value of the "Saturation" characteristic
75
+ */
76
+ SaturationSet(value: CharacteristicValue): Promise<void>;
77
+ config(device: device & devicesConfig): Promise<void>;
78
+ refreshRate(device: device & devicesConfig): Promise<void>;
79
+ logs(device: device & devicesConfig): Promise<void>;
80
+ minStep(device: device & devicesConfig): number;
81
+ /**
82
+ * Logging for Device
83
+ */
84
+ infoLog(...log: any[]): void;
85
+ warnLog(...log: any[]): void;
86
+ errorLog(...log: any[]): void;
87
+ debugLog(...log: any[]): void;
88
+ enablingDeviceLogging(): boolean;
89
+ }
90
+ //# sourceMappingURL=striplight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"striplight.d.ts","sourceRoot":"","sources":["../../src/device/striplight.ts"],"names":[],"mappings":"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"}