@switchbot/homebridge-switchbot 3.5.0-beta.56 → 3.5.0-beta.58

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 (164) hide show
  1. package/.vscode/settings.json +4 -1
  2. package/dist/device/blindtilt.d.ts +4 -4
  3. package/dist/device/blindtilt.d.ts.map +1 -1
  4. package/dist/device/blindtilt.js +2 -2
  5. package/dist/device/blindtilt.js.map +1 -1
  6. package/dist/device/bot.d.ts +3 -3
  7. package/dist/device/bot.d.ts.map +1 -1
  8. package/dist/device/bot.js +1 -1
  9. package/dist/device/bot.js.map +1 -1
  10. package/dist/device/ceilinglight.d.ts +3 -3
  11. package/dist/device/ceilinglight.d.ts.map +1 -1
  12. package/dist/device/ceilinglight.js +2 -2
  13. package/dist/device/ceilinglight.js.map +1 -1
  14. package/dist/device/colorbulb.d.ts +3 -3
  15. package/dist/device/colorbulb.d.ts.map +1 -1
  16. package/dist/device/colorbulb.js +1 -1
  17. package/dist/device/colorbulb.js.map +1 -1
  18. package/dist/device/contact.d.ts +4 -4
  19. package/dist/device/contact.d.ts.map +1 -1
  20. package/dist/device/contact.js +8 -2
  21. package/dist/device/contact.js.map +1 -1
  22. package/dist/device/curtain.d.ts +3 -3
  23. package/dist/device/curtain.d.ts.map +1 -1
  24. package/dist/device/curtain.js +1 -1
  25. package/dist/device/curtain.js.map +1 -1
  26. package/dist/device/device.d.ts +4 -4
  27. package/dist/device/device.d.ts.map +1 -1
  28. package/dist/device/device.js +4 -0
  29. package/dist/device/device.js.map +1 -1
  30. package/dist/device/fan.d.ts +3 -3
  31. package/dist/device/fan.d.ts.map +1 -1
  32. package/dist/device/fan.js +1 -1
  33. package/dist/device/fan.js.map +1 -1
  34. package/dist/device/hub.d.ts +4 -4
  35. package/dist/device/hub.d.ts.map +1 -1
  36. package/dist/device/hub.js +1 -5
  37. package/dist/device/hub.js.map +1 -1
  38. package/dist/device/humidifier.d.ts +3 -3
  39. package/dist/device/humidifier.d.ts.map +1 -1
  40. package/dist/device/humidifier.js +1 -1
  41. package/dist/device/humidifier.js.map +1 -1
  42. package/dist/device/iosensor.d.ts +3 -3
  43. package/dist/device/iosensor.d.ts.map +1 -1
  44. package/dist/device/iosensor.js +1 -5
  45. package/dist/device/iosensor.js.map +1 -1
  46. package/dist/device/lightstrip.d.ts +4 -4
  47. package/dist/device/lightstrip.d.ts.map +1 -1
  48. package/dist/device/lightstrip.js +2 -2
  49. package/dist/device/lightstrip.js.map +1 -1
  50. package/dist/device/lock.d.ts +3 -3
  51. package/dist/device/lock.d.ts.map +1 -1
  52. package/dist/device/lock.js +1 -1
  53. package/dist/device/lock.js.map +1 -1
  54. package/dist/device/meter.d.ts +3 -3
  55. package/dist/device/meter.d.ts.map +1 -1
  56. package/dist/device/meter.js +1 -5
  57. package/dist/device/meter.js.map +1 -1
  58. package/dist/device/meterplus.d.ts +3 -3
  59. package/dist/device/meterplus.d.ts.map +1 -1
  60. package/dist/device/meterplus.js +1 -5
  61. package/dist/device/meterplus.js.map +1 -1
  62. package/dist/device/motion.d.ts +3 -3
  63. package/dist/device/motion.d.ts.map +1 -1
  64. package/dist/device/motion.js +27 -12
  65. package/dist/device/motion.js.map +1 -1
  66. package/dist/device/plug.d.ts +3 -3
  67. package/dist/device/plug.d.ts.map +1 -1
  68. package/dist/device/plug.js +1 -1
  69. package/dist/device/plug.js.map +1 -1
  70. package/dist/device/robotvacuumcleaner.d.ts +4 -4
  71. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  72. package/dist/device/robotvacuumcleaner.js +3 -3
  73. package/dist/device/robotvacuumcleaner.js.map +1 -1
  74. package/dist/device/waterdetector.d.ts +3 -3
  75. package/dist/device/waterdetector.d.ts.map +1 -1
  76. package/dist/device/waterdetector.js +1 -1
  77. package/dist/device/waterdetector.js.map +1 -1
  78. package/dist/homebridge-ui/public/index.html +20 -14
  79. package/dist/index.d.ts +1 -1
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +1 -1
  82. package/dist/index.js.map +1 -1
  83. package/dist/irdevice/airconditioner.d.ts +3 -3
  84. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  85. package/dist/irdevice/airconditioner.js +9 -9
  86. package/dist/irdevice/airconditioner.js.map +1 -1
  87. package/dist/irdevice/airpurifier.d.ts +3 -3
  88. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  89. package/dist/irdevice/airpurifier.js +1 -1
  90. package/dist/irdevice/airpurifier.js.map +1 -1
  91. package/dist/irdevice/camera.d.ts +3 -3
  92. package/dist/irdevice/camera.d.ts.map +1 -1
  93. package/dist/irdevice/camera.js +2 -2
  94. package/dist/irdevice/camera.js.map +1 -1
  95. package/dist/irdevice/fan.d.ts +6 -6
  96. package/dist/irdevice/fan.d.ts.map +1 -1
  97. package/dist/irdevice/fan.js +37 -29
  98. package/dist/irdevice/fan.js.map +1 -1
  99. package/dist/irdevice/irdevice.d.ts +3 -3
  100. package/dist/irdevice/irdevice.d.ts.map +1 -1
  101. package/dist/irdevice/irdevice.js.map +1 -1
  102. package/dist/irdevice/light.d.ts +9 -14
  103. package/dist/irdevice/light.d.ts.map +1 -1
  104. package/dist/irdevice/light.js +67 -88
  105. package/dist/irdevice/light.js.map +1 -1
  106. package/dist/irdevice/other.d.ts +3 -3
  107. package/dist/irdevice/other.d.ts.map +1 -1
  108. package/dist/irdevice/other.js +1 -1
  109. package/dist/irdevice/other.js.map +1 -1
  110. package/dist/irdevice/tv.d.ts +3 -3
  111. package/dist/irdevice/tv.d.ts.map +1 -1
  112. package/dist/irdevice/tv.js +3 -3
  113. package/dist/irdevice/tv.js.map +1 -1
  114. package/dist/irdevice/vacuumcleaner.d.ts +3 -3
  115. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  116. package/dist/irdevice/vacuumcleaner.js +2 -2
  117. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  118. package/dist/irdevice/waterheater.d.ts +3 -3
  119. package/dist/irdevice/waterheater.d.ts.map +1 -1
  120. package/dist/irdevice/waterheater.js +2 -2
  121. package/dist/irdevice/waterheater.js.map +1 -1
  122. package/dist/platform.d.ts +7 -7
  123. package/dist/platform.d.ts.map +1 -1
  124. package/dist/platform.js +20 -23
  125. package/dist/platform.js.map +1 -1
  126. package/dist/settings.d.ts +24 -10
  127. package/dist/settings.d.ts.map +1 -1
  128. package/dist/settings.js +16 -0
  129. package/dist/settings.js.map +1 -1
  130. package/eslint.config.js +89 -78
  131. package/package.json +3 -3
  132. package/src/device/blindtilt.ts +9 -7
  133. package/src/device/bot.ts +17 -15
  134. package/src/device/ceilinglight.ts +7 -5
  135. package/src/device/colorbulb.ts +6 -4
  136. package/src/device/contact.ts +22 -13
  137. package/src/device/curtain.ts +10 -8
  138. package/src/device/device.ts +5 -4
  139. package/src/device/fan.ts +7 -5
  140. package/src/device/hub.ts +10 -7
  141. package/src/device/humidifier.ts +9 -7
  142. package/src/device/iosensor.ts +11 -8
  143. package/src/device/lightstrip.ts +7 -5
  144. package/src/device/lock.ts +9 -7
  145. package/src/device/meter.ts +10 -7
  146. package/src/device/meterplus.ts +10 -7
  147. package/src/device/motion.ts +36 -16
  148. package/src/device/plug.ts +6 -4
  149. package/src/device/robotvacuumcleaner.ts +9 -7
  150. package/src/device/waterdetector.ts +7 -5
  151. package/src/homebridge-ui/public/index.html +20 -14
  152. package/src/index.ts +3 -2
  153. package/src/irdevice/airconditioner.ts +15 -13
  154. package/src/irdevice/airpurifier.ts +7 -5
  155. package/src/irdevice/camera.ts +7 -5
  156. package/src/irdevice/fan.ts +43 -30
  157. package/src/irdevice/irdevice.ts +4 -5
  158. package/src/irdevice/light.ts +83 -103
  159. package/src/irdevice/other.ts +15 -13
  160. package/src/irdevice/tv.ts +9 -7
  161. package/src/irdevice/vacuumcleaner.ts +7 -5
  162. package/src/irdevice/waterheater.ts +7 -5
  163. package/src/platform.ts +59 -66
  164. package/src/settings.ts +73 -58
