@switchbot/homebridge-switchbot 3.5.0-beta.6 → 3.5.0-beta.61

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 (177) hide show
  1. package/.vscode/settings.json +4 -1
  2. package/CHANGELOG.md +4 -1
  3. package/config.schema.json +120 -17
  4. package/dist/device/blindtilt.d.ts +23 -96
  5. package/dist/device/blindtilt.d.ts.map +1 -1
  6. package/dist/device/blindtilt.js +408 -779
  7. package/dist/device/blindtilt.js.map +1 -1
  8. package/dist/device/bot.d.ts +26 -72
  9. package/dist/device/bot.d.ts.map +1 -1
  10. package/dist/device/bot.js +696 -822
  11. package/dist/device/bot.js.map +1 -1
  12. package/dist/device/ceilinglight.d.ts +14 -68
  13. package/dist/device/ceilinglight.d.ts.map +1 -1
  14. package/dist/device/ceilinglight.js +237 -606
  15. package/dist/device/ceilinglight.js.map +1 -1
  16. package/dist/device/colorbulb.d.ts +14 -75
  17. package/dist/device/colorbulb.d.ts.map +1 -1
  18. package/dist/device/colorbulb.js +280 -658
  19. package/dist/device/colorbulb.js.map +1 -1
  20. package/dist/device/contact.d.ts +15 -66
  21. package/dist/device/contact.d.ts.map +1 -1
  22. package/dist/device/contact.js +242 -544
  23. package/dist/device/contact.js.map +1 -1
  24. package/dist/device/curtain.d.ts +19 -88
  25. package/dist/device/curtain.d.ts.map +1 -1
  26. package/dist/device/curtain.js +402 -805
  27. package/dist/device/curtain.js.map +1 -1
  28. package/dist/device/device.d.ts +59 -0
  29. package/dist/device/device.d.ts.map +1 -0
  30. package/dist/device/device.js +684 -0
  31. package/dist/device/device.js.map +1 -0
  32. package/dist/device/fan.d.ts +51 -0
  33. package/dist/device/fan.d.ts.map +1 -0
  34. package/dist/device/fan.js +535 -0
  35. package/dist/device/fan.js.map +1 -0
  36. package/dist/device/hub.d.ts +16 -60
  37. package/dist/device/hub.d.ts.map +1 -1
  38. package/dist/device/hub.js +246 -613
  39. package/dist/device/hub.js.map +1 -1
  40. package/dist/device/humidifier.d.ts +11 -66
  41. package/dist/device/humidifier.d.ts.map +1 -1
  42. package/dist/device/humidifier.js +232 -593
  43. package/dist/device/humidifier.js.map +1 -1
  44. package/dist/device/iosensor.d.ts +11 -64
  45. package/dist/device/iosensor.d.ts.map +1 -1
  46. package/dist/device/iosensor.js +185 -600
  47. package/dist/device/iosensor.js.map +1 -1
  48. package/dist/device/lightstrip.d.ts +11 -69
  49. package/dist/device/lightstrip.d.ts.map +1 -1
  50. package/dist/device/lightstrip.js +277 -586
  51. package/dist/device/lightstrip.js.map +1 -1
  52. package/dist/device/lock.d.ts +16 -63
  53. package/dist/device/lock.d.ts.map +1 -1
  54. package/dist/device/lock.js +241 -560
  55. package/dist/device/lock.js.map +1 -1
  56. package/dist/device/meter.d.ts +14 -64
  57. package/dist/device/meter.d.ts.map +1 -1
  58. package/dist/device/meter.js +181 -593
  59. package/dist/device/meter.js.map +1 -1
  60. package/dist/device/meterplus.d.ts +14 -65
  61. package/dist/device/meterplus.d.ts.map +1 -1
  62. package/dist/device/meterplus.js +170 -593
  63. package/dist/device/meterplus.js.map +1 -1
  64. package/dist/device/motion.d.ts +13 -69
  65. package/dist/device/motion.d.ts.map +1 -1
  66. package/dist/device/motion.js +178 -531
  67. package/dist/device/motion.js.map +1 -1
  68. package/dist/device/plug.d.ts +9 -57
  69. package/dist/device/plug.d.ts.map +1 -1
  70. package/dist/device/plug.js +92 -458
  71. package/dist/device/plug.js.map +1 -1
  72. package/dist/device/robotvacuumcleaner.d.ts +12 -63
  73. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  74. package/dist/device/robotvacuumcleaner.js +197 -521
  75. package/dist/device/robotvacuumcleaner.js.map +1 -1
  76. package/dist/device/waterdetector.d.ts +10 -65
  77. package/dist/device/waterdetector.d.ts.map +1 -1
  78. package/dist/device/waterdetector.js +139 -495
  79. package/dist/device/waterdetector.js.map +1 -1
  80. package/dist/homebridge-ui/public/index.html +22 -16
  81. package/dist/homebridge-ui/server.js +1 -1
  82. package/dist/homebridge-ui/server.js.map +1 -1
  83. package/dist/index.d.ts +1 -1
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +2 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/irdevice/airconditioner.d.ts +9 -49
  88. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  89. package/dist/irdevice/airconditioner.js +309 -419
  90. package/dist/irdevice/airconditioner.js.map +1 -1
  91. package/dist/irdevice/airpurifier.d.ts +8 -39
  92. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  93. package/dist/irdevice/airpurifier.js +72 -304
  94. package/dist/irdevice/airpurifier.js.map +1 -1
  95. package/dist/irdevice/camera.d.ts +7 -36
  96. package/dist/irdevice/camera.d.ts.map +1 -1
  97. package/dist/irdevice/camera.js +34 -278
  98. package/dist/irdevice/camera.js.map +1 -1
  99. package/dist/irdevice/fan.d.ts +10 -43
  100. package/dist/irdevice/fan.d.ts.map +1 -1
  101. package/dist/irdevice/fan.js +100 -338
  102. package/dist/irdevice/fan.js.map +1 -1
  103. package/dist/irdevice/irdevice.d.ts +40 -0
  104. package/dist/irdevice/irdevice.d.ts.map +1 -0
  105. package/dist/irdevice/irdevice.js +330 -0
  106. package/dist/irdevice/irdevice.js.map +1 -0
  107. package/dist/irdevice/light.d.ts +12 -45
  108. package/dist/irdevice/light.d.ts.map +1 -1
  109. package/dist/irdevice/light.js +87 -357
  110. package/dist/irdevice/light.js.map +1 -1
  111. package/dist/irdevice/other.d.ts +19 -48
  112. package/dist/irdevice/other.d.ts.map +1 -1
  113. package/dist/irdevice/other.js +352 -546
  114. package/dist/irdevice/other.js.map +1 -1
  115. package/dist/irdevice/tv.d.ts +8 -40
  116. package/dist/irdevice/tv.d.ts.map +1 -1
  117. package/dist/irdevice/tv.js +82 -321
  118. package/dist/irdevice/tv.js.map +1 -1
  119. package/dist/irdevice/vacuumcleaner.d.ts +7 -36
  120. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  121. package/dist/irdevice/vacuumcleaner.js +41 -284
  122. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  123. package/dist/irdevice/waterheater.d.ts +7 -36
  124. package/dist/irdevice/waterheater.d.ts.map +1 -1
  125. package/dist/irdevice/waterheater.js +42 -287
  126. package/dist/irdevice/waterheater.js.map +1 -1
  127. package/dist/platform.d.ts +19 -6
  128. package/dist/platform.d.ts.map +1 -1
  129. package/dist/platform.js +310 -169
  130. package/dist/platform.js.map +1 -1
  131. package/dist/settings.d.ts +62 -19
  132. package/dist/settings.d.ts.map +1 -1
  133. package/dist/settings.js +16 -552
  134. package/dist/settings.js.map +1 -1
  135. package/dist/utils.d.ts +77 -0
  136. package/dist/utils.d.ts.map +1 -1
  137. package/dist/utils.js +638 -1
  138. package/dist/utils.js.map +1 -1
  139. package/eslint.config.js +96 -0
  140. package/package.json +19 -15
  141. package/src/custom.d.ts +2 -1
  142. package/src/device/blindtilt.ts +442 -814
  143. package/src/device/bot.ts +754 -915
  144. package/src/device/ceilinglight.ts +255 -633
  145. package/src/device/colorbulb.ts +295 -685
  146. package/src/device/contact.ts +277 -571
  147. package/src/device/curtain.ts +431 -835
  148. package/src/device/device.ts +709 -0
  149. package/src/device/fan.ts +591 -0
  150. package/src/device/hub.ts +286 -644
  151. package/src/device/humidifier.ts +266 -646
  152. package/src/device/iosensor.ts +220 -625
  153. package/src/device/lightstrip.ts +305 -620
  154. package/src/device/lock.ts +280 -600
  155. package/src/device/meter.ts +216 -617
  156. package/src/device/meterplus.ts +205 -619
  157. package/src/device/motion.ts +206 -556
  158. package/src/device/plug.ts +107 -490
  159. package/src/device/robotvacuumcleaner.ts +223 -550
  160. package/src/device/waterdetector.ts +160 -519
  161. package/src/homebridge-ui/public/index.html +22 -16
  162. package/src/homebridge-ui/server.ts +1 -1
  163. package/src/index.ts +4 -3
  164. package/src/irdevice/airconditioner.ts +333 -447
  165. package/src/irdevice/airpurifier.ts +92 -322
  166. package/src/irdevice/camera.ts +45 -294
  167. package/src/irdevice/fan.ts +115 -353
  168. package/src/irdevice/irdevice.ts +346 -0
  169. package/src/irdevice/light.ts +110 -385
  170. package/src/irdevice/other.ts +399 -616
  171. package/src/irdevice/tv.ts +103 -340
  172. package/src/irdevice/vacuumcleaner.ts +52 -306
  173. package/src/irdevice/waterheater.ts +53 -311
  174. package/src/platform.ts +355 -216
  175. package/src/settings.ts +116 -611
  176. package/src/utils.ts +642 -1
  177. package/src/device/waterdetector.json +0 -11
