@switchbot/homebridge-switchbot 0.2.0-alpha.1 → 1.0.1-beta.1

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.
Files changed (99) hide show
  1. package/.github/workflows/nodejs-beta.yml +1 -1
  2. package/.github/workflows/nodejs.yml +1 -1
  3. package/.github/workflows/{prerelease.js → prerelease-beta.js} +0 -0
  4. package/CHANGELOG.md +1 -1
  5. package/README.md +9 -5
  6. package/config.schema.json +350 -126
  7. package/dist/devices/bots.d.ts +17 -33
  8. package/dist/devices/bots.d.ts.map +1 -1
  9. package/dist/devices/bots.js +103 -152
  10. package/dist/devices/bots.js.map +1 -1
  11. package/dist/devices/{bulb.d.ts → colorbulb.d.ts} +12 -19
  12. package/dist/devices/colorbulb.d.ts.map +1 -0
  13. package/dist/devices/{bulb.js → colorbulb.js} +32 -32
  14. package/dist/devices/colorbulb.js.map +1 -0
  15. package/dist/devices/contact.d.ts +18 -16
  16. package/dist/devices/contact.d.ts.map +1 -1
  17. package/dist/devices/contact.js +101 -44
  18. package/dist/devices/contact.js.map +1 -1
  19. package/dist/devices/curtains.d.ts +17 -51
  20. package/dist/devices/curtains.d.ts.map +1 -1
  21. package/dist/devices/curtains.js +168 -248
  22. package/dist/devices/curtains.js.map +1 -1
  23. package/dist/devices/humidifiers.d.ts +13 -4
  24. package/dist/devices/humidifiers.d.ts.map +1 -1
  25. package/dist/devices/humidifiers.js +78 -8
  26. package/dist/devices/humidifiers.js.map +1 -1
  27. package/dist/devices/indoorcam.d.ts +6 -13
  28. package/dist/devices/indoorcam.d.ts.map +1 -1
  29. package/dist/devices/indoorcam.js.map +1 -1
  30. package/dist/devices/meters.d.ts +12 -15
  31. package/dist/devices/meters.d.ts.map +1 -1
  32. package/dist/devices/meters.js +35 -44
  33. package/dist/devices/meters.js.map +1 -1
  34. package/dist/devices/motion.d.ts +17 -15
  35. package/dist/devices/motion.d.ts.map +1 -1
  36. package/dist/devices/motion.js +87 -40
  37. package/dist/devices/motion.js.map +1 -1
  38. package/dist/devices/plugs.d.ts +6 -13
  39. package/dist/devices/plugs.d.ts.map +1 -1
  40. package/dist/devices/plugs.js.map +1 -1
  41. package/dist/irdevices/airconditioners.d.ts +10 -10
  42. package/dist/irdevices/airconditioners.d.ts.map +1 -1
  43. package/dist/irdevices/airconditioners.js +29 -9
  44. package/dist/irdevices/airconditioners.js.map +1 -1
  45. package/dist/irdevices/airpurifiers.d.ts +11 -11
  46. package/dist/irdevices/airpurifiers.d.ts.map +1 -1
  47. package/dist/irdevices/airpurifiers.js.map +1 -1
  48. package/dist/irdevices/cameras.d.ts +3 -3
  49. package/dist/irdevices/cameras.d.ts.map +1 -1
  50. package/dist/irdevices/cameras.js.map +1 -1
  51. package/dist/irdevices/fans.d.ts +6 -6
  52. package/dist/irdevices/fans.d.ts.map +1 -1
  53. package/dist/irdevices/fans.js +10 -10
  54. package/dist/irdevices/fans.js.map +1 -1
  55. package/dist/irdevices/lights.d.ts +3 -3
  56. package/dist/irdevices/lights.d.ts.map +1 -1
  57. package/dist/irdevices/lights.js.map +1 -1
  58. package/dist/irdevices/others.d.ts +3 -3
  59. package/dist/irdevices/others.d.ts.map +1 -1
  60. package/dist/irdevices/others.js.map +1 -1
  61. package/dist/irdevices/tvs.d.ts +3 -3
  62. package/dist/irdevices/tvs.d.ts.map +1 -1
  63. package/dist/irdevices/tvs.js +7 -5
  64. package/dist/irdevices/tvs.js.map +1 -1
  65. package/dist/irdevices/vacuumcleaners.d.ts +3 -3
  66. package/dist/irdevices/vacuumcleaners.d.ts.map +1 -1
  67. package/dist/irdevices/vacuumcleaners.js.map +1 -1
  68. package/dist/irdevices/waterheaters.d.ts +3 -3
  69. package/dist/irdevices/waterheaters.d.ts.map +1 -1
  70. package/dist/irdevices/waterheaters.js.map +1 -1
  71. package/dist/platform.d.ts +3 -2
  72. package/dist/platform.d.ts.map +1 -1
  73. package/dist/platform.js +136 -46
  74. package/dist/platform.js.map +1 -1
  75. package/dist/settings.d.ts +50 -8
  76. package/dist/settings.d.ts.map +1 -1
  77. package/package.json +65 -65
  78. package/src/devices/bots.ts +126 -176
  79. package/src/devices/{bulb.ts → colorbulb.ts} +43 -51
  80. package/src/devices/contact.ts +124 -68
  81. package/src/devices/curtains.ts +189 -300
  82. package/src/devices/humidifiers.ts +93 -14
  83. package/src/devices/indoorcam.ts +10 -20
  84. package/src/devices/meters.ts +53 -69
  85. package/src/devices/motion.ts +108 -62
  86. package/src/devices/plugs.ts +8 -19
  87. package/src/irdevices/airconditioners.ts +43 -20
  88. package/src/irdevices/airpurifiers.ts +15 -11
  89. package/src/irdevices/cameras.ts +5 -3
  90. package/src/irdevices/fans.ts +22 -16
  91. package/src/irdevices/lights.ts +5 -3
  92. package/src/irdevices/others.ts +5 -3
  93. package/src/irdevices/tvs.ts +13 -7
  94. package/src/irdevices/vacuumcleaners.ts +5 -3
  95. package/src/irdevices/waterheaters.ts +5 -3
  96. package/src/platform.ts +148 -49
  97. package/src/settings.ts +79 -8
  98. package/dist/devices/bulb.d.ts.map +0 -1
  99. package/dist/devices/bulb.js.map +0 -1
