@switchbot/homebridge-switchbot 3.5.0-beta.4 → 3.5.0-beta.40

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