@@ -1,109 +1,73 @@
1
+ /* Copyright(C) 2021-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
2
+ *
3
+ * ceilinglight.ts: @switchbot/homebridge-switchbot.
4
+ */
1
5
  import { request } from 'undici';
2
- import { sleep } from '../utils.js';
6
+ import { deviceBase } from './device.js';
3
7
  import { interval, Subject } from 'rxjs';
8
+ import { Devices } from '../settings.js';
9
+ import { hs2rgb, rgb2hs, m2hs } from '../utils.js';
4
10
  import { debounceTime, skipWhile, take, tap } from 'rxjs/operators';
5
- import { hs2rgb, rgb2hs, m2hs, Devices } from '../settings.js';
6
11
  /**
7
12
  * Platform Accessory
8
13
  * An instance of this class is created for each accessory your platform registers
9
14
  * Each accessory may expose multiple services of different service types.
10
15
  */
11
- export class CeilingLight {
16
+ export class CeilingLight extends deviceBase {
12
17
  platform;
13
- accessory;
14
- device;
15
- api;
16
- log;
17
- config;
18
- hap;
19
18
  // Services
20
- lightBulbService;
21
- // Characteristic Values
22
- On;
23
- Hue;
24
- Saturation;
25
- Brightness;
26
- ColorTemperature;
27
- FirmwareRevision;
28
- // OpenAPI Status
29
- OpenAPI_On;
30
- OpenAPI_RGB;
31
- OpenAPI_Brightness;
32
- OpenAPI_FirmwareRevision;
33
- OpenAPI_ColorTemperature;
34
- // BLE Status
35
- BLE_Delay;
36
- BLE_On;
37
- BLE_WifiRssi;
38
- // BLE Others
39
- BLE_IsConnected;
40
- // Config
41
- set_minStep;
42
- scanDuration;
43
- deviceLogging;
44
- deviceRefreshRate;
45
- adaptiveLightingShift;
19
+ LightBulb;
46
20
  // Adaptive Lighting
47
21
  AdaptiveLightingController;
48
- minKelvin;
49
- maxKelvin;
50
- // Others
51
- cacheKelvin;
22
+ adaptiveLightingShift;
52
23
  // Updates
53
24
  ceilingLightUpdateInProgress;
54
25
  doCeilingLightUpdate;
55
- // Connection
56
- OpenAPI;
57
- BLE;
58
26
  constructor(platform, accessory, device) {
27
+ super(platform, accessory, device);
59
28
  this.platform = platform;
60
- this.accessory = accessory;
61
- this.device = device;
62
- this.api = this.platform.api;
63
- this.log = this.platform.log;
64
- this.config = this.platform.config;
65
- this.hap = this.api.hap;
66
- // Connection
67
- this.BLE = this.device.connectionType === 'BLE' || this.device.connectionType === 'BLE/OpenAPI';
68
- this.OpenAPI = this.device.connectionType === 'OpenAPI' || this.device.connectionType === 'BLE/OpenAPI';
69
29
  // default placeholders
70
- this.deviceLogs(device);
71
- this.scan(device);
72
- this.refreshRate(device);
73
30
  this.adaptiveLighting(device);
74
- this.deviceContext();
75
- this.deviceConfig(device);
76
31
  // this is subject we use to track when we need to POST changes to the SwitchBot API
77
32
  this.doCeilingLightUpdate = new Subject();
78
33
  this.ceilingLightUpdateInProgress = false;
79
- // Retrieve initial values and updateHomekit
80
- this.refreshStatus();
81
- // set accessory information
82
- accessory
83
- .getService(this.hap.Service.AccessoryInformation)
84
- .setCharacteristic(this.hap.Characteristic.Manufacturer, 'SwitchBot')
85
- .setCharacteristic(this.hap.Characteristic.Model, this.model(device))
86
- .setCharacteristic(this.hap.Characteristic.SerialNumber, device.deviceId)
87
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision);
88
- // get the Lightbulb service if it exists, otherwise create a new Lightbulb service
89
- // you can create multiple services for each accessory
90
- const lightBulbService = `${accessory.displayName} ${device.deviceType}`;
91
- (this.lightBulbService = accessory.getService(this.hap.Service.Lightbulb)
92
- || accessory.addService(this.hap.Service.Lightbulb)), lightBulbService;
93
- if (this.adaptiveLightingShift === -1 && this.accessory.context.adaptiveLighting) {
94
- this.accessory.removeService(this.lightBulbService);
95
- this.lightBulbService = this.accessory.addService(this.hap.Service.Lightbulb);
96
- this.accessory.context.adaptiveLighting = false;
97
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLighting: ${this.accessory.context.adaptiveLighting}`);
34
+ // Initialize LightBulb property
35
+ this.LightBulb = {
36
+ Name: accessory.context.LightBulbName ?? accessory.displayName,
37
+ Service: accessory.getService(this.hap.Service.Lightbulb) ?? accessory.addService(this.hap.Service.Lightbulb),
38
+ On: accessory.context.On ?? false,
39
+ Hue: accessory.context.Hue ?? 0,
40
+ Saturation: accessory.context.Saturation ?? 0,
41
+ Brightness: accessory.context.Brightness ?? 0,
42
+ ColorTemperature: accessory.context.ColorTemperature ?? 140,
43
+ };
44
+ // Adaptive Lighting
45
+ if (this.adaptiveLightingShift === -1 && accessory.context.adaptiveLighting) {
46
+ accessory.removeService(this.LightBulb.Service);
47
+ this.LightBulb.Service = accessory.addService(this.hap.Service.Lightbulb);
48
+ accessory.context.adaptiveLighting = false;
49
+ this.debugLog(`${device.deviceType}: ${accessory.displayName} adaptiveLighting: ${accessory.context.adaptiveLighting}`);
98
50
  }
99
- this.lightBulbService.setCharacteristic(this.hap.Characteristic.Name, accessory.displayName);
100
- if (!this.lightBulbService.testCharacteristic(this.hap.Characteristic.ConfiguredName)) {
101
- this.lightBulbService.addCharacteristic(this.hap.Characteristic.ConfiguredName, accessory.displayName);
51
+ if (this.adaptiveLightingShift !== -1) {
52
+ this.AdaptiveLightingController = new platform.api.hap.AdaptiveLightingController(this.LightBulb.Service, {
53
+ customTemperatureAdjustment: this.adaptiveLightingShift,
54
+ });
55
+ this.accessory.configureController(this.AdaptiveLightingController);
56
+ this.accessory.context.adaptiveLighting = true;
57
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLighting: ${this.accessory.context.adaptiveLighting},`
58
+ + ` adaptiveLightingShift: ${this.adaptiveLightingShift}`);
102
59
  }
103
- // handle on / off events using the On characteristic
104
- this.lightBulbService.getCharacteristic(this.hap.Characteristic.On).onSet(this.OnSet.bind(this));
105
- // handle Brightness events using the Brightness characteristic
106
- this.lightBulbService
60
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLightingShift: ${this.adaptiveLightingShift}`);
61
+ // Initialize LightBulb Characteristics
62
+ this.LightBulb.Service
63
+ .setCharacteristic(this.hap.Characteristic.Name, this.LightBulb.Name)
64
+ .getCharacteristic(this.hap.Characteristic.On)
65
+ .onGet(() => {
66
+ return this.LightBulb.On;
67
+ })
68
+ .onSet(this.OnSet.bind(this));
69
+ // Initialize LightBulb Brightness
70
+ this.LightBulb.Service
107
71
  .getCharacteristic(this.hap.Characteristic.Brightness)
108
72
  .setProps({
109
73
  minStep: this.minStep(device),
@@ -112,11 +76,11 @@ export class CeilingLight {
112
76
  validValueRanges: [0, 100],
113
77
  })
114
78
  .onGet(() => {
115
- return this.Brightness;
79
+ return this.LightBulb.Brightness;
116
80
  })
117
81
  .onSet(this.BrightnessSet.bind(this));
118
- // handle ColorTemperature events using the ColorTemperature characteristic
119
- this.lightBulbService
82
+ // Initialize LightBulb ColorTemperature
83
+ this.LightBulb.Service
120
84
  .getCharacteristic(this.hap.Characteristic.ColorTemperature)
121
85
  .setProps({
122
86
  minValue: 140,
@@ -124,11 +88,11 @@ export class CeilingLight {
124
88
  validValueRanges: [140, 500],
125
89
  })
126
90
  .onGet(() => {
127
- return this.ColorTemperature;
91
+ return this.LightBulb.ColorTemperature;
128
92
  })
129
93
  .onSet(this.ColorTemperatureSet.bind(this));
130
- // handle Hue events using the Hue characteristic
131
- this.lightBulbService
94
+ // Initialize LightBulb Hue
95
+ this.LightBulb.Service
132
96
  .getCharacteristic(this.hap.Characteristic.Hue)
133
97
  .setProps({
134
98
  minValue: 0,
@@ -136,11 +100,11 @@ export class CeilingLight {
136
100
  validValueRanges: [0, 360],
137
101
  })
138
102
  .onGet(() => {
139
- return this.Hue;
103
+ return this.LightBulb.Hue;
140
104
  })
141
105
  .onSet(this.HueSet.bind(this));
142
- // handle Hue events using the Hue characteristic
143
- this.lightBulbService
106
+ // Initialize LightBulb Saturation
107
+ this.LightBulb.Service
144
108
  .getCharacteristic(this.hap.Characteristic.Saturation)
145
109
  .setProps({
146
110
  minValue: 0,
@@ -148,19 +112,12 @@ export class CeilingLight {
148
112
  validValueRanges: [0, 100],
149
113
  })
150
114
  .onGet(() => {
151
- return this.Saturation;
115
+ return this.LightBulb.Saturation;
152
116
  })
153
117
  .onSet(this.SaturationSet.bind(this));
154
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLightingShift: ${this.adaptiveLightingShift}`);
155
- if (this.adaptiveLightingShift !== -1) {
156
- this.AdaptiveLightingController = new platform.api.hap.AdaptiveLightingController(this.lightBulbService, {
157
- customTemperatureAdjustment: this.adaptiveLightingShift,
158
- });
159
- this.accessory.configureController(this.AdaptiveLightingController);
160
- this.accessory.context.adaptiveLighting = true;
161
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLighting: ${this.accessory.context.adaptiveLighting},` +
162
- ` adaptiveLightingShift: ${this.adaptiveLightingShift}`);
163
- }
118
+ accessory.context.LightBulbName = this.LightBulb.Name;
119
+ // Retrieve initial values and updateHomekit
120
+ this.refreshStatus();
164
121
  // Update Homekit
165
122
  this.updateHomeKitCharacteristics();
166
123
  // Start an update interval
@@ -170,20 +127,41 @@ export class CeilingLight {
170
127
  await this.refreshStatus();
171
128
  });
172
129
  //regisiter webhook event handler
173
- if (this.device.webhook) {
174
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} is listening webhook.`);
130
+ if (device.webhook) {
131
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} is listening webhook.`);
175
132
  this.platform.webhookEventHandler[this.device.deviceId] = async (context) => {
176
133
  try {
177
134
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} received Webhook: ${JSON.stringify(context)}`);
178
135
  const { powerState, brightness, colorTemperature } = context;
