@switchbot/homebridge-switchbot 3.8.3-beta.10 → 3.8.3-beta.12
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.
- package/dist/device/blindtilt.d.ts +1 -4
- package/dist/device/blindtilt.d.ts.map +1 -1
- package/dist/device/blindtilt.js +6 -6
- package/dist/device/blindtilt.js.map +1 -1
- package/dist/device/bot.d.ts +1 -4
- package/dist/device/bot.d.ts.map +1 -1
- package/dist/device/bot.js +3 -3
- package/dist/device/bot.js.map +1 -1
- package/dist/device/ceilinglight.d.ts +1 -4
- package/dist/device/ceilinglight.d.ts.map +1 -1
- package/dist/device/ceilinglight.js +8 -8
- package/dist/device/ceilinglight.js.map +1 -1
- package/dist/device/colorbulb.d.ts +1 -4
- package/dist/device/colorbulb.d.ts.map +1 -1
- package/dist/device/colorbulb.js +8 -8
- package/dist/device/colorbulb.js.map +1 -1
- package/dist/device/contact.d.ts +1 -4
- package/dist/device/contact.d.ts.map +1 -1
- package/dist/device/contact.js.map +1 -1
- package/dist/device/curtain.d.ts +1 -4
- package/dist/device/curtain.d.ts.map +1 -1
- package/dist/device/curtain.js +4 -4
- package/dist/device/curtain.js.map +1 -1
- package/dist/device/device.d.ts +3 -3
- package/dist/device/device.d.ts.map +1 -1
- package/dist/device/device.js +26 -12
- package/dist/device/device.js.map +1 -1
- package/dist/device/fan.d.ts +1 -4
- package/dist/device/fan.d.ts.map +1 -1
- package/dist/device/fan.js +6 -6
- package/dist/device/fan.js.map +1 -1
- package/dist/device/hub.d.ts +1 -4
- package/dist/device/hub.d.ts.map +1 -1
- package/dist/device/hub.js.map +1 -1
- package/dist/device/humidifier.d.ts +1 -4
- package/dist/device/humidifier.d.ts.map +1 -1
- package/dist/device/humidifier.js +6 -6
- package/dist/device/humidifier.js.map +1 -1
- package/dist/device/iosensor.d.ts +1 -4
- package/dist/device/iosensor.d.ts.map +1 -1
- package/dist/device/iosensor.js.map +1 -1
- package/dist/device/lightstrip.d.ts +1 -4
- package/dist/device/lightstrip.d.ts.map +1 -1
- package/dist/device/lightstrip.js +6 -6
- package/dist/device/lightstrip.js.map +1 -1
- package/dist/device/lock.d.ts +1 -4
- package/dist/device/lock.d.ts.map +1 -1
- package/dist/device/lock.js +3 -3
- package/dist/device/lock.js.map +1 -1
- package/dist/device/meter.d.ts +1 -4
- package/dist/device/meter.d.ts.map +1 -1
- package/dist/device/meter.js.map +1 -1
- package/dist/device/meterplus.d.ts +1 -4
- package/dist/device/meterplus.d.ts.map +1 -1
- package/dist/device/meterplus.js.map +1 -1
- package/dist/device/motion.d.ts +1 -4
- package/dist/device/motion.d.ts.map +1 -1
- package/dist/device/motion.js.map +1 -1
- package/dist/device/plug.d.ts +1 -4
- package/dist/device/plug.d.ts.map +1 -1
- package/dist/device/plug.js +2 -2
- package/dist/device/plug.js.map +1 -1
- package/dist/device/robotvacuumcleaner.d.ts +1 -4
- package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
- package/dist/device/robotvacuumcleaner.js +4 -4
- package/dist/device/robotvacuumcleaner.js.map +1 -1
- package/dist/device/waterdetector.d.ts +1 -4
- package/dist/device/waterdetector.d.ts.map +1 -1
- package/dist/device/waterdetector.js.map +1 -1
- package/dist/irdevice/airconditioner.d.ts +1 -1
- package/dist/irdevice/airconditioner.d.ts.map +1 -1
- package/dist/irdevice/airconditioner.js +6 -6
- package/dist/irdevice/airconditioner.js.map +1 -1
- package/dist/irdevice/airpurifier.d.ts +1 -1
- package/dist/irdevice/airpurifier.d.ts.map +1 -1
- package/dist/irdevice/airpurifier.js +6 -6
- package/dist/irdevice/airpurifier.js.map +1 -1
- package/dist/irdevice/camera.d.ts +1 -1
- package/dist/irdevice/camera.d.ts.map +1 -1
- package/dist/irdevice/camera.js +4 -4
- package/dist/irdevice/camera.js.map +1 -1
- package/dist/irdevice/fan.d.ts +1 -1
- package/dist/irdevice/fan.d.ts.map +1 -1
- package/dist/irdevice/fan.js +10 -10
- package/dist/irdevice/fan.js.map +1 -1
- package/dist/irdevice/irdevice.d.ts +2 -2
- package/dist/irdevice/irdevice.d.ts.map +1 -1
- package/dist/irdevice/irdevice.js +1 -7
- package/dist/irdevice/irdevice.js.map +1 -1
- package/dist/irdevice/light.d.ts +1 -1
- package/dist/irdevice/light.d.ts.map +1 -1
- package/dist/irdevice/light.js +4 -4
- package/dist/irdevice/light.js.map +1 -1
- package/dist/irdevice/other.d.ts +1 -1
- package/dist/irdevice/other.d.ts.map +1 -1
- package/dist/irdevice/other.js +4 -4
- package/dist/irdevice/other.js.map +1 -1
- package/dist/irdevice/tv.d.ts +1 -1
- package/dist/irdevice/tv.d.ts.map +1 -1
- package/dist/irdevice/tv.js +22 -22
- package/dist/irdevice/tv.js.map +1 -1
- package/dist/irdevice/vacuumcleaner.d.ts +1 -1
- package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
- package/dist/irdevice/vacuumcleaner.js +4 -4
- package/dist/irdevice/vacuumcleaner.js.map +1 -1
- package/dist/irdevice/waterheater.d.ts +1 -1
- package/dist/irdevice/waterheater.d.ts.map +1 -1
- package/dist/irdevice/waterheater.js +4 -4
- package/dist/irdevice/waterheater.js.map +1 -1
- package/dist/platform.d.ts +4 -13
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +25 -133
- package/dist/platform.js.map +1 -1
- package/dist/settings.d.ts +1 -3
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js.map +1 -1
- package/package.json +3 -4
- package/src/device/blindtilt.ts +8 -11
- package/src/device/bot.ts +4 -7
- package/src/device/ceilinglight.ts +9 -12
- package/src/device/colorbulb.ts +9 -12
- package/src/device/contact.ts +1 -4
- package/src/device/curtain.ts +6 -9
- package/src/device/device.ts +24 -15
- package/src/device/fan.ts +7 -10
- package/src/device/hub.ts +1 -4
- package/src/device/humidifier.ts +7 -10
- package/src/device/iosensor.ts +1 -4
- package/src/device/lightstrip.ts +7 -10
- package/src/device/lock.ts +4 -7
- package/src/device/meter.ts +1 -4
- package/src/device/meterplus.ts +1 -4
- package/src/device/motion.ts +1 -4
- package/src/device/plug.ts +3 -6
- package/src/device/robotvacuumcleaner.ts +5 -12
- package/src/device/waterdetector.ts +1 -4
- package/src/irdevice/airconditioner.ts +7 -8
- package/src/irdevice/airpurifier.ts +7 -7
- package/src/irdevice/camera.ts +5 -5
- package/src/irdevice/fan.ts +11 -11
- package/src/irdevice/irdevice.ts +3 -11
- package/src/irdevice/light.ts +5 -5
- package/src/irdevice/other.ts +5 -5
- package/src/irdevice/tv.ts +23 -23
- package/src/irdevice/vacuumcleaner.ts +5 -5
- package/src/irdevice/waterheater.ts +5 -5
- package/src/platform.ts +25 -126
- package/src/settings.ts +1 -4
- package/src/utils.ts +2 -1
- package/dist/types/bledevicestatus.d.ts +0 -281
- package/dist/types/bledevicestatus.d.ts.map +0 -1
- package/dist/types/bledevicestatus.js +0 -2
- package/dist/types/bledevicestatus.js.map +0 -1
- package/dist/types/devicelist.d.ts +0 -89
- package/dist/types/devicelist.d.ts.map +0 -1
- package/dist/types/devicelist.js +0 -6
- package/dist/types/devicelist.js.map +0 -1
- package/dist/types/deviceresponse.d.ts +0 -13
- package/dist/types/deviceresponse.d.ts.map +0 -1
- package/dist/types/deviceresponse.js +0 -2
- package/dist/types/deviceresponse.js.map +0 -1
- package/dist/types/devicestatus.d.ts +0 -149
- package/dist/types/devicestatus.d.ts.map +0 -1
- package/dist/types/devicestatus.js +0 -3
- package/dist/types/devicestatus.js.map +0 -1
- package/dist/types/devicewebhookstatus.d.ts +0 -156
- package/dist/types/devicewebhookstatus.d.ts.map +0 -1
- package/dist/types/devicewebhookstatus.js +0 -2
- package/dist/types/devicewebhookstatus.js.map +0 -1
- package/dist/types/irdevicelist.d.ts +0 -10
- package/dist/types/irdevicelist.d.ts.map +0 -1
- package/dist/types/irdevicelist.js +0 -2
- package/dist/types/irdevicelist.js.map +0 -1
- package/dist/types/pushbody.d.ts +0 -6
- package/dist/types/pushbody.d.ts.map +0 -1
- package/dist/types/pushbody.js +0 -2
- package/dist/types/pushbody.js.map +0 -1
- package/src/types/bledevicestatus.ts +0 -303
- package/src/types/devicelist.ts +0 -124
- package/src/types/deviceresponse.ts +0 -14
- package/src/types/devicestatus.ts +0 -178
- package/src/types/devicewebhookstatus.ts +0 -191
- package/src/types/irdevicelist.ts +0 -15
- package/src/types/pushbody.ts +0 -9
package/src/irdevice/light.ts
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* light.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
|
+
import type { bodyChange, irdevice } from 'node-switchbot'
|
|
6
7
|
|
|
7
8
|
import type { SwitchBotPlatform } from '../platform.js'
|
|
8
9
|
import type { irDevicesConfig } from '../settings.js'
|
|
9
|
-
import type { irdevice } from '../types/irdevicelist.js'
|
|
10
10
|
|
|
11
11
|
import { irdeviceBase } from './irdevice.js'
|
|
12
12
|
|
|
@@ -170,11 +170,11 @@ export class Light extends irdeviceBase {
|
|
|
170
170
|
if (On === true && this.disablePushOn === false) {
|
|
171
171
|
const commandType: string = await this.commandType()
|
|
172
172
|
const command: string = await this.commandOn()
|
|
173
|
-
const bodyChange =
|
|
173
|
+
const bodyChange: bodyChange = {
|
|
174
174
|
command,
|
|
175
175
|
parameter: 'default',
|
|
176
176
|
commandType,
|
|
177
|
-
}
|
|
177
|
+
}
|
|
178
178
|
await this.pushChanges(bodyChange, On)
|
|
179
179
|
}
|
|
180
180
|
}
|
|
@@ -184,11 +184,11 @@ export class Light extends irdeviceBase {
|
|
|
184
184
|
if (On === false && this.disablePushOff === false) {
|
|
185
185
|
const commandType: string = await this.commandType()
|
|
186
186
|
const command: string = await this.commandOff()
|
|
187
|
-
const bodyChange =
|
|
187
|
+
const bodyChange: bodyChange = {
|
|
188
188
|
command,
|
|
189
189
|
parameter: 'default',
|
|
190
190
|
commandType,
|
|
191
|
-
}
|
|
191
|
+
}
|
|
192
192
|
await this.pushChanges(bodyChange, On)
|
|
193
193
|
}
|
|
194
194
|
}
|
package/src/irdevice/other.ts
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* other.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
|
+
import type { bodyChange, irdevice } from 'node-switchbot'
|
|
6
7
|
|
|
7
8
|
import type { SwitchBotPlatform } from '../platform.js'
|
|
8
9
|
import type { irDevicesConfig } from '../settings.js'
|
|
9
|
-
import type { irdevice } from '../types/irdevicelist.js'
|
|
10
10
|
|
|
11
11
|
import { irdeviceBase } from './irdevice.js'
|
|
12
12
|
|
|
@@ -412,11 +412,11 @@ export class Others extends irdeviceBase {
|
|
|
412
412
|
if (On === true && !this.disablePushOn) {
|
|
413
413
|
const commandType: string = await this.commandType()
|
|
414
414
|
const command: string = await this.commandOn()
|
|
415
|
-
const bodyChange =
|
|
415
|
+
const bodyChange: bodyChange = {
|
|
416
416
|
command,
|
|
417
417
|
parameter: 'default',
|
|
418
418
|
commandType,
|
|
419
|
-
}
|
|
419
|
+
}
|
|
420
420
|
await this.pushChanges(bodyChange)
|
|
421
421
|
}
|
|
422
422
|
} else {
|
|
@@ -430,11 +430,11 @@ export class Others extends irdeviceBase {
|
|
|
430
430
|
if (On === false && !this.disablePushOff) {
|
|
431
431
|
const commandType: string = await this.commandType()
|
|
432
432
|
const command: string = await this.commandOff()
|
|
433
|
-
const bodyChange =
|
|
433
|
+
const bodyChange: bodyChange = {
|
|
434
434
|
command,
|
|
435
435
|
parameter: 'default',
|
|
436
436
|
commandType,
|
|
437
|
-
}
|
|
437
|
+
}
|
|
438
438
|
await this.pushChanges(bodyChange)
|
|
439
439
|
}
|
|
440
440
|
} else {
|
package/src/irdevice/tv.ts
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* tv.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
|
+
import type { bodyChange, irdevice } from 'node-switchbot'
|
|
6
7
|
|
|
7
8
|
import type { SwitchBotPlatform } from '../platform.js'
|
|
8
9
|
import type { irDevicesConfig } from '../settings.js'
|
|
9
|
-
import type { irdevice } from '../types/irdevicelist.js'
|
|
10
10
|
|
|
11
11
|
import { irdeviceBase } from './irdevice.js'
|
|
12
12
|
|
|
@@ -210,11 +210,11 @@ export class TV extends irdeviceBase {
|
|
|
210
210
|
if (this.Television.Active === this.hap.Characteristic.Active.ACTIVE && !this.disablePushOn) {
|
|
211
211
|
const commandType: string = await this.commandType()
|
|
212
212
|
const command: string = await this.commandOn()
|
|
213
|
-
const bodyChange =
|
|
213
|
+
const bodyChange: bodyChange = {
|
|
214
214
|
command,
|
|
215
215
|
parameter: 'default',
|
|
216
216
|
commandType,
|
|
217
|
-
}
|
|
217
|
+
}
|
|
218
218
|
await this.pushTVChanges(bodyChange)
|
|
219
219
|
}
|
|
220
220
|
}
|
|
@@ -224,11 +224,11 @@ export class TV extends irdeviceBase {
|
|
|
224
224
|
if (this.Television.Active === this.hap.Characteristic.Active.INACTIVE && !this.disablePushOff) {
|
|
225
225
|
const commandType: string = await this.commandType()
|
|
226
226
|
const command: string = await this.commandOff()
|
|
227
|
-
const bodyChange =
|
|
227
|
+
const bodyChange: bodyChange = {
|
|
228
228
|
command,
|
|
229
229
|
parameter: 'default',
|
|
230
230
|
commandType,
|
|
231
|
-
}
|
|
231
|
+
}
|
|
232
232
|
await this.pushTVChanges(bodyChange)
|
|
233
233
|
}
|
|
234
234
|
}
|
|
@@ -236,11 +236,11 @@ export class TV extends irdeviceBase {
|
|
|
236
236
|
async pushOkChanges(): Promise<void> {
|
|
237
237
|
await this.debugLog(`pushOkChanges disablePushDetail: ${this.disablePushDetail}`)
|
|
238
238
|
if (!this.disablePushDetail) {
|
|
239
|
-
const bodyChange =
|
|
239
|
+
const bodyChange: bodyChange = {
|
|
240
240
|
command: 'Ok',
|
|
241
241
|
parameter: 'default',
|
|
242
242
|
commandType: 'command',
|
|
243
|
-
}
|
|
243
|
+
}
|
|
244
244
|
await this.pushTVChanges(bodyChange)
|
|
245
245
|
}
|
|
246
246
|
}
|
|
@@ -248,11 +248,11 @@ export class TV extends irdeviceBase {
|
|
|
248
248
|
async pushBackChanges(): Promise<void> {
|
|
249
249
|
await this.debugLog(`pushBackChanges disablePushDetail: ${this.disablePushDetail}`)
|
|
250
250
|
if (!this.disablePushDetail) {
|
|
251
|
-
const bodyChange =
|
|
251
|
+
const bodyChange: bodyChange = {
|
|
252
252
|
command: 'Back',
|
|
253
253
|
parameter: 'default',
|
|
254
254
|
commandType: 'command',
|
|
255
|
-
}
|
|
255
|
+
}
|
|
256
256
|
await this.pushTVChanges(bodyChange)
|
|
257
257
|
}
|
|
258
258
|
}
|
|
@@ -260,11 +260,11 @@ export class TV extends irdeviceBase {
|
|
|
260
260
|
async pushMenuChanges(): Promise<void> {
|
|
261
261
|
await this.debugLog(`pushMenuChanges disablePushDetail: ${this.disablePushDetail}`)
|
|
262
262
|
if (!this.disablePushDetail) {
|
|
263
|
-
const bodyChange =
|
|
263
|
+
const bodyChange: bodyChange = {
|
|
264
264
|
command: 'Menu',
|
|
265
265
|
parameter: 'default',
|
|
266
266
|
commandType: 'command',
|
|
267
|
-
}
|
|
267
|
+
}
|
|
268
268
|
await this.pushTVChanges(bodyChange)
|
|
269
269
|
}
|
|
270
270
|
}
|
|
@@ -272,11 +272,11 @@ export class TV extends irdeviceBase {
|
|
|
272
272
|
async pushUpChanges(): Promise<void> {
|
|
273
273
|
await this.debugLog(`pushUpChanges disablePushDetail: ${this.disablePushDetail}`)
|
|
274
274
|
if (!this.disablePushDetail) {
|
|
275
|
-
const bodyChange =
|
|
275
|
+
const bodyChange: bodyChange = {
|
|
276
276
|
command: 'Up',
|
|
277
277
|
parameter: 'default',
|
|
278
278
|
commandType: 'command',
|
|
279
|
-
}
|
|
279
|
+
}
|
|
280
280
|
await this.pushTVChanges(bodyChange)
|
|
281
281
|
}
|
|
282
282
|
}
|
|
@@ -284,11 +284,11 @@ export class TV extends irdeviceBase {
|
|
|
284
284
|
async pushDownChanges(): Promise<void> {
|
|
285
285
|
await this.debugLog(`pushDownChanges disablePushDetail: ${this.disablePushDetail}`)
|
|
286
286
|
if (!this.disablePushDetail) {
|
|
287
|
-
const bodyChange =
|
|
287
|
+
const bodyChange: bodyChange = {
|
|
288
288
|
command: 'Down',
|
|
289
289
|
parameter: 'default',
|
|
290
290
|
commandType: 'command',
|
|
291
|
-
}
|
|
291
|
+
}
|
|
292
292
|
await this.pushTVChanges(bodyChange)
|
|
293
293
|
}
|
|
294
294
|
}
|
|
@@ -296,11 +296,11 @@ export class TV extends irdeviceBase {
|
|
|
296
296
|
async pushRightChanges(): Promise<void> {
|
|
297
297
|
await this.debugLog(`pushRightChanges disablePushDetail: ${this.disablePushDetail}`)
|
|
298
298
|
if (!this.disablePushDetail) {
|
|
299
|
-
const bodyChange =
|
|
299
|
+
const bodyChange: bodyChange = {
|
|
300
300
|
command: 'Right',
|
|
301
301
|
parameter: 'default',
|
|
302
302
|
commandType: 'command',
|
|
303
|
-
}
|
|
303
|
+
}
|
|
304
304
|
await this.pushTVChanges(bodyChange)
|
|
305
305
|
}
|
|
306
306
|
}
|
|
@@ -308,11 +308,11 @@ export class TV extends irdeviceBase {
|
|
|
308
308
|
async pushLeftChanges(): Promise<void> {
|
|
309
309
|
await this.debugLog(`pushLeftChanges disablePushDetail: ${this.disablePushDetail}`)
|
|
310
310
|
if (!this.disablePushDetail) {
|
|
311
|
-
const bodyChange =
|
|
311
|
+
const bodyChange: bodyChange = {
|
|
312
312
|
command: 'Left',
|
|
313
313
|
parameter: 'default',
|
|
314
314
|
commandType: 'command',
|
|
315
|
-
}
|
|
315
|
+
}
|
|
316
316
|
await this.pushTVChanges(bodyChange)
|
|
317
317
|
}
|
|
318
318
|
}
|
|
@@ -320,11 +320,11 @@ export class TV extends irdeviceBase {
|
|
|
320
320
|
async pushVolumeUpChanges(): Promise<void> {
|
|
321
321
|
await this.debugLog(`pushVolumeUpChanges disablePushDetail: ${this.disablePushDetail}`)
|
|
322
322
|
if (!this.disablePushDetail) {
|
|
323
|
-
const bodyChange =
|
|
323
|
+
const bodyChange: bodyChange = {
|
|
324
324
|
command: 'volumeAdd',
|
|
325
325
|
parameter: 'default',
|
|
326
326
|
commandType: 'command',
|
|
327
|
-
}
|
|
327
|
+
}
|
|
328
328
|
await this.pushTVChanges(bodyChange)
|
|
329
329
|
}
|
|
330
330
|
}
|
|
@@ -332,11 +332,11 @@ export class TV extends irdeviceBase {
|
|
|
332
332
|
async pushVolumeDownChanges(): Promise<void> {
|
|
333
333
|
await this.debugLog(`pushVolumeDownChanges disablePushDetail: ${this.disablePushDetail}`)
|
|
334
334
|
if (!this.disablePushDetail) {
|
|
335
|
-
const bodyChange =
|
|
335
|
+
const bodyChange: bodyChange = {
|
|
336
336
|
command: 'volumeSub',
|
|
337
337
|
parameter: 'default',
|
|
338
338
|
commandType: 'command',
|
|
339
|
-
}
|
|
339
|
+
}
|
|
340
340
|
await this.pushTVChanges(bodyChange)
|
|
341
341
|
}
|
|
342
342
|
}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* vacuumcleaner.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
|
+
import type { bodyChange, irdevice } from 'node-switchbot'
|
|
6
7
|
|
|
7
8
|
import type { SwitchBotPlatform } from '../platform.js'
|
|
8
9
|
import type { irDevicesConfig } from '../settings.js'
|
|
9
|
-
import type { irdevice } from '../types/irdevicelist.js'
|
|
10
10
|
|
|
11
11
|
import { irdeviceBase } from './irdevice.js'
|
|
12
12
|
|
|
@@ -69,11 +69,11 @@ export class VacuumCleaner extends irdeviceBase {
|
|
|
69
69
|
if (this.Switch.On && !this.disablePushOn) {
|
|
70
70
|
const commandType: string = await this.commandType()
|
|
71
71
|
const command: string = await this.commandOn()
|
|
72
|
-
const bodyChange =
|
|
72
|
+
const bodyChange: bodyChange = {
|
|
73
73
|
command,
|
|
74
74
|
parameter: 'default',
|
|
75
75
|
commandType,
|
|
76
|
-
}
|
|
76
|
+
}
|
|
77
77
|
await this.pushChanges(bodyChange)
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -83,11 +83,11 @@ export class VacuumCleaner extends irdeviceBase {
|
|
|
83
83
|
if (!this.Switch.On && !this.disablePushOff) {
|
|
84
84
|
const commandType: string = await this.commandType()
|
|
85
85
|
const command: string = await this.commandOff()
|
|
86
|
-
const bodyChange =
|
|
86
|
+
const bodyChange: bodyChange = {
|
|
87
87
|
command,
|
|
88
88
|
parameter: 'default',
|
|
89
89
|
commandType,
|
|
90
|
-
}
|
|
90
|
+
}
|
|
91
91
|
await this.pushChanges(bodyChange)
|
|
92
92
|
}
|
|
93
93
|
}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* waterheater.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
|
+
import type { bodyChange, irdevice } from 'node-switchbot'
|
|
6
7
|
|
|
7
8
|
import type { SwitchBotPlatform } from '../platform.js'
|
|
8
9
|
import type { irDevicesConfig } from '../settings.js'
|
|
9
|
-
import type { irdevice } from '../types/irdevicelist.js'
|
|
10
10
|
|
|
11
11
|
import { irdeviceBase } from './irdevice.js'
|
|
12
12
|
|
|
@@ -70,11 +70,11 @@ export class WaterHeater extends irdeviceBase {
|
|
|
70
70
|
if (this.Valve.Active === this.hap.Characteristic.Active.ACTIVE && !this.disablePushOn) {
|
|
71
71
|
const commandType: string = await this.commandType()
|
|
72
72
|
const command: string = await this.commandOn()
|
|
73
|
-
const bodyChange =
|
|
73
|
+
const bodyChange: bodyChange = {
|
|
74
74
|
command,
|
|
75
75
|
parameter: 'default',
|
|
76
76
|
commandType,
|
|
77
|
-
}
|
|
77
|
+
}
|
|
78
78
|
await this.pushChanges(bodyChange)
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -84,11 +84,11 @@ export class WaterHeater extends irdeviceBase {
|
|
|
84
84
|
if (this.Valve.Active === this.hap.Characteristic.Active.INACTIVE && !this.disablePushOff) {
|
|
85
85
|
const commandType: string = await this.commandType()
|
|
86
86
|
const command: string = await this.commandOff()
|
|
87
|
-
const bodyChange =
|
|
87
|
+
const bodyChange: bodyChange = {
|
|
88
88
|
command,
|
|
89
89
|
parameter: 'default',
|
|
90
90
|
commandType,
|
|
91
|
-
}
|
|
91
|
+
}
|
|
92
92
|
await this.pushChanges(bodyChange)
|
|
93
93
|
}
|
|
94
94
|
}
|
package/src/platform.ts
CHANGED
|
@@ -10,8 +10,6 @@ import type { MqttClient } from 'mqtt'
|
|
|
10
10
|
import type { Dispatcher } from 'undici'
|
|
11
11
|
|
|
12
12
|
import type { devicesConfig, irDevicesConfig, options, SwitchBotPlatformConfig } from './settings.js'
|
|
13
|
-
import type { blindTilt, curtain, curtain3, device } from './types/devicelist.js'
|
|
14
|
-
import type { irdevice } from './types/irdevicelist.js'
|
|
15
13
|
|
|
16
14
|
import { Buffer } from 'node:buffer'
|
|
17
15
|
import crypto, { randomUUID } from 'node:crypto'
|
|
@@ -26,9 +24,10 @@ import { EveHomeKitTypes } from 'homebridge-lib/EveHomeKitTypes'
|
|
|
26
24
|
* For Testing Locally:
|
|
27
25
|
* import { SwitchBotModel } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
|
|
28
26
|
*/
|
|
29
|
-
import {
|
|
27
|
+
import type { blindTilt, curtain, curtain3, device, irdevice } from 'node-switchbot'
|
|
28
|
+
|
|
29
|
+
import { LogLevel, SwitchBot, SwitchBotModel, SwitchBotOpenAPI } from 'node-switchbot'
|
|
30
30
|
import { queueScheduler } from 'rxjs'
|
|
31
|
-
import { request } from 'undici'
|
|
32
31
|
|
|
33
32
|
import { BlindTilt } from './device/blindtilt.js'
|
|
34
33
|
import { Bot } from './device/bot.js'
|
|
@@ -92,6 +91,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
92
91
|
// Event Handlers
|
|
93
92
|
public readonly webhookEventHandler: { [x: string]: (context: any) => void } = {}
|
|
94
93
|
public readonly bleEventHandler: { [x: string]: (context: any) => void } = {}
|
|
94
|
+
switchBotAPI: SwitchBotOpenAPI
|
|
95
95
|
|
|
96
96
|
constructor(
|
|
97
97
|
log: Logging,
|
|
@@ -100,6 +100,9 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
100
100
|
) {
|
|
101
101
|
this.api = api
|
|
102
102
|
this.log = log
|
|
103
|
+
this.switchBotAPI = new SwitchBotOpenAPI(this.config.credentials?.token, this.config.credentials?.secret)
|
|
104
|
+
// Set the log level
|
|
105
|
+
this.switchBotAPI.setLogLevel(LogLevel.DEBUG)
|
|
103
106
|
|
|
104
107
|
// only load if configured
|
|
105
108
|
if (!config) {
|
|
@@ -208,121 +211,32 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
208
211
|
// webhook configuration
|
|
209
212
|
if (this.config.options?.webhookURL) {
|
|
210
213
|
const url = this.config.options?.webhookURL
|
|
211
|
-
|
|
212
214
|
try {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
if (request.url === path && request.method === 'POST') {
|
|
219
|
-
request.on('data', async (data) => {
|
|
220
|
-
try {
|
|
221
|
-
const body = JSON.parse(data)
|
|
222
|
-
await this.debugLog(`Received Webhook: ${JSON.stringify(body)}`)
|
|
223
|
-
if (this.config.options?.mqttURL) {
|
|
224
|
-
const mac = body.context.deviceMac?.toLowerCase().match(/[\s\S]{1,2}/g)?.join(':')
|
|
225
|
-
const options = this.config.options?.mqttPubOptions || {}
|
|
226
|
-
this.mqttClient?.publish(`homebridge-switchbot/webhook/${mac}`, `${JSON.stringify(body.context)}`, options)
|
|
227
|
-
}
|
|
228
|
-
this.webhookEventHandler[body.context.deviceMac]?.(body.context)
|
|
229
|
-
} catch (e: any) {
|
|
230
|
-
await this.errorLog(`Failed to handle webhook event. Error:${e}`)
|
|
231
|
-
}
|
|
232
|
-
})
|
|
233
|
-
response.writeHead(200, { 'Content-Type': 'text/plain' })
|
|
234
|
-
response.end('OK')
|
|
235
|
-
}
|
|
236
|
-
// else {
|
|
237
|
-
// response.writeHead(403, {'Content-Type': 'text/plain'});
|
|
238
|
-
// response.end(`NG`);
|
|
239
|
-
// }
|
|
240
|
-
} catch (e: any) {
|
|
241
|
-
this.errorLog(`Failed to handle webhook event. Error:${e}`)
|
|
242
|
-
}
|
|
243
|
-
}).listen(port || 80)
|
|
244
|
-
} catch (e: any) {
|
|
245
|
-
await this.errorLog(`Failed to create webhook listener. Error:${e.message}`)
|
|
246
|
-
return
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
try {
|
|
250
|
-
const { body, statusCode } = await request(setupWebhook, {
|
|
251
|
-
method: 'POST',
|
|
252
|
-
headers: this.generateHeaders(),
|
|
253
|
-
body: JSON.stringify({
|
|
254
|
-
action: 'setupWebhook',
|
|
255
|
-
url,
|
|
256
|
-
deviceList: 'ALL',
|
|
257
|
-
}),
|
|
215
|
+
this.switchBotAPI.setupWebhook(url)
|
|
216
|
+
// Listen for webhook events
|
|
217
|
+
this.switchBotAPI.on('webhookEvent', (body) => {
|
|
218
|
+
this.debugLog('Received webhook event:', body)
|
|
219
|
+
this.webhookEventHandler[body.context.deviceMac]?.(body.context)
|
|
258
220
|
})
|
|
259
|
-
const response: any = await body.json()
|
|
260
|
-
await this.debugLog(`setupWebhook: url:${url}, body:${JSON.stringify(response)}, statusCode:${statusCode}`)
|
|
261
|
-
if (statusCode !== 200 || response?.statusCode !== 100) {
|
|
262
|
-
await this.errorLog(`Failed to configure webhook. Existing webhook well be overridden. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`)
|
|
263
|
-
}
|
|
264
221
|
} catch (e: any) {
|
|
265
|
-
await this.errorLog(`Failed to
|
|
222
|
+
await this.errorLog(`Failed to setup webhook. Error:${e.message}`)
|
|
266
223
|
}
|
|
267
224
|
|
|
268
225
|
try {
|
|
269
|
-
|
|
270
|
-
method: 'POST',
|
|
271
|
-
headers: this.generateHeaders(),
|
|
272
|
-
body: JSON.stringify({
|
|
273
|
-
action: 'updateWebhook',
|
|
274
|
-
config: {
|
|
275
|
-
url,
|
|
276
|
-
enable: true,
|
|
277
|
-
},
|
|
278
|
-
}),
|
|
279
|
-
})
|
|
280
|
-
const response: any = await body.json()
|
|
281
|
-
await this.debugLog(`updateWebhook: url:${url}, body:${JSON.stringify(response)}, statusCode:${statusCode}`)
|
|
282
|
-
if (statusCode !== 200 || response?.statusCode !== 100) {
|
|
283
|
-
await this.errorLog(`Failed to update webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`)
|
|
284
|
-
}
|
|
226
|
+
this.switchBotAPI.updateWebhook(url)
|
|
285
227
|
} catch (e: any) {
|
|
286
228
|
await this.errorLog(`Failed to update webhook. Error:${e.message}`)
|
|
287
229
|
}
|
|
288
230
|
|
|
289
231
|
try {
|
|
290
|
-
|
|
291
|
-
method: 'POST',
|
|
292
|
-
headers: this.generateHeaders(),
|
|
293
|
-
body: JSON.stringify({
|
|
294
|
-
action: 'queryUrl',
|
|
295
|
-
}),
|
|
296
|
-
})
|
|
297
|
-
const response: any = await body.json()
|
|
298
|
-
await this.debugLog(`queryWebhook: body:${JSON.stringify(response)}`)
|
|
299
|
-
await this.debugLog(`queryWebhook: statusCode:${statusCode}`)
|
|
300
|
-
if (statusCode !== 200 || response?.statusCode !== 100) {
|
|
301
|
-
await this.errorLog(`Failed to query webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`)
|
|
302
|
-
} else {
|
|
303
|
-
await this.infoLog(`Listening webhook on ${response?.body?.urls[0]}`)
|
|
304
|
-
}
|
|
232
|
+
this.switchBotAPI.queryWebhook()
|
|
305
233
|
} catch (e: any) {
|
|
306
|
-
await this.errorLog(`Failed to query webhook. Error:${e}`)
|
|
234
|
+
await this.errorLog(`Failed to query webhook. Error:${e.message}`)
|
|
307
235
|
}
|
|
308
236
|
|
|
309
237
|
this.api.on('shutdown', async () => {
|
|
310
238
|
try {
|
|
311
|
-
|
|
312
|
-
method: 'POST',
|
|
313
|
-
headers: this.generateHeaders(),
|
|
314
|
-
body: JSON.stringify({
|
|
315
|
-
action: 'deleteWebhook',
|
|
316
|
-
url,
|
|
317
|
-
}),
|
|
318
|
-
})
|
|
319
|
-
const response: any = await body.json()
|
|
320
|
-
await this.debugLog(`deleteWebhook: url:${url}, body:${JSON.stringify(response)}, statusCode:${statusCode}`)
|
|
321
|
-
if (statusCode !== 200 || response?.statusCode !== 100) {
|
|
322
|
-
await this.errorLog(`Failed to delete webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`)
|
|
323
|
-
} else {
|
|
324
|
-
await this.infoLog('Unregistered webhook to close listening.')
|
|
325
|
-
}
|
|
239
|
+
this.switchBotAPI.deleteWebhook(url)
|
|
326
240
|
} catch (e: any) {
|
|
327
241
|
await this.errorLog(`Failed to delete webhook. Error:${e.message}`)
|
|
328
242
|
}
|
|
@@ -341,7 +255,11 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
341
255
|
(async () => {
|
|
342
256
|
// Start to monitor advertisement packets
|
|
343
257
|
await this.debugLog('Scanning for BLE SwitchBot devices...')
|
|
344
|
-
|
|
258
|
+
try {
|
|
259
|
+
await switchbot.startScan()
|
|
260
|
+
} catch (e: any) {
|
|
261
|
+
await this.errorLog(`Failed to start BLE scanning. Error:${e}`)
|
|
262
|
+
}
|
|
345
263
|
// Set an event handler to monitor advertisement packets
|
|
346
264
|
switchbot.onadvertisement = async (ad: any) => {
|
|
347
265
|
try {
|
|
@@ -531,25 +449,6 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
531
449
|
}
|
|
532
450
|
}
|
|
533
451
|
|
|
534
|
-
generateHeaders = () => {
|
|
535
|
-
const t = `${Date.now()}`
|
|
536
|
-
const nonce = randomUUID()
|
|
537
|
-
const data = this.config.credentials?.token + t + nonce
|
|
538
|
-
const signTerm = crypto
|
|
539
|
-
.createHmac('sha256', this.config.credentials?.secret)
|
|
540
|
-
.update(Buffer.from(data, 'utf-8'))
|
|
541
|
-
.digest()
|
|
542
|
-
const sign = signTerm.toString('base64')
|
|
543
|
-
|
|
544
|
-
return {
|
|
545
|
-
'Authorization': this.config.credentials?.token,
|
|
546
|
-
'sign': sign,
|
|
547
|
-
'nonce': nonce,
|
|
548
|
-
't': t,
|
|
549
|
-
'Content-Type': 'application/json',
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
|
|
553
452
|
async discoverDevices() {
|
|
554
453
|
if (!this.config.credentials?.token) {
|
|
555
454
|
return this.handleManualConfig()
|
|
@@ -565,7 +464,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
565
464
|
|
|
566
465
|
while (retryCount < maxRetries) {
|
|
567
466
|
try {
|
|
568
|
-
const { body, statusCode } = await
|
|
467
|
+
const { body, statusCode } = await this.switchBotAPI.getDevices()
|
|
569
468
|
await this.debugWarnLog(`statusCode: ${statusCode}`)
|
|
570
469
|
const devicesAPI: any = await body.json()
|
|
571
470
|
await this.debugWarnLog(`devicesAPI: ${JSON.stringify(devicesAPI)}`)
|
|
@@ -2639,13 +2538,13 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
2639
2538
|
}
|
|
2640
2539
|
}
|
|
2641
2540
|
|
|
2642
|
-
async retryRequest(
|
|
2541
|
+
async retryRequest(deviceId: string, deviceMaxRetries: number, deviceDelayBetweenRetries: number): Promise<{ body: any, statusCode: number }> {
|
|
2643
2542
|
let retryCount = 0
|
|
2644
2543
|
const maxRetries = deviceMaxRetries
|
|
2645
2544
|
const delayBetweenRetries = deviceDelayBetweenRetries
|
|
2646
2545
|
while (retryCount < maxRetries) {
|
|
2647
2546
|
try {
|
|
2648
|
-
const { body, statusCode } = await
|
|
2547
|
+
const { body, statusCode } = await this.switchBotAPI.getDeviceStatus(deviceId)
|
|
2649
2548
|
if (statusCode === 200 || statusCode === 100) {
|
|
2650
2549
|
return { body, statusCode }
|
|
2651
2550
|
} else {
|
package/src/settings.ts
CHANGED
|
@@ -4,10 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { IClientOptions } from 'async-mqtt'
|
|
6
6
|
import type { PlatformConfig } from 'homebridge'
|
|
7
|
-
import type { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from 'node-switchbot'
|
|
8
|
-
|
|
9
|
-
import type { device } from './types/devicelist'
|
|
10
|
-
import type { irdevice } from './types/irdevicelist'
|
|
7
|
+
import type { device, irdevice, SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from 'node-switchbot'
|
|
11
8
|
/**
|
|
12
9
|
* This is the name of the platform that users will use to register the plugin in the Homebridge config.json
|
|
13
10
|
*/
|
package/src/utils.ts
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
*
|
|
3
3
|
* util.ts: @switchbot/homebridge-switchbot platform class.
|
|
4
4
|
*/
|
|
5
|
+
import type { blindTilt, curtain, curtain3, device } from 'node-switchbot'
|
|
6
|
+
|
|
5
7
|
import type { devicesConfig } from './settings.js'
|
|
6
|
-
import type { blindTilt, curtain, curtain3, device } from './types/devicelist.js'
|
|
7
8
|
|
|
8
9
|
export enum SwitchBotModel {
|
|
9
10
|
HubMini = 'W0202200',
|