@switchbot/homebridge-switchbot 2.4.1-beta.7 → 2.5.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -80,6 +80,10 @@
80
80
  "title": "Curtain",
81
81
  "enum": ["Curtain"]
82
82
  },
83
+ {
84
+ "title": "Blind Tilt",
85
+ "enum": ["Blind Tilt"]
86
+ },
83
87
  {
84
88
  "title": "Plug",
85
89
  "enum": ["Plug"]
@@ -418,10 +422,10 @@
418
422
  }
419
423
  },
420
424
  "hide_lightsensor": {
421
- "title": "Hide Curtain's Light Sensor",
425
+ "title": "Hide Light Sensor",
422
426
  "type": "boolean",
423
427
  "condition": {
424
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Curtain' && model.options.devices[arrayIndices].deviceId);"
428
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt') && model.options.devices[arrayIndices].deviceId);"
425
429
  }
426
430
  },
427
431
  "set_minlux": {
@@ -13,14 +13,14 @@ export declare class BlindTilt {
13
13
  private accessory;
14
14
  device: device & devicesConfig;
15
15
  windowCoveringService: Service;
16
- lightSensorService?: Service;
17
16
  batteryService?: Service;
18
17
  CurrentPosition: CharacteristicValue;
19
18
  PositionState: CharacteristicValue;
20
19
  TargetPosition: CharacteristicValue;
21
- CurrentAmbientLightLevel?: CharacteristicValue;
22
20
  BatteryLevel?: CharacteristicValue;
23
21
  StatusLowBattery?: CharacteristicValue;
22
+ CurrentHorizontalTiltAngle: CharacteristicValue;
23
+ TargetHorizontalTiltAngle: CharacteristicValue;
24
24
  deviceStatus: any;
25
25
  slidePosition: deviceStatus['slidePosition'];
26
26
  moving: deviceStatus['moving'];
@@ -36,7 +36,6 @@ export declare class BlindTilt {
36
36
  battery: serviceData['battery'];
37
37
  position: serviceData['position'];
38
38
  inMotion: serviceData['inMotion'];
39
- lightLevel: serviceData['lightLevel'];
40
39
  setNewTarget: boolean;
41
40
  setNewTargetTimer: NodeJS.Timeout;
42
41
  mqttClient: MqttClient | null;
@@ -78,6 +77,10 @@ export declare class BlindTilt {
78
77
  * Handle requests to set the value of the "Target Position" characteristic
79
78
  */
80
79
  TargetPositionSet(value: CharacteristicValue): Promise<void>;
80
+ /**
81
+ * Handle requests to set the value of the "Target Position" characteristic
82
+ */
83
+ TargetHorizontalTiltAngleSet(value: CharacteristicValue): Promise<void>;
81
84
  updateHomeKitCharacteristics(): Promise<void>;
82
85
  mqttPublish(topic: string, message: any): void;
83
86
  setupMqtt(device: device & devicesConfig): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"blindtilt.d.ts","sourceRoot":"","sources":["../../src/device/blindtilt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blindtilt.d.ts","sourceRoot":"","sources":["../../src/device/blindtilt.ts"],"names":[],"mappings":"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"}
@@ -80,25 +80,26 @@ class BlindTilt {
80
80
  validValueRanges: [0, 100],
81
81
  })
82
82
  .onSet(this.TargetPositionSet.bind(this));
83
- // Light Sensor Service
84
- if (device.curtain?.hide_lightsensor) {
85
- this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Removing Light Sensor Service`);
86
- this.lightSensorService = this.accessory.getService(this.platform.Service.LightSensor);
87
- accessory.removeService(this.lightSensorService);
88
- }
89
- else if (!this.lightSensorService) {
90
- this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Add Light Sensor Service`);
91
- (this.lightSensorService =
92
- this.accessory.getService(this.platform.Service.LightSensor) || this.accessory.addService(this.platform.Service.LightSensor)),
93
- `${accessory.displayName} Light Sensor`;
94
- this.lightSensorService.setCharacteristic(this.platform.Characteristic.Name, `${accessory.displayName} Light Sensor`);
95
- if (!this.lightSensorService?.testCharacteristic(this.platform.Characteristic.ConfiguredName)) {
96
- this.lightSensorService.addCharacteristic(this.platform.Characteristic.ConfiguredName, `${accessory.displayName} Light Sensor`);
97
- }
98
- }
99
- else {
100
- this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Light Sensor Service Not Added`);
101
- }
83
+ this.windowCoveringService
84
+ .getCharacteristic(this.platform.Characteristic.CurrentHorizontalTiltAngle)
85
+ .setProps({
86
+ minStep: this.minStep(device),
87
+ minValue: -90,
88
+ maxValue: 90,
89
+ validValueRanges: [-90, 90],
90
+ })
91
+ .onGet(() => {
92
+ return this.CurrentHorizontalTiltAngle;
93
+ });
94
+ this.windowCoveringService
95
+ .getCharacteristic(this.platform.Characteristic.TargetHorizontalTiltAngle)
96
+ .setProps({
97
+ minStep: this.minStep(device),
98
+ minValue: -90,
99
+ maxValue: 90,
100
+ validValueRanges: [-90, 90],
101
+ })
102
+ .onSet(this.TargetHorizontalTiltAngleSet.bind(this));
102
103
  // Battery Service
103
104
  if (!this.BLE) {
104
105
  this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Removing Battery Service`);
@@ -210,57 +211,46 @@ class BlindTilt {
210
211
  }
211
212
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition},` +
212
213
  ` TargetPosition: ${this.TargetPosition}, PositionState: ${this.PositionState},`);
213
- if (!this.device.curtain?.hide_lightsensor) {
214
- this.set_minLux = this.minLux();
215
- this.set_maxLux = this.maxLux();
216
- this.spaceBetweenLevels = 9;
217
- // Brightness
218
- switch (this.lightLevel) {
219
- case 1:
220
- this.CurrentAmbientLightLevel = this.set_minLux;
221
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel}`);
222
- break;
223
- case 2:
224
- this.CurrentAmbientLightLevel = (this.set_maxLux - this.set_minLux) / this.spaceBetweenLevels;
225
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel},` +
226
- ` Calculation: ${(this.set_maxLux - this.set_minLux) / this.spaceBetweenLevels}`);
227
- break;
228
- case 3:
229
- this.CurrentAmbientLightLevel = ((this.set_maxLux - this.set_minLux) / this.spaceBetweenLevels) * 2;
230
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel}`);
231
- break;
232
- case 4:
233
- this.CurrentAmbientLightLevel = ((this.set_maxLux - this.set_minLux) / this.spaceBetweenLevels) * 3;
234
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel}`);
235
- break;
236
- case 5:
237
- this.CurrentAmbientLightLevel = ((this.set_maxLux - this.set_minLux) / this.spaceBetweenLevels) * 4;
238
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel}`);
239
- break;
240
- case 6:
241
- this.CurrentAmbientLightLevel = ((this.set_maxLux - this.set_minLux) / this.spaceBetweenLevels) * 5;
242
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel}`);
243
- break;
244
- case 7:
245
- this.CurrentAmbientLightLevel = ((this.set_maxLux - this.set_minLux) / this.spaceBetweenLevels) * 6;
246
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel}`);
247
- break;
248
- case 8:
249
- this.CurrentAmbientLightLevel = ((this.set_maxLux - this.set_minLux) / this.spaceBetweenLevels) * 7;
250
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel}`);
251
- break;
252
- case 9:
253
- this.CurrentAmbientLightLevel = ((this.set_maxLux - this.set_minLux) / this.spaceBetweenLevels) * 8;
254
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel}`);
255
- break;
256
- case 10:
257
- default:
258
- this.CurrentAmbientLightLevel = this.set_maxLux;
259
- this.debugLog();
214
+ // CurrentHorizontalTiltAngle
215
+ this.CurrentHorizontalTiltAngle = 100 - Number(this.position);
216
+ await this.setMinMax();
217
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentHorizontalTiltAngle ${this.CurrentHorizontalTiltAngle}`);
218
+ if (this.setNewTarget) {
219
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Checking Status ...`);
220
+ }
221
+ if (this.setNewTarget && this.inMotion) {
222
+ await this.setMinMax();
223
+ if (this.TargetHorizontalTiltAngle > this.CurrentHorizontalTiltAngle) {
224
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Closing,` +
225
+ ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
226
+ this.PositionState = this.platform.Characteristic.PositionState.INCREASING;
227
+ this.windowCoveringService.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
228
+ this.debugLog(`${this.device.deviceType}: ${this.CurrentHorizontalTiltAngle} INCREASING PositionState: ${this.PositionState}`);
229
+ }
230
+ else if (this.TargetHorizontalTiltAngle < this.CurrentHorizontalTiltAngle) {
231
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Opening,` +
232
+ ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
233
+ this.PositionState = this.platform.Characteristic.PositionState.DECREASING;
234
+ this.windowCoveringService.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
235
+ this.debugLog(`${this.device.deviceType}: ${this.CurrentHorizontalTiltAngle} DECREASING PositionState: ${this.PositionState}`);
236
+ }
237
+ else {
238
+ this.debugLog(`${this.device.deviceType}: ${this.CurrentHorizontalTiltAngle} Standby,` +
239
+ ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
240
+ this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
241
+ this.windowCoveringService.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
242
+ this.debugLog(`${this.device.deviceType}: ${this.CurrentHorizontalTiltAngle} STOPPED PositionState: ${this.PositionState}`);
260
243
  }
261
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} LightLevel: ${this.lightLevel},`
262
- + ` CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
263
244
  }