179
- const { On, Brightness, ColorTemperature } = this;
136
+ const { On, Brightness, ColorTemperature } = this.LightBulb;
180
137
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ` +
181
138
  '(powerState, brightness, colorTemperature) = ' +
182
139
  `Webhook:(${powerState}, ${brightness}, ${colorTemperature}), ` +
183
140
  `current:(${On}, ${Brightness}, ${ColorTemperature})`);
184
- this.On = powerState === 'ON' ? true : false;
185
- this.Brightness = brightness;
186
- this.ColorTemperature = colorTemperature;
141
+ // On
142
+ this.LightBulb.On = powerState === 'ON' ? true : false;
143
+ if (this.accessory.context.Brightness !== this.LightBulb.On) {
144
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
145
+ }
146
+ else {
147
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
148
+ }
149
+ // Brightness
150
+ this.LightBulb.Brightness = brightness;
151
+ if (this.accessory.context.Brightness !== this.LightBulb.Brightness) {
152
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
153
+ }
154
+ else {
155
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
156
+ }
157
+ // ColorTemperature
158
+ this.LightBulb.ColorTemperature = colorTemperature;
159
+ if (this.accessory.context.ColorTemperature !== this.LightBulb.ColorTemperature) {
160
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.LightBulb.ColorTemperature}`);
161
+ }
162
+ else {
163
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.LightBulb.ColorTemperature}`);
164
+ }
187
165
  this.updateHomeKitCharacteristics();
188
166
  }
189
167
  catch (e) {
@@ -210,88 +188,72 @@ export class CeilingLight {
210
188
  this.ceilingLightUpdateInProgress = false;
211
189
  });
212
190
  }
213
- model(device) {
214
- let model;
215
- if (device.deviceType === 'Ceiling Light') {
216
- model = 'W2612230' || 'W2612240';
217
- }
218
- else if (device.deviceType === 'Ceiling Light Pro') {
219
- model = 'W2612210' || 'W2612220';
220
- }
221
- else {
222
- model = 'unknown';
223
- }
224
- return model;
225
- }
226
191
  /**
227
- * Parse the device status from the SwitchBot api
192
+ * Parse the device status from the SwitchBotBLE API
228
193
  */
229
- async parseStatus() {
230
- if (!this.device.enableCloudService && this.OpenAPI) {
231
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} parseStatus enableCloudService: ${this.device.enableCloudService}`);
232
- }
233
- /*if (this.BLE) {
234
- await this.BLEparseStatus();
235
- } else*/ if (this.OpenAPI && this.platform.config.credentials?.token) {
236
- await this.openAPIparseStatus();
237
- }
238
- else {
239
- await this.offlineOff();
240
- this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Connection Type:` + ` ${this.device.connectionType}, parseStatus will not happen.`);
241
- }
242
- }
243
- async BLEparseStatus() {
194
+ async BLEparseStatus(serviceData) {
244
195
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEparseStatus`);
245
196
  // State
