@switchbot/homebridge-switchbot 3.8.3-beta.3 → 3.8.3-beta.30

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 (201) hide show
  1. package/.github/workflows/beta-release.yml +7 -4
  2. package/.github/workflows/release.yml +7 -6
  3. package/dist/device/blindtilt.d.ts +1 -4
  4. package/dist/device/blindtilt.d.ts.map +1 -1
  5. package/dist/device/blindtilt.js +18 -19
  6. package/dist/device/blindtilt.js.map +1 -1
  7. package/dist/device/bot.d.ts +1 -4
  8. package/dist/device/bot.d.ts.map +1 -1
  9. package/dist/device/bot.js +15 -16
  10. package/dist/device/bot.js.map +1 -1
  11. package/dist/device/ceilinglight.d.ts +1 -4
  12. package/dist/device/ceilinglight.d.ts.map +1 -1
  13. package/dist/device/ceilinglight.js +35 -39
  14. package/dist/device/ceilinglight.js.map +1 -1
  15. package/dist/device/colorbulb.d.ts +1 -4
  16. package/dist/device/colorbulb.d.ts.map +1 -1
  17. package/dist/device/colorbulb.js +35 -39
  18. package/dist/device/colorbulb.js.map +1 -1
  19. package/dist/device/contact.d.ts +1 -4
  20. package/dist/device/contact.d.ts.map +1 -1
  21. package/dist/device/contact.js +7 -7
  22. package/dist/device/contact.js.map +1 -1
  23. package/dist/device/curtain.d.ts +1 -4
  24. package/dist/device/curtain.d.ts.map +1 -1
  25. package/dist/device/curtain.js +16 -17
  26. package/dist/device/curtain.js.map +1 -1
  27. package/dist/device/device.d.ts +6 -6
  28. package/dist/device/device.d.ts.map +1 -1
  29. package/dist/device/device.js +30 -14
  30. package/dist/device/device.js.map +1 -1
  31. package/dist/device/fan.d.ts +1 -4
  32. package/dist/device/fan.d.ts.map +1 -1
  33. package/dist/device/fan.js +32 -34
  34. package/dist/device/fan.js.map +1 -1
  35. package/dist/device/hub.d.ts +1 -4
  36. package/dist/device/hub.d.ts.map +1 -1
  37. package/dist/device/hub.js +7 -7
  38. package/dist/device/hub.js.map +1 -1
  39. package/dist/device/humidifier.d.ts +1 -4
  40. package/dist/device/humidifier.d.ts.map +1 -1
  41. package/dist/device/humidifier.js +28 -31
  42. package/dist/device/humidifier.js.map +1 -1
  43. package/dist/device/iosensor.d.ts +1 -4
  44. package/dist/device/iosensor.d.ts.map +1 -1
  45. package/dist/device/iosensor.js +7 -7
  46. package/dist/device/iosensor.js.map +1 -1
  47. package/dist/device/lightstrip.d.ts +1 -4
  48. package/dist/device/lightstrip.d.ts.map +1 -1
  49. package/dist/device/lightstrip.js +28 -31
  50. package/dist/device/lightstrip.js.map +1 -1
  51. package/dist/device/lock.d.ts +1 -4
  52. package/dist/device/lock.d.ts.map +1 -1
  53. package/dist/device/lock.js +15 -16
  54. package/dist/device/lock.js.map +1 -1
  55. package/dist/device/meter.d.ts +1 -4
  56. package/dist/device/meter.d.ts.map +1 -1
  57. package/dist/device/meter.js +7 -7
  58. package/dist/device/meter.js.map +1 -1
  59. package/dist/device/meterplus.d.ts +1 -4
  60. package/dist/device/meterplus.d.ts.map +1 -1
  61. package/dist/device/meterplus.js +7 -7
  62. package/dist/device/meterplus.js.map +1 -1
  63. package/dist/device/motion.d.ts +1 -4
  64. package/dist/device/motion.d.ts.map +1 -1
  65. package/dist/device/motion.js +7 -7
  66. package/dist/device/motion.js.map +1 -1
  67. package/dist/device/plug.d.ts +1 -4
  68. package/dist/device/plug.d.ts.map +1 -1
  69. package/dist/device/plug.js +14 -15
  70. package/dist/device/plug.js.map +1 -1
  71. package/dist/device/robotvacuumcleaner.d.ts +1 -4
  72. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  73. package/dist/device/robotvacuumcleaner.js +21 -23
  74. package/dist/device/robotvacuumcleaner.js.map +1 -1
  75. package/dist/device/waterdetector.d.ts +1 -4
  76. package/dist/device/waterdetector.d.ts.map +1 -1
  77. package/dist/device/waterdetector.js +7 -7
  78. package/dist/device/waterdetector.js.map +1 -1
  79. package/dist/irdevice/airconditioner.d.ts +1 -1
  80. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  81. package/dist/irdevice/airconditioner.js +11 -12
  82. package/dist/irdevice/airconditioner.js.map +1 -1
  83. package/dist/irdevice/airpurifier.d.ts +1 -1
  84. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  85. package/dist/irdevice/airpurifier.js +11 -12
  86. package/dist/irdevice/airpurifier.js.map +1 -1
  87. package/dist/irdevice/camera.d.ts +1 -1
  88. package/dist/irdevice/camera.d.ts.map +1 -1
  89. package/dist/irdevice/camera.js +9 -10
  90. package/dist/irdevice/camera.js.map +1 -1
  91. package/dist/irdevice/fan.d.ts +1 -1
  92. package/dist/irdevice/fan.d.ts.map +1 -1
  93. package/dist/irdevice/fan.js +15 -16
  94. package/dist/irdevice/fan.js.map +1 -1
  95. package/dist/irdevice/irdevice.d.ts +6 -6
  96. package/dist/irdevice/irdevice.d.ts.map +1 -1
  97. package/dist/irdevice/irdevice.js +7 -13
  98. package/dist/irdevice/irdevice.js.map +1 -1
  99. package/dist/irdevice/light.d.ts +1 -1
  100. package/dist/irdevice/light.d.ts.map +1 -1
  101. package/dist/irdevice/light.js +9 -10
  102. package/dist/irdevice/light.js.map +1 -1
  103. package/dist/irdevice/other.d.ts +1 -1
  104. package/dist/irdevice/other.d.ts.map +1 -1
  105. package/dist/irdevice/other.js +9 -10
  106. package/dist/irdevice/other.js.map +1 -1
  107. package/dist/irdevice/tv.d.ts +1 -1
  108. package/dist/irdevice/tv.d.ts.map +1 -1
  109. package/dist/irdevice/tv.js +27 -28
  110. package/dist/irdevice/tv.js.map +1 -1
  111. package/dist/irdevice/vacuumcleaner.d.ts +1 -1
  112. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  113. package/dist/irdevice/vacuumcleaner.js +9 -10
  114. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  115. package/dist/irdevice/waterheater.d.ts +1 -1
  116. package/dist/irdevice/waterheater.d.ts.map +1 -1
  117. package/dist/irdevice/waterheater.js +9 -10
  118. package/dist/irdevice/waterheater.js.map +1 -1
  119. package/dist/platform.d.ts +6 -14
  120. package/dist/platform.d.ts.map +1 -1
  121. package/dist/platform.js +105 -170
  122. package/dist/platform.js.map +1 -1
  123. package/dist/settings.d.ts +1 -3
  124. package/dist/settings.d.ts.map +1 -1
  125. package/dist/settings.js.map +1 -1
  126. package/dist/utils.d.ts +1 -1
  127. package/dist/utils.d.ts.map +1 -1
  128. package/dist/utils.js.map +1 -1
  129. package/docs/assets/highlight.css +42 -0
  130. package/docs/assets/main.js +1 -1
  131. package/docs/functions/default.html +1 -1
  132. package/docs/index.html +61 -50
  133. package/docs/media/security-privacy-bluetooth.png +0 -0
  134. package/package.json +13 -14
  135. package/src/device/blindtilt.ts +20 -24
  136. package/src/device/bot.ts +16 -20
  137. package/src/device/ceilinglight.ts +36 -43
  138. package/src/device/colorbulb.ts +36 -43
  139. package/src/device/contact.ts +8 -11
  140. package/src/device/curtain.ts +18 -22
  141. package/src/device/device.ts +29 -18
  142. package/src/device/fan.ts +33 -38
  143. package/src/device/hub.ts +8 -11
  144. package/src/device/humidifier.ts +29 -35
  145. package/src/device/iosensor.ts +8 -11
  146. package/src/device/lightstrip.ts +29 -35
  147. package/src/device/lock.ts +16 -20
  148. package/src/device/meter.ts +8 -11
  149. package/src/device/meterplus.ts +8 -11
  150. package/src/device/motion.ts +8 -11
  151. package/src/device/plug.ts +15 -19
  152. package/src/device/robotvacuumcleaner.ts +22 -31
  153. package/src/device/waterdetector.ts +8 -11
  154. package/src/irdevice/airconditioner.ts +12 -14
  155. package/src/irdevice/airpurifier.ts +12 -13
  156. package/src/irdevice/camera.ts +10 -11
  157. package/src/irdevice/fan.ts +16 -17
  158. package/src/irdevice/irdevice.ts +9 -17
  159. package/src/irdevice/light.ts +10 -11
  160. package/src/irdevice/other.ts +10 -11
  161. package/src/irdevice/tv.ts +28 -29
  162. package/src/irdevice/vacuumcleaner.ts +10 -11
  163. package/src/irdevice/waterheater.ts +10 -11
  164. package/src/platform.ts +110 -171
  165. package/src/settings.ts +5 -4
  166. package/src/utils.ts +2 -1
  167. package/dist/types/bledevicestatus.d.ts +0 -281
  168. package/dist/types/bledevicestatus.d.ts.map +0 -1
  169. package/dist/types/bledevicestatus.js +0 -2
  170. package/dist/types/bledevicestatus.js.map +0 -1
  171. package/dist/types/devicelist.d.ts +0 -89
  172. package/dist/types/devicelist.d.ts.map +0 -1
  173. package/dist/types/devicelist.js +0 -6
  174. package/dist/types/devicelist.js.map +0 -1
  175. package/dist/types/deviceresponse.d.ts +0 -13
  176. package/dist/types/deviceresponse.d.ts.map +0 -1
  177. package/dist/types/deviceresponse.js +0 -2
  178. package/dist/types/deviceresponse.js.map +0 -1
  179. package/dist/types/devicestatus.d.ts +0 -149
  180. package/dist/types/devicestatus.d.ts.map +0 -1
  181. package/dist/types/devicestatus.js +0 -3
  182. package/dist/types/devicestatus.js.map +0 -1
  183. package/dist/types/devicewebhookstatus.d.ts +0 -156
  184. package/dist/types/devicewebhookstatus.d.ts.map +0 -1
  185. package/dist/types/devicewebhookstatus.js +0 -2
  186. package/dist/types/devicewebhookstatus.js.map +0 -1
  187. package/dist/types/irdevicelist.d.ts +0 -10
  188. package/dist/types/irdevicelist.d.ts.map +0 -1
  189. package/dist/types/irdevicelist.js +0 -2
  190. package/dist/types/irdevicelist.js.map +0 -1
  191. package/dist/types/pushbody.d.ts +0 -6
  192. package/dist/types/pushbody.d.ts.map +0 -1
  193. package/dist/types/pushbody.js +0 -2
  194. package/dist/types/pushbody.js.map +0 -1
  195. package/src/types/bledevicestatus.ts +0 -303
  196. package/src/types/devicelist.ts +0 -124
  197. package/src/types/deviceresponse.ts +0 -14
  198. package/src/types/devicestatus.ts +0 -178
  199. package/src/types/devicewebhookstatus.ts +0 -191
  200. package/src/types/irdevicelist.ts +0 -15
  201. package/src/types/pushbody.ts +0 -9
