@switchbot/homebridge-switchbot 3.8.3-beta.11 → 3.8.3-beta.13

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 (187) hide show
  1. package/dist/device/blindtilt.d.ts +1 -4
  2. package/dist/device/blindtilt.d.ts.map +1 -1
  3. package/dist/device/blindtilt.js +6 -6
  4. package/dist/device/blindtilt.js.map +1 -1
  5. package/dist/device/bot.d.ts +1 -4
  6. package/dist/device/bot.d.ts.map +1 -1
  7. package/dist/device/bot.js +3 -3
  8. package/dist/device/bot.js.map +1 -1
  9. package/dist/device/ceilinglight.d.ts +1 -4
  10. package/dist/device/ceilinglight.d.ts.map +1 -1
  11. package/dist/device/ceilinglight.js +8 -8
  12. package/dist/device/ceilinglight.js.map +1 -1
  13. package/dist/device/colorbulb.d.ts +1 -4
  14. package/dist/device/colorbulb.d.ts.map +1 -1
  15. package/dist/device/colorbulb.js +8 -8
  16. package/dist/device/colorbulb.js.map +1 -1
  17. package/dist/device/contact.d.ts +1 -4
  18. package/dist/device/contact.d.ts.map +1 -1
  19. package/dist/device/contact.js.map +1 -1
  20. package/dist/device/curtain.d.ts +1 -4
  21. package/dist/device/curtain.d.ts.map +1 -1
  22. package/dist/device/curtain.js +4 -4
  23. package/dist/device/curtain.js.map +1 -1
  24. package/dist/device/device.d.ts +3 -3
  25. package/dist/device/device.d.ts.map +1 -1
  26. package/dist/device/device.js +2 -8
  27. package/dist/device/device.js.map +1 -1
  28. package/dist/device/fan.d.ts +1 -4
  29. package/dist/device/fan.d.ts.map +1 -1
  30. package/dist/device/fan.js +6 -6
  31. package/dist/device/fan.js.map +1 -1
  32. package/dist/device/hub.d.ts +1 -4
  33. package/dist/device/hub.d.ts.map +1 -1
  34. package/dist/device/hub.js.map +1 -1
  35. package/dist/device/humidifier.d.ts +1 -4
  36. package/dist/device/humidifier.d.ts.map +1 -1
  37. package/dist/device/humidifier.js +6 -6
  38. package/dist/device/humidifier.js.map +1 -1
  39. package/dist/device/iosensor.d.ts +1 -4
  40. package/dist/device/iosensor.d.ts.map +1 -1
  41. package/dist/device/iosensor.js.map +1 -1
  42. package/dist/device/lightstrip.d.ts +1 -4
  43. package/dist/device/lightstrip.d.ts.map +1 -1
  44. package/dist/device/lightstrip.js +6 -6
  45. package/dist/device/lightstrip.js.map +1 -1
  46. package/dist/device/lock.d.ts +1 -4
  47. package/dist/device/lock.d.ts.map +1 -1
  48. package/dist/device/lock.js +3 -3
  49. package/dist/device/lock.js.map +1 -1
  50. package/dist/device/meter.d.ts +1 -4
  51. package/dist/device/meter.d.ts.map +1 -1
  52. package/dist/device/meter.js.map +1 -1
  53. package/dist/device/meterplus.d.ts +1 -4
  54. package/dist/device/meterplus.d.ts.map +1 -1
  55. package/dist/device/meterplus.js.map +1 -1
  56. package/dist/device/motion.d.ts +1 -4
  57. package/dist/device/motion.d.ts.map +1 -1
  58. package/dist/device/motion.js.map +1 -1
  59. package/dist/device/plug.d.ts +1 -4
  60. package/dist/device/plug.d.ts.map +1 -1
  61. package/dist/device/plug.js +2 -2
  62. package/dist/device/plug.js.map +1 -1
  63. package/dist/device/robotvacuumcleaner.d.ts +1 -4
  64. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  65. package/dist/device/robotvacuumcleaner.js +4 -4
  66. package/dist/device/robotvacuumcleaner.js.map +1 -1
  67. package/dist/device/waterdetector.d.ts +1 -4
  68. package/dist/device/waterdetector.d.ts.map +1 -1
  69. package/dist/device/waterdetector.js.map +1 -1
  70. package/dist/irdevice/airconditioner.d.ts +1 -1
  71. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  72. package/dist/irdevice/airconditioner.js +6 -6
  73. package/dist/irdevice/airconditioner.js.map +1 -1
  74. package/dist/irdevice/airpurifier.d.ts +1 -1
  75. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  76. package/dist/irdevice/airpurifier.js +6 -6
  77. package/dist/irdevice/airpurifier.js.map +1 -1
  78. package/dist/irdevice/camera.d.ts +1 -1
  79. package/dist/irdevice/camera.d.ts.map +1 -1
  80. package/dist/irdevice/camera.js +4 -4
  81. package/dist/irdevice/camera.js.map +1 -1
  82. package/dist/irdevice/fan.d.ts +1 -1
  83. package/dist/irdevice/fan.d.ts.map +1 -1
  84. package/dist/irdevice/fan.js +10 -10
  85. package/dist/irdevice/fan.js.map +1 -1
  86. package/dist/irdevice/irdevice.d.ts +2 -2
  87. package/dist/irdevice/irdevice.d.ts.map +1 -1
  88. package/dist/irdevice/irdevice.js +1 -7
  89. package/dist/irdevice/irdevice.js.map +1 -1
  90. package/dist/irdevice/light.d.ts +1 -1
  91. package/dist/irdevice/light.d.ts.map +1 -1
  92. package/dist/irdevice/light.js +4 -4
  93. package/dist/irdevice/light.js.map +1 -1
  94. package/dist/irdevice/other.d.ts +1 -1
  95. package/dist/irdevice/other.d.ts.map +1 -1
  96. package/dist/irdevice/other.js +4 -4
  97. package/dist/irdevice/other.js.map +1 -1
  98. package/dist/irdevice/tv.d.ts +1 -1
  99. package/dist/irdevice/tv.d.ts.map +1 -1
  100. package/dist/irdevice/tv.js +22 -22
  101. package/dist/irdevice/tv.js.map +1 -1
  102. package/dist/irdevice/vacuumcleaner.d.ts +1 -1
  103. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  104. package/dist/irdevice/vacuumcleaner.js +4 -4
  105. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  106. package/dist/irdevice/waterheater.d.ts +1 -1
  107. package/dist/irdevice/waterheater.d.ts.map +1 -1
  108. package/dist/irdevice/waterheater.js +4 -4
  109. package/dist/irdevice/waterheater.js.map +1 -1
  110. package/dist/platform.d.ts +4 -13
  111. package/dist/platform.d.ts.map +1 -1
  112. package/dist/platform.js +20 -132
  113. package/dist/platform.js.map +1 -1
  114. package/dist/settings.d.ts +1 -3
  115. package/dist/settings.d.ts.map +1 -1
  116. package/dist/settings.js.map +1 -1
  117. package/dist/utils.d.ts +1 -1
  118. package/dist/utils.d.ts.map +1 -1
  119. package/dist/utils.js.map +1 -1
  120. package/package.json +3 -4
  121. package/src/device/blindtilt.ts +8 -11
  122. package/src/device/bot.ts +4 -7
  123. package/src/device/ceilinglight.ts +9 -12
  124. package/src/device/colorbulb.ts +9 -12
  125. package/src/device/contact.ts +1 -4
  126. package/src/device/curtain.ts +6 -9
  127. package/src/device/device.ts +4 -11
  128. package/src/device/fan.ts +7 -10
  129. package/src/device/hub.ts +1 -4
  130. package/src/device/humidifier.ts +7 -10
  131. package/src/device/iosensor.ts +1 -4
  132. package/src/device/lightstrip.ts +7 -10
  133. package/src/device/lock.ts +4 -7
  134. package/src/device/meter.ts +1 -4
  135. package/src/device/meterplus.ts +1 -4
  136. package/src/device/motion.ts +1 -4
  137. package/src/device/plug.ts +3 -6
  138. package/src/device/robotvacuumcleaner.ts +5 -12
  139. package/src/device/waterdetector.ts +1 -4
  140. package/src/irdevice/airconditioner.ts +7 -8
  141. package/src/irdevice/airpurifier.ts +7 -7
  142. package/src/irdevice/camera.ts +5 -5
  143. package/src/irdevice/fan.ts +11 -11
  144. package/src/irdevice/irdevice.ts +3 -11
  145. package/src/irdevice/light.ts +5 -5
  146. package/src/irdevice/other.ts +5 -5
  147. package/src/irdevice/tv.ts +23 -23
  148. package/src/irdevice/vacuumcleaner.ts +5 -5
  149. package/src/irdevice/waterheater.ts +5 -5
  150. package/src/platform.ts +23 -132
  151. package/src/settings.ts +1 -4
  152. package/src/utils.ts +2 -1
  153. package/dist/types/bledevicestatus.d.ts +0 -281
  154. package/dist/types/bledevicestatus.d.ts.map +0 -1
  155. package/dist/types/bledevicestatus.js +0 -2
  156. package/dist/types/bledevicestatus.js.map +0 -1
  157. package/dist/types/devicelist.d.ts +0 -89
  158. package/dist/types/devicelist.d.ts.map +0 -1
  159. package/dist/types/devicelist.js +0 -6
  160. package/dist/types/devicelist.js.map +0 -1
  161. package/dist/types/deviceresponse.d.ts +0 -13
  162. package/dist/types/deviceresponse.d.ts.map +0 -1
  163. package/dist/types/deviceresponse.js +0 -2
  164. package/dist/types/deviceresponse.js.map +0 -1
  165. package/dist/types/devicestatus.d.ts +0 -149
  166. package/dist/types/devicestatus.d.ts.map +0 -1
  167. package/dist/types/devicestatus.js +0 -3
  168. package/dist/types/devicestatus.js.map +0 -1
  169. package/dist/types/devicewebhookstatus.d.ts +0 -156
  170. package/dist/types/devicewebhookstatus.d.ts.map +0 -1
  171. package/dist/types/devicewebhookstatus.js +0 -2
  172. package/dist/types/devicewebhookstatus.js.map +0 -1
  173. package/dist/types/irdevicelist.d.ts +0 -10
  174. package/dist/types/irdevicelist.d.ts.map +0 -1
  175. package/dist/types/irdevicelist.js +0 -2
  176. package/dist/types/irdevicelist.js.map +0 -1
  177. package/dist/types/pushbody.d.ts +0 -6
  178. package/dist/types/pushbody.d.ts.map +0 -1
  179. package/dist/types/pushbody.js +0 -2
  180. package/dist/types/pushbody.js.map +0 -1
  181. package/src/types/bledevicestatus.ts +0 -303
  182. package/src/types/devicelist.ts +0 -124
  183. package/src/types/deviceresponse.ts +0 -14
  184. package/src/types/devicestatus.ts +0 -178
  185. package/src/types/devicewebhookstatus.ts +0 -191
  186. package/src/types/irdevicelist.ts +0 -15
  187. package/src/types/pushbody.ts +0 -9