package/src/device/fan.ts CHANGED
@@ -4,10 +4,12 @@
4
4
  */
5
5
  import { request } from 'undici';
6
6
  import { deviceBase } from './device.js';
7
- import { SwitchBotPlatform } from '../platform.js';
7
+ import { Devices } from '../settings.js';
8
8
  import { Subject, debounceTime, interval, skipWhile, take, tap } from 'rxjs';
9
- import { CharacteristicValue, PlatformAccessory, Service } from 'homebridge';
10
- import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
9
+
10
+ import type { SwitchBotPlatform } from '../platform.js';
11
+ import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge';
12
+ import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
11
13
 
12
14
  export class Fan extends deviceBase {
13
15
  // Services
@@ -41,7 +43,7 @@ export class Fan extends deviceBase {
41
43
 
42
44
  // Initialize Fan property
43
45
  this.Fan = {
44
- Service: accessory.getService(this.hap.Service.Fanv2)!,
46
+ Service: accessory.getService(this.hap.Service.Fanv2) as Service,
45
47
  Active: accessory.context.Active || this.hap.Characteristic.Active.INACTIVE,
46
48
  SwingMode: accessory.context.SwingMode || this.hap.Characteristic.SwingMode.SWING_DISABLED,
47
49
  RotationSpeed: accessory.context.RotationSpeed || 0,
@@ -49,7 +51,7 @@ export class Fan extends deviceBase {
49
51
 
50
52
  // Initialize Battery property
51
53
  this.Battery = {
52
- Service: accessory.getService(this.hap.Service.Battery)!,
54
+ Service: accessory.getService(this.hap.Service.Battery) as Service,
53
55
  BatteryLevel: accessory.context.BatteryLevel || 100,
54
56
  StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
55
57
  ChargingState: accessory.context.ChargingState || this.hap.Characteristic.ChargingState.NOT_CHARGING,
package/src/device/hub.ts CHANGED
@@ -2,12 +2,15 @@
2
2
  *
3
3
  * hub.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
- import { Subject, interval, skipWhile } from 'rxjs';
5
+ import { Units } from 'homebridge';
6
6
  import { deviceBase } from './device.js';
7
- import { SwitchBotPlatform } from '../platform.js';
8
- import { Devices, device, deviceStatus, devicesConfig } from '../settings.js';
9
- import { CharacteristicValue, PlatformAccessory, Service, Units } from 'homebridge';
7
+ import { Devices } from '../settings.js';
10
8
  import { convertUnits } from '../utils.js';
9
+ import { Subject, interval, skipWhile } from 'rxjs';
10
+
11
+ import type { SwitchBotPlatform } from '../platform.js';
12
+ import type { device, deviceStatus, devicesConfig } from '../settings.js';
13
+ import type { CharacteristicValue, PlatformAccessory, Service} from 'homebridge';
11
14
 
12
15
  export class Hub extends deviceBase {
13
16
  // Services
@@ -43,7 +46,7 @@ export class Hub extends deviceBase {
43
46
  // Initialize Temperature Sensor property
44
47
  if (!device.hub?.hide_temperature) {
45
48
  this.TemperatureSensor = {
46
- Service: accessory.getService(this.hap.Service.TemperatureSensor)!,
49
+ Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
47
50
  CurrentTemperature: accessory.context.CurrentTemperature || 0,
48
51
  };
49
52
  }
@@ -51,7 +54,7 @@ export class Hub extends deviceBase {
51
54
  // Initialize Humidity Sensor property
52
55
  if (!device.hub?.hide_humidity) {
53
56
  this.HumiditySensor = {
54
- Service: accessory.getService(this.hap.Service.HumiditySensor)!,
57
+ Service: accessory.getService(this.hap.Service.HumiditySensor) as Service,
55
58
  CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 0,
56
59
  };
57
60
  }
@@ -59,7 +62,7 @@ export class Hub extends deviceBase {
59
62
  // Initialize Light Sensor property
60
63
  if (!device.hub?.hide_lightsensor) {
61
64
  this.LightSensor = {
62
- Service: accessory.getService(this.hap.Service.LightSensor)!,
65
+ Service: accessory.getService(this.hap.Service.LightSensor) as Service,
63
66
  CurrentAmbientLightLevel: accessory.context.CurrentAmbientLightLevel || 0.0001,
64
67
  };
65
68
  }
@@ -1,11 +1,13 @@
1
1
  import { request } from 'undici';
2
2
  import { deviceBase } from './device.js';
3
3
  import { interval, Subject } from 'rxjs';
4
- import { SwitchBotPlatform } from '../platform.js';
5
- import { debounceTime, skipWhile, take, tap } from 'rxjs/operators';
6
- import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
7
- import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
4
+ import { Devices } from '../settings.js';
8
5
  import { convertUnits } from '../utils.js';
6
+ import { debounceTime, skipWhile, take, tap } from 'rxjs/operators';
7
+
8
+ import type { SwitchBotPlatform } from '../platform.js';
9
+ import type { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
10
+ import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
9
11
 
10
12
  /**
11
13
  * Platform Accessory
@@ -45,7 +47,7 @@ export class Humidifier extends deviceBase {
45
47
 
46
48
  // Initialize the HumidifierDehumidifier Service
47
49
  this.HumidifierDehumidifier = {
48
- Service: accessory.getService(this.hap.Service.HumidifierDehumidifier)!,
50
+ Service: accessory.getService(this.hap.Service.HumidifierDehumidifier) as Service,
49
51
  Active: accessory.context.Active || this.hap.Characteristic.Active.ACTIVE,
50
52
  WaterLevel: accessory.context.WaterLevel || 100,
51
53
  CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 50,
@@ -59,7 +61,7 @@ export class Humidifier extends deviceBase {
59
61
  // Initialize the Temperature Sensor Service
60
62
  if (!device.humidifier?.hide_temperature) {
61
63
  this.TemperatureSensor = {
62
- Service: accessory.getService(this.hap.Service.TemperatureSensor)!,
64
+ Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
63
65
  CurrentTemperature: accessory.context.CurrentTemperature || 30,
64
66
  };
65
67
  }
@@ -158,7 +160,7 @@ export class Humidifier extends deviceBase {
158
160
  `current:(${CurrentTemperature}, ${CurrentRelativeHumidity})`);
159
161
  this.HumidifierDehumidifier.CurrentRelativeHumidity = humidity;
160
162
  if (!this.device.humidifier?.hide_temperature) {
161
- this.TemperatureSensor!.CurrentTemperature = convertUnits(temperature, context.scale, device.iosensor?.convertUnitTo);
163
+ this.TemperatureSensor!.CurrentTemperature = convertUnits(temperature, context.scale, device.iosensor?.convertUnitTo);
162
164
  }
163
165
  this.updateHomeKitCharacteristics();
164
166
  } catch (e: any) {
@@ -2,12 +2,15 @@
2
2
  *
3
3
  * iosensor.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
+ import { Units } from 'homebridge';
5
6
  import { deviceBase } from './device.js';
6
- import { SwitchBotPlatform } from '../platform.js';
7
- import { Subject, interval, skipWhile } from 'rxjs';
8
- import { CharacteristicValue, PlatformAccessory, Service, Units } from 'homebridge';
9
- import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
7
+ import { Devices } from '../settings.js';
10
8
  import { convertUnits } from '../utils.js';
9
+ import { Subject, interval, skipWhile } from 'rxjs';
10
+
11
+ import type { SwitchBotPlatform } from '../platform.js';
12
+ import type { CharacteristicValue, PlatformAccessory, Service} from 'homebridge';
13
+ import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
11
14
 
12
15
  /**
13
16
  * Platform Accessory
@@ -16,7 +19,7 @@ import { convertUnits } from '../utils.js';
16
19
  */
17
20
  export class IOSensor extends deviceBase {
18
21
  // Services
19
- private Battery!: {
22
+ private Battery: {
20
23
  Service: Service;
21
24
  BatteryLevel: CharacteristicValue;
22
25
  StatusLowBattery: CharacteristicValue;
@@ -49,7 +52,7 @@ export class IOSensor extends deviceBase {
49
52
  // Initialize Temperature Sensor property
50
53
  if (!device.iosensor?.hide_temperature) {
51
54
  this.TemperatureSensor = {
52
- Service: accessory.getService(this.hap.Service.TemperatureSensor)!,
55
+ Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
53
56
  CurrentTemperature: accessory.context.CurrentTemperature || 30,
54
57
  };
55
58
  }
@@ -57,14 +60,14 @@ export class IOSensor extends deviceBase {
57
60
  // Initialize Humidity Sensor property
58
61
  if (!device.iosensor?.hide_humidity) {
59
62
  this.HumiditySensor = {
60
- Service: accessory.getService(this.hap.Service.HumiditySensor)!,
63
+ Service: accessory.getService(this.hap.Service.HumiditySensor) as Service,
61
64
  CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 50,
62
65
  };
63
66
  }
64
67
 
65
68
  // Initialize Battery property
66
69
  this.Battery = {
67
- Service: accessory.getService(this.hap.Service.Battery)!,
70
+ Service: accessory.getService(this.hap.Service.Battery) as Service,
68
71
  BatteryLevel: accessory.context.BatteryLevel || 100,
69
72
  StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
70
73
  };
@@ -1,11 +1,13 @@
1
1
  import { request } from 'undici';
2
- import { interval, skipWhile, Subject } from 'rxjs';
3
2
  import { deviceBase } from './device.js';
4
- import { SwitchBotPlatform } from '../platform.js';
3
+ import { Devices } from '../settings.js';
5
4
  import { hs2rgb, rgb2hs, m2hs } from '../utils.js';
5
+ import { interval, skipWhile, Subject } from 'rxjs';
6
6
  import { debounceTime, take, tap } from 'rxjs/operators';
7
- import { device, devicesConfig, deviceStatus, serviceData, Devices } from '../settings.js';
8
- import { Service, PlatformAccessory, CharacteristicValue, ControllerConstructor, Controller, ControllerServiceMap } from 'homebridge';
7
+
8
+ import type { SwitchBotPlatform } from '../platform.js';
9
+ import type { device, devicesConfig, deviceStatus, serviceData} from '../settings.js';
10
+ import type { Service, PlatformAccessory, CharacteristicValue, ControllerConstructor, Controller, ControllerServiceMap } from 'homebridge';
9
11
 
10
12
  /**
11
13
  * Platform Accessory
@@ -44,7 +46,7 @@ export class StripLight extends deviceBase {
44
46
 
45
47
  // Initialize the LightBulb property
46
48
  this.LightBulb = {
47
- Service: accessory.getService(this.hap.Service.Lightbulb)!,
49
+ Service: accessory.getService(this.hap.Service.Lightbulb) as Service,
48
50
  On: accessory.context.On || false,
49
51
  Hue: accessory.context.Hue || 0,
50
52
  Saturation: accessory.context.Saturation || 0,
@@ -1,10 +1,12 @@
1
1
  import { request } from 'undici';
2
2
  import { deviceBase } from './device.js';
3
3
  import { interval, Subject } from 'rxjs';
4
- import { SwitchBotPlatform } from '../platform.js';
4
+ import { Devices } from '../settings.js';
5
5
  import { debounceTime, skipWhile, take, tap } from 'rxjs/operators';
6
- import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
7
- import { device, devicesConfig, deviceStatus, Devices, serviceData } from '../settings.js';
6
+
7
+ import type { SwitchBotPlatform } from '../platform.js';
8
+ import type { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
9
+ import type { device, devicesConfig, deviceStatus, serviceData } from '../settings.js';
8
10
 
9
11
  export class Lock extends deviceBase {
10
12
  // Services
@@ -46,14 +48,14 @@ export class Lock extends deviceBase {
46
48
 
47
49
  // Initialize LockMechanism property
48
50
  this.LockMechanism = {
49
- Service: accessory.getService(this.hap.Service.LockMechanism)!,
51
+ Service: accessory.getService(this.hap.Service.LockMechanism) as Service,
50
52
  LockTargetState: accessory.context.LockTargetState || this.hap.Characteristic.LockTargetState.SECURED,
51
53
  LockCurrentState: accessory.context.LockCurrentState || this.hap.Characteristic.LockCurrentState.SECURED,
52
54
  };
53
55
 
54
56
  // Initialize Battery property
55
57
  this.Battery = {
56
- Service: accessory.getService(this.hap.Service.Battery)!,
58
+ Service: accessory.getService(this.hap.Service.Battery) as Service,
57
59
  BatteryLevel: accessory.context.BatteryLevel || 100,
58
60
  StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
59
61
  };
@@ -61,7 +63,7 @@ export class Lock extends deviceBase {
61
63
  // Initialize ContactSensor property
62
64
  if (!this.device.lock?.hide_contactsensor) {
63
65
  this.ContactSensor = {
64
- Service: accessory.getService(this.hap.Service.ContactSensor)!,
66
+ Service: accessory.getService(this.hap.Service.ContactSensor) as Service,
65
67
  ContactSensorState: accessory.context.ContactSensorState || this.hap.Characteristic.ContactSensorState.CONTACT_DETECTED,
66
68
  };
67
69
  }
@@ -69,7 +71,7 @@ export class Lock extends deviceBase {
69
71
  // Initialize Latch Button Service
70
72
  if (device.lock?.activate_latchbutton) {
71
73
  this.Switch = {
72
- Service: accessory.getService(this.hap.Service.Switch)!,
74
+ Service: accessory.getService(this.hap.Service.Switch) as Service,
73
75
  On: accessory.context.On || false,
74
76
  };
75
77
  }
@@ -2,16 +2,19 @@
2
2
  *
3
3
  * meter.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
+ import { Units } from 'homebridge';
6
+ import { Devices } from '../settings.js';
5
7
  import { deviceBase } from './device.js';
6
- import { SwitchBotPlatform } from '../platform.js';
7
8
  import { convertUnits } from '../utils.js';
8
9
  import { Subject, interval, skipWhile } from 'rxjs';
9
- import { CharacteristicValue, PlatformAccessory, Service, Units } from 'homebridge';
10
- import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
10
+
11
+ import type { SwitchBotPlatform } from '../platform.js';
12
+ import type { CharacteristicValue, PlatformAccessory, Service} from 'homebridge';
13
+ import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
11
14
 
12
15
  export class Meter extends deviceBase {
13
16
  // Services
14
- private Battery!: {
17
+ private Battery: {
15
18
  Service: Service;
16
19
  BatteryLevel: CharacteristicValue;
17
20
  StatusLowBattery: CharacteristicValue;
@@ -44,7 +47,7 @@ export class Meter extends deviceBase {
44
47
  // Initialize Temperature Sensor property
45
48
  if (!device.meter?.hide_temperature) {
46
49
  this.TemperatureSensor = {
47
- Service: accessory.getService(this.hap.Service.TemperatureSensor)!,
50
+ Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
48
51
  CurrentTemperature: accessory.context.CurrentTemperature || 30,
49
52
  };
50
53
  }
@@ -52,14 +55,14 @@ export class Meter extends deviceBase {
52
55
  // Initialize Humidity Sensor property
53
56
  if (!device.meter?.hide_humidity) {
54
57
  this.HumiditySensor = {
55
- Service: accessory.getService(this.hap.Service.HumiditySensor)!,
58
+ Service: accessory.getService(this.hap.Service.HumiditySensor) as Service,
56
59
  CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 50,
57
60
  };
58
61
  }
59
62
 
60
63
  // Initialize Battery property
61
64
  this.Battery = {
62
- Service: accessory.getService(this.hap.Service.Battery)!,
65
+ Service: accessory.getService(this.hap.Service.Battery) as Service,
63
66
  BatteryLevel: accessory.context.BatteryLevel || 100,
64
67
  StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
65
68
  };
@@ -2,11 +2,14 @@
2
2
  *
3
3
  * meterplus.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
+ import { Units } from 'homebridge';
6
+ import { Devices } from '../settings.js';
5
7
  import { deviceBase } from './device.js';
6
- import { SwitchBotPlatform } from '../platform.js';
7
8
  import { Subject, interval, skipWhile } from 'rxjs';
8
- import { CharacteristicValue, PlatformAccessory, Service, Units } from 'homebridge';
9
- import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
9
+
10
+ import type { SwitchBotPlatform } from '../platform.js';
11
+ import type { CharacteristicValue, PlatformAccessory, Service} from 'homebridge';
12
+ import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
10
13
 
11
14
  /**
12
15
  * Platform Accessory
@@ -15,7 +18,7 @@ import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../se
15
18
  */
16
19
  export class MeterPlus extends deviceBase {
17
20
  // Services
18
- private Battery!: {
21
+ private Battery: {
19
22
  Service: Service;
20
23
  BatteryLevel: CharacteristicValue;
21
24
  StatusLowBattery: CharacteristicValue;
@@ -48,7 +51,7 @@ export class MeterPlus extends deviceBase {
48
51
  // Initialize Temperature Sensor property
49
52
  if (!device.meter?.hide_temperature) {
50
53
  this.TemperatureSensor = {
51
- Service: accessory.getService(this.hap.Service.TemperatureSensor)!,
54
+ Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
52
55
  CurrentTemperature: accessory.context.CurrentTemperature || 30,
53
56
  };
54
57
  }
@@ -56,14 +59,14 @@ export class MeterPlus extends deviceBase {
56
59
  // Initialize Humidity Sensor property
57
60
  if (!device.meter?.hide_humidity) {
58
61
  this.HumiditySensor = {
59
- Service: accessory.getService(this.hap.Service.HumiditySensor)!,
62
+ Service: accessory.getService(this.hap.Service.HumiditySensor) as Service,
60
63
  CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 50,
61
64
  };
62
65
  }
63
66
 
64
67
  // Initialize Battery property
65
68
  this.Battery = {
66
- Service: accessory.getService(this.hap.Service.Battery)!,
69
+ Service: accessory.getService(this.hap.Service.Battery) as Service,
67
70
  BatteryLevel: accessory.context.BatteryLevel || 100,
68
71
  StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
69
72
  };
@@ -3,11 +3,13 @@
3
3
  *
4
4
  * motion.ts: @switchbot/homebridge-switchbot.
5
5
  */
6
+ import { Devices } from '../settings.js';
6
7
  import { deviceBase } from './device.js';
7
- import { SwitchBotPlatform } from '../platform.js';
8
8
  import { Subject, interval, skipWhile } from 'rxjs';
9
- import { CharacteristicValue, PlatformAccessory, Service } from 'homebridge';
10
- import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
9
+
10
+ import type { SwitchBotPlatform } from '../platform.js';
11
+ import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge';
12
+ import type { device, devicesConfig, serviceData, deviceStatus } from '../settings.js';
11
13
 
12
14
  /**
13
15
  * Platform Accessory
@@ -16,13 +18,13 @@ import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../se
16
18
  */
17
19
  export class Motion extends deviceBase {
18
20
  // Services
19
- private Battery!: {
21
+ private Battery: {
20
22
  Service: Service;
21
23
  BatteryLevel: CharacteristicValue;
22
24
  StatusLowBattery: CharacteristicValue;
23
25
  };
24
26
 
25
- private MotionSensor!: {
27
+ private MotionSensor: {
26
28
  Service: Service;
27
29
  MotionDetected: CharacteristicValue;
28
30
  };
@@ -48,20 +50,36 @@ export class Motion extends deviceBase {
48
50
 
49
51
  // Initialize Motion Sensor property
50
52
  this.MotionSensor = {
51
- Service: accessory.getService(this.hap.Service.MotionSensor)!,
53
+ Service: accessory.getService(this.hap.Service.MotionSensor) ?? accessory.addService(this.hap.Service.MotionSensor) as Service,
52
54
  MotionDetected: accessory.context.MotionDetected || false,
53
55
  };
54
56
 
57
+ // Initialize Battery property
58
+ this.Battery = {
59
+ Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery) as Service,
60
+ BatteryLevel: accessory.context.BatteryLevel || 100,
61
+ StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
62
+ };
63
+
64
+ // Initialize Motion Sensor property
65
+ if (!device.motion?.hide_lightsensor) {
66
+ this.LightSensor = {
67
+ Service: accessory.getService(this.hap.Service.LightSensor) as Service,
68
+ CurrentAmbientLightLevel: accessory.context.CurrentAmbientLightLevel || 0,
69
+ };
70
+ };
71
+
72
+
55
73
  // Retrieve initial values and updateHomekit
56
74
  this.refreshStatus();
57
75
 
58
- // get the Battery service if it exists, otherwise create a new Motion service
59
- // you can create multiple services for each accessory
60
- const MotionSensorService = `${accessory.displayName} Motion Sensor`;
61
- (this.MotionSensor.Service = accessory.getService(this.hap.Service.MotionSensor)
62
- || accessory.addService(this.hap.Service.MotionSensor)), MotionSensorService;
76
+ /*(this.MotionSensor.Service = accessory.getService(this.hap.Service.MotionSensor)
77
+ || accessory.addService(this.hap.Service.MotionSensor)), `${accessory.displayName} Motion Sensor`;*/
78
+
79
+ if (this.MotionSensor.Service) {
80
+ this.MotionSensor.Service.setCharacteristic(this.hap.Characteristic.Name, accessory.displayName);
81
+ }
63
82
 
64
- this.MotionSensor.Service.setCharacteristic(this.hap.Characteristic.Name, accessory.displayName);
65
83
  // each service must implement at-minimum the "required characteristics" for the given service type
66
84
  // see https://developers.homebridge.io/#/service/MotionSensor
67
85
 
@@ -82,12 +100,14 @@ export class Motion extends deviceBase {
82
100
  }
83
101
 
84
102
  // Battery Service
85
- const BatteryService = `${accessory.displayName} Battery`;
103
+ /*const BatteryService = `${accessory.displayName} Battery`;
86
104
  (this.Battery.Service = this.accessory.getService(this.hap.Service.Battery)
87
- || accessory.addService(this.hap.Service.Battery)), BatteryService;
105
+ || accessory.addService(this.hap.Service.Battery)), BatteryService;*/
88
106
 
89
- this.Battery.Service.setCharacteristic(this.hap.Characteristic.Name, BatteryService);
90
- this.Battery.Service.setCharacteristic(this.hap.Characteristic.ChargingState, this.hap.Characteristic.ChargingState.NOT_CHARGEABLE);
107
+ if (this.Battery.Service) {
108
+ this.Battery.Service.setCharacteristic(this.hap.Characteristic.Name, `${accessory.displayName} Battery`);
109
+ this.Battery.Service.setCharacteristic(this.hap.Characteristic.ChargingState, this.hap.Characteristic.ChargingState.NOT_CHARGEABLE);
110
+ }
91
111
 
92
112
  // Retrieve initial values and updateHomekit
93
113
  this.updateHomeKitCharacteristics();
@@ -3,11 +3,13 @@
3
3
  * plug.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import { request } from 'undici';
6
+ import { Devices } from '../settings.js';
6
7
  import { deviceBase } from './device.js';
7
- import { SwitchBotPlatform } from '../platform.js';
8
8
  import { Subject, debounceTime, interval, skipWhile, take, tap } from 'rxjs';
9
- import { CharacteristicValue, PlatformAccessory, Service } from 'homebridge';
10
- import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
9
+
10
+ import type { SwitchBotPlatform } from '../platform.js';
11
+ import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge';
12
+ import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
11
13
  export class Plug extends deviceBase {
12
14
  // Services
13
15
  private Outlet: {
@@ -31,7 +33,7 @@ export class Plug extends deviceBase {
31
33
 
32
34
  // Initialize Outlet property
33
35
  this.Outlet = {
34
- Service: accessory.getService(this.hap.Service.Outlet)!,
36
+ Service: accessory.getService(this.hap.Service.Outlet) as Service,
35
37
  On: accessory.context.On || false,
36
38
  };
37
39
 
@@ -3,12 +3,14 @@
3
3
  * robotvacuumcleaner.ts: @switchbot/homebridge-switchbot.
4
4
  */
5
5
  import { request } from 'undici';
6
- import { Subject, interval, skipWhile } from 'rxjs';
6
+ import { Devices } from '../settings.js';
7
7
  import { deviceBase } from './device.js';
8
- import { SwitchBotPlatform } from '../platform.js';
8
+ import { Subject, interval, skipWhile } from 'rxjs';
9
9
  import { debounceTime, take, tap } from 'rxjs/operators';
10
- import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
11
- import { device, devicesConfig, deviceStatus, serviceData, Devices } from '../settings.js';
10
+
11
+ import type { SwitchBotPlatform } from '../platform.js';
12
+ import type { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
13
+ import type { device, devicesConfig, deviceStatus, serviceData} from '../settings.js';
12
14
 
13
15
  export class RobotVacuumCleaner extends deviceBase {
14
16
  // Services
@@ -40,14 +42,14 @@ export class RobotVacuumCleaner extends deviceBase {
40
42
 
41
43
  // Initialize Lightbulb property
42
44
  this.LightBulb = {
43
- Service: accessory.getService(this.hap.Service.Lightbulb)!,
45
+ Service: accessory.getService(this.hap.Service.Lightbulb) as Service,
44
46
  On: accessory.context.On || false,
45
47
  Brightness: accessory.context.Brightness || 0,
46
48
  };
47
49
 
48
50
  // Initialize Battery property
49
51
  this.Battery = {
50
- Service: accessory.getService(this.hap.Service.Battery)!,
52
+ Service: accessory.getService(this.hap.Service.Battery) as Service,
51
53
  BatteryLevel: accessory.context.BatteryLevel || 100,
52
54
  StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
53
55
  };
@@ -594,7 +596,7 @@ export class RobotVacuumCleaner extends deviceBase {
594
596
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.Battery.BatteryLevel}`);
595
597
  } else {
596
598
  this.accessory.context.BatteryLevel = this.Battery.BatteryLevel;
597
- this.Battery.Service?.updateCharacteristic(this.hap.Characteristic.BatteryLevel, this.Battery.BatteryLevel);
599
+ this.Battery.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, this.Battery.BatteryLevel);
598
600
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.Battery.BatteryLevel}`);
599
601
  }
600
602
  // StatusLowBattery
@@ -4,10 +4,12 @@
4
4
  */
5
5
  import { deviceBase } from './device.js';
6
6
  import { interval, Subject } from 'rxjs';
7
+ import { Devices } from '../settings.js';
7
8
  import { skipWhile } from 'rxjs/operators';
8
- import { SwitchBotPlatform } from '../platform.js';
9
- import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
10
- import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
9
+
10
+ import type { SwitchBotPlatform } from '../platform.js';
11
+ import type { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
12
+ import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
11
13
 
12
14
  /**
13
15
  * Platform Accessory
@@ -48,7 +50,7 @@ export class WaterDetector extends deviceBase {
48
50
 
49
51
  // Initialize Battery property
50
52
  this.Battery = {
51
- Service: accessory.getService(this.hap.Service.Battery)!,
53
+ Service: accessory.getService(this.hap.Service.Battery) as Service,
52
54
  BatteryLevel: accessory.context.BatteryLevel || 100,
53
55
  StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
54
56
  ChargingState: accessory.context.ChargingState || this.hap.Characteristic.ChargingState.NOT_CHARGEABLE,
@@ -57,7 +59,7 @@ export class WaterDetector extends deviceBase {
57
59
  // Initialize Leak Sensor property
58
60
  if (!this.device.waterdetector?.hide_leak) {
59
61
  this.LeakSensor = {
60
- Service: accessory.getService(this.hap.Service.LeakSensor)!,
62
+ Service: accessory.getService(this.hap.Service.LeakSensor) as Service,
61
63
  StatusActive: accessory.context.StatusActive || false,
62
64
  LeakDetected: accessory.context.LeakDetected || this.hap.Characteristic.LeakDetected.LEAK_NOT_DETECTED,
63
65
  };
@@ -1,8 +1,7 @@
1
1
  <p class="text-center">
2
2
  <img
3
3
  src="https://raw.githubusercontent.com/OpenWonderLabs/homebridge-switchbot/latest/branding/Homebridge_x_SwitchBot.svg"
4
- alt="homebridge-switchbot logo"
5
- style="width: 50%" />
4
+ alt="homebridge-switchbot logo" style="width: 50%" />
6
5
  </p>
7
6
  <div id="pageIntro" style="display: none">
8
7
  <p class="lead text-center">Thank you for installing <strong>homebridge-switchbot</strong></p>
@@ -10,10 +9,10 @@
10
9
  <ol>
11
10
  <li class="mb-3">
12
11
  Download the SwitchBot App from either the
13
- <a href="https://apps.apple.com/us/app/switchbot/id1087374760" target="_blank" rel="noreferrer noopener">App Store</a> or the
14
- <a href="https://play.google.com/store/apps/details?id=com.theswitchbot.switchbot&hl=en_US&gl=US" target="_blank" rel="noreferrer noopener"
15
- >Play Store</a
16
- >.
12
+ <a href="https://apps.apple.com/us/app/switchbot/id1087374760" target="_blank" rel="noreferrer noopener">App
13
+ Store</a> or the
14
+ <a href="https://play.google.com/store/apps/details?id=com.theswitchbot.switchbot&hl=en_US&gl=US" target="_blank"
15
+ rel="noreferrer noopener">Play Store</a>.
17
16
  </li>
18
17
  <li class="mb-3">Select <strong>Profile</strong>.</li>
19
18
  <li class="mb-3">Select <strong>Preferences</strong>.</li>
@@ -84,31 +83,38 @@
84
83
  <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki" target="_blank">Wiki Home</a>
85
84
  </li>
86
85
  <li>
87
- <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Configuration" target="_blank">Configuration</a>
86
+ <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Configuration"
87
+ target="_blank">Configuration</a>
88
88
  </li>
89
89
  <li>
90
- <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Beta-Version" target="_blank">Beta Version</a>
90
+ <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Beta-Version" target="_blank">Beta
91
+ Version</a>
91
92
  </li>
92
93
  <li>
93
- <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Node-Version" target="_blank">Node Version</a>
94
+ <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Node-Version" target="_blank">Node
95
+ Version</a>
94
96
  </li>
95
97
  <li>
96
- <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Uninstallation" target="_blank">Uninstallation</a>
98
+ <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Uninstallation"
99
+ target="_blank">Uninstallation</a>
97
100
  </li>
98
101
  </ul>
99
102
  <h5>Features</h5>
100
103
  <ul>
101
104
  <li>
102
- <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Supported-Devices" target="_blank">Supported Devices</a>
105
+ <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Supported-Devices" target="_blank">Supported
106
+ Devices</a>
103
107
  </li>
104
108
  </ul>
105
109
  <h5>Help/About</h5>
106
110
  <ul>
107
111
  <li>
108
- <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/issues/new/choose" target="_blank">Support Request</a>
112
+ <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/issues/new/choose" target="_blank">Support
113
+ Request</a>
109
114
  </li>
110
115
  <li>
111
- <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/blob/latest/CHANGELOG.md" target="_blank">Changelog</a>
116
+ <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/blob/latest/CHANGELOG.md"
117
+ target="_blank">Changelog</a>
112
118
  </li>
113
119
  </ul>
114
120
  </div>
@@ -237,4 +243,4 @@
237
243
  homebridge.hideSpinner();
238
244
  }
239
245
  })();
240
- </script>
246
+ </script>