246
- switch (this.BLE_On) {
197
+ switch (serviceData.state) {
247
198
  case 'on':
248
- this.On = true;
199
+ this.LightBulb.On = true;
249
200
  break;
250
201
  default:
251
- this.On = false;
202
+ this.LightBulb.On = false;
252
203
  }
253
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
204
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
254
205
  }
255
- async openAPIparseStatus() {
206
+ /**
207
+ * Parse the device status from the SwitchBot OpenAPI
208
+ */
209
+ async openAPIparseStatus(deviceStatus) {
256
210
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIparseStatus`);
257
- switch (this.OpenAPI_On) {
211
+ switch (deviceStatus.body.power) {
258
212
  case 'on':
259
- this.On = true;
213
+ this.LightBulb.On = true;
260
214
  break;
261
215
  default:
262
- this.On = false;
216
+ this.LightBulb.On = false;
263
217
  }
264
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
218
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
265
219
  // Brightness
266
- this.Brightness = Number(this.OpenAPI_Brightness);
267
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.Brightness}`);
220
+ this.LightBulb.Brightness = Number(deviceStatus.body.brightness);
221
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
268
222
  // Color, Hue & Brightness
269
- if (this.OpenAPI_RGB) {
270
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} color: ${JSON.stringify(this.OpenAPI_RGB)}`);
271
- const [red, green, blue] = this.OpenAPI_RGB.split(':');
223
+ if (deviceStatus.body.color) {
224
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} color: ${JSON.stringify(deviceStatus.body.color)}`);
225
+ const [red, green, blue] = deviceStatus.body.color.split(':');
272
226
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} red: ${JSON.stringify(red)}`);
273
227
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} green: ${JSON.stringify(green)}`);
274
228
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} blue: ${JSON.stringify(blue)}`);
275
229
  const [hue, saturation] = rgb2hs(Number(red), Number(green), Number(blue));
276
230
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}` + ` hs: ${JSON.stringify(rgb2hs(Number(red), Number(green), Number(blue)))}`);
277
231
  // Hue
278
- this.Hue = hue;
279
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.Hue}`);
232
+ this.LightBulb.Hue = hue;
233
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.LightBulb.Hue}`);
280
234
  // Saturation
281
- this.Saturation = saturation;
282
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.Saturation}`);
235
+ this.LightBulb.Saturation = saturation;
236
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.LightBulb.Saturation}`);
283
237
  }
284
238
  // ColorTemperature
285
- if (!Number.isNaN(this.OpenAPI_ColorTemperature)) {
286
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} OpenAPI ColorTemperature: ${this.OpenAPI_ColorTemperature}`);
287
- const mired = Math.round(1000000 / this.OpenAPI_ColorTemperature);
288
- this.ColorTemperature = Number(mired);
289
- this.ColorTemperature = Math.max(Math.min(this.ColorTemperature, 500), 140);
290
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.ColorTemperature}`);
239
+ if (!Number.isNaN(deviceStatus.body.colorTemperature)) {
240
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} OpenAPI ColorTemperature: ${deviceStatus.body.colorTemperature}`);
241
+ const mired = Math.round(1000000 / deviceStatus.body.colorTemperature);
242
+ this.LightBulb.ColorTemperature = Number(mired);
243
+ this.LightBulb.ColorTemperature = Math.max(Math.min(this.LightBulb.ColorTemperature, 500), 140);
244
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.LightBulb.ColorTemperature}`);
245
+ }
246
+ // Firmware Version
247
+ const version = deviceStatus.body.version?.toString();
248
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
249
+ if (deviceStatus.body.version) {
250
+ this.accessory.context.version = version?.replace(/^V|-.*$/g, '');
251
+ this.accessory
252
+ .getService(this.hap.Service.AccessoryInformation)
253
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
254
+ .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
255
+ .updateValue(this.accessory.context.version);
291
256
  }
292
- // FirmwareRevision
293
- this.FirmwareRevision = this.OpenAPI_FirmwareRevision;
294
- this.accessory.context.FirmwareRevision = this.FirmwareRevision;
295
257
  }
296
258
  /**
297
259
  * Asks the SwitchBot API for the latest device information
@@ -324,110 +286,42 @@ export class CeilingLight {
324
286
  // Start to monitor advertisement packets
325
287
  (async () => {
326
288
  // Start to monitor advertisement packets
327
- await switchbot.startScan({
328
- id: this.device.bleMac,
329
- });
289
+ await switchbot.startScan({ model: this.device.bleModel, id: this.device.bleMac });
330
290
  // Set an event handler
331
291
  switchbot.onadvertisement = (ad) => {
332
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ${JSON.stringify(ad, null, ' ')}`);
333
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} address: ${ad.address}, model: ${ad.model}`);
334
- if (this.device.bleMac === ad.address && ad.model === 's') {
292
+ if (this.device.bleMac === ad.address && ad.model === this.device.bleModel) {
293
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ${JSON.stringify(ad, null, ' ')}`);
294
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} address: ${ad.address}, model: ${ad.model}`);
335
295
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
336
- this.BLE_On = ad.serviceData.state;
337
- //this.delay = ad.serviceData.delay;
338
- //this.timer = ad.serviceData.timer;
339
- //this.syncUtcTime = ad.serviceData.syncUtcTime;
340
- //this.wifiRssi = ad.serviceData.wifiRssi;
341
- //this.overload = ad.serviceData.overload;
342
- //this.currentPower = ad.serviceData.currentPower;
343
296
  }
344
297
  else {
345
298
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
346
299
  }
347
300
  };
348
- // Wait 1 seconds
301
+ // Wait 10 seconds
349
302
  await switchbot.wait(this.scanDuration * 1000);
350
303
  // Stop to monitor
351
304
  await switchbot.stopScan();
352
305
  // Update HomeKit
353
- await this.BLEparseStatus();
306
+ await this.BLEparseStatus(switchbot.onadvertisement.serviceData);
354
307
  await this.updateHomeKitCharacteristics();
355
308
  })();
356
- /*if (switchbot !== false) {
357
- switchbot
358
- .startScan({
359
- model: '',
360
- id: this.device.bleMac,
361
- })
362
- .then(async () => {
363
- // Set an event handler
364
- switchbot.onadvertisement = async (ad: ad) => {
365
- this.debugLog(
366
- `${this.device.deviceType}: ${this.accessory.displayName} Config BLE Address: ${this.device.bleMac},` +
367
- ` BLE Address Found: ${ad.address}`,
368
- );
369
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
370
- this.BLE_On = ad.serviceData.state;
371
- //this.delay = ad.serviceData.delay;
372
- //this.timer = ad.serviceData.timer;
373
- //this.syncUtcTime = ad.serviceData.syncUtcTime;
374
- //this.wifiRssi = ad.serviceData.wifiRssi;
375
- //this.overload = ad.serviceData.overload;
376
- //this.currentPower = ad.serviceData.currentPower;
377
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
378
- this.debugLog(
379
- `${this.device.deviceType}: ${this.accessory.displayName} state: ${ad.serviceData.state}, ` +
380
- `delay: ${ad.serviceData.delay}, timer: ${ad.serviceData.timer}, syncUtcTime: ${ad.serviceData.syncUtcTime} ` +
381
- `wifiRssi: ${ad.serviceData.wifiRssi}, overload: ${ad.serviceData.overload}, currentPower: ${ad.serviceData.currentPower}`,
382
- );
383
-
384
- if (ad.serviceData) {
385
- this.BLE_IsConnected = true;
386
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} connected: ${this.BLE_IsConnected}`);
387
- await this.stopScanning(switchbot);
388
- } else {
389
- this.BLE_IsConnected = false;
390
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} connected: ${this.BLE_IsConnected}`);
391
- }
392
- };
393
- // Wait
394
- return await sleep(this.scanDuration * 1000);
395
- })
396
- .then(async () => {
397
- // Stop to monitor
398
- await this.stopScanning(switchbot);
399
- })
400
- .catch(async (e: any) => {
401
- this.apiError(e);
402
- this.errorLog(
403
- `${this.device.deviceType}: ${this.accessory.displayName} failed BLERefreshStatus with ${this.device.connectionType}` +
404
- ` Connection, Error Message: ${JSON.stringify(e.message)}`,
405
- );
406
- await this.BLERefreshConnection(switchbot);
407
- });
408
- } else {
409
- await this.BLERefreshConnection(switchbot);
410
- }*/
309
+ if (switchbot === undefined) {
310
+ await this.BLERefreshConnection(switchbot);
311
+ }
411
312
  }