245
+ else {
246
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Standby,` +
247
+ ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
248
+ this.TargetHorizontalTiltAngle = this.CurrentHorizontalTiltAngle;
249
+ this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
250
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Stopped`);
251
+ }
252
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle},` +
253
+ ` TargetHorizontalTiltAngle: ${this.TargetHorizontalTiltAngle}, PositionState: ${this.PositionState},`);
264
254
  // Battery
265
255
  this.BatteryLevel = Number(this.battery);
266
256
  if (this.BatteryLevel < 10) {
@@ -310,20 +300,46 @@ class BlindTilt {
310
300
  }
311
301
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition},` +
312
302
  ` TargetPosition: ${this.TargetPosition}, PositionState: ${this.PositionState},`);
313
- if (!this.device.curtain?.hide_lightsensor) {
314
- this.set_minLux = this.minLux();
315
- this.set_maxLux = this.maxLux();
316
- // Brightness
317
- switch (this.brightness) {
318
- case 'dim':
319
- this.CurrentAmbientLightLevel = this.set_minLux;
320
- break;
321
- case 'bright':
322
- default:
323
- this.CurrentAmbientLightLevel = this.set_maxLux;
303
+ // CurrentHorizontalTiltAngle
304
+ this.CurrentHorizontalTiltAngle = 100 - Number(this.slidePosition);
305
+ await this.setMinMax();
306
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
307
+ if (this.setNewTarget) {
308
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Checking Status ...`);
309
+ }
310
+ if (this.setNewTarget && this.moving) {
311
+ await this.setMinMax();
312
+ if (this.TargetHorizontalTiltAngle > this.CurrentHorizontalTiltAngle) {
313
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Closing,`
314
+ + ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle} `);
315
+ this.PositionState = this.platform.Characteristic.PositionState.INCREASING;
316
+ this.windowCoveringService.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
317
+ this.debugLog(`${this.device.deviceType}: ${this.CurrentHorizontalTiltAngle} INCREASING PositionState: ${this.PositionState}`);
318
+ }
319
+ else if (this.TargetHorizontalTiltAngle < this.CurrentHorizontalTiltAngle) {
320
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Opening,`
321
+ + ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle} `);
322
+ this.PositionState = this.platform.Characteristic.PositionState.DECREASING;
323
+ this.windowCoveringService.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
324
+ this.debugLog(`${this.device.deviceType}: ${this.CurrentHorizontalTiltAngle} DECREASING PositionState: ${this.PositionState}`);
324
325
  }
325
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
326
+ else {
327
+ this.debugLog(`${this.device.deviceType}: ${this.CurrentHorizontalTiltAngle} Standby,`
328
+ + ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
329
+ this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
330
+ this.windowCoveringService.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
331
+ this.debugLog(`${this.device.deviceType}: ${this.CurrentHorizontalTiltAngle} STOPPED PositionState: ${this.PositionState}`);
332
+ }
333
+ }
334
+ else {
335
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Standby,`
336
+ + ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
337
+ this.TargetPosition = this.CurrentHorizontalTiltAngle;
338
+ this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
339
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Stopped`);
326
340
  }
341
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle},` +
342
+ ` TargetPosition: ${this.TargetPosition}, PositionState: ${this.PositionState},`);
327
343
  }
