@switchbot/homebridge-switchbot 4.3.2 → 4.3.4

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 (140) hide show
  1. package/CHANGELOG.md +436 -0
  2. package/README.md +10 -0
  3. package/config.schema.json +844 -123
  4. package/dist/device/blindtilt.d.ts +1 -1
  5. package/dist/device/blindtilt.d.ts.map +1 -1
  6. package/dist/device/blindtilt.js.map +1 -1
  7. package/dist/device/bot.d.ts +1 -1
  8. package/dist/device/bot.d.ts.map +1 -1
  9. package/dist/device/bot.js.map +1 -1
  10. package/dist/device/ceilinglight.d.ts +1 -1
  11. package/dist/device/ceilinglight.d.ts.map +1 -1
  12. package/dist/device/ceilinglight.js.map +1 -1
  13. package/dist/device/colorbulb.d.ts +1 -1
  14. package/dist/device/colorbulb.d.ts.map +1 -1
  15. package/dist/device/colorbulb.js.map +1 -1
  16. package/dist/device/contact.d.ts +1 -1
  17. package/dist/device/contact.d.ts.map +1 -1
  18. package/dist/device/contact.js.map +1 -1
  19. package/dist/device/curtain.d.ts +1 -1
  20. package/dist/device/curtain.d.ts.map +1 -1
  21. package/dist/device/curtain.js.map +1 -1
  22. package/dist/device/device.d.ts +1 -1
  23. package/dist/device/device.d.ts.map +1 -1
  24. package/dist/device/device.js +12 -0
  25. package/dist/device/device.js.map +1 -1
  26. package/dist/device/fan.d.ts +1 -1
  27. package/dist/device/fan.d.ts.map +1 -1
  28. package/dist/device/fan.js.map +1 -1
  29. package/dist/device/hub.d.ts +1 -1
  30. package/dist/device/hub.d.ts.map +1 -1
  31. package/dist/device/hub.js.map +1 -1
  32. package/dist/device/humidifier.d.ts +1 -1
  33. package/dist/device/humidifier.d.ts.map +1 -1
  34. package/dist/device/humidifier.js.map +1 -1
  35. package/dist/device/iosensor.d.ts +1 -1
  36. package/dist/device/iosensor.d.ts.map +1 -1
  37. package/dist/device/iosensor.js.map +1 -1
  38. package/dist/device/lightstrip.d.ts +1 -1
  39. package/dist/device/lightstrip.d.ts.map +1 -1
  40. package/dist/device/lightstrip.js.map +1 -1
  41. package/dist/device/lock.d.ts +4 -4
  42. package/dist/device/lock.d.ts.map +1 -1
  43. package/dist/device/lock.js +4 -4
  44. package/dist/device/lock.js.map +1 -1
  45. package/dist/device/meter.d.ts +1 -1
  46. package/dist/device/meter.d.ts.map +1 -1
  47. package/dist/device/meter.js.map +1 -1
  48. package/dist/device/meterplus.d.ts +1 -1
  49. package/dist/device/meterplus.d.ts.map +1 -1
  50. package/dist/device/meterplus.js.map +1 -1
  51. package/dist/device/meterpro.d.ts +1 -1
  52. package/dist/device/meterpro.d.ts.map +1 -1
  53. package/dist/device/meterpro.js.map +1 -1
  54. package/dist/device/motion.d.ts +1 -1
  55. package/dist/device/motion.d.ts.map +1 -1
  56. package/dist/device/motion.js.map +1 -1
  57. package/dist/device/plug.d.ts +1 -1
  58. package/dist/device/plug.d.ts.map +1 -1
  59. package/dist/device/plug.js.map +1 -1
  60. package/dist/device/{occupancy.d.ts → presence.d.ts} +6 -6
  61. package/dist/device/presence.d.ts.map +1 -0
  62. package/dist/device/{occupancy.js → presence.js} +2 -2
  63. package/dist/device/presence.js.map +1 -0
  64. package/dist/device/relayswitch.d.ts +1 -1
  65. package/dist/device/relayswitch.d.ts.map +1 -1
  66. package/dist/device/relayswitch.js.map +1 -1
  67. package/dist/device/robotvacuumcleaner.d.ts +1 -1
  68. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  69. package/dist/device/robotvacuumcleaner.js.map +1 -1
  70. package/dist/device/waterdetector.d.ts +1 -1
  71. package/dist/device/waterdetector.d.ts.map +1 -1
  72. package/dist/device/waterdetector.js.map +1 -1
  73. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  74. package/dist/irdevice/airconditioner.js.map +1 -1
  75. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  76. package/dist/irdevice/airpurifier.js.map +1 -1
  77. package/dist/irdevice/camera.d.ts.map +1 -1
  78. package/dist/irdevice/camera.js.map +1 -1
  79. package/dist/irdevice/fan.d.ts.map +1 -1
  80. package/dist/irdevice/fan.js.map +1 -1
  81. package/dist/irdevice/light.d.ts.map +1 -1
  82. package/dist/irdevice/light.js.map +1 -1
  83. package/dist/irdevice/other.d.ts.map +1 -1
  84. package/dist/irdevice/other.js.map +1 -1
  85. package/dist/irdevice/tv.d.ts.map +1 -1
  86. package/dist/irdevice/tv.js.map +1 -1
  87. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  88. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  89. package/dist/irdevice/waterheater.d.ts.map +1 -1
  90. package/dist/irdevice/waterheater.js.map +1 -1
  91. package/dist/platform.d.ts +1 -1
  92. package/dist/platform.d.ts.map +1 -1
  93. package/dist/platform.js +9 -7
  94. package/dist/platform.js.map +1 -1
  95. package/dist/settings.d.ts +3 -3
  96. package/dist/settings.d.ts.map +1 -1
  97. package/docs/assets/highlight.css +14 -0
  98. package/docs/assets/icons.js +1 -1
  99. package/docs/assets/icons.svg +1 -1
  100. package/docs/assets/main.js +2 -2
  101. package/docs/assets/style.css +3 -3
  102. package/docs/index.html +41 -13
  103. package/docs/variables/default.html +1 -1
  104. package/eslint.config.js +1 -5
  105. package/package.json +15 -21
  106. package/src/device/blindtilt.ts +2 -4
  107. package/src/device/bot.ts +2 -4
  108. package/src/device/ceilinglight.ts +2 -4
  109. package/src/device/colorbulb.ts +2 -4
  110. package/src/device/contact.ts +2 -4
  111. package/src/device/curtain.ts +6 -8
  112. package/src/device/device.ts +19 -9
  113. package/src/device/fan.ts +2 -4
  114. package/src/device/hub.ts +3 -5
  115. package/src/device/humidifier.ts +2 -4
  116. package/src/device/iosensor.ts +3 -5
  117. package/src/device/lightstrip.ts +2 -4
  118. package/src/device/lock.ts +12 -14
  119. package/src/device/meter.ts +3 -5
  120. package/src/device/meterplus.ts +3 -5
  121. package/src/device/meterpro.ts +3 -5
  122. package/src/device/motion.ts +2 -4
  123. package/src/device/plug.ts +2 -4
  124. package/src/device/{occupancy.ts → presence.ts} +17 -19
  125. package/src/device/relayswitch.ts +2 -4
  126. package/src/device/robotvacuumcleaner.ts +2 -4
  127. package/src/device/waterdetector.ts +2 -4
  128. package/src/irdevice/airconditioner.ts +0 -1
  129. package/src/irdevice/airpurifier.ts +0 -1
  130. package/src/irdevice/camera.ts +0 -1
  131. package/src/irdevice/fan.ts +0 -1
  132. package/src/irdevice/light.ts +0 -1
  133. package/src/irdevice/other.ts +0 -1
  134. package/src/irdevice/tv.ts +0 -1
  135. package/src/irdevice/vacuumcleaner.ts +0 -1
  136. package/src/irdevice/waterheater.ts +0 -1
  137. package/src/platform.ts +9 -7
  138. package/src/settings.ts +3 -3
  139. package/dist/device/occupancy.d.ts.map +0 -1
  140. package/dist/device/occupancy.js.map +0 -1