412
313
  async openAPIRefreshStatus() {
413
314
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIRefreshStatus`);
414
315
  try {
415
- const { body, statusCode } = await request(`${Devices}/${this.device.deviceId}/status`, {
416
- headers: this.platform.generateHeaders(),
417
- });
316
+ const { body, statusCode } = await this.platform.retryRequest(this.deviceMaxRetries, this.deviceDelayBetweenRetries, `${Devices}/${this.device.deviceId}/status`, { headers: this.platform.generateHeaders() });
418
317
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} statusCode: ${statusCode}`);
419
318
  const deviceStatus = await body.json();
420
319
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus: ${JSON.stringify(deviceStatus)}`);
421
320
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
422
321
  if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
423
- this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
322
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
424
323
  + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
425
- this.OpenAPI_On = deviceStatus.body.power;
426
- this.OpenAPI_RGB = deviceStatus.body.color;
427
- this.OpenAPI_Brightness = deviceStatus.body.brightness;
428
- this.OpenAPI_ColorTemperature = deviceStatus.body.colorTemperature;
429
- this.OpenAPI_FirmwareRevision = deviceStatus.body.version;
430
- this.openAPIparseStatus();
324
+ this.openAPIparseStatus(deviceStatus);
431
325
  this.updateHomeKitCharacteristics();
432
326
  }
433
327
  else {
@@ -475,8 +369,9 @@ export class CeilingLight {
475
369
  }
476
370
  async BLEpushChanges() {
477
371
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushChanges`);
478
- if (this.On !== this.accessory.context.On) {
479
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushChanges On: ${this.On} OnCached: ${this.accessory.context.On}`);
372
+ if (this.LightBulb.On !== this.accessory.context.On) {
373
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
374
+ + ` BLEpushChanges On: ${this.LightBulb.On} OnCached: ${this.accessory.context.On}`);
480
375
  const switchbot = await this.platform.connectBLE();
481
376
  // Convert to BLE Address
482
377
  this.device.bleMac = this.device
@@ -490,11 +385,11 @@ export class CeilingLight {
490
385
  id: this.device.bleMac,
491
386
  })
492
387
  .then(async (device_list) => {
493
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
494
- return await this.retry({
495
- max: this.maxRetry(),
388
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
389
+ return await this.retryBLE({
390
+ max: await this.maxRetryBLE(),
496
391
  fn: async () => {
497
- if (this.On) {
392
+ if (this.LightBulb.On) {
498
393
  return await device_list[0].turnOn({ id: this.device.bleMac });
499
394
  }
500
395
  else {
@@ -505,7 +400,9 @@ export class CeilingLight {
505
400
  })
506
401
  .then(() => {
507
402
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
508
- this.On = false;
403
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
404
+ + `On: ${this.LightBulb.On} sent over BLE, sent successfully`);
405
+ this.LightBulb.On = false;
509
406
  })
510
407
  .catch(async (e) => {
511
408
  this.apiError(e);
@@ -515,14 +412,15 @@ export class CeilingLight {
515
412
  });
516
413
  }
517
414
  else {
518
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushChanges.` + `On: ${this.On}, ` + `OnCached: ${this.accessory.context.On}`);
415
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
416
+ + ` No BLEpushChanges: On: ${this.LightBulb.On}, ` + `OnCached: ${this.accessory.context.On}`);
519
417
  }
520
418
  }
521
419
  async openAPIpushChanges() {
522
420
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIpushChanges`);
523
- if (this.On !== this.accessory.context.On) {
421
+ if (this.LightBulb.On !== this.accessory.context.On) {
524
422
  let command = '';
525
- if (this.On) {
423
+ if (this.LightBulb.On) {
526
424
  command = 'turnOn';
527
425
  }
528
426
  else {
@@ -546,8 +444,10 @@ export class CeilingLight {
546
444
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus body: ${JSON.stringify(deviceStatus.body)}`);
547
445
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
548
446
  if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
549
- this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
447
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
550
448
  + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
449
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
450
+ + `request to SwitchBot API, body: ${JSON.stringify(bodyChange)} sent successfully`);
551
451
  }
552
452
  else {
553
453
  this.statusCode(statusCode);
@@ -562,28 +462,28 @@ export class CeilingLight {
562
462
  }
563
463
  else {
564
464
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No openAPIpushChanges.` +
565
- `On: ${this.On}, ` +
465
+ `On: ${this.LightBulb.On}, ` +
566
466
  `OnCached: ${this.accessory.context.On}`);
567
467
  }
568
468
  // Push Hue & Saturation Update
569
- if (this.On) {
469
+ if (this.LightBulb.On) {
570
470
  await this.pushHueSaturationChanges();
571
471
  }
572
472
  // Push ColorTemperature Update
573
- if (this.On) {
473
+ if (this.LightBulb.On) {
574
474
  await this.pushColorTemperatureChanges();
575
475
  }
576
476
  // Push Brightness Update
577
- if (this.On) {
477
+ if (this.LightBulb.On) {
578
478
  await this.pushBrightnessChanges();
579
479
  }
580
480
  }
581
481
  async pushHueSaturationChanges() {
582
482
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} pushHueSaturationChanges`);
583
- if (this.Hue !== this.accessory.context.Hue || this.Saturation !== this.accessory.context.Saturation) {
584
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${JSON.stringify(this.Hue)}`);
585
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${JSON.stringify(this.Saturation)}`);
586
- const [red, green, blue] = hs2rgb(Number(this.Hue), Number(this.Saturation));
483
+ if (this.LightBulb.Hue !== this.accessory.context.Hue || this.LightBulb.Saturation !== this.accessory.context.Saturation) {
484
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${JSON.stringify(this.LightBulb.Hue)}`);
485
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${JSON.stringify(this.LightBulb.Saturation)}`);
486
+ const [red, green, blue] = hs2rgb(Number(this.LightBulb.Hue), Number(this.LightBulb.Saturation));
587
487
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} rgb: ${JSON.stringify([red, green, blue])}`);
588
488
  const bodyChange = JSON.stringify({
589
489
  command: 'setColor',
@@ -603,8 +503,10 @@ export class CeilingLight {
603
503
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus body: ${JSON.stringify(deviceStatus.body)}`);
604
504
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
605
505
  if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
606
- this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
506
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
607
507
  + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
