@switchbot/homebridge-switchbot 3.5.0-beta.6 → 3.5.0-beta.60
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/.vscode/settings.json +4 -1
- package/CHANGELOG.md +4 -1
- package/config.schema.json +120 -17
- package/dist/device/blindtilt.d.ts +23 -96
- package/dist/device/blindtilt.d.ts.map +1 -1
- package/dist/device/blindtilt.js +408 -779
- package/dist/device/blindtilt.js.map +1 -1
- package/dist/device/bot.d.ts +26 -72
- package/dist/device/bot.d.ts.map +1 -1
- package/dist/device/bot.js +696 -822
- package/dist/device/bot.js.map +1 -1
- package/dist/device/ceilinglight.d.ts +14 -68
- package/dist/device/ceilinglight.d.ts.map +1 -1
- package/dist/device/ceilinglight.js +237 -606
- package/dist/device/ceilinglight.js.map +1 -1
- package/dist/device/colorbulb.d.ts +14 -75
- package/dist/device/colorbulb.d.ts.map +1 -1
- package/dist/device/colorbulb.js +279 -658
- package/dist/device/colorbulb.js.map +1 -1
- package/dist/device/contact.d.ts +15 -66
- package/dist/device/contact.d.ts.map +1 -1
- package/dist/device/contact.js +242 -544
- package/dist/device/contact.js.map +1 -1
- package/dist/device/curtain.d.ts +19 -88
- package/dist/device/curtain.d.ts.map +1 -1
- package/dist/device/curtain.js +402 -805
- package/dist/device/curtain.js.map +1 -1
- package/dist/device/device.d.ts +59 -0
- package/dist/device/device.d.ts.map +1 -0
- package/dist/device/device.js +684 -0
- package/dist/device/device.js.map +1 -0
- package/dist/device/fan.d.ts +51 -0
- package/dist/device/fan.d.ts.map +1 -0
- package/dist/device/fan.js +535 -0
- package/dist/device/fan.js.map +1 -0
- package/dist/device/hub.d.ts +16 -60
- package/dist/device/hub.d.ts.map +1 -1
- package/dist/device/hub.js +246 -613
- package/dist/device/hub.js.map +1 -1
- package/dist/device/humidifier.d.ts +11 -66
- package/dist/device/humidifier.d.ts.map +1 -1
- package/dist/device/humidifier.js +232 -593
- package/dist/device/humidifier.js.map +1 -1
- package/dist/device/iosensor.d.ts +11 -64
- package/dist/device/iosensor.d.ts.map +1 -1
- package/dist/device/iosensor.js +185 -600
- package/dist/device/iosensor.js.map +1 -1
- package/dist/device/lightstrip.d.ts +11 -69
- package/dist/device/lightstrip.d.ts.map +1 -1
- package/dist/device/lightstrip.js +277 -586
- package/dist/device/lightstrip.js.map +1 -1
- package/dist/device/lock.d.ts +16 -63
- package/dist/device/lock.d.ts.map +1 -1
- package/dist/device/lock.js +241 -560
- package/dist/device/lock.js.map +1 -1
- package/dist/device/meter.d.ts +14 -64
- package/dist/device/meter.d.ts.map +1 -1
- package/dist/device/meter.js +181 -593
- package/dist/device/meter.js.map +1 -1
- package/dist/device/meterplus.d.ts +14 -65
- package/dist/device/meterplus.d.ts.map +1 -1
- package/dist/device/meterplus.js +170 -593
- package/dist/device/meterplus.js.map +1 -1
- package/dist/device/motion.d.ts +13 -69
- package/dist/device/motion.d.ts.map +1 -1
- package/dist/device/motion.js +178 -531
- package/dist/device/motion.js.map +1 -1
- package/dist/device/plug.d.ts +9 -57
- package/dist/device/plug.d.ts.map +1 -1
- package/dist/device/plug.js +92 -458
- package/dist/device/plug.js.map +1 -1
- package/dist/device/robotvacuumcleaner.d.ts +12 -63
- package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
- package/dist/device/robotvacuumcleaner.js +197 -521
- package/dist/device/robotvacuumcleaner.js.map +1 -1
- package/dist/device/waterdetector.d.ts +10 -65
- package/dist/device/waterdetector.d.ts.map +1 -1
- package/dist/device/waterdetector.js +139 -495
- package/dist/device/waterdetector.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +22 -16
- package/dist/homebridge-ui/server.js +1 -1
- package/dist/homebridge-ui/server.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/irdevice/airconditioner.d.ts +9 -49
- package/dist/irdevice/airconditioner.d.ts.map +1 -1
- package/dist/irdevice/airconditioner.js +309 -419
- package/dist/irdevice/airconditioner.js.map +1 -1
- package/dist/irdevice/airpurifier.d.ts +8 -39
- package/dist/irdevice/airpurifier.d.ts.map +1 -1
- package/dist/irdevice/airpurifier.js +72 -304
- package/dist/irdevice/airpurifier.js.map +1 -1
- package/dist/irdevice/camera.d.ts +7 -36
- package/dist/irdevice/camera.d.ts.map +1 -1
- package/dist/irdevice/camera.js +34 -278
- package/dist/irdevice/camera.js.map +1 -1
- package/dist/irdevice/fan.d.ts +10 -43
- package/dist/irdevice/fan.d.ts.map +1 -1
- package/dist/irdevice/fan.js +100 -338
- package/dist/irdevice/fan.js.map +1 -1
- package/dist/irdevice/irdevice.d.ts +40 -0
- package/dist/irdevice/irdevice.d.ts.map +1 -0
- package/dist/irdevice/irdevice.js +330 -0
- package/dist/irdevice/irdevice.js.map +1 -0
- package/dist/irdevice/light.d.ts +12 -45
- package/dist/irdevice/light.d.ts.map +1 -1
- package/dist/irdevice/light.js +87 -357
- package/dist/irdevice/light.js.map +1 -1
- package/dist/irdevice/other.d.ts +19 -48
- package/dist/irdevice/other.d.ts.map +1 -1
- package/dist/irdevice/other.js +352 -546
- package/dist/irdevice/other.js.map +1 -1
- package/dist/irdevice/tv.d.ts +8 -40
- package/dist/irdevice/tv.d.ts.map +1 -1
- package/dist/irdevice/tv.js +82 -321
- package/dist/irdevice/tv.js.map +1 -1
- package/dist/irdevice/vacuumcleaner.d.ts +7 -36
- package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
- package/dist/irdevice/vacuumcleaner.js +41 -284
- package/dist/irdevice/vacuumcleaner.js.map +1 -1
- package/dist/irdevice/waterheater.d.ts +7 -36
- package/dist/irdevice/waterheater.d.ts.map +1 -1
- package/dist/irdevice/waterheater.js +42 -287
- package/dist/irdevice/waterheater.js.map +1 -1
- package/dist/platform.d.ts +19 -6
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +310 -169
- package/dist/platform.js.map +1 -1
- package/dist/settings.d.ts +62 -19
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +16 -552
- package/dist/settings.js.map +1 -1
- package/dist/utils.d.ts +77 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +638 -1
- package/dist/utils.js.map +1 -1
- package/eslint.config.js +96 -0
- package/package.json +19 -15
- package/src/custom.d.ts +2 -1
- package/src/device/blindtilt.ts +442 -814
- package/src/device/bot.ts +754 -915
- package/src/device/ceilinglight.ts +255 -633
- package/src/device/colorbulb.ts +294 -685
- package/src/device/contact.ts +277 -571
- package/src/device/curtain.ts +431 -835
- package/src/device/device.ts +709 -0
- package/src/device/fan.ts +591 -0
- package/src/device/hub.ts +286 -644
- package/src/device/humidifier.ts +266 -646
- package/src/device/iosensor.ts +220 -625
- package/src/device/lightstrip.ts +305 -620
- package/src/device/lock.ts +280 -600
- package/src/device/meter.ts +216 -617
- package/src/device/meterplus.ts +205 -619
- package/src/device/motion.ts +206 -556
- package/src/device/plug.ts +107 -490
- package/src/device/robotvacuumcleaner.ts +223 -550
- package/src/device/waterdetector.ts +160 -519
- package/src/homebridge-ui/public/index.html +22 -16
- package/src/homebridge-ui/server.ts +1 -1
- package/src/index.ts +4 -3
- package/src/irdevice/airconditioner.ts +333 -447
- package/src/irdevice/airpurifier.ts +92 -322
- package/src/irdevice/camera.ts +45 -294
- package/src/irdevice/fan.ts +115 -353
- package/src/irdevice/irdevice.ts +346 -0
- package/src/irdevice/light.ts +110 -385
- package/src/irdevice/other.ts +399 -616
- package/src/irdevice/tv.ts +103 -340
- package/src/irdevice/vacuumcleaner.ts +52 -306
- package/src/irdevice/waterheater.ts +53 -311
- package/src/platform.ts +355 -216
- package/src/settings.ts +116 -611
- package/src/utils.ts +642 -1
- package/src/device/waterdetector.json +0 -11
package/src/device/lightstrip.ts
CHANGED
|
@@ -1,127 +1,92 @@
|
|
|
1
1
|
import { request } from 'undici';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
} from '
|
|
9
|
-
import { device, devicesConfig,
|
|
2
|
+
import { deviceBase } from './device.js';
|
|
3
|
+
import { Devices } from '../settings.js';
|
|
4
|
+
import { hs2rgb, rgb2hs, m2hs } from '../utils.js';
|
|
5
|
+
import { interval, skipWhile, Subject } from 'rxjs';
|
|
6
|
+
import { debounceTime, take, tap } from 'rxjs/operators';
|
|
7
|
+
|
|
8
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
9
|
+
import type { device, devicesConfig, deviceStatus, serviceData} from '../settings.js';
|
|
10
|
+
import type { Service, PlatformAccessory, CharacteristicValue, ControllerConstructor, Controller, ControllerServiceMap } from 'homebridge';
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Platform Accessory
|
|
13
14
|
* An instance of this class is created for each accessory your platform registers
|
|
14
15
|
* Each accessory may expose multiple services of different service types.
|
|
15
16
|
*/
|
|
16
|
-
export class StripLight {
|
|
17
|
-
public readonly api: API;
|
|
18
|
-
public readonly log: Logging;
|
|
19
|
-
public readonly config!: SwitchBotPlatformConfig;
|
|
20
|
-
protected readonly hap: HAP;
|
|
17
|
+
export class StripLight extends deviceBase {
|
|
21
18
|
// Services
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
// OpenAPI Status
|
|
33
|
-
OpenAPI_On: deviceStatus['power'];
|
|
34
|
-
OpenAPI_RGB: deviceStatus['color'];
|
|
35
|
-
OpenAPI_Brightness: deviceStatus['brightness'];
|
|
36
|
-
OpenAPI_FirmwareRevision: deviceStatus['version'];
|
|
37
|
-
|
|
38
|
-
// BLE Status
|
|
39
|
-
BLE_On: serviceData['state'];
|
|
40
|
-
BLE_Brightness: serviceData['brightness'];
|
|
41
|
-
|
|
42
|
-
// BLE Others
|
|
43
|
-
BLE_IsConnected?: boolean;
|
|
44
|
-
|
|
45
|
-
// Config
|
|
46
|
-
set_minStep?: number;
|
|
47
|
-
scanDuration!: number;
|
|
48
|
-
deviceLogging!: string;
|
|
49
|
-
deviceRefreshRate!: number;
|
|
50
|
-
adaptiveLightingShift?: number;
|
|
19
|
+
private LightBulb: {
|
|
20
|
+
Name: CharacteristicValue;
|
|
21
|
+
Service: Service;
|
|
22
|
+
On: CharacteristicValue;
|
|
23
|
+
Hue: CharacteristicValue;
|
|
24
|
+
Saturation: CharacteristicValue;
|
|
25
|
+
Brightness: CharacteristicValue;
|
|
26
|
+
ColorTemperature?: CharacteristicValue;
|
|
27
|
+
};
|
|
51
28
|
|
|
52
29
|
// Adaptive Lighting
|
|
53
30
|
AdaptiveLightingController?: ControllerConstructor | Controller<ControllerServiceMap>;
|
|
54
|
-
|
|
55
|
-
maxKelvin!: number;
|
|
56
|
-
|
|
57
|
-
// Others
|
|
58
|
-
cacheKelvin!: number;
|
|
59
|
-
change!: string;
|
|
31
|
+
adaptiveLightingShift?: number;
|
|
60
32
|
|
|
61
33
|
// Updates
|
|
62
34
|
stripLightUpdateInProgress!: boolean;
|
|
63
35
|
doStripLightUpdate!: Subject<void>;
|
|
64
36
|
|
|
65
|
-
// Connection
|
|
66
|
-
private readonly OpenAPI: boolean;
|
|
67
|
-
private readonly BLE: boolean;
|
|
68
|
-
|
|
69
37
|
constructor(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
38
|
+
readonly platform: SwitchBotPlatform,
|
|
39
|
+
accessory: PlatformAccessory,
|
|
40
|
+
device: device & devicesConfig,
|
|
73
41
|
) {
|
|
74
|
-
|
|
75
|
-
this.
|
|
76
|
-
this.config = this.platform.config;
|
|
77
|
-
this.hap = this.api.hap;
|
|
78
|
-
// Connection
|
|
79
|
-
this.BLE = this.device.connectionType === 'BLE' || this.device.connectionType === 'BLE/OpenAPI';
|
|
80
|
-
this.OpenAPI = this.device.connectionType === 'OpenAPI' || this.device.connectionType === 'BLE/OpenAPI';
|
|
81
|
-
// default placeholders
|
|
82
|
-
this.deviceLogs(device);
|
|
83
|
-
this.scan(device);
|
|
84
|
-
this.refreshRate(device);
|
|
85
|
-
this.deviceContext();
|
|
86
|
-
this.deviceConfig(device);
|
|
87
|
-
|
|
42
|
+
super(platform, accessory, device);
|
|
43
|
+
this.adaptiveLighting(device);
|
|
88
44
|
// this is subject we use to track when we need to POST changes to the SwitchBot API
|
|
89
45
|
this.doStripLightUpdate = new Subject();
|
|
90
46
|
this.stripLightUpdateInProgress = false;
|
|
91
47
|
|
|
92
|
-
//
|
|
93
|
-
this.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
.
|
|
98
|
-
.
|
|
99
|
-
.
|
|
100
|
-
.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
//
|
|
104
|
-
// you can create multiple services for each accessory
|
|
105
|
-
const lightBulbService = `${accessory.displayName} ${device.deviceType}`;
|
|
106
|
-
(this.lightBulbService = accessory.getService(this.hap.Service.Lightbulb)
|
|
107
|
-
|| accessory.addService(this.hap.Service.Lightbulb)), lightBulbService;
|
|
108
|
-
|
|
48
|
+
// Initialize the LightBulb Service
|
|
49
|
+
this.LightBulb = {
|
|
50
|
+
Name: accessory.context.LightBulbName ?? accessory.displayName,
|
|
51
|
+
Service: accessory.getService(this.hap.Service.Lightbulb) ?? accessory.addService(this.hap.Service.Lightbulb) as Service,
|
|
52
|
+
On: accessory.context.On ?? false,
|
|
53
|
+
Hue: accessory.context.Hue ?? 0,
|
|
54
|
+
Saturation: accessory.context.Saturation ?? 0,
|
|
55
|
+
Brightness: accessory.context.Brightness ?? 0,
|
|
56
|
+
ColorTemperature: accessory.context.ColorTemperature ?? 140,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// Adaptive Lighting
|
|
109
60
|
if (this.adaptiveLightingShift === -1 && this.accessory.context.adaptiveLighting) {
|
|
110
|
-
this.accessory.removeService(this.
|
|
111
|
-
this.
|
|
61
|
+
this.accessory.removeService(this.LightBulb.Service);
|
|
62
|
+
this.LightBulb.Service = this.accessory.addService(this.hap.Service.Lightbulb);
|
|
112
63
|
this.accessory.context.adaptiveLighting = false;
|
|
113
64
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLighting: ${this.accessory.context.adaptiveLighting}`);
|
|
114
65
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
66
|
+
if (this.adaptiveLightingShift !== -1) {
|
|
67
|
+
this.AdaptiveLightingController = new platform.api.hap.AdaptiveLightingController(this.LightBulb.Service, {
|
|
68
|
+
customTemperatureAdjustment: this.adaptiveLightingShift,
|
|
69
|
+
});
|
|
70
|
+
this.accessory.configureController(this.AdaptiveLightingController);
|
|
71
|
+
this.accessory.context.adaptiveLighting = true;
|
|
72
|
+
this.debugLog(
|
|
73
|
+
`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLighting: ${this.accessory.context.adaptiveLighting},` +
|
|
74
|
+
` adaptiveLightingShift: ${this.adaptiveLightingShift}`,
|
|
75
|
+
);
|
|
119
76
|
}
|
|
120
|
-
|
|
121
|
-
|
|
77
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLightingShift: ${this.adaptiveLightingShift}`);
|
|
78
|
+
|
|
79
|
+
// Initialize LightBulb Characteristics
|
|
80
|
+
this.LightBulb.Service
|
|
81
|
+
.setCharacteristic(this.hap.Characteristic.Name, this.LightBulb.Name)
|
|
82
|
+
.getCharacteristic(this.hap.Characteristic.On)
|
|
83
|
+
.onGet(() => {
|
|
84
|
+
return this.LightBulb.On;
|
|
85
|
+
})
|
|
86
|
+
.onSet(this.OnSet.bind(this));
|
|
122
87
|
|
|
123
|
-
//
|
|
124
|
-
this.
|
|
88
|
+
// Initialize LightBulb Brightness Characteristic
|
|
89
|
+
this.LightBulb.Service
|
|
125
90
|
.getCharacteristic(this.hap.Characteristic.Brightness)
|
|
126
91
|
.setProps({
|
|
127
92
|
minStep: this.minStep(device),
|
|
@@ -130,12 +95,12 @@ export class StripLight {
|
|
|
130
95
|
validValueRanges: [0, 100],
|
|
131
96
|
})
|
|
132
97
|
.onGet(() => {
|
|
133
|
-
return this.Brightness;
|
|
98
|
+
return this.LightBulb.Brightness;
|
|
134
99
|
})
|
|
135
100
|
.onSet(this.BrightnessSet.bind(this));
|
|
136
101
|
|
|
137
|
-
//
|
|
138
|
-
this.
|
|
102
|
+
// Initialize LightBulb ColorTemperature Characteristic
|
|
103
|
+
this.LightBulb.Service
|
|
139
104
|
.getCharacteristic(this.hap.Characteristic.ColorTemperature)
|
|
140
105
|
.setProps({
|
|
141
106
|
minValue: 140,
|
|
@@ -143,12 +108,12 @@ export class StripLight {
|
|
|
143
108
|
validValueRanges: [140, 500],
|
|
144
109
|
})
|
|
145
110
|
.onGet(() => {
|
|
146
|
-
return this.ColorTemperature!;
|
|
111
|
+
return this.LightBulb.ColorTemperature!;
|
|
147
112
|
})
|
|
148
113
|
.onSet(this.ColorTemperatureSet.bind(this));
|
|
149
114
|
|
|
150
|
-
//
|
|
151
|
-
this.
|
|
115
|
+
// Initialize LightBulb Hue Characteristic
|
|
116
|
+
this.LightBulb.Service
|
|
152
117
|
.getCharacteristic(this.hap.Characteristic.Hue)
|
|
153
118
|
.setProps({
|
|
154
119
|
minValue: 0,
|
|
@@ -156,12 +121,12 @@ export class StripLight {
|
|
|
156
121
|
validValueRanges: [0, 360],
|
|
157
122
|
})
|
|
158
123
|
.onGet(() => {
|
|
159
|
-
return this.Hue;
|
|
124
|
+
return this.LightBulb.Hue;
|
|
160
125
|
})
|
|
161
126
|
.onSet(this.HueSet.bind(this));
|
|
162
127
|
|
|
163
|
-
//
|
|
164
|
-
this.
|
|
128
|
+
// Initialize LightBulb Saturation Characteristic
|
|
129
|
+
this.LightBulb.Service
|
|
165
130
|
.getCharacteristic(this.hap.Characteristic.Saturation)
|
|
166
131
|
.setProps({
|
|
167
132
|
minValue: 0,
|
|
@@ -169,22 +134,13 @@ export class StripLight {
|
|
|
169
134
|
validValueRanges: [0, 100],
|
|
170
135
|
})
|
|
171
136
|
.onGet(() => {
|
|
172
|
-
return this.Saturation;
|
|
137
|
+
return this.LightBulb.Saturation;
|
|
173
138
|
})
|
|
174
139
|
.onSet(this.SaturationSet.bind(this));
|
|
140
|
+
accessory.context.LightBulbName = this.LightBulb.Name;
|
|
175
141
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
this.AdaptiveLightingController = new platform.api.hap.AdaptiveLightingController(this.lightBulbService, {
|
|
179
|
-
customTemperatureAdjustment: this.adaptiveLightingShift,
|
|
180
|
-
});
|
|
181
|
-
this.accessory.configureController(this.AdaptiveLightingController);
|
|
182
|
-
this.accessory.context.adaptiveLighting = true;
|
|
183
|
-
this.debugLog(
|
|
184
|
-
`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLighting: ${this.accessory.context.adaptiveLighting},` +
|
|
185
|
-
` adaptiveLightingShift: ${this.adaptiveLightingShift}`,
|
|
186
|
-
);
|
|
187
|
-
}
|
|
142
|
+
// Retrieve initial values and updateHomekit
|
|
143
|
+
this.refreshStatus();
|
|
188
144
|
|
|
189
145
|
// Update Homekit
|
|
190
146
|
this.updateHomeKitCharacteristics();
|
|
@@ -197,19 +153,33 @@ export class StripLight {
|
|
|
197
153
|
});
|
|
198
154
|
|
|
199
155
|
//regisiter webhook event handler
|
|
200
|
-
if (
|
|
201
|
-
this.
|
|
156
|
+
if (device.webhook) {
|
|
157
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} is listening webhook.`);
|
|
202
158
|
this.platform.webhookEventHandler[this.device.deviceId] = async (context) => {
|
|
203
159
|
try {
|
|
204
160
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} received Webhook: ${JSON.stringify(context)}`);
|
|
205
161
|
const { powerState, brightness, color, colorTemperature } = context;
|
|
206
|
-
const { On, Brightness, Hue, Saturation, ColorTemperature } = this;
|
|
162
|
+
const { On, Brightness, Hue, Saturation, ColorTemperature } = this.LightBulb;
|
|
207
163
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ` +
|
|
208
164
|
'(powerState, brightness, color, colorTemperature) = ' +
|
|
209
165
|
`Webhook:(${powerState}, ${brightness}, ${color}, ${colorTemperature}), ` +
|
|
210
166
|
`current:(${On}, ${Brightness}, ${Hue}, ${Saturation}, ${ColorTemperature})`);
|
|
211
|
-
|
|
212
|
-
|
|
167
|
+
|
|
168
|
+
// On
|
|
169
|
+
this.LightBulb.On = powerState === 'ON' ? true : false;
|
|
170
|
+
if (this.accessory.context.Brightness !== this.LightBulb.On) {
|
|
171
|
+
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
|
|
172
|
+
} else {
|
|
173
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Brightness
|
|
177
|
+
this.LightBulb.Brightness = brightness;
|
|
178
|
+
if (this.accessory.context.Brightness !== this.LightBulb.Brightness) {
|
|
179
|
+
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
|
|
180
|
+
} else {
|
|
181
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
|
|
182
|
+
}
|
|
213
183
|
|
|
214
184
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} color: ${JSON.stringify(color)}`);
|
|
215
185
|
const [red, green, blue] = color!.split(':');
|
|
@@ -223,13 +193,28 @@ export class StripLight {
|
|
|
223
193
|
);
|
|
224
194
|
|
|
225
195
|
// Hue
|
|
226
|
-
this.Hue = hue;
|
|
227
|
-
|
|
196
|
+
this.LightBulb.Hue = hue;
|
|
197
|
+
if (this.accessory.context.Hue !== this.LightBulb.Hue) {
|
|
198
|
+
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.LightBulb.Hue}`);
|
|
199
|
+
} else {
|
|
200
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.LightBulb.Hue}`);
|
|
201
|
+
}
|
|
228
202
|
|
|
229
203
|
// Saturation
|
|
230
|
-
this.Saturation = saturation;
|
|
231
|
-
|
|
232
|
-
|
|
204
|
+
this.LightBulb.Saturation = saturation;
|
|
205
|
+
if (this.accessory.context.Saturation !== this.LightBulb.Saturation) {
|
|
206
|
+
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.LightBulb.Saturation}`);
|
|
207
|
+
} else {
|
|
208
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.LightBulb.Saturation}`);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// ColorTemperature
|
|
212
|
+
this.LightBulb.ColorTemperature = colorTemperature;
|
|
213
|
+
if (this.accessory.context.ColorTemperature !== this.LightBulb.ColorTemperature) {
|
|
214
|
+
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.LightBulb.ColorTemperature}`);
|
|
215
|
+
} else {
|
|
216
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.LightBulb.ColorTemperature}`);
|
|
217
|
+
}
|
|
233
218
|
this.updateHomeKitCharacteristics();
|
|
234
219
|
} catch (e: any) {
|
|
235
220
|
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
@@ -261,56 +246,71 @@ export class StripLight {
|
|
|
261
246
|
});
|
|
262
247
|
}
|
|
263
248
|
|
|
264
|
-
|
|
265
|
-
* Parse the device status from the SwitchBot api
|
|
266
|
-
*/
|
|
267
|
-
async parseStatus(): Promise<void> {
|
|
268
|
-
if (!this.device.enableCloudService && this.OpenAPI) {
|
|
269
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} parseStatus enableCloudService: ${this.device.enableCloudService}`);
|
|
270
|
-
} else if (this.BLE) {
|
|
271
|
-
await this.BLEparseStatus();
|
|
272
|
-
} else if (this.OpenAPI && this.platform.config.credentials?.token) {
|
|
273
|
-
await this.openAPIparseStatus();
|
|
274
|
-
} else {
|
|
275
|
-
await this.offlineOff();
|
|
276
|
-
this.debugWarnLog(
|
|
277
|
-
`${this.device.deviceType}: ${this.accessory.displayName} Connection Type:` + ` ${this.device.connectionType}, parseStatus will not happen.`,
|
|
278
|
-
);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
async BLEparseStatus(): Promise<void> {
|
|
249
|
+
async BLEparseStatus(serviceData: serviceData): Promise<void> {
|
|
283
250
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEparseStatus`);
|
|
284
251
|
// State
|
|
285
|
-
switch (
|
|
252
|
+
switch (serviceData.state) {
|
|
286
253
|
case 'on':
|
|
287
|
-
this.On = true;
|
|
254
|
+
this.LightBulb.On = true;
|
|
288
255
|
break;
|
|
289
256
|
default:
|
|
290
|
-
this.On = false;
|
|
257
|
+
this.LightBulb.On = false;
|
|
258
|
+
}
|
|
259
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
|
|
260
|
+
|
|
261
|
+
// Brightness
|
|
262
|
+
this.LightBulb.Brightness = Number(serviceData.brightness);
|
|
263
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
|
|
264
|
+
|
|
265
|
+
// Color, Hue & Brightness
|
|
266
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} red: ${serviceData.red}`);
|
|
267
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} green: ${serviceData.green}`);
|
|
268
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} blue: ${serviceData.blue}`);
|
|
269
|
+
|
|
270
|
+
const [hue, saturation] = rgb2hs(Number(serviceData.red), Number(serviceData.green), Number(serviceData.blue));
|
|
271
|
+
this.debugLog(
|
|
272
|
+
`${this.device.deviceType}: ${this.accessory.displayName}` +
|
|
273
|
+
` hs: ${JSON.stringify(rgb2hs(Number(serviceData.red), Number(serviceData.green), Number(serviceData.blue)))}`,
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
// Hue
|
|
277
|
+
this.LightBulb.Hue = hue;
|
|
278
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.LightBulb.Hue}`);
|
|
279
|
+
|
|
280
|
+
// Saturation
|
|
281
|
+
this.LightBulb.Saturation = saturation;
|
|
282
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.LightBulb.Saturation}`);
|
|
283
|
+
|
|
284
|
+
// ColorTemperature
|
|
285
|
+
if (serviceData.color_temperature) {
|
|
286
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${serviceData.color_temperature}`);
|
|
287
|
+
this.LightBulb.ColorTemperature = serviceData.color_temperature!;
|
|
288
|
+
|
|
289
|
+
this.LightBulb.ColorTemperature = Math.max(Math.min(this.LightBulb.ColorTemperature, 500), 140);
|
|
290
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.LightBulb.ColorTemperature}`);
|
|
291
291
|
}
|
|
292
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
|
|
293
292
|
}
|
|
294
293
|
|
|
295
|
-
async openAPIparseStatus(): Promise<void> {
|
|
294
|
+
async openAPIparseStatus(deviceStatus: deviceStatus): Promise<void> {
|
|
295
|
+
|
|
296
296
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIparseStatus`);
|
|
297
|
-
switch (
|
|
297
|
+
switch (deviceStatus.body.power) {
|
|
298
298
|
case 'on':
|
|
299
|
-
this.On = true;
|
|
299
|
+
this.LightBulb.On = true;
|
|
300
300
|
break;
|
|
301
301
|
default:
|
|
302
|
-
this.On = false;
|
|
302
|
+
this.LightBulb.On = false;
|
|
303
303
|
}
|
|
304
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
|
|
304
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
|
|
305
305
|
|
|
306
306
|
// Brightness
|
|
307
|
-
this.Brightness = Number(
|
|
308
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.Brightness}`);
|
|
307
|
+
this.LightBulb.Brightness = Number(deviceStatus.body.brightness);
|
|
308
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
|
|
309
309
|
|
|
310
310
|
// Color, Hue & Brightness
|
|
311
|
-
if (
|
|
312
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} color: ${JSON.stringify(
|
|
313
|
-
const [red, green, blue] =
|
|
311
|
+
if (deviceStatus.body.color) {
|
|
312
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} color: ${JSON.stringify(deviceStatus.body.color)}`);
|
|
313
|
+
const [red, green, blue] = deviceStatus.body.color!.split(':');
|
|
314
314
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} red: ${JSON.stringify(red)}`);
|
|
315
315
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} green: ${JSON.stringify(green)}`);
|
|
316
316
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} blue: ${JSON.stringify(blue)}`);
|
|
@@ -321,17 +321,25 @@ export class StripLight {
|
|
|
321
321
|
);
|
|
322
322
|
|
|
323
323
|
// Hue
|
|
324
|
-
this.Hue = hue;
|
|
325
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.Hue}`);
|
|
324
|
+
this.LightBulb.Hue = hue;
|
|
325
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.LightBulb.Hue}`);
|
|
326
326
|
|
|
327
327
|
// Saturation
|
|
328
|
-
this.Saturation = saturation;
|
|
329
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.Saturation}`);
|
|
328
|
+
this.LightBulb.Saturation = saturation;
|
|
329
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.LightBulb.Saturation}`);
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
-
//
|
|
333
|
-
|
|
334
|
-
this.
|
|
332
|
+
// Firmware Version
|
|
333
|
+
const version = deviceStatus.body.version?.toString();
|
|
334
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
|
|
335
|
+
if (deviceStatus.body.version) {
|
|
336
|
+
this.accessory.context.version = version?.replace(/^V|-.*$/g, '');
|
|
337
|
+
this.accessory
|
|
338
|
+
.getService(this.hap.Service.AccessoryInformation)!
|
|
339
|
+
.setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
|
|
340
|
+
.getCharacteristic(this.hap.Characteristic.FirmwareRevision)
|
|
341
|
+
.updateValue(this.accessory.context.version);
|
|
342
|
+
}
|
|
335
343
|
}
|
|
336
344
|
|
|
337
345
|
/**
|
|
@@ -366,96 +374,43 @@ export class StripLight {
|
|
|
366
374
|
// Start to monitor advertisement packets
|
|
367
375
|
(async () => {
|
|
368
376
|
// Start to monitor advertisement packets
|
|
369
|
-
await switchbot.startScan({
|
|
370
|
-
model: 'r',
|
|
371
|
-
id: this.device.bleMac,
|
|
372
|
-
});
|
|
377
|
+
await switchbot.startScan({ model: this.device.bleModel, id: this.device.bleMac });
|
|
373
378
|
// Set an event handler
|
|
374
379
|
switchbot.onadvertisement = (ad: any) => {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
380
|
+
if (this.device.bleMac === ad.address && ad.model === this.device.bleModel) {
|
|
381
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ${JSON.stringify(ad, null, ' ')}`);
|
|
382
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} address: ${ad.address}, model: ${ad.model}`);
|
|
378
383
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
|
|
379
384
|
} else {
|
|
380
385
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
|
|
381
386
|
}
|
|
382
387
|
};
|
|
383
|
-
// Wait
|
|
388
|
+
// Wait 10 seconds
|
|
384
389
|
await switchbot.wait(this.scanDuration * 1000);
|
|
385
390
|
// Stop to monitor
|
|
386
391
|
await switchbot.stopScan();
|
|
387
392
|
// Update HomeKit
|
|
388
|
-
await this.BLEparseStatus();
|
|
393
|
+
await this.BLEparseStatus(switchbot.onadvertisement.serviceData);
|
|
389
394
|
await this.updateHomeKitCharacteristics();
|
|
390
395
|
})();
|
|
391
|
-
|
|
392
|
-
switchbot
|
|
393
|
-
.startScan({
|
|
394
|
-
model: 'r',
|
|
395
|
-
id: this.device.bleMac,
|
|
396
|
-
})
|
|
397
|
-
.then(async () => {
|
|
398
|
-
// Set an event handler
|
|
399
|
-
switchbot.onadvertisement = async (ad: ad) => {
|
|
400
|
-
this.debugLog(
|
|
401
|
-
`${this.device.deviceType}: ${this.accessory.displayName} Config BLE Address: ${this.device.bleMac},` +
|
|
402
|
-
` BLE Address Found: ${ad.address}`,
|
|
403
|
-
);
|
|
404
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
|
|
405
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
|
|
406
|
-
this.debugLog(
|
|
407
|
-
`${this.device.deviceType}: ${this.accessory.displayName} state: ${ad.serviceData.state}, ` +
|
|
408
|
-
`delay: ${ad.serviceData.delay}, timer: ${ad.serviceData.timer}, syncUtcTime: ${ad.serviceData.syncUtcTime} ` +
|
|
409
|
-
`wifiRssi: ${ad.serviceData.wifiRssi}, overload: ${ad.serviceData.overload}, currentPower: ${ad.serviceData.currentPower}`,
|
|
410
|
-
);
|
|
411
|
-
|
|
412
|
-
if (ad.serviceData) {
|
|
413
|
-
this.BLE_IsConnected = true;
|
|
414
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} connected: ${this.BLE_IsConnected}`);
|
|
415
|
-
await this.stopScanning(switchbot);
|
|
416
|
-
} else {
|
|
417
|
-
this.BLE_IsConnected = false;
|
|
418
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} connected: ${this.BLE_IsConnected}`);
|
|
419
|
-
}
|
|
420
|
-
};
|
|
421
|
-
// Wait
|
|
422
|
-
return await sleep(this.scanDuration * 1000);
|
|
423
|
-
})
|
|
424
|
-
.then(async () => {
|
|
425
|
-
// Stop to monitor
|
|
426
|
-
await this.stopScanning(switchbot);
|
|
427
|
-
})
|
|
428
|
-
.catch(async (e: any) => {
|
|
429
|
-
this.apiError(e);
|
|
430
|
-
this.errorLog(
|
|
431
|
-
`${this.device.deviceType}: ${this.accessory.displayName} failed BLERefreshStatus with ${this.device.connectionType}` +
|
|
432
|
-
` Connection, Error Message: ${JSON.stringify(e.message)}`,
|
|
433
|
-
);
|
|
434
|
-
await this.BLERefreshConnection(switchbot);
|
|
435
|
-
});
|
|
436
|
-
} else {
|
|
396
|
+
if (switchbot === undefined) {
|
|
437
397
|
await this.BLERefreshConnection(switchbot);
|
|
438
|
-
}
|
|
398
|
+
}
|
|
439
399
|
}
|
|
440
400
|
|
|
441
401
|
async openAPIRefreshStatus(): Promise<void> {
|
|
442
402
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIRefreshStatus`);
|
|
443
403
|
try {
|
|
444
|
-
const { body, statusCode } = await
|
|
445
|
-
headers: this.platform.generateHeaders()
|
|
446
|
-
});
|
|
404
|
+
const { body, statusCode } = await this.platform.retryRequest(this.deviceMaxRetries, this.deviceDelayBetweenRetries,
|
|
405
|
+
`${Devices}/${this.device.deviceId}/status`, { headers: this.platform.generateHeaders() });
|
|
447
406
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} statusCode: ${statusCode}`);
|
|
448
407
|
const deviceStatus: any = await body.json();
|
|
449
408
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus: ${JSON.stringify(deviceStatus)}`);
|
|
450
409
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
|
|
451
410
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
452
|
-
this.
|
|
411
|
+
this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
453
412
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
454
|
-
this.
|
|
455
|
-
this.OpenAPI_RGB = deviceStatus.body.color;
|
|
456
|
-
this.OpenAPI_Brightness = deviceStatus.body.brightness;
|
|
457
|
-
this.OpenAPI_FirmwareRevision = deviceStatus.body.version;
|
|
458
|
-
this.openAPIparseStatus();
|
|
413
|
+
this.openAPIparseStatus(deviceStatus);
|
|
459
414
|
this.updateHomeKitCharacteristics();
|
|
460
415
|
} else {
|
|
461
416
|
this.statusCode(statusCode);
|
|
@@ -504,8 +459,9 @@ export class StripLight {
|
|
|
504
459
|
|
|
505
460
|
async BLEpushChanges(): Promise<void> {
|
|
506
461
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushChanges`);
|
|
507
|
-
if (this.On !== this.accessory.context.On) {
|
|
508
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushChanges
|
|
462
|
+
if (this.LightBulb.On !== this.accessory.context.On) {
|
|
463
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushChanges`
|
|
464
|
+
+ ` On: ${this.LightBulb.On} OnCached: ${this.accessory.context.On}`);
|
|
509
465
|
const switchbot = await this.platform.connectBLE();
|
|
510
466
|
// Convert to BLE Address
|
|
511
467
|
this.device.bleMac = this.device
|
|
@@ -519,11 +475,11 @@ export class StripLight {
|
|
|
519
475
|
id: this.device.bleMac,
|
|
520
476
|
})
|
|
521
477
|
.then(async (device_list: any) => {
|
|
522
|
-
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
|
|
523
|
-
return await this.
|
|
524
|
-
max: this.
|
|
478
|
+
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
|
|
479
|
+
return await this.retryBLE({
|
|
480
|
+
max: await this.maxRetryBLE(),
|
|
525
481
|
fn: async () => {
|
|
526
|
-
if (this.On) {
|
|
482
|
+
if (this.LightBulb.On) {
|
|
527
483
|
return await device_list[0].turnOn({ id: this.device.bleMac });
|
|
528
484
|
} else {
|
|
529
485
|
return await device_list[0].turnOff({ id: this.device.bleMac });
|
|
@@ -533,34 +489,40 @@ export class StripLight {
|
|
|
533
489
|
})
|
|
534
490
|
.then(() => {
|
|
535
491
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
|
|
536
|
-
this.
|
|
492
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
493
|
+
+ `On: ${this.LightBulb.On} sent over BLE, sent successfully`);
|
|
494
|
+
this.LightBulb.On = false;
|
|
537
495
|
})
|
|
538
496
|
.catch(async (e: any) => {
|
|
539
497
|
this.apiError(e);
|
|
540
|
-
this.errorLog(
|
|
541
|
-
|
|
542
|
-
` Connection, Error Message: ${JSON.stringify(e.message)}`,
|
|
543
|
-
);
|
|
498
|
+
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} failed BLEpushChanges with ${this.device.connectionType}` +
|
|
499
|
+
` Connection, Error Message: ${JSON.stringify(e.message)}`);
|
|
544
500
|
await this.BLEPushConnection();
|
|
545
501
|
});
|
|
546
502
|
// Push Brightness Update
|
|
547
|
-
if (this.On) {
|
|
503
|
+
if (this.LightBulb.On) {
|
|
548
504
|
await this.BLEpushBrightnessChanges();
|
|
549
505
|
}
|
|
550
506
|
// Push Hue & Saturation Update
|
|
551
|
-
if (this.On) {
|
|
507
|
+
if (this.LightBulb.On) {
|
|
552
508
|
await this.BLEpushRGBChanges();
|
|
553
509
|
}
|
|
510
|
+
if (this.LightBulb.ColorTemperature !== this.accessory.context.ColorTemperature) {
|
|
511
|
+
const kelvin = Math.round(1000000 / Number(this.LightBulb.ColorTemperature));
|
|
512
|
+
this.accessory.context.kelvin = kelvin;
|
|
513
|
+
} else {
|
|
514
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushColorTemperatureChanges.`
|
|
515
|
+
+ `ColorTemperature: ${this.LightBulb.ColorTemperature}, ColorTemperatureCached: ${this.accessory.context.ColorTemperature}`);
|
|
516
|
+
}
|
|
554
517
|
} else {
|
|
555
|
-
this.debugLog(
|
|
556
|
-
|
|
557
|
-
);
|
|
518
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushChanges,`
|
|
519
|
+
+ ` On: ${this.LightBulb.On}, OnCached: ${this.accessory.context.On}`);
|
|
558
520
|
}
|
|
559
521
|
}
|
|
560
522
|
|
|
561
523
|
async BLEpushBrightnessChanges(): Promise<void> {
|
|
562
524
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushBrightnessChanges`);
|
|
563
|
-
if (this.Brightness !== this.accessory.context.Brightness) {
|
|
525
|
+
if (this.LightBulb.Brightness !== this.accessory.context.Brightness) {
|
|
564
526
|
const switchbot = await this.platform.connectBLE();
|
|
565
527
|
// Convert to BLE Address
|
|
566
528
|
this.device.bleMac = this.device
|
|
@@ -574,12 +536,12 @@ export class StripLight {
|
|
|
574
536
|
id: this.device.bleMac,
|
|
575
537
|
})
|
|
576
538
|
.then(async (device_list: any) => {
|
|
577
|
-
this.infoLog(`${this.accessory.displayName} Target Brightness: ${this.Brightness}`);
|
|
578
|
-
return await device_list[0].setBrightness(this.Brightness);
|
|
539
|
+
this.infoLog(`${this.accessory.displayName} Target Brightness: ${this.LightBulb.Brightness}`);
|
|
540
|
+
return await device_list[0].setBrightness(this.LightBulb.Brightness);
|
|
579
541
|
})
|
|
580
542
|
.then(() => {
|
|
581
543
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
|
|
582
|
-
this.On = false;
|
|
544
|
+
this.LightBulb.On = false;
|
|
583
545
|
})
|
|
584
546
|
.catch(async (e: any) => {
|
|
585
547
|
this.apiError(e);
|
|
@@ -592,7 +554,7 @@ export class StripLight {
|
|
|
592
554
|
} else {
|
|
593
555
|
this.debugLog(
|
|
594
556
|
`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushBrightnessChanges.` +
|
|
595
|
-
`Brightness: ${this.Brightness}, ` +
|
|
557
|
+
`Brightness: ${this.LightBulb.Brightness}, ` +
|
|
596
558
|
`BrightnessCached: ${this.accessory.context.Brightness}`,
|
|
597
559
|
);
|
|
598
560
|
}
|
|
@@ -600,11 +562,11 @@ export class StripLight {
|
|
|
600
562
|
|
|
601
563
|
async BLEpushRGBChanges(): Promise<void> {
|
|
602
564
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushRGBChanges`);
|
|
603
|
-
if (this.Hue !== this.accessory.context.Hue || this.Saturation !== this.accessory.context.Saturation) {
|
|
604
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${JSON.stringify(this.Hue)}`);
|
|
605
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${JSON.stringify(this.Saturation)}`);
|
|
565
|
+
if (this.LightBulb.Hue !== this.accessory.context.Hue || this.LightBulb.Saturation !== this.accessory.context.Saturation) {
|
|
566
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${JSON.stringify(this.LightBulb.Hue)}`);
|
|
567
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${JSON.stringify(this.LightBulb.Saturation)}`);
|
|
606
568
|
|
|
607
|
-
const [red, green, blue] = hs2rgb(Number(this.Hue), Number(this.Saturation));
|
|
569
|
+
const [red, green, blue] = hs2rgb(Number(this.LightBulb.Hue), Number(this.LightBulb.Saturation));
|
|
608
570
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} rgb: ${JSON.stringify([red, green, blue])}`);
|
|
609
571
|
|
|
610
572
|
const switchbot = await this.platform.connectBLE();
|
|
@@ -620,12 +582,12 @@ export class StripLight {
|
|
|
620
582
|
id: this.device.bleMac,
|
|
621
583
|
})
|
|
622
584
|
.then(async (device_list: any) => {
|
|
623
|
-
this.infoLog(`${this.accessory.displayName} Target RGB: ${(this.Brightness, red, green, blue)}`);
|
|
624
|
-
return await device_list[0].setRGB(this.Brightness, red, green, blue);
|
|
585
|
+
this.infoLog(`${this.accessory.displayName} Target RGB: ${(this.LightBulb.Brightness, red, green, blue)}`);
|
|
586
|
+
return await device_list[0].setRGB(this.LightBulb.Brightness, red, green, blue);
|
|
625
587
|
})
|
|
626
588
|
.then(() => {
|
|
627
589
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
|
|
628
|
-
this.On = false;
|
|
590
|
+
this.LightBulb.On = false;
|
|
629
591
|
})
|
|
630
592
|
.catch(async (e: any) => {
|
|
631
593
|
this.apiError(e);
|
|
@@ -637,17 +599,17 @@ export class StripLight {
|
|
|
637
599
|
});
|
|
638
600
|
} else {
|
|
639
601
|
this.debugLog(
|
|
640
|
-
`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushRGBChanges. Hue: ${this.Hue}, ` +
|
|
641
|
-
`HueCached: ${this.accessory.context.Hue}, Saturation: ${this.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`,
|
|
602
|
+
`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushRGBChanges. Hue: ${this.LightBulb.Hue}, ` +
|
|
603
|
+
`HueCached: ${this.accessory.context.Hue}, Saturation: ${this.LightBulb.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`,
|
|
642
604
|
);
|
|
643
605
|
}
|
|
644
606
|
}
|
|
645
607
|
|
|
646
608
|
async openAPIpushChanges() {
|
|
647
609
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIpushChanges`);
|
|
648
|
-
if (this.On !== this.accessory.context.On) {
|
|
649
|
-
const command = this.On ? 'turnOn' : 'turnOff';
|
|
650
|
-
/*if (this.On) {
|
|
610
|
+
if (this.LightBulb.On !== this.accessory.context.On) {
|
|
611
|
+
const command = this.LightBulb.On ? 'turnOn' : 'turnOff';
|
|
612
|
+
/*if (this.LightBulb.On) {
|
|
651
613
|
command = 'turnOn';
|
|
652
614
|
} else {
|
|
653
615
|
command = 'turnOff';
|
|
@@ -672,6 +634,8 @@ export class StripLight {
|
|
|
672
634
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
673
635
|
this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
674
636
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
637
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
638
|
+
+ `request to SwitchBot API, body: ${JSON.stringify(deviceStatus)} sent successfully`);
|
|
675
639
|
} else {
|
|
676
640
|
this.statusCode(statusCode);
|
|
677
641
|
this.statusCode(deviceStatus.statusCode);
|
|
@@ -686,26 +650,26 @@ export class StripLight {
|
|
|
686
650
|
} else {
|
|
687
651
|
this.debugLog(
|
|
688
652
|
`${this.device.deviceType}: ${this.accessory.displayName} No openAPIpushChanges.` +
|
|
689
|
-
`On: ${this.On}, ` +
|
|
653
|
+
`On: ${this.LightBulb.On}, ` +
|
|
690
654
|
`OnCached: ${this.accessory.context.On}`,
|
|
691
655
|
);
|
|
692
656
|
}
|
|
693
657
|
// Push Hue & Saturation Update
|
|
694
|
-
if (this.On) {
|
|
658
|
+
if (this.LightBulb.On) {
|
|
695
659
|
await this.pushHueSaturationChanges();
|
|
696
660
|
}
|
|
697
661
|
// Push Brightness Update
|
|
698
|
-
if (this.On) {
|
|
662
|
+
if (this.LightBulb.On) {
|
|
699
663
|
await this.pushBrightnessChanges();
|
|
700
664
|
}
|
|
701
665
|
}
|
|
702
666
|
|
|
703
667
|
async pushHueSaturationChanges(): Promise<void> {
|
|
704
668
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} pushHueSaturationChanges`);
|
|
705
|
-
if (this.Hue !== this.accessory.context.Hue || this.Saturation !== this.accessory.context.Saturation) {
|
|
706
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${JSON.stringify(this.Hue)}`);
|
|
707
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${JSON.stringify(this.Saturation)}`);
|
|
708
|
-
const [red, green, blue] = hs2rgb(Number(this.Hue), Number(this.Saturation));
|
|
669
|
+
if (this.LightBulb.Hue !== this.accessory.context.Hue || this.LightBulb.Saturation !== this.accessory.context.Saturation) {
|
|
670
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${JSON.stringify(this.LightBulb.Hue)}`);
|
|
671
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${JSON.stringify(this.LightBulb.Saturation)}`);
|
|
672
|
+
const [red, green, blue] = hs2rgb(Number(this.LightBulb.Hue), Number(this.LightBulb.Saturation));
|
|
709
673
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} rgb: ${JSON.stringify([red, green, blue])}`);
|
|
710
674
|
// Make Push On request to the API
|
|
711
675
|
const bodyChange = JSON.stringify({
|
|
@@ -728,6 +692,8 @@ export class StripLight {
|
|
|
728
692
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
729
693
|
this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
730
694
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
695
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
696
|
+
+ `request to SwitchBot API, body: ${JSON.stringify(deviceStatus)} sent successfully`);
|
|
731
697
|
} else {
|
|
732
698
|
this.statusCode(statusCode);
|
|
733
699
|
this.statusCode(deviceStatus.statusCode);
|
|
@@ -741,18 +707,18 @@ export class StripLight {
|
|
|
741
707
|
}
|
|
742
708
|
} else {
|
|
743
709
|
this.debugLog(
|
|
744
|
-
`${this.device.deviceType}: ${this.accessory.displayName} No pushHueSaturationChanges. Hue: ${this.Hue}, ` +
|
|
745
|
-
`HueCached: ${this.accessory.context.Hue}, Saturation: ${this.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`,
|
|
710
|
+
`${this.device.deviceType}: ${this.accessory.displayName} No pushHueSaturationChanges. Hue: ${this.LightBulb.Hue}, ` +
|
|
711
|
+
`HueCached: ${this.accessory.context.Hue}, Saturation: ${this.LightBulb.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`,
|
|
746
712
|
);
|
|
747
713
|
}
|
|
748
714
|
}
|
|
749
715
|
|
|
750
716
|
async pushBrightnessChanges(): Promise<void> {
|
|
751
717
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} pushBrightnessChanges`);
|
|
752
|
-
if (this.Brightness !== this.accessory.context.Brightness) {
|
|
718
|
+
if (this.LightBulb.Brightness !== this.accessory.context.Brightness) {
|
|
753
719
|
const bodyChange = JSON.stringify({
|
|
754
720
|
command: 'setBrightness',
|
|
755
|
-
parameter: `${this.Brightness}`,
|
|
721
|
+
parameter: `${this.LightBulb.Brightness}`,
|
|
756
722
|
commandType: 'command',
|
|
757
723
|
});
|
|
758
724
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Sending request to SwitchBot API, body: ${bodyChange},`);
|
|
@@ -770,6 +736,8 @@ export class StripLight {
|
|
|
770
736
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
771
737
|
this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
772
738
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
739
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
740
|
+
+ `request to SwitchBot API, body: ${JSON.stringify(deviceStatus)} sent successfully`);
|
|
773
741
|
} else {
|
|
774
742
|
this.statusCode(statusCode);
|
|
775
743
|
this.statusCode(deviceStatus.statusCode);
|
|
@@ -784,7 +752,7 @@ export class StripLight {
|
|
|
784
752
|
} else {
|
|
785
753
|
this.debugLog(
|
|
786
754
|
`${this.device.deviceType}: ${this.accessory.displayName} No pushBrightnessChanges,` +
|
|
787
|
-
`Brightness: ${this.Brightness}, ` +
|
|
755
|
+
`Brightness: ${this.LightBulb.Brightness}, ` +
|
|
788
756
|
`BrightnessCached: ${this.accessory.context.Brightness}`,
|
|
789
757
|
);
|
|
790
758
|
}
|
|
@@ -794,13 +762,13 @@ export class StripLight {
|
|
|
794
762
|
* Handle requests to set the value of the "On" characteristic
|
|
795
763
|
*/
|
|
796
764
|
async OnSet(value: CharacteristicValue): Promise<void> {
|
|
797
|
-
if (this.On === this.accessory.context.On) {
|
|
765
|
+
if (this.LightBulb.On === this.accessory.context.On) {
|
|
798
766
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set On: ${value}`);
|
|
799
767
|
} else {
|
|
800
768
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set On: ${value}`);
|
|
801
769
|
}
|
|
802
770
|
|
|
803
|
-
this.On = value;
|
|
771
|
+
this.LightBulb.On = value;
|
|
804
772
|
this.doStripLightUpdate.next();
|
|
805
773
|
}
|
|
806
774
|
|
|
@@ -808,15 +776,15 @@ export class StripLight {
|
|
|
808
776
|
* Handle requests to set the value of the "Brightness" characteristic
|
|
809
777
|
*/
|
|
810
778
|
async BrightnessSet(value: CharacteristicValue): Promise<void> {
|
|
811
|
-
if (this.Brightness === this.accessory.context.Brightness) {
|
|
779
|
+
if (this.LightBulb.Brightness === this.accessory.context.Brightness) {
|
|
812
780
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Brightness: ${value}`);
|
|
813
|
-
} else if (this.On) {
|
|
781
|
+
} else if (this.LightBulb.On) {
|
|
814
782
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Brightness: ${value}`);
|
|
815
783
|
} else {
|
|
816
784
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Brightness: ${value}`);
|
|
817
785
|
}
|
|
818
786
|
|
|
819
|
-
this.Brightness = value;
|
|
787
|
+
this.LightBulb.Brightness = value;
|
|
820
788
|
this.doStripLightUpdate.next();
|
|
821
789
|
}
|
|
822
790
|
|
|
@@ -824,30 +792,31 @@ export class StripLight {
|
|
|
824
792
|
* Handle requests to set the value of the "ColorTemperature" characteristic
|
|
825
793
|
*/
|
|
826
794
|
async ColorTemperatureSet(value: CharacteristicValue): Promise<void> {
|
|
827
|
-
if (this.ColorTemperature === this.accessory.context.ColorTemperature) {
|
|
795
|
+
if (this.LightBulb.ColorTemperature === this.accessory.context.ColorTemperature) {
|
|
828
796
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set ColorTemperature: ${value}`);
|
|
829
|
-
} else if (this.On) {
|
|
797
|
+
} else if (this.LightBulb.On) {
|
|
830
798
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set ColorTemperature: ${value}`);
|
|
831
799
|
} else {
|
|
832
800
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set ColorTemperature: ${value}`);
|
|
833
801
|
}
|
|
834
802
|
|
|
803
|
+
const minKelvin = 2000;
|
|
804
|
+
const maxKelvin = 9000;
|
|
835
805
|
// Convert mired to kelvin to nearest 100 (SwitchBot seems to need this)
|
|
836
806
|
const kelvin = Math.round(1000000 / Number(value) / 100) * 100;
|
|
837
|
-
|
|
838
807
|
// Check and increase/decrease kelvin to range of device
|
|
839
|
-
const k = Math.min(Math.max(kelvin,
|
|
808
|
+
const k = Math.min(Math.max(kelvin, minKelvin), maxKelvin);
|
|
840
809
|
|
|
841
|
-
if (!this.accessory.context.On || this.
|
|
810
|
+
if (!this.accessory.context.On || this.accessory.context.maxKelvin === k) {
|
|
842
811
|
return;
|
|
843
812
|
}
|
|
844
813
|
|
|
845
814
|
// Updating the hue/sat to the corresponding values mimics native adaptive lighting
|
|
846
815
|
const hs = m2hs(value);
|
|
847
|
-
this.
|
|
848
|
-
this.
|
|
816
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Hue, hs[0]);
|
|
817
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Saturation, hs[1]);
|
|
849
818
|
|
|
850
|
-
this.ColorTemperature = value;
|
|
819
|
+
this.LightBulb.ColorTemperature = value;
|
|
851
820
|
this.doStripLightUpdate.next();
|
|
852
821
|
}
|
|
853
822
|
|
|
@@ -855,17 +824,17 @@ export class StripLight {
|
|
|
855
824
|
* Handle requests to set the value of the "Hue" characteristic
|
|
856
825
|
*/
|
|
857
826
|
async HueSet(value: CharacteristicValue): Promise<void> {
|
|
858
|
-
if (this.Hue === this.accessory.context.Hue) {
|
|
827
|
+
if (this.LightBulb.Hue === this.accessory.context.Hue) {
|
|
859
828
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Hue: ${value}`);
|
|
860
|
-
} else if (this.On) {
|
|
829
|
+
} else if (this.LightBulb.On) {
|
|
861
830
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Hue: ${value}`);
|
|
862
831
|
} else {
|
|
863
832
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Hue: ${value}`);
|
|
864
833
|
}
|
|
865
834
|
|
|
866
|
-
this.
|
|
835
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, 140);
|
|
867
836
|
|
|
868
|
-
this.Hue = value;
|
|
837
|
+
this.LightBulb.Hue = value;
|
|
869
838
|
this.doStripLightUpdate.next();
|
|
870
839
|
}
|
|
871
840
|
|
|
@@ -873,89 +842,61 @@ export class StripLight {
|
|
|
873
842
|
* Handle requests to set the value of the "Saturation" characteristic
|
|
874
843
|
*/
|
|
875
844
|
async SaturationSet(value: CharacteristicValue): Promise<void> {
|
|
876
|
-
if (this.Saturation === this.accessory.context.Saturation) {
|
|
845
|
+
if (this.LightBulb.Saturation === this.accessory.context.Saturation) {
|
|
877
846
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Saturation: ${value}`);
|
|
878
|
-
} else if (this.On) {
|
|
847
|
+
} else if (this.LightBulb.On) {
|
|
879
848
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Saturation: ${value}`);
|
|
880
849
|
} else {
|
|
881
850
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Saturation: ${value}`);
|
|
882
851
|
}
|
|
883
852
|
|
|
884
|
-
this.
|
|
853
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, 140);
|
|
885
854
|
|
|
886
|
-
this.Saturation = value;
|
|
855
|
+
this.LightBulb.Saturation = value;
|
|
887
856
|
this.doStripLightUpdate.next();
|
|
888
857
|
}
|
|
889
858
|
|
|
890
859
|
async updateHomeKitCharacteristics(): Promise<void> {
|
|
891
860
|
// On
|
|
892
|
-
if (this.On === undefined) {
|
|
893
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
|
|
861
|
+
if (this.LightBulb.On === undefined) {
|
|
862
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
|
|
894
863
|
} else {
|
|
895
|
-
this.accessory.context.On = this.On;
|
|
896
|
-
this.
|
|
897
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic On: ${this.On}`);
|
|
864
|
+
this.accessory.context.On = this.LightBulb.On;
|
|
865
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.On, this.LightBulb.On);
|
|
866
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic On: ${this.LightBulb.On}`);
|
|
898
867
|
}
|
|
899
868
|
// Brightness
|
|
900
|
-
if (this.Brightness === undefined) {
|
|
901
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.Brightness}`);
|
|
869
|
+
if (this.LightBulb.Brightness === undefined) {
|
|
870
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
|
|
902
871
|
} else {
|
|
903
|
-
this.accessory.context.Brightness = this.Brightness;
|
|
904
|
-
this.
|
|
905
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Brightness: ${this.Brightness}`);
|
|
872
|
+
this.accessory.context.Brightness = this.LightBulb.Brightness;
|
|
873
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Brightness, this.LightBulb.Brightness);
|
|
874
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Brightness: ${this.LightBulb.Brightness}`);
|
|
906
875
|
}
|
|
907
876
|
// ColorTemperature
|
|
908
|
-
if (this.ColorTemperature === undefined) {
|
|
909
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.ColorTemperature}`);
|
|
877
|
+
if (this.LightBulb.ColorTemperature === undefined) {
|
|
878
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.LightBulb.ColorTemperature}`);
|
|
910
879
|
} else {
|
|
911
|
-
this.accessory.context.ColorTemperature = this.ColorTemperature;
|
|
912
|
-
this.
|
|
913
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic
|
|
880
|
+
this.accessory.context.ColorTemperature = this.LightBulb.ColorTemperature;
|
|
881
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, this.LightBulb.ColorTemperature);
|
|
882
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
|
|
883
|
+
+ ` ColorTemperature: ${this.LightBulb.ColorTemperature}`);
|
|
914
884
|
}
|
|
915
885
|
// Hue
|
|
916
|
-
if (this.Hue === undefined) {
|
|
917
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.Hue}`);
|
|
886
|
+
if (this.LightBulb.Hue === undefined) {
|
|
887
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.LightBulb.Hue}`);
|
|
918
888
|
} else {
|
|
919
|
-
this.accessory.context.Hue = this.Hue;
|
|
920
|
-
this.
|
|
921
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Hue: ${this.Hue}`);
|
|
889
|
+
this.accessory.context.Hue = this.LightBulb.Hue;
|
|
890
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Hue, this.LightBulb.Hue);
|
|
891
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Hue: ${this.LightBulb.Hue}`);
|
|
922
892
|
}
|
|
923
893
|
// Saturation
|
|
924
|
-
if (this.Saturation === undefined) {
|
|
925
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.Saturation}`);
|
|
926
|
-
} else {
|
|
927
|
-
this.accessory.context.Saturation = this.Saturation;
|
|
928
|
-
this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Saturation, this.Saturation);
|
|
929
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Saturation: ${this.Saturation}`);
|
|
930
|
-
}
|
|
931
|
-
}
|
|
932
|
-
|
|
933
|
-
async stopScanning(switchbot: any) {
|
|
934
|
-
switchbot.stopScan();
|
|
935
|
-
if (this.BLE_IsConnected) {
|
|
936
|
-
await this.BLEparseStatus();
|
|
937
|
-
await this.updateHomeKitCharacteristics();
|
|
894
|
+
if (this.LightBulb.Saturation === undefined) {
|
|
895
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.LightBulb.Saturation}`);
|
|
938
896
|
} else {
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
async getCustomBLEAddress(switchbot: any) {
|
|
944
|
-
if (this.device.customBLEaddress && this.deviceLogging.includes('debug')) {
|
|
945
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} customBLEaddress: ${this.device.customBLEaddress}`);
|
|
946
|
-
(async () => {
|
|
947
|
-
// Start to monitor advertisement packets
|
|
948
|
-
await switchbot.startScan({
|
|
949
|
-
model: 'r',
|
|
950
|
-
});
|
|
951
|
-
// Set an event handler
|
|
952
|
-
switchbot.onadvertisement = (ad: any) => {
|
|
953
|
-
this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} ad: ${JSON.stringify(ad, null, ' ')}`);
|
|
954
|
-
};
|
|
955
|
-
await sleep(10000);
|
|
956
|
-
// Stop to monitor
|
|
957
|
-
switchbot.stopScan();
|
|
958
|
-
})();
|
|
897
|
+
this.accessory.context.Saturation = this.LightBulb.Saturation;
|
|
898
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Saturation, this.LightBulb.Saturation);
|
|
899
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Saturation: ${this.LightBulb.Saturation}`);
|
|
959
900
|
}
|
|
960
901
|
}
|
|
961
902
|
|
|
@@ -975,33 +916,14 @@ export class StripLight {
|
|
|
975
916
|
}
|
|
976
917
|
}
|
|
977
918
|
|
|
978
|
-
async retry({ max, fn }: { max: number; fn: { (): any; (): Promise<any> } }): Promise<null> {
|
|
979
|
-
return fn().catch(async (e: any) => {
|
|
980
|
-
if (max === 0) {
|
|
981
|
-
throw e;
|
|
982
|
-
}
|
|
983
|
-
this.infoLog(e);
|
|
984
|
-
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Retrying`);
|
|
985
|
-
await sleep(1000);
|
|
986
|
-
return this.retry({ max: max - 1, fn });
|
|
987
|
-
});
|
|
988
|
-
}
|
|
989
|
-
|
|
990
|
-
maxRetry(): number {
|
|
991
|
-
if (this.device.maxRetry) {
|
|
992
|
-
return this.device.maxRetry;
|
|
993
|
-
} else {
|
|
994
|
-
return 5;
|
|
995
|
-
}
|
|
996
|
-
}
|
|
997
|
-
|
|
998
919
|
minStep(device: device & devicesConfig): number {
|
|
920
|
+
let set_minStep: number;
|
|
999
921
|
if (device.striplight?.set_minStep) {
|
|
1000
|
-
|
|
922
|
+
set_minStep = device.striplight?.set_minStep;
|
|
1001
923
|
} else {
|
|
1002
|
-
|
|
924
|
+
set_minStep = 1;
|
|
1003
925
|
}
|
|
1004
|
-
return
|
|
926
|
+
return set_minStep;
|
|
1005
927
|
}
|
|
1006
928
|
|
|
1007
929
|
async adaptiveLighting(device: device & devicesConfig): Promise<void> {
|
|
@@ -1014,254 +936,17 @@ export class StripLight {
|
|
|
1014
936
|
}
|
|
1015
937
|
}
|
|
1016
938
|
|
|
1017
|
-
async scan(device: device & devicesConfig): Promise<void> {
|
|
1018
|
-
if (device.scanDuration) {
|
|
1019
|
-
this.scanDuration = this.accessory.context.scanDuration = device.scanDuration;
|
|
1020
|
-
if (this.BLE) {
|
|
1021
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config scanDuration: ${this.scanDuration}`);
|
|
1022
|
-
}
|
|
1023
|
-
} else {
|
|
1024
|
-
this.scanDuration = this.accessory.context.scanDuration = 1;
|
|
1025
|
-
if (this.BLE) {
|
|
1026
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Default scanDuration: ${this.scanDuration}`);
|
|
1027
|
-
}
|
|
1028
|
-
}
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1031
|
-
async statusCode(statusCode: number): Promise<void> {
|
|
1032
|
-
switch (statusCode) {
|
|
1033
|
-
case 151:
|
|
1034
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Command not supported by this deviceType, statusCode: ${statusCode}`);
|
|
1035
|
-
break;
|
|
1036
|
-
case 152:
|
|
1037
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device not found, statusCode: ${statusCode}`);
|
|
1038
|
-
break;
|
|
1039
|
-
case 160:
|
|
1040
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Command is not supported, statusCode: ${statusCode}`);
|
|
1041
|
-
break;
|
|
1042
|
-
case 161:
|
|
1043
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device is offline, statusCode: ${statusCode}`);
|
|
1044
|
-
this.offlineOff();
|
|
1045
|
-
break;
|
|
1046
|
-
case 171:
|
|
1047
|
-
this.errorLog(
|
|
1048
|
-
`${this.device.deviceType}: ${this.accessory.displayName} Hub Device is offline, statusCode: ${statusCode}. ` +
|
|
1049
|
-
`Hub: ${this.device.hubDeviceId}`,
|
|
1050
|
-
);
|
|
1051
|
-
this.offlineOff();
|
|
1052
|
-
break;
|
|
1053
|
-
case 190:
|
|
1054
|
-
this.errorLog(
|
|
1055
|
-
`${this.device.deviceType}: ${this.accessory.displayName} Device internal error due to device states not synchronized with server,` +
|
|
1056
|
-
` Or command format is invalid, statusCode: ${statusCode}`,
|
|
1057
|
-
);
|
|
1058
|
-
break;
|
|
1059
|
-
case 100:
|
|
1060
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Command successfully sent, statusCode: ${statusCode}`);
|
|
1061
|
-
break;
|
|
1062
|
-
case 200:
|
|
1063
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Request successful, statusCode: ${statusCode}`);
|
|
1064
|
-
break;
|
|
1065
|
-
case 400:
|
|
1066
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Bad Request, The client has issued an invalid request. `
|
|
1067
|
-
+ `This is commonly used to specify validation errors in a request payload, statusCode: ${statusCode}`);
|
|
1068
|
-
break;
|
|
1069
|
-
case 401:
|
|
1070
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unauthorized, Authorization for the API is required, `
|
|
1071
|
-
+ `but the request has not been authenticated, statusCode: ${statusCode}`);
|
|
1072
|
-
break;
|
|
1073
|
-
case 403:
|
|
1074
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Forbidden, The request has been authenticated but does not `
|
|
1075
|
-
+ `have appropriate permissions, or a requested resource is not found, statusCode: ${statusCode}`);
|
|
1076
|
-
break;
|
|
1077
|
-
case 404:
|
|
1078
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Not Found, Specifies the requested path does not exist, `
|
|
1079
|
-
+ `statusCode: ${statusCode}`);
|
|
1080
|
-
break;
|
|
1081
|
-
case 406:
|
|
1082
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Not Acceptable, The client has requested a MIME type via `
|
|
1083
|
-
+ `the Accept header for a value not supported by the server, statusCode: ${statusCode}`);
|
|
1084
|
-
break;
|
|
1085
|
-
case 415:
|
|
1086
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unsupported Media Type, The client has defined a contentType `
|
|
1087
|
-
+ `header that is not supported by the server, statusCode: ${statusCode}`);
|
|
1088
|
-
break;
|
|
1089
|
-
case 422:
|
|
1090
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unprocessable Entity, The client has made a valid request, `
|
|
1091
|
-
+ `but the server cannot process it. This is often used for APIs for which certain limits have been exceeded, statusCode: ${statusCode}`);
|
|
1092
|
-
break;
|
|
1093
|
-
case 429:
|
|
1094
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Too Many Requests, The client has exceeded the number of `
|
|
1095
|
-
+ `requests allowed for a given time window, statusCode: ${statusCode}`);
|
|
1096
|
-
break;
|
|
1097
|
-
case 500:
|
|
1098
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Internal Server Error, An unexpected error on the SmartThings `
|
|
1099
|
-
+ `servers has occurred. These errors should be rare, statusCode: ${statusCode}`);
|
|
1100
|
-
break;
|
|
1101
|
-
default:
|
|
1102
|
-
this.infoLog(
|
|
1103
|
-
`${this.device.deviceType}: ${this.accessory.displayName} Unknown statusCode: ` +
|
|
1104
|
-
`${statusCode}, Submit Bugs Here: ' + 'https://tinyurl.com/SwitchBotBug`,
|
|
1105
|
-
);
|
|
1106
|
-
}
|
|
1107
|
-
}
|
|
1108
|
-
|
|
1109
939
|
async offlineOff(): Promise<void> {
|
|
1110
940
|
if (this.device.offline) {
|
|
1111
|
-
|
|
1112
|
-
await this.updateHomeKitCharacteristics();
|
|
1113
|
-
}
|
|
1114
|
-
}
|
|
1115
|
-
|
|
1116
|
-
apiError(e: any): void {
|
|
1117
|
-
this.lightBulbService.updateCharacteristic(this.hap.Characteristic.On, e);
|
|
1118
|
-
this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Hue, e);
|
|
1119
|
-
this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Brightness, e);
|
|
1120
|
-
this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Saturation, e);
|
|
1121
|
-
}
|
|
1122
|
-
|
|
1123
|
-
async deviceContext() {
|
|
1124
|
-
if (this.On === undefined) {
|
|
1125
|
-
this.On = false;
|
|
1126
|
-
} else {
|
|
1127
|
-
this.On = this.accessory.context.On;
|
|
1128
|
-
}
|
|
1129
|
-
if (this.Hue === undefined) {
|
|
1130
|
-
this.Hue = 0;
|
|
1131
|
-
} else {
|
|
1132
|
-
this.Hue = this.accessory.context.Hue;
|
|
1133
|
-
}
|
|
1134
|
-
if (this.Brightness === undefined) {
|
|
1135
|
-
this.Brightness = 0;
|
|
1136
|
-
} else {
|
|
1137
|
-
this.Brightness = this.accessory.context.Brightness;
|
|
1138
|
-
}
|
|
1139
|
-
if (this.Saturation === undefined) {
|
|
1140
|
-
this.Saturation = 0;
|
|
1141
|
-
} else {
|
|
1142
|
-
this.Saturation = this.accessory.context.Saturation;
|
|
1143
|
-
}
|
|
1144
|
-
if (this.ColorTemperature === undefined) {
|
|
1145
|
-
this.ColorTemperature = 140;
|
|
1146
|
-
} else {
|
|
1147
|
-
this.ColorTemperature = this.accessory.context.ColorTemperature;
|
|
1148
|
-
}
|
|
1149
|
-
this.minKelvin = 2000;
|
|
1150
|
-
this.maxKelvin = 9000;
|
|
1151
|
-
if (this.FirmwareRevision === undefined) {
|
|
1152
|
-
this.FirmwareRevision = this.platform.version;
|
|
1153
|
-
this.accessory.context.FirmwareRevision = this.FirmwareRevision;
|
|
1154
|
-
}
|
|
1155
|
-
}
|
|
1156
|
-
|
|
1157
|
-
async refreshRate(device: device & devicesConfig): Promise<void> {
|
|
1158
|
-
if (device.refreshRate) {
|
|
1159
|
-
this.deviceRefreshRate = this.accessory.context.refreshRate = device.refreshRate;
|
|
1160
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config refreshRate: ${this.deviceRefreshRate}`);
|
|
1161
|
-
} else if (this.platform.config.options!.refreshRate) {
|
|
1162
|
-
this.deviceRefreshRate = this.accessory.context.refreshRate = this.platform.config.options!.refreshRate;
|
|
1163
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Platform Config refreshRate: ${this.deviceRefreshRate}`);
|
|
1164
|
-
}
|
|
1165
|
-
}
|
|
1166
|
-
|
|
1167
|
-
async deviceConfig(device: device & devicesConfig): Promise<void> {
|
|
1168
|
-
let config = {};
|
|
1169
|
-
if (device.striplight) {
|
|
1170
|
-
config = device.striplight;
|
|
1171
|
-
}
|
|
1172
|
-
if (device.connectionType !== undefined) {
|
|
1173
|
-
config['connectionType'] = device.connectionType;
|
|
1174
|
-
}
|
|
1175
|
-
if (device.external !== undefined) {
|
|
1176
|
-
config['external'] = device.external;
|
|
1177
|
-
}
|
|
1178
|
-
if (device.logging !== undefined) {
|
|
1179
|
-
config['logging'] = device.logging;
|
|
1180
|
-
}
|
|
1181
|
-
if (device.refreshRate !== undefined) {
|
|
1182
|
-
config['refreshRate'] = device.refreshRate;
|
|
1183
|
-
}
|
|
1184
|
-
if (device.scanDuration !== undefined) {
|
|
1185
|
-
config['scanDuration'] = device.scanDuration;
|
|
1186
|
-
}
|
|
1187
|
-
if (device.offline !== undefined) {
|
|
1188
|
-
config['offline'] = device.offline;
|
|
1189
|
-
}
|
|
1190
|
-
if (device.maxRetry !== undefined) {
|
|
1191
|
-
config['maxRetry'] = device.maxRetry;
|
|
1192
|
-
}
|
|
1193
|
-
if (device.webhook !== undefined) {
|
|
1194
|
-
config['webhook'] = device.webhook;
|
|
1195
|
-
}
|
|
1196
|
-
if (Object.entries(config).length !== 0) {
|
|
1197
|
-
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
|
|
1198
|
-
}
|
|
1199
|
-
}
|
|
1200
|
-
|
|
1201
|
-
async deviceLogs(device: device & devicesConfig): Promise<void> {
|
|
1202
|
-
if (this.platform.debugMode) {
|
|
1203
|
-
this.deviceLogging = this.accessory.context.logging = 'debugMode';
|
|
1204
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Debug Mode Logging: ${this.deviceLogging}`);
|
|
1205
|
-
} else if (device.logging) {
|
|
1206
|
-
this.deviceLogging = this.accessory.context.logging = device.logging;
|
|
1207
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config Logging: ${this.deviceLogging}`);
|
|
1208
|
-
} else if (this.platform.config.options?.logging) {
|
|
1209
|
-
this.deviceLogging = this.accessory.context.logging = this.platform.config.options?.logging;
|
|
1210
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Platform Config Logging: ${this.deviceLogging}`);
|
|
1211
|
-
} else {
|
|
1212
|
-
this.deviceLogging = this.accessory.context.logging = 'standard';
|
|
1213
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Logging Not Set, Using: ${this.deviceLogging}`);
|
|
1214
|
-
}
|
|
1215
|
-
}
|
|
1216
|
-
|
|
1217
|
-
/**
|
|
1218
|
-
* Logging for Device
|
|
1219
|
-
*/
|
|
1220
|
-
infoLog(...log: any[]): void {
|
|
1221
|
-
if (this.enablingDeviceLogging()) {
|
|
1222
|
-
this.platform.log.info(String(...log));
|
|
1223
|
-
}
|
|
1224
|
-
}
|
|
1225
|
-
|
|
1226
|
-
warnLog(...log: any[]): void {
|
|
1227
|
-
if (this.enablingDeviceLogging()) {
|
|
1228
|
-
this.platform.log.warn(String(...log));
|
|
1229
|
-
}
|
|
1230
|
-
}
|
|
1231
|
-
|
|
1232
|
-
debugWarnLog(...log: any[]): void {
|
|
1233
|
-
if (this.enablingDeviceLogging()) {
|
|
1234
|
-
if (this.deviceLogging?.includes('debug')) {
|
|
1235
|
-
this.platform.log.warn('[DEBUG]', String(...log));
|
|
1236
|
-
}
|
|
1237
|
-
}
|
|
1238
|
-
}
|
|
1239
|
-
|
|
1240
|
-
errorLog(...log: any[]): void {
|
|
1241
|
-
if (this.enablingDeviceLogging()) {
|
|
1242
|
-
this.platform.log.error(String(...log));
|
|
1243
|
-
}
|
|
1244
|
-
}
|
|
1245
|
-
|
|
1246
|
-
debugErrorLog(...log: any[]): void {
|
|
1247
|
-
if (this.enablingDeviceLogging()) {
|
|
1248
|
-
if (this.deviceLogging?.includes('debug')) {
|
|
1249
|
-
this.platform.log.error('[DEBUG]', String(...log));
|
|
1250
|
-
}
|
|
1251
|
-
}
|
|
1252
|
-
}
|
|
1253
|
-
|
|
1254
|
-
debugLog(...log: any[]): void {
|
|
1255
|
-
if (this.enablingDeviceLogging()) {
|
|
1256
|
-
if (this.deviceLogging === 'debug') {
|
|
1257
|
-
this.platform.log.info('[DEBUG]', String(...log));
|
|
1258
|
-
} else {
|
|
1259
|
-
this.platform.log.debug(String(...log));
|
|
1260
|
-
}
|
|
941
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.On, false);
|
|
1261
942
|
}
|
|
1262
943
|
}
|
|
1263
944
|
|
|
1264
|
-
|
|
1265
|
-
|
|
945
|
+
async apiError(e: any): Promise<void> {
|
|
946
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.On, e);
|
|
947
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Hue, e);
|
|
948
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Brightness, e);
|
|
949
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Saturation, e);
|
|
950
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, e);
|
|
1266
951
|
}
|
|
1267
952
|
}
|