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