508
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
509
+ + `request to SwitchBot API, body: ${JSON.stringify(bodyChange)} sent successfully`);
608
510
  }
609
511
  else {
610
512
  this.statusCode(statusCode);
@@ -618,15 +520,15 @@ export class CeilingLight {
618
520
  }
619
521
  }
620
522
  else {
621
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushHueSaturationChanges. Hue: ${this.Hue}, ` +
622
- `HueCached: ${this.accessory.context.Hue}, Saturation: ${this.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`);
523
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushHueSaturationChanges. Hue: ${this.LightBulb.Hue}, ` +
524
+ `HueCached: ${this.accessory.context.Hue}, Saturation: ${this.LightBulb.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`);
623
525
  }
624
526
  }
625
527
  async pushColorTemperatureChanges() {
626
528
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} pushColorTemperatureChanges`);
627
- if (this.ColorTemperature !== this.accessory.context.ColorTemperature) {
628
- const kelvin = Math.round(1000000 / Number(this.ColorTemperature));
629
- this.cacheKelvin = kelvin;
529
+ if (this.LightBulb.ColorTemperature !== this.accessory.context.ColorTemperature) {
530
+ const kelvin = Math.round(1000000 / Number(this.LightBulb.ColorTemperature));
531
+ this.accessory.context.kelvin = kelvin;
630
532
  const bodyChange = JSON.stringify({
631
533
  command: 'setColorTemperature',
632
534
  parameter: `${kelvin}`,
@@ -645,7 +547,7 @@ export class CeilingLight {
645
547
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus body: ${JSON.stringify(deviceStatus.body)}`);
646
548
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
647
549
  if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
648
- this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
550
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
649
551
  + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
650
552
  }
651
553
  else {
@@ -661,15 +563,15 @@ export class CeilingLight {
661
563
  }
662
564
  else {
663
565
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushColorTemperatureChanges.` +
664
- `ColorTemperature: ${this.ColorTemperature}, ColorTemperatureCached: ${this.accessory.context.ColorTemperature}`);
566
+ `ColorTemperature: ${this.LightBulb.ColorTemperature}, ColorTemperatureCached: ${this.accessory.context.ColorTemperature}`);
665
567
  }
666
568
  }
667
569
  async pushBrightnessChanges() {
668
570
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} pushBrightnessChanges`);
669
- if (this.Brightness !== this.accessory.context.Brightness) {
571
+ if (this.LightBulb.Brightness !== this.accessory.context.Brightness) {
670
572
  const bodyChange = JSON.stringify({
671
573
  command: 'setBrightness',
672
- parameter: `${this.Brightness}`,
574
+ parameter: `${this.LightBulb.Brightness}`,
673
575
  commandType: 'command',
674
576
  });
675
577
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Sending request to SwitchBot API, body: ${bodyChange},`);
@@ -685,8 +587,10 @@ export class CeilingLight {
685
587
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus body: ${JSON.stringify(deviceStatus.body)}`);
686
588
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
687
589
  if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
688
- this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
590
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
689
591
  + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
592
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
593
+ + `request to SwitchBot API, body: ${JSON.stringify(bodyChange)} sent successfully`);
690
594
  }
691
595
  else {
692
596
  this.statusCode(statusCode);
@@ -701,7 +605,7 @@ export class CeilingLight {
701
605
  }
702
606
  else {
703
607
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushBrightnessChanges.` +
704
- `Brightness: ${this.Brightness}, ` +
608
+ `Brightness: ${this.LightBulb.Brightness}, ` +
705
609
  `BrightnessCached: ${this.accessory.context.Brightness}`);
706
610
  }
707
611
  }
@@ -709,132 +613,135 @@ export class CeilingLight {
709
613
  * Handle requests to set the value of the "On" characteristic
710
614
  */
711
615
  async OnSet(value) {
712
- if (this.On === this.accessory.context.On) {
616
+ if (this.LightBulb.On === this.accessory.context.On) {
713
617
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set On: ${value}`);
714
618
  }
715
619
  else {
716
620
  this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set On: ${value}`);
717
621
  }
718
- this.On = value;
622
+ this.LightBulb.On = value;
719
623
  this.doCeilingLightUpdate.next();
720
624
  }
721
625
  /**
722
626
  * Handle requests to set the value of the "Brightness" characteristic
723
627
  */
724
628
  async BrightnessSet(value) {
725
- if (this.Brightness === this.accessory.context.Brightness) {
629
+ if (this.LightBulb.Brightness === this.accessory.context.Brightness) {
726
630
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Brightness: ${value}`);
727
631
  }
728
- else if (this.On) {
632
+ else if (this.LightBulb.On) {
729
633
  this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Brightness: ${value}`);
730
634
  }
731
635
  else {
732
636
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Brightness: ${value}`);
733
637
  }
734
- this.Brightness = value;
638
+ this.LightBulb.Brightness = value;
735
639
  this.doCeilingLightUpdate.next();
736
640
  }
737
641
  /**
738
642
  * Handle requests to set the value of the "ColorTemperature" characteristic
739
643
  */
740
644
  async ColorTemperatureSet(value) {
741
- if (this.ColorTemperature === this.accessory.context.ColorTemperature) {
645
+ if (this.LightBulb.ColorTemperature === this.accessory.context.ColorTemperature) {
742
646
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set ColorTemperature: ${value}`);
743
647
  }
744
- else if (this.On) {
648
+ else if (this.LightBulb.On) {
745
649
  this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set ColorTemperature: ${value}`);
746
650
  }
747
651
  else {
748
652
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set ColorTemperature: ${value}`);
749
653
  }
654
+ const minKelvin = 2000;
655
+ const maxKelvin = 9000;
750
656
  // Convert mired to kelvin to nearest 100 (SwitchBot seems to need this)
751
657
  const kelvin = Math.round(1000000 / Number(value) / 100) * 100;
752
658
  // Check and increase/decrease kelvin to range of device
753
- const k = Math.min(Math.max(kelvin, this.minKelvin), this.maxKelvin);
754
- if (!this.accessory.context.On || this.cacheKelvin === k) {
659
+ const k = Math.min(Math.max(kelvin, minKelvin), maxKelvin);
660
+ if (!this.accessory.context.On || this.accessory.context.kelvin === k) {
755
661
  return;
756
662
  }
757
663
  // Updating the hue/sat to the corresponding values mimics native adaptive lighting
758
664
  const hs = m2hs(value);
759
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Hue, hs[0]);
760
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Saturation, hs[1]);
761
- this.ColorTemperature = value;
665
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Hue, hs[0]);
666
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Saturation, hs[1]);
667
+ this.LightBulb.ColorTemperature = value;
762
668
  this.doCeilingLightUpdate.next();
763
669
  }
764
670
  /**
765
671
  * Handle requests to set the value of the "Hue" characteristic
766
672
  */
767
673
  async HueSet(value) {
768
- if (this.Hue === this.accessory.context.Hue) {
674
+ if (this.LightBulb.Hue === this.accessory.context.Hue) {
769
675
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Hue: ${value}`);
770
676
  }
771
- else if (this.On) {
677
+ else if (this.LightBulb.On) {
772
678
  this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Hue: ${value}`);
773
679
  }
774
680
  else {
775
681
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Hue: ${value}`);
776
682
  }
777
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.ColorTemperature, 140);
778
- this.Hue = value;
683
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, 140);
684
+ this.LightBulb.Hue = value;
779
685
  this.doCeilingLightUpdate.next();
780
686
  }
781
687
  /**
782
688
  * Handle requests to set the value of the "Saturation" characteristic
783
689
  */