@@ -4,10 +4,6 @@
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
6
  import type { bodyChange, device, lockProServiceData, lockProStatus, lockProWebhookContext, lockServiceData, lockStatus, lockWebhookContext, SwitchBotBLE, SwitchbotDevice, WoSmartLock } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig, lockConfig } from '../settings.js'
10
-
11
7
  /*
12
8
  * For Testing Locally:
13
9
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -15,6 +11,8 @@ import type { devicesConfig, lockConfig } from '../settings.js'
15
11
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
16
12
  import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
17
13
 
14
+ import type { SwitchBotPlatform } from '../platform.js'
15
+ import type { devicesConfig, lockConfig } from '../settings.js'
18
16
  import { formatDeviceIdAsMac } from '../utils.js'
19
17
  import { deviceBase } from './device.js'
20
18
 
@@ -47,13 +45,13 @@ export class Lock extends deviceBase {
47
45
  }
48
46
 
49
47
  // OpenAPI
50
- deviceStatus!: lockStatus | lockProStatus
48
+ deviceStatus!: lockStatus | lockProStatus | any
51
49
 
52
50
  // Webhook
53
- webhookContext!: lockWebhookContext | lockProWebhookContext
51
+ webhookContext!: lockWebhookContext | lockProWebhookContext | any
54
52
 
55
53
  // BLE
56
- serviceData!: lockServiceData | lockProServiceData
54
+ serviceData!: lockServiceData | lockProServiceData | any
57
55
 
58
56
  // Updates
59
57
  lockUpdateInProgress!: boolean
@@ -230,7 +228,7 @@ export class Lock extends deviceBase {
230
228
  this.Battery.BatteryLevel = this.serviceData.battery
231
229
  this.debugLog(`BatteryLevel: ${this.Battery.BatteryLevel}`)
232
230
  // StatusLowBattery
233
- this.Battery.StatusLowBattery = this.Battery.BatteryLevel < 10
231
+ this.Battery.StatusLowBattery = Number(this.Battery.BatteryLevel) < 10
234
232
  ? this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW
235
233
  : this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL
236
234
  this.debugLog(`StatusLowBattery: ${this.Battery.StatusLowBattery}`)
@@ -266,7 +264,7 @@ export class Lock extends deviceBase {
266
264
  this.debugLog(`BatteryLevel: ${this.Battery.BatteryLevel}`)
267
265
 
268
266
  // StatusLowBattery
269
- this.Battery.StatusLowBattery = this.Battery.BatteryLevel < 10
267
+ this.Battery.StatusLowBattery = Number(this.Battery.BatteryLevel) < 10
270
268
  ? this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW
271
269
  : this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL
272
270
  this.debugLog(`StatusLowBattery: ${this.Battery.StatusLowBattery}`)
@@ -329,10 +327,10 @@ export class Lock extends deviceBase {
329
327
  // Start to monitor advertisement packets
330
328
  (async () => {
331
329
  // Start to monitor advertisement packets
332
- const serviceData = await this.monitorAdvertisementPackets(switchBotBLE) as lockServiceData | lockProServiceData
330
+ const serviceData = await this.monitorAdvertisementPackets(switchBotBLE) as any
333
331
  // Update HomeKit
334
- if ((serviceData.model === SwitchBotBLEModel.Lock || SwitchBotBLEModel.LockPro)
335
- && (serviceData.modelName === SwitchBotBLEModelName.Lock || SwitchBotBLEModelName.LockPro)) {
332
+ if ((serviceData.model === SwitchBotBLEModel.Lock || serviceData.model === SwitchBotBLEModel.LockPro || serviceData.model === SwitchBotBLEModel.LockUltra)
333
+ && (serviceData.modelName === SwitchBotBLEModelName.Lock || serviceData.modelName === SwitchBotBLEModelName.LockPro || serviceData.modelName === SwitchBotBLEModelName.LockUltra)) {
336
334
  this.serviceData = serviceData
337
335
  if (serviceData !== undefined || serviceData !== null) {
338
336
  await this.BLEparseStatus()
@@ -357,7 +355,7 @@ export class Lock extends deviceBase {
357
355
  const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
358
356
  this.device.bleMac = formattedDeviceId
359
357
  this.debugLog(`bleMac: ${this.device.bleMac}`)
360
- this.platform.bleEventHandler[this.device.bleMac] = async (context: lockServiceData | lockProServiceData) => {
358
+ this.platform.bleEventHandler[this.device.bleMac] = async (context: lockServiceData | lockProServiceData | any) => {
361
359
  try {
362
360
  this.serviceData = context
363
361
  if (context !== undefined || context !== null) {
@@ -403,7 +401,7 @@ export class Lock extends deviceBase {
403
401
  async registerWebhook() {
404
402
  if (this.device.webhook) {
405
403
  this.debugLog('is listening webhook.')
406
- this.platform.webhookEventHandler[this.device.deviceId] = async (context: lockWebhookContext | lockProWebhookContext) => {
404
+ this.platform.webhookEventHandler[this.device.deviceId] = async (context: lockWebhookContext | lockProWebhookContext | any) => {
407
405
  try {
408
406
  this.webhookContext = context
409
407
  if (context !== undefined || context !== null) {
@@ -3,12 +3,8 @@
3
3
  * meter.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
- import type { device, meterServiceData, meterStatus, meterWebhookContext, SwitchBotBLE } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig, meterConfig } from '../settings.js'
10
-
11
6
  import { Units } from 'homebridge'
7
+ import type { device, meterServiceData, meterStatus, meterWebhookContext, SwitchBotBLE } from 'node-switchbot'
12
8
  /*
13
9
  * For Testing Locally:
14
10
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -16,6 +12,8 @@ import { Units } from 'homebridge'
16
12
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
17
13
  import { interval, skipWhile, Subject } from 'rxjs'
18
14
 
15
+ import type { SwitchBotPlatform } from '../platform.js'
16
+ import type { devicesConfig, meterConfig } from '../settings.js'
19
17
  import { convertUnits, formatDeviceIdAsMac, validHumidity } from '../utils.js'
20
18
  import { deviceBase } from './device.js'
21
19
 
@@ -3,12 +3,8 @@
3
3
  * meterplus.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
- import type { device, meterPlusServiceData, meterPlusStatus, meterPlusWebhookContext, SwitchBotBLE } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig, meterConfig } from '../settings.js'
10
-
11
6
  import { Units } from 'homebridge'
7
+ import type { device, meterPlusServiceData, meterPlusStatus, meterPlusWebhookContext, SwitchBotBLE } from 'node-switchbot'
12
8
  /*
13
9
  * For Testing Locally:
14
10
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -16,6 +12,8 @@ import { Units } from 'homebridge'
16
12
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
17
13
  import { interval, skipWhile, Subject } from 'rxjs'
18
14
 
15
+ import type { SwitchBotPlatform } from '../platform.js'
16
+ import type { devicesConfig, meterConfig } from '../settings.js'
19
17
  import { convertUnits, formatDeviceIdAsMac, validHumidity } from '../utils.js'
20
18
  import { deviceBase } from './device.js'
21
19
 
@@ -3,12 +3,8 @@
3
3
  * MeterPro.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
- import type { device, meterProCO2ServiceData, meterProCO2Status, meterProCO2WebhookContext, meterProServiceData, meterProStatus, meterProWebhookContext, SwitchBotBLE } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig, meterProConfig } from '../settings.js'
10
-
11
6
  import { Units } from 'homebridge'
7
+ import type { device, meterProCO2ServiceData, meterProCO2Status, meterProCO2WebhookContext, meterProServiceData, meterProStatus, meterProWebhookContext, SwitchBotBLE } from 'node-switchbot'
12
8
  /*
13
9
  * For Testing Locally:
14
10
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -16,6 +12,8 @@ import { Units } from 'homebridge'
16
12
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
17
13
  import { interval, skipWhile, Subject } from 'rxjs'
18
14
 
15
+ import type { SwitchBotPlatform } from '../platform.js'
16
+ import type { devicesConfig, meterProConfig } from '../settings.js'
19
17
  import { convertUnits, formatDeviceIdAsMac, validHumidity } from '../utils.js'
20
18
  import { deviceBase } from './device.js'
21
19
 
@@ -4,10 +4,6 @@
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
6
  import type { device, motionSensorServiceData, motionSensorStatus, motionSensorWebhookContext, SwitchBotBLE } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig, motionConfig } from '../settings.js'
10
-
11
7
  /*
12
8
  * For Testing Locally:
13
9
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -15,6 +11,8 @@ import type { devicesConfig, motionConfig } from '../settings.js'
15
11
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
16
12
  import { interval, skipWhile, Subject } from 'rxjs'
17
13
 
14
+ import type { SwitchBotPlatform } from '../platform.js'
15
+ import type { devicesConfig, motionConfig } from '../settings.js'
18
16
  import { formatDeviceIdAsMac } from '../utils.js'
19
17
  import { deviceBase } from './device.js'
20
18
 
@@ -4,10 +4,6 @@
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
6
  import type { bodyChange, device, plugMiniJPServiceData, plugMiniJPWebhookContext, plugMiniStatus, plugMiniUSServiceData, plugMiniUSWebhookContext, plugStatus, plugWebhookContext, SwitchBotBLE, SwitchbotDevice, WoPlugMiniUS } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig } from '../settings.js'
10
-
11
7
  /*
12
8
  * For Testing Locally:
13
9
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -15,6 +11,8 @@ import type { devicesConfig } from '../settings.js'
15
11
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
16
12
  import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
17
13
 
14
+ import type { SwitchBotPlatform } from '../platform.js'
15
+ import type { devicesConfig } from '../settings.js'
18
16
  import { formatDeviceIdAsMac } from '../utils.js'
19
17
  import { deviceBase } from './device.js'
20
18
 
@@ -1,13 +1,9 @@
1
1
  /* Copyright(C) 2021-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
2
2
  *
3
- * occupancy.ts: @switchbot/homebridge-switchbot.
3
+ * presence.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
- import type { device, occupancySensorStatus, occupancySensorWebhookContext, presenceSensorServiceData, SwitchBotBLE } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig, occupancyConfig } from '../settings.js'
10
-
6
+ import type { device, presenceSensorServiceData, presenceSensorStatus, presenceSensorWebhookContext, SwitchBotBLE } from 'node-switchbot'
11
7
  /*
12
8
  * For Testing Locally:
13
9
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -15,6 +11,8 @@ import type { devicesConfig, occupancyConfig } from '../settings.js'
15
11
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
16
12
  import { interval, skipWhile, Subject } from 'rxjs'
17
13
 
14
+ import type { SwitchBotPlatform } from '../platform.js'
15
+ import type { devicesConfig, presenceConfig } from '../settings.js'
18
16
  import { formatDeviceIdAsMac } from '../utils.js'
19
17
  import { deviceBase } from './device.js'
20
18
 
@@ -23,7 +21,7 @@ import { deviceBase } from './device.js'
23
21
  * An instance of this class is created for each accessory your platform registers
24
22
  * Each accessory may expose multiple services of different service types.
25
23
  */
