@switchbot/homebridge-switchbot 3.7.1-beta.1 → 3.7.1-beta.11

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 (112) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +14 -0
  3. package/assets/security-privacy-bluetooth.png +0 -0
  4. package/config.schema.json +7 -1
  5. package/dist/device/blindtilt.d.ts +3 -1
  6. package/dist/device/blindtilt.d.ts.map +1 -1
  7. package/dist/device/blindtilt.js +61 -28
  8. package/dist/device/blindtilt.js.map +1 -1
  9. package/dist/device/bot.d.ts +1 -0
  10. package/dist/device/bot.d.ts.map +1 -1
  11. package/dist/device/bot.js +102 -80
  12. package/dist/device/bot.js.map +1 -1
  13. package/dist/device/ceilinglight.d.ts +1 -0
  14. package/dist/device/ceilinglight.d.ts.map +1 -1
  15. package/dist/device/ceilinglight.js +53 -28
  16. package/dist/device/ceilinglight.js.map +1 -1
  17. package/dist/device/colorbulb.d.ts +1 -0
  18. package/dist/device/colorbulb.d.ts.map +1 -1
  19. package/dist/device/colorbulb.js +53 -28
  20. package/dist/device/colorbulb.js.map +1 -1
  21. package/dist/device/contact.d.ts +1 -0
  22. package/dist/device/contact.d.ts.map +1 -1
  23. package/dist/device/contact.js +53 -28
  24. package/dist/device/contact.js.map +1 -1
  25. package/dist/device/curtain.d.ts +2 -0
  26. package/dist/device/curtain.d.ts.map +1 -1
  27. package/dist/device/curtain.js +74 -43
  28. package/dist/device/curtain.js.map +1 -1
  29. package/dist/device/device.d.ts.map +1 -1
  30. package/dist/device/device.js +247 -394
  31. package/dist/device/device.js.map +1 -1
  32. package/dist/device/fan.d.ts +1 -0
  33. package/dist/device/fan.d.ts.map +1 -1
  34. package/dist/device/fan.js +53 -28
  35. package/dist/device/fan.js.map +1 -1
  36. package/dist/device/hub.d.ts +1 -0
  37. package/dist/device/hub.d.ts.map +1 -1
  38. package/dist/device/hub.js +53 -28
  39. package/dist/device/hub.js.map +1 -1
  40. package/dist/device/humidifier.d.ts +1 -0
  41. package/dist/device/humidifier.d.ts.map +1 -1
  42. package/dist/device/humidifier.js +53 -28
  43. package/dist/device/humidifier.js.map +1 -1
  44. package/dist/device/iosensor.d.ts +1 -0
  45. package/dist/device/iosensor.d.ts.map +1 -1
  46. package/dist/device/iosensor.js +53 -28
  47. package/dist/device/iosensor.js.map +1 -1
  48. package/dist/device/lightstrip.d.ts +1 -0
  49. package/dist/device/lightstrip.d.ts.map +1 -1
  50. package/dist/device/lightstrip.js +53 -28
  51. package/dist/device/lightstrip.js.map +1 -1
  52. package/dist/device/lock.d.ts +1 -0
  53. package/dist/device/lock.d.ts.map +1 -1
  54. package/dist/device/lock.js +54 -29
  55. package/dist/device/lock.js.map +1 -1
  56. package/dist/device/meter.d.ts +1 -0
  57. package/dist/device/meter.d.ts.map +1 -1
  58. package/dist/device/meter.js +53 -28
  59. package/dist/device/meter.js.map +1 -1
  60. package/dist/device/meterplus.d.ts +1 -0
  61. package/dist/device/meterplus.d.ts.map +1 -1
  62. package/dist/device/meterplus.js +53 -28
  63. package/dist/device/meterplus.js.map +1 -1
  64. package/dist/device/motion.d.ts +1 -0
  65. package/dist/device/motion.d.ts.map +1 -1
  66. package/dist/device/motion.js +53 -28
  67. package/dist/device/motion.js.map +1 -1
  68. package/dist/device/plug.d.ts +1 -0
  69. package/dist/device/plug.d.ts.map +1 -1
  70. package/dist/device/plug.js +54 -29
  71. package/dist/device/plug.js.map +1 -1
  72. package/dist/device/robotvacuumcleaner.d.ts +1 -0
  73. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  74. package/dist/device/robotvacuumcleaner.js +54 -29
  75. package/dist/device/robotvacuumcleaner.js.map +1 -1
  76. package/dist/device/waterdetector.d.ts +1 -0
  77. package/dist/device/waterdetector.d.ts.map +1 -1
  78. package/dist/device/waterdetector.js +53 -28
  79. package/dist/device/waterdetector.js.map +1 -1
  80. package/dist/irdevice/irdevice.d.ts.map +1 -1
  81. package/dist/irdevice/irdevice.js +30 -133
  82. package/dist/irdevice/irdevice.js.map +1 -1
  83. package/dist/platform.d.ts +19 -18
  84. package/dist/platform.d.ts.map +1 -1
  85. package/dist/platform.js +369 -524
  86. package/dist/platform.js.map +1 -1
  87. package/dist/settings.d.ts +1 -0
  88. package/dist/settings.d.ts.map +1 -1
  89. package/dist/settings.js.map +1 -1
  90. package/package.json +20 -18
  91. package/src/device/blindtilt.ts +59 -27
  92. package/src/device/bot.ts +98 -77
  93. package/src/device/ceilinglight.ts +51 -27
  94. package/src/device/colorbulb.ts +50 -26
  95. package/src/device/contact.ts +50 -26
  96. package/src/device/curtain.ts +71 -40
  97. package/src/device/device.ts +283 -395
  98. package/src/device/fan.ts +50 -26
  99. package/src/device/hub.ts +50 -26
  100. package/src/device/humidifier.ts +50 -26
  101. package/src/device/iosensor.ts +50 -26
  102. package/src/device/lightstrip.ts +50 -26
  103. package/src/device/lock.ts +51 -27
  104. package/src/device/meter.ts +50 -26
  105. package/src/device/meterplus.ts +50 -26
  106. package/src/device/motion.ts +50 -26
  107. package/src/device/plug.ts +51 -27
  108. package/src/device/robotvacuumcleaner.ts +51 -27
  109. package/src/device/waterdetector.ts +50 -26
  110. package/src/irdevice/irdevice.ts +54 -134
  111. package/src/platform.ts +379 -529
  112. package/src/settings.ts +1 -0