784
690
  async SaturationSet(value) {
785
- if (this.Saturation === this.accessory.context.Saturation) {
691
+ if (this.LightBulb.Saturation === this.accessory.context.Saturation) {
786
692
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Saturation: ${value}`);
787
693
  }
788
- else if (this.On) {
694
+ else if (this.LightBulb.On) {
789
695
  this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Saturation: ${value}`);
790
696
  }
791
697
  else {
792
698
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Saturation: ${value}`);
793
699
  }
794
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.ColorTemperature, 140);
795
- this.Saturation = value;
700
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, 140);
701
+ this.LightBulb.Saturation = value;
796
702
  this.doCeilingLightUpdate.next();
797
703
  }
798
704
  async updateHomeKitCharacteristics() {
799
- if (this.On === undefined) {
800
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.On}`);
705
+ if (this.LightBulb.On === undefined) {
706
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.LightBulb.On}`);
801
707
  }
802
708
  else {
803
- this.accessory.context.On = this.On;
804
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.On, this.On);
805
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic On: ${this.On}`);
709
+ this.accessory.context.On = this.LightBulb.On;
710
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.On, this.LightBulb.On);
711
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic On: ${this.LightBulb.On}`);
806
712
  }
807
- if (this.Brightness === undefined) {
808
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.Brightness}`);
713
+ if (this.LightBulb.Brightness === undefined) {
714
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Brightness: ${this.LightBulb.Brightness}`);
809
715
  }
810
716
  else {
811
- this.accessory.context.Brightness = this.Brightness;
812
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Brightness, this.Brightness);
813
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Brightness: ${this.Brightness}`);
717
+ this.accessory.context.Brightness = this.LightBulb.Brightness;
718
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Brightness, this.LightBulb.Brightness);
719
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Brightness: ${this.LightBulb.Brightness}`);
814
720
  }
815
- if (this.ColorTemperature === undefined) {
816
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.ColorTemperature}`);
721
+ if (this.LightBulb.ColorTemperature === undefined) {
722
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ColorTemperature: ${this.LightBulb.ColorTemperature}`);
817
723
  }
818
724
  else {
819
- this.accessory.context.ColorTemperature = this.ColorTemperature;
820
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.ColorTemperature, this.ColorTemperature);
821
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic ColorTemperature: ${this.ColorTemperature}`);
725
+ this.accessory.context.ColorTemperature = this.LightBulb.ColorTemperature;
726
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, this.LightBulb.ColorTemperature);
727
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
728
+ + ` updateCharacteristic ColorTemperature: ${this.LightBulb.ColorTemperature}`);
822
729
  }
823
- if (this.Hue === undefined) {
824
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.Hue}`);
730
+ if (this.LightBulb.Hue === undefined) {
731
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Hue: ${this.LightBulb.Hue}`);
825
732
  }
826
733
  else {
827
- this.accessory.context.Hue = this.Hue;
828
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Hue, this.Hue);
829
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Hue: ${this.Hue}`);
734
+ this.accessory.context.Hue = this.LightBulb.Hue;
735
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Hue, this.LightBulb.Hue);
736
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Hue: ${this.LightBulb.Hue}`);
830
737
  }
831
- if (this.Saturation === undefined) {
832
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.Saturation}`);
738
+ if (this.LightBulb.Saturation === undefined) {
739
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Saturation: ${this.LightBulb.Saturation}`);
833
740
  }
834
741
  else {
835
- this.accessory.context.Saturation = this.Saturation;
836
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Saturation, this.Saturation);
837
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Saturation: ${this.Saturation}`);
742
+ this.accessory.context.Saturation = this.LightBulb.Saturation;
743
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Saturation, this.LightBulb.Saturation);
744
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Saturation: ${this.LightBulb.Saturation}`);
838
745
  }
839
746
  }
840
747
  async adaptiveLighting(device) {
@@ -847,34 +754,6 @@ export class CeilingLight {
847
754
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} adaptiveLightingShift: ${this.adaptiveLightingShift}`);
848
755
  }
849
756
  }
850
- async stopScanning(switchbot) {
851
- switchbot.stopScan();
852
- if (this.BLE_IsConnected) {
853
- await this.BLEparseStatus();
854
- await this.updateHomeKitCharacteristics();
855
- }
856
- else {
857
- await this.BLERefreshConnection(switchbot);
858
- }
859
- }
860
- async getCustomBLEAddress(switchbot) {
861
- if (this.device.customBLEaddress && this.deviceLogging.includes('debug')) {
862
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} customBLEaddress: ${this.device.customBLEaddress}`);
863
- (async () => {
864
- // Start to monitor advertisement packets
865
- await switchbot.startScan({
866
- model: 'u',
867
- });
868
- // Set an event handler
869
- switchbot.onadvertisement = (ad) => {
870
- this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} ad: ${JSON.stringify(ad, null, ' ')}`);
871
- };
872
- await sleep(10000);
873
- // Stop to monitor
874
- switchbot.stopScan();
875
- })();
876
- }
877
- }
878
757
  async BLEPushConnection() {
879
758
  if (this.platform.config.credentials?.token && this.device.connectionType === 'BLE/OpenAPI') {
880
759
  this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} Using OpenAPI Connection to Push Changes`);
@@ -889,275 +768,27 @@ export class CeilingLight {
889
768
  await this.openAPIRefreshStatus();
890
769
  }
891
770
  }
892
- async retry({ max, fn }) {
893
- return fn().catch(async (e) => {
894
- if (max === 0) {
895
- throw e;
896
- }
897
- this.infoLog(e);
898
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Retrying`);
899
- await sleep(1000);
900
- return this.retry({ max: max - 1, fn });
901
- });
902
- }
903
- maxRetry() {
904
- if (this.device.maxRetry) {
905
- return this.device.maxRetry;
906
- }
907
- else {
908
- return 5;
909
- }
910
- }
911
771
  minStep(device) {
772
+ let set_minStep;
912
773
  if (device.ceilinglight?.set_minStep) {
913
- this.set_minStep = device.ceilinglight?.set_minStep;
914
- }
915
- else {
916
- this.set_minStep = 1;
917
- }
918
- return this.set_minStep;
919
- }
920
- async scan(device) {
921
- if (device.scanDuration) {
922
- this.scanDuration = this.accessory.context.scanDuration = device.scanDuration;
923
- if (this.BLE) {
924
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config scanDuration: ${this.scanDuration}`);
925
- }
774
+ set_minStep = device.ceilinglight?.set_minStep;
926
775
  }
927
776
  else {
928
- this.scanDuration = this.accessory.context.scanDuration = 1;
929
- if (this.BLE) {
930
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Default scanDuration: ${this.scanDuration}`);
931
- }
932
- }
933
- }
934
- async statusCode(statusCode) {
935
- switch (statusCode) {
936
- case 151:
937
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Command not supported by this deviceType, statusCode: ${statusCode}`);
938
- break;
939
- case 152:
940
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device not found, statusCode: ${statusCode}`);
941
- break;
942
- case 160:
943
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Command is not supported, statusCode: ${statusCode}`);
944
- break;
945
- case 161:
946
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device is offline, statusCode: ${statusCode}`);
947
- this.offlineOff();
948
- break;
949
- case 171:
950
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Hub Device is offline, statusCode: ${statusCode}. ` +
951
- `Hub: ${this.device.hubDeviceId}`);
952
- this.offlineOff();
953
- break;
954
- case 190:
955
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device internal error due to device states not synchronized with server,` +
956
- ` Or command format is invalid, statusCode: ${statusCode}`);
957
- break;
958
- case 100:
959
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Command successfully sent, statusCode: ${statusCode}`);
960
- break;
961
- case 200:
962
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Request successful, statusCode: ${statusCode}`);
963
- break;
964
- case 400:
965
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Bad Request, The client has issued an invalid request. `
966
- + `This is commonly used to specify validation errors in a request payload, statusCode: ${statusCode}`);
967
- break;
968
- case 401:
969
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unauthorized, Authorization for the API is required, `
970
- + `but the request has not been authenticated, statusCode: ${statusCode}`);
971
- break;
972
- case 403:
973
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Forbidden, The request has been authenticated but does not `
974
- + `have appropriate permissions, or a requested resource is not found, statusCode: ${statusCode}`);
975
- break;
976
- case 404:
977
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Not Found, Specifies the requested path does not exist, `
978
- + `statusCode: ${statusCode}`);
979
- break;
980
- case 406:
981
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Not Acceptable, The client has requested a MIME type via `
982
- + `the Accept header for a value not supported by the server, statusCode: ${statusCode}`);
983
- break;
984
- case 415:
985
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unsupported Media Type, The client has defined a contentType `
986
- + `header that is not supported by the server, statusCode: ${statusCode}`);
987
- break;
988
- case 422:
989
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unprocessable Entity, The client has made a valid request, `
990
- + `but the server cannot process it. This is often used for APIs for which certain limits have been exceeded, statusCode: ${statusCode}`);
991
- break;
992
- case 429:
993
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Too Many Requests, The client has exceeded the number of `
994
- + `requests allowed for a given time window, statusCode: ${statusCode}`);
995
- break;
996
- case 500:
997
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Internal Server Error, An unexpected error on the SmartThings `
998
- + `servers has occurred. These errors should be rare, statusCode: ${statusCode}`);
999
- break;
1000
- default:
1001
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Unknown statusCode: ` +
1002
- `${statusCode}, Submit Bugs Here: ' + 'https://tinyurl.com/SwitchBotBug`);
777
+ set_minStep = 1;
1003
778
  }