26
- export class Occupancy extends deviceBase {
24
+ export class Presence extends deviceBase {
27
25
  // Services
28
26
  private Battery: {
29
27
  Name: CharacteristicValue
@@ -45,10 +43,10 @@ export class Occupancy extends deviceBase {
45
43
  }
46
44
 
47
45
  // OpenAPI
48
- deviceStatus!: occupancySensorStatus
46
+ deviceStatus!: presenceSensorStatus
49
47
 
50
48
  // Webhook
51
- webhookContext!: occupancySensorWebhookContext
49
+ webhookContext!: presenceSensorWebhookContext
52
50
 
53
51
  // BLE
54
52
  serviceData!: presenceSensorServiceData
@@ -104,7 +102,7 @@ export class Occupancy extends deviceBase {
104
102
  })
105
103
 
106
104
  // Initialize Light Sensor Service
107
- if ((device as unknown as occupancyConfig).hide_lightsensor) {
105
+ if ((device as unknown as presenceConfig).hide_lightsensor) {
108
106
  if (this.LightSensor) {
109
107
  this.debugLog('Removing Light Sensor Service')
110
108
  this.LightSensor.Service = this.accessory.getService(this.hap.Service.LightSensor) as Service
@@ -164,9 +162,9 @@ export class Occupancy extends deviceBase {
164
162
  this.debugLog(`OccupancyDetected: ${this.OccupancySensor.OccupancyDetected}`)
165
163
 
166
164
  // CurrentAmbientLightLevel
167
- if (!(this.device as unknown as occupancyConfig).hide_lightsensor && this.LightSensor?.Service) {
168
- const set_minLux = (this.device as unknown as occupancyConfig).set_minLux ?? 1
169
- const set_maxLux = (this.device as unknown as occupancyConfig).set_maxLux ?? 6001
165
+ if (!(this.device as unknown as presenceConfig).hide_lightsensor && this.LightSensor?.Service) {
166
+ const set_minLux = (this.device as unknown as presenceConfig).set_minLux ?? 1
167
+ const set_maxLux = (this.device as unknown as presenceConfig).set_maxLux ?? 6001
170
168
  const lightLevel = this.serviceData.lightLevel ? set_maxLux : set_minLux
171
169
  this.LightSensor.CurrentAmbientLightLevel = this.getLightLevel(lightLevel, set_minLux, set_maxLux, 2)
172
170
  this.debugLog(`LightLevel: ${this.serviceData.lightLevel}, CurrentAmbientLightLevel: ${this.LightSensor.CurrentAmbientLightLevel}`)
@@ -193,9 +191,9 @@ export class Occupancy extends deviceBase {
193
191
  this.debugLog(`OccupancyDetected: ${this.OccupancySensor.OccupancyDetected}`)
194
192
 
195
193
  // CurrentAmbientLightLevel
196
- if (!(this.device as unknown as occupancyConfig).hide_lightsensor && this.LightSensor?.Service) {
197
- const set_minLux = (this.device as unknown as occupancyConfig).set_minLux ?? 1
198
- const set_maxLux = (this.device as unknown as occupancyConfig).set_maxLux ?? 6001
194
+ if (!(this.device as unknown as presenceConfig).hide_lightsensor && this.LightSensor?.Service) {
195
+ const set_minLux = (this.device as unknown as presenceConfig).set_minLux ?? 1
196
+ const set_maxLux = (this.device as unknown as presenceConfig).set_maxLux ?? 6001
199
197
  const lightLevel = this.deviceStatus.lightLevel ? set_maxLux : set_minLux
200
198
  this.LightSensor.CurrentAmbientLightLevel = this.getLightLevel(lightLevel, set_minLux, set_maxLux, 2)
201
199
  this.debugLog(`LightLevel: ${this.deviceStatus.lightLevel}, CurrentAmbientLightLevel: ${this.LightSensor.CurrentAmbientLightLevel}`)
@@ -333,7 +331,7 @@ export class Occupancy extends deviceBase {
333
331
  async registerWebhook() {
334
332
  if (this.device.webhook) {
335
333
  this.debugLog('is listening webhook.')
336
- this.platform.webhookEventHandler[this.device.deviceId] = async (context: occupancySensorWebhookContext) => {
334
+ this.platform.webhookEventHandler[this.device.deviceId] = async (context: presenceSensorWebhookContext) => {
337
335
  try {
338
336
  this.webhookContext = context
339
337
  if (context !== undefined || context !== null) {
@@ -363,7 +361,7 @@ export class Occupancy extends deviceBase {
363
361
  // StatusLowBattery
364
362
  await this.updateCharacteristic(this.Battery.Service, this.hap.Characteristic.StatusLowBattery, this.Battery.StatusLowBattery, 'StatusLowBattery')
365
363
  // CurrentAmbientLightLevel
366
- if (!(this.device as unknown as occupancyConfig).hide_lightsensor && this.LightSensor?.Service) {
364
+ if (!(this.device as unknown as presenceConfig).hide_lightsensor && this.LightSensor?.Service) {
367
365
  await this.updateCharacteristic(this.LightSensor.Service, this.hap.Characteristic.CurrentAmbientLightLevel, this.LightSensor.CurrentAmbientLightLevel, 'CurrentAmbientLightLevel')
368
366
  }
369
367
  }
@@ -386,7 +384,7 @@ export class Occupancy extends deviceBase {
386
384
  this.OccupancySensor.Service.updateCharacteristic(this.hap.Characteristic.OccupancyDetected, e)
387
385
  this.Battery.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, e)
388
386
  this.Battery.Service.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, e)
389
- if (!(this.device as unknown as occupancyConfig).hide_lightsensor && this.LightSensor?.Service) {
387
+ if (!(this.device as unknown as presenceConfig).hide_lightsensor && this.LightSensor?.Service) {
390
388
  this.LightSensor.Service.updateCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel, e)
391
389
  }
392
390
  }
@@ -4,10 +4,6 @@
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
6
  import type { bodyChange, device, relaySwitch1Context, relaySwitch1PMContext, relaySwitch1PMServiceData, relaySwitch1PMStatus, relaySwitch1ServiceData, relaySwitch1Status, SwitchBotBLE, SwitchbotDevice, WoRelaySwitch1, WoRelaySwitch1PM } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig, relaySwitch1Config, relaySwitch1PMConfig } from '../settings.js'
10
-
11
7
  /*
12
8
  * For Testing Locally:
13
9
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -15,6 +11,8 @@ import type { devicesConfig, relaySwitch1Config, relaySwitch1PMConfig } from '..
15
11
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
16
12
  import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
17
13
 
14
+ import type { SwitchBotPlatform } from '../platform.js'
15
+ import type { devicesConfig, relaySwitch1Config, relaySwitch1PMConfig } from '../settings.js'
18
16
  import { formatDeviceIdAsMac } from '../utils.js'
19
17
  import { deviceBase } from './device.js'
20
18
 
@@ -4,10 +4,6 @@
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
6
  import type { bodyChange, device, floorCleaningRobotS10Status, floorCleaningRobotS10WebhookContext, robotVacuumCleanerS1PlusStatus, robotVacuumCleanerS1PlusWebhookContext, robotVacuumCleanerS1Status, robotVacuumCleanerS1WebhookContext, robotVacuumCleanerServiceData, SwitchBotBLE, SwitchbotDevice } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig } from '../settings.js'
10
-
11
7
  /*
12
8
  * For Testing Locally:
13
9
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -15,6 +11,8 @@ import type { devicesConfig } from '../settings.js'
15
11
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
16
12
  import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
17
13
 
14
+ import type { SwitchBotPlatform } from '../platform.js'
15
+ import type { devicesConfig } from '../settings.js'
18
16
  import { formatDeviceIdAsMac } from '../utils.js'
19
17
  import { deviceBase } from './device.js'
20
18
 
@@ -4,10 +4,6 @@
4
4
  */
5
5
  import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
6
  import type { device, SwitchBotBLE, waterLeakDetectorServiceData, waterLeakDetectorStatus, waterLeakDetectorWebhookContext } from 'node-switchbot'
7
-
8
- import type { SwitchBotPlatform } from '../platform.js'
9
- import type { devicesConfig, waterDetectorConfig } from '../settings.js'
10
-
11
7
  /*
12
8
  * For Testing Locally:
13
9
  * import { SwitchBotBLEModel, SwitchBotBLEModelName } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
@@ -15,6 +11,8 @@ import type { devicesConfig, waterDetectorConfig } from '../settings.js'
15
11
  import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
16
12
  import { interval, skipWhile, Subject } from 'rxjs'
17
13
 
14
+ import type { SwitchBotPlatform } from '../platform.js'
15
+ import type { devicesConfig, waterDetectorConfig } from '../settings.js'
18
16
  import { formatDeviceIdAsMac } from '../utils.js'
19
17
  import { deviceBase } from './device.js'
20
18
 
@@ -7,7 +7,6 @@ import type { bodyChange, irdevice } from 'node-switchbot'
7
7
 
8
8
  import type { SwitchBotPlatform } from '../platform.js'
9
9
  import type { irAirConfig, irDevicesConfig } from '../settings.js'
10
-
11
10
  import { irdeviceBase } from './irdevice.js'
12
11
 
13
12
  /**
@@ -7,7 +7,6 @@ import type { bodyChange, irdevice } from 'node-switchbot'
7
7
 
8
8
  import type { SwitchBotPlatform } from '../platform.js'
9
9
  import type { irDevicesConfig } from '../settings.js'
10
-
11
10
  import { irdeviceBase } from './irdevice.js'
12
11
 
13
12
  /**
@@ -7,7 +7,6 @@ import type { bodyChange, irdevice } from 'node-switchbot'
7
7
 
8
8
  import type { SwitchBotPlatform } from '../platform.js'
9
9
  import type { irDevicesConfig } from '../settings.js'
10
-
11
10
  import { irdeviceBase } from './irdevice.js'
12
11
 
13
12
  /**
@@ -7,7 +7,6 @@ import type { bodyChange, irdevice } from 'node-switchbot'
7
7
 
8
8
  import type { SwitchBotPlatform } from '../platform.js'
9
9
  import type { irDevicesConfig, irFanConfig } from '../settings.js'
10
-
11
10
  import { irdeviceBase } from './irdevice.js'
12
11
 
13
12
  /**
@@ -7,7 +7,6 @@ import type { bodyChange, irdevice } from 'node-switchbot'
7
7
 
8
8
  import type { SwitchBotPlatform } from '../platform.js'
9
9
  import type { irDevicesConfig, irLightConfig } from '../settings.js'
10
-
11
10
  import { irdeviceBase } from './irdevice.js'
12
11
 
13
12
  /**
@@ -7,7 +7,6 @@ import type { bodyChange, irdevice } from 'node-switchbot'
7
7
 
8
8
  import type { SwitchBotPlatform } from '../platform.js'
9
9
  import type { irDevicesConfig, irOtherConfig } from '../settings.js'
10
-
11
10
  import { irdeviceBase } from './irdevice.js'
12
11
 
13
12
  /**
@@ -7,7 +7,6 @@ import type { bodyChange, irdevice } from 'node-switchbot'
7
7
 
8
8
  import type { SwitchBotPlatform } from '../platform.js'
9
9
  import type { irDevicesConfig } from '../settings.js'
10
-
11
10
  import { irdeviceBase } from './irdevice.js'
12
11
 
13
12
  /**
@@ -7,7 +7,6 @@ import type { bodyChange, irdevice } from 'node-switchbot'
7
7
 
8
8
  import type { SwitchBotPlatform } from '../platform.js'
9
9
  import type { irDevicesConfig } from '../settings.js'
10
-
11
10
  import { irdeviceBase } from './irdevice.js'
12
11
 
13
12
  /**
@@ -7,7 +7,6 @@ import type { bodyChange, irdevice } from 'node-switchbot'
7
7
 
8
8
  import type { SwitchBotPlatform } from '../platform.js'
9
9
  import type { irDevicesConfig } from '../settings.js'
10
-
11
10
  import { irdeviceBase } from './irdevice.js'
12
11
 
13
12
  /**
package/src/platform.ts CHANGED
@@ -40,8 +40,8 @@ import { Meter } from './device/meter.js'
40
40
  import { MeterPlus } from './device/meterplus.js'
41
41
  import { MeterPro } from './device/meterpro.js'
42
42
  import { Motion } from './device/motion.js'
43
- import { Occupancy } from './device/occupancy.js'
44
43
  import { Plug } from './device/plug.js'
44
+ import { Presence } from './device/presence.js'
45
45
  import { RelaySwitch } from './device/relayswitch.js'
46
46
  import { RobotVacuumCleaner } from './device/robotvacuumcleaner.js'
47
47
  import { WaterDetector } from './device/waterdetector.js'
@@ -595,7 +595,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
595
595
  'WoIOSensor': this.createIOSensor.bind(this),
596
596
  'Water Detector': this.createWaterDetector.bind(this),
597
597
  'Motion Sensor': this.createMotion.bind(this),
598
- 'Presence Sensor': this.createOccupancy.bind(this),
598
+ 'Presence Sensor': this.createPresence.bind(this),
599
599
  'Contact Sensor': this.createContact.bind(this),
600
600
  'Curtain': this.createCurtain.bind(this),
601
601
  'Curtain3': this.createCurtain.bind(this),
@@ -607,6 +607,8 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
607
607
  'Plug Mini (JP)': this.createPlug.bind(this),
608
608
  'Smart Lock': this.createLock.bind(this),
609
609
  'Smart Lock Pro': this.createLock.bind(this),
610
+ 'Smart Lock Ultra': this.createLock.bind(this),
611
+ 'Lock Ultra': this.createLock.bind(this),
610
612
  'Color Bulb': this.createColorBulb.bind(this),
611
613
  'K10+': this.createRobotVacuumCleaner.bind(this),
612
614
  'K10+ Pro': this.createRobotVacuumCleaner.bind(this),
@@ -1298,7 +1300,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
1298
1300
  }
1299
1301
  }
1300
1302
 
1301
- private async createOccupancy(device: device & devicesConfig) {
1303
+ private async createPresence(device: device & devicesConfig) {
1302
1304
  const uuid = this.api.hap.uuid.generate(`${device.deviceId}-${device.deviceType}`)
1303
1305
 
1304
1306
  // see if an accessory with the same uuid has already been registered and restored from
@@ -1322,7 +1324,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
1322
1324
  this.api.updatePlatformAccessories([existingAccessory])
1323
1325
  // create the accessory handler for the restored accessory
1324
1326
  // this is imported from `platformAccessory.ts`
1325
- new Occupancy(this, existingAccessory, device)
1327
+ new Presence(this, existingAccessory, device)
1326
1328
  this.debugLog(`${device.deviceType} uuid: ${device.deviceId}-${device.deviceType}, (${existingAccessory.UUID})`)
1327
1329
  } else {
1328
1330
  this.unregisterPlatformAccessories(existingAccessory)
@@ -1349,7 +1351,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
1349
1351
  this.infoLog(`${newOrExternal} accessory: ${accessory.displayName} deviceId: ${device.deviceId}`)
1350
1352
  // create the accessory handler for the newly create accessory
1351
1353
  // this is imported from `platformAccessory.ts`
1352
- new Occupancy(this, accessory, device)
1354
+ new Presence(this, accessory, device)
1353
1355
  this.debugLog(`${device.deviceType} uuid: ${device.deviceId}-${device.deviceType}, (${accessory.UUID})`)
1354
1356
 
1355
1357
  // publish device externally or link the accessory to your platform
@@ -1660,7 +1662,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
1660
1662
  existingAccessory.context.device = device
1661
1663
  existingAccessory.context.deviceId = device.deviceId
1662
1664
  existingAccessory.context.deviceType = device.deviceType
1663
- existingAccessory.context.model = device.deviceType === 'Smart Lock Pro' ? SwitchBotModel.LockPro : SwitchBotModel.Lock
1665
+ existingAccessory.context.model = device.deviceType === 'Smart Lock Pro' ? SwitchBotModel.LockPro : (device.deviceType === 'Smart Lock Ultra' || device.deviceType === 'Lock Ultra') ? SwitchBotModel.LockUltra : SwitchBotModel.Lock
1664
1666
  existingAccessory.displayName = device.configDeviceName
1665
1667
  ? await this.validateAndCleanDisplayName(device.configDeviceName, 'configDeviceName', device.configDeviceName)
1666
1668
  : await this.validateAndCleanDisplayName(device.deviceName, 'deviceName', device.deviceName)
@@ -1686,7 +1688,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
1686
1688
  accessory.context.device = device
1687
1689
  accessory.context.deviceId = device.deviceId
1688
1690
  accessory.context.deviceType = device.deviceType
1689
- accessory.context.model = device.deviceType === 'Smart Lock Pro' ? SwitchBotModel.LockPro : SwitchBotModel.Lock
1691
+ accessory.context.model = device.deviceType === 'Smart Lock Pro' ? SwitchBotModel.LockPro : (device.deviceType === 'Smart Lock Ultra' || device.deviceType === 'Lock Ultra') ? SwitchBotModel.LockUltra : SwitchBotModel.Lock
1690
1692
  accessory.displayName = device.configDeviceName
1691
1693
  ? await this.validateAndCleanDisplayName(device.configDeviceName, 'configDeviceName', device.configDeviceName)
1692
1694
  : await this.validateAndCleanDisplayName(device.deviceName, 'deviceName', device.deviceName)
package/src/settings.ts CHANGED
@@ -182,8 +182,8 @@ export interface motionConfig extends BaseDeviceConfig {
182
182
  set_maxLux?: number
183
183
  };
184
184
 
185
- export interface occupancyConfig extends BaseDeviceConfig {
186
- configDeviceType: 'Occupancy Sensor'
185
+ export interface presenceConfig extends BaseDeviceConfig {
186
+ configDeviceType: 'Presence Sensor'
187
187
  hide_lightsensor?: boolean
188
188
  set_minLux?: number
189
189
  set_maxLux?: number
@@ -218,7 +218,7 @@ export interface ceilingLightConfig extends BaseDeviceConfig {
218
218
  };
219
219
 
220
220
  export interface lockConfig extends BaseDeviceConfig {
221
- configDeviceType: 'Smart Lock' | 'Smart Lock Pro'
221
+ configDeviceType: 'Smart Lock' | 'Smart Lock Pro' | 'Smart Lock Ultra' | 'Lock Ultra'
222
222
  hide_contactsensor?: boolean
223
223
  activate_latchbutton?: boolean
224
224
  };
@@ -1 +0,0 @@
1
- {"version":3,"file":"occupancy.d.ts","sourceRoot":"","sources":["../../src/device/occupancy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAuB,iBAAiB,EAAW,MAAM,YAAY,CAAA;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE3I,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAA;AAOpE,OAAO,EAAuB,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,UAAU;IAmCrC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB;IAjCtC,OAAO,CAAC,OAAO,CAKd;IAED,OAAO,CAAC,eAAe,CAItB;IAED,OAAO,CAAC,WAAW,CAAC,CAInB;IAGD,YAAY,EAAG,qBAAqB,CAAA;IAGpC,cAAc,EAAG,6BAA6B,CAAA;IAG9C,WAAW,EAAG,yBAAyB,CAAA;IAGvC,2BAA2B,EAAG,OAAO,CAAA;IACrC,iBAAiB,EAAG,OAAO,CAAC,IAAI,CAAC,CAAA;gBAGtB,QAAQ,EAAE,iBAAiB,EACpC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,MAAM,GAAG,aAAa;IA+F1B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B/B,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CnC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IASzC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BpC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBrC,eAAe;IAsBrB;;OAEG;IACG,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7C,oBAAoB,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAQtC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"occupancy.js","sourceRoot":"","sources":["../../src/device/occupancy.ts"],"names":[],"mappings":"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"}