@@ -3,13 +3,10 @@
3
3
  * ceilinglight.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, Controller, ControllerConstructor, ControllerServiceMap, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, ceilingLightProServiceData, ceilingLightProStatus, ceilingLightProWebhookContext, ceilingLightServiceData, ceilingLightStatus, ceilingLightWebhookContext, device } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { devicesConfig } from '../settings.js'
9
- import type { ceilingLightProServiceData, ceilingLightServiceData } from '../types/bledevicestatus.js'
10
- import type { device } from '../types/devicelist.js'
11
- import type { ceilingLightProStatus, ceilingLightStatus } from '../types/devicestatus.js'
12
- import type { ceilingLightProWebhookContext, ceilingLightWebhookContext } from '../types/devicewebhookstatus.js'
13
10
 
14
11
  /*
15
12
  * For Testing Locally:
@@ -335,17 +332,17 @@ export class CeilingLight extends deviceBase {
335
332
  async openAPIRefreshStatus(): Promise<void> {
336
333
  await this.debugLog('openAPIRefreshStatus')
337
334
  try {
338
- const { body, statusCode } = await this.deviceRefreshStatus()
339
- const deviceStatus: any = await body.json()
340
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
341
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
342
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
335
+ const { body } = await this.deviceRefreshStatus()
336
+ const deviceStatus: any = await body
337
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
338
+ if (await this.successfulStatusCodes(deviceStatus)) {
339
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
343
340
  this.deviceStatus = deviceStatus.body
344
341
  await this.openAPIparseStatus()
345
342
  await this.updateHomeKitCharacteristics()
346
343
  } else {
347
- await this.debugWarnLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
348
- await this.debugWarnLog(statusCode, deviceStatus)
344
+ await this.debugWarnLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
345
+ await this.debugWarnLog(deviceStatus)
349
346
  }
350
347
  } catch (e: any) {
351
348
  await this.apiError(e)
@@ -466,21 +463,20 @@ export class CeilingLight extends deviceBase {
466
463
  await this.debugLog('openAPIpushChanges')
467
464
  if (this.LightBulb.On !== this.accessory.context.On) {
468
465
  const command = this.LightBulb.On ? 'turnOn' : 'turnOff'
469
- const bodyChange = JSON.stringify({
466
+ const bodyChange: bodyChange = {
470
467
  command: `${command}`,
471
468
  parameter: 'default',
472
469
  commandType: 'command',
473
- })
470
+ }
474
471
  await this.debugLog(`SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
475
472
  try {
476
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
477
- const deviceStatus: any = await body.json()
478
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
479
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
480
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
473
+ const { body } = await this.pushChangeRequest(bodyChange)
474
+ const deviceStatus: any = await body
475
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
476
+ if (await this.successfulStatusCodes(deviceStatus)) {
477
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
481
478
  await this.updateHomeKitCharacteristics()
482
479
  } else {
483
- await this.statusCode(statusCode)
484
480
  await this.statusCode(deviceStatus.statusCode)
485
481
  }
486
482
  } catch (e: any) {
@@ -499,21 +495,20 @@ export class CeilingLight extends deviceBase {
499
495
  await this.debugLog(`Saturation: ${JSON.stringify(this.LightBulb.Saturation)}`)
500
496
  const [red, green, blue] = hs2rgb(Number(this.LightBulb.Hue), Number(this.LightBulb.Saturation))
501
497
  await this.debugLog(`rgb: ${JSON.stringify([red, green, blue])}`)
502
- const bodyChange = JSON.stringify({
498
+ const bodyChange: bodyChange = {
503
499
  command: 'setColor',
504
500
  parameter: `${red}:${green}:${blue}`,
505
501
  commandType: 'command',
506
- })
502
+ }
507
503
  await this.debugLog(`(pushHueSaturationChanges) SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
508
504
  try {
509
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
510
- const deviceStatus: any = await body.json()
511
- await this.debugLog(`(pushHueSaturationChanges) statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
512
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
513
- await this.debugSuccessLog(`(pushHueSaturationChanges) statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
505
+ const { body } = await this.pushChangeRequest(bodyChange)
506
+ const deviceStatus: any = await body
507
+ await this.debugLog(`(pushHueSaturationChanges) statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
508
+ if (await this.successfulStatusCodes(deviceStatus)) {
509
+ await this.debugSuccessLog(`(pushHueSaturationChanges) statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
514
510
  await this.updateHomeKitCharacteristics()
515
511
  } else {
516
- await this.statusCode(statusCode)
517
512
  await this.statusCode(deviceStatus.statusCode)
518
513
  }
519
514
  } catch (e: any) {
@@ -530,21 +525,20 @@ export class CeilingLight extends deviceBase {
530
525
  if (this.LightBulb.ColorTemperature !== this.accessory.context.ColorTemperature) {
531
526
  const kelvin = Math.round(1000000 * Number(this.LightBulb.ColorTemperature))
532
527
  this.accessory.context.kelvin = kelvin
533
- const bodyChange = JSON.stringify({
528
+ const bodyChange: bodyChange = {
534
529
  command: 'setColorTemperature',
535
530
  parameter: `${kelvin}`,
536
531
  commandType: 'command',
537
- })
532
+ }
538
533
  await this.debugLog(`(pushColorTemperatureChanges) SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
539
534
  try {
540
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
541
- const deviceStatus: any = await body.json()
542
- await this.debugLog(`(pushColorTemperatureChanges) statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
543
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
544
- await this.debugSuccessLog(`(pushColorTemperatureChanges) statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
535
+ const { body } = await this.pushChangeRequest(bodyChange)
536
+ const deviceStatus: any = await body
537
+ await this.debugLog(`(pushColorTemperatureChanges) statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
538
+ if (await this.successfulStatusCodes(deviceStatus)) {
539
+ await this.debugSuccessLog(`(pushColorTemperatureChanges) statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
545
540
  await this.updateHomeKitCharacteristics()
546
541
  } else {
547
- await this.statusCode(statusCode)
548
542
  await this.statusCode(deviceStatus.statusCode)
549
543
  }
550
544
  } catch (e: any) {
@@ -559,21 +553,20 @@ export class CeilingLight extends deviceBase {
559
553
  async pushBrightnessChanges(): Promise<void> {
560
554
  await this.debugLog('pushBrightnessChanges')
561
555
  if (this.LightBulb.Brightness !== this.accessory.context.Brightness) {
562
- const bodyChange = JSON.stringify({
556
+ const bodyChange: bodyChange = {
563
557
  command: 'setBrightness',
564
558
  parameter: `${this.LightBulb.Brightness}`,
565
559
  commandType: 'command',
566
- })
560
+ }
567
561
  await this.debugLog(`(pushBrightnessChanges) SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
568
562
  try {
569
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
570
- const deviceStatus: any = await body.json()
571
- await this.debugLog(`(pushBrightnessChanges) statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
572
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
573
- await this.debugSuccessLog(`(pushBrightnessChanges) statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
563
+ const { body } = await this.pushChangeRequest(bodyChange)
564
+ const deviceStatus: any = await body
565
+ await this.debugLog(`(pushBrightnessChanges) statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
566
+ if (await this.successfulStatusCodes(deviceStatus)) {
567
+ await this.debugSuccessLog(`(pushBrightnessChanges) statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
574
568
  await this.updateHomeKitCharacteristics()
575
569
  } else {
576
- await this.statusCode(statusCode)
577
570
  await this.statusCode(deviceStatus.statusCode)
578
571
  }
579
572
  } catch (e: any) {
@@ -3,13 +3,10 @@
3
3
  * blindtilt.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, Controller, ControllerConstructor, ControllerServiceMap, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, colorBulbServiceData, colorBulbStatus, colorBulbWebhookContext, device } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { devicesConfig } from '../settings.js'
9
- import type { colorBulbServiceData } from '../types/bledevicestatus.js'
10
- import type { device } from '../types/devicelist.js'
11
- import type { colorBulbStatus } from '../types/devicestatus.js'
12
- import type { colorBulbWebhookContext } from '../types/devicewebhookstatus.js'
13
10
 
14
11
  /*
15
12
  * For Testing Locally:
@@ -358,17 +355,17 @@ export class ColorBulb extends deviceBase {
358
355
  async openAPIRefreshStatus(): Promise<void> {
359
356
  await this.debugLog('openAPIRefreshStatus')
360
357
  try {
361
- const { body, statusCode } = await this.deviceRefreshStatus()
362
- const deviceStatus: any = await body.json()
363
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
364
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
365
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
358
+ const { body } = await this.deviceRefreshStatus()
359
+ const deviceStatus: any = await body
360
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
361
+ if (await this.successfulStatusCodes(deviceStatus)) {
362
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
366
363
  this.deviceStatus = deviceStatus.body
367
364
  await this.openAPIparseStatus()
368
365
  await this.updateHomeKitCharacteristics()
369
366
  } else {
370
- await this.debugWarnLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
371
- await this.debugWarnLog(statusCode, deviceStatus)
367
+ await this.debugWarnLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
368
+ await this.debugWarnLog(deviceStatus)
372
369
  }
373
370
  } catch (e: any) {
374
371
  await this.apiError(e)
@@ -614,21 +611,20 @@ export class ColorBulb extends deviceBase {
614
611
  await this.debugLog('openAPIpushChanges')
615
612
  if (this.LightBulb.On !== this.accessory.context.On) {
616
613
  const command = this.LightBulb.On ? 'turnOn' : 'turnOff'
617
- const bodyChange = JSON.stringify({
614
+ const bodyChange: bodyChange = {
618
615
  command: `${command}`,
619
616
  parameter: 'default',
620
617
  commandType: 'command',
621
- })
618
+ }
622
619
  await this.debugLog(`SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
623
620
  try {
624
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
625
- const deviceStatus: any = await body.json()
626
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
627
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
628
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
621
+ const { body } = await this.pushChangeRequest(bodyChange)
622
+ const deviceStatus: any = await body
623
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
624
+ if (await this.successfulStatusCodes(deviceStatus)) {
625
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
629
626
  await this.updateHomeKitCharacteristics()
630
627
  } else {
631
- await this.statusCode(statusCode)
632
628
  await this.statusCode(deviceStatus.statusCode)
633
629
  }
634
630
  } catch (e: any) {
@@ -646,21 +642,20 @@ export class ColorBulb extends deviceBase {
646
642
  await this.debugLog(`Hue: ${JSON.stringify(this.LightBulb.Hue)}, Saturation: ${JSON.stringify(this.LightBulb.Saturation)}`)
647
643
  const [red, green, blue] = hs2rgb(this.LightBulb.Hue, this.LightBulb.Saturation)
648
644
  await this.debugLog(`rgb: ${JSON.stringify([red, green, blue])}`)
649
- const bodyChange = JSON.stringify({
645
+ const bodyChange: bodyChange = {
650
646
  command: 'setColor',
651
647
  parameter: `${red}:${green}:${blue}`,
652
648
  commandType: 'command',
653
- })
649
+ }
654
650
  await this.debugLog(`SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
655
651
  try {
656
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
657
- const deviceStatus: any = await body.json()
658
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
659
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
660
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
652
+ const { body } = await this.pushChangeRequest(bodyChange)
653
+ const deviceStatus: any = await body
654
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
655
+ if (await this.successfulStatusCodes(deviceStatus)) {
656
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
661
657
  await this.updateHomeKitCharacteristics()
662
658
  } else {
663
- await this.statusCode(statusCode)
664
659
  await this.statusCode(deviceStatus.statusCode)
665
660
  }
666
661
  } catch (e: any) {
@@ -677,21 +672,20 @@ export class ColorBulb extends deviceBase {
677
672
  if (this.LightBulb.ColorTemperature !== this.accessory.context.ColorTemperature) {
678
673
  const kelvin = Math.round(1000000 / Number(this.LightBulb.ColorTemperature))
679
674
  this.accessory.context.kelvin = kelvin
680
- const bodyChange = JSON.stringify({
675
+ const bodyChange: bodyChange = {
681
676
  command: 'setColorTemperature',
682
677
  parameter: `${kelvin}`,
683
678
  commandType: 'command',
684
- })
679
+ }
685
680
  await this.debugLog(`SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
686
681
  try {
687
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
688
- const deviceStatus: any = await body.json()
689
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
690
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
691
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
682
+ const { body } = await this.pushChangeRequest(bodyChange)
683
+ const deviceStatus: any = await body
684
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
685
+ if (await this.successfulStatusCodes(deviceStatus)) {
686
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
692
687
  await this.updateHomeKitCharacteristics()
693
688
  } else {
694
- await this.statusCode(statusCode)
695
689
  await this.statusCode(deviceStatus.statusCode)
696
690
  }
697
691
  } catch (e: any) {
@@ -706,21 +700,20 @@ export class ColorBulb extends deviceBase {
706
700
  async pushBrightnessChanges(): Promise<void> {
707
701
  await this.debugLog('pushBrightnessChanges')
708
702
  if (this.LightBulb.Brightness !== this.accessory.context.Brightness) {
709
- const bodyChange = JSON.stringify({
703
+ const bodyChange: bodyChange = {
710
704
  command: 'setBrightness',
711
705
  parameter: `${this.LightBulb.Brightness}`,
712
706
  commandType: 'command',
713
- })
707
+ }
714
708
  await this.debugLog(`SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
715
709
  try {
716
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
717
- const deviceStatus: any = await body.json()
718
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
719
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
720
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
710
+ const { body } = await this.pushChangeRequest(bodyChange)
711
+ const deviceStatus: any = await body
712
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
713
+ if (await this.successfulStatusCodes(deviceStatus)) {
714
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
721
715
  await this.updateHomeKitCharacteristics()
722
716
  } else {
723
- await this.statusCode(statusCode)
724
717
  await this.statusCode(deviceStatus.statusCode)
725
718
  }
726
719
  } catch (e: any) {
@@ -3,13 +3,10 @@
3
3
  * contact.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { contactSensorServiceData, contactSensorStatus, contactSensorWebhookContext, device } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { devicesConfig } from '../settings.js'
9
- import type { contactSensorServiceData } from '../types/bledevicestatus.js'
10
- import type { device } from '../types/devicelist.js'
11
- import type { contactSensorStatus } from '../types/devicestatus.js'
12
- import type { contactSensorWebhookContext } from '../types/devicewebhookstatus.js'
13
10
 
14
11
  /*
15
12
  * For Testing Locally:
@@ -348,17 +345,17 @@ export class Contact extends deviceBase {
348
345
  async openAPIRefreshStatus(): Promise<void> {
349
346
  await this.debugLog('openAPIRefreshStatus')
350
347
  try {
351
- const { body, statusCode } = await this.deviceRefreshStatus()
352
- const deviceStatus: any = await body.json()
353
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
354
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
355
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
348
+ const { body } = await this.deviceRefreshStatus()
349
+ const deviceStatus: any = await body
350
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
351
+ if (await this.successfulStatusCodes(deviceStatus)) {
352
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
356
353
  this.deviceStatus = deviceStatus.body
357
354
  await this.openAPIparseStatus()
358
355
  await this.updateHomeKitCharacteristics()
359
356
  } else {
360
- await this.debugWarnLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
361
- await this.debugWarnLog(statusCode, deviceStatus)
357
+ await this.debugWarnLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
358
+ await this.debugWarnLog(deviceStatus)
362
359
  }
363
360
  } catch (e: any) {
364
361
  await this.apiError(e)
@@ -3,13 +3,10 @@
3
3
  * curtain.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicChange, CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, curtain3ServiceData, curtain3WebhookContext, curtainServiceData, curtainStatus, curtainWebhookContext, device } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { devicesConfig } from '../settings.js'
9
- import type { curtain3ServiceData, curtainServiceData } from '../types/bledevicestatus.js'
10
- import type { device } from '../types/devicelist.js'
11
- import type { curtainStatus } from '../types/devicestatus.js'
12
- import type { curtain3WebhookContext, curtainWebhookContext } from '../types/devicewebhookstatus.js'
13
10
 
14
11
  import { hostname } from 'node:os'
15
12
 
@@ -505,17 +502,17 @@ export class Curtain extends deviceBase {
505
502
  async openAPIRefreshStatus(): Promise<void> {
506
503
  await this.debugLog('openAPIRefreshStatus')
507
504
  try {
508
- const { body, statusCode } = await this.deviceRefreshStatus()
509
- const deviceStatus: any = await body.json()
510
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
511
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
512
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
505
+ const { body } = await this.deviceRefreshStatus()
506
+ const deviceStatus: any = await body
507
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
508
+ if (await this.successfulStatusCodes(deviceStatus)) {
509
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
513
510
  this.deviceStatus = deviceStatus.body
514
511
  await this.openAPIparseStatus()
515
512
  await this.updateHomeKitCharacteristics()
516
513
  } else {
517
- await this.debugWarnLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
518
- await this.debugWarnLog(statusCode, deviceStatus)
514
+ await this.debugWarnLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
515
+ await this.debugWarnLog(deviceStatus)
519
516
  }
520
517
  } catch (e: any) {
521
518
  await this.apiError(e)
@@ -641,30 +638,29 @@ export class Curtain extends deviceBase {
641
638
  const { setPositionMode, Mode }: { setPositionMode: number, Mode: string } = await this.setPerformance()
642
639
  await this.debugLog(`Mode: ${Mode}, setPositionMode: ${setPositionMode}`)
643
640
  const adjustedMode = setPositionMode || 'ff'
644
- let bodyChange: string
641
+ let bodyChange: bodyChange
645
642
  if (this.WindowCovering.HoldPosition) {
646
- bodyChange = JSON.stringify({
643
+ bodyChange = {
647
644
  command: 'pause',
648
645
  parameter: 'default',
649
646
  commandType: 'command',
650
- })
647
+ }
651
648
  } else {
652
- bodyChange = JSON.stringify({
649
+ bodyChange = {
653
650
  command: 'setPosition',
654
651
  parameter: `0,${adjustedMode},${adjustedTargetPosition}`,
655
652
  commandType: 'command',
656
- })
653
+ }
657
654
  }
658
655
  await this.debugLog(`SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
659
656
  try {
660
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
661
- const deviceStatus: any = await body.json()
662
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
663
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
664
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
657
+ const { body } = await this.pushChangeRequest(bodyChange)
658
+ const deviceStatus: any = await body
659
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
660
+ if (await this.successfulStatusCodes(deviceStatus)) {
661
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
665
662
  await this.updateHomeKitCharacteristics()
666
663
  } else {
667
- await this.statusCode(statusCode)
668
664
  await this.statusCode(deviceStatus.statusCode)
669
665
  }
670
666
  } catch (e: any) {
@@ -5,18 +5,15 @@
5
5
 
6
6
  import type { API, CharacteristicValue, HAP, Logging, PlatformAccessory, Service } from 'homebridge'
7
7
  import type { MqttClient } from 'mqtt'
8
+ import type { ad, bodyChange, device } from 'node-switchbot'
8
9
 
9
10
  import type { SwitchBotPlatform } from '../platform.js'
10
11
  import type { devicesConfig, SwitchBotPlatformConfig } from '../settings.js'
11
- import type { ad } from '../types/bledevicestatus.js'
12
- import type { device } from '../types/devicelist.js'
13
12
 
14
13
  import { hostname } from 'node:os'
15
14
 
16
15
  import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName, SwitchBotModel } from 'node-switchbot'
17
- import { request } from 'undici'
18
16
 
19
- import { Devices } from '../settings.js'
20
17
  import { BlindTiltMappingMode, formatDeviceIdAsMac, sleep } from '../utils.js'
21
18
 
22
19
  export abstract class deviceBase {
@@ -293,7 +290,11 @@ export abstract class deviceBase {
293
290
 
294
291
  async monitorAdvertisementPackets(switchbot: any) {
295
292
  await this.debugLog(`Scanning for ${this.device.bleModelName} devices...`)
296
- await switchbot.startScan({ model: this.device.bleModel, id: this.device.bleMac })
293
+ try {
294
+ await switchbot.startScan({ model: this.device.bleModel, id: this.device.bleMac })
295
+ } catch (e: any) {
296
+ await this.errorLog(`Failed to start BLE scanning. Error:${e}`)
297
+ }
297
298
  // Set an event handler
298
299
  let serviceData = { model: this.device.bleModel, modelName: this.device.bleModelName } as ad['serviceData']
299
300
  switchbot.onadvertisement = async (ad: ad) => {
@@ -310,7 +311,11 @@ export abstract class deviceBase {
310
311
  // Wait
311
312
  await switchbot.wait(this.scanDuration * 1000)
312
313
  // Stop to monitor
313
- await switchbot.stopScan()
314
+ try {
315
+ await switchbot.stopScan()
316
+ } catch (e: any) {
317
+ await this.errorLog(`Failed to stop BLE scanning. Error:${e}`)
318
+ }
314
319
  return serviceData
315
320
  }
316
321
 
@@ -319,32 +324,38 @@ export abstract class deviceBase {
319
324
  this.debugLog(`customBLEaddress: ${this.device.customBLEaddress}`);
320
325
  (async () => {
321
326
  // Start to monitor advertisement packets
322
- await switchbot.startScan({ model: this.device.bleModel })
327
+ try {
328
+ await switchbot.startScan({ model: this.device.bleModel })
329
+ } catch (e: any) {
330
+ await this.errorLog(`Failed to start BLE scanning. Error:${e}`)
331
+ }
323
332
  // Set an event handler
324
333
  switchbot.onadvertisement = async (ad: ad) => {
325
334
  this.warnLog(`ad: ${JSON.stringify(ad, null, ' ')}`)
326
335
  }
327
336
  await sleep(10000)
328
337
  // Stop to monitor
329
- switchbot.stopScan()
338
+ try {
339
+ switchbot.stopScan()
340
+ } catch (e: any) {
341
+ await this.errorLog(`Failed to stop BLE scanning. Error:${e}`)
342
+ }
330
343
  })()
331
344
  }
332
345
  }
333
346
 
334
- async pushChangeRequest(bodyChange: string): Promise<{ body: any, statusCode: any }> {
335
- return await request(`${Devices}/${this.device.deviceId}/commands`, {
336
- body: bodyChange,
337
- method: 'POST',
338
- headers: this.platform.generateHeaders(),
339
- })
347
+ async pushChangeRequest(bodyChange: bodyChange): Promise<{ body: any, statusCode: number }> {
348
+ const { response, statusCode } = await this.platform.switchBotAPI.controlDevice(this.device.deviceId, bodyChange.command, bodyChange.parameter, bodyChange.commandType)
349
+ return { body: response, statusCode }
340
350
  }
341
351
 
342
- async deviceRefreshStatus(): Promise<{ body: any, statusCode: any }> {
343
- return await this.platform.retryRequest(this.deviceMaxRetries, this.deviceDelayBetweenRetries, `${Devices}/${this.device.deviceId}/status`, { headers: this.platform.generateHeaders() })
352
+ async deviceRefreshStatus(): Promise<{ body: any, statusCode: number }> {
353
+ const { response, statusCode } = await this.platform.retryRequest(this.device.deviceId, this.deviceMaxRetries, this.deviceDelayBetweenRetries)
354
+ return { body: response, statusCode }
344
355
  }
345
356
 
346
- async successfulStatusCodes(statusCode: any, deviceStatus: any) {
347
- return (statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)
357
+ async successfulStatusCodes(deviceStatus: any) {
358
+ return (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)
348
359
  }
349
360
 
350
361
  /**