@switchbot/homebridge-switchbot 3.8.1 → 3.8.2-beta.1
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/.github/npm-version-script.cjs +81 -0
- package/CHANGELOG.md +8 -0
- package/dist/device/blindtilt.d.ts.map +1 -1
- package/dist/device/blindtilt.js +51 -38
- package/dist/device/blindtilt.js.map +1 -1
- package/dist/device/bot.d.ts.map +1 -1
- package/dist/device/bot.js +78 -64
- package/dist/device/bot.js.map +1 -1
- package/dist/device/ceilinglight.d.ts.map +1 -1
- package/dist/device/ceilinglight.js +55 -42
- package/dist/device/ceilinglight.js.map +1 -1
- package/dist/device/colorbulb.d.ts.map +1 -1
- package/dist/device/colorbulb.js +133 -99
- package/dist/device/colorbulb.js.map +1 -1
- package/dist/device/contact.d.ts.map +1 -1
- package/dist/device/contact.js +20 -13
- package/dist/device/contact.js.map +1 -1
- package/dist/device/curtain.d.ts.map +1 -1
- package/dist/device/curtain.js +88 -70
- package/dist/device/curtain.js.map +1 -1
- package/dist/device/device.d.ts +0 -1
- package/dist/device/device.d.ts.map +1 -1
- package/dist/device/device.js +26 -22
- package/dist/device/device.js.map +1 -1
- package/dist/device/fan.d.ts.map +1 -1
- package/dist/device/fan.js +54 -40
- package/dist/device/fan.js.map +1 -1
- package/dist/device/hub.d.ts.map +1 -1
- package/dist/device/hub.js +20 -14
- package/dist/device/hub.js.map +1 -1
- package/dist/device/humidifier.d.ts.map +1 -1
- package/dist/device/humidifier.js +45 -32
- package/dist/device/humidifier.js.map +1 -1
- package/dist/device/iosensor.d.ts.map +1 -1
- package/dist/device/iosensor.js +20 -14
- package/dist/device/iosensor.js.map +1 -1
- package/dist/device/lightstrip.d.ts.map +1 -1
- package/dist/device/lightstrip.js +107 -80
- package/dist/device/lightstrip.js.map +1 -1
- package/dist/device/lock.d.ts.map +1 -1
- package/dist/device/lock.js +54 -40
- package/dist/device/lock.js.map +1 -1
- package/dist/device/meter.d.ts.map +1 -1
- package/dist/device/meter.js +20 -14
- package/dist/device/meter.js.map +1 -1
- package/dist/device/meterplus.d.ts.map +1 -1
- package/dist/device/meterplus.js +20 -14
- package/dist/device/meterplus.js.map +1 -1
- package/dist/device/motion.d.ts.map +1 -1
- package/dist/device/motion.js +20 -13
- package/dist/device/motion.js.map +1 -1
- package/dist/device/plug.d.ts.map +1 -1
- package/dist/device/plug.js +55 -41
- package/dist/device/plug.js.map +1 -1
- package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
- package/dist/device/robotvacuumcleaner.js +55 -41
- package/dist/device/robotvacuumcleaner.js.map +1 -1
- package/dist/device/waterdetector.d.ts.map +1 -1
- package/dist/device/waterdetector.js +20 -13
- package/dist/device/waterdetector.js.map +1 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +10 -3
- package/dist/platform.js.map +1 -1
- package/dist/utils.d.ts +10 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +27 -0
- package/dist/utils.js.map +1 -1
- package/package.json +4 -4
- package/src/device/blindtilt.ts +47 -36
- package/src/device/bot.ts +71 -59
- package/src/device/ceilinglight.ts +50 -39
- package/src/device/colorbulb.ts +128 -99
- package/src/device/contact.ts +16 -10
- package/src/device/curtain.ts +84 -69
- package/src/device/device.ts +24 -23
- package/src/device/fan.ts +49 -37
- package/src/device/hub.ts +16 -11
- package/src/device/humidifier.ts +41 -30
- package/src/device/iosensor.ts +16 -11
- package/src/device/lightstrip.ts +102 -79
- package/src/device/lock.ts +49 -37
- package/src/device/meter.ts +16 -11
- package/src/device/meterplus.ts +16 -11
- package/src/device/motion.ts +16 -10
- package/src/device/plug.ts +50 -38
- package/src/device/robotvacuumcleaner.ts +50 -38
- package/src/device/waterdetector.ts +16 -10
- package/src/platform.ts +9 -3
- package/src/utils.ts +33 -0
package/src/device/colorbulb.ts
CHANGED
|
@@ -18,7 +18,7 @@ import type { colorBulbWebhookContext } from '../types/devicewebhookstatus.js'
|
|
|
18
18
|
import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
|
|
19
19
|
import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
|
|
20
20
|
|
|
21
|
-
import { hs2rgb, m2hs, rgb2hs } from '../utils.js'
|
|
21
|
+
import { formatDeviceIdAsMac, hs2rgb, m2hs, rgb2hs } from '../utils.js'
|
|
22
22
|
import { deviceBase } from './device.js'
|
|
23
23
|
|
|
24
24
|
/**
|
|
@@ -333,17 +333,22 @@ export class ColorBulb extends deviceBase {
|
|
|
333
333
|
await this.debugLog('registerPlatformBLE')
|
|
334
334
|
if (this.config.options?.BLE) {
|
|
335
335
|
await this.debugLog('is listening to Platform BLE.')
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
336
|
+
try {
|
|
337
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
338
|
+
this.device.bleMac = formattedDeviceId
|
|
339
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
340
|
+
this.platform.bleEventHandler[this.device.bleMac] = async (context: colorBulbServiceData) => {
|
|
341
|
+
try {
|
|
342
|
+
await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
|
|
343
|
+
this.serviceData = context
|
|
344
|
+
await this.BLEparseStatus()
|
|
345
|
+
await this.updateHomeKitCharacteristics()
|
|
346
|
+
} catch (e: any) {
|
|
347
|
+
await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
|
|
348
|
+
}
|
|
346
349
|
}
|
|
350
|
+
} catch (error) {
|
|
351
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
347
352
|
}
|
|
348
353
|
} else {
|
|
349
354
|
await this.debugLog('is not listening to Platform BLE')
|
|
@@ -451,35 +456,41 @@ export class ColorBulb extends deviceBase {
|
|
|
451
456
|
if (this.LightBulb.On !== this.accessory.context.On) {
|
|
452
457
|
await this.debugLog(`BLEpushChanges On: ${this.LightBulb.On}, OnCached: ${this.accessory.context.On}`)
|
|
453
458
|
const switchbot = await this.platform.connectBLE(this.accessory, this.device)
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
459
|
+
try {
|
|
460
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
461
|
+
this.device.bleMac = formattedDeviceId
|
|
462
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
463
|
+
if (switchbot !== false) {
|
|
464
|
+
switchbot
|
|
465
|
+
.discover({ model: this.device.bleModel, id: this.device.bleMac })
|
|
466
|
+
.then(async (device_list: any) => {
|
|
467
|
+
await this.infoLog(`On: ${this.LightBulb.On}`)
|
|
468
|
+
return await this.retryBLE({
|
|
469
|
+
max: await this.maxRetryBLE(),
|
|
470
|
+
fn: async () => {
|
|
471
|
+
if (this.LightBulb.On) {
|
|
472
|
+
return await device_list[0].turnOn({ id: this.device.bleMac })
|
|
473
|
+
} else {
|
|
474
|
+
return await device_list[0].turnOff({ id: this.device.bleMac })
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
})
|
|
469
478
|
})
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
479
|
+
.then(async () => {
|
|
480
|
+
await this.successLog(`On: ${this.LightBulb.On} sent over SwitchBot BLE, sent successfully`)
|
|
481
|
+
await this.updateHomeKitCharacteristics()
|
|
482
|
+
})
|
|
483
|
+
.catch(async (e: any) => {
|
|
484
|
+
await this.apiError(e)
|
|
485
|
+
await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
|
|
486
|
+
await this.BLEPushConnection()
|
|
487
|
+
})
|
|
488
|
+
} else {
|
|
489
|
+
await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
|
|
490
|
+
await this.BLEPushConnection()
|
|
491
|
+
}
|
|
492
|
+
} catch (error) {
|
|
493
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
483
494
|
}
|
|
484
495
|
} else {
|
|
485
496
|
await this.debugLog(`No changes (BLEpushChanges), On: ${this.LightBulb.On}, OnCached: ${this.accessory.context.On}`)
|
|
@@ -490,26 +501,32 @@ export class ColorBulb extends deviceBase {
|
|
|
490
501
|
await this.debugLog('BLEpushBrightnessChanges')
|
|
491
502
|
if (this.LightBulb.Brightness !== this.accessory.context.Brightness) {
|
|
492
503
|
const switchbot = await this.platform.connectBLE(this.accessory, this.device)
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
504
|
+
try {
|
|
505
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
506
|
+
this.device.bleMac = formattedDeviceId
|
|
507
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
508
|
+
if (switchbot !== false) {
|
|
509
|
+
switchbot
|
|
510
|
+
.discover({ model: this.device.bleModel, id: this.device.bleMac })
|
|
511
|
+
.then(async (device_list: any) => {
|
|
512
|
+
await this.infoLog(`Target Brightness: ${this.LightBulb.Brightness}`)
|
|
513
|
+
return await device_list[0].setBrightness(this.LightBulb.Brightness)
|
|
514
|
+
})
|
|
515
|
+
.then(async () => {
|
|
516
|
+
await this.successLog(`Brightness: ${this.LightBulb.Brightness} sent over SwitchBot BLE, sent successfully`)
|
|
517
|
+
await this.updateHomeKitCharacteristics()
|
|
518
|
+
})
|
|
519
|
+
.catch(async (e: any) => {
|
|
520
|
+
await this.apiError(e)
|
|
521
|
+
await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
|
|
522
|
+
await this.BLEPushConnection()
|
|
523
|
+
})
|
|
524
|
+
} else {
|
|
525
|
+
await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
|
|
526
|
+
await this.BLEPushConnection()
|
|
527
|
+
}
|
|
528
|
+
} catch (error) {
|
|
529
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
513
530
|
}
|
|
514
531
|
} else {
|
|
515
532
|
await this.debugLog(`No changes (BLEpushBrightnessChanges), Brightness: ${this.LightBulb.Brightness}, BrightnessCached: ${this.accessory.context.Brightness}`)
|
|
@@ -522,26 +539,32 @@ export class ColorBulb extends deviceBase {
|
|
|
522
539
|
const kelvin = Math.round(1000000 / Number(this.LightBulb.ColorTemperature))
|
|
523
540
|
this.accessory.context.kelvin = kelvin
|
|
524
541
|
const switchbot = await this.platform.connectBLE(this.accessory, this.device)
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
542
|
+
try {
|
|
543
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
544
|
+
this.device.bleMac = formattedDeviceId
|
|
545
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
546
|
+
if (switchbot !== false) {
|
|
547
|
+
switchbot
|
|
548
|
+
.discover({ model: this.device.bleModel, id: this.device.bleMac })
|
|
549
|
+
.then(async (device_list: any) => {
|
|
550
|
+
await this.infoLog(`ColorTemperature: ${this.LightBulb.ColorTemperature}`)
|
|
551
|
+
return await device_list[0].setColorTemperature(kelvin)
|
|
552
|
+
})
|
|
553
|
+
.then(async () => {
|
|
554
|
+
await this.successLog(`ColorTemperature: ${this.LightBulb.ColorTemperature} sent over SwitchBot BLE, sent successfully`)
|
|
555
|
+
await this.updateHomeKitCharacteristics()
|
|
556
|
+
})
|
|
557
|
+
.catch(async (e: any) => {
|
|
558
|
+
await this.apiError(e)
|
|
559
|
+
await this.errorLog(`failed BLEpushRGBChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
|
|
560
|
+
await this.BLEPushConnection()
|
|
561
|
+
})
|
|
562
|
+
} else {
|
|
563
|
+
await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
|
|
564
|
+
await this.BLEPushConnection()
|
|
565
|
+
}
|
|
566
|
+
} catch (error) {
|
|
567
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
545
568
|
}
|
|
546
569
|
} else {
|
|
547
570
|
await this.debugLog(`No changes (BLEpushColorTemperatureChanges), ColorTemperature: ${this.LightBulb.ColorTemperature}, ColorTemperatureCached: ${this.accessory.context.ColorTemperature}`)
|
|
@@ -555,26 +578,32 @@ export class ColorBulb extends deviceBase {
|
|
|
555
578
|
const [red, green, blue] = hs2rgb(this.LightBulb.Hue, this.LightBulb.Saturation)
|
|
556
579
|
await this.debugLog(`rgb: ${JSON.stringify([red, green, blue])}`)
|
|
557
580
|
const switchbot = await this.platform.connectBLE(this.accessory, this.device)
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
581
|
+
try {
|
|
582
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
583
|
+
this.device.bleMac = formattedDeviceId
|
|
584
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
585
|
+
if (switchbot !== false) {
|
|
586
|
+
switchbot
|
|
587
|
+
.discover({ model: this.device.bleModel, id: this.device.bleMac })
|
|
588
|
+
.then(async (device_list: any) => {
|
|
589
|
+
await this.infoLog(`RGB: ${(this.LightBulb.Brightness, red, green, blue)}`)
|
|
590
|
+
return await device_list[0].setRGB(this.LightBulb.Brightness, red, green, blue)
|
|
591
|
+
})
|
|
592
|
+
.then(async () => {
|
|
593
|
+
await this.successLog(`RGB: ${(this.LightBulb.Brightness, red, green, blue)} sent over SwitchBot BLE, sent successfully`)
|
|
594
|
+
await this.updateHomeKitCharacteristics()
|
|
595
|
+
})
|
|
596
|
+
.catch(async (e: any) => {
|
|
597
|
+
await this.apiError(e)
|
|
598
|
+
await this.errorLog(`failed BLEpushRGBChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
|
|
599
|
+
await this.BLEPushConnection()
|
|
600
|
+
})
|
|
601
|
+
} else {
|
|
602
|
+
await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
|
|
603
|
+
await this.BLEPushConnection()
|
|
604
|
+
}
|
|
605
|
+
} catch (error) {
|
|
606
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
578
607
|
}
|
|
579
608
|
} else {
|
|
580
609
|
await this.debugLog(`No changes (BLEpushRGBChanges), Hue: ${this.LightBulb.Hue}, HueCached: ${this.accessory.context.Hue}, Saturation: ${this.LightBulb.Saturation}, SaturationCached: ${this.accessory.context.Saturation}`)
|
package/src/device/contact.ts
CHANGED
|
@@ -18,6 +18,7 @@ import type { contactSensorWebhookContext } from '../types/devicewebhookstatus.j
|
|
|
18
18
|
import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
|
|
19
19
|
import { interval, skipWhile, Subject } from 'rxjs'
|
|
20
20
|
|
|
21
|
+
import { formatDeviceIdAsMac } from '../utils.js'
|
|
21
22
|
import { deviceBase } from './device.js'
|
|
22
23
|
|
|
23
24
|
/**
|
|
@@ -326,17 +327,22 @@ export class Contact extends deviceBase {
|
|
|
326
327
|
await this.debugLog('registerPlatformBLE')
|
|
327
328
|
if (this.config.options?.BLE) {
|
|
328
329
|
await this.debugLog('is listening to Platform BLE.')
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
330
|
+
try {
|
|
331
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
332
|
+
this.device.bleMac = formattedDeviceId
|
|
333
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
334
|
+
this.platform.bleEventHandler[this.device.bleMac] = async (context: contactSensorServiceData) => {
|
|
335
|
+
try {
|
|
336
|
+
await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
|
|
337
|
+
this.serviceData = context
|
|
338
|
+
await this.BLEparseStatus()
|
|
339
|
+
await this.updateHomeKitCharacteristics()
|
|
340
|
+
} catch (e: any) {
|
|
341
|
+
await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
|
|
342
|
+
}
|
|
339
343
|
}
|
|
344
|
+
} catch (error) {
|
|
345
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
340
346
|
}
|
|
341
347
|
} else {
|
|
342
348
|
await this.debugLog('is not listening to Platform BLE')
|
package/src/device/curtain.ts
CHANGED
|
@@ -20,6 +20,7 @@ import { hostname } from 'node:os'
|
|
|
20
20
|
import { SwitchBotBLEModel, SwitchBotBLEModelName } from 'node-switchbot'
|
|
21
21
|
import { debounceTime, interval, skipWhile, Subject, take, tap } from 'rxjs'
|
|
22
22
|
|
|
23
|
+
import { formatDeviceIdAsMac } from '../utils.js'
|
|
23
24
|
import { deviceBase } from './device.js'
|
|
24
25
|
|
|
25
26
|
export class Curtain extends deviceBase {
|
|
@@ -324,42 +325,45 @@ export class Curtain extends deviceBase {
|
|
|
324
325
|
return
|
|
325
326
|
}
|
|
326
327
|
|
|
327
|
-
|
|
328
|
-
.deviceId
|
|
329
|
-
.
|
|
330
|
-
.
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
328
|
+
try {
|
|
329
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
330
|
+
this.device.bleMac = formattedDeviceId
|
|
331
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
332
|
+
this.historyService = new this.platform.fakegatoAPI('custom', this.accessory, {
|
|
333
|
+
log: this.platform.log,
|
|
334
|
+
storage: 'fs',
|
|
335
|
+
filename: `${hostname().split('.')[0]}_${this.device.bleMac}_persist.json`,
|
|
336
|
+
})
|
|
337
|
+
const motion: Service
|
|
337
338
|
= this.accessory.getService(this.hap.Service.MotionSensor)
|
|
338
339
|
|| this.accessory.addService(this.hap.Service.MotionSensor, 'Motion')
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
340
|
+
motion.addOptionalCharacteristic(this.platform.eve.Characteristics.LastActivation)
|
|
341
|
+
motion.getCharacteristic(this.platform.eve.Characteristics.LastActivation).onGet(() => {
|
|
342
|
+
const lastActivation = this.accessory.context.lastActivation
|
|
343
|
+
? Math.max(0, this.accessory.context.lastActivation - this.historyService.getInitialTime())
|
|
344
|
+
: 0
|
|
345
|
+
return lastActivation
|
|
346
|
+
})
|
|
347
|
+
await this.setMinMax()
|
|
348
|
+
motion.getCharacteristic(this.hap.Characteristic.MotionDetected).on('change', (event: CharacteristicChange) => {
|
|
349
|
+
if (event.newValue !== event.oldValue) {
|
|
350
|
+
const sensor = this.accessory.getService(this.hap.Service.MotionSensor)
|
|
351
|
+
const entry = {
|
|
352
|
+
time: Math.round(new Date().valueOf() / 1000),
|
|
353
|
+
motion: event.newValue,
|
|
354
|
+
}
|
|
355
|
+
this.accessory.context.lastActivation = entry.time
|
|
356
|
+
sensor?.updateCharacteristic(
|
|
357
|
+
this.platform.eve.Characteristics.LastActivation,
|
|
358
|
+
Math.max(0, this.accessory.context.lastActivation - this.historyService.getInitialTime()),
|
|
359
|
+
)
|
|
360
|
+
this.historyService.addEntry(entry)
|
|
353
361
|
}
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
this.historyService.addEntry(entry)
|
|
360
|
-
}
|
|
361
|
-
})
|
|
362
|
-
this.updateHistory()
|
|
362
|
+
})
|
|
363
|
+
this.updateHistory()
|
|
364
|
+
} catch (error) {
|
|
365
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
366
|
+
}
|
|
363
367
|
}
|
|
364
368
|
|
|
365
369
|
async updateHistory(): Promise<void> {
|
|
@@ -541,17 +545,22 @@ export class Curtain extends deviceBase {
|
|
|
541
545
|
await this.debugLog('registerPlatformBLE')
|
|
542
546
|
if (this.config.options?.BLE) {
|
|
543
547
|
await this.debugLog('is listening to Platform BLE.')
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
548
|
+
try {
|
|
549
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
550
|
+
this.device.bleMac = formattedDeviceId
|
|
551
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
552
|
+
this.platform.bleEventHandler[this.device.bleMac] = async (context: curtainServiceData | curtain3ServiceData) => {
|
|
553
|
+
try {
|
|
554
|
+
await this.debugLog(`received BLE: ${JSON.stringify(context)}`)
|
|
555
|
+
this.serviceData = context
|
|
556
|
+
await this.BLEparseStatus()
|
|
557
|
+
await this.updateHomeKitCharacteristics()
|
|
558
|
+
} catch (e: any) {
|
|
559
|
+
await this.errorLog(`failed to handle BLE. Received: ${JSON.stringify(context)} Error: ${e}`)
|
|
560
|
+
}
|
|
554
561
|
}
|
|
562
|
+
} catch (error) {
|
|
563
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
555
564
|
}
|
|
556
565
|
} else {
|
|
557
566
|
await this.debugLog('is not listening to Platform BLE')
|
|
@@ -585,33 +594,39 @@ export class Curtain extends deviceBase {
|
|
|
585
594
|
await this.debugLog('BLEpushChanges')
|
|
586
595
|
if (this.WindowCovering.TargetPosition !== this.WindowCovering.CurrentPosition) {
|
|
587
596
|
const switchbot = await this.platform.connectBLE(this.accessory, this.device)
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
597
|
+
try {
|
|
598
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
599
|
+
this.device.bleMac = formattedDeviceId
|
|
600
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
601
|
+
const { setPositionMode, Mode }: { setPositionMode: number, Mode: string } = await this.setPerformance()
|
|
602
|
+
const adjustedMode = setPositionMode === 1 ? 0x01 : 0xFF
|
|
603
|
+
await this.debugLog(`Mode: ${Mode}, setPositionMode: ${setPositionMode}`)
|
|
604
|
+
if (switchbot !== false) {
|
|
605
|
+
switchbot
|
|
606
|
+
.discover({ model: this.device.bleModel, quick: true, id: this.device.bleMac })
|
|
607
|
+
.then(async (device_list: any) => {
|
|
608
|
+
return await this.retryBLE({
|
|
609
|
+
max: await this.maxRetryBLE(),
|
|
610
|
+
fn: async () => {
|
|
611
|
+
return await device_list[0].runToPos(100 - Number(this.WindowCovering.TargetPosition), adjustedMode)
|
|
612
|
+
},
|
|
613
|
+
})
|
|
601
614
|
})
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
+
.then(async () => {
|
|
616
|
+
await this.successLog(`TargetPostion: ${this.WindowCovering.TargetPosition} sent over SwitchBot BLE, sent successfully`)
|
|
617
|
+
await this.updateHomeKitCharacteristics()
|
|
618
|
+
})
|
|
619
|
+
.catch(async (e: any) => {
|
|
620
|
+
await this.apiError(e)
|
|
621
|
+
await this.errorLog(`failed BLEpushChanges with ${this.device.connectionType} Connection, Error Message: ${JSON.stringify(e.message)}`)
|
|
622
|
+
await this.BLEPushConnection()
|
|
623
|
+
})
|
|
624
|
+
} else {
|
|
625
|
+
await this.errorLog(`wasn't able to establish BLE Connection, node-switchbot: ${switchbot}`)
|
|
626
|
+
await this.BLEPushConnection()
|
|
627
|
+
}
|
|
628
|
+
} catch (error) {
|
|
629
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
615
630
|
}
|
|
616
631
|
} else {
|
|
617
632
|
await this.debugLog(`No changes (BLEpushChanges), TargetPosition: ${this.WindowCovering.TargetPosition}, CurrentPosition: ${this.WindowCovering.CurrentPosition}`)
|
package/src/device/device.ts
CHANGED
|
@@ -17,7 +17,7 @@ import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName
|
|
|
17
17
|
import { request } from 'undici'
|
|
18
18
|
|
|
19
19
|
import { Devices } from '../settings.js'
|
|
20
|
-
import { BlindTiltMappingMode, sleep } from '../utils.js'
|
|
20
|
+
import { BlindTiltMappingMode, formatDeviceIdAsMac, sleep } from '../utils.js'
|
|
21
21
|
|
|
22
22
|
export abstract class deviceBase {
|
|
23
23
|
public readonly api: API
|
|
@@ -261,33 +261,34 @@ export abstract class deviceBase {
|
|
|
261
261
|
* Setup EVE history graph feature if enabled.
|
|
262
262
|
*/
|
|
263
263
|
async setupHistoryService(accessory: PlatformAccessory, device: device & devicesConfig): Promise<void> {
|
|
264
|
-
|
|
265
|
-
.deviceId
|
|
266
|
-
.
|
|
267
|
-
.
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
264
|
+
try {
|
|
265
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
266
|
+
this.device.bleMac = formattedDeviceId
|
|
267
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
268
|
+
this.historyService = device.history
|
|
269
|
+
? new this.platform.fakegatoAPI('room', accessory, {
|
|
270
|
+
log: this.platform.log,
|
|
271
|
+
storage: 'fs',
|
|
272
|
+
filename: `${hostname().split('.')[0]}_${this.device.bleMac}_persist.json`,
|
|
273
|
+
})
|
|
274
|
+
: null
|
|
275
|
+
} catch (error) {
|
|
276
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
277
|
+
}
|
|
275
278
|
}
|
|
276
279
|
|
|
277
280
|
async switchbotBLE(): Promise<any> {
|
|
278
281
|
const switchbot = await this.platform.connectBLE(this.accessory, this.device)
|
|
279
282
|
// Convert to BLE Address
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
.
|
|
288
|
-
|
|
289
|
-
.toLowerCase()
|
|
290
|
-
await this.debugLog(`BLE Address: ${this.device.bleMac}`)
|
|
283
|
+
try {
|
|
284
|
+
const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId)
|
|
285
|
+
this.device.bleMac = formattedDeviceId
|
|
286
|
+
await this.debugLog(`bleMac: ${this.device.bleMac}`)
|
|
287
|
+
await this.getCustomBLEAddress(switchbot)
|
|
288
|
+
return switchbot
|
|
289
|
+
} catch (error) {
|
|
290
|
+
await this.errorLog(`failed to format device ID as MAC, Error: ${error}`)
|
|
291
|
+
}
|
|
291
292
|
}
|
|
292
293
|
|
|
293
294
|
async monitorAdvertisementPackets(switchbot: any) {
|