@@ -10,11 +10,9 @@ class Curtain {
10
10
  this.accessory = accessory;
11
11
  this.device = device;
12
12
  // default placeholders
13
- this.setMinMax();
14
13
  this.CurrentPosition = 0;
15
14
  this.TargetPosition = 0;
16
15
  this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
17
- this.ScanDuration = this.platform.config.options.refreshRate;
18
16
  // BLE Connection
19
17
  if (device.ble) {
20
18
  // eslint-disable-next-line @typescript-eslint/no-var-requires
@@ -42,6 +40,8 @@ class Curtain {
42
40
  (this.service =
43
41
  accessory.getService(this.platform.Service.WindowCovering) ||
44
42
  accessory.addService(this.platform.Service.WindowCovering)), `${device.deviceName} ${device.deviceType}`;
43
+ this.platform.device(`[Curtain Config] disable_group: ${device.curtain?.disable_group}, refreshRate: ${device.curtain?.refreshRate},`
44
+ + ` set_max: ${device.curtain?.set_max}, set_min: ${device.curtain?.set_min}, set_minStep: ${device.curtain?.set_minStep}`);
45
45
  // To avoid "Cannot add a Service with the same UUID another Service without also defining a unique 'subtype' property." error,
46
46
  // when creating multiple services of the same type, you need to use the following syntax to specify a name and subtype id:
47
47
  // accessory.getService('NAME') ?? accessory.addService(this.platform.Service.Lightbulb, 'NAME', 'USER_DEFINED_SUBTYPE');
@@ -61,7 +61,7 @@ class Curtain {
61
61
  validValueRanges: [0, 100],
62
62
  })
63
63
  .onGet(() => {
64
- return Number.isNaN(this.CurrentPosition);
64
+ return this.CurrentPosition;
65
65
  });
66
66
  this.service
67
67
  .getCharacteristic(this.platform.Characteristic.TargetPosition)
@@ -75,15 +75,6 @@ class Curtain {
75
75
  accessory.getService(this.platform.Service.LightSensor) ||
76
76
  accessory.addService(this.platform.Service.LightSensor)), `${device.deviceName} Light Sensor`;
77
77
  this.lightSensorService.setCharacteristic(this.platform.Characteristic.Name, `${device.deviceName} Light Sensor`);
78
- // handle on / off events using the On characteristic
79
- this.lightSensorService.getCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel).onGet(() => {
80
- if (this.CurrentAmbientLightLevel === 'bright') {
81
- return 100000;
82
- }
83
- else {
84
- return 0.0001;
85
- }
86
- });
87
78
  // Update Homekit
88
79
  this.updateHomeKitCharacteristics();
89
80
  // Start an update interval
@@ -153,9 +144,81 @@ class Curtain {
153
144
  }
154
145
  async BLEparseStatus() {
155
146
  this.platform.device('Curtains BLE Device parseStatus');
147
+ this.CurrentPosition = 100 - Number(this.position);
148
+ this.setMinMax();
149
+ this.platform.debug(`Curtain ${this.accessory.displayName} CurrentPosition - Device is Currently: ${this.CurrentPosition}`);
150
+ if (this.setNewTarget) {
151
+ this.platform.log.info(`Checking ${this.accessory.displayName} Status ...`);
152
+ }
153
+ if (this.setNewTarget) {
154
+ if (this.TargetPosition > this.CurrentPosition) {
155
+ this.platform.debug(`Curtain ${this.accessory.displayName} - Current position: ${this.CurrentPosition} closing`);
156
+ this.PositionState = this.platform.Characteristic.PositionState.INCREASING;
157
+ }
158
+ else if (this.TargetPosition < this.CurrentPosition) {
159
+ this.platform.debug(`Curtain ${this.accessory.displayName} - Current position: ${this.CurrentPosition} opening`);
160
+ this.PositionState = this.platform.Characteristic.PositionState.DECREASING;
161
+ }
162
+ else {
163
+ this.platform.debug(`Curtain ${this.CurrentPosition} - standby`);
164
+ this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
165
+ }
166
+ }
167
+ else {
168
+ this.platform.debug(`Curtain ${this.accessory.displayName} - Current position: ${this.CurrentPosition} standby`);
169
+ if (!this.setNewTarget) {
170
+ /*If Curtain calibration distance is short, there will be an error between the current percentage and the target percentage.*/
171
+ this.TargetPosition = this.CurrentPosition;
172
+ this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
173
+ }
174
+ }
175
+ // Brightness
176
+ switch (this.lightLevel) {
177
+ case 1:
178
+ this.CurrentAmbientLightLevel = 0.0001;
179
+ break;
180
+ case 2:
181
+ this.CurrentAmbientLightLevel = 100;
182
+ break;
183
+ case 3:
184
+ this.CurrentAmbientLightLevel = 200;
185
+ break;
186
+ case 4:
187
+ this.CurrentAmbientLightLevel = 4000;
188
+ break;
189
+ case 5:
190
+ this.CurrentAmbientLightLevel = 12000;
191
+ break;
192
+ case 6:
193
+ this.CurrentAmbientLightLevel = 28000;
194
+ break;
195
+ case 7:
196
+ this.CurrentAmbientLightLevel = 56000;
197
+ break;
198
+ case 8:
199
+ this.CurrentAmbientLightLevel = 75000;
200
+ break;
201
+ case 9:
202
+ this.CurrentAmbientLightLevel = 90000;
203
+ break;
204
+ case 10:
205
+ default:
206
+ this.CurrentAmbientLightLevel = 100000;
207
+ }
208
+ // Battery
209
+ this.BatteryLevel = Number(this.battery);
210
+ if (this.BatteryLevel < 10) {
211
+ this.StatusLowBattery = this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
212
+ }
213
+ else {
214
+ this.StatusLowBattery = this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
215
+ }
216
+ this.platform.debug(`Curtain ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition},`
217
+ + ` TargetPosition: ${this.TargetPosition}, PositionState: ${this.PositionState},`
218
+ + ` CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
156
219
  }
157
220
  async openAPIparseStatus() {
158
- this.setMinMax();
221
+ this.platform.device('Curtains OpenAPI Device parseStatus');
159
222
  this.CurrentPosition = 100 - this.deviceStatus.body.slidePosition;
160
223
  this.setMinMax();
161
224
  this.platform.debug(`Curtain ${this.accessory.displayName} CurrentPosition - Device is Currently: ${this.CurrentPosition}`);
@@ -189,77 +252,72 @@ class Curtain {
189
252
  case 'dim':
190
253
  this.CurrentAmbientLightLevel = 0.0001;
191
254
  break;
255
+ case 'bright':
192
256
  default:
193
257
  this.CurrentAmbientLightLevel = 100000;
194
258
  }
195
- this.platform.debug(`Curtain ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition}
196
- , TargetPosition: ${this.TargetPosition}, PositionState: ${this.PositionState}
197
- , CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
259
+ this.platform.debug(`Curtain ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition},`
260
+ + ` TargetPosition: ${this.TargetPosition}, PositionState: ${this.PositionState},`
261
+ + ` CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
198
262
  }
199
263
  async refreshStatus() {
200
264
  if (this.device.ble) {
201
265
  this.platform.device('BLE');
202
- await this.BLErefreshStatus();
266
+ await this.BLERefreshStatus();
203
267
  }
204
268
  else {
205
269
  this.platform.device('OpenAPI');
206
270
  await this.openAPIRefreshStatus();
207
271
  }
208
272
  }
209
- async BLErefreshStatus() {
210
- this.platform.debug('Curtains BLE Device RefreshStatus');
273
+ connectBLE() {
211
274
  // eslint-disable-next-line @typescript-eslint/no-var-requires
212
275
  const Switchbot = require('node-switchbot');
213
276
  const switchbot = new Switchbot();
214
277
  const colon = this.device.deviceId.match(/.{1,2}/g);
215
278
  const bleMac = colon.join(':'); //returns 1A:23:B4:56:78:9A;
216
279
  this.device.bleMac = bleMac.toLowerCase();
217
- this.platform.debug(this.device.bleMac);
218
- switchbot.onadvertisement = (ad) => {
219
- this.platform.debug(JSON.stringify(ad, null, ' '));
220
- this.platform.device(`ad: ${JSON.stringify(ad)}`);
221
- };
222
- this.parseStatus();
223
- this.updateHomeKitCharacteristics();
224
- switchbot
225
- .startScan({
280
+ this.platform.device(this.device.bleMac);
281
+ return switchbot;
282
+ }
283
+ async BLERefreshStatus() {
284
+ this.platform.debug('Curtains BLE Device RefreshStatus');
285
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
286
+ const switchbot = this.connectBLE();
287
+ // Start to monitor advertisement packets
288
+ switchbot.startScan({
289
+ model: 'c',
226
290
  id: this.device.bleMac,
227
- })
228
- .then(() => {
229
- return switchbot.wait(this.platform.config.options.refreshRate * 1000);
230
- })
231
- .then(() => {
291
+ }).then(() => {
292
+ // Set an event hander
293
+ switchbot.onadvertisement = (ad) => {
294
+ this.serviceData = ad.serviceData;
295
+ this.platform.device(`${this.device.bleMac}: ${JSON.stringify(ad.serviceData)}`);
296
+ this.calibration = ad.serviceData.calibration;
297
+ this.battery = ad.serviceData.battery;
298
+ this.position = ad.serviceData.position;
299
+ this.lightLevel = ad.serviceData.lightLevel;
300
+ this.platform.device(`${this.accessory.displayName}, Calibration: ${ad.serviceData.calibration}, Position: ${ad.serviceData.position},`
301
+ + ` Light Level: ${ad.serviceData.lightLevel}, Battery: ${ad.serviceData.battery}`);
302
+ };
303
+ // Wait 10 seconds
304
+ return switchbot.wait(10000);
305
+ }).then(() => {
306
+ // Stop to monitor
232
307
  switchbot.stopScan();
233
- })
234
- .catch(async (error) => {
235
- this.platform.log.error(error);
308
+ this.parseStatus();
309
+ this.updateHomeKitCharacteristics();
310
+ }).catch(async (e) => {
311
+ this.platform.log.error(`BLE Connection Failed: ${e.message}`);
312
+ this.platform.log.warn('Using OpenAPI Connection');
236
313
  await this.openAPIRefreshStatus();
237
314
  });
238
- setInterval(() => {
239
- this.platform.log.info('Start scan ' + this.device.deviceName + '(' + this.device.bleMac + ')');
240
- switchbot
241
- .startScan({
242
- mode: 'T',
243
- id: bleMac,
244
- })
245
- .then(() => {
246
- return switchbot.wait(this.platform.config.options.refreshRate * 1000);
247
- })
248
- .then(() => {
249
- switchbot.stopScan();
250
- this.platform.log.info('Stop scan ' + this.device.deviceName + '(' + this.device.bleMac + ')');
251
- })
252
- .catch(async (error) => {
253
- this.platform.log.error(error);
254
- await this.openAPIRefreshStatus();
255
- });
256
- }, this.platform.config.options.refreshRate * 60000);
257
315
  }
258
316
  async openAPIRefreshStatus() {
317
+ this.platform.debug('Curtains OpenAPI Device RefreshStatus');
259
318
  try {
260
319
  this.deviceStatus = (await this.platform.axios.get(`${settings_1.DeviceURL}/${this.device.deviceId}/status`)).data;
261
320
  this.platform.debug(`Curtain ${this.accessory.displayName} refreshStatus: ${JSON.stringify(this.deviceStatus)}`);
262
- this.setMinMax();
263
321
  this.parseStatus();
264
322
  this.updateHomeKitCharacteristics();
265
323
  }
@@ -281,6 +339,15 @@ class Curtain {
281
339
  }
282
340
  async BLEpushChanges() {
283
341
  this.platform.device('Curtains BLE Device pushChanges');
342
+ const switchbot = this.connectBLE();
343
+ switchbot.discover({ model: 'c', quick: true, id: this.device.bleMac }).then((device_list) => {
344
+ this.platform.log.info(`${this.accessory.displayName}, Target Position: ${this.TargetPosition}`);
345
+ return device_list[0].runToPos(100 - Number(this.TargetPosition));
346
+ }).then(() => {
347
+ this.platform.device('Done.');
348
+ }).catch((e) => {
349
+ this.platform.log.error(`BLE pushChanges Error Message: ${e.message}`);
350
+ });
284
351
  }
285
352
  async OpenAPIpushChanges() {
286
353
  if (this.TargetPosition !== this.CurrentPosition) {
@@ -294,7 +361,6 @@ class Curtain {
294
361
  this.platform.log.info('Sending request for', this.accessory.displayName, 'to SwitchBot API. command:', payload.command, 'parameter:', payload.parameter, 'commandType:', payload.commandType);
295
362
  this.platform.debug(`Curtain ${this.accessory.displayName} pushchanges: ${JSON.stringify(payload)}`);
296
363
  // Make the API request
297
- this.platform.log.error(this.device.deviceId);
298
364
  const push = (await this.platform.axios.post(`${settings_1.DeviceURL}/${this.device.deviceId}/commands`, payload));
299
365
  this.platform.debug(`Curtain ${this.accessory.displayName} Changes pushed: ${JSON.stringify(push.data)}`);
300
366
  this.statusCode(push);
@@ -302,12 +368,11 @@ class Curtain {
302
368
  }
303
369
  updateHomeKitCharacteristics() {
304
370
  this.platform.debug(`Curtain ${this.accessory.displayName} updateHomeKitCharacteristics - ${JSON.stringify({
305
- CurrentPosition: Number.isNaN(this.CurrentPosition),
371
+ CurrentPosition: this.CurrentPosition,
306
372
  PositionState: this.PositionState,
307
- TargetPosition: Number.isNaN(this.TargetPosition),
373
+ TargetPosition: this.TargetPosition,
308
374
  CurrentAmbientLightLevel: this.CurrentAmbientLightLevel,
309
375
  })}`);
310
- this.setMinMax();
311
376
  if (this.CurrentPosition === undefined) {
312
377
  this.platform.debug(`Curtain ${this.accessory.displayName} CurrentPosition: ${this.CurrentPosition}`);
313
378
  }
@@ -336,12 +401,32 @@ class Curtain {
336
401
  this.lightSensorService.updateCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel, this.CurrentAmbientLightLevel);
337
402
  this.platform.device(`Curtain ${this.accessory.displayName} updateCharacteristic CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
338
403
  }
404
+ if (this.device.ble) {
405
+ if (this.BatteryLevel === undefined) {
406
+ this.platform.debug(`Curtain ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}`);
407
+ }
408
+ else {
409
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, this.BatteryLevel);
410
+ this.platform.device(`Curtain ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.BatteryLevel}`);
411
+ }
412
+ if (this.StatusLowBattery === undefined) {
413
+ this.platform.debug(`Curtain ${this.accessory.displayName} StatusLowBattery: ${this.StatusLowBattery}`);
414
+ }
415
+ else {
416
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.StatusLowBattery);
417
+ this.platform.device(`Curtain ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
418
+ }
419
+ }
339
420
  }
340
421
  apiError(e) {
341
422
  this.service.updateCharacteristic(this.platform.Characteristic.CurrentPosition, e);
342
423
  this.service.updateCharacteristic(this.platform.Characteristic.PositionState, e);
343
424
  this.service.updateCharacteristic(this.platform.Characteristic.TargetPosition, e);
344
425
  this.lightSensorService.updateCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel, e);
426
+ if (this.device.ble) {
427
+ this.batteryService.updateCharacteristic(this.platform.Characteristic.BatteryLevel, e);
428
+ this.batteryService.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
429
+ }
345
430
  }
346
431
  statusCode(push) {
347
432
  switch (push.data.statusCode) {
@@ -374,199 +459,34 @@ class Curtain {
374
459
  * Handle requests to set the value of the "Target Position" characteristic
375
460
  */
376
461
  TargetPositionSet(value) {
377
- if (this.device.ble) {
378
- this.TargetPosition = value;
379
- this.platform.log.info('Target position of Curtain setting: ' + this.TargetPosition + '%');
380
- clearTimeout(this.moveTimer);
381
- if (this.TargetPosition > this.CurrentPosition) {
382
- this.PositionState = this.platform.Characteristic.PositionState.INCREASING;
383
- }
384
- else if (this.TargetPosition < this.CurrentPosition) {
385
- this.PositionState = this.platform.Characteristic.PositionState.DECREASING;
386
- }
387
- else {
388
- this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
389
- }
390
- if (this.PositionState === this.platform.Characteristic.PositionState.STOPPED) {
391
- this.service?.getCharacteristic(this.platform.Characteristic.TargetPosition).updateValue(this.TargetPosition);
392
- this.service?.getCharacteristic(this.platform.Characteristic.CurrentPosition).updateValue(this.CurrentPosition);
393
- this.service?.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
394
- }
395
- else {
396
- this.runToPosition(this.convertFromHomeKitPosition(this.TargetPosition))
397
- .then(() => {
398
- this.platform.log.info('Done.');
399
- this.platform.log.info('Target position of Curtain has been set to: ' + this.TargetPosition + '%');
400
- this.moveTimer = setTimeout(() => {
401
- // log.info("setTimeout", this.positionState.toString(), this.currentPosition.toString(), this.targetPosition.toString());
402
- this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
403
- // this.curtainService?.getCharacteristic(hap.Characteristic.TargetPosition).updateValue(this.targetPosition);
404
- this.service?.getCharacteristic(this.platform.Characteristic.CurrentPosition).updateValue(this.CurrentPosition);
405
- this.service?.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
406
- }, this.moveTime);
407
- })
408
- .catch((error) => {
409
- this.platform.log.error(error);
410
- this.moveTimer = setTimeout(() => {
411
- this.TargetPosition = this.CurrentPosition;
412
- this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
413
- this.service?.getCharacteristic(this.platform.Characteristic.TargetPosition).updateValue(this.TargetPosition);
414
- // this.curtainService?.getCharacteristic(hap.Characteristic.CurrentPosition).updateValue(this.currentPosition);
415
- this.service?.getCharacteristic(this.platform.Characteristic.PositionState).updateValue(this.PositionState);
416
- }, 1000);
417
- this.platform.log.info('Target position of Curtain failed to be set to: ' + this.TargetPosition + '%');
418
- });
419
- }
420
- }
421
- else {
422
- this.platform.debug(`Curtain ${this.accessory.displayName} - Set TargetPosition: ${value}`);
423
- this.TargetPosition = value;
424
- if (value > this.CurrentPosition) {
425
- this.PositionState = this.platform.Characteristic.PositionState.INCREASING;
426
- this.setNewTarget = true;
427
- this.setMinMax();
428
- }
429
- else if (value < this.CurrentPosition) {
430
- this.PositionState = this.platform.Characteristic.PositionState.DECREASING;
431
- this.setNewTarget = true;
432
- this.setMinMax();
433
- }
434
- else {
435
- this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
436
- this.setNewTarget = false;
437
- this.setMinMax();
438
- }
439
- this.service.setCharacteristic(this.platform.Characteristic.PositionState, this.PositionState);
440
- /**
441
- * If Curtain movement time is short, the moving flag from backend is always false.
442
- * The minimum time depends on the network control latency.
443
- */
444
- clearTimeout(this.setNewTargetTimer);
445
- if (this.setNewTarget) {
446
- this.setNewTargetTimer = setTimeout(() => {
447
- this.platform.debug(`Curtain ${this.accessory.displayName} - setNewTarget ${this.setNewTarget} timeout`);
448
- this.setNewTarget = false;
449
- }, 10000);
450
- }
451
- this.doCurtainUpdate.next();
462
+ this.platform.debug(`Curtain ${this.accessory.displayName} - Set TargetPosition: ${value}`);
463
+ this.TargetPosition = value;
464
+ this.setMinMax();
465
+ if (value > this.CurrentPosition) {
466
+ this.PositionState = this.platform.Characteristic.PositionState.INCREASING;
467
+ this.setNewTarget = true;
452
468
  }
453
- }
454
- /**
455
- * Convert to/from device/HomeKit's position, since:
456
- *
457
- * - opened is 0% in HomeKit and 100% in Curtain device.
458
- * - closed is 100% in HomeKit, 0% in Curtain device.
459
- */
460
- convertFromHomeKitPosition(n) {
461
- let covertToDevicePosition;
462
- if (this.ReverseDir) {
463
- covertToDevicePosition = n;
469
+ else if (value < this.CurrentPosition) {
470
+ this.PositionState = this.platform.Characteristic.PositionState.DECREASING;
471
+ this.setNewTarget = true;
464
472
  }
465
473
  else {
466
- covertToDevicePosition = 100 - n;
467
- }
468
- return covertToDevicePosition;
469
- }
470
- /**
471
- * Ask the device to start moving to the given position (which must be a device value and not an HomeKit value).
472
- * Returns a Promise that's resolved as soon as the command was sent to the device.
473
- */
474
- async runToPosition(pos) {
475
- const SwitchBot = require('node-switchbot');
476
- const switchbot = new SwitchBot();
477
- return switchbot
478
- .discover({ duration: this.ScanDuration, model: 'c', quick: false })
479
- .then((device_list) => {
480
- let targetDevice = null;
481
- for (const device of device_list) {
482
- this.platform.log.info(device.modelName, device.address);
483
- if (device.address === this.device.bleMac.toLowerCase()) {
484
- targetDevice = device;
485
- break;
486
- }
487
- }
488
- if (!targetDevice) {
489
- return new Promise((resolve, reject) => {
490
- reject(new Error('Curtain \'' + this.device.deviceName + '\' (' + this.device.bleMac.toLowerCase() + '): device not found.'));
491
- });
492
- }
493
- this.startFastScan();
494
- this.platform.log.info(`Curtain ${this.device.deviceName} (${this.device.bleMac.toLowerCase()}) is moving to ${pos}...`);
495
- return targetDevice.runToPos(pos);
496
- });
497
- }
498
- /**
499
- * Start a faster scan loop (using fastScanInterval). Used in calls to `runToPosition` to
500
- * report quicker on device position change. Will disable on its own as soon if the curtain's
501
- * device position does not change for more than `fastScanDuration`.
502
- */
503
- startFastScan() {
504
- if (this.FastScanEnabled) {
505
- return;
474
+ this.PositionState = this.platform.Characteristic.PositionState.STOPPED;
475
+ this.setNewTarget = false;
506
476
  }
507
- this.FastScanEnabled = true;
508
- this.startScanLoop();
509
- }
510
- stopFastScan() {
511
- if (!this.FastScanEnabled) {
512
- return;
513
- }
514
- this.FastScanEnabled = false;
515
- this.startScanLoop();
516
- }
517
- get scanInterval() {
518
- return this.FastScanEnabled ? this.FastScanInterval : this.SlowScanInterval;
519
- }
520
- startScanLoop() {
521
- if (this.ScanIntervalId !== null) {
522
- clearInterval(this.ScanIntervalId);
523
- }
524
- this.platform.log.info(`Curtain ${this.device.deviceName}: starting scan loop with interval ${this.scanInterval}`);
525
- this.ScanIntervalId = setInterval(() => {
526
- this.scan().catch((err) => {
527
- this.platform.log.error(`error while scanning for Curtain ${this.device.deviceName}: ${err}`);
528
- });
529
- }, this.scanInterval);
530
- }
531
- scan() {
532
- return new Promise((resolve, reject) => {
533
- const SwitchBot = require('node-switchbot');
534
- const switchbot = new SwitchBot();
535
- switchbot.onadvertisement = (ad) => {
536
- this.applyPosition(ad);
537
- };
538
- switchbot.startScan({ id: this.device.bleMac.toLowerCase() })
539
- .then(() => {
540
- return switchbot.wait(this.ScanDuration);
541
- })
542
- .then(() => {
543
- resolve();
544
- switchbot.stopScan();
545
- })
546
- .catch((err) => {
547
- reject(err);
548
- });
549
- });
550
- }
551
- applyPosition(ad) {
552
- let pos = ad.serviceData.position;
553
- if (pos + this.OpenCloseThreshold >= 100) {
554
- pos = 100;
555
- }
556
- else if (pos - this.OpenCloseThreshold <= 0) {
557
- pos = 0;
558
- }
559
- if (pos === this.PreviousPosition) {
560
- return;
561
- }
562
- this.PreviousPosition = this.Position;
563
- this.Position = pos;
564
- if (this.AutoDisableFastScanTimeoutId !== null) {
565
- clearTimeout(this.AutoDisableFastScanTimeoutId);
477
+ this.service.setCharacteristic(this.platform.Characteristic.PositionState, this.PositionState);
478
+ /**
479
+ * If Curtain movement time is short, the moving flag from backend is always false.
480
+ * The minimum time depends on the network control latency.
481
+ */
482
+ clearTimeout(this.setNewTargetTimer);
483
+ if (this.setNewTarget) {
484
+ this.setNewTargetTimer = setTimeout(() => {
485
+ this.platform.debug(`Curtain ${this.accessory.displayName} - setNewTarget ${this.setNewTarget} timeout`);
486
+ this.setNewTarget = false;
487
+ }, 10000);
566
488
  }
567
- this.AutoDisableFastScanTimeoutId = setTimeout(() => {
568
- this.stopFastScan();
569
- }, this.FastScanDuration);
489
+ this.doCurtainUpdate.next();
570
490
  }
571
491
  setMinMax() {
572
492
  if (this.device.curtain?.set_min) {
@@ -1 +1 @@
1
- {"version":3,"file":"curtains.js","sourceRoot":"","sources":["../../src/devices/curtains.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"curtains.js","sourceRoot":"","sources":["../../src/devices/curtains.ts"],"names":[],"mappings":"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"}