@switchbot/homebridge-switchbot 3.8.1 → 3.8.2-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 (89) hide show
  1. package/.github/npm-version-script.cjs +81 -0
  2. package/CHANGELOG.md +8 -0
  3. package/dist/device/blindtilt.d.ts.map +1 -1
  4. package/dist/device/blindtilt.js +51 -38
  5. package/dist/device/blindtilt.js.map +1 -1
  6. package/dist/device/bot.d.ts.map +1 -1
  7. package/dist/device/bot.js +78 -64
  8. package/dist/device/bot.js.map +1 -1
  9. package/dist/device/ceilinglight.d.ts.map +1 -1
  10. package/dist/device/ceilinglight.js +55 -42
  11. package/dist/device/ceilinglight.js.map +1 -1
  12. package/dist/device/colorbulb.d.ts.map +1 -1
  13. package/dist/device/colorbulb.js +133 -99
  14. package/dist/device/colorbulb.js.map +1 -1
  15. package/dist/device/contact.d.ts.map +1 -1
  16. package/dist/device/contact.js +20 -13
  17. package/dist/device/contact.js.map +1 -1
  18. package/dist/device/curtain.d.ts.map +1 -1
  19. package/dist/device/curtain.js +88 -70
  20. package/dist/device/curtain.js.map +1 -1
  21. package/dist/device/device.d.ts +0 -1
  22. package/dist/device/device.d.ts.map +1 -1
  23. package/dist/device/device.js +26 -22
  24. package/dist/device/device.js.map +1 -1
  25. package/dist/device/fan.d.ts.map +1 -1
  26. package/dist/device/fan.js +54 -40
  27. package/dist/device/fan.js.map +1 -1
  28. package/dist/device/hub.d.ts.map +1 -1
  29. package/dist/device/hub.js +20 -14
  30. package/dist/device/hub.js.map +1 -1
  31. package/dist/device/humidifier.d.ts.map +1 -1
  32. package/dist/device/humidifier.js +45 -32
  33. package/dist/device/humidifier.js.map +1 -1
  34. package/dist/device/iosensor.d.ts.map +1 -1
  35. package/dist/device/iosensor.js +20 -14
  36. package/dist/device/iosensor.js.map +1 -1
  37. package/dist/device/lightstrip.d.ts.map +1 -1
  38. package/dist/device/lightstrip.js +107 -80
  39. package/dist/device/lightstrip.js.map +1 -1
  40. package/dist/device/lock.d.ts.map +1 -1
  41. package/dist/device/lock.js +54 -40
  42. package/dist/device/lock.js.map +1 -1
  43. package/dist/device/meter.d.ts.map +1 -1
  44. package/dist/device/meter.js +20 -14
  45. package/dist/device/meter.js.map +1 -1
  46. package/dist/device/meterplus.d.ts.map +1 -1
  47. package/dist/device/meterplus.js +20 -14
  48. package/dist/device/meterplus.js.map +1 -1
  49. package/dist/device/motion.d.ts.map +1 -1
  50. package/dist/device/motion.js +20 -13
  51. package/dist/device/motion.js.map +1 -1
  52. package/dist/device/plug.d.ts.map +1 -1
  53. package/dist/device/plug.js +55 -41
  54. package/dist/device/plug.js.map +1 -1
  55. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  56. package/dist/device/robotvacuumcleaner.js +55 -41
  57. package/dist/device/robotvacuumcleaner.js.map +1 -1
  58. package/dist/device/waterdetector.d.ts.map +1 -1
  59. package/dist/device/waterdetector.js +20 -13
  60. package/dist/device/waterdetector.js.map +1 -1
  61. package/dist/platform.d.ts.map +1 -1
  62. package/dist/platform.js +10 -3
  63. package/dist/platform.js.map +1 -1
  64. package/dist/utils.d.ts +10 -0
  65. package/dist/utils.d.ts.map +1 -1
  66. package/dist/utils.js +27 -0
  67. package/dist/utils.js.map +1 -1
  68. package/package.json +4 -4
  69. package/src/device/blindtilt.ts +47 -36
  70. package/src/device/bot.ts +71 -59
  71. package/src/device/ceilinglight.ts +50 -39
  72. package/src/device/colorbulb.ts +128 -99
  73. package/src/device/contact.ts +16 -10
  74. package/src/device/curtain.ts +84 -69
  75. package/src/device/device.ts +24 -23
  76. package/src/device/fan.ts +49 -37
  77. package/src/device/hub.ts +16 -11
  78. package/src/device/humidifier.ts +41 -30
  79. package/src/device/iosensor.ts +16 -11
  80. package/src/device/lightstrip.ts +102 -79
  81. package/src/device/lock.ts +49 -37
  82. package/src/device/meter.ts +16 -11
  83. package/src/device/meterplus.ts +16 -11
  84. package/src/device/motion.ts +16 -10
  85. package/src/device/plug.ts +50 -38
  86. package/src/device/robotvacuumcleaner.ts +50 -38
  87. package/src/device/waterdetector.ts +16 -10
  88. package/src/platform.ts +9 -3
  89. package/src/utils.ts +33 -0