@@ -44,6 +44,7 @@ interface credentials {
44
44
  interface options {
45
45
  devices?: devicesConfig[];
46
46
  irdevices?: irDevicesConfig[];
47
+ allowInvalidCharacters?: boolean;
47
48
  mqttURL?: string;
48
49
  mqttOptions?: IClientOptions;
49
50
  mqttPubOptions?: IClientOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;AAEzC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,iCAAiC,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,yCAAyC,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,sDAAsD,CAAC;AAEnF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,sDAAsD,CAAC;AAEnF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,uDAAuD,CAAC;AAErF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,uDAAuD,CAAC;AA6BpF,CAAC;AAoDD,CAAC;AAMD,CAAC;AASD,CAAC;AAKD,CAAC;AAYD,CAAC;AAYD,CAAC;AAOD,CAAC;AAMD,CAAC;AAID,CAAC;AAKD,CAAC;AAKD,CAAC;AAKD,CAAC;AAOD,CAAC;AAOD,CAAC;AAmCD,CAAC;AAID,CAAC;AAWD,CAAC;AAID,CAAC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;AAEzC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,iCAAiC,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,yCAAyC,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,sDAAsD,CAAC;AAEnF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,sDAAsD,CAAC;AAEnF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,uDAAuD,CAAC;AAErF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,uDAAuD,CAAC;AA8BpF,CAAC;AAoDD,CAAC;AAMD,CAAC;AASD,CAAC;AAKD,CAAC;AAYD,CAAC;AAYD,CAAC;AAOD,CAAC;AAMD,CAAC;AAID,CAAC;AAKD,CAAC;AAKD,CAAC;AAKD,CAAC;AAOD,CAAC;AAOD,CAAC;AAmCD,CAAC;AAID,CAAC;AAWD,CAAC;AAID,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "SwitchBot",
3
3
  "name": "@switchbot/homebridge-switchbot",
4
- "version": "3.7.1-beta.1",
4
+ "version": "3.7.1-beta.11",
5
5
  "description": "The SwitchBot plugin allows you to access your SwitchBot device(s) from HomeKit.",
6
6
  "author": {
7
7
  "name": "SwitchBot",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "engineStrict": true,
28
28
  "engines": {
29
- "homebridge": "^1.8.4 || ^2.0.0-beta.8",
29
+ "homebridge": "^1.8.4 || ^2.0.0 || ^2.0.0-beta.8",
30
30
  "node": "^18 || ^20 || ^22"
31
31
  },
32
32
  "main": "dist/index.js",
@@ -36,10 +36,10 @@
36
36
  "lint": "eslint src/**/*.ts",
37
37
  "watch": "npm run build && npm run plugin-ui && npm link && nodemon",
38
38
  "plugin-ui": "rsync ./src/homebridge-ui/public/index.html ./dist/homebridge-ui/public/",
39
- "build": "rimraf ./dist && tsc",
39
+ "build": "npm run clean && tsc && npm run plugin-ui",
40
40
  "prepublishOnly": "npm run lint && npm run build && npm run plugin-ui ",
41
41
  "postpublish": "npm run clean",
42
- "clean": "rimraf ./dist",
42
+ "clean": "shx rm -rf ./dist",
43
43
  "test": "npm run lint",
44
44
  "docs": "typedoc",
45
45
  "lint-docs": "typedoc --emit none --treatWarningsAsErrors"
@@ -81,29 +81,31 @@
81
81
  "dependencies": {
82
82
  "@homebridge/plugin-ui-utils": "^1.0.3",
83
83
  "async-mqtt": "^2.6.3",
84
- "fakegato-history": "^0.6.4",
85
- "homebridge-lib": "^7.0.4",
84
+ "fakegato-history": "^0.6.5",
85
+ "homebridge-lib": "^7.0.5",
86
86
  "rxjs": "^7.8.1",
87
- "undici": "^6.19.4"
87
+ "undici": "^6.19.8"
88
88
  },
89
89
  "optionalDependencies": {
90
90
  "node-switchbot": "2.3.0"
91
91
  },
92
92
  "devDependencies": {
93
- "@eslint/js": "^9.7.0",
94
- "@stylistic/eslint-plugin": "^2.3.0",
93
+ "@eslint/js": "^9.9.0",
94
+ "@stylistic/eslint-plugin": "^2.6.4",
95
95
  "@types/eslint__js": "^8.42.3",
96
- "@types/node": "^20.14.11",
97
- "eslint": "^9.7.0",
98
- "globals": "^15.8.0",
99
- "homebridge": "^2.0.0-beta.0",
100
- "homebridge-config-ui-x": "4.56.4",
96
+ "@types/jest": "^29.5.12",
97
+ "@types/node": "^22.4.1",
98
+ "eslint": "^9.9.0",
99
+ "globals": "^15.9.0",
100
+ "homebridge": "^1.8.4",
101
+ "homebridge-config-ui-x": "^4.56.4",
102
+ "jest": "^29.7.0",
101
103
  "nodemon": "^3.1.4",
102
- "npm-check-updates": "^16.14.20",
103
- "rimraf": "^6.0.1",
104
+ "npm-check-updates": "^17.0.6",
105
+ "shx": "^0.3.4",
104
106
  "ts-node": "^10.9.2",
105
- "typedoc": "^0.26.5",
107
+ "typedoc": "^0.26.6",
106
108
  "typescript": "^5.5.4",
107
- "typescript-eslint": "^8.0.0-alpha.44"
109
+ "typescript-eslint": "^8.2.0"
108
110
  }
109
111
  }
@@ -4,6 +4,10 @@
4
4
  */
5
5
  import { deviceBase } from './device.js';
6
6
  import { BlindTiltMappingMode } from '../utils.js';
7
+ /*
8
+ * For Testing Locally:
9
+ * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
10
+ */
7
11
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot';
8
12
  import { Subject, debounceTime, interval, skipWhile, take, tap } from 'rxjs';
9
13
 
@@ -57,7 +61,8 @@ export class BlindTilt extends deviceBase {
57
61
  setNewTargetTimer!: NodeJS.Timeout;
58
62
 
59
63
  // Updates
60
- blindTiltUpdateInProgress;
64
+ blindTiltMoving: boolean;
65
+ blindTiltUpdateInProgress: boolean;
61
66
  doBlindTiltUpdate: Subject<void>;
62
67
 
63
68
  constructor(
@@ -75,6 +80,7 @@ export class BlindTilt extends deviceBase {
75
80
 
76
81
  // this is subject we use to track when we need to POST changes to the SwitchBot API
77
82
  this.doBlindTiltUpdate = new Subject();
83
+ this.blindTiltMoving = false;
78
84
  this.blindTiltUpdateInProgress = false;
79
85
  this.setNewTarget = false;
80
86
 
@@ -190,12 +196,28 @@ export class BlindTilt extends deviceBase {
190
196
  }
191
197
 
192
198
  // Retrieve initial values and updateHomekit
193
- this.debugLog('Retrieve initial values and update Homekit');
194
- this.refreshStatus();
199
+ try {
200
+ this.debugLog('Retrieve initial values and update Homekit');
201
+ this.refreshStatus();
202
+ } catch (e: any) {
203
+ this.errorLog(`failed to retrieve initial values and update Homekit, Error: ${e}`);
204
+ }
195
205
 
196
- //regisiter webhook event handler
197
- this.debugLog('Registering Webhook Event Handler');
198
- this.registerWebhook();
206
+ //regisiter webhook event handler if enabled
207
+ try {
208
+ this.debugLog('Registering Webhook Event Handler');
209
+ this.registerWebhook();
210
+ } catch (e: any) {
211
+ this.errorLog(`failed to registerWebhook, Error: ${e}`);
212
+ }
213
+
214
+ //regisiter platform BLE event handler if enabled
215
+ try {
216
+ this.debugLog('Registering Platform BLE Event Handler');
217
+ this.registerPlatformBLE();
218
+ } catch (e: any) {
219
+ this.errorLog(`failed to registerPlatformBLE, Error: ${e}`);
220
+ }
199
221
 
200
222
  // Start an update interval
201
223
  interval(this.deviceRefreshRate * 1000)
@@ -206,6 +228,7 @@ export class BlindTilt extends deviceBase {
206
228
 
207
229
  // update slide progress
208
230
  interval(this.deviceUpdateRate * 1000)
231
+ .pipe(skipWhile(() => !this.blindTiltMoving))
209
232
  .subscribe(async () => {
210
233
  if (this.WindowCovering.PositionState === this.hap.Characteristic.PositionState.STOPPED) {
211
234
  return;
@@ -251,6 +274,7 @@ export class BlindTilt extends deviceBase {
251
274
  await this.infoLog('Checking Status ...');
252
275
  }
253
276
  if (this.setNewTarget && this.serviceData.inMotion) {
277
+ this.blindTiltMoving = true;
254
278
  await this.setMinMax();
255
279
  if (Number(this.WindowCovering.TargetPosition) > this.WindowCovering.CurrentPosition) {
256
280
  await this.debugLog(`Closing, CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
@@ -269,6 +293,7 @@ export class BlindTilt extends deviceBase {
269
293
  await this.debugLog('Stopped, PositionState', this.WindowCovering.PositionState);
270
294
  }
271
295
  } else {
296
+ this.blindTiltMoving = false;
272
297
  await this.debugLog(`Standby, CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
273
298
  this.WindowCovering.TargetPosition = this.WindowCovering.CurrentPosition;
274
299
  this.WindowCovering.PositionState = this.hap.Characteristic.PositionState.STOPPED;
@@ -381,7 +406,7 @@ export class BlindTilt extends deviceBase {
381
406
  async refreshStatus(): Promise<void> {
382
407
  if (!this.device.enableCloudService && this.OpenAPI) {
383
408
  await this.errorLog(`refreshStatus enableCloudService: ${this.device.enableCloudService}`);
384
- } else if (this.BLE || this.config.options?.BLE) {
409
+ } else if (this.BLE) {
385
410
  await this.BLERefreshStatus();
386
411
  } else if (this.OpenAPI && this.platform.config.credentials?.token) {
387
412
  await this.openAPIRefreshStatus();
@@ -392,6 +417,30 @@ export class BlindTilt extends deviceBase {
392
417
  }
393
418
 
394
419
  async BLERefreshStatus(): Promise<void> {
420
+ await this.debugLog('BLERefreshStatus');
421
+ const switchbot = await this.switchbotBLE();
422
+ if (switchbot === undefined) {
423
+ await this.BLERefreshConnection(switchbot);
424
+ } else {
425
+ // Start to monitor advertisement packets
426
+ (async () => {
427
+ // Start to monitor advertisement packets
428
+ const serviceData = await this.monitorAdvertisementPackets(switchbot) as blindTiltServiceData;
429
+ // Update HomeKit
430
+ if (serviceData.model === SwitchBotBLEModel.BlindTilt && serviceData.modelName === SwitchBotBLEModelName.BlindTilt) {
431
+ this.serviceData = serviceData;
432
+ await this.BLEparseStatus();
433
+ await this.updateHomeKitCharacteristics();
434
+ } else {
435
+ await this.errorLog(`failed to get serviceData, serviceData: ${serviceData}`);
436
+ await this.BLERefreshConnection(switchbot);
437
+ }
438
+ })();
439
+ }
440
+ }
441
+
442
+ async registerPlatformBLE(): Promise<void> {
443
+ await this.debugLog('registerPlatformBLE');
395
444
  if (this.config.options?.BLE) {
396
445
  await this.debugLog('is listening to Platform BLE.');
397
446
  this.device.bleMac = this.device.deviceId!.match(/.{1,2}/g)!.join(':').toLowerCase();
@@ -407,26 +456,7 @@ export class BlindTilt extends deviceBase {
407
456
  }
408
457
  };
409
458
  } else {
410
- await this.debugLog('is using Device BLE Scanning.');
411
- const switchbot = await this.switchbotBLE();
412
- if (switchbot === undefined) {
413
- await this.BLERefreshConnection(switchbot);
414
- } else {
415
- // Start to monitor advertisement packets
416
- (async () => {
417
- // Start to monitor advertisement packets
418
- const serviceData = await this.monitorAdvertisementPackets(switchbot) as blindTiltServiceData;
419
- // Update HomeKit
420
- if (serviceData.model === SwitchBotBLEModel.BlindTilt && serviceData.modelName === SwitchBotBLEModelName.BlindTilt) {
421
- this.serviceData = serviceData;
422
- await this.BLEparseStatus();
423
- await this.updateHomeKitCharacteristics();
424
- } else {
425
- await this.errorLog(`failed to get serviceData, serviceData: ${serviceData}`);
426
- await this.BLERefreshConnection(switchbot);
427
- }
428
- })();
429
- }
459
+ await this.debugLog('is not listening to Platform BLE');
430
460
  }
431
461
  }
432
462
 
@@ -792,6 +822,7 @@ export class BlindTilt extends deviceBase {
792
822
  }
793
823
 
794
824
  if (this.setNewTarget) {
825
+ this.blindTiltMoving = true;
795
826
  await this.infoLog('Checking Status ...');
796
827
  await this.setMinMax();
797
828
  if (this.WindowCovering.TargetPosition > this.WindowCovering.CurrentPosition
@@ -812,6 +843,7 @@ export class BlindTilt extends deviceBase {
812
843
  await this.debugLog(`Stopped, PositionState: ${this.WindowCovering.PositionState}`);
813
844
  }
814
845
  } else {
846
+ this.blindTiltMoving = false;
815
847
  await this.debugLog(`Standby because device not moving, CurrentPosition: ${this.WindowCovering.CurrentPosition}`);
816
848
  this.WindowCovering.TargetPosition = this.WindowCovering.CurrentPosition;
817
849
  if (homekitTiltAngle) {
package/src/device/bot.ts CHANGED
@@ -3,6 +3,10 @@
3
3
  * bot.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import { deviceBase } from './device.js';
6
+ /*
7
+ * For Testing Locally:
8
+ * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
9
+ */
6
10
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot';
7
11
  import { Subject, debounceTime, interval, skipWhile, take, tap } from 'rxjs';
8
12
 
@@ -424,12 +428,28 @@ export class Bot extends deviceBase {
424
428
  }
425
429
 
426
430
  // Retrieve initial values and updateHomekit
427
- this.debugLog('Retrieve initial values and update Homekit');
428
- this.refreshStatus();
431
+ try {
432
+ this.debugLog('Retrieve initial values and update Homekit');
433
+ this.refreshStatus();
434
+ } catch (e: any) {
435
+ this.errorLog(`failed to retrieve initial values and update Homekit, Error: ${e}`);
436
+ }
429
437
 
430
- //regisiter webhook event handler
431
- this.debugLog('Registering Webhook Event Handler');
432
- this.registerWebhook();
438
+ //regisiter webhook event handler if enabled
439
+ try {
440
+ this.debugLog('Registering Webhook Event Handler');
441
+ this.registerWebhook();
442
+ } catch (e: any) {
443
+ this.errorLog(`failed to registerWebhook, Error: ${e}`);
444
+ }
445
+
446
+ //regisiter platform BLE event handler if enabled
447
+ try {
448
+ this.debugLog('Registering Platform BLE Event Handler');
449
+ this.registerPlatformBLE();
450
+ } catch (e: any) {
451
+ this.errorLog(`failed to registerPlatformBLE, Error: ${e}`);
452
+ }
433
453
 
434
454
  // Start an update interval
435
455
  interval(this.deviceRefreshRate * 1000)
@@ -558,7 +578,7 @@ export class Bot extends deviceBase {
558
578
  async refreshStatus(): Promise<void> {
559
579
  if (!this.device.enableCloudService && this.OpenAPI) {
560
580
  await this.errorLog(`refreshStatus enableCloudService: ${this.device.enableCloudService}`);
561
- } else if (this.BLE || this.config.options?.BLE) {
581
+ } else if (this.BLE) {
562
582
  await this.BLERefreshStatus();
563
583
  } else if (this.OpenAPI && this.platform.config.credentials?.token) {
564
584
  await this.openAPIRefreshStatus();
@@ -570,6 +590,29 @@ export class Bot extends deviceBase {
570
590
 
571
591
  async BLERefreshStatus(): Promise<void> {
572
592
  await this.debugLog('BLERefreshStatus');
593
+ const switchbot = await this.switchbotBLE();
594
+ if (switchbot === undefined) {
595
+ await this.BLERefreshConnection(switchbot);
596
+ } else {
597
+ // Start to monitor advertisement packets
598
+ (async () => {
599
+ // Start to monitor advertisement packets
600
+ const serviceData = await this.monitorAdvertisementPackets(switchbot) as botServiceData;
601
+ // Update HomeKit
602
+ if (serviceData.model === SwitchBotBLEModel.Bot && serviceData.modelName === SwitchBotBLEModelName.Bot) {
603
+ this.serviceData = serviceData;
604
+ await this.BLEparseStatus();
605
+ await this.updateHomeKitCharacteristics();
606
+ } else {
607
+ await this.errorLog(`failed to get serviceData, serviceData: ${serviceData}`);
608
+ await this.BLERefreshConnection(switchbot);
609
+ }
610
+ })();
611
+ }
612
+ }
613
+
614
+ async registerPlatformBLE(): Promise<void> {
615
+ await this.debugLog('registerPlatformBLE');
573
616
  if (this.config.options?.BLE) {
574
617
  await this.debugLog('is listening to Platform BLE.');
575
618
  this.device.bleMac = this.device.deviceId!.match(/.{1,2}/g)!.join(':').toLowerCase();
@@ -585,26 +628,7 @@ export class Bot extends deviceBase {
585
628
  }
586
629
  };
587
630
  } else {
588
- await this.debugLog('is using Device BLE Scanning.');
589
- const switchbot = await this.switchbotBLE();
590
- if (switchbot === undefined) {
591
- await this.BLERefreshConnection(switchbot);
592
- } else {
593
- // Start to monitor advertisement packets
594
- (async () => {
595
- // Start to monitor advertisement packets
596
- const serviceData = await this.monitorAdvertisementPackets(switchbot) as botServiceData;
597
- // Update HomeKit
598
- if (serviceData.model === SwitchBotBLEModel.Bot && serviceData.modelName === SwitchBotBLEModelName.Bot) {
599
- this.serviceData = serviceData;
600
- await this.BLEparseStatus();
601
- await this.updateHomeKitCharacteristics();
602
- } else {
603
- await this.errorLog(`failed to get serviceData, serviceData: ${serviceData}`);
604
- await this.BLERefreshConnection(switchbot);
605
- }
606
- })();
607
- }
631
+ await this.debugLog('is not listening to Platform BLE');
608
632
  }
609
633
  }
610
634
 
@@ -791,57 +815,54 @@ export class Bot extends deviceBase {
791
815
  * Handle requests to set the "On" characteristic
792
816
  */
793
817
  async OnSet(value: CharacteristicValue): Promise<void> {
794
- if (this.botDeviceType === 'switch') {
795
- if (this.Switch) {
796
- await this.debugLog(`Set On: ${value}`);
797
- this.On = value === false ? false : true;
798
- }
799
- } else if (this.botDeviceType === 'garagedoor') {
800
- if (this.GarageDoor) {
801
- await this.debugLog(`Set TargetDoorState: ${value}`);
802
- this.On = value === this.hap.Characteristic.TargetDoorState.CLOSED ? false : true;
803
- }
804
- } else if (this.botDeviceType === 'door') {
805
- if (this.Door) {
806
- await this.debugLog(`Set TargetPosition: ${value}`);
807
- this.On = value === 0 ? false : true;
808
- }
809
- } else if (this.botDeviceType === 'window') {
810
- if (this.Window) {
811
- await this.debugLog(`Set TargetPosition: ${value}`);
812
- this.On = value === 0 ? false : true;
818
+ if (this.botDeviceType === 'garagedoor') {
819
+ this.debugLog(`Set TargetDoorState: ${value}`);
820
+ if (value === this.hap.Characteristic.TargetDoorState.CLOSED) {
821
+ this.On = false;
822
+ } else {
823
+ this.On = true;
813
824
  }
814
- } else if (this.botDeviceType === 'windowcovering') {
815
- if (this.WindowCovering) {
816
- await this.debugLog(`Set TargetPosition: ${value}`);
817
- this.On = value === 0 ? false : true;
825
+ } else if (
826
+ this.botDeviceType === 'door' ||
827
+ this.botDeviceType === 'window' ||
828
+ this.botDeviceType === 'windowcovering'
829
+ ) {
830
+ this.debugLog(`Set TargetPosition: ${value}`);
831
+ if (value === 0) {
832
+ this.On = false;
833
+ } else {
834
+ this.On = true;
818
835
  }
819
836
  } else if (this.botDeviceType === 'lock') {
820
- if (this.LockMechanism) {
821
- await this.debugLog(`Set LockTargetState: ${value}`);
822
- this.On = value === this.hap.Characteristic.LockTargetState.SECURED ? false : true;
837
+ this.debugLog(`Set LockTargetState: ${value}`);
838
+ if (value === this.hap.Characteristic.LockTargetState.SECURED) {
839
+ this.On = false;
840
+ } else {
841
+ this.On = true;
823
842
  }
824
843
  } else if (this.botDeviceType === 'faucet') {
825
- if (this.Faucet) {
826
- await this.debugLog(`Set Active: ${value}`);
827
- this.On = value === this.hap.Characteristic.Active.INACTIVE ? false : true;
844
+ this.debugLog(`Set Active: ${value}`);
845
+ if (value === this.hap.Characteristic.Active.INACTIVE) {
846
+ this.On = false;
847
+ } else {
848
+ this.On = true;
828
849
  }
829
850
  } else if (this.botDeviceType === 'stateful') {
830
- if (this.StatefulProgrammableSwitch) {
831
- await this.debugLog(`Set ProgrammableSwitchOutputState: ${value}`);
832
- this.On = value === 0 ? false : true;
851
+ this.debugLog(`Set ProgrammableSwitchOutputState: ${value}`);
852
+ if (value === 0) {
853
+ this.On = false;
854
+ } else {
855
+ this.On = true;
833
856
  }
834
857
  } else {
835
- if (this.Outlet) {
836
- await this.debugLog(`Set On: ${value}`);
837
- this.On = value === false ? false : true;
838
- }
839
- }
840
- if (this.device.bot?.mode === 'multipress') {
841
- if (this.On === true) {
842
- this.multiPressCount++;
843
- await this.debugLog(`multiPressCount: ${this.multiPressCount}`);
858
+ this.debugLog(`Set On: ${value}`);
859
+ if (this.device.bot?.mode === 'multipress') {
860
+ if (value === true) {
861
+ this.multiPressCount++;
862
+ this.debugLog(`set to Multi-Press. Multi-Press count: ${this.multiPressCount}`);
863
+ }
844
864
  }
865
+ this.On = value as boolean;
845
866
  }
846
867
  this.doBotUpdate.next();
847
868
  }
@@ -1023,7 +1044,7 @@ export class Bot extends deviceBase {
1023
1044
  Service: accessory.getService(this.hap.Service.Outlet) as Service,
1024
1045
  };
1025
1046
  accessory.context.Outlet = this.Outlet as object;
1026
- await this.warnLog('Removing any leftover Outlet Service');
1047
+ await this.debugWarnLog('Removing any leftover Outlet Service');
1027
1048
  accessory.removeService(this.Outlet.Service);
1028
1049
  }
1029
1050
 
@@ -1035,7 +1056,7 @@ export class Bot extends deviceBase {
1035
1056
  Service: accessory.getService(this.hap.Service.GarageDoorOpener) as Service,
1036
1057
  };
1037
1058
  accessory.context.GarageDoor = this.GarageDoor as object;
1038
- await this.warnLog('Removing any leftover Garage Door Service');
1059
+ await this.debugWarnLog('Removing any leftover Garage Door Service');
1039
1060
  accessory.removeService(this.GarageDoor.Service);
1040
1061
  }
1041
1062
 
@@ -1047,7 +1068,7 @@ export class Bot extends deviceBase {
1047
1068
  Service: accessory.getService(this.hap.Service.Door) as Service,
1048
1069
  };
1049
1070
  accessory.context.Door = this.Door as object;
1050
- await this.warnLog('Removing any leftover Door Service');
1071
+ await this.debugWarnLog('Removing any leftover Door Service');
1051
1072
  accessory.removeService(this.Door.Service);
1052
1073
  }
1053
1074
 
@@ -1059,7 +1080,7 @@ export class Bot extends deviceBase {
1059
1080
  Service: accessory.getService(this.hap.Service.LockMechanism) as Service,
1060
1081
  };
1061
1082
  accessory.context.LockMechanism = this.LockMechanism as object;
1062
- this.warnLog('Removing any leftover Lock Service');
1083
+ await this.debugWarnLog('Removing any leftover Lock Service');
1063
1084
  accessory.removeService(this.LockMechanism.Service);
1064
1085
  }
1065
1086
 
@@ -1071,7 +1092,7 @@ export class Bot extends deviceBase {
1071
1092
  Service: accessory.getService(this.hap.Service.Valve) as Service,
1072
1093
  };
1073
1094
  accessory.context.Faucet = this.Faucet as object;
1074
- await this.warnLog('Removing any leftover Faucet Service');
1095
+ await this.debugWarnLog('Removing any leftover Faucet Service');
1075
1096
  accessory.removeService(this.Faucet.Service);
1076
1097
  }
1077
1098
 
@@ -1083,7 +1104,7 @@ export class Bot extends deviceBase {
1083
1104
  Service: accessory.getService(this.hap.Service.Fan) as Service,
1084
1105
  };
1085
1106
  accessory.context.Fan = this.Fan as object;
1086
- this.warnLog('Removing any leftover Fan Service');
1107
+ await this.debugWarnLog('Removing any leftover Fan Service');
1087
1108
  accessory.removeService(this.Fan.Service);
1088
1109
  }
1089
1110
 
@@ -1095,7 +1116,7 @@ export class Bot extends deviceBase {
1095
1116
  Service: accessory.getService(this.hap.Service.Window) as Service,
1096
1117
  };
1097
1118
  accessory.context.Window = this.Window as object;
1098
- await this.warnLog('Removing any leftover Window Service');
1119
+ await this.debugWarnLog('Removing any leftover Window Service');
1099
1120
  accessory.removeService(this.Window.Service);
1100
1121
  }
1101
1122
 
@@ -1107,7 +1128,7 @@ export class Bot extends deviceBase {
1107
1128
  Service: accessory.getService(this.hap.Service.WindowCovering) as Service,
1108
1129
  };
1109
1130
  accessory.context.WindowCovering = this.WindowCovering as object;
1110
- await this.warnLog('Removing any leftover Window Covering Service');
1131
+ await this.debugWarnLog('Removing any leftover Window Covering Service');
1111
1132
  accessory.removeService(this.WindowCovering.Service);
1112
1133
  }
1113
1134
 
@@ -1119,7 +1140,7 @@ export class Bot extends deviceBase {
1119
1140
  Service: accessory.getService(this.hap.Service.StatefulProgrammableSwitch) as Service,
1120
1141
  };
1121
1142
  accessory.context.StatefulProgrammableSwitch = this.StatefulProgrammableSwitch as object;
1122
- await this.warnLog('Removing any leftover Stateful Programmable Switch Service');
1143
+ await this.debugWarnLog('Removing any leftover Stateful Programmable Switch Service');
1123
1144
  accessory.removeService(this.StatefulProgrammableSwitch.Service);
1124
1145
  }
1125
1146
 
@@ -1131,7 +1152,7 @@ export class Bot extends deviceBase {
1131
1152
  Service: accessory.getService(this.hap.Service.Switch) as Service,
1132
1153
  };
1133
1154
  accessory.context.Switch = this.Switch as object;
1134
- await this.warnLog('Removing any leftover Switch Service');
1155
+ await this.debugWarnLog('Removing any leftover Switch Service');
1135
1156
  accessory.removeService(this.Switch.Service);
1136
1157
  }
1137
1158