@@ -1,10 +1,9 @@
1
1
  import type { Server } from 'node:http';
2
- import type { UrlObject } from 'node:url';
3
2
  import type { API, DynamicPlatformPlugin, Logging, PlatformAccessory } from 'homebridge';
4
3
  import type { MqttClient } from 'mqtt';
5
- import type { Dispatcher } from 'undici';
6
4
  import type { devicesConfig, irDevicesConfig, SwitchBotPlatformConfig } from './settings.js';
7
- import type { blindTilt, curtain, curtain3, device } from './types/devicelist.js';
5
+ import type { blindTilt, curtain, curtain3, device } from 'node-switchbot';
6
+ import { SwitchBotOpenAPI } from 'node-switchbot';
8
7
  /**
9
8
  * HomebridgePlatform
10
9
  * This class is the main constructor for your plugin, this is where you should
@@ -32,6 +31,7 @@ export declare class SwitchBotPlatform implements DynamicPlatformPlugin {
32
31
  readonly bleEventHandler: {
33
32
  [x: string]: (context: any) => void;
34
33
  };
34
+ switchBotAPI: SwitchBotOpenAPI;
35
35
  constructor(log: Logging, config: SwitchBotPlatformConfig, api: API);
36
36
  setupMqtt(): Promise<void>;
37
37
  setupwebhook(): Promise<void>;
@@ -50,13 +50,6 @@ export declare class SwitchBotPlatform implements DynamicPlatformPlugin {
50
50
  * This method saves the openToken as the token in the config.json file
51
51
  */