779
+ return set_minStep;
1004
780
  }
1005
781
  async offlineOff() {
1006
782
  if (this.device.offline) {
1007
- await this.deviceContext();
1008
- await this.updateHomeKitCharacteristics();
783
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.On, false);
1009
784
  }
1010
785
  }
1011
786
  apiError(e) {
1012
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.On, e);
1013
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Hue, e);
1014
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Brightness, e);
1015
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.Saturation, e);
1016
- this.lightBulbService.updateCharacteristic(this.hap.Characteristic.ColorTemperature, e);
1017
- }
1018
- async deviceContext() {
1019
- if (this.On === undefined) {
1020
- this.On = false;
1021
- }
1022
- else {
1023
- this.On = this.accessory.context.On;
1024
- }
1025
- if (this.Hue === undefined) {
1026
- this.Hue = 0;
1027
- }
1028
- else {
1029
- this.Hue = this.accessory.context.Hue;
1030
- }
1031
- if (this.Brightness === undefined) {
1032
- this.Brightness = 0;
1033
- }
1034
- else {
1035
- this.Brightness = this.accessory.context.Brightness;
1036
- }
1037
- if (this.Brightness === undefined) {
1038
- this.Saturation = 0;
1039
- }
1040
- else {
1041
- this.Saturation = this.accessory.context.Saturation;
1042
- }
1043
- if (this.ColorTemperature === undefined) {
1044
- this.ColorTemperature = 140;
1045
- }
1046
- else {
1047
- this.ColorTemperature = this.accessory.context.ColorTemperature;
1048
- }
1049
- this.minKelvin = 2000;
1050
- this.maxKelvin = 9000;
1051
- if (this.FirmwareRevision === undefined) {
1052
- this.FirmwareRevision = this.platform.version;
1053
- this.accessory.context.FirmwareRevision = this.FirmwareRevision;
1054
- }
1055
- }
1056
- async refreshRate(device) {
1057
- if (device.refreshRate) {
1058
- this.deviceRefreshRate = this.accessory.context.refreshRate = device.refreshRate;
1059
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config refreshRate: ${this.deviceRefreshRate}`);
1060
- }
1061
- else if (this.platform.config.options.refreshRate) {
1062
- this.deviceRefreshRate = this.accessory.context.refreshRate = this.platform.config.options.refreshRate;
1063
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Platform Config refreshRate: ${this.deviceRefreshRate}`);
1064
- }
1065
- }
1066
- async deviceConfig(device) {
1067
- let config = {};
1068
- if (device.ceilinglight) {
1069
- config = device.ceilinglight;
1070
- }
1071
- if (device.connectionType !== undefined) {
1072
- config['connectionType'] = device.connectionType;
1073
- }
1074
- if (device.external !== undefined) {
1075
- config['external'] = device.external;
1076
- }
1077
- if (device.logging !== undefined) {
1078
- config['logging'] = device.logging;
1079
- }
1080
- if (device.refreshRate !== undefined) {
1081
- config['refreshRate'] = device.refreshRate;
1082
- }
1083
- if (device.scanDuration !== undefined) {
1084
- config['scanDuration'] = device.scanDuration;
1085
- }
1086
- if (device.offline !== undefined) {
1087
- config['offline'] = device.offline;
1088
- }
1089
- if (device.maxRetry !== undefined) {
1090
- config['maxRetry'] = device.maxRetry;
1091
- }
1092
- if (device.webhook !== undefined) {
1093
- config['webhook'] = device.webhook;
1094
- }
1095
- if (Object.entries(config).length !== 0) {
1096
- this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
1097
- }
1098
- }
1099
- async deviceLogs(device) {
1100
- if (this.platform.debugMode) {
1101
- this.deviceLogging = this.accessory.context.logging = 'debugMode';
1102
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Debug Mode Logging: ${this.deviceLogging}`);
1103
- }
1104
- else if (device.logging) {
1105
- this.deviceLogging = this.accessory.context.logging = device.logging;
1106
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config Logging: ${this.deviceLogging}`);
1107
- }
1108
- else if (this.platform.config.options?.logging) {
1109
- this.deviceLogging = this.accessory.context.logging = this.platform.config.options?.logging;
1110
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Platform Config Logging: ${this.deviceLogging}`);
1111
- }
1112
- else {
1113
- this.deviceLogging = this.accessory.context.logging = 'standard';
1114
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Logging Not Set, Using: ${this.deviceLogging}`);
1115
- }
1116
- }
1117
- /**
1118
- * Logging for Device
1119
- */
1120
- infoLog(...log) {
1121
- if (this.enablingDeviceLogging()) {
1122
- this.platform.log.info(String(...log));
1123
- }
1124
- }
1125
- warnLog(...log) {
1126
- if (this.enablingDeviceLogging()) {
1127
- this.platform.log.warn(String(...log));
1128
- }
1129
- }
1130
- debugWarnLog(...log) {
1131
- if (this.enablingDeviceLogging()) {
1132
- if (this.deviceLogging?.includes('debug')) {
1133
- this.platform.log.warn('[DEBUG]', String(...log));
1134
- }
1135
- }
1136
- }
1137
- errorLog(...log) {
1138
- if (this.enablingDeviceLogging()) {
1139
- this.platform.log.error(String(...log));
1140
- }
1141
- }
1142
- debugErrorLog(...log) {
1143
- if (this.enablingDeviceLogging()) {
1144
- if (this.deviceLogging?.includes('debug')) {
1145
- this.platform.log.error('[DEBUG]', String(...log));
1146
- }
1147
- }
1148
- }
1149
- debugLog(...log) {
1150
- if (this.enablingDeviceLogging()) {
1151
- if (this.deviceLogging === 'debug') {
1152
- this.platform.log.info('[DEBUG]', String(...log));
1153
- }
1154
- else {
1155
- this.platform.log.debug(String(...log));
1156
- }
1157
- }
1158
- }
1159
- enablingDeviceLogging() {
1160
- return this.deviceLogging.includes('debug') || this.deviceLogging === 'standard';
787
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.On, e);
788
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Hue, e);
789
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Brightness, e);
790
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.Saturation, e);
791
+ this.LightBulb.Service.updateCharacteristic(this.hap.Characteristic.ColorTemperature, e);
1161
792
  }
1162
793
  }
1163
794
  //# sourceMappingURL=ceilinglight.js.map