@switchbot/homebridge-switchbot 3.5.0-beta.4 → 3.5.0-beta.40
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 +120 -17
- package/dist/device/blindtilt.d.ts +21 -94
- package/dist/device/blindtilt.d.ts.map +1 -1
- package/dist/device/blindtilt.js +349 -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 +584 -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 +211 -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 +252 -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 +206 -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 +337 -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 +671 -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 +503 -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 +244 -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 +209 -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 +176 -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 +254 -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 +212 -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 +172 -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 +161 -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 +138 -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 +84 -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 +142 -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 +123 -664
- package/dist/device/waterdetector.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +2 -2
- 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 +512 -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 +343 -198
- package/dist/platform.js.map +1 -1
- package/dist/settings.d.ts +41 -11
- 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 +375 -782
- package/src/device/bot.ts +618 -844
- package/src/device/ceilinglight.ts +224 -607
- package/src/device/colorbulb.ts +266 -656
- package/src/device/contact.ts +231 -553
- package/src/device/curtain.ts +357 -810
- package/src/device/device.ts +699 -0
- package/src/device/fan.ts +552 -0
- package/src/device/hub.ts +271 -624
- package/src/device/humidifier.ts +239 -618
- package/src/device/iosensor.ts +202 -610
- package/src/device/lightstrip.ts +275 -596
- package/src/device/lock.ts +249 -582
- package/src/device/meter.ts +198 -601
- package/src/device/meterplus.ts +186 -602
- package/src/device/motion.ts +158 -541
- package/src/device/plug.ts +94 -480
- package/src/device/robotvacuumcleaner.ts +163 -477
- package/src/device/waterdetector.ts +141 -689
- package/src/homebridge-ui/public/index.html +2 -2
- 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 +528 -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 +353 -206
- package/src/settings.ts +57 -566
- 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,92 @@ 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
|
-
|
|
344
|
-
|
|
289
|
+
if (deviceStatus.body.version) {
|
|
290
|
+
this.accessory.context.version = deviceStatus.body.version;
|
|
291
|
+
this.accessory
|
|
292
|
+
.getService(this.hap.Service.AccessoryInformation)
|
|
293
|
+
.setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
|
|
294
|
+
.getCharacteristic(this.hap.Characteristic.FirmwareRevision)
|
|
295
|
+
.updateValue(this.accessory.context.version);
|
|
296
|
+
}
|
|
345
297
|
}
|
|
346
298
|
/**
|
|
347
299
|
* Asks the SwitchBot API for the latest device information
|
|
@@ -375,113 +327,42 @@ export class ColorBulb {
|
|
|
375
327
|
// Start to monitor advertisement packets
|
|
376
328
|
(async () => {
|
|
377
329
|
// Start to monitor advertisement packets
|
|
378
|
-
await switchbot.startScan({
|
|
379
|
-
model: 'u',
|
|
380
|
-
id: this.device.bleMac,
|
|
381
|
-
});
|
|
330
|
+
await switchbot.startScan({ model: this.device.bleModel, id: this.device.bleMac });
|
|
382
331
|
// Set an event handler
|
|
383
332
|
switchbot.onadvertisement = (ad) => {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
333
|
+
if (this.device.bleMac === ad.address && ad.model === this.device.bleModel) {
|
|
334
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ${JSON.stringify(ad, null, ' ')}`);
|
|
335
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} address: ${ad.address}, model: ${ad.model}`);
|
|
387
336
|
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
337
|
}
|
|
397
338
|
else {
|
|
398
339
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
|
|
399
340
|
}
|
|
400
341
|
};
|
|
401
|
-
// Wait
|
|
342
|
+
// Wait 10 seconds
|
|
402
343
|
await switchbot.wait(this.scanDuration * 1000);
|
|
403
344
|
// Stop to monitor
|
|
404
345
|
await switchbot.stopScan();
|
|
405
346
|
// Update HomeKit
|
|
406
|
-
await this.BLEparseStatus();
|
|
347
|
+
await this.BLEparseStatus(switchbot.onadvertisement.serviceData);
|
|
407
348
|
await this.updateHomeKitCharacteristics();
|
|
408
349
|
})();
|
|
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
|
-
}*/
|
|
350
|
+
if (switchbot === undefined) {
|
|
351
|
+
await this.BLERefreshConnection(switchbot);
|
|
352
|
+
}
|
|
465
353
|
}
|
|
466
354
|
async openAPIRefreshStatus() {
|
|
467
355
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIRefreshStatus`);
|
|
468
356
|
try {
|
|
469
|
-
const { body, statusCode } = await
|
|
470
|
-
headers: this.platform.generateHeaders(),
|
|
471
|
-
});
|
|
357
|
+
const { body, statusCode } = await this.platform.retryRequest(this.deviceMaxRetries, this.deviceDelayBetweenRetries, `${Devices}/${this.device.deviceId}/status`, { headers: this.platform.generateHeaders() });
|
|
472
358
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} statusCode: ${statusCode}`);
|
|
473
359
|
const deviceStatus = await body.json();
|
|
474
360
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus: ${JSON.stringify(deviceStatus)}`);
|
|
475
361
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
|
|
476
362
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
477
|
-
this.
|
|
363
|
+
this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
478
364
|
+ `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();
|
|
365
|
+
this.openAPIparseStatus(deviceStatus);
|
|
485
366
|
this.updateHomeKitCharacteristics();
|
|
486
367
|
}
|
|
487
368
|
else {
|
|
@@ -529,8 +410,9 @@ export class ColorBulb {
|
|
|
529
410
|
}
|
|
530
411
|
async BLEpushChanges() {
|
|
531
412
|
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
|
|
413
|
+
if (this.LightBulb.On !== this.accessory.context.On) {
|
|
414
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushChanges`
|
|
415
|
+
+ ` On: ${this.LightBulb.On}, OnCached: ${this.accessory.context.On}`);
|
|
534
416
|
const switchbot = await this.platform.connectBLE();
|
|
535
417
|
// Convert to BLE Address
|
|
536
418
|
this.device.bleMac = this.device
|
|
@@ -544,11 +426,11 @@ export class ColorBulb {
|
|
|
544
426
|
id: this.device.bleMac,
|
|
545
427
|
})
|
|
546
428
|
.then(async (device_list) => {
|
|
547
|
-
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
|
|
548
|
-
return await this.
|
|
549
|
-
max: this.
|
|
429
|
+
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
|
|
430
|
+
return await this.retryBLE({
|
|
431
|
+
max: await this.maxRetryBLE(),
|
|
550
432
|
fn: async () => {
|
|
551
|
-
if (this.On) {
|
|
433
|
+
if (this.LightBulb.On) {
|
|
552
434
|
return await device_list[0].turnOn({ id: this.device.bleMac });
|
|
553
435
|
}
|
|
554
436
|
else {
|
|
@@ -559,7 +441,9 @@ export class ColorBulb {
|
|
|
559
441
|
})
|
|
560
442
|
.then(() => {
|
|
561
443
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
|
|
562
|
-
this.
|
|
444
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
445
|
+
+ `On: ${this.LightBulb.On} sent over BLE, sent successfully`);
|
|
446
|
+
this.LightBulb.On = false;
|
|
563
447
|
})
|
|
564
448
|
.catch(async (e) => {
|
|
565
449
|
this.apiError(e);
|
|
@@ -568,25 +452,26 @@ export class ColorBulb {
|
|
|
568
452
|
await this.BLEPushConnection();
|
|
569
453
|
});
|
|
570
454
|
// Push Brightness Update
|
|
571
|
-
if (this.On) {
|
|
455
|
+
if (this.LightBulb.On) {
|
|
572
456
|
await this.BLEpushBrightnessChanges();
|
|
573
457
|
}
|
|
574
458
|
// Push ColorTemperature Update
|
|
575
|
-
if (this.On) {
|
|
459
|
+
if (this.LightBulb.On) {
|
|
576
460
|
await this.BLEpushColorTemperatureChanges();
|
|
577
461
|
}
|
|
578
462
|
// Push Hue & Saturation Update
|
|
579
|
-
if (this.On) {
|
|
463
|
+
if (this.LightBulb.On) {
|
|
580
464
|
await this.BLEpushRGBChanges();
|
|
581
465
|
}
|
|
582
466
|
}
|
|
583
467
|
else {
|
|
584
|
-
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}`);
|
|
585
470
|
}
|
|
586
471
|
}
|
|
587
472
|
async BLEpushBrightnessChanges() {
|
|
588
473
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushBrightnessChanges`);
|
|
589
|
-
if (this.Brightness !== this.accessory.context.Brightness) {
|
|
474
|
+
if (this.LightBulb.Brightness !== this.accessory.context.Brightness) {
|
|
590
475
|
const switchbot = await this.platform.connectBLE();
|
|
591
476
|
// Convert to BLE Address
|
|
592
477
|
this.device.bleMac = this.device
|
|
@@ -600,12 +485,12 @@ export class ColorBulb {
|
|
|
600
485
|
id: this.device.bleMac,
|
|
601
486
|
})
|
|
602
487
|
.then(async (device_list) => {
|
|
603
|
-
this.infoLog(`${this.accessory.displayName} Target Brightness: ${this.Brightness}`);
|
|
604
|
-
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);
|
|
605
490
|
})
|
|
606
491
|
.then(() => {
|
|
607
492
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
|
|
608
|
-
this.On = false;
|
|
493
|
+
this.LightBulb.On = false;
|
|
609
494
|
})
|
|
610
495
|
.catch(async (e) => {
|
|
611
496
|
this.apiError(e);
|
|
@@ -616,13 +501,13 @@ export class ColorBulb {
|
|
|
616
501
|
}
|
|
617
502
|
else {
|
|
618
503
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushBrightnessChanges.` +
|
|
619
|
-
`Brightness: ${this.Brightness}, ` +
|
|
504
|
+
`Brightness: ${this.LightBulb.Brightness}, ` +
|
|
620
505
|
`BrightnessCached: ${this.accessory.context.Brightness}`);
|
|
621
506
|
}
|
|
622
507
|
}
|
|
623
508
|
async BLEpushColorTemperatureChanges() {
|
|
624
509
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushColorTemperatureChanges`);
|
|
625
|
-
if (this.ColorTemperature !== this.accessory.context.ColorTemperature) {
|
|
510
|
+
if (this.LightBulb.ColorTemperature !== this.accessory.context.ColorTemperature) {
|
|
626
511
|
const switchbot = await this.platform.connectBLE();
|
|
627
512
|
// Convert to BLE Address
|
|
628
513
|
this.device.bleMac = this.device
|
|
@@ -636,12 +521,12 @@ export class ColorBulb {
|
|
|
636
521
|
id: this.device.bleMac,
|
|
637
522
|
})
|
|
638
523
|
.then(async (device_list) => {
|
|
639
|
-
this.infoLog(`${this.accessory.displayName} Target ColorTemperature: ${this.ColorTemperature}`);
|
|
640
|
-
return await device_list[0].setColorTemperature(this.ColorTemperature);
|
|
524
|
+
this.infoLog(`${this.accessory.displayName} Target ColorTemperature: ${this.LightBulb.ColorTemperature}`);
|
|
525
|
+
return await device_list[0].setColorTemperature(this.LightBulb.ColorTemperature);
|
|
641
526
|
})
|
|
642
527
|
.then(() => {
|
|
643
528
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
|
|
644
|
-
this.On = false;
|
|
529
|
+
this.LightBulb.On = false;
|
|
645
530
|
})
|
|
646
531
|
.catch(async (e) => {
|
|
647
532
|
this.apiError(e);
|
|
@@ -652,15 +537,15 @@ export class ColorBulb {
|
|
|
652
537
|
}
|
|
653
538
|
else {
|
|
654
539
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushColorTemperatureChanges.` +
|
|
655
|
-
`ColorTemperature: ${this.ColorTemperature}, ColorTemperatureCached: ${this.accessory.context.ColorTemperature}`);
|
|
540
|
+
`ColorTemperature: ${this.LightBulb.ColorTemperature}, ColorTemperatureCached: ${this.accessory.context.ColorTemperature}`);
|
|
656
541
|
}
|
|
657
542
|
}
|
|
658
543
|
async BLEpushRGBChanges() {
|
|
659
544
|
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));
|
|
545
|
+
if (this.LightBulb.Hue !== this.accessory.context.Hue || this.LightBulb.Saturation !== this.accessory.context.Saturation) {
|
|
546
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${JSON.stringify(this.LightBulb.Hue)}`);
|
|
547
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${JSON.stringify(this.LightBulb.Saturation)}`);
|
|
548
|
+
const [red, green, blue] = hs2rgb(Number(this.LightBulb.Hue), Number(this.LightBulb.Saturation));
|
|
664
549
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} rgb: ${JSON.stringify([red, green, blue])}`);
|
|
665
550
|
const switchbot = await this.platform.connectBLE();
|
|
666
551
|
// Convert to BLE Address
|
|
@@ -675,12 +560,12 @@ export class ColorBulb {
|
|
|
675
560
|
id: this.device.bleMac,
|
|
676
561
|
})
|
|
677
562
|
.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);
|
|
563
|
+
this.infoLog(`${this.accessory.displayName} Target RGB: ${(this.LightBulb.Brightness, red, green, blue)}`);
|
|
564
|
+
return await device_list[0].setRGB(this.LightBulb.Brightness, red, green, blue);
|
|
680
565
|
})
|
|
681
566
|
.then(() => {
|
|
682
567
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
|
|
683
|
-
this.On = false;
|
|
568
|
+
this.LightBulb.On = false;
|
|
684
569
|
})
|
|
685
570
|
.catch(async (e) => {
|
|
686
571
|
this.apiError(e);
|
|
@@ -690,15 +575,15 @@ export class ColorBulb {
|
|
|
690
575
|
});
|
|
691
576
|
}
|
|
692
577
|
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}`);
|
|
578
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushRGBChanges. Hue: ${this.LightBulb.Hue}, ` +
|
|
579
|
+
`HueCached: ${this.accessory.context.Hue}, Saturation: ${this.LightBulb.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`);
|
|
695
580
|
}
|
|
696
581
|
}
|
|
697
582
|
async openAPIpushChanges() {
|
|
698
583
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIpushChanges`);
|
|
699
|
-
if (this.On !== this.accessory.context.On) {
|
|
584
|
+
if (this.LightBulb.On !== this.accessory.context.On) {
|
|
700
585
|
let command = '';
|
|
701
|
-
if (this.On) {
|
|
586
|
+
if (this.LightBulb.On) {
|
|
702
587
|
command = 'turnOn';
|
|
703
588
|
}
|
|
704
589
|
else {
|
|
@@ -724,6 +609,8 @@ export class ColorBulb {
|
|
|
724
609
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
725
610
|
this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
726
611
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
612
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
613
|
+
+ `request to SwitchBot API, body: ${JSON.stringify(bodyChange)} sent successfully`);
|
|
727
614
|
}
|
|
728
615
|
else {
|
|
729
616
|
this.statusCode(statusCode);
|
|
@@ -738,28 +625,28 @@ export class ColorBulb {
|
|
|
738
625
|
}
|
|
739
626
|
else {
|
|
740
627
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No openAPIpushChanges.` +
|
|
741
|
-
`On: ${this.On}, ` +
|
|
628
|
+
`On: ${this.LightBulb.On}, ` +
|
|
742
629
|
`OnCached: ${this.accessory.context.On}`);
|
|
743
630
|
}
|
|
744
631
|
// Push Hue & Saturation Update
|
|
745
|
-
if (this.On) {
|
|
632
|
+
if (this.LightBulb.On) {
|
|
746
633
|
await this.pushHueSaturationChanges();
|
|
747
634
|
}
|
|
748
635
|
// Push ColorTemperature Update
|
|
749
|
-
if (this.On) {
|
|
636
|
+
if (this.LightBulb.On) {
|
|
750
637
|
await this.pushColorTemperatureChanges();
|
|
751
638
|
}
|
|
752
639
|
// Push Brightness Update
|
|
753
|
-
if (this.On) {
|
|
640
|
+
if (this.LightBulb.On) {
|
|
754
641
|
await this.pushBrightnessChanges();
|
|
755
642
|
}
|
|
756
643
|
}
|
|
757
644
|
async pushHueSaturationChanges() {
|
|
758
645
|
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));
|
|
646
|
+
if (this.LightBulb.Hue !== this.accessory.context.Hue || this.LightBulb.Saturation !== this.accessory.context.Saturation) {
|
|
647
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${JSON.stringify(this.LightBulb.Hue)}`);
|
|
648
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${JSON.stringify(this.LightBulb.Saturation)}`);
|
|
649
|
+
const [red, green, blue] = hs2rgb(Number(this.LightBulb.Hue), Number(this.LightBulb.Saturation));
|
|
763
650
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} rgb: ${JSON.stringify([red, green, blue])}`);
|
|
764
651
|
const bodyChange = JSON.stringify({
|
|
765
652
|
command: 'setColor',
|
|
@@ -781,6 +668,8 @@ export class ColorBulb {
|
|
|
781
668
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
782
669
|
this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
783
670
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
671
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
672
|
+
+ `request to SwitchBot API, body: ${deviceStatus} sent successfully`);
|
|
784
673
|
}
|
|
785
674
|
else {
|
|
786
675
|
this.statusCode(statusCode);
|
|
@@ -794,15 +683,15 @@ export class ColorBulb {
|
|
|
794
683
|
}
|
|
795
684
|
}
|
|
796
685
|
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}`);
|
|
686
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushHueSaturationChanges. Hue: ${this.LightBulb.Hue}, ` +
|
|
687
|
+
`HueCached: ${this.accessory.context.Hue}, Saturation: ${this.LightBulb.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`);
|
|
799
688
|
}
|
|
800
689
|
}
|
|
801
690
|
async pushColorTemperatureChanges() {
|
|
802
691
|
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.
|
|
692
|
+
if (this.LightBulb.ColorTemperature !== this.accessory.context.ColorTemperature) {
|
|
693
|
+
const kelvin = Math.round(1000000 / Number(this.LightBulb.ColorTemperature));
|
|
694
|
+
this.accessory.context.kelvin = kelvin;
|
|
806
695
|
const bodyChange = JSON.stringify({
|
|
807
696
|
command: 'setColorTemperature',
|
|
808
697
|
parameter: `${kelvin}`,
|
|
@@ -823,6 +712,8 @@ export class ColorBulb {
|
|
|
823
712
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
824
713
|
this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
825
714
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
715
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
716
|
+
+ `request to SwitchBot API, body: ${deviceStatus} sent successfully`);
|
|
826
717
|
}
|
|
827
718
|
else {
|
|
828
719
|
this.statusCode(statusCode);
|
|
@@ -831,21 +722,21 @@ export class ColorBulb {
|
|
|
831
722
|
}
|
|
832
723
|
catch (e) {
|
|
833
724
|
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)}`);
|
|
725
|
+
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} failed pushColorTemperatureChanges with ${this.device.connectionType}`
|
|
726
|
+
+ ` Connection, Error Message: ${JSON.stringify(e.message)}`);
|
|
836
727
|
}
|
|
837
728
|
}
|
|
838
729
|
else {
|
|
839
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushColorTemperatureChanges.`
|
|
840
|
-
`ColorTemperature: ${this.ColorTemperature}, ColorTemperatureCached: ${this.accessory.context.ColorTemperature}`);
|
|
730
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushColorTemperatureChanges.`
|
|
731
|
+
+ `ColorTemperature: ${this.LightBulb.ColorTemperature}, ColorTemperatureCached: ${this.accessory.context.ColorTemperature}`);
|
|
841
732
|
}
|
|
842
733
|
}
|
|
843
734
|
async pushBrightnessChanges() {
|
|
844
735
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} pushBrightnessChanges`);
|
|
845
|
-
if (this.Brightness !== this.accessory.context.Brightness) {
|
|
736
|
+
if (this.LightBulb.Brightness !== this.accessory.context.Brightness) {
|
|
846
737
|
const bodyChange = JSON.stringify({
|
|
847
738
|
command: 'setBrightness',
|
|
848
|
-
parameter: `${this.Brightness}`,
|
|
739
|
+
parameter: `${this.LightBulb.Brightness}`,
|
|
849
740
|
commandType: 'command',
|
|
850
741
|
});
|
|
851
742
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Sending request to SwitchBot API, body: ${bodyChange},`);
|
|
@@ -863,6 +754,8 @@ export class ColorBulb {
|
|
|
863
754
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
864
755
|
this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
865
756
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
757
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
758
|
+
+ `request to SwitchBot API, body: ${deviceStatus} sent successfully`);
|
|
866
759
|
}
|
|
867
760
|
else {
|
|
868
761
|
this.statusCode(statusCode);
|
|
@@ -877,7 +770,7 @@ export class ColorBulb {
|
|
|
877
770
|
}
|
|
878
771
|
else {
|
|
879
772
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushBrightnessChanges.` +
|
|
880
|
-
`Brightness: ${this.Brightness}, ` +
|
|
773
|
+
`Brightness: ${this.LightBulb.Brightness}, ` +
|
|
881
774
|
`BrightnessCached: ${this.accessory.context.Brightness}`);
|
|
882
775
|
}
|
|
883
776
|
}
|
|
@@ -885,137 +778,140 @@ export class ColorBulb {
|
|
|
885
778
|
* Handle requests to set the value of the "On" characteristic
|
|
886
779
|
*/
|
|
887
780
|
async OnSet(value) {
|
|
888
|
-
if (this.On === this.accessory.context.On) {
|
|
781
|
+
if (this.LightBulb.On === this.accessory.context.On) {
|
|
889
782
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set On: ${value}`);
|
|
890
783
|
}
|
|
891
784
|
else {
|
|
892
785
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set On: ${value}`);
|
|
893
786
|
}
|
|
894
|
-
this.On = value;
|
|
787
|
+
this.LightBulb.On = value;
|
|
895
788
|
this.doColorBulbUpdate.next();
|
|
896
789
|
}
|
|
897
790
|
/**
|
|
898
791
|
* Handle requests to set the value of the "Brightness" characteristic
|
|
899
792
|
*/
|
|
900
793
|
async BrightnessSet(value) {
|
|
901
|
-
if (this.Brightness === this.accessory.context.Brightness) {
|
|
794
|
+
if (this.LightBulb.Brightness === this.accessory.context.Brightness) {
|
|
902
795
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Brightness: ${value}`);
|
|
903
796
|
}
|
|
904
|
-
else if (this.On) {
|
|
797
|
+
else if (this.LightBulb.On) {
|
|
905
798
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Brightness: ${value}`);
|
|
906
799
|
}
|
|
907
800
|
else {
|
|
908
801
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Brightness: ${value}`);
|
|
909
802
|
}
|
|
910
|
-
this.Brightness = value;
|
|
803
|
+
this.LightBulb.Brightness = value;
|
|
911
804
|
this.doColorBulbUpdate.next();
|
|
912
805
|
}
|
|
913
806
|
/**
|
|
914
807
|
* Handle requests to set the value of the "ColorTemperature" characteristic
|
|
915
808
|
*/
|
|
916
809
|
async ColorTemperatureSet(value) {
|
|
917
|
-
if (this.ColorTemperature === this.accessory.context.ColorTemperature) {
|
|
810
|
+
if (this.LightBulb.ColorTemperature === this.accessory.context.ColorTemperature) {
|
|
918
811
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set ColorTemperature: ${value}`);
|
|
919
812
|
}
|
|
920
|
-
else if (this.On) {
|
|
813
|
+
else if (this.LightBulb.On) {
|
|
921
814
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set ColorTemperature: ${value}`);
|
|
922
815
|
}
|
|
923
816
|
else {
|
|
924
817
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set ColorTemperature: ${value}`);
|
|
925
818
|
}
|
|
819
|
+
const minKelvin = 2000;
|
|
820
|
+
const maxKelvin = 9000;
|
|
926
821
|
// Convert mired to kelvin to nearest 100 (SwitchBot seems to need this)
|
|
927
822
|
const kelvin = Math.round(1000000 / Number(value) / 100) * 100;
|
|
928
823
|
// Check and increase/decrease kelvin to range of device
|
|
929
|
-
const k = Math.min(Math.max(kelvin,
|
|
930
|
-
if (!this.accessory.context.On || this.
|
|
824
|
+
const k = Math.min(Math.max(kelvin, minKelvin), maxKelvin);
|
|
825
|
+
if (!this.accessory.context.On || this.accessory.context.kelvin === k) {
|
|
931
826
|
return;
|
|
932
827
|
}
|
|
933
828
|
// Updating the hue/sat to the corresponding values mimics native adaptive lighting
|
|
934
829
|
const hs = m2hs(value);
|
|
935
|
-
this.
|
|
936
|
-
this.
|
|
937
|
-
this.ColorTemperature = value;
|
|
830
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Hue, hs[0]);
|
|
831
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Saturation, hs[1]);
|
|
832
|
+
this.LightBulb.ColorTemperature = value;
|
|
938
833
|
this.doColorBulbUpdate.next();
|
|
939
834
|
}
|
|
940
835
|
/**
|
|
941
836
|
* Handle requests to set the value of the "Hue" characteristic
|
|
942
837
|
*/
|
|
943
838
|
async HueSet(value) {
|
|
944
|
-
if (this.Hue === this.accessory.context.Hue) {
|
|
839
|
+
if (this.LightBulb.Hue === this.accessory.context.Hue) {
|
|
945
840
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Hue: ${value}`);
|
|
946
841
|
}
|
|
947
|
-
else if (this.On) {
|
|
842
|
+
else if (this.LightBulb.On) {
|
|
948
843
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Hue: ${value}`);
|
|
949
844
|
}
|
|
950
845
|
else {
|
|
951
846
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Hue: ${value}`);
|
|
952
847
|
}
|
|
953
|
-
this.
|
|
954
|
-
this.Hue = value;
|
|
848
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, 140);
|
|
849
|
+
this.LightBulb.Hue = value;
|
|
955
850
|
this.doColorBulbUpdate.next();
|
|
956
851
|
}
|
|
957
852
|
/**
|
|
958
853
|
* Handle requests to set the value of the "Saturation" characteristic
|
|
959
854
|
*/
|
|
960
855
|
async SaturationSet(value) {
|
|
961
|
-
if (this.Saturation === this.accessory.context.Saturation) {
|
|
856
|
+
if (this.LightBulb.Saturation === this.accessory.context.Saturation) {
|
|
962
857
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Saturation: ${value}`);
|
|
963
858
|
}
|
|
964
|
-
else if (this.On) {
|
|
859
|
+
else if (this.LightBulb.On) {
|
|
965
860
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Saturation: ${value}`);
|
|
966
861
|
}
|
|
967
862
|
else {
|
|
968
863
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Saturation: ${value}`);
|
|
969
864
|
}
|
|
970
|
-
this.
|
|
971
|
-
this.Saturation = value;
|
|
865
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, 140);
|
|
866
|
+
this.LightBulb.Saturation = value;
|
|
972
867
|
this.doColorBulbUpdate.next();
|
|
973
868
|
}
|
|
974
869
|
async updateHomeKitCharacteristics() {
|
|
975
870
|
// On
|
|
976
|
-
if (this.On === undefined) {
|
|
977
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
|
|
871
|
+
if (this.LightBulb.On === undefined) {
|
|
872
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
|
|
978
873
|
}
|
|
979
874
|
else {
|
|
980
|
-
this.accessory.context.On = this.On;
|
|
981
|
-
this.
|
|
982
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic On: ${this.On}`);
|
|
875
|
+
this.accessory.context.On = this.LightBulb.On;
|
|
876
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.On, this.LightBulb.On);
|
|
877
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic On: ${this.LightBulb.On}`);
|
|
983
878
|
}
|
|
984
879
|
// Brightness
|
|
985
|
-
if (this.Brightness === undefined) {
|
|
986
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.Brightness}`);
|
|
880
|
+
if (this.LightBulb.Brightness === undefined) {
|
|
881
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
|
|
987
882
|
}
|
|
988
883
|
else {
|
|
989
|
-
this.accessory.context.Brightness = this.Brightness;
|
|
990
|
-
this.
|
|
991
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Brightness: ${this.Brightness}`);
|
|
884
|
+
this.accessory.context.Brightness = this.LightBulb.Brightness;
|
|
885
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Brightness, this.LightBulb.Brightness);
|
|
886
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Brightness: ${this.LightBulb.Brightness}`);
|
|
992
887
|
}
|
|
993
888
|
// ColorTemperature
|
|
994
|
-
if (this.ColorTemperature === undefined) {
|
|
995
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.ColorTemperature}`);
|
|
889
|
+
if (this.LightBulb.ColorTemperature === undefined) {
|
|
890
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.LightBulb.ColorTemperature}`);
|
|
996
891
|
}
|
|
997
892
|
else {
|
|
998
|
-
this.accessory.context.ColorTemperature = this.ColorTemperature;
|
|
999
|
-
this.
|
|
1000
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic
|
|
893
|
+
this.accessory.context.ColorTemperature = this.LightBulb.ColorTemperature;
|
|
894
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, this.LightBulb.ColorTemperature);
|
|
895
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
|
|
896
|
+
+ ` ColorTemperature: ${this.LightBulb.ColorTemperature}`);
|
|
1001
897
|
}
|
|
1002
898
|
// Hue
|
|
1003
|
-
if (this.Hue === undefined) {
|
|
1004
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.Hue}`);
|
|
899
|
+
if (this.LightBulb.Hue === undefined) {
|
|
900
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.LightBulb.Hue}`);
|
|
1005
901
|
}
|
|
1006
902
|
else {
|
|
1007
|
-
this.accessory.context.Hue = this.Hue;
|
|
1008
|
-
this.
|
|
1009
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Hue: ${this.Hue}`);
|
|
903
|
+
this.accessory.context.Hue = this.LightBulb.Hue;
|
|
904
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Hue, this.LightBulb.Hue);
|
|
905
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Hue: ${this.LightBulb.Hue}`);
|
|
1010
906
|
}
|
|
1011
907
|
// Saturation
|
|
1012
|
-
if (this.Saturation === undefined) {
|
|
1013
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.Saturation}`);
|
|
908
|
+
if (this.LightBulb.Saturation === undefined) {
|
|
909
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.LightBulb.Saturation}`);
|
|
1014
910
|
}
|
|
1015
911
|
else {
|
|
1016
|
-
this.accessory.context.Saturation = this.Saturation;
|
|
1017
|
-
this.
|
|
1018
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Saturation: ${this.Saturation}`);
|
|
912
|
+
this.accessory.context.Saturation = this.LightBulb.Saturation;
|
|
913
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Saturation, this.LightBulb.Saturation);
|
|
914
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Saturation: ${this.LightBulb.Saturation}`);
|
|
1019
915
|
}
|
|
1020
916
|
}
|
|
1021
917
|
async adaptiveLighting(device) {
|
|
@@ -1028,34 +924,6 @@ export class ColorBulb {
|
|
|
1028
924
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLightingShift: ${this.adaptiveLightingShift}`);
|
|
1029
925
|
}
|
|
1030
926
|
}
|
|
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
927
|
async BLEPushConnection() {
|
|
1060
928
|
if (this.platform.config.credentials?.token && this.device.connectionType === 'BLE/OpenAPI') {
|
|
1061
929
|
this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} Using OpenAPI Connection to Push Changes`);
|
|
@@ -1070,275 +938,27 @@ export class ColorBulb {
|
|
|
1070
938
|
await this.openAPIRefreshStatus();
|
|
1071
939
|
}
|
|
1072
940
|
}
|
|
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
941
|
minStep(device) {
|
|
942
|
+
let set_minStep;
|
|
1093
943
|
if (device.colorbulb?.set_minStep) {
|
|
1094
|
-
|
|
944
|
+
set_minStep = device.colorbulb?.set_minStep;
|
|
1095
945
|
}
|
|
1096
946
|
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`);
|
|
947
|
+
set_minStep = 1;
|
|
1184
948
|
}
|
|
949
|
+
return set_minStep;
|
|
1185
950
|
}
|
|
1186
951
|
async offlineOff() {
|
|
1187
952
|
if (this.device.offline) {
|
|
1188
|
-
|
|
1189
|
-
await this.updateHomeKitCharacteristics();
|
|
953
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.On, false);
|
|
1190
954
|
}
|
|
1191
955
|
}
|
|
1192
956
|
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';
|
|
957
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.On, e);
|
|
958
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Hue, e);
|
|
959
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Brightness, e);
|
|
960
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Saturation, e);
|
|
961
|
+
this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, e);
|
|
1342
962
|
}
|
|
1343
963
|
}
|
|
1344
964
|
//# sourceMappingURL=colorbulb.js.map
|