package/src/device/fan.ts CHANGED
@@ -18,6 +18,7 @@ import type { batteryCirculatorFanWebhookContext } from '../types/devicewebhooks
18
18
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
19
19
  import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
20
20
 
21
+ import { formatDeviceIdAsMac } from '../utils.js'
21
22
  import { deviceBase } from './device.js'
22
23
 
23
24
  export class Fan extends deviceBase {
@@ -346,17 +347,22 @@ export class Fan extends deviceBase {
346
347
  await this.debugLog('registerPlatformBLE')
347
348
  if (this.config.options?.BLE) {
348
349
  await this.debugLog('is listening to Platform BLE.')
349
- this.device.bleMac = this.device.deviceId!.match(/.{1,2}/g)!.join(':').toLowerCase()
350
- await this.debugLog(`bleMac: ${this.device.bleMac}`)
351
- this.platform.bleEventHandler[this.device.bleMac] = async (context: batteryCirculatorFanServiceData) => {
352
- try {
353
- await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
354
- this.serviceData = context
355
- await this.BLEparseStatus()
356
- await this.updateHomeKitCharacteristics()
357
- } catch (e: any) {
358
- await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
350
+ try {
351
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
352
+ this.device.bleMac = formattedDeviceId
353
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
354
+ this.platform.bleEventHandler[this.device.bleMac] = async (context: batteryCirculatorFanServiceData) => {
355
+ try {
356
+ await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
357
+ this.serviceData = context
358
+ await this.BLEparseStatus()
359
+ await this.updateHomeKitCharacteristics()
360
+ } catch (e: any) {
361
+ await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
362
+ }
359
363
  }
364
+ } catch (error) {
365
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
360
366
  }
361
367
  } else {
362
368
  await this.debugLog('is not listening to Platform BLE')
@@ -448,34 +454,40 @@ export class Fan extends deviceBase {
448
454
  if (this.Fan.Active !== this.accessory.context.Active) {
449
455
  await this.debugLog(`BLEpushChanges On: ${this.Fan.Active} OnCached: ${this.accessory.context.Active}`)
450
456
  const switchbot = await this.platform.connectBLE(this.accessory, this.device)
451
- await this.convertBLEAddress()
452
- if (switchbot !== false) {
453
- switchbot
454
- .discover({ model: this.device.bleModel, id: this.device.bleMac })
455
- .then(async (device_list: any) => {
456
- return await this.retryBLE({
457
- max: await this.maxRetryBLE(),
458
- fn: async () => {
459
- if (this.Fan.Active) {
460
- return await device_list[0].turnOn({ id: this.device.bleMac })
461
- } else {
462
- return await device_list[0].turnOff({ id: this.device.bleMac })
463
- }
464
- },
457
+ try {
458
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
459
+ this.device.bleMac = formattedDeviceId
460
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
461
+ if (switchbot !== false) {
462
+ switchbot
463
+ .discover({ model: this.device.bleModel, id: this.device.bleMac })
464
+ .then(async (device_list: any) => {
465
+ return await this.retryBLE({
466
+ max: await this.maxRetryBLE(),
467
+ fn: async () => {
468
+ if (this.Fan.Active) {
469
+ return await device_list[0].turnOn({ id: this.device.bleMac })
470
+ } else {
471
+ return await device_list[0].turnOff({ id: this.device.bleMac })
472
+ }
473
+ },
474
+ })
465
475
  })
466
- })
467
- .then(async () => {
468
- await this.successLog(`Active: ${this.Fan.Active} sent over SwitchBot BLE, sent successfully`)
469
- await this.updateHomeKitCharacteristics()
470
- })
471
- .catch(async (e: any) => {
472
- await this.apiError(e)
473
- await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
474
- await this.BLEPushConnection()
475
- })
476
- } else {
477
- await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
478
- await this.BLEPushConnection()
476
+ .then(async () => {
477
+ await this.successLog(`Active: ${this.Fan.Active} sent over SwitchBot BLE, sent successfully`)
478
+ await this.updateHomeKitCharacteristics()
479
+ })
480
+ .catch(async (e: any) => {
481
+ await this.apiError(e)
482
+ await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
483
+ await this.BLEPushConnection()
484
+ })
485
+ } else {
486
+ await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
487
+ await this.BLEPushConnection()
488
+ }
489
+ } catch (error) {
490
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
479
491
  }
480
492
  } else {
481
493
  await this.debugLog(`No change (BLEpushChanges), Active: ${this.Fan.Active}, ActiveCached: ${this.accessory.context.Active}`)
package/src/device/hub.ts CHANGED
@@ -19,7 +19,7 @@ import { Units } from 'homebridge'
19
19
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
20
20
  import { interval, skipWhile, Subject } from 'rxjs'
21
21
 
22
- import { convertUnits, validHumidity } from '../utils.js'
22
+ import { convertUnits, formatDeviceIdAsMac, validHumidity } from '../utils.js'
23
23
  import { deviceBase } from './device.js'
24
24
 
25
25
  export class Hub extends deviceBase {
@@ -315,17 +315,22 @@ export class Hub extends deviceBase {
315
315
  await this.debugLog('registerPlatformBLE')
316
316
  if (this.config.options?.BLE) {
317
317
  await this.debugLog('is listening to Platform BLE.')
318
- this.device.bleMac = this.device.deviceId!.match(/.{1,2}/g)!.join(':').toLowerCase()
319
- await this.debugLog(`bleMac: ${this.device.bleMac}`)
320
- this.platform.bleEventHandler[this.device.bleMac] = async (context: hub2ServiceData) => {
321
- try {
322
- await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
323
- this.serviceData = context
324
- await this.BLEparseStatus()
325
- await this.updateHomeKitCharacteristics()
326
- } catch (e: any) {
327
- await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
318
+ try {
319
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
320
+ this.device.bleMac = formattedDeviceId
321
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
322
+ this.platform.bleEventHandler[this.device.bleMac] = async (context: hub2ServiceData) => {
323
+ try {
324
+ await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
325
+ this.serviceData = context
326
+ await this.BLEparseStatus()
327
+ await this.updateHomeKitCharacteristics()
328
+ } catch (e: any) {
329
+ await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
330
+ }
328
331
  }
332
+ } catch (error) {
333
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
329
334
  }
330
335
  } else {
331
336
  await this.debugLog('is not listening to Platform BLE')
@@ -18,7 +18,7 @@ import type { humidifierWebhookContext } from '../types/devicewebhookstatus.js'
18
18
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
19
19
  import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
20
20
 
21
- import { convertUnits, validHumidity } from '../utils.js'
21
+ import { convertUnits, formatDeviceIdAsMac, validHumidity } from '../utils.js'
22
22
  import { deviceBase } from './device.js'
23
23
 
24
24
  /**
@@ -345,17 +345,22 @@ export class Humidifier extends deviceBase {
345
345
  await this.debugLog('registerPlatformBLE')
346
346
  if (this.config.options?.BLE) {
347
347
  await this.debugLog('is listening to Platform BLE.')
348
- this.device.bleMac = this.device.deviceId!.match(/.{1,2}/g)!.join(':').toLowerCase()
349
- await this.debugLog(`bleMac: ${this.device.bleMac}`)
350
- this.platform.bleEventHandler[this.device.bleMac] = async (context: humidifierServiceData) => {
351
- try {
352
- await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
353
- this.serviceData = context
354
- await this.BLEparseStatus()
355
- await this.updateHomeKitCharacteristics()
356
- } catch (e: any) {
357
- await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
348
+ try {
349
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
350
+ this.device.bleMac = formattedDeviceId
351
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
352
+ this.platform.bleEventHandler[this.device.bleMac] = async (context: humidifierServiceData) => {
353
+ try {
354
+ await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
355
+ this.serviceData = context
356
+ await this.BLEparseStatus()
357
+ await this.updateHomeKitCharacteristics()
358
+ } catch (e: any) {
359
+ await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
360
+ }
358
361
  }
362
+ } catch (error) {
363
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
359
364
  }
360
365
  } else {
361
366
  await this.debugLog('is not listening to Platform BLE')
@@ -428,25 +433,31 @@ export class Humidifier extends deviceBase {
428
433
  && (this.HumidifierDehumidifier.Active === this.hap.Characteristic.Active.ACTIVE)
429
434
  && (this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold !== this.HumidifierDehumidifier.CurrentRelativeHumidity)) {
430
435
  const switchbot = await this.platform.connectBLE(this.accessory, this.device)
431
- await this.convertBLEAddress()
432
- if (switchbot !== false) {
433
- switchbot
434
- .discover({ model: this.device.bleModel, quick: true, id: this.device.bleMac })
435
- .then(async (device_list: any) => {
436
- return await device_list[0].percentage(this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold)
437
- })
438
- .then(async () => {
439
- await this.successLog(`RelativeHumidityHumidifierThreshold: ${this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold} sent over BLE, sent successfully`)
440
- await this.updateHomeKitCharacteristics()
441
- })
442
- .catch(async (e: any) => {
443
- await this.apiError(e)
444
- await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
445
- await this.BLEPushConnection()
446
- })
447
- } else {
448
- await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
449
- await this.BLEPushConnection()
436
+ try {
437
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
438
+ this.device.bleMac = formattedDeviceId
439
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
440
+ if (switchbot !== false) {
441
+ switchbot
442
+ .discover({ model: this.device.bleModel, quick: true, id: this.device.bleMac })
443
+ .then(async (device_list: any) => {
444
+ return await device_list[0].percentage(this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold)
445
+ })
446
+ .then(async () => {
447
+ await this.successLog(`RelativeHumidityHumidifierThreshold: ${this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold} sent over BLE, sent successfully`)
448
+ await this.updateHomeKitCharacteristics()
449
+ })
450
+ .catch(async (e: any) => {
451
+ await this.apiError(e)
452
+ await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
453
+ await this.BLEPushConnection()
454
+ })
455
+ } else {
456
+ await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
457
+ await this.BLEPushConnection()
458
+ }
459
+ } catch (error) {
460
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
450
461
  }
451
462
  } else {
452
463
  await this.debugLog(`No changes (BLEpushChanges), Active: ${this.HumidifierDehumidifier.Active}, RelativeHumidityHumidifierThreshold: ${this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold}, CurrentRelativeHumidity: ${this.HumidifierDehumidifier.CurrentRelativeHumidity}`)
@@ -19,7 +19,7 @@ import { Units } from 'homebridge'
19
19
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
20
20
  import { interval, skipWhile, Subject } from 'rxjs'
21
21
 
22
- import { convertUnits, validHumidity } from '../utils.js'
22
+ import { convertUnits, formatDeviceIdAsMac, validHumidity } from '../utils.js'
23
23
  import { deviceBase } from './device.js'
24
24
 
25
25
  /**
@@ -310,17 +310,22 @@ export class IOSensor extends deviceBase {
310
310
  await this.debugLog('registerPlatformBLE')
311
311
  if (this.config.options?.BLE) {
312
312
  await this.debugLog('is listening to Platform BLE.')
313
- this.device.bleMac = this.device.deviceId!.match(/.{1,2}/g)!.join(':').toLowerCase()
314
- await this.debugLog(`bleMac: ${this.device.bleMac}`)
315
- this.platform.bleEventHandler[this.device.bleMac] = async (context: outdoorMeterServiceData) => {
316
- try {
317
- await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
318
- this.serviceData = context
319
- await this.BLEparseStatus()
320
- await this.updateHomeKitCharacteristics()
321
- } catch (e: any) {
322
- await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
313
+ try {
314
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
315
+ this.device.bleMac = formattedDeviceId
316
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
317
+ this.platform.bleEventHandler[this.device.bleMac] = async (context: outdoorMeterServiceData) => {
318
+ try {
319
+ await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
320
+ this.serviceData = context
321
+ await this.BLEparseStatus()
322
+ await this.updateHomeKitCharacteristics()
323
+ } catch (e: any) {
324
+ await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
325
+ }
323
326
  }
327
+ } catch (error) {
328
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
324
329
  }
325
330
  } else {
326
331
  await this.debugLog('is not listening to Platform BLE')
@@ -18,7 +18,7 @@ import type { stripLightWebhookContext } from '../types/devicewebhookstatus.js'
18
18
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
19
19
  import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
20
20
 
21
- import { hs2rgb, m2hs, rgb2hs } from '../utils.js'
21
+ import { formatDeviceIdAsMac, hs2rgb, m2hs, rgb2hs } from '../utils.js'
22
22
  import { deviceBase } from './device.js'
23
23
 
24
24
  /**
@@ -337,17 +337,22 @@ export class StripLight extends deviceBase {
337
337
  await this.debugLog('registerPlatformBLE')
338
338
  if (this.config.options?.BLE) {
339
339
  await this.debugLog('is listening to Platform BLE.')
340
- this.device.bleMac = this.device.deviceId!.match(/.{1,2}/g)!.join(':').toLowerCase()
341
- await this.debugLog(`bleMac: ${this.device.bleMac}`)
342
- this.platform.bleEventHandler[this.device.bleMac] = async (context: stripLightServiceData) => {
343
- try {
344
- await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
345
- this.serviceData = context
346
- await this.BLEparseStatus()
347
- await this.updateHomeKitCharacteristics()
348
- } catch (e: any) {
349
- await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
340
+ try {
341
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
342
+ this.device.bleMac = formattedDeviceId
343
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
344
+ this.platform.bleEventHandler[this.device.bleMac] = async (context: stripLightServiceData) => {
345
+ try {
346
+ await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
347
+ this.serviceData = context
348
+ await this.BLEparseStatus()
349
+ await this.updateHomeKitCharacteristics()
350
+ } catch (e: any) {
351
+ await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
352
+ }
350
353
  }
354
+ } catch (error) {
355
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
351
356
  }
352
357
  } else {
353
358
  await this.debugLog('is not listening to Platform BLE')
@@ -455,35 +460,41 @@ export class StripLight extends deviceBase {
455
460
  if (this.LightBulb.On !== this.accessory.context.On) {
456
461
  await this.debugLog(`BLEpushChanges On: ${this.LightBulb.On}, OnCached: ${this.accessory.context.On}`)
457
462
  const switchbot = await this.platform.connectBLE(this.accessory, this.device)
458
- await this.convertBLEAddress()
459
- if (switchbot !== false) {
460
- switchbot
461
- .discover({ model: this.device.bleModel, id: this.device.bleMac })
462
- .then(async (device_list: any) => {
463
- await this.infoLog(`On: ${this.LightBulb.On}`)
464
- return await this.retryBLE({
465
- max: await this.maxRetryBLE(),
466
- fn: async () => {
467
- if (this.LightBulb.On) {
468
- return await device_list[0].turnOn({ id: this.device.bleMac })
469
- } else {
470
- return await device_list[0].turnOff({ id: this.device.bleMac })
471
- }
472
- },
463
+ try {
464
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
465
+ this.device.bleMac = formattedDeviceId
466
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
467
+ if (switchbot !== false) {
468
+ switchbot
469
+ .discover({ model: this.device.bleModel, id: this.device.bleMac })
470
+ .then(async (device_list: any) => {
471
+ await this.infoLog(`On: ${this.LightBulb.On}`)
472
+ return await this.retryBLE({
473
+ max: await this.maxRetryBLE(),
474
+ fn: async () => {
475
+ if (this.LightBulb.On) {
476
+ return await device_list[0].turnOn({ id: this.device.bleMac })
477
+ } else {
478
+ return await device_list[0].turnOff({ id: this.device.bleMac })
479
+ }
480
+ },
481
+ })
473
482
  })
474
- })
475
- .then(async () => {
476
- await this.successLog(`On: ${this.LightBulb.On} sent over SwitchBot BLE, sent successfully`)
477
- await this.updateHomeKitCharacteristics()
478
- })
479
- .catch(async (e: any) => {
480
- await this.apiError(e)
481
- await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
482
- await this.BLEPushConnection()
483
- })
484
- } else {
485
- await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
486
- await this.BLEPushConnection()
483
+ .then(async () => {
484
+ await this.successLog(`On: ${this.LightBulb.On} sent over SwitchBot BLE, sent successfully`)
485
+ await this.updateHomeKitCharacteristics()
486
+ })
487
+ .catch(async (e: any) => {
488
+ await this.apiError(e)
489
+ await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
490
+ await this.BLEPushConnection()
491
+ })
492
+ } else {
493
+ await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
494
+ await this.BLEPushConnection()
495
+ }
496
+ } catch (error) {
497
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
487
498
  }
488
499
  } else {
489
500
  await this.debugLog(`No changes (BLEpushChanges), On: ${this.LightBulb.On}, OnCached: ${this.accessory.context.On}`)
@@ -494,26 +505,32 @@ export class StripLight extends deviceBase {
494
505
  await this.debugLog('BLEpushBrightnessChanges')
495
506
  if (this.LightBulb.Brightness !== this.accessory.context.Brightness) {
496
507
  const switchbot = await this.platform.connectBLE(this.accessory, this.device)
497
- await this.convertBLEAddress()
498
- if (switchbot !== false) {
499
- switchbot
500
- .discover({ model: this.device.bleModel, id: this.device.bleMac })
501
- .then(async (device_list: any) => {
502
- await this.infoLog(`Brightness: ${this.LightBulb.Brightness}`)
503
- return await device_list[0].setBrightness(this.LightBulb.Brightness)
504
- })
505
- .then(async () => {
506
- await this.successLog(`Brightness: ${this.LightBulb.Brightness} sent over SwitchBot BLE, sent successfully`)
507
- await this.updateHomeKitCharacteristics()
508
- })
509
- .catch(async (e: any) => {
510
- await this.apiError(e)
511
- await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
512
- await this.BLEPushConnection()
513
- })
514
- } else {
515
- await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
516
- await this.BLEPushConnection()
508
+ try {
509
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
510
+ this.device.bleMac = formattedDeviceId
511
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
512
+ if (switchbot !== false) {
513
+ switchbot
514
+ .discover({ model: this.device.bleModel, id: this.device.bleMac })
515
+ .then(async (device_list: any) => {
516
+ await this.infoLog(`Brightness: ${this.LightBulb.Brightness}`)
517
+ return await device_list[0].setBrightness(this.LightBulb.Brightness)
518
+ })
519
+ .then(async () => {
520
+ await this.successLog(`Brightness: ${this.LightBulb.Brightness} sent over SwitchBot BLE, sent successfully`)
521
+ await this.updateHomeKitCharacteristics()
522
+ })
523
+ .catch(async (e: any) => {
524
+ await this.apiError(e)
525
+ await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
526
+ await this.BLEPushConnection()
527
+ })
528
+ } else {
529
+ await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
530
+ await this.BLEPushConnection()
531
+ }
532
+ } catch (error) {
533
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
517
534
  }
518
535
  } else {
519
536
  await this.debugLog(`No changes (BLEpushBrightnessChanges), Brightness: ${this.LightBulb.Brightness}, BrightnessCached: ${this.accessory.context.Brightness}`)
@@ -527,26 +544,32 @@ export class StripLight extends deviceBase {
527
544
  const [red, green, blue] = hs2rgb(this.LightBulb.Hue, this.LightBulb.Saturation)
528
545
  await this.debugLog(`rgb: ${JSON.stringify([red, green, blue])}`)
529
546
  const switchbot = await this.platform.connectBLE(this.accessory, this.device)
530
- await this.convertBLEAddress()
531
- if (switchbot !== false) {
532
- switchbot
533
- .discover({ model: this.device.bleModel, id: this.device.bleMac })
534
- .then(async (device_list: any) => {
535
- await this.infoLog(`RGB: ${(this.LightBulb.Brightness, red, green, blue)}`)
536
- return await device_list[0].setRGB(this.LightBulb.Brightness, red, green, blue)
537
- })
538
- .then(async () => {
539
- await this.successLog(`RGB: ${(this.LightBulb.Brightness, red, green, blue)} sent over SwitchBot BLE, sent successfully`)
540
- await this.updateHomeKitCharacteristics()
541
- })
542
- .catch(async (e: any) => {
543
- await this.apiError(e)
544
- await this.errorLog(`failed BLEpushRGBChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
545
- await this.BLEPushConnection()
546
- })
547
- } else {
548
- await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
549
- await this.BLEPushConnection()
547
+ try {
548
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
549
+ this.device.bleMac = formattedDeviceId
550
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
551
+ if (switchbot !== false) {
552
+ switchbot
553
+ .discover({ model: this.device.bleModel, id: this.device.bleMac })
554
+ .then(async (device_list: any) => {
555
+ await this.infoLog(`RGB: ${(this.LightBulb.Brightness, red, green, blue)}`)
556
+ return await device_list[0].setRGB(this.LightBulb.Brightness, red, green, blue)
557
+ })
558
+ .then(async () => {
559
+ await this.successLog(`RGB: ${(this.LightBulb.Brightness, red, green, blue)} sent over SwitchBot BLE, sent successfully`)
560
+ await this.updateHomeKitCharacteristics()
561
+ })
562
+ .catch(async (e: any) => {
563
+ await this.apiError(e)
564
+ await this.errorLog(`failed BLEpushRGBChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
565
+ await this.BLEPushConnection()
566
+ })
567
+ } else {
568
+ await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
569
+ await this.BLEPushConnection()
570
+ }
571
+ } catch (error) {
572
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
550
573
  }
551
574
  } else {
552
575
  await this.debugLog(`No changes (BLEpushRGBChanges), Hue: ${this.LightBulb.Hue}, HueCached: ${this.accessory.context.Hue}, Saturation: ${this.LightBulb.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`)
@@ -18,6 +18,7 @@ import type { lockProWebhookContext, lockWebhookContext } from '../types/devicew
18
18
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
19
19
  import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
20
20
 
21
+ import { formatDeviceIdAsMac } from '../utils.js'
21
22
  import { deviceBase } from './device.js'
22
23
 
23
24
  export class Lock extends deviceBase {
@@ -349,17 +350,22 @@ export class Lock extends deviceBase {
349
350
  await this.debugLog('registerPlatformBLE')
350
351
  if (this.config.options?.BLE) {
351
352
  await this.debugLog('is listening to Platform BLE.')
352
- this.device.bleMac = this.device.deviceId!.match(/.{1,2}/g)!.join(':').toLowerCase()
353
- await this.debugLog(`bleMac: ${this.device.bleMac}`)
354
- this.platform.bleEventHandler[this.device.bleMac] = async (context: lockServiceData | lockProServiceData) => {
355
- try {
356
- await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
357
- this.serviceData = context
358
- await this.BLEparseStatus()
359
- await this.updateHomeKitCharacteristics()
360
- } catch (e: any) {
361
- await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
353
+ try {
354
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
355
+ this.device.bleMac = formattedDeviceId
356
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
357
+ this.platform.bleEventHandler[this.device.bleMac] = async (context: lockServiceData | lockProServiceData) => {
358
+ try {
359
+ await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
360
+ this.serviceData = context
361
+ await this.BLEparseStatus()
362
+ await this.updateHomeKitCharacteristics()
363
+ } catch (e: any) {
364
+ await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
365
+ }
362
366
  }
367
+ } catch (error) {
368
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
363
369
  }
364
370
  } else {
365
371
  await this.debugLog('is not listening to Platform BLE')
@@ -435,34 +441,40 @@ export class Lock extends deviceBase {
435
441
  await this.debugLog('BLEpushChanges')
436
442
  if (this.LockMechanism.LockTargetState !== this.accessory.context.LockTargetState) {
437
443
  const switchbot = await this.platform.connectBLE(this.accessory, this.device)
438
- await this.convertBLEAddress()
439
- if (switchbot !== false) {
440
- switchbot
441
- .discover({ model: this.device.bleModel, id: this.device.bleMac })
442
- .then(async (device_list: any) => {
443
- return await this.retryBLE({
444
- max: await this.maxRetryBLE(),
445
- fn: async () => {
446
- if (this.LockMechanism.LockTargetState === this.hap.Characteristic.LockTargetState.SECURED) {
447
- return await device_list[0].lock({ id: this.device.bleMac })
448
- } else {
449
- return await device_list[0].unlock({ id: this.device.bleMac })
450
- }
451
- },
444
+ try {
445
+ const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
446
+ this.device.bleMac = formattedDeviceId
447
+ await this.debugLog(`bleMac: ${this.device.bleMac}`)
448
+ if (switchbot !== false) {
449
+ switchbot
450
+ .discover({ model: this.device.bleModel, id: this.device.bleMac })
451
+ .then(async (device_list: any) => {
452
+ return await this.retryBLE({
453
+ max: await this.maxRetryBLE(),
454
+ fn: async () => {
455
+ if (this.LockMechanism.LockTargetState === this.hap.Characteristic.LockTargetState.SECURED) {
456
+ return await device_list[0].lock({ id: this.device.bleMac })
457
+ } else {
458
+ return await device_list[0].unlock({ id: this.device.bleMac })
459
+ }
460
+ },
461
+ })
452
462
  })
453
- })
454
- .then(async () => {
455
- await this.successLog(`LockTargetState: ${this.LockMechanism.LockTargetState} sent over SwitchBot BLE, sent successfully`)
456
- await this.updateHomeKitCharacteristics()
457
- })
458
- .catch(async (e: any) => {
459
- await this.apiError(e)
460
- await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
461
- await this.BLEPushConnection()
462
- })
463
- } else {
464
- await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
465
- await this.BLEPushConnection()
463
+ .then(async () => {
464
+ await this.successLog(`LockTargetState: ${this.LockMechanism.LockTargetState} sent over SwitchBot BLE, sent successfully`)
465
+ await this.updateHomeKitCharacteristics()
466
+ })
467
+ .catch(async (e: any) => {
468
+ await this.apiError(e)
469
+ await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
470
+ await this.BLEPushConnection()
471
+ })
472
+ } else {
473
+ await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
474
+ await this.BLEPushConnection()
475
+ }
476
+ } catch (error) {
477
+ await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
466
478
  }
467
479
  } else {
468
480
  await this.debugLog(`No changes (BLEpushChanges), LockTargetState: ${this.LockMechanism.LockTargetState}, LockCurrentState: ${this.LockMechanism.LockCurrentState}`)