@switchbot/homebridge-switchbot 3.5.0-beta.7 → 3.5.0-beta.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +4 -1
- package/CHANGELOG.md +4 -1
- package/config.schema.json +120 -17
- package/dist/device/blindtilt.d.ts +23 -96
- package/dist/device/blindtilt.d.ts.map +1 -1
- package/dist/device/blindtilt.js +425 -778
- package/dist/device/blindtilt.js.map +1 -1
- package/dist/device/bot.d.ts +26 -72
- package/dist/device/bot.d.ts.map +1 -1
- package/dist/device/bot.js +803 -837
- package/dist/device/bot.js.map +1 -1
- package/dist/device/ceilinglight.d.ts +14 -68
- package/dist/device/ceilinglight.d.ts.map +1 -1
- package/dist/device/ceilinglight.js +241 -606
- package/dist/device/ceilinglight.js.map +1 -1
- package/dist/device/colorbulb.d.ts +14 -75
- package/dist/device/colorbulb.d.ts.map +1 -1
- package/dist/device/colorbulb.js +283 -658
- package/dist/device/colorbulb.js.map +1 -1
- package/dist/device/contact.d.ts +15 -66
- package/dist/device/contact.d.ts.map +1 -1
- package/dist/device/contact.js +254 -545
- package/dist/device/contact.js.map +1 -1
- package/dist/device/curtain.d.ts +19 -88
- package/dist/device/curtain.d.ts.map +1 -1
- package/dist/device/curtain.js +412 -806
- 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 +711 -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 +540 -0
- package/dist/device/fan.js.map +1 -0
- package/dist/device/hub.d.ts +16 -60
- package/dist/device/hub.d.ts.map +1 -1
- package/dist/device/hub.js +261 -616
- package/dist/device/hub.js.map +1 -1
- package/dist/device/humidifier.d.ts +11 -66
- package/dist/device/humidifier.d.ts.map +1 -1
- package/dist/device/humidifier.js +240 -594
- 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 +196 -600
- package/dist/device/iosensor.js.map +1 -1
- package/dist/device/lightstrip.d.ts +11 -69
- package/dist/device/lightstrip.d.ts.map +1 -1
- package/dist/device/lightstrip.js +281 -586
- package/dist/device/lightstrip.js.map +1 -1
- package/dist/device/lock.d.ts +16 -63
- package/dist/device/lock.d.ts.map +1 -1
- package/dist/device/lock.js +252 -560
- package/dist/device/lock.js.map +1 -1
- package/dist/device/meter.d.ts +14 -64
- package/dist/device/meter.d.ts.map +1 -1
- package/dist/device/meter.js +191 -593
- package/dist/device/meter.js.map +1 -1
- package/dist/device/meterplus.d.ts +14 -65
- package/dist/device/meterplus.d.ts.map +1 -1
- package/dist/device/meterplus.js +180 -593
- package/dist/device/meterplus.js.map +1 -1
- package/dist/device/motion.d.ts +13 -69
- package/dist/device/motion.d.ts.map +1 -1
- package/dist/device/motion.js +188 -532
- 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 +96 -458
- package/dist/device/plug.js.map +1 -1
- package/dist/device/robotvacuumcleaner.d.ts +12 -63
- package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
- package/dist/device/robotvacuumcleaner.js +202 -521
- package/dist/device/robotvacuumcleaner.js.map +1 -1
- package/dist/device/waterdetector.d.ts +10 -63
- package/dist/device/waterdetector.d.ts.map +1 -1
- package/dist/device/waterdetector.js +146 -475
- package/dist/device/waterdetector.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +22 -16
- package/dist/homebridge-ui/server.js +1 -1
- package/dist/homebridge-ui/server.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/irdevice/airconditioner.d.ts +10 -50
- package/dist/irdevice/airconditioner.d.ts.map +1 -1
- package/dist/irdevice/airconditioner.js +324 -452
- package/dist/irdevice/airconditioner.js.map +1 -1
- package/dist/irdevice/airpurifier.d.ts +8 -39
- package/dist/irdevice/airpurifier.d.ts.map +1 -1
- package/dist/irdevice/airpurifier.js +93 -307
- package/dist/irdevice/airpurifier.js.map +1 -1
- package/dist/irdevice/camera.d.ts +7 -36
- package/dist/irdevice/camera.d.ts.map +1 -1
- package/dist/irdevice/camera.js +39 -281
- package/dist/irdevice/camera.js.map +1 -1
- package/dist/irdevice/fan.d.ts +10 -43
- package/dist/irdevice/fan.d.ts.map +1 -1
- package/dist/irdevice/fan.js +113 -341
- package/dist/irdevice/fan.js.map +1 -1
- package/dist/irdevice/irdevice.d.ts +40 -0
- package/dist/irdevice/irdevice.d.ts.map +1 -0
- package/dist/irdevice/irdevice.js +330 -0
- package/dist/irdevice/irdevice.js.map +1 -0
- package/dist/irdevice/light.d.ts +12 -45
- package/dist/irdevice/light.d.ts.map +1 -1
- package/dist/irdevice/light.js +118 -362
- package/dist/irdevice/light.js.map +1 -1
- package/dist/irdevice/other.d.ts +19 -48
- package/dist/irdevice/other.d.ts.map +1 -1
- package/dist/irdevice/other.js +438 -570
- package/dist/irdevice/other.js.map +1 -1
- package/dist/irdevice/tv.d.ts +8 -40
- package/dist/irdevice/tv.d.ts.map +1 -1
- package/dist/irdevice/tv.js +87 -335
- package/dist/irdevice/tv.js.map +1 -1
- package/dist/irdevice/vacuumcleaner.d.ts +7 -36
- package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
- package/dist/irdevice/vacuumcleaner.js +45 -285
- package/dist/irdevice/vacuumcleaner.js.map +1 -1
- package/dist/irdevice/waterheater.d.ts +7 -36
- package/dist/irdevice/waterheater.d.ts.map +1 -1
- package/dist/irdevice/waterheater.js +47 -291
- package/dist/irdevice/waterheater.js.map +1 -1
- package/dist/platform.d.ts +19 -6
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +310 -172
- package/dist/platform.js.map +1 -1
- package/dist/settings.d.ts +62 -19
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +16 -552
- package/dist/settings.js.map +1 -1
- package/dist/utils.d.ts +77 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +638 -1
- package/dist/utils.js.map +1 -1
- package/eslint.config.js +96 -0
- package/package.json +19 -15
- package/src/custom.d.ts +2 -1
- package/src/device/blindtilt.ts +462 -817
- package/src/device/bot.ts +862 -931
- package/src/device/ceilinglight.ts +259 -633
- package/src/device/colorbulb.ts +300 -688
- package/src/device/contact.ts +288 -571
- package/src/device/curtain.ts +441 -838
- package/src/device/device.ts +734 -0
- package/src/device/fan.ts +596 -0
- package/src/device/hub.ts +299 -645
- package/src/device/humidifier.ts +274 -647
- package/src/device/iosensor.ts +233 -626
- package/src/device/lightstrip.ts +309 -620
- package/src/device/lock.ts +292 -601
- package/src/device/meter.ts +228 -619
- package/src/device/meterplus.ts +216 -619
- package/src/device/motion.ts +218 -559
- package/src/device/plug.ts +111 -490
- package/src/device/robotvacuumcleaner.ts +228 -550
- package/src/device/waterdetector.ts +169 -501
- package/src/homebridge-ui/public/index.html +22 -16
- package/src/homebridge-ui/server.ts +1 -1
- package/src/index.ts +4 -3
- package/src/irdevice/airconditioner.ts +350 -477
- package/src/irdevice/airpurifier.ts +120 -330
- package/src/irdevice/camera.ts +53 -301
- package/src/irdevice/fan.ts +130 -360
- package/src/irdevice/irdevice.ts +346 -0
- package/src/irdevice/light.ts +157 -412
- package/src/irdevice/other.ts +507 -648
- package/src/irdevice/tv.ts +117 -367
- package/src/irdevice/vacuumcleaner.ts +59 -311
- package/src/irdevice/waterheater.ts +61 -320
- package/src/platform.ts +355 -219
- package/src/settings.ts +116 -611
- package/src/utils.ts +642 -1
- package/src/device/waterdetector.json +0 -11
package/dist/device/blindtilt.js
CHANGED
|
@@ -1,149 +1,77 @@
|
|
|
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 { Devices } from '../settings.js';
|
|
3
7
|
import { interval, Subject } from 'rxjs';
|
|
4
|
-
import
|
|
8
|
+
import { deviceBase } from './device.js';
|
|
9
|
+
import { BlindTiltMappingMode } from '../utils.js';
|
|
5
10
|
import { debounceTime, skipWhile, take, tap } from 'rxjs/operators';
|
|
6
|
-
|
|
7
|
-
var BlindTiltMappingMode;
|
|
8
|
-
(function (BlindTiltMappingMode) {
|
|
9
|
-
BlindTiltMappingMode["OnlyUp"] = "only_up";
|
|
10
|
-
BlindTiltMappingMode["OnlyDown"] = "only_down";
|
|
11
|
-
BlindTiltMappingMode["DownAndUp"] = "down_and_up";
|
|
12
|
-
BlindTiltMappingMode["UpAndDown"] = "up_and_down";
|
|
13
|
-
BlindTiltMappingMode["UseTiltForDirection"] = "use_tilt_for_direction";
|
|
14
|
-
})(BlindTiltMappingMode || (BlindTiltMappingMode = {}));
|
|
15
|
-
export class BlindTilt {
|
|
11
|
+
export class BlindTilt extends deviceBase {
|
|
16
12
|
platform;
|
|
17
|
-
accessory;
|
|
18
|
-
device;
|
|
19
|
-
api;
|
|
20
|
-
log;
|
|
21
|
-
config;
|
|
22
|
-
hap;
|
|
23
13
|
// Services
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
// Characteristic Values
|
|
28
|
-
BatteryLevel;
|
|
29
|
-
PositionState;
|
|
30
|
-
TargetPosition;
|
|
31
|
-
CurrentPosition;
|
|
32
|
-
StatusLowBattery;
|
|
33
|
-
FirmwareRevision;
|
|
34
|
-
CurrentAmbientLightLevel;
|
|
35
|
-
TargetHorizontalTiltAngle;
|
|
36
|
-
CurrentHorizontalTiltAngle;
|
|
37
|
-
// OpenAPI Status
|
|
38
|
-
OpenAPI_InMotion;
|
|
39
|
-
OpenAPI_BatteryLevel;
|
|
40
|
-
OpenAPI_Direction;
|
|
41
|
-
OpenAPI_Calibration;
|
|
42
|
-
OpenAPI_CurrentPosition;
|
|
43
|
-
OpenAPI_FirmwareRevision;
|
|
44
|
-
OpenAPI_CurrentAmbientLightLevel;
|
|
14
|
+
WindowCovering;
|
|
15
|
+
Battery;
|
|
16
|
+
LightSensor;
|
|
45
17
|
// OpenAPI Others
|
|
46
|
-
Mode;
|
|
47
|
-
setPositionMode;
|
|
48
18
|
mappingMode = BlindTiltMappingMode.OnlyUp;
|
|
49
|
-
// BLE Status
|
|
50
|
-
BLE_InMotion;
|
|
51
|
-
BLE_BatteryLevel;
|
|
52
|
-
BLE_Calibration;
|
|
53
|
-
BLE_CurrentPosition;
|
|
54
|
-
BLE_CurrentAmbientLightLevel;
|
|
55
|
-
// BLE Others
|
|
56
|
-
BLE_IsConnected;
|
|
57
|
-
spaceBetweenLevels;
|
|
58
19
|
// Target
|
|
59
20
|
setNewTarget;
|
|
60
21
|
setNewTargetTimer;
|
|
61
|
-
//MQTT stuff
|
|
62
|
-
mqttClient = null;
|
|
63
|
-
// Config
|
|
64
|
-
set_minStep;
|
|
65
|
-
updateRate;
|
|
66
|
-
set_minLux;
|
|
67
|
-
set_maxLux;
|
|
68
|
-
scanDuration;
|
|
69
|
-
deviceLogging;
|
|
70
|
-
deviceRefreshRate;
|
|
71
|
-
setCloseMode;
|
|
72
|
-
setOpenMode;
|
|
73
22
|
// Updates
|
|
74
23
|
blindTiltUpdateInProgress;
|
|
75
24
|
doBlindTiltUpdate;
|
|
76
|
-
// Connection
|
|
77
|
-
OpenAPI;
|
|
78
|
-
BLE;
|
|
79
25
|
constructor(platform, accessory, device) {
|
|
26
|
+
super(platform, accessory, device);
|
|
80
27
|
this.platform = platform;
|
|
81
|
-
this.accessory = accessory;
|
|
82
|
-
this.device = device;
|
|
83
|
-
this.api = this.platform.api;
|
|
84
|
-
this.log = this.platform.log;
|
|
85
|
-
this.config = this.platform.config;
|
|
86
|
-
this.hap = this.api.hap;
|
|
87
|
-
// Connection
|
|
88
|
-
this.BLE = this.device.connectionType === 'BLE' || this.device.connectionType === 'BLE/OpenAPI';
|
|
89
|
-
this.OpenAPI = this.device.connectionType === 'OpenAPI' || this.device.connectionType === 'BLE/OpenAPI';
|
|
90
28
|
// default placeholders
|
|
91
|
-
this.deviceLogs(device);
|
|
92
|
-
this.refreshRate(device);
|
|
93
|
-
this.scan(device);
|
|
94
|
-
this.setupMqtt(device);
|
|
95
|
-
this.deviceContext();
|
|
96
|
-
this.deviceConfig(device);
|
|
97
29
|
this.mappingMode = device.blindTilt?.mode ?? BlindTiltMappingMode.OnlyUp;
|
|
98
30
|
this.debugLog(`Mapping mode: ${this.mappingMode}`);
|
|
99
31
|
// this is subject we use to track when we need to POST changes to the SwitchBot API
|
|
100
32
|
this.doBlindTiltUpdate = new Subject();
|
|
101
33
|
this.blindTiltUpdateInProgress = false;
|
|
102
34
|
this.setNewTarget = false;
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.getService(this.hap.Service.
|
|
108
|
-
.
|
|
109
|
-
.
|
|
110
|
-
.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (!this.windowCoveringService.testCharacteristic(this.hap.Characteristic.ConfiguredName)) {
|
|
120
|
-
this.windowCoveringService.addCharacteristic(this.hap.Characteristic.ConfiguredName, accessory.displayName);
|
|
121
|
-
}
|
|
122
|
-
// create handlers for required characteristics
|
|
123
|
-
this.windowCoveringService.setCharacteristic(this.hap.Characteristic.PositionState, this.PositionState);
|
|
124
|
-
this.windowCoveringService
|
|
125
|
-
.getCharacteristic(this.hap.Characteristic.CurrentPosition)
|
|
35
|
+
// Initialize WindowCovering Service
|
|
36
|
+
accessory.context.WindowCovering = accessory.context.WindowCovering ?? {};
|
|
37
|
+
this.WindowCovering = {
|
|
38
|
+
Name: accessory.context.WindowCovering.Name ?? accessory.displayName,
|
|
39
|
+
Service: accessory.getService(this.hap.Service.WindowCovering) ?? accessory.addService(this.hap.Service.WindowCovering),
|
|
40
|
+
PositionState: accessory.context.PositionState ?? this.hap.Characteristic.PositionState.STOPPED,
|
|
41
|
+
TargetPosition: accessory.context.TargetPosition ?? 100,
|
|
42
|
+
CurrentPosition: accessory.context.CurrentPosition ?? 100,
|
|
43
|
+
TargetHorizontalTiltAngle: accessory.context.TargetHorizontalTiltAngle ?? 90,
|
|
44
|
+
CurrentHorizontalTiltAngle: accessory.context.CurrentHorizontalTiltAngle ?? 90,
|
|
45
|
+
};
|
|
46
|
+
accessory.context.WindowCovering = this.WindowCovering;
|
|
47
|
+
// Initialize WindowCovering Characteristics
|
|
48
|
+
this.WindowCovering.Service
|
|
49
|
+
.setCharacteristic(this.hap.Characteristic.Name, this.WindowCovering.Name)
|
|
50
|
+
.getCharacteristic(this.hap.Characteristic.TargetPosition)
|
|
126
51
|
.setProps({
|
|
127
|
-
minStep: this.minStep(device),
|
|
52
|
+
minStep: Number(this.minStep(device)),
|
|
128
53
|
minValue: 0,
|
|
129
54
|
maxValue: 100,
|
|
130
55
|
validValueRanges: [0, 100],
|
|
131
56
|
})
|
|
132
57
|
.onGet(() => {
|
|
133
|
-
return this.
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
|
|
58
|
+
return this.WindowCovering.TargetPosition;
|
|
59
|
+
})
|
|
60
|
+
.onSet(this.TargetPositionSet.bind(this));
|
|
61
|
+
// Initialize WindowCovering CurrentPosition Characteristic
|
|
62
|
+
this.WindowCovering.Service
|
|
63
|
+
.getCharacteristic(this.hap.Characteristic.CurrentPosition)
|
|
137
64
|
.setProps({
|
|
138
|
-
minStep: this.minStep(device),
|
|
65
|
+
minStep: Number(this.minStep(device)),
|
|
139
66
|
minValue: 0,
|
|
140
67
|
maxValue: 100,
|
|
141
68
|
validValueRanges: [0, 100],
|
|
142
|
-
})
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
69
|
+
}).onGet(() => {
|
|
70
|
+
return this.WindowCovering?.CurrentPosition ?? 0;
|
|
71
|
+
});
|
|
72
|
+
// Initialize WindowCovering TargetHorizontalTiltAngle Characteristic
|
|
73
|
+
this.WindowCovering.Service
|
|
74
|
+
.getCharacteristic(this.hap.Characteristic.TargetHorizontalTiltAngle)
|
|
147
75
|
.setProps({
|
|
148
76
|
minStep: 180,
|
|
149
77
|
minValue: -90,
|
|
@@ -151,27 +79,62 @@ export class BlindTilt {
|
|
|
151
79
|
validValues: [-90, 90],
|
|
152
80
|
})
|
|
153
81
|
.onGet(() => {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
this.
|
|
159
|
-
.getCharacteristic(this.hap.Characteristic.
|
|
82
|
+
return this.WindowCovering.TargetHorizontalTiltAngle;
|
|
83
|
+
})
|
|
84
|
+
.onSet(this.TargetHorizontalTiltAngleSet.bind(this));
|
|
85
|
+
// Initialize WindowCovering CurrentHorizontalTiltAngle Characteristic
|
|
86
|
+
this.WindowCovering.Service
|
|
87
|
+
.getCharacteristic(this.hap.Characteristic.CurrentHorizontalTiltAngle)
|
|
160
88
|
.setProps({
|
|
161
89
|
minStep: 180,
|
|
162
90
|
minValue: -90,
|
|
163
91
|
maxValue: 90,
|
|
164
92
|
validValues: [-90, 90],
|
|
165
|
-
})
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
93
|
+
}).onGet(() => {
|
|
94
|
+
return this.WindowCovering.CurrentHorizontalTiltAngle ?? 0;
|
|
95
|
+
});
|
|
96
|
+
// Initialize Battery Service
|
|
97
|
+
accessory.context.Battery = accessory.context.Battery ?? {};
|
|
98
|
+
this.Battery = {
|
|
99
|
+
Name: accessory.context.Battery.Name ?? `${accessory.displayName} Battery`,
|
|
100
|
+
Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery),
|
|
101
|
+
BatteryLevel: accessory.context.BatteryLevel ?? 100,
|
|
102
|
+
StatusLowBattery: this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
|
|
103
|
+
ChargingState: accessory.context.ChargingState ?? this.hap.Characteristic.ChargingState.NOT_CHARGING,
|
|
104
|
+
};
|
|
105
|
+
accessory.context.Battery = this.Battery;
|
|
106
|
+
// Initialize Battery Name Characteristic
|
|
107
|
+
this.Battery.Service
|
|
108
|
+
.setCharacteristic(this.hap.Characteristic.Name, this.Battery.Name)
|
|
109
|
+
.setCharacteristic(this.hap.Characteristic.ChargingState, this.hap.Characteristic.ChargingState.NOT_CHARGEABLE);
|
|
110
|
+
// Initialize LightSensor Service
|
|
111
|
+
if (device.blindTilt?.hide_lightsensor) {
|
|
112
|
+
if (this.LightSensor?.Service) {
|
|
113
|
+
this.debugLog(`${device.deviceType}: ${accessory.displayName} Removing Light Sensor Service`);
|
|
114
|
+
this.LightSensor.Service = accessory.getService(this.hap.Service.LightSensor);
|
|
115
|
+
accessory.removeService(this.LightSensor.Service);
|
|
116
|
+
accessory.context.LightSensor = {};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
accessory.context.LightSensor = accessory.context.LightSensor ?? {};
|
|
121
|
+
this.LightSensor = {
|
|
122
|
+
Name: accessory.context.LightSensor.Name ?? `${accessory.displayName} Light Sensor`,
|
|
123
|
+
Service: accessory.getService(this.hap.Service.LightSensor) ?? accessory.addService(this.hap.Service.LightSensor),
|
|
124
|
+
CurrentAmbientLightLevel: accessory.context.CurrentAmbientLightLevel ?? 0.0001,
|
|
125
|
+
};
|
|
126
|
+
accessory.context.LightSensor = this.LightSensor;
|
|
127
|
+
// Initialize LightSensor Characteristics
|
|
128
|
+
this.LightSensor.Service
|
|
129
|
+
.setCharacteristic(this.hap.Characteristic.Name, this.LightSensor.Name)
|
|
130
|
+
.setCharacteristic(this.hap.Characteristic.StatusActive, true)
|
|
131
|
+
.getCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel)
|
|
132
|
+
.onGet(() => {
|
|
133
|
+
return this.LightSensor?.CurrentAmbientLightLevel ?? 0.0001;
|
|
134
|
+
});
|
|
174
135
|
}
|
|
136
|
+
// Retrieve initial values and updateHomekit
|
|
137
|
+
this.refreshStatus();
|
|
175
138
|
// Update Homekit
|
|
176
139
|
this.updateHomeKitCharacteristics();
|
|
177
140
|
// Start an update interval
|
|
@@ -181,21 +144,23 @@ export class BlindTilt {
|
|
|
181
144
|
await this.refreshStatus();
|
|
182
145
|
});
|
|
183
146
|
//regisiter webhook event handler
|
|
184
|
-
if (
|
|
185
|
-
this.
|
|
147
|
+
if (device.webhook) {
|
|
148
|
+
this.debugLog(`${device.deviceType}: ${accessory.displayName} is listening webhook.`);
|
|
186
149
|
this.platform.webhookEventHandler[this.device.deviceId] = async (context) => {
|
|
187
150
|
try {
|
|
188
|
-
this.
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
151
|
+
this.debugLog(`${device.deviceType}: ${accessory.displayName} received Webhook: ${JSON.stringify(context)}`);
|
|
152
|
+
const { slidePosition, battery, lightLevel } = context;
|
|
153
|
+
const { CurrentPosition } = this.WindowCovering;
|
|
154
|
+
const { BatteryLevel } = this.Battery;
|
|
155
|
+
const { CurrentAmbientLightLevel } = this.LightSensor ?? {};
|
|
156
|
+
this.debugLog(`${device.deviceType}: ${accessory.displayName} (slidePosition, battery, lightLevel) = `
|
|
157
|
+
+ `Webhook:(${slidePosition}, ${battery}, ${lightLevel}), current:(${CurrentPosition}, ${BatteryLevel}, ${CurrentAmbientLightLevel})`);
|
|
158
|
+
this.WindowCovering.CurrentPosition = slidePosition;
|
|
159
|
+
this.Battery.BatteryLevel = battery;
|
|
160
|
+
if (!device.blindTilt?.hide_lightsensor) {
|
|
161
|
+
this.LightSensor.CurrentAmbientLightLevel = lightLevel;
|
|
162
|
+
}
|
|
163
|
+
this.updateHomeKitCharacteristics();
|
|
199
164
|
}
|
|
200
165
|
catch (e) {
|
|
201
166
|
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
@@ -204,13 +169,14 @@ export class BlindTilt {
|
|
|
204
169
|
};
|
|
205
170
|
}
|
|
206
171
|
// update slide progress
|
|
207
|
-
interval(this.
|
|
172
|
+
interval(this.deviceUpdateRate * 1000)
|
|
208
173
|
//.pipe(skipWhile(() => this.blindTiltUpdateInProgress))
|
|
209
174
|
.subscribe(async () => {
|
|
210
|
-
if (this.PositionState === this.hap.Characteristic.PositionState.STOPPED) {
|
|
175
|
+
if (this.WindowCovering.PositionState === this.hap.Characteristic.PositionState.STOPPED) {
|
|
211
176
|
return;
|
|
212
177
|
}
|
|
213
|
-
this.debugLog(`${
|
|
178
|
+
this.debugLog(`${device.deviceType}: ${accessory.displayName} Refresh Status When Moving,`
|
|
179
|
+
+ ` PositionState: ${this.WindowCovering.PositionState}`);
|
|
214
180
|
await this.refreshStatus();
|
|
215
181
|
});
|
|
216
182
|
// Watch for BlindTilt change events
|
|
@@ -225,206 +191,228 @@ export class BlindTilt {
|
|
|
225
191
|
}
|
|
226
192
|
catch (e) {
|
|
227
193
|
this.apiError(e);
|
|
228
|
-
this.errorLog(`${
|
|
194
|
+
this.errorLog(`${device.deviceType}: ${accessory.displayName} failed pushChanges with ${device.connectionType} Connection,` +
|
|
229
195
|
` Error Message: ${JSON.stringify(e.message)}`);
|
|
230
196
|
}
|
|
231
197
|
this.blindTiltUpdateInProgress = false;
|
|
232
198
|
});
|
|
233
199
|
}
|
|
234
200
|
/**
|
|
235
|
-
* Parse the device status from the
|
|
201
|
+
* Parse the device status from the SwitchBotBLE API
|
|
236
202
|
*/
|
|
237
|
-
async
|
|
238
|
-
if (!this.device.enableCloudService && this.OpenAPI) {
|
|
239
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} parseStatus enableCloudService: ${this.device.enableCloudService}`);
|
|
240
|
-
}
|
|
241
|
-
else if (this.BLE) {
|
|
242
|
-
await this.BLEparseStatus();
|
|
243
|
-
}
|
|
244
|
-
else if (this.OpenAPI && this.platform.config.credentials?.token) {
|
|
245
|
-
await this.openAPIparseStatus();
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
await this.offlineOff();
|
|
249
|
-
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Connection Type:` + ` ${this.device.connectionType}, parseStatus will not happen.`);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
async BLEparseStatus() {
|
|
203
|
+
async BLEparseStatus(serviceData) {
|
|
253
204
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEparseStatus`);
|
|
254
205
|
// CurrentPosition
|
|
255
|
-
this.CurrentPosition = 100 - Number(
|
|
206
|
+
this.WindowCovering.CurrentPosition = 100 - Number(serviceData.position);
|
|
256
207
|
await this.setMinMax();
|
|
257
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition ${this.CurrentPosition}`);
|
|
208
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition ${this.WindowCovering.CurrentPosition}`);
|
|
258
209
|
if (this.setNewTarget) {
|
|
259
210
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Checking Status ...`);
|
|
260
211
|
}
|
|
261
|
-
if (this.setNewTarget &&
|
|
212
|
+
if (this.setNewTarget && serviceData.inMotion) {
|
|
262
213
|
await this.setMinMax();
|
|
263
|
-
if (Number(this.TargetPosition) > this.CurrentPosition) {
|
|
264
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Closing, CurrentPosition: ${this.CurrentPosition}`);
|
|
265
|
-
this.PositionState = this.hap.Characteristic.PositionState.INCREASING;
|
|
266
|
-
this.
|
|
267
|
-
this.debugLog(`${this.device.deviceType}: ${this.CurrentPosition} INCREASING
|
|
214
|
+
if (Number(this.WindowCovering.TargetPosition) > this.WindowCovering.CurrentPosition) {
|
|
215
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Closing, CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
216
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.INCREASING;
|
|
217
|
+
this.WindowCovering.Service.getCharacteristic(this.hap.Characteristic.PositionState).updateValue(this.WindowCovering.PositionState);
|
|
218
|
+
this.debugLog(`${this.device.deviceType}: ${this.WindowCovering.CurrentPosition} INCREASING`
|
|
219
|
+
+ ` PositionState: ${this.WindowCovering.PositionState}`);
|
|
268
220
|
}
|
|
269
|
-
else if (Number(this.TargetPosition) < this.CurrentPosition) {
|
|
270
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Opening, CurrentPosition: ${this.CurrentPosition}`);
|
|
271
|
-
this.PositionState = this.hap.Characteristic.PositionState.DECREASING;
|
|
272
|
-
this.
|
|
273
|
-
this.debugLog(`${this.device.deviceType}: ${this.CurrentPosition} DECREASING
|
|
221
|
+
else if (Number(this.WindowCovering.TargetPosition) < this.WindowCovering.CurrentPosition) {
|
|
222
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Opening, CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
223
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.DECREASING;
|
|
224
|
+
this.WindowCovering.Service.getCharacteristic(this.hap.Characteristic.PositionState).updateValue(this.WindowCovering.PositionState);
|
|
225
|
+
this.debugLog(`${this.device.deviceType}: ${this.WindowCovering.CurrentPosition} DECREASING`
|
|
226
|
+
+ ` PositionState: ${this.WindowCovering.PositionState}`);
|
|
274
227
|
}
|
|
275
228
|
else {
|
|
276
|
-
this.debugLog(`${this.device.deviceType}: ${this.CurrentPosition} Standby2
|
|
277
|
-
|
|
278
|
-
this.
|
|
279
|
-
this.
|
|
229
|
+
this.debugLog(`${this.device.deviceType}: ${this.WindowCovering.CurrentPosition} Standby2,`
|
|
230
|
+
+ ` CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
231
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.STOPPED;
|
|
232
|
+
this.WindowCovering.Service.getCharacteristic(this.hap.Characteristic.PositionState).updateValue(this.WindowCovering.PositionState);
|
|
233
|
+
this.debugLog(`${this.device.deviceType}: ${this.WindowCovering.CurrentPosition} STOPPED`
|
|
234
|
+
+ ` PositionState: ${this.WindowCovering.PositionState}`);
|
|
280
235
|
}
|
|
281
236
|
}
|
|
282
237
|
else {
|
|
283
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Standby, CurrentPosition: ${this.CurrentPosition}`);
|
|
284
|
-
this.TargetPosition = this.CurrentPosition;
|
|
285
|
-
this.PositionState = this.hap.Characteristic.PositionState.STOPPED;
|
|
238
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Standby, CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
239
|
+
this.WindowCovering.TargetPosition = this.WindowCovering.CurrentPosition;
|
|
240
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.STOPPED;
|
|
286
241
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Stopped`);
|
|
287
242
|
}
|
|
288
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition},`
|
|
289
|
-
` TargetPosition: ${this.TargetPosition}, PositionState: ${this.PositionState},`);
|
|
243
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.WindowCovering.CurrentPosition},`
|
|
244
|
+
+ ` TargetPosition: ${this.WindowCovering.TargetPosition}, PositionState: ${this.WindowCovering.PositionState},`);
|
|
290
245
|
if (!this.device.blindTilt?.hide_lightsensor) {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
246
|
+
const set_minLux = await this.minLux();
|
|
247
|
+
const set_maxLux = await this.maxLux();
|
|
248
|
+
const spaceBetweenLevels = 9;
|
|
249
|
+
if (this.LightSensor?.CurrentAmbientLightLevel === 0) {
|
|
250
|
+
this.LightSensor.CurrentAmbientLightLevel = 0.0001;
|
|
251
|
+
}
|
|
294
252
|
// Brightness
|
|
295
|
-
switch (
|
|
253
|
+
switch (serviceData.lightLevel) {
|
|
296
254
|
case 1:
|
|
297
|
-
this.CurrentAmbientLightLevel =
|
|
298
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
255
|
+
this.LightSensor.CurrentAmbientLightLevel = set_minLux;
|
|
256
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel}`);
|
|
299
257
|
break;
|
|
300
258
|
case 2:
|
|
301
|
-
this.CurrentAmbientLightLevel = (
|
|
302
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
303
|
-
` Calculation: ${(
|
|
259
|
+
this.LightSensor.CurrentAmbientLightLevel = (set_maxLux - set_minLux) / spaceBetweenLevels;
|
|
260
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel},` +
|
|
261
|
+
` Calculation: ${(set_maxLux - set_minLux) / spaceBetweenLevels}`);
|
|
304
262
|
break;
|
|
305
263
|
case 3:
|
|
306
|
-
this.CurrentAmbientLightLevel = ((
|
|
307
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
264
|
+
this.LightSensor.CurrentAmbientLightLevel = ((set_maxLux - set_minLux) / spaceBetweenLevels) * 2;
|
|
265
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel}`);
|
|
308
266
|
break;
|
|
309
267
|
case 4:
|
|
310
|
-
this.CurrentAmbientLightLevel = ((
|
|
311
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
268
|
+
this.LightSensor.CurrentAmbientLightLevel = ((set_maxLux - set_minLux) / spaceBetweenLevels) * 3;
|
|
269
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel}`);
|
|
312
270
|
break;
|
|
313
271
|
case 5:
|
|
314
|
-
this.CurrentAmbientLightLevel = ((
|
|
315
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
272
|
+
this.LightSensor.CurrentAmbientLightLevel = ((set_maxLux - set_minLux) / spaceBetweenLevels) * 4;
|
|
273
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel}`);
|
|
316
274
|
break;
|
|
317
275
|
case 6:
|
|
318
|
-
this.CurrentAmbientLightLevel = ((
|
|
319
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
276
|
+
this.LightSensor.CurrentAmbientLightLevel = ((set_maxLux - set_minLux) / spaceBetweenLevels) * 5;
|
|
277
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel}`);
|
|
320
278
|
break;
|
|
321
279
|
case 7:
|
|
322
|
-
this.CurrentAmbientLightLevel = ((
|
|
323
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
280
|
+
this.LightSensor.CurrentAmbientLightLevel = ((set_maxLux - set_minLux) / spaceBetweenLevels) * 6;
|
|
281
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel}`);
|
|
324
282
|
break;
|
|
325
283
|
case 8:
|
|
326
|
-
this.CurrentAmbientLightLevel = ((
|
|
327
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
284
|
+
this.LightSensor.CurrentAmbientLightLevel = ((set_maxLux - set_minLux) / spaceBetweenLevels) * 7;
|
|
285
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel}`);
|
|
328
286
|
break;
|
|
329
287
|
case 9:
|
|
330
|
-
this.CurrentAmbientLightLevel = ((
|
|
331
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
288
|
+
this.LightSensor.CurrentAmbientLightLevel = ((set_maxLux - set_minLux) / spaceBetweenLevels) * 8;
|
|
289
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel}`);
|
|
332
290
|
break;
|
|
333
291
|
case 10:
|
|
334
292
|
default:
|
|
335
|
-
this.CurrentAmbientLightLevel =
|
|
293
|
+
this.LightSensor.CurrentAmbientLightLevel = set_maxLux;
|
|
336
294
|
this.debugLog();
|
|
337
295
|
}
|
|
338
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${
|
|
339
|
-
` CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
|
|
296
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${serviceData.lightLevel},` +
|
|
297
|
+
` CurrentAmbientLightLevel: ${this.LightSensor.CurrentAmbientLightLevel}`);
|
|
340
298
|
}
|
|
341
299
|
// Battery
|
|
342
|
-
this.BatteryLevel = Number(
|
|
343
|
-
if (this.BatteryLevel < 10) {
|
|
344
|
-
this.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
|
|
300
|
+
this.Battery.BatteryLevel = Number(serviceData.battery);
|
|
301
|
+
if (this.Battery.BatteryLevel < 10) {
|
|
302
|
+
this.Battery.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
|
|
345
303
|
}
|
|
346
304
|
else {
|
|
347
|
-
this.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
|
|
305
|
+
this.Battery.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
|
|
348
306
|
}
|
|
349
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel},`
|
|
307
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.Battery.BatteryLevel},`
|
|
308
|
+
+ ` StatusLowBattery: ${this.Battery.StatusLowBattery}`);
|
|
350
309
|
}
|
|
351
|
-
|
|
310
|
+
/**
|
|
311
|
+
* Parse the device status from the SwitchBot OpenAPI
|
|
312
|
+
*/
|
|
313
|
+
async openAPIparseStatus(deviceStatus) {
|
|
352
314
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIparseStatus`);
|
|
353
|
-
const [homekitPosition, homekitTiltAngle] = this.mapDeviceValuesToHomekitValues(Number(
|
|
354
|
-
this.debugLog(` device: ${
|
|
355
|
-
this.CurrentPosition = homekitPosition;
|
|
315
|
+
const [homekitPosition, homekitTiltAngle] = this.mapDeviceValuesToHomekitValues(Number(deviceStatus.body.slidePosition), String(deviceStatus.body.direction));
|
|
316
|
+
this.debugLog(` device: ${deviceStatus.body.slidePosition} => HK: ${homekitPosition}`);
|
|
317
|
+
this.WindowCovering.CurrentPosition = homekitPosition;
|
|
356
318
|
// CurrentPosition
|
|
357
319
|
await this.setMinMax();
|
|
358
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition}`);
|
|
320
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
359
321
|
if (homekitTiltAngle) {
|
|
360
|
-
this.CurrentHorizontalTiltAngle = homekitTiltAngle;
|
|
361
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}
|
|
322
|
+
this.WindowCovering.CurrentHorizontalTiltAngle = homekitTiltAngle;
|
|
323
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
|
|
324
|
+
+ ` CurrentHorizontalTiltAngle: ${this.WindowCovering.CurrentHorizontalTiltAngle}`);
|
|
362
325
|
}
|
|
363
326
|
if (this.setNewTarget) {
|
|
364
327
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Checking Status ...`);
|
|
365
328
|
}
|
|
366
|
-
if (this.setNewTarget &&
|
|
329
|
+
if (this.setNewTarget && deviceStatus.body.moving) {
|
|
367
330
|
await this.setMinMax();
|
|
368
|
-
if (this.TargetPosition > this.CurrentPosition
|
|
369
|
-
|
|
370
|
-
this.
|
|
371
|
-
this.
|
|
372
|
-
this.
|
|
331
|
+
if (this.WindowCovering.TargetPosition > this.WindowCovering.CurrentPosition
|
|
332
|
+
|| (homekitTiltAngle && this.WindowCovering.TargetHorizontalTiltAngle !== this.WindowCovering.CurrentHorizontalTiltAngle)) {
|
|
333
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Closing, CurrentPosition: ${this.WindowCovering.CurrentPosition} `);
|
|
334
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.INCREASING;
|
|
335
|
+
this.WindowCovering.Service.getCharacteristic(this.hap.Characteristic.PositionState).updateValue(this.WindowCovering.PositionState);
|
|
336
|
+
this.debugLog(`${this.device.deviceType}: ${this.WindowCovering.CurrentPosition} INCREASING`
|
|
337
|
+
+ ` PositionState: ${this.WindowCovering.PositionState}`);
|
|
373
338
|
}
|
|
374
|
-
else if (this.TargetPosition < this.CurrentPosition) {
|
|
375
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Opening, CurrentPosition: ${this.CurrentPosition} `);
|
|
376
|
-
this.PositionState = this.hap.Characteristic.PositionState.DECREASING;
|
|
377
|
-
this.
|
|
378
|
-
this.debugLog(`${this.device.deviceType}: ${this.CurrentPosition} DECREASING
|
|
339
|
+
else if (this.WindowCovering.TargetPosition < this.WindowCovering.CurrentPosition) {
|
|
340
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Opening, CurrentPosition: ${this.WindowCovering.CurrentPosition} `);
|
|
341
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.DECREASING;
|
|
342
|
+
this.WindowCovering.Service.getCharacteristic(this.hap.Characteristic.PositionState).updateValue(this.WindowCovering.PositionState);
|
|
343
|
+
this.debugLog(`${this.device.deviceType}: ${this.WindowCovering.CurrentPosition} DECREASING`
|
|
344
|
+
+ ` PositionState: ${this.WindowCovering.PositionState}`);
|
|
379
345
|
}
|
|
380
346
|
else {
|
|
381
|
-
this.debugLog(`${this.device.deviceType}: ${this.CurrentPosition} Standby because reached position,`
|
|
382
|
-
|
|
383
|
-
this.
|
|
384
|
-
this.
|
|
347
|
+
this.debugLog(`${this.device.deviceType}: ${this.WindowCovering.CurrentPosition} Standby because reached position,`
|
|
348
|
+
+ ` CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
349
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.STOPPED;
|
|
350
|
+
this.WindowCovering.Service.getCharacteristic(this.hap.Characteristic.PositionState).updateValue(this.WindowCovering.PositionState);
|
|
351
|
+
this.debugLog(`${this.device.deviceType}: ${this.WindowCovering.CurrentPosition} STOPPED`
|
|
352
|
+
+ ` PositionState: ${this.WindowCovering.PositionState}`);
|
|
385
353
|
}
|
|
386
354
|
}
|
|
387
355
|
else {
|
|
388
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Standby because device not moving,`
|
|
389
|
-
|
|
356
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Standby because device not moving,`
|
|
357
|
+
+ ` CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
358
|
+
this.WindowCovering.TargetPosition = this.WindowCovering.CurrentPosition;
|
|
390
359
|
if (homekitTiltAngle) {
|
|
391
|
-
this.TargetHorizontalTiltAngle = this.CurrentHorizontalTiltAngle;
|
|
360
|
+
this.WindowCovering.TargetHorizontalTiltAngle = this.WindowCovering.CurrentHorizontalTiltAngle;
|
|
392
361
|
}
|
|
393
|
-
this.PositionState = this.hap.Characteristic.PositionState.STOPPED;
|
|
362
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.STOPPED;
|
|
394
363
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Stopped`);
|
|
395
364
|
}
|
|
396
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition},` +
|
|
397
|
-
` TargetPosition: ${this.TargetPosition}, PositionState: ${this.PositionState},`);
|
|
365
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.WindowCovering.CurrentPosition},` +
|
|
366
|
+
` TargetPosition: ${this.WindowCovering.TargetPosition}, PositionState: ${this.WindowCovering.PositionState},`);
|
|
398
367
|
if (!this.device.blindTilt?.hide_lightsensor) {
|
|
399
|
-
|
|
400
|
-
|
|
368
|
+
const set_minLux = await this.minLux();
|
|
369
|
+
const set_maxLux = await this.maxLux();
|
|
401
370
|
// Brightness
|
|
402
|
-
switch (
|
|
371
|
+
switch (deviceStatus.body.brightness) {
|
|
403
372
|
case 'dim':
|
|
404
|
-
this.CurrentAmbientLightLevel =
|
|
373
|
+
this.LightSensor.CurrentAmbientLightLevel = set_minLux;
|
|
405
374
|
break;
|
|
406
375
|
case 'bright':
|
|
407
376
|
default:
|
|
408
|
-
this.CurrentAmbientLightLevel =
|
|
377
|
+
this.LightSensor.CurrentAmbientLightLevel = set_maxLux;
|
|
409
378
|
}
|
|
410
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}
|
|
379
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
|
|
380
|
+
+ ` CurrentAmbientLightLevel: ${this.LightSensor.CurrentAmbientLightLevel}`);
|
|
411
381
|
}
|
|
412
382
|
// BatteryLevel
|
|
413
|
-
this.BatteryLevel = Number(
|
|
414
|
-
if (this.BatteryLevel < 10) {
|
|
415
|
-
this.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
|
|
383
|
+
this.Battery.BatteryLevel = Number(deviceStatus.body.battery);
|
|
384
|
+
if (this.Battery.BatteryLevel < 10) {
|
|
385
|
+
this.Battery.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
|
|
416
386
|
}
|
|
417
387
|
else {
|
|
418
|
-
this.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
|
|
388
|
+
this.Battery.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
|
|
389
|
+
}
|
|
390
|
+
if (Number.isNaN(this.Battery.BatteryLevel)) {
|
|
391
|
+
this.Battery.BatteryLevel = 100;
|
|
392
|
+
}
|
|
393
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.Battery.BatteryLevel},`
|
|
394
|
+
+ ` StatusLowBattery: ${this.Battery.StatusLowBattery}`);
|
|
395
|
+
// Firmware Version
|
|
396
|
+
const version = deviceStatus.body.version?.toString();
|
|
397
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
|
|
398
|
+
let deviceVersion;
|
|
399
|
+
if (version?.includes('.') === false) {
|
|
400
|
+
const replace = version?.replace(/^V|-.*$/g, '');
|
|
401
|
+
const match = replace?.match(/.{1,1}/g);
|
|
402
|
+
const blindTiltVersion = match?.join('.') ?? '0.0.0';
|
|
403
|
+
deviceVersion = blindTiltVersion;
|
|
419
404
|
}
|
|
420
|
-
|
|
421
|
-
|
|
405
|
+
else {
|
|
406
|
+
deviceVersion = version?.replace(/^V|-.*$/g, '') ?? '0.0.0';
|
|
422
407
|
}
|
|
423
|
-
this.
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
408
|
+
this.accessory
|
|
409
|
+
.getService(this.hap.Service.AccessoryInformation)
|
|
410
|
+
.setCharacteristic(this.hap.Characteristic.HardwareRevision, deviceVersion)
|
|
411
|
+
.setCharacteristic(this.hap.Characteristic.FirmwareRevision, deviceVersion)
|
|
412
|
+
.getCharacteristic(this.hap.Characteristic.FirmwareRevision)
|
|
413
|
+
.updateValue(deviceVersion);
|
|
414
|
+
this.accessory.context.deviceVersion = deviceVersion;
|
|
415
|
+
this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceVersion: ${this.accessory.context.deviceVersion}`);
|
|
428
416
|
}
|
|
429
417
|
async refreshStatus() {
|
|
430
418
|
if (!this.device.enableCloudService && this.OpenAPI) {
|
|
@@ -455,21 +443,13 @@ export class BlindTilt {
|
|
|
455
443
|
// Start to monitor advertisement packets
|
|
456
444
|
(async () => {
|
|
457
445
|
// Start to monitor advertisement packets
|
|
458
|
-
await switchbot.startScan({
|
|
459
|
-
model: 'x',
|
|
460
|
-
id: this.device.bleMac,
|
|
461
|
-
});
|
|
446
|
+
await switchbot.startScan({ model: this.device.bleModel, id: this.device.bleMac });
|
|
462
447
|
// Set an event handler
|
|
463
448
|
switchbot.onadvertisement = (ad) => {
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
449
|
+
if (this.device.bleMac === ad.address && ad.model === this.device.bleModel) {
|
|
450
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ${JSON.stringify(ad, null, ' ')}`);
|
|
451
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} address: ${ad.address}, model: ${ad.model}`);
|
|
467
452
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
|
|
468
|
-
this.BLE_Calibration = ad.serviceData.calibration;
|
|
469
|
-
this.BLE_BatteryLevel = ad.serviceData.battery;
|
|
470
|
-
this.BLE_InMotion = ad.serviceData.inMotion;
|
|
471
|
-
this.BLE_CurrentPosition = ad.serviceData.position;
|
|
472
|
-
this.BLE_CurrentAmbientLightLevel = ad.serviceData.lightLevel;
|
|
473
453
|
}
|
|
474
454
|
else {
|
|
475
455
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
|
|
@@ -480,82 +460,25 @@ export class BlindTilt {
|
|
|
480
460
|
// Stop to monitor
|
|
481
461
|
await switchbot.stopScan();
|
|
482
462
|
// Update HomeKit
|
|
483
|
-
await this.BLEparseStatus();
|
|
463
|
+
await this.BLEparseStatus(switchbot.onadvertisement.serviceData);
|
|
484
464
|
await this.updateHomeKitCharacteristics();
|
|
485
465
|
})();
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
model: 'c',
|
|
490
|
-
id: this.device.bleMac,
|
|
491
|
-
})
|
|
492
|
-
.then(async () => {
|
|
493
|
-
// Set an event handler
|
|
494
|
-
switchbot.onadvertisement = async (ad: ad) => {
|
|
495
|
-
this.debugLog(
|
|
496
|
-
`${this.device.deviceType}: ${this.accessory.displayName} Config BLE Address: ${this.device.bleMac},` +
|
|
497
|
-
` BLE Address Found: ${ad.address}`,
|
|
498
|
-
);
|
|
499
|
-
this.BLE_Calibration = ad.serviceData.calibration;
|
|
500
|
-
this.BLE_BatteryLevel = ad.serviceData.battery;
|
|
501
|
-
this.BLE_InMotion = ad.serviceData.inMotion;
|
|
502
|
-
this.BLE_CurrentPosition = ad.serviceData.position;
|
|
503
|
-
this.BLE_CurrentAmbientLightLevel = ad.serviceData.lightLevel;
|
|
504
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
|
|
505
|
-
this.debugLog(
|
|
506
|
-
`${this.device.deviceType}: ${this.accessory.displayName} calibration: ${ad.serviceData.calibration}, ` +
|
|
507
|
-
`position: ${ad.serviceData.position}, lightLevel: ${ad.serviceData.lightLevel}, battery: ${ad.serviceData.battery}, ` +
|
|
508
|
-
`inMotion: ${ad.serviceData.inMotion}`,
|
|
509
|
-
);
|
|
510
|
-
|
|
511
|
-
if (ad.serviceData) {
|
|
512
|
-
this.BLE_IsConnected = true;
|
|
513
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} connected: ${this.BLE_IsConnected}`);
|
|
514
|
-
await this.stopScanning(switchbot);
|
|
515
|
-
} else {
|
|
516
|
-
this.BLE_IsConnected = false;
|
|
517
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} connected: ${this.BLE_IsConnected}`);
|
|
518
|
-
}
|
|
519
|
-
};
|
|
520
|
-
// Wait
|
|
521
|
-
return await sleep(this.scanDuration * 1000);
|
|
522
|
-
})
|
|
523
|
-
.then(async () => {
|
|
524
|
-
// Stop to monitor
|
|
525
|
-
await this.stopScanning(switchbot);
|
|
526
|
-
})
|
|
527
|
-
.catch(async (e: any) => {
|
|
528
|
-
this.apiError(e);
|
|
529
|
-
this.errorLog(
|
|
530
|
-
`${this.device.deviceType}: ${this.accessory.displayName} failed BLERefreshStatus with ${this.device.connectionType}` +
|
|
531
|
-
` Connection, Error Message: ${JSON.stringify(e.message)}`,
|
|
532
|
-
);
|
|
533
|
-
await this.BLERefreshConnection(switchbot);
|
|
534
|
-
});
|
|
535
|
-
} else {
|
|
536
|
-
await this.BLERefreshConnection(switchbot);
|
|
537
|
-
}*/
|
|
466
|
+
if (switchbot === undefined) {
|
|
467
|
+
await this.BLERefreshConnection(switchbot);
|
|
468
|
+
}
|
|
538
469
|
}
|
|
539
470
|
async openAPIRefreshStatus() {
|
|
540
471
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIRefreshStatus`);
|
|
541
472
|
try {
|
|
542
|
-
const { body, statusCode } = await
|
|
543
|
-
headers: this.platform.generateHeaders(),
|
|
544
|
-
});
|
|
473
|
+
const { body, statusCode } = await this.platform.retryRequest(this.deviceMaxRetries, this.deviceDelayBetweenRetries, `${Devices}/${this.device.deviceId}/status`, { headers: this.platform.generateHeaders() });
|
|
545
474
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} statusCode: ${statusCode}`);
|
|
546
475
|
const deviceStatus = await body.json();
|
|
547
476
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus: ${JSON.stringify(deviceStatus)}`);
|
|
548
477
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
|
|
549
478
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
550
|
-
this.
|
|
479
|
+
this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
551
480
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
552
|
-
this.
|
|
553
|
-
this.OpenAPI_Direction = deviceStatus.body.direction;
|
|
554
|
-
this.OpenAPI_InMotion = deviceStatus.body.moving;
|
|
555
|
-
this.OpenAPI_CurrentAmbientLightLevel = deviceStatus.body.brightness;
|
|
556
|
-
this.OpenAPI_BatteryLevel = deviceStatus.body.battery;
|
|
557
|
-
this.OpenAPI_FirmwareRevision = deviceStatus.body.version;
|
|
558
|
-
this.openAPIparseStatus();
|
|
481
|
+
this.openAPIparseStatus(deviceStatus);
|
|
559
482
|
this.updateHomeKitCharacteristics();
|
|
560
483
|
}
|
|
561
484
|
else {
|
|
@@ -593,7 +516,7 @@ export class BlindTilt {
|
|
|
593
516
|
}
|
|
594
517
|
async BLEpushChanges() {
|
|
595
518
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushChanges`);
|
|
596
|
-
if (this.TargetPosition !== this.CurrentPosition) {
|
|
519
|
+
if (this.WindowCovering.TargetPosition !== this.WindowCovering.CurrentPosition) {
|
|
597
520
|
const switchbot = await this.platform.connectBLE();
|
|
598
521
|
// Convert to BLE Address
|
|
599
522
|
this.device.bleMac = this.device
|
|
@@ -601,26 +524,24 @@ export class BlindTilt {
|
|
|
601
524
|
.join(':')
|
|
602
525
|
.toLowerCase();
|
|
603
526
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLE Address: ${this.device.bleMac}`);
|
|
604
|
-
this.
|
|
605
|
-
|
|
606
|
-
if (adjustedMode === null) {
|
|
607
|
-
this.Mode = 'Default Mode';
|
|
608
|
-
}
|
|
609
|
-
this.debugLog(`${this.accessory.displayName} Mode: ${this.Mode}`);
|
|
527
|
+
const { setPositionMode, Mode } = await this.setPerformance();
|
|
528
|
+
this.debugLog(`${this.accessory.displayName} Mode: ${Mode}`);
|
|
610
529
|
if (switchbot !== false) {
|
|
611
530
|
switchbot
|
|
612
531
|
.discover({ model: 'c', quick: true, id: this.device.bleMac })
|
|
613
532
|
.then(async (device_list) => {
|
|
614
|
-
this.infoLog(`${this.accessory.displayName} Target Position: ${this.TargetPosition}`);
|
|
615
|
-
return await this.
|
|
616
|
-
max: this.
|
|
533
|
+
this.infoLog(`${this.accessory.displayName} Target Position: ${this.WindowCovering.TargetPosition}`);
|
|
534
|
+
return await this.retryBLE({
|
|
535
|
+
max: await this.maxRetryBLE(),
|
|
617
536
|
fn: async () => {
|
|
618
|
-
return await device_list[0].runToPos(100 - Number(this.TargetPosition),
|
|
537
|
+
return await device_list[0].runToPos(100 - Number(this.WindowCovering.TargetPosition), setPositionMode);
|
|
619
538
|
},
|
|
620
539
|
});
|
|
621
540
|
})
|
|
622
541
|
.then(() => {
|
|
623
542
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
|
|
543
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
544
|
+
+ `Target Position: ${this.WindowCovering.TargetPosition} sent over BLE, sent successfully`);
|
|
624
545
|
})
|
|
625
546
|
.catch(async (e) => {
|
|
626
547
|
this.apiError(e);
|
|
@@ -636,45 +557,32 @@ export class BlindTilt {
|
|
|
636
557
|
}
|
|
637
558
|
else {
|
|
638
559
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushChanges, CurrentPosition & TargetPosition Are the Same.` +
|
|
639
|
-
` CurrentPosition: ${this.CurrentPosition}, TargetPosition ${this.TargetPosition}`);
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
async retry({ max, fn }) {
|
|
643
|
-
return fn().catch(async (e) => {
|
|
644
|
-
if (max === 0) {
|
|
645
|
-
throw e;
|
|
646
|
-
}
|
|
647
|
-
this.infoLog(e);
|
|
648
|
-
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Retrying`);
|
|
649
|
-
await sleep(1000);
|
|
650
|
-
return this.retry({ max: max - 1, fn });
|
|
651
|
-
});
|
|
652
|
-
}
|
|
653
|
-
maxRetry() {
|
|
654
|
-
if (this.device.maxRetry) {
|
|
655
|
-
return this.device.maxRetry;
|
|
656
|
-
}
|
|
657
|
-
else {
|
|
658
|
-
return 5;
|
|
560
|
+
` CurrentPosition: ${this.WindowCovering.CurrentPosition}, TargetPosition ${this.WindowCovering.TargetPosition}`);
|
|
659
561
|
}
|
|
660
562
|
}
|
|
661
563
|
async openAPIpushChanges() {
|
|
662
564
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIpushChanges`);
|
|
663
|
-
const hasDifferentAndRelevantHorizontalTiltAngle = this.mappingMode === BlindTiltMappingMode.UseTiltForDirection
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
this.
|
|
565
|
+
const hasDifferentAndRelevantHorizontalTiltAngle = this.mappingMode === BlindTiltMappingMode.UseTiltForDirection
|
|
566
|
+
&& this.WindowCovering.TargetHorizontalTiltAngle !== this.WindowCovering.CurrentHorizontalTiltAngle;
|
|
567
|
+
if (this.WindowCovering.TargetPosition !== this.WindowCovering.CurrentPosition
|
|
568
|
+
|| hasDifferentAndRelevantHorizontalTiltAngle || this.device.disableCaching) {
|
|
569
|
+
const [direction, position] = this.mapHomekitValuesToDeviceValues(Number(this.WindowCovering.TargetPosition), Number(this.WindowCovering.TargetHorizontalTiltAngle));
|
|
570
|
+
const { Mode } = await this.setPerformance();
|
|
571
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
|
|
572
|
+
+ ` Pushing ${this.WindowCovering.TargetPosition} (device = ${direction};${position})`);
|
|
573
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Mode: ${Mode}`);
|
|
668
574
|
let bodyChange = '';
|
|
669
575
|
if (position === 100) {
|
|
670
576
|
bodyChange = JSON.stringify({
|
|
671
577
|
command: 'fullyOpen',
|
|
578
|
+
parameter: 'default',
|
|
672
579
|
commandType: 'command',
|
|
673
580
|
});
|
|
674
581
|
}
|
|
675
582
|
else if (position === 0) {
|
|
676
583
|
bodyChange = JSON.stringify({
|
|
677
584
|
command: direction === 'up' ? 'closeUp' : 'closeDown',
|
|
585
|
+
parameter: 'default',
|
|
678
586
|
commandType: 'command',
|
|
679
587
|
});
|
|
680
588
|
}
|
|
@@ -698,8 +606,10 @@ export class BlindTilt {
|
|
|
698
606
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus body: ${JSON.stringify(deviceStatus.body)}`);
|
|
699
607
|
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
|
|
700
608
|
if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
|
|
701
|
-
this.
|
|
609
|
+
this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
702
610
|
+ `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
|
|
611
|
+
this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
|
|
612
|
+
+ `request to SwitchBot API, body: ${JSON.stringify(JSON.parse(bodyChange))} sent successfully`);
|
|
703
613
|
}
|
|
704
614
|
else {
|
|
705
615
|
this.statusCode(statusCode);
|
|
@@ -708,30 +618,31 @@ export class BlindTilt {
|
|
|
708
618
|
}
|
|
709
619
|
catch (e) {
|
|
710
620
|
this.apiError(e);
|
|
711
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} failed openAPIpushChanges with ${this.device.connectionType}`
|
|
712
|
-
` Connection, Error Message: ${JSON.stringify(e.message)}`);
|
|
621
|
+
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} failed openAPIpushChanges with ${this.device.connectionType}`
|
|
622
|
+
+ ` Connection, Error Message: ${JSON.stringify(e.message)}`);
|
|
713
623
|
}
|
|
714
624
|
}
|
|
715
625
|
else {
|
|
716
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No OpenAPI Changes, CurrentPosition & TargetPosition Are the Same.`
|
|
717
|
-
` CurrentPosition: ${this.CurrentPosition}, TargetPosition ${this.TargetPosition}`
|
|
718
|
-
` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}
|
|
626
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No OpenAPI Changes, CurrentPosition & TargetPosition Are the Same.`
|
|
627
|
+
+ ` CurrentPosition: ${this.WindowCovering.CurrentPosition}, TargetPosition ${this.WindowCovering.TargetPosition}`
|
|
628
|
+
+ ` CurrentHorizontalTiltAngle: ${this.WindowCovering.CurrentHorizontalTiltAngle},`
|
|
629
|
+
+ ` TargetPosition ${this.WindowCovering.TargetHorizontalTiltAngle}`);
|
|
719
630
|
}
|
|
720
631
|
}
|
|
721
632
|
/**
|
|
722
633
|
* Handle requests to set the value of the "Target Horizontal Tilt" characteristic
|
|
723
634
|
*/
|
|
724
635
|
async TargetHorizontalTiltAngleSet(value) {
|
|
725
|
-
if (this.TargetHorizontalTiltAngle === this.accessory.context.TargetHorizontalTiltAngle) {
|
|
636
|
+
if (this.WindowCovering.TargetHorizontalTiltAngle === this.accessory.context.TargetHorizontalTiltAngle) {
|
|
726
637
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set TargetHorizontalTiltAngle: ${value}`);
|
|
727
638
|
}
|
|
728
639
|
else {
|
|
729
640
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set TargetHorizontalTiltAngle: ${value}`);
|
|
730
641
|
}
|
|
731
642
|
//value = value < 0 ? -90 : 90;
|
|
732
|
-
this.TargetHorizontalTiltAngle = value;
|
|
643
|
+
this.WindowCovering.TargetHorizontalTiltAngle = value;
|
|
733
644
|
if (this.device.mqttURL) {
|
|
734
|
-
this.mqttPublish('TargetHorizontalTiltAngle', this.TargetHorizontalTiltAngle);
|
|
645
|
+
this.mqttPublish('TargetHorizontalTiltAngle', this.WindowCovering.TargetHorizontalTiltAngle.toString());
|
|
735
646
|
}
|
|
736
647
|
this.startUpdatingBlindTiltIfNeeded();
|
|
737
648
|
}
|
|
@@ -739,49 +650,53 @@ export class BlindTilt {
|
|
|
739
650
|
* Handle requests to set the value of the "Target Position" characteristic
|
|
740
651
|
*/
|
|
741
652
|
async TargetPositionSet(value) {
|
|
742
|
-
if (this.TargetPosition === this.accessory.context.TargetPosition) {
|
|
653
|
+
if (this.WindowCovering.TargetPosition === this.accessory.context.TargetPosition) {
|
|
743
654
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set TargetPosition: ${value}`);
|
|
744
655
|
}
|
|
745
656
|
else {
|
|
746
657
|
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set TargetPosition: ${value}`);
|
|
747
658
|
}
|
|
748
|
-
this.TargetPosition = value;
|
|
659
|
+
this.WindowCovering.TargetPosition = value;
|
|
749
660
|
if (this.device.mqttURL) {
|
|
750
|
-
this.mqttPublish('TargetPosition', this.TargetPosition);
|
|
661
|
+
this.mqttPublish('TargetPosition', this.WindowCovering.TargetPosition.toString());
|
|
751
662
|
}
|
|
752
663
|
this.startUpdatingBlindTiltIfNeeded();
|
|
753
664
|
}
|
|
754
665
|
async startUpdatingBlindTiltIfNeeded() {
|
|
755
666
|
await this.setMinMax();
|
|
756
667
|
this.debugLog('setMinMax');
|
|
757
|
-
if (this.TargetPosition > this.CurrentPosition
|
|
758
|
-
this.
|
|
668
|
+
if (this.WindowCovering.TargetPosition > this.WindowCovering.CurrentPosition
|
|
669
|
+
|| this.WindowCovering.TargetHorizontalTiltAngle !== this.WindowCovering.CurrentHorizontalTiltAngle) {
|
|
670
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.INCREASING;
|
|
759
671
|
this.setNewTarget = true;
|
|
760
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} value: ${this.CurrentPosition},`
|
|
672
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} value: ${this.WindowCovering.CurrentPosition},`
|
|
673
|
+
+ ` CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
761
674
|
}
|
|
762
|
-
else if (this.TargetPosition < this.CurrentPosition) {
|
|
763
|
-
this.PositionState = this.hap.Characteristic.PositionState.DECREASING;
|
|
675
|
+
else if (this.WindowCovering.TargetPosition < this.WindowCovering.CurrentPosition) {
|
|
676
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.DECREASING;
|
|
764
677
|
this.setNewTarget = true;
|
|
765
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} value: ${this.CurrentPosition},`
|
|
678
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} value: ${this.WindowCovering.CurrentPosition},`
|
|
679
|
+
+ ` CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
766
680
|
}
|
|
767
681
|
else {
|
|
768
|
-
this.PositionState = this.hap.Characteristic.PositionState.STOPPED;
|
|
682
|
+
this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.STOPPED;
|
|
769
683
|
this.setNewTarget = false;
|
|
770
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} value: ${this.CurrentPosition},`
|
|
684
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} value: ${this.WindowCovering.CurrentPosition},`
|
|
685
|
+
+ ` CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
771
686
|
}
|
|
772
|
-
this.
|
|
773
|
-
this.
|
|
687
|
+
this.WindowCovering.Service.setCharacteristic(this.hap.Characteristic.PositionState, this.WindowCovering.PositionState);
|
|
688
|
+
this.WindowCovering.Service.getCharacteristic(this.hap.Characteristic.PositionState).updateValue(this.WindowCovering.PositionState);
|
|
774
689
|
/**
|
|
775
690
|
* If Blind Tilt movement time is short, the moving flag from backend is always false.
|
|
776
691
|
* The minimum time depends on the network control latency.
|
|
777
692
|
*/
|
|
778
693
|
clearTimeout(this.setNewTargetTimer);
|
|
779
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateRate: ${this.
|
|
694
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateRate: ${this.deviceUpdateRate}`);
|
|
780
695
|
if (this.setNewTarget) {
|
|
781
696
|
this.setNewTargetTimer = setTimeout(() => {
|
|
782
697
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} setNewTarget ${this.setNewTarget} timeout`);
|
|
783
698
|
this.setNewTarget = false;
|
|
784
|
-
}, this.
|
|
699
|
+
}, this.deviceUpdateRate * 1000);
|
|
785
700
|
}
|
|
786
701
|
this.doBlindTiltUpdate.next();
|
|
787
702
|
}
|
|
@@ -789,152 +704,111 @@ export class BlindTilt {
|
|
|
789
704
|
await this.setMinMax();
|
|
790
705
|
// CurrentHorizontalTiltAngle
|
|
791
706
|
if (this.mappingMode === BlindTiltMappingMode.UseTiltForDirection) {
|
|
792
|
-
if (this.CurrentHorizontalTiltAngle === undefined || Number.isNaN(this.CurrentHorizontalTiltAngle)) {
|
|
793
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}
|
|
707
|
+
if (this.WindowCovering.CurrentHorizontalTiltAngle === undefined || Number.isNaN(this.WindowCovering.CurrentHorizontalTiltAngle)) {
|
|
708
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
|
|
709
|
+
+ ` CurrentHorizontalTiltAngle: ${this.WindowCovering.CurrentHorizontalTiltAngle}`);
|
|
794
710
|
}
|
|
795
711
|
else {
|
|
796
712
|
if (this.device.mqttURL) {
|
|
797
|
-
this.mqttPublish('CurrentHorizontalTiltAngle', this.CurrentHorizontalTiltAngle);
|
|
713
|
+
this.mqttPublish('CurrentHorizontalTiltAngle', this.WindowCovering.CurrentHorizontalTiltAngle.toString());
|
|
798
714
|
}
|
|
799
|
-
this.accessory.context.CurrentHorizontalTiltAngle = this.CurrentHorizontalTiltAngle;
|
|
800
|
-
this.
|
|
715
|
+
this.accessory.context.CurrentHorizontalTiltAngle = this.WindowCovering.CurrentHorizontalTiltAngle;
|
|
716
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.CurrentHorizontalTiltAngle, Number(this.WindowCovering.CurrentHorizontalTiltAngle));
|
|
801
717
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}
|
|
802
|
-
updateCharacteristic CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
|
|
718
|
+
updateCharacteristic CurrentHorizontalTiltAngle: ${this.WindowCovering.CurrentHorizontalTiltAngle}`);
|
|
803
719
|
}
|
|
804
720
|
}
|
|
805
721
|
// CurrentPosition
|
|
806
|
-
if (this.CurrentPosition === undefined || Number.isNaN(this.CurrentPosition)) {
|
|
807
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition}`);
|
|
722
|
+
if (this.WindowCovering.CurrentPosition === undefined || Number.isNaN(this.WindowCovering.CurrentPosition)) {
|
|
723
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
808
724
|
}
|
|
809
725
|
else {
|
|
810
726
|
if (this.device.mqttURL) {
|
|
811
|
-
this.mqttPublish('CurrentPosition', this.CurrentPosition);
|
|
727
|
+
this.mqttPublish('CurrentPosition', this.WindowCovering.CurrentPosition.toString());
|
|
812
728
|
}
|
|
813
|
-
this.accessory.context.CurrentPosition = this.CurrentPosition;
|
|
814
|
-
this.
|
|
815
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}
|
|
729
|
+
this.accessory.context.CurrentPosition = this.WindowCovering.CurrentPosition;
|
|
730
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.CurrentPosition, Number(this.WindowCovering.CurrentPosition));
|
|
731
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
|
|
732
|
+
+ ` updateCharacteristic CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
|
|
816
733
|
}
|
|
817
734
|
// PositionState
|
|
818
|
-
if (this.PositionState === undefined) {
|
|
819
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} PositionState: ${this.PositionState}`);
|
|
735
|
+
if (this.WindowCovering.PositionState === undefined) {
|
|
736
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} PositionState: ${this.WindowCovering.PositionState}`);
|
|
820
737
|
}
|
|
821
738
|
else {
|
|
822
739
|
if (this.device.mqttURL) {
|
|
823
|
-
this.mqttPublish('PositionState', this.PositionState);
|
|
740
|
+
this.mqttPublish('PositionState', this.WindowCovering.PositionState.toString());
|
|
824
741
|
}
|
|
825
|
-
this.accessory.context.PositionState = this.PositionState;
|
|
826
|
-
this.
|
|
827
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic
|
|
742
|
+
this.accessory.context.PositionState = this.WindowCovering.PositionState;
|
|
743
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.PositionState, Number(this.WindowCovering.PositionState));
|
|
744
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
|
|
745
|
+
+ ` PositionState: ${this.WindowCovering.PositionState}`);
|
|
828
746
|
}
|
|
829
747
|
// TargetPosition
|
|
830
|
-
if (this.TargetPosition === undefined || Number.isNaN(this.TargetPosition)) {
|
|
831
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} TargetPosition: ${this.TargetPosition}`);
|
|
748
|
+
if (this.WindowCovering.TargetPosition === undefined || Number.isNaN(this.WindowCovering.TargetPosition)) {
|
|
749
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} TargetPosition: ${this.WindowCovering.TargetPosition}`);
|
|
832
750
|
}
|
|
833
751
|
else {
|
|
834
752
|
if (this.device.mqttURL) {
|
|
835
|
-
this.mqttPublish('TargetPosition', this.TargetPosition);
|
|
753
|
+
this.mqttPublish('TargetPosition', this.WindowCovering.TargetPosition.toString());
|
|
836
754
|
}
|
|
837
|
-
this.accessory.context.TargetPosition = this.TargetPosition;
|
|
838
|
-
this.
|
|
839
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic
|
|
755
|
+
this.accessory.context.TargetPosition = this.WindowCovering.TargetPosition;
|
|
756
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.TargetPosition, Number(this.WindowCovering.TargetPosition));
|
|
757
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
|
|
758
|
+
+ ` TargetPosition: ${this.WindowCovering.TargetPosition}`);
|
|
840
759
|
}
|
|
841
760
|
// CurrentAmbientLightLevel
|
|
842
761
|
if (!this.device.blindTilt?.hide_lightsensor) {
|
|
843
|
-
if (this.CurrentAmbientLightLevel === undefined || Number.isNaN(this.CurrentAmbientLightLevel)) {
|
|
844
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}
|
|
762
|
+
if (this.LightSensor.CurrentAmbientLightLevel === undefined || Number.isNaN(this.LightSensor.CurrentAmbientLightLevel)) {
|
|
763
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
|
|
764
|
+
+ ` CurrentAmbientLightLevel: ${this.LightSensor.CurrentAmbientLightLevel}`);
|
|
845
765
|
}
|
|
846
766
|
else {
|
|
847
767
|
if (this.device.mqttURL) {
|
|
848
|
-
this.mqttPublish('CurrentAmbientLightLevel', this.CurrentAmbientLightLevel);
|
|
768
|
+
this.mqttPublish('CurrentAmbientLightLevel', this.LightSensor.CurrentAmbientLightLevel.toString());
|
|
849
769
|
}
|
|
850
|
-
this.accessory.context.CurrentAmbientLightLevel = this.CurrentAmbientLightLevel;
|
|
851
|
-
this.
|
|
770
|
+
this.accessory.context.CurrentAmbientLightLevel = this.LightSensor.CurrentAmbientLightLevel;
|
|
771
|
+
this.LightSensor.Service.updateCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel, this.LightSensor.CurrentAmbientLightLevel);
|
|
852
772
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}` +
|
|
853
|
-
` updateCharacteristic CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
|
|
773
|
+
` updateCharacteristic CurrentAmbientLightLevel: ${this.LightSensor.CurrentAmbientLightLevel}`);
|
|
854
774
|
}
|
|
855
775
|
}
|
|
856
776
|
// BatteryLevel
|
|
857
|
-
if (this.BatteryLevel === undefined) {
|
|
858
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}`);
|
|
777
|
+
if (this.Battery.BatteryLevel === undefined) {
|
|
778
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.Battery.BatteryLevel}`);
|
|
859
779
|
}
|
|
860
780
|
else {
|
|
861
781
|
if (this.device.mqttURL) {
|
|
862
|
-
this.mqttPublish('BatteryLevel', this.BatteryLevel);
|
|
782
|
+
this.mqttPublish('BatteryLevel', this.Battery.BatteryLevel.toString());
|
|
863
783
|
}
|
|
864
|
-
this.accessory.context.BatteryLevel = this.BatteryLevel;
|
|
865
|
-
this.
|
|
866
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.BatteryLevel}`);
|
|
784
|
+
this.accessory.context.BatteryLevel = this.Battery.BatteryLevel;
|
|
785
|
+
this.Battery?.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, this.Battery.BatteryLevel);
|
|
786
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.Battery.BatteryLevel}`);
|
|
867
787
|
}
|
|
868
788
|
// StatusLowBattery
|
|
869
|
-
if (this.StatusLowBattery === undefined) {
|
|
870
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} StatusLowBattery: ${this.StatusLowBattery}`);
|
|
789
|
+
if (this.Battery.StatusLowBattery === undefined) {
|
|
790
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} StatusLowBattery: ${this.Battery.StatusLowBattery}`);
|
|
871
791
|
}
|
|
872
792
|
else {
|
|
873
793
|
if (this.device.mqttURL) {
|
|
874
|
-
this.mqttPublish('StatusLowBattery', this.StatusLowBattery);
|
|
794
|
+
this.mqttPublish('StatusLowBattery', this.Battery.StatusLowBattery.toString());
|
|
875
795
|
}
|
|
876
|
-
this.accessory.context.StatusLowBattery = this.StatusLowBattery;
|
|
877
|
-
this.
|
|
878
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic
|
|
796
|
+
this.accessory.context.StatusLowBattery = this.Battery.StatusLowBattery;
|
|
797
|
+
this.Battery?.Service.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, this.Battery.StatusLowBattery);
|
|
798
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
|
|
799
|
+
+ ` StatusLowBattery: ${this.Battery.StatusLowBattery}`);
|
|
879
800
|
}
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
* Publish MQTT message for topics of
|
|
883
|
-
* 'homebridge-switchbot/blindtilt/xx:xx:xx:xx:xx:xx'
|
|
884
|
-
*/
|
|
885
|
-
mqttPublish(topic, message) {
|
|
886
|
-
const mac = this.device.deviceId
|
|
887
|
-
?.toLowerCase()
|
|
888
|
-
.match(/[\s\S]{1,2}/g)
|
|
889
|
-
?.join(':');
|
|
890
|
-
const options = this.device.mqttPubOptions || {};
|
|
891
|
-
this.mqttClient?.publish(`homebridge-switchbot/blindtilt/${mac}/${topic}`, `${message}`, options);
|
|
892
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} MQTT message: ${topic}/${message} options:${JSON.stringify(options)}`);
|
|
893
|
-
}
|
|
894
|
-
/*
|
|
895
|
-
* Setup MQTT hadler if URL is specified.
|
|
896
|
-
*/
|
|
897
|
-
async setupMqtt(device) {
|
|
898
|
-
if (device.mqttURL) {
|
|
899
|
-
try {
|
|
900
|
-
const { connectAsync } = asyncmqtt;
|
|
901
|
-
this.mqttClient = await connectAsync(device.mqttURL, device.mqttOptions || {});
|
|
902
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} MQTT connection has been established successfully.`);
|
|
903
|
-
this.mqttClient.on('error', (e) => {
|
|
904
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Failed to publish MQTT messages. ${e}`);
|
|
905
|
-
});
|
|
906
|
-
}
|
|
907
|
-
catch (e) {
|
|
908
|
-
this.mqttClient = null;
|
|
909
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Failed to establish MQTT connection. ${e}`);
|
|
910
|
-
}
|
|
911
|
-
}
|
|
912
|
-
}
|
|
913
|
-
async stopScanning(switchbot) {
|
|
914
|
-
switchbot.stopScan();
|
|
915
|
-
if (this.BLE_IsConnected) {
|
|
916
|
-
await this.BLEparseStatus();
|
|
917
|
-
await this.updateHomeKitCharacteristics();
|
|
801
|
+
if (this.Battery.ChargingState === undefined) {
|
|
802
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ChargingState: ${this.Battery.ChargingState}`);
|
|
918
803
|
}
|
|
919
804
|
else {
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
(
|
|
926
|
-
|
|
927
|
-
await switchbot.startScan({
|
|
928
|
-
model: 'c',
|
|
929
|
-
});
|
|
930
|
-
// Set an event handler
|
|
931
|
-
switchbot.onadvertisement = (ad) => {
|
|
932
|
-
this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} ad: ${JSON.stringify(ad, null, ' ')}`);
|
|
933
|
-
};
|
|
934
|
-
await sleep(10000);
|
|
935
|
-
// Stop to monitor
|
|
936
|
-
switchbot.stopScan();
|
|
937
|
-
})();
|
|
805
|
+
if (this.device.mqttURL) {
|
|
806
|
+
this.mqttPublish('ChargingState', this.Battery.ChargingState.toString());
|
|
807
|
+
}
|
|
808
|
+
this.accessory.context.ChargingState = this.Battery.ChargingState;
|
|
809
|
+
this.Battery.Service.updateCharacteristic(this.hap.Characteristic.ChargingState, this.Battery.ChargingState);
|
|
810
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
|
|
811
|
+
+ ` ChargingState: ${this.Battery.ChargingState}`);
|
|
938
812
|
}
|
|
939
813
|
}
|
|
940
814
|
async BLEPushConnection() {
|
|
@@ -951,210 +825,105 @@ export class BlindTilt {
|
|
|
951
825
|
await this.openAPIRefreshStatus();
|
|
952
826
|
}
|
|
953
827
|
}
|
|
954
|
-
async
|
|
955
|
-
|
|
828
|
+
async setPerformance() {
|
|
829
|
+
let setPositionMode;
|
|
830
|
+
let Mode;
|
|
831
|
+
if (Number(this.WindowCovering.TargetPosition) > 50) {
|
|
956
832
|
if (this.device.blindTilt?.setOpenMode === '1') {
|
|
957
|
-
|
|
958
|
-
|
|
833
|
+
setPositionMode = 1;
|
|
834
|
+
Mode = 'Silent Mode';
|
|
835
|
+
}
|
|
836
|
+
else if (this.device.blindTilt?.setOpenMode === '0') {
|
|
837
|
+
setPositionMode = 0;
|
|
838
|
+
Mode = 'Performance Mode';
|
|
959
839
|
}
|
|
960
840
|
else {
|
|
961
|
-
|
|
962
|
-
|
|
841
|
+
setPositionMode = 0;
|
|
842
|
+
Mode = 'Default Mode';
|
|
963
843
|
}
|
|
964
844
|
}
|
|
965
845
|
else {
|
|
966
846
|
if (this.device.blindTilt?.setCloseMode === '1') {
|
|
967
|
-
|
|
968
|
-
|
|
847
|
+
setPositionMode = 1;
|
|
848
|
+
Mode = 'Silent Mode';
|
|
849
|
+
}
|
|
850
|
+
else if (this.device.blindTilt?.setOpenMode === '0') {
|
|
851
|
+
setPositionMode = 0;
|
|
852
|
+
Mode = 'Performance Mode';
|
|
969
853
|
}
|
|
970
854
|
else {
|
|
971
|
-
|
|
972
|
-
|
|
855
|
+
setPositionMode = 0;
|
|
856
|
+
Mode = 'Default Mode';
|
|
973
857
|
}
|
|
974
858
|
}
|
|
859
|
+
return { setPositionMode, Mode };
|
|
975
860
|
}
|
|
976
861
|
async setMinMax() {
|
|
977
862
|
if (this.device.blindTilt?.set_min) {
|
|
978
|
-
if (Number(this.CurrentPosition) <= this.device.blindTilt?.set_min) {
|
|
979
|
-
this.CurrentPosition = 0;
|
|
863
|
+
if (Number(this.WindowCovering.CurrentPosition) <= this.device.blindTilt?.set_min) {
|
|
864
|
+
this.WindowCovering.CurrentPosition = 0;
|
|
980
865
|
}
|
|
981
866
|
}
|
|
982
867
|
if (this.device.blindTilt?.set_max) {
|
|
983
|
-
if (Number(this.CurrentPosition) >= this.device.blindTilt?.set_max) {
|
|
984
|
-
this.CurrentPosition = 100;
|
|
868
|
+
if (Number(this.WindowCovering.CurrentPosition) >= this.device.blindTilt?.set_max) {
|
|
869
|
+
this.WindowCovering.CurrentPosition = 100;
|
|
985
870
|
}
|
|
986
871
|
}
|
|
987
872
|
if (this.mappingMode === BlindTiltMappingMode.UseTiltForDirection) {
|
|
988
|
-
this.CurrentHorizontalTiltAngle = Number(this.CurrentHorizontalTiltAngle) < 0 ? -90 : 90;
|
|
873
|
+
this.WindowCovering.CurrentHorizontalTiltAngle = Number(this.WindowCovering.CurrentHorizontalTiltAngle) < 0 ? -90 : 90;
|
|
989
874
|
}
|
|
990
875
|
}
|
|
991
|
-
minStep(device) {
|
|
876
|
+
async minStep(device) {
|
|
877
|
+
let set_minStep;
|
|
992
878
|
if (device.blindTilt?.set_minStep) {
|
|
993
|
-
|
|
879
|
+
set_minStep = device.blindTilt?.set_minStep;
|
|
994
880
|
}
|
|
995
881
|
else {
|
|
996
|
-
|
|
882
|
+
set_minStep = 1;
|
|
997
883
|
}
|
|
998
|
-
return
|
|
884
|
+
return set_minStep;
|
|
999
885
|
}
|
|
1000
|
-
minLux() {
|
|
886
|
+
async minLux() {
|
|
887
|
+
let set_minLux;
|
|
1001
888
|
if (this.device.blindTilt?.set_minLux) {
|
|
1002
|
-
|
|
889
|
+
set_minLux = this.device.blindTilt?.set_minLux;
|
|
1003
890
|
}
|
|
1004
891
|
else {
|
|
1005
|
-
|
|
892
|
+
set_minLux = 1;
|
|
1006
893
|
}
|
|
1007
|
-
return
|
|
894
|
+
return set_minLux;
|
|
1008
895
|
}
|
|
1009
|
-
maxLux() {
|
|
896
|
+
async maxLux() {
|
|
897
|
+
let set_maxLux;
|
|
1010
898
|
if (this.device.blindTilt?.set_maxLux) {
|
|
1011
|
-
|
|
1012
|
-
}
|
|
1013
|
-
else {
|
|
1014
|
-
this.set_maxLux = 6001;
|
|
1015
|
-
}
|
|
1016
|
-
return this.set_maxLux;
|
|
1017
|
-
}
|
|
1018
|
-
async scan(device) {
|
|
1019
|
-
if (device.scanDuration) {
|
|
1020
|
-
if (this.updateRate > device.scanDuration) {
|
|
1021
|
-
this.scanDuration = this.updateRate;
|
|
1022
|
-
if (this.BLE) {
|
|
1023
|
-
this.warnLog(`${this.device.deviceType}: ` +
|
|
1024
|
-
`${this.accessory.displayName} scanDuration is less than updateRate, overriding scanDuration with updateRate`);
|
|
1025
|
-
}
|
|
1026
|
-
}
|
|
1027
|
-
else {
|
|
1028
|
-
this.scanDuration = this.accessory.context.scanDuration = device.scanDuration;
|
|
1029
|
-
}
|
|
1030
|
-
if (this.BLE) {
|
|
1031
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config scanDuration: ${this.scanDuration}`);
|
|
1032
|
-
}
|
|
899
|
+
set_maxLux = this.device.blindTilt?.set_maxLux;
|
|
1033
900
|
}
|
|
1034
901
|
else {
|
|
1035
|
-
|
|
1036
|
-
this.scanDuration = this.updateRate;
|
|
1037
|
-
}
|
|
1038
|
-
else {
|
|
1039
|
-
this.scanDuration = this.accessory.context.scanDuration = 1;
|
|
1040
|
-
}
|
|
1041
|
-
if (this.BLE) {
|
|
1042
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Default scanDuration: ${this.scanDuration}`);
|
|
1043
|
-
}
|
|
1044
|
-
}
|
|
1045
|
-
}
|
|
1046
|
-
async statusCode(statusCode) {
|
|
1047
|
-
switch (statusCode) {
|
|
1048
|
-
case 151:
|
|
1049
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Command not supported by this deviceType, statusCode: ${statusCode}`);
|
|
1050
|
-
break;
|
|
1051
|
-
case 152:
|
|
1052
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device not found, statusCode: ${statusCode}`);
|
|
1053
|
-
break;
|
|
1054
|
-
case 160:
|
|
1055
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Command is not supported, statusCode: ${statusCode}`);
|
|
1056
|
-
break;
|
|
1057
|
-
case 161:
|
|
1058
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device is offline, statusCode: ${statusCode}`);
|
|
1059
|
-
this.offlineOff();
|
|
1060
|
-
break;
|
|
1061
|
-
case 171:
|
|
1062
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Hub Device is offline, statusCode: ${statusCode}. ` +
|
|
1063
|
-
`Hub: ${this.device.hubDeviceId}`);
|
|
1064
|
-
this.offlineOff();
|
|
1065
|
-
break;
|
|
1066
|
-
case 190:
|
|
1067
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device internal error due to device states not synchronized with server,` +
|
|
1068
|
-
` Or command format is invalid, statusCode: ${statusCode}`);
|
|
1069
|
-
break;
|
|
1070
|
-
case 100:
|
|
1071
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Command successfully sent, statusCode: ${statusCode}`);
|
|
1072
|
-
break;
|
|
1073
|
-
case 200:
|
|
1074
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Request successful, statusCode: ${statusCode}`);
|
|
1075
|
-
break;
|
|
1076
|
-
case 400:
|
|
1077
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Bad Request, The client has issued an invalid request. `
|
|
1078
|
-
+ `This is commonly used to specify validation errors in a request payload, statusCode: ${statusCode}`);
|
|
1079
|
-
break;
|
|
1080
|
-
case 401:
|
|
1081
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unauthorized, Authorization for the API is required, `
|
|
1082
|
-
+ `but the request has not been authenticated, statusCode: ${statusCode}`);
|
|
1083
|
-
break;
|
|
1084
|
-
case 403:
|
|
1085
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Forbidden, The request has been authenticated but does not `
|
|
1086
|
-
+ `have appropriate permissions, or a requested resource is not found, statusCode: ${statusCode}`);
|
|
1087
|
-
break;
|
|
1088
|
-
case 404:
|
|
1089
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Not Found, Specifies the requested path does not exist, `
|
|
1090
|
-
+ `statusCode: ${statusCode}`);
|
|
1091
|
-
break;
|
|
1092
|
-
case 406:
|
|
1093
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Not Acceptable, The client has requested a MIME type via `
|
|
1094
|
-
+ `the Accept header for a value not supported by the server, statusCode: ${statusCode}`);
|
|
1095
|
-
break;
|
|
1096
|
-
case 415:
|
|
1097
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unsupported Media Type, The client has defined a contentType `
|
|
1098
|
-
+ `header that is not supported by the server, statusCode: ${statusCode}`);
|
|
1099
|
-
break;
|
|
1100
|
-
case 422:
|
|
1101
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unprocessable Entity, The client has made a valid request, `
|
|
1102
|
-
+ `but the server cannot process it. This is often used for APIs for which certain limits have been exceeded, statusCode: ${statusCode}`);
|
|
1103
|
-
break;
|
|
1104
|
-
case 429:
|
|
1105
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Too Many Requests, The client has exceeded the number of `
|
|
1106
|
-
+ `requests allowed for a given time window, statusCode: ${statusCode}`);
|
|
1107
|
-
break;
|
|
1108
|
-
case 500:
|
|
1109
|
-
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Internal Server Error, An unexpected error on the SmartThings `
|
|
1110
|
-
+ `servers has occurred. These errors should be rare, statusCode: ${statusCode}`);
|
|
1111
|
-
break;
|
|
1112
|
-
default:
|
|
1113
|
-
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Unknown statusCode: ` +
|
|
1114
|
-
`${statusCode}, Submit Bugs Here: ' + 'https://tinyurl.com/SwitchBotBug`);
|
|
902
|
+
set_maxLux = 6001;
|
|
1115
903
|
}
|
|
904
|
+
return set_maxLux;
|
|
1116
905
|
}
|
|
1117
906
|
async offlineOff() {
|
|
1118
907
|
if (this.device.offline) {
|
|
1119
|
-
|
|
1120
|
-
|
|
908
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.CurrentPosition, 100);
|
|
909
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.PositionState, this.hap.Characteristic.PositionState.STOPPED);
|
|
910
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.TargetPosition, 100);
|
|
911
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.CurrentHorizontalTiltAngle, 90);
|
|
912
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.TargetHorizontalTiltAngle, 90);
|
|
1121
913
|
}
|
|
1122
914
|
}
|
|
1123
915
|
async apiError(e) {
|
|
1124
|
-
this.
|
|
1125
|
-
this.
|
|
1126
|
-
this.
|
|
916
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.CurrentPosition, e);
|
|
917
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.PositionState, e);
|
|
918
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.TargetPosition, e);
|
|
919
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.CurrentHorizontalTiltAngle, e);
|
|
920
|
+
this.WindowCovering.Service.updateCharacteristic(this.hap.Characteristic.TargetHorizontalTiltAngle, e);
|
|
921
|
+
this.Battery.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, e);
|
|
922
|
+
this.Battery.Service.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, e);
|
|
923
|
+
this.Battery.Service.updateCharacteristic(this.hap.Characteristic.ChargingState, e);
|
|
1127
924
|
if (!this.device.curtain?.hide_lightsensor) {
|
|
1128
|
-
this.
|
|
1129
|
-
|
|
1130
|
-
if (this.BLE) {
|
|
1131
|
-
this.batteryService?.updateCharacteristic(this.hap.Characteristic.BatteryLevel, e);
|
|
1132
|
-
this.batteryService?.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, e);
|
|
1133
|
-
}
|
|
1134
|
-
//throw new this.platform.api.hap.HapStatusError(HAPStatus.SERVICE_COMMUNICATION_FAILURE);
|
|
1135
|
-
}
|
|
1136
|
-
async deviceContext() {
|
|
1137
|
-
if (this.CurrentPosition === undefined) {
|
|
1138
|
-
this.CurrentPosition = 0;
|
|
1139
|
-
}
|
|
1140
|
-
else {
|
|
1141
|
-
this.CurrentPosition = this.accessory.context.CurrentPosition;
|
|
1142
|
-
}
|
|
1143
|
-
if (this.TargetPosition === undefined) {
|
|
1144
|
-
this.TargetPosition = 0;
|
|
1145
|
-
}
|
|
1146
|
-
else {
|
|
1147
|
-
this.TargetPosition = this.accessory.context.TargetPosition;
|
|
1148
|
-
}
|
|
1149
|
-
if (this.PositionState === undefined) {
|
|
1150
|
-
this.PositionState = this.hap.Characteristic.PositionState.STOPPED;
|
|
1151
|
-
}
|
|
1152
|
-
else {
|
|
1153
|
-
this.PositionState = this.accessory.context.PositionState;
|
|
1154
|
-
}
|
|
1155
|
-
if (this.FirmwareRevision === undefined) {
|
|
1156
|
-
this.FirmwareRevision = this.platform.version;
|
|
1157
|
-
this.accessory.context.FirmwareRevision = this.FirmwareRevision;
|
|
925
|
+
this.LightSensor.Service.updateCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel, e);
|
|
926
|
+
this.LightSensor.Service.updateCharacteristic(this.hap.Characteristic.StatusActive, e);
|
|
1158
927
|
}
|
|
1159
928
|
}
|
|
1160
929
|
/**
|
|
@@ -1271,127 +1040,5 @@ export class BlindTilt {
|
|
|
1271
1040
|
}
|
|
1272
1041
|
}
|
|
1273
1042
|
}
|
|
1274
|
-
async refreshRate(device) {
|
|
1275
|
-
// refreshRate
|
|
1276
|
-
if (device.refreshRate) {
|
|
1277
|
-
this.deviceRefreshRate = this.accessory.context.refreshRate = device.refreshRate;
|
|
1278
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config refreshRate: ${this.deviceRefreshRate}`);
|
|
1279
|
-
}
|
|
1280
|
-
else if (this.platform.config.options.refreshRate) {
|
|
1281
|
-
this.deviceRefreshRate = this.accessory.context.refreshRate = this.platform.config.options.refreshRate;
|
|
1282
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Platform Config refreshRate: ${this.deviceRefreshRate}`);
|
|
1283
|
-
}
|
|
1284
|
-
// updateRate
|
|
1285
|
-
if (device?.blindTilt?.updateRate) {
|
|
1286
|
-
this.updateRate = device?.blindTilt?.updateRate;
|
|
1287
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config Blind Tilt updateRate: ${this.updateRate}`);
|
|
1288
|
-
}
|
|
1289
|
-
else {
|
|
1290
|
-
this.updateRate = 2;
|
|
1291
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Default Blind Tilt updateRate: ${this.updateRate}`);
|
|
1292
|
-
}
|
|
1293
|
-
}
|
|
1294
|
-
async deviceConfig(device) {
|
|
1295
|
-
let config = {};
|
|
1296
|
-
if (device.blindTilt) {
|
|
1297
|
-
config = device.blindTilt;
|
|
1298
|
-
}
|
|
1299
|
-
if (device.connectionType !== undefined) {
|
|
1300
|
-
config['connectionType'] = device.connectionType;
|
|
1301
|
-
}
|
|
1302
|
-
if (device.external !== undefined) {
|
|
1303
|
-
config['external'] = device.external;
|
|
1304
|
-
}
|
|
1305
|
-
if (device.mqttURL !== undefined) {
|
|
1306
|
-
config['mqttURL'] = device.mqttURL;
|
|
1307
|
-
}
|
|
1308
|
-
if (device.logging !== undefined) {
|
|
1309
|
-
config['logging'] = device.logging;
|
|
1310
|
-
}
|
|
1311
|
-
if (device.refreshRate !== undefined) {
|
|
1312
|
-
config['refreshRate'] = device.refreshRate;
|
|
1313
|
-
}
|
|
1314
|
-
if (device.scanDuration !== undefined) {
|
|
1315
|
-
config['scanDuration'] = device.scanDuration;
|
|
1316
|
-
}
|
|
1317
|
-
if (device.maxRetry !== undefined) {
|
|
1318
|
-
config['maxRetry'] = device.maxRetry;
|
|
1319
|
-
}
|
|
1320
|
-
if (device.webhook !== undefined) {
|
|
1321
|
-
config['webhook'] = device.webhook;
|
|
1322
|
-
}
|
|
1323
|
-
if (device.blindTilt?.mode === undefined) {
|
|
1324
|
-
config['mode'] = BlindTiltMappingMode.OnlyUp;
|
|
1325
|
-
}
|
|
1326
|
-
else {
|
|
1327
|
-
config['mode'] = device.blindTilt?.mode;
|
|
1328
|
-
}
|
|
1329
|
-
if (Object.entries(config).length !== 0) {
|
|
1330
|
-
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
|
|
1331
|
-
}
|
|
1332
|
-
}
|
|
1333
|
-
async deviceLogs(device) {
|
|
1334
|
-
if (this.platform.debugMode) {
|
|
1335
|
-
this.deviceLogging = this.accessory.context.logging = 'debugMode';
|
|
1336
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Debug Mode Logging: ${this.deviceLogging}`);
|
|
1337
|
-
}
|
|
1338
|
-
else if (device.logging) {
|
|
1339
|
-
this.deviceLogging = this.accessory.context.logging = device.logging;
|
|
1340
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config Logging: ${this.deviceLogging}`);
|
|
1341
|
-
}
|
|
1342
|
-
else if (this.platform.config.options?.logging) {
|
|
1343
|
-
this.deviceLogging = this.accessory.context.logging = this.platform.config.options?.logging;
|
|
1344
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Platform Config Logging: ${this.deviceLogging}`);
|
|
1345
|
-
}
|
|
1346
|
-
else {
|
|
1347
|
-
this.deviceLogging = this.accessory.context.logging = 'standard';
|
|
1348
|
-
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Logging Not Set, Using: ${this.deviceLogging}`);
|
|
1349
|
-
}
|
|
1350
|
-
}
|
|
1351
|
-
/**
|
|
1352
|
-
* Logging for Device
|
|
1353
|
-
*/
|
|
1354
|
-
infoLog(...log) {
|
|
1355
|
-
if (this.enablingDeviceLogging()) {
|
|
1356
|
-
this.platform.log.info(String(...log));
|
|
1357
|
-
}
|
|
1358
|
-
}
|
|
1359
|
-
warnLog(...log) {
|
|
1360
|
-
if (this.enablingDeviceLogging()) {
|
|
1361
|
-
this.platform.log.warn(String(...log));
|
|
1362
|
-
}
|
|
1363
|
-
}
|
|
1364
|
-
debugWarnLog(...log) {
|
|
1365
|
-
if (this.enablingDeviceLogging()) {
|
|
1366
|
-
if (this.deviceLogging?.includes('debug')) {
|
|
1367
|
-
this.platform.log.warn('[DEBUG]', String(...log));
|
|
1368
|
-
}
|
|
1369
|
-
}
|
|
1370
|
-
}
|
|
1371
|
-
errorLog(...log) {
|
|
1372
|
-
if (this.enablingDeviceLogging()) {
|
|
1373
|
-
this.platform.log.error(String(...log));
|
|
1374
|
-
}
|
|
1375
|
-
}
|
|
1376
|
-
debugErrorLog(...log) {
|
|
1377
|
-
if (this.enablingDeviceLogging()) {
|
|
1378
|
-
if (this.deviceLogging?.includes('debug')) {
|
|
1379
|
-
this.platform.log.error('[DEBUG]', String(...log));
|
|
1380
|
-
}
|
|
1381
|
-
}
|
|
1382
|
-
}
|
|
1383
|
-
debugLog(...log) {
|
|
1384
|
-
if (this.enablingDeviceLogging()) {
|
|
1385
|
-
if (this.deviceLogging === 'debug') {
|
|
1386
|
-
this.platform.log.info('[DEBUG]', String(...log));
|
|
1387
|
-
}
|
|
1388
|
-
else {
|
|
1389
|
-
this.platform.log.debug(String(...log));
|
|
1390
|
-
}
|
|
1391
|
-
}
|
|
1392
|
-
}
|
|
1393
|
-
enablingDeviceLogging() {
|
|
1394
|
-
return this.deviceLogging.includes('debug') || this.deviceLogging === 'standard';
|
|
1395
|
-
}
|
|
1396
1043
|
}
|
|
1397
1044
|
//# sourceMappingURL=blindtilt.js.map
|