@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
  * motion.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { device, motionSensorServiceData, motionSensorStatus, motionSensorWebhookContext } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { devicesConfig } from '../settings.js'
9
- import type { motionSensorServiceData } from '../types/bledevicestatus.js'
10
- import type { device } from '../types/devicelist.js'
11
- import type { motionSensorStatus } from '../types/devicestatus.js'
12
- import type { motionSensorWebhookContext } from '../types/devicewebhookstatus.js'
13
10
 
14
11
  /*
15
12
  * For Testing Locally:
@@ -307,17 +304,17 @@ export class Motion extends deviceBase {
307
304
  async openAPIRefreshStatus(): Promise<void> {
308
305
  await this.debugLog('openAPIRefreshStatus')
309
306
  try {
310
- const { body, statusCode } = await this.deviceRefreshStatus()
311
- const deviceStatus: any = await body.json()
312
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
313
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
314
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
307
+ const { body } = await this.deviceRefreshStatus()
308
+ const deviceStatus: any = await body
309
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
310
+ if (await this.successfulStatusCodes(deviceStatus)) {
311
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
315
312
  this.deviceStatus = deviceStatus.body
316
313
  await this.openAPIparseStatus()
317
314
  await this.updateHomeKitCharacteristics()
318
315
  } else {
319
- await this.debugWarnLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
320
- await this.debugWarnLog(statusCode, deviceStatus)
316
+ await this.debugWarnLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
317
+ await this.debugWarnLog(deviceStatus)
321
318
  }
322
319
  } catch (e: any) {
323
320
  await this.apiError(e)
@@ -3,13 +3,10 @@
3
3
  * plug.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, device, plugMiniJPServiceData, plugMiniJPWebhookContext, plugMiniStatus, plugMiniUSServiceData, plugMiniUSWebhookContext, plugStatus, plugWebhookContext } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { devicesConfig } from '../settings.js'
9
- import type { plugMiniJPServiceData, plugMiniUSServiceData } from '../types/bledevicestatus.js'
10
- import type { device } from '../types/devicelist.js'
11
- import type { plugMiniStatus, plugStatus } from '../types/devicestatus.js'
12
- import type { plugMiniJPWebhookContext, plugMiniUSWebhookContext, plugWebhookContext } from '../types/devicewebhookstatus.js'
13
10
 
14
11
  /*
15
12
  * For Testing Locally:
@@ -231,17 +228,17 @@ export class Plug extends deviceBase {
231
228
  async openAPIRefreshStatus(): Promise<void> {
232
229
  await this.debugLog('openAPIRefreshStatus')
233
230
  try {
234
- const { body, statusCode } = await this.deviceRefreshStatus()
235
- const deviceStatus: any = await body.json()
236
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
237
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
238
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
231
+ const { body } = await this.deviceRefreshStatus()
232
+ const deviceStatus: any = await body
233
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
234
+ if (await this.successfulStatusCodes(deviceStatus)) {
235
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
239
236
  this.deviceStatus = deviceStatus.body
240
237
  await this.openAPIparseStatus()
241
238
  await this.updateHomeKitCharacteristics()
242
239
  } else {
243
- await this.debugWarnLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
244
- await this.debugWarnLog(statusCode, deviceStatus)
240
+ await this.debugWarnLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
241
+ await this.debugWarnLog(deviceStatus)
245
242
  }
246
243
  } catch (e: any) {
247
244
  await this.apiError(e)
@@ -347,21 +344,20 @@ export class Plug extends deviceBase {
347
344
  await this.debugLog('openAPIpushChanges')
348
345
  if (this.Outlet.On !== this.accessory.context.On) {
349
346
  const command = this.Outlet.On ? 'turnOn' : 'turnOff'
350
- const bodyChange = JSON.stringify({
347
+ const bodyChange: bodyChange = {
351
348
  command: `${command}`,
352
349
  parameter: 'default',
353
350
  commandType: 'command',
354
- })
351
+ }
355
352
  await this.debugLog(`SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
356
353
  try {
357
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
358
- const deviceStatus: any = await body.json()
359
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
360
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
361
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
354
+ const { body } = await this.pushChangeRequest(bodyChange)
355
+ const deviceStatus: any = await body
356
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
357
+ if (await this.successfulStatusCodes(deviceStatus)) {
358
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
362
359
  await this.updateHomeKitCharacteristics()
363
360
  } else {
364
- await this.statusCode(statusCode)
365
361
  await this.statusCode(deviceStatus.statusCode)
366
362
  }
367
363
  } catch (e: any) {
@@ -3,17 +3,10 @@
3
3
  * robotvacuumcleaner.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, device, floorCleaningRobotS10Status, floorCleaningRobotS10WebhookContext, robotVacuumCleanerS1PlusStatus, robotVacuumCleanerS1PlusWebhookContext, robotVacuumCleanerS1Status, robotVacuumCleanerS1WebhookContext, robotVacuumCleanerServiceData } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { devicesConfig } from '../settings.js'
9
- import type { robotVacuumCleanerServiceData } from '../types/bledevicestatus.js'
10
- import type { device } from '../types/devicelist.js'
11
- import type { floorCleaningRobotS10Status, robotVacuumCleanerS1PlusStatus, robotVacuumCleanerS1Status } from '../types/devicestatus.js'
12
- import type {
13
- floorCleaningRobotS10WebhookContext,
14
- robotVacuumCleanerS1PlusWebhookContext,
15
- robotVacuumCleanerS1WebhookContext,
16
- } from '../types/devicewebhookstatus.js'
17
10
 
18
11
  /*
19
12
  * For Testing Locally:
@@ -321,17 +314,17 @@ export class RobotVacuumCleaner extends deviceBase {
321
314
  async openAPIRefreshStatus(): Promise<void> {
322
315
  await this.debugLog('openAPIRefreshStatus')
323
316
  try {
324
- const { body, statusCode } = await this.deviceRefreshStatus()
325
- const deviceStatus: any = await body.json()
326
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
327
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
328
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
317
+ const { body } = await this.deviceRefreshStatus()
318
+ const deviceStatus: any = await body
319
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
320
+ if (await this.successfulStatusCodes(deviceStatus)) {
321
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
329
322
  this.deviceStatus = deviceStatus.body
330
323
  await this.openAPIparseStatus()
331
324
  await this.updateHomeKitCharacteristics()
332
325
  } else {
333
- await this.debugWarnLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
334
- await this.debugWarnLog(statusCode, deviceStatus)
326
+ await this.debugWarnLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
327
+ await this.debugWarnLog(deviceStatus)
335
328
  }
336
329
  } catch (e: any) {
337
330
  await this.apiError(e)
@@ -434,21 +427,20 @@ export class RobotVacuumCleaner extends deviceBase {
434
427
  await this.debugLog('openAPIpushChanges')
435
428
  if (this.LightBulb.On !== this.accessory.context.On) {
436
429
  const command = this.LightBulb.On ? 'start' : 'dock'
437
- const bodyChange = JSON.stringify({
430
+ const bodyChange: bodyChange = {
438
431
  command: `${command}`,
439
432
  parameter: 'default',
440
433
  commandType: 'command',
441
- })
434
+ }
442
435
  await this.debugLog(`SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
443
436
  try {
444
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
445
- const deviceStatus: any = await body.json()
446
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
447
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
448
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
437
+ const { body } = await this.pushChangeRequest(bodyChange)
438
+ const deviceStatus: any = await body
439
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
440
+ if (await this.successfulStatusCodes(deviceStatus)) {
441
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
449
442
  await this.updateHomeKitCharacteristics()
450
443
  } else {
451
- await this.statusCode(statusCode)
452
444
  await this.statusCode(deviceStatus.statusCode)
453
445
  }
454
446
  } catch (e: any) {
@@ -471,21 +463,20 @@ export class RobotVacuumCleaner extends deviceBase {
471
463
  : this.LightBulb.Brightness === 75
472
464
  ? '2'
473
465
  : this.LightBulb.Brightness === 100 ? '3' : 'default'
474
- const bodyChange = JSON.stringify({
466
+ const bodyChange: bodyChange = {
475
467
  command: `${command}`,
476
468
  parameter: `${parameter}`,
477
469
  commandType: 'command',
478
- })
470
+ }
479
471
  await this.debugLog(`SwitchBot OpenAPI bodyChange: ${JSON.stringify(bodyChange)}`)
480
472
  try {
481
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
482
- const deviceStatus: any = await body.json()
483
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
484
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
485
- 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)}`)
486
478
  await this.updateHomeKitCharacteristics()
487
479
  } else {
488
- await this.statusCode(statusCode)
489
480
  await this.statusCode(deviceStatus.statusCode)
490
481
  }
491
482
  } catch (e: any) {
@@ -3,13 +3,10 @@
3
3
  * waterdetector.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { device, waterLeakDetectorServiceData, waterLeakDetectorStatus, waterLeakDetectorWebhookContext } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { devicesConfig } from '../settings.js'
9
- import type { waterLeakDetectorServiceData } from '../types/bledevicestatus.js'
10
- import type { device } from '../types/devicelist.js'
11
- import type { waterLeakDetectorStatus } from '../types/devicestatus.js'
12
- import type { waterLeakDetectorWebhookContext } from '../types/devicewebhookstatus.js'
13
10
 
14
11
  /*
15
12
  * For Testing Locally:
@@ -321,17 +318,17 @@ export class WaterDetector extends deviceBase {
321
318
  async openAPIRefreshStatus(): Promise<void> {
322
319
  await this.debugLog('openAPIRefreshStatus')
323
320
  try {
324
- const { body, statusCode } = await this.deviceRefreshStatus()
325
- const deviceStatus: any = await body.json()
326
- await this.debugLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
327
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
328
- await this.debugSuccessLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
321
+ const { body } = await this.deviceRefreshStatus()
322
+ const deviceStatus: any = await body
323
+ await this.debugLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
324
+ if (await this.successfulStatusCodes(deviceStatus)) {
325
+ await this.debugSuccessLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
329
326
  this.deviceStatus = deviceStatus.body
330
327
  await this.openAPIparseStatus()
331
328
  await this.updateHomeKitCharacteristics()
332
329
  } else {
333
- await this.debugWarnLog(`statusCode: ${statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
334
- await this.debugWarnLog(statusCode, deviceStatus)
330
+ await this.debugWarnLog(`statusCode: ${deviceStatus.statusCode}, deviceStatus: ${JSON.stringify(deviceStatus)}`)
331
+ await this.debugWarnLog(deviceStatus)
335
332
  }
336
333
  } catch (e: any) {
337
334
  await this.apiError(e)
@@ -3,10 +3,10 @@
3
3
  * airconditioners.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, irdevice } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { irDevicesConfig } from '../settings.js'
9
- import type { irdevice } from '../types/irdevicelist.js'
10
10
 
11
11
  import { irdeviceBase } from './irdevice.js'
12
12
 
@@ -162,11 +162,11 @@ export class AirConditioner extends irdeviceBase {
162
162
  if (this.HeaterCooler.Active === this.hap.Characteristic.Active.ACTIVE && !this.disablePushOn) {
163
163
  const commandType: string = await this.commandType()
164
164
  const command: string = await this.commandOn()
165
- const bodyChange = JSON.stringify({
165
+ const bodyChange: bodyChange = {
166
166
  command,
167
167
  parameter: 'default',
168
168
  commandType,
169
- })
169
+ }
170
170
  await this.pushChanges(bodyChange)
171
171
  }
172
172
  }
@@ -176,11 +176,11 @@ export class AirConditioner extends irdeviceBase {
176
176
  if (this.HeaterCooler.Active === this.hap.Characteristic.Active.INACTIVE && !this.disablePushOff) {
177
177
  const commandType: string = await this.commandType()
178
178
  const command: string = await this.commandOff()
179
- const bodyChange = JSON.stringify({
179
+ const bodyChange: bodyChange = {
180
180
  command,
181
181
  parameter: 'default',
182
182
  commandType,
183
- })
183
+ }
184
184
  await this.pushChanges(bodyChange)
185
185
  }
186
186
  }
@@ -219,12 +219,11 @@ export class AirConditioner extends irdeviceBase {
219
219
  const parameter = `${this.HeaterCooler.ThresholdTemperature},${this.CurrentMode},${this.CurrentFanSpeed},${this.state}`
220
220
 
221
221
  await this.UpdateCurrentHeaterCoolerState()
222
- const bodyChange = JSON.stringify({
222
+ const bodyChange: bodyChange = {
223
223
  command: 'setAll',
224
224
  parameter: `${parameter}`,
225
225
  commandType: 'command',
226
- })
227
-
226
+ }
228
227
  await this.pushChanges(bodyChange)
229
228
  }
230
229
 
@@ -317,14 +316,13 @@ export class AirConditioner extends irdeviceBase {
317
316
  if (this.device.connectionType === 'OpenAPI' && !this.disablePushDetail) {
318
317
  await this.infoLog(`Sending request to SwitchBot API, body: ${bodyChange},`)
319
318
  try {
320
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
321
- const deviceStatus: any = await body.json()
322
- await this.pushStatusCodes(statusCode, deviceStatus)
323
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
324
- await this.successfulPushChange(statusCode, deviceStatus, bodyChange)
319
+ const { body } = await this.pushChangeRequest(bodyChange)
320
+ const deviceStatus: any = await body
321
+ await this.pushStatusCodes(deviceStatus)
322
+ if (await this.successfulStatusCodes(deviceStatus)) {
323
+ await this.successfulPushChange(deviceStatus, bodyChange)
325
324
  await this.updateHomeKitCharacteristics()
326
325
  } else {
327
- await this.statusCode(statusCode)
328
326
  await this.statusCode(deviceStatus.statusCode)
329
327
  }
330
328
  } catch (e: any) {
@@ -3,10 +3,10 @@
3
3
  * airpurifier.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, irdevice } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { irDevicesConfig } from '../settings.js'
9
- import type { irdevice } from '../types/irdevicelist.js'
10
10
 
11
11
  import { irdeviceBase } from './irdevice.js'
12
12
 
@@ -149,11 +149,11 @@ export class AirPurifier extends irdeviceBase {
149
149
  if (this.AirPurifier.Active === this.hap.Characteristic.Active.ACTIVE && !this.disablePushOn) {
150
150
  const commandType: string = await this.commandType()
151
151
  const command: string = await this.commandOn()
152
- const bodyChange = JSON.stringify({
152
+ const bodyChange: bodyChange = {
153
153
  command,
154
154
  parameter: 'default',
155
155
  commandType,
156
- })
156
+ }
157
157
  await this.pushChanges(bodyChange)
158
158
  }
159
159
  }
@@ -163,11 +163,11 @@ export class AirPurifier extends irdeviceBase {
163
163
  if (this.AirPurifier.Active === this.hap.Characteristic.Active.INACTIVE && !this.disablePushOn) {
164
164
  const commandType: string = await this.commandType()
165
165
  const command: string = await this.commandOff()
166
- const bodyChange = JSON.stringify({
166
+ const bodyChange: bodyChange = {
167
167
  command,
168
168
  parameter: 'default',
169
169
  commandType,
170
- })
170
+ }
171
171
  await this.pushChanges(bodyChange)
172
172
  }
173
173
  }
@@ -191,11 +191,11 @@ export class AirPurifier extends irdeviceBase {
191
191
  this.CurrentAPFanSpeed = this.CurrentFanSpeed ?? 1
192
192
  this.APActive = this.AirPurifier.Active === 1 ? 'on' : 'off'
193
193
  const parameter = `${this.CurrentAPTemp},${this.CurrentAPMode},${this.CurrentAPFanSpeed},${this.APActive}`
194
- const bodyChange = JSON.stringify({
194
+ const bodyChange: bodyChange = {
195
195
  command: 'setAll',
196
196
  parameter: `${parameter}`,
197
197
  commandType: 'command',
198
- })
198
+ }
199
199
  if (this.AirPurifier.Active === 1) {
200
200
  if ((Number(this.TemperatureSensor!.CurrentTemperature) || 24) < (this.LastTemperature || 30)) {
201
201
  this.AirPurifier.CurrentHeaterCoolerState = this.hap.Characteristic.CurrentHeaterCoolerState.COOLING
@@ -213,14 +213,13 @@ export class AirPurifier extends irdeviceBase {
213
213
  if (this.device.connectionType === 'OpenAPI') {
214
214
  this.infoLog(`Sending request to SwitchBot API, body: ${bodyChange},`)
215
215
  try {
216
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
217
- const deviceStatus: any = await body.json()
218
- await this.pushStatusCodes(statusCode, deviceStatus)
219
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
220
- await this.successfulPushChange(statusCode, deviceStatus, bodyChange)
216
+ const { body } = await this.pushChangeRequest(bodyChange)
217
+ const deviceStatus: any = await body
218
+ await this.pushStatusCodes(deviceStatus)
219
+ if (await this.successfulStatusCodes(deviceStatus)) {
220
+ await this.successfulPushChange(deviceStatus, bodyChange)
221
221
  await this.updateHomeKitCharacteristics()
222
222
  } else {
223
- await this.statusCode(statusCode)
224
223
  await this.statusCode(deviceStatus.statusCode)
225
224
  }
226
225
  } catch (e: any) {
@@ -3,10 +3,10 @@
3
3
  * camera.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, irdevice } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { irDevicesConfig } from '../settings.js'
9
- import type { irdevice } from '../types/irdevicelist.js'
10
10
 
11
11
  import { irdeviceBase } from './irdevice.js'
12
12
 
@@ -72,11 +72,11 @@ export class Camera extends irdeviceBase {
72
72
  if (this.Switch.On && !this.disablePushOn) {
73
73
  const commandType: string = await this.commandType()
74
74
  const command: string = await this.commandOn()
75
- const bodyChange = JSON.stringify({
75
+ const bodyChange: bodyChange = {
76
76
  command,
77
77
  parameter: 'default',
78
78
  commandType,
79
- })
79
+ }
80
80
  await this.pushChanges(bodyChange)
81
81
  }
82
82
  }
@@ -86,11 +86,11 @@ export class Camera extends irdeviceBase {
86
86
  if (!this.Switch.On && !this.disablePushOff) {
87
87
  const commandType: string = await this.commandType()
88
88
  const command: string = await this.commandOff()
89
- const bodyChange = JSON.stringify({
89
+ const bodyChange: bodyChange = {
90
90
  command,
91
91
  parameter: 'default',
92
92
  commandType,
93
- })
93
+ }
94
94
  await this.pushChanges(bodyChange)
95
95
  }
96
96
  }
@@ -100,14 +100,13 @@ export class Camera extends irdeviceBase {
100
100
  if (this.device.connectionType === 'OpenAPI') {
101
101
  this.infoLog(`Sending request to SwitchBot API, body: ${bodyChange},`)
102
102
  try {
103
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
104
- const deviceStatus: any = await body.json()
105
- await this.pushStatusCodes(statusCode, deviceStatus)
106
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
107
- await this.successfulPushChange(statusCode, deviceStatus, bodyChange)
103
+ const { body } = await this.pushChangeRequest(bodyChange)
104
+ const deviceStatus: any = await body
105
+ await this.pushStatusCodes(deviceStatus)
106
+ if (await this.successfulStatusCodes(deviceStatus)) {
107
+ await this.successfulPushChange(deviceStatus, bodyChange)
108
108
  await this.updateHomeKitCharacteristics()
109
109
  } else {
110
- await this.statusCode(statusCode)
111
110
  await this.statusCode(deviceStatus.statusCode)
112
111
  }
113
112
  } catch (e: any) {
@@ -3,10 +3,10 @@
3
3
  * fan.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, irdevice } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { irDevicesConfig } from '../settings.js'
9
- import type { irdevice } from '../types/irdevicelist.js'
10
10
 
11
11
  import { irdeviceBase } from './irdevice.js'
12
12
 
@@ -136,11 +136,11 @@ export class IRFan extends irdeviceBase {
136
136
  if (this.Fan.Active === this.hap.Characteristic.Active.ACTIVE && !this.disablePushOn) {
137
137
  const commandType: string = await this.commandType()
138
138
  const command: string = await this.commandOn()
139
- const bodyChange = JSON.stringify({
139
+ const bodyChange: bodyChange = {
140
140
  command,
141
141
  parameter: 'default',
142
142
  commandType,
143
- })
143
+ }
144
144
  await this.pushChanges(bodyChange)
145
145
  }
146
146
  }
@@ -150,39 +150,39 @@ export class IRFan extends irdeviceBase {
150
150
  if (this.Fan.Active === this.hap.Characteristic.Active.INACTIVE && !this.disablePushOff) {
151
151
  const commandType: string = await this.commandType()
152
152
  const command: string = await this.commandOff()
153
- const bodyChange = JSON.stringify({
153
+ const bodyChange: bodyChange = {
154
154
  command,
155
155
  parameter: 'default',
156
156
  commandType,
157
- })
157
+ }
158
158
  await this.pushChanges(bodyChange)
159
159
  }
160
160
  }
161
161
 
162
162
  async pushFanSpeedUpChanges(): Promise<void> {
163
- const bodyChange = JSON.stringify({
163
+ const bodyChange: bodyChange = {
164
164
  command: 'highSpeed',
165
165
  parameter: 'default',
166
166
  commandType: 'command',
167
- })
167
+ }
168
168
  await this.pushChanges(bodyChange)
169
169
  }
170
170
 
171
171
  async pushFanSpeedDownChanges(): Promise<void> {
172
- const bodyChange = JSON.stringify({
172
+ const bodyChange: bodyChange = {
173
173
  command: 'lowSpeed',
174
174
  parameter: 'default',
175
175
  commandType: 'command',
176
- })
176
+ }
177
177
  await this.pushChanges(bodyChange)
178
178
  }
179
179
 
180
180
  async pushFanSwingChanges(): Promise<void> {
181
- const bodyChange = JSON.stringify({
181
+ const bodyChange: bodyChange = {
182
182
  command: 'swing',
183
183
  parameter: 'default',
184
184
  commandType: 'command',
185
- })
185
+ }
186
186
  await this.pushChanges(bodyChange)
187
187
  }
188
188
 
@@ -191,14 +191,13 @@ export class IRFan extends irdeviceBase {
191
191
  if (this.device.connectionType === 'OpenAPI') {
192
192
  this.infoLog(`Sending request to SwitchBot API, body: ${bodyChange},`)
193
193
  try {
194
- const { body, statusCode } = await this.pushChangeRequest(bodyChange)
195
- const deviceStatus: any = await body.json()
196
- await this.pushStatusCodes(statusCode, deviceStatus)
197
- if (await this.successfulStatusCodes(statusCode, deviceStatus)) {
198
- await this.successfulPushChange(statusCode, deviceStatus, bodyChange)
194
+ const { body } = await this.pushChangeRequest(bodyChange)
195
+ const deviceStatus: any = await body
196
+ await this.pushStatusCodes(deviceStatus)
197
+ if (await this.successfulStatusCodes(deviceStatus)) {
198
+ await this.successfulPushChange(deviceStatus, bodyChange)
199
199
  await this.updateHomeKitCharacteristics()
200
200
  } else {
201
- await this.statusCode(statusCode)
202
201
  await this.statusCode(deviceStatus.statusCode)
203
202
  }
204
203
  } catch (e: any) {
@@ -3,14 +3,10 @@
3
3
  * device.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { API, CharacteristicValue, HAP, Logging, PlatformAccessory, Service } from 'homebridge'
6
+ import type { bodyChange, irdevice } from 'node-switchbot'
6
7
 
7
8
  import type { SwitchBotPlatform } from '../platform.js'
8
9
  import type { irDevicesConfig, SwitchBotPlatformConfig } from '../settings.js'
9
- import type { irdevice } from '../types/irdevicelist.js'
10
-
11
- import { request } from 'undici'
12
-
13
- import { Devices } from '../settings.js'
14
10
 
15
11
  export abstract class irdeviceBase {
16
12
  public readonly api: API
@@ -129,16 +125,13 @@ export abstract class irdeviceBase {
129
125
  this.debugSuccessLog(`version: ${accessory.context.version}`)
130
126
  }
131
127
 
132
- async pushChangeRequest(bodyChange: string): Promise<{ body: any, statusCode: any }> {
133
- return await request(`${Devices}/${this.device.deviceId}/commands`, {
134
- body: bodyChange,
135
- method: 'POST',
136
- headers: this.platform.generateHeaders(),
137
- })
128
+ async pushChangeRequest(bodyChange: bodyChange): Promise<{ body: any, statusCode: number }> {
129
+ const { response, statusCode } = await this.platform.switchBotAPI.controlDevice(this.device.deviceId, bodyChange.command, bodyChange.parameter, bodyChange.commandType)
130
+ return { body: response, statusCode }
138
131
  }
139
132
 
140
- async successfulStatusCodes(statusCode: any, deviceStatus: any) {
141
- return (statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)
133
+ async successfulStatusCodes(deviceStatus: any) {
134
+ return (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)
142
135
  }
143
136
 
144
137
  /**
@@ -163,14 +156,13 @@ export abstract class irdeviceBase {
163
156
  }
164
157
  }
165
158
 
166
- async pushStatusCodes(statusCode: any, deviceStatus: any) {
167
- await this.debugWarnLog(`statusCode: ${statusCode}`)
159
+ async pushStatusCodes(deviceStatus: any) {
168
160
  await this.debugWarnLog(`deviceStatus: ${JSON.stringify(deviceStatus)}`)
169
161
  await this.debugWarnLog(`deviceStatus statusCode: ${deviceStatus.statusCode}`)
170
162
  }
171
163
 
172
- async successfulPushChange(statusCode: any, deviceStatus: any, bodyChange: any) {
173
- this.debugSuccessLog(`statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`)
164
+ async successfulPushChange(deviceStatus: any, bodyChange: any) {
165
+ this.debugSuccessLog(`deviceStatus StatusCode: ${deviceStatus.statusCode}`)
174
166
  this.successLog(`request to SwitchBot API, body: ${JSON.stringify(JSON.parse(bodyChange))} sent successfully`)
175
167
  }
176
168