328
344
  async refreshStatus() {
329
345
  if (!this.device.enableCloudService && this.OpenAPI) {
@@ -369,11 +385,9 @@ class BlindTilt {
369
385
  this.battery = ad.serviceData.battery;
370
386
  this.inMotion = ad.serviceData.inMotion;
371
387
  this.position = ad.serviceData.position;
372
- this.lightLevel = ad.serviceData.lightLevel;
373
388
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${(0, super_stringify_1.default)(ad.serviceData)}`);
374
389
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} calibration: ${ad.serviceData.calibration}, ` +
375
- `position: ${ad.serviceData.position}, lightLevel: ${ad.serviceData.lightLevel}, battery: ${ad.serviceData.battery}, ` +
376
- `inMotion: ${ad.serviceData.inMotion}`);
390
+ `position: ${ad.serviceData.position}, inMotion: ${ad.serviceData.inMotion}, battery: ${ad.serviceData.battery}`);
377
391
  if (this.serviceData) {
378
392
  this.connected = true;
379
393
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} connected: ${this.connected}`);
@@ -672,6 +686,55 @@ class BlindTilt {
672
686
  }
673
687
  this.doBlindTiltUpdate.next();
674
688
  }
689
+ /**
690
+ * Handle requests to set the value of the "Target Position" characteristic
691
+ */
692
+ async TargetHorizontalTiltAngleSet(value) {
693
+ if (this.TargetHorizontalTiltAngle === this.accessory.context.TargetHorizontalTiltAngle) {
694
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set TargetHorizontalTiltAngle: ${value}`);
695
+ }
696
+ else {
697
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set TargetHorizontalTiltAngle: ${value}`);
698
+ }
699
+ this.TargetHorizontalTiltAngle = value;
700
+ if (this.device.mqttURL) {
701
+ this.mqttPublish('TargetHorizontalTiltAngle', this.TargetHorizontalTiltAngle);
702
+ }
703
+ await this.setMinMax();
704
+ if (value > this.CurrentHorizontalTiltAngle) {
705
+ this.PositionState = this.platform.Characteristic.PositionState.INCREASING;
706
+ this.setNewTarget = true;
707
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} value: ${value},`
708
+ + ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
709
+ }
710
+ else if (value < this.CurrentHorizontalTiltAngle) {
711
+ this.PositionState = this.platform.Characteristic.PositionState.DECREASING;
712
+ this.setNewTarget = true;
713
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} value: ${value},`
714
+ + ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
715
+ }
716
+ else {
717
+ this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
718
+ this.setNewTarget = false;
719
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} value: ${value},`
720
+ + ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
721
+ }
722
+ this.windowCoveringService.setCharacteristic(this.platform.Characteristic.PositionState, this.PositionState);
723
+ this.windowCoveringService.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
724
+ /**
725
+ * If Blind Tilt movement time is short, the moving flag from backend is always false.
726
+ * The minimum time depends on the network control latency.
727
+ */
728
+ clearTimeout(this.setNewTargetTimer);
729
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateRate: ${this.updateRate}`);
730
+ if (this.setNewTarget) {
731
+ this.setNewTargetTimer = setTimeout(() => {
732
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} setNewTarget ${this.setNewTarget} timeout`);
733
+ this.setNewTarget = false;
734
+ }, this.updateRate * 1000);
735
+ }
736
+ this.doBlindTiltUpdate.next();
737
+ }
675
738
  async updateHomeKitCharacteristics() {
676
739
  await this.setMinMax();
677
740
  if (this.CurrentPosition === undefined || Number.isNaN(this.CurrentPosition)) {
@@ -707,19 +770,29 @@ class BlindTilt {
707
770
  this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.TargetPosition, Number(this.TargetPosition));
708
771
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic TargetPosition: ${this.TargetPosition}`);
709
772
  }
710
- if (!this.device.curtain?.hide_lightsensor) {
711
- if (this.CurrentAmbientLightLevel === undefined || Number.isNaN(this.CurrentAmbientLightLevel)) {
712
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
773
+ if (this.CurrentHorizontalTiltAngle === undefined || Number.isNaN(this.CurrentHorizontalTiltAngle)) {
774
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
775
+ }
776
+ else {
777
+ if (this.device.mqttURL) {
778
+ this.mqttPublish('CurrentHorizontalTiltAngle', this.CurrentHorizontalTiltAngle);
713
779
  }
714
- else {
715
- if (this.device.mqttURL) {
716
- this.mqttPublish('CurrentAmbientLightLevel', this.CurrentAmbientLightLevel);
717
- }
718
- this.accessory.context.CurrentAmbientLightLevel = this.CurrentAmbientLightLevel;
719
- this.lightSensorService?.updateCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel, this.CurrentAmbientLightLevel);
720
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
721
- + ` updateCharacteristic CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
780
+ this.accessory.context.CurrentHorizontalTiltAngle = this.CurrentHorizontalTiltAngle;
781
+ this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.CurrentHorizontalTiltAngle, Number(this.CurrentPosition));
782
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
783
+ + ` CurrentHorizontalTiltAngle: ${this.CurrentHorizontalTiltAngle}`);
784
+ }
785
+ if (this.TargetHorizontalTiltAngle === undefined || Number.isNaN(this.TargetHorizontalTiltAngle)) {
786
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} TargetHorizontalTiltAngle: ${this.TargetHorizontalTiltAngle}`);
787
+ }
788
+ else {
789
+ if (this.device.mqttURL) {
790
+ this.mqttPublish('TargetHorizontalTiltAngle', this.TargetHorizontalTiltAngle);
722
791
  }
792
+ this.accessory.context.TargetHorizontalTiltAngle = this.TargetHorizontalTiltAngle;
793
+ this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.TargetHorizontalTiltAngle, Number(this.TargetHorizontalTiltAngle));
794
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
795
+ + ` TargetHorizontalTiltAngle: ${this.TargetHorizontalTiltAngle}`);
723
796
  }
724
797
  if (this.BLE) {
725
798
  if (this.BatteryLevel === undefined) {
@@ -950,9 +1023,6 @@ class BlindTilt {
950
1023
  this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.CurrentPosition, e);
951
1024
  this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.PositionState, e);
952
1025
  this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.TargetPosition, e);
953
- if (!this.device.curtain?.hide_lightsensor) {
954
- this.lightSensorService?.updateCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel, e);
955
- }
956
1026
  if (this.BLE) {
957
1027
  this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, e);
958
1028
  this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
@@ -989,6 +1059,18 @@ class BlindTilt {
989
1059
  else {
990
1060
  this.TargetPosition = this.accessory.context.TargetPosition;
991
1061
  }
1062
+ if (this.CurrentHorizontalTiltAngle === undefined) {
1063
+ this.CurrentHorizontalTiltAngle = 0;
1064
+ }
1065
+ else {
1066
+ this.CurrentHorizontalTiltAngle = this.accessory.context.CurrentHorizontalTiltAngle;
1067
+ }
1068
+ if (this.TargetHorizontalTiltAngle === undefined) {
1069
+ this.TargetHorizontalTiltAngle = 0;
1070
+ }
1071
+ else {
1072
+ this.TargetHorizontalTiltAngle = this.accessory.context.TargetHorizontalTiltAngle;
1073
+ }
992
1074
  if (this.PositionState === undefined) {
993
1075
  this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
994
1076
  }