52
52
  updateToken(): Promise<void>;
53
- generateHeaders: () => {
54
- Authorization: any;
55
- sign: string;
56
- nonce: `${string}-${string}-${string}-${string}-${string}`;
57
- t: string;
58
- 'Content-Type': string;
59
- };
60
53
  discoverDevices(): Promise<void>;
61
54
  private handleManualConfig;
62
55
  private isSuccessfulResponse;
@@ -107,9 +100,7 @@ export declare class SwitchBotPlatform implements DynamicPlatformPlugin {
107
100
  * @returns A promise that resolves when the logging is complete.
108
101
  */
109
102
  statusCode(statusCode: number): Promise<void>;
110
- retryRequest(deviceMaxRetries: number, deviceDelayBetweenRetries: number, url: string | URL | UrlObject, options?: {
111
- dispatcher?: Dispatcher;
112
- } & Omit<Dispatcher.RequestOptions, 'origin' | 'path' | 'method'> & Partial<Pick<Dispatcher.RequestOptions, 'method'>>): Promise<{
103
+ retryRequest(deviceId: string, deviceMaxRetries: number, deviceDelayBetweenRetries: number): Promise<{
113
104
  body: any;
114
105
  statusCode: number;
115
106
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
package/dist/platform.js CHANGED
@@ -1,18 +1,10 @@
1
- import { Buffer } from 'node:buffer';
2
- import crypto, { randomUUID } from 'node:crypto';
3
1
  import { readFileSync, writeFileSync } from 'node:fs';
4
- import { createServer } from 'node:http';
5
2
  import process from 'node:process';
6
3
  import asyncmqtt from 'async-mqtt';
7
4
  import fakegato from 'fakegato-history';
8
5
  import { EveHomeKitTypes } from 'homebridge-lib/EveHomeKitTypes';
9
- /*
10
- * For Testing Locally:
11
- * import { SwitchBotModel } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
12
- */
13
- import { SwitchBot, SwitchBotModel } from 'node-switchbot';
6
+ import { LogLevel, SwitchBot, SwitchBotModel, SwitchBotOpenAPI } from 'node-switchbot';
14
7
  import { queueScheduler } from 'rxjs';
15
- import { request } from 'undici';
16
8
  import { BlindTilt } from './device/blindtilt.js';
17
9
  import { Bot } from './device/bot.js';
18
10
  import { CeilingLight } from './device/ceilinglight.js';
@@ -40,7 +32,7 @@ import { Others } from './irdevice/other.js';
40
32
  import { TV } from './irdevice/tv.js';
41
33
  import { VacuumCleaner } from './irdevice/vacuumcleaner.js';
42
34
  import { WaterHeater } from './irdevice/waterheater.js';
43
- import { deleteWebhook, Devices, PLATFORM_NAME, PLUGIN_NAME, queryWebhook, setupWebhook, updateWebhook } from './settings.js';
35
+ import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
44
36
  import { formatDeviceIdAsMac, isBlindTiltDevice, isCurtainDevice, sleep } from './utils.js';
45
37
  /**
46
38
  * HomebridgePlatform
@@ -70,6 +62,7 @@ export class SwitchBotPlatform {
70
62
  // Event Handlers
71
63
  webhookEventHandler = {};
72
64
  bleEventHandler = {};
65
+ switchBotAPI;
73
66
  constructor(log, config, api) {
74
67
  this.api = api;
75
68
  this.log = log;
@@ -100,6 +93,10 @@ export class SwitchBotPlatform {
100
93
  this.debugErrorLog(`Verify Config, Error: ${e}`);
101
94
  return;
102
95
  }
96
+ // SwitchBot OpenAPI
97
+ this.switchBotAPI = new SwitchBotOpenAPI(this.config.credentials?.token, this.config.credentials?.secret);
98
+ // Set the log level
99
+ this.switchBotAPI.setLogLevel(LogLevel.DEBUG);
103
100
  // import fakegato-history module and EVE characteristics
104
101
  this.fakegatoAPI = fakegato(api);
105
102
  this.eve = new EveHomeKitTypes(api);
@@ -181,123 +178,31 @@ export class SwitchBotPlatform {
181
178
  if (this.config.options?.webhookURL) {
182
179
  const url = this.config.options?.webhookURL;
183
180
  try {
184
- const xurl = new URL(url);
185
- const port = Number(xurl.port);
186
- const path = xurl.pathname;
187
- this.webhookEventListener = createServer((request, response) => {
188
- try {
189
- if (request.url === path && request.method === 'POST') {
190
- request.on('data', async (data) => {
191
- try {
192
- const body = JSON.parse(data);
193
- await this.debugLog(`Received Webhook: ${JSON.stringify(body)}`);
194
- if (this.config.options?.mqttURL) {
195
- const mac = body.context.deviceMac?.toLowerCase().match(/[\s\S]{1,2}/g)?.join(':');
196
- const options = this.config.options?.mqttPubOptions || {};
197
- this.mqttClient?.publish(`homebridge-switchbot/webhook/${mac}`, `${JSON.stringify(body.context)}`, options);
198
- }
199
- this.webhookEventHandler[body.context.deviceMac]?.(body.context);
200
- }
201
- catch (e) {
202
- await this.errorLog(`Failed to handle webhook event. Error:${e}`);
203
- }
204
- });
205
- response.writeHead(200, { 'Content-Type': 'text/plain' });
206
- response.end('OK');
207
- }
208
- // else {
209
- // response.writeHead(403, {'Content-Type': 'text/plain'});
210
- // response.end(`NG`);
211
- // }
212
- }
213
- catch (e) {
214
- this.errorLog(`Failed to handle webhook event. Error:${e}`);
215
- }
216
- }).listen(port || 80);
217
- }
218
- catch (e) {
219
- await this.errorLog(`Failed to create webhook listener. Error:${e.message}`);
220
- return;
221
- }
222
- try {
223
- const { body, statusCode } = await request(setupWebhook, {
224
- method: 'POST',
225
- headers: this.generateHeaders(),
226
- body: JSON.stringify({
227
- action: 'setupWebhook',
228
- url,
229
- deviceList: 'ALL',
230
- }),
181
+ this.switchBotAPI.setupWebhook(url);
182
+ // Listen for webhook events
183
+ this.switchBotAPI.on('webhookEvent', (body) => {
184
+ this.debugLog('Received webhook event:', body);
185
+ this.webhookEventHandler[body.context.deviceMac]?.(body.context);
231
186
  });
232
- const response = await body.json();
233
- await this.debugLog(`setupWebhook: url:${url}, body:${JSON.stringify(response)}, statusCode:${statusCode}`);
234
- if (statusCode !== 200 || response?.statusCode !== 100) {
235
- await this.errorLog(`Failed to configure webhook. Existing webhook well be overridden. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`);
236
- }
237
187
  }
238
188
  catch (e) {
239
- await this.errorLog(`Failed to configure webhook. Error: ${e.message}`);
189
+ await this.errorLog(`Failed to setup webhook. Error:${e.message}`);
240
190
  }
241
191
  try {
242
- const { body, statusCode } = await request(updateWebhook, {
243
- method: 'POST',
244
- headers: this.generateHeaders(),
245
- body: JSON.stringify({
246
- action: 'updateWebhook',
247
- config: {
248
- url,
249
- enable: true,
250
- },
251
- }),
252
- });
253
- const response = await body.json();
254
- await this.debugLog(`updateWebhook: url:${url}, body:${JSON.stringify(response)}, statusCode:${statusCode}`);
255
- if (statusCode !== 200 || response?.statusCode !== 100) {
256
- await this.errorLog(`Failed to update webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`);
257
- }
192
+ this.switchBotAPI.updateWebhook(url);
258
193
  }
259
194
  catch (e) {
260
195
  await this.errorLog(`Failed to update webhook. Error:${e.message}`);
261
196
  }
262
197
  try {
263
- const { body, statusCode } = await request(queryWebhook, {
264
- method: 'POST',
265
- headers: this.generateHeaders(),
266
- body: JSON.stringify({
267
- action: 'queryUrl',
268
- }),
269
- });
270
- const response = await body.json();
271
- await this.debugLog(`queryWebhook: body:${JSON.stringify(response)}`);
272
- await this.debugLog(`queryWebhook: statusCode:${statusCode}`);
273
- if (statusCode !== 200 || response?.statusCode !== 100) {
274
- await this.errorLog(`Failed to query webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`);
275
- }
276
- else {
277
- await this.infoLog(`Listening webhook on ${response?.body?.urls[0]}`);
278
- }
198
+ this.switchBotAPI.queryWebhook();
279
199
  }
280
200
  catch (e) {
281
- await this.errorLog(`Failed to query webhook. Error:${e}`);
201
+ await this.errorLog(`Failed to query webhook. Error:${e.message}`);
282
202
  }
283
203
  this.api.on('shutdown', async () => {
284
204
  try {
285
- const { body, statusCode } = await request(deleteWebhook, {
286
- method: 'POST',
287
- headers: this.generateHeaders(),
288
- body: JSON.stringify({
289
- action: 'deleteWebhook',
290
- url,
291
- }),
292
- });
293
- const response = await body.json();
294
- await this.debugLog(`deleteWebhook: url:${url}, body:${JSON.stringify(response)}, statusCode:${statusCode}`);
295
- if (statusCode !== 200 || response?.statusCode !== 100) {
296
- await this.errorLog(`Failed to delete webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`);
297
- }
298
- else {
299
- await this.infoLog('Unregistered webhook to close listening.');
300
- }
205
+ this.switchBotAPI.deleteWebhook(url);
301
206
  }
302
207
  catch (e) {
303
208
  await this.errorLog(`Failed to delete webhook. Error:${e.message}`);
@@ -497,23 +402,6 @@ export class SwitchBotPlatform {
497
402
  await this.errorLog(`Update Token: ${e}`);
498
403
  }
499
404
  }
500
- generateHeaders = () => {
501
- const t = `${Date.now()}`;
502
- const nonce = randomUUID();
503
- const data = this.config.credentials?.token + t + nonce;
504
- const signTerm = crypto
505
- .createHmac('sha256', this.config.credentials?.secret)
506
- .update(Buffer.from(data, 'utf-8'))
507
- .digest();
508
- const sign = signTerm.toString('base64');
509
- return {
510
- 'Authorization': this.config.credentials?.token,
511
- 'sign': sign,
512
- 'nonce': nonce,
513
- 't': t,
514
- 'Content-Type': 'application/json',
515
- };
516
- };
517
405
  async discoverDevices() {
518
406
  if (!this.config.credentials?.token) {
519
407
  return this.handleManualConfig();
@@ -526,7 +414,7 @@ export class SwitchBotPlatform {
526
414
  await this.debugWarnLog(`Delay Between Retries: ${delayBetweenRetries}`);
527
415
  while (retryCount < maxRetries) {
528
416
  try {
529
- const { body, statusCode } = await request(Devices, { headers: this.generateHeaders() });
417
+ const { body, statusCode } = await this.switchBotAPI.getDevices();
530
418
  await this.debugWarnLog(`statusCode: ${statusCode}`);
531
419
  const devicesAPI = await body.json();
532
420
  await this.debugWarnLog(`devicesAPI: ${JSON.stringify(devicesAPI)}`);
@@ -2536,13 +2424,13 @@ export class SwitchBotPlatform {
2536
2424
  await this.errorLog(message);
2537
2425
  }
2538
2426
  }
2539
- async retryRequest(deviceMaxRetries, deviceDelayBetweenRetries, url, options) {
2427
+ async retryRequest(deviceId, deviceMaxRetries, deviceDelayBetweenRetries) {
2540
2428
  let retryCount = 0;
2541
2429
  const maxRetries = deviceMaxRetries;
2542
2430
  const delayBetweenRetries = deviceDelayBetweenRetries;
2543
2431
  while (retryCount < maxRetries) {
2544
2432
  try {
2545
- const { body, statusCode } = await request(url, options);
2433
+ const { body, statusCode } = await this.switchBotAPI.getDeviceStatus(deviceId);
2546
2434
  if (statusCode === 200 || statusCode === 100) {
2547
2435
  return { body, statusCode };
2548
2436
  }