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