@switchbot/homebridge-switchbot 3.5.0-beta.56 → 3.5.0-beta.58
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/.vscode/settings.json +4 -1
- package/dist/device/blindtilt.d.ts +4 -4
- package/dist/device/blindtilt.d.ts.map +1 -1
- package/dist/device/blindtilt.js +2 -2
- package/dist/device/blindtilt.js.map +1 -1
- package/dist/device/bot.d.ts +3 -3
- package/dist/device/bot.d.ts.map +1 -1
- package/dist/device/bot.js +1 -1
- package/dist/device/bot.js.map +1 -1
- package/dist/device/ceilinglight.d.ts +3 -3
- package/dist/device/ceilinglight.d.ts.map +1 -1
- package/dist/device/ceilinglight.js +2 -2
- package/dist/device/ceilinglight.js.map +1 -1
- package/dist/device/colorbulb.d.ts +3 -3
- package/dist/device/colorbulb.d.ts.map +1 -1
- package/dist/device/colorbulb.js +1 -1
- package/dist/device/colorbulb.js.map +1 -1
- package/dist/device/contact.d.ts +4 -4
- package/dist/device/contact.d.ts.map +1 -1
- package/dist/device/contact.js +8 -2
- package/dist/device/contact.js.map +1 -1
- package/dist/device/curtain.d.ts +3 -3
- package/dist/device/curtain.d.ts.map +1 -1
- package/dist/device/curtain.js +1 -1
- package/dist/device/curtain.js.map +1 -1
- package/dist/device/device.d.ts +4 -4
- package/dist/device/device.d.ts.map +1 -1
- package/dist/device/device.js +4 -0
- package/dist/device/device.js.map +1 -1
- package/dist/device/fan.d.ts +3 -3
- package/dist/device/fan.d.ts.map +1 -1
- package/dist/device/fan.js +1 -1
- package/dist/device/fan.js.map +1 -1
- package/dist/device/hub.d.ts +4 -4
- package/dist/device/hub.d.ts.map +1 -1
- package/dist/device/hub.js +1 -5
- package/dist/device/hub.js.map +1 -1
- package/dist/device/humidifier.d.ts +3 -3
- package/dist/device/humidifier.d.ts.map +1 -1
- package/dist/device/humidifier.js +1 -1
- package/dist/device/humidifier.js.map +1 -1
- package/dist/device/iosensor.d.ts +3 -3
- package/dist/device/iosensor.d.ts.map +1 -1
- package/dist/device/iosensor.js +1 -5
- package/dist/device/iosensor.js.map +1 -1
- package/dist/device/lightstrip.d.ts +4 -4
- package/dist/device/lightstrip.d.ts.map +1 -1
- package/dist/device/lightstrip.js +2 -2
- package/dist/device/lightstrip.js.map +1 -1
- package/dist/device/lock.d.ts +3 -3
- package/dist/device/lock.d.ts.map +1 -1
- package/dist/device/lock.js +1 -1
- package/dist/device/lock.js.map +1 -1
- package/dist/device/meter.d.ts +3 -3
- package/dist/device/meter.d.ts.map +1 -1
- package/dist/device/meter.js +1 -5
- package/dist/device/meter.js.map +1 -1
- package/dist/device/meterplus.d.ts +3 -3
- package/dist/device/meterplus.d.ts.map +1 -1
- package/dist/device/meterplus.js +1 -5
- package/dist/device/meterplus.js.map +1 -1
- package/dist/device/motion.d.ts +3 -3
- package/dist/device/motion.d.ts.map +1 -1
- package/dist/device/motion.js +27 -12
- package/dist/device/motion.js.map +1 -1
- package/dist/device/plug.d.ts +3 -3
- package/dist/device/plug.d.ts.map +1 -1
- package/dist/device/plug.js +1 -1
- package/dist/device/plug.js.map +1 -1
- package/dist/device/robotvacuumcleaner.d.ts +4 -4
- package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
- package/dist/device/robotvacuumcleaner.js +3 -3
- package/dist/device/robotvacuumcleaner.js.map +1 -1
- package/dist/device/waterdetector.d.ts +3 -3
- package/dist/device/waterdetector.d.ts.map +1 -1
- package/dist/device/waterdetector.js +1 -1
- package/dist/device/waterdetector.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +20 -14
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/irdevice/airconditioner.d.ts +3 -3
- package/dist/irdevice/airconditioner.d.ts.map +1 -1
- package/dist/irdevice/airconditioner.js +9 -9
- package/dist/irdevice/airconditioner.js.map +1 -1
- package/dist/irdevice/airpurifier.d.ts +3 -3
- package/dist/irdevice/airpurifier.d.ts.map +1 -1
- package/dist/irdevice/airpurifier.js +1 -1
- package/dist/irdevice/airpurifier.js.map +1 -1
- package/dist/irdevice/camera.d.ts +3 -3
- package/dist/irdevice/camera.d.ts.map +1 -1
- package/dist/irdevice/camera.js +2 -2
- package/dist/irdevice/camera.js.map +1 -1
- package/dist/irdevice/fan.d.ts +6 -6
- package/dist/irdevice/fan.d.ts.map +1 -1
- package/dist/irdevice/fan.js +37 -29
- package/dist/irdevice/fan.js.map +1 -1
- package/dist/irdevice/irdevice.d.ts +3 -3
- package/dist/irdevice/irdevice.d.ts.map +1 -1
- package/dist/irdevice/irdevice.js.map +1 -1
- package/dist/irdevice/light.d.ts +9 -14
- package/dist/irdevice/light.d.ts.map +1 -1
- package/dist/irdevice/light.js +67 -88
- package/dist/irdevice/light.js.map +1 -1
- package/dist/irdevice/other.d.ts +3 -3
- package/dist/irdevice/other.d.ts.map +1 -1
- package/dist/irdevice/other.js +1 -1
- package/dist/irdevice/other.js.map +1 -1
- package/dist/irdevice/tv.d.ts +3 -3
- package/dist/irdevice/tv.d.ts.map +1 -1
- package/dist/irdevice/tv.js +3 -3
- package/dist/irdevice/tv.js.map +1 -1
- package/dist/irdevice/vacuumcleaner.d.ts +3 -3
- package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
- package/dist/irdevice/vacuumcleaner.js +2 -2
- package/dist/irdevice/vacuumcleaner.js.map +1 -1
- package/dist/irdevice/waterheater.d.ts +3 -3
- package/dist/irdevice/waterheater.d.ts.map +1 -1
- package/dist/irdevice/waterheater.js +2 -2
- package/dist/irdevice/waterheater.js.map +1 -1
- package/dist/platform.d.ts +7 -7
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +20 -23
- package/dist/platform.js.map +1 -1
- package/dist/settings.d.ts +24 -10
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +16 -0
- package/dist/settings.js.map +1 -1
- package/eslint.config.js +89 -78
- package/package.json +3 -3
- package/src/device/blindtilt.ts +9 -7
- package/src/device/bot.ts +17 -15
- package/src/device/ceilinglight.ts +7 -5
- package/src/device/colorbulb.ts +6 -4
- package/src/device/contact.ts +22 -13
- package/src/device/curtain.ts +10 -8
- package/src/device/device.ts +5 -4
- package/src/device/fan.ts +7 -5
- package/src/device/hub.ts +10 -7
- package/src/device/humidifier.ts +9 -7
- package/src/device/iosensor.ts +11 -8
- package/src/device/lightstrip.ts +7 -5
- package/src/device/lock.ts +9 -7
- package/src/device/meter.ts +10 -7
- package/src/device/meterplus.ts +10 -7
- package/src/device/motion.ts +36 -16
- package/src/device/plug.ts +6 -4
- package/src/device/robotvacuumcleaner.ts +9 -7
- package/src/device/waterdetector.ts +7 -5
- package/src/homebridge-ui/public/index.html +20 -14
- package/src/index.ts +3 -2
- package/src/irdevice/airconditioner.ts +15 -13
- package/src/irdevice/airpurifier.ts +7 -5
- package/src/irdevice/camera.ts +7 -5
- package/src/irdevice/fan.ts +43 -30
- package/src/irdevice/irdevice.ts +4 -5
- package/src/irdevice/light.ts +83 -103
- package/src/irdevice/other.ts +15 -13
- package/src/irdevice/tv.ts +9 -7
- package/src/irdevice/vacuumcleaner.ts +7 -5
- package/src/irdevice/waterheater.ts +7 -5
- package/src/platform.ts +59 -66
- package/src/settings.ts +73 -58
package/src/device/fan.ts
CHANGED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { request } from 'undici';
|
|
6
6
|
import { deviceBase } from './device.js';
|
|
7
|
-
import {
|
|
7
|
+
import { Devices } from '../settings.js';
|
|
8
8
|
import { Subject, debounceTime, interval, skipWhile, take, tap } from 'rxjs';
|
|
9
|
-
|
|
10
|
-
import {
|
|
9
|
+
|
|
10
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
11
|
+
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge';
|
|
12
|
+
import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
|
|
11
13
|
|
|
12
14
|
export class Fan extends deviceBase {
|
|
13
15
|
// Services
|
|
@@ -41,7 +43,7 @@ export class Fan extends deviceBase {
|
|
|
41
43
|
|
|
42
44
|
// Initialize Fan property
|
|
43
45
|
this.Fan = {
|
|
44
|
-
Service: accessory.getService(this.hap.Service.Fanv2)
|
|
46
|
+
Service: accessory.getService(this.hap.Service.Fanv2) as Service,
|
|
45
47
|
Active: accessory.context.Active || this.hap.Characteristic.Active.INACTIVE,
|
|
46
48
|
SwingMode: accessory.context.SwingMode || this.hap.Characteristic.SwingMode.SWING_DISABLED,
|
|
47
49
|
RotationSpeed: accessory.context.RotationSpeed || 0,
|
|
@@ -49,7 +51,7 @@ export class Fan extends deviceBase {
|
|
|
49
51
|
|
|
50
52
|
// Initialize Battery property
|
|
51
53
|
this.Battery = {
|
|
52
|
-
Service: accessory.getService(this.hap.Service.Battery)
|
|
54
|
+
Service: accessory.getService(this.hap.Service.Battery) as Service,
|
|
53
55
|
BatteryLevel: accessory.context.BatteryLevel || 100,
|
|
54
56
|
StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
|
|
55
57
|
ChargingState: accessory.context.ChargingState || this.hap.Characteristic.ChargingState.NOT_CHARGING,
|
package/src/device/hub.ts
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
*
|
|
3
3
|
* hub.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { Units } from 'homebridge';
|
|
6
6
|
import { deviceBase } from './device.js';
|
|
7
|
-
import {
|
|
8
|
-
import { Devices, device, deviceStatus, devicesConfig } from '../settings.js';
|
|
9
|
-
import { CharacteristicValue, PlatformAccessory, Service, Units } from 'homebridge';
|
|
7
|
+
import { Devices } from '../settings.js';
|
|
10
8
|
import { convertUnits } from '../utils.js';
|
|
9
|
+
import { Subject, interval, skipWhile } from 'rxjs';
|
|
10
|
+
|
|
11
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
12
|
+
import type { device, deviceStatus, devicesConfig } from '../settings.js';
|
|
13
|
+
import type { CharacteristicValue, PlatformAccessory, Service} from 'homebridge';
|
|
11
14
|
|
|
12
15
|
export class Hub extends deviceBase {
|
|
13
16
|
// Services
|
|
@@ -43,7 +46,7 @@ export class Hub extends deviceBase {
|
|
|
43
46
|
// Initialize Temperature Sensor property
|
|
44
47
|
if (!device.hub?.hide_temperature) {
|
|
45
48
|
this.TemperatureSensor = {
|
|
46
|
-
Service: accessory.getService(this.hap.Service.TemperatureSensor)
|
|
49
|
+
Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
|
|
47
50
|
CurrentTemperature: accessory.context.CurrentTemperature || 0,
|
|
48
51
|
};
|
|
49
52
|
}
|
|
@@ -51,7 +54,7 @@ export class Hub extends deviceBase {
|
|
|
51
54
|
// Initialize Humidity Sensor property
|
|
52
55
|
if (!device.hub?.hide_humidity) {
|
|
53
56
|
this.HumiditySensor = {
|
|
54
|
-
Service: accessory.getService(this.hap.Service.HumiditySensor)
|
|
57
|
+
Service: accessory.getService(this.hap.Service.HumiditySensor) as Service,
|
|
55
58
|
CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 0,
|
|
56
59
|
};
|
|
57
60
|
}
|
|
@@ -59,7 +62,7 @@ export class Hub extends deviceBase {
|
|
|
59
62
|
// Initialize Light Sensor property
|
|
60
63
|
if (!device.hub?.hide_lightsensor) {
|
|
61
64
|
this.LightSensor = {
|
|
62
|
-
Service: accessory.getService(this.hap.Service.LightSensor)
|
|
65
|
+
Service: accessory.getService(this.hap.Service.LightSensor) as Service,
|
|
63
66
|
CurrentAmbientLightLevel: accessory.context.CurrentAmbientLightLevel || 0.0001,
|
|
64
67
|
};
|
|
65
68
|
}
|
package/src/device/humidifier.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { request } from 'undici';
|
|
2
2
|
import { deviceBase } from './device.js';
|
|
3
3
|
import { interval, Subject } from 'rxjs';
|
|
4
|
-
import {
|
|
5
|
-
import { debounceTime, skipWhile, take, tap } from 'rxjs/operators';
|
|
6
|
-
import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
|
|
7
|
-
import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
|
|
4
|
+
import { Devices } from '../settings.js';
|
|
8
5
|
import { convertUnits } from '../utils.js';
|
|
6
|
+
import { debounceTime, skipWhile, take, tap } from 'rxjs/operators';
|
|
7
|
+
|
|
8
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
9
|
+
import type { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
|
|
10
|
+
import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
|
|
9
11
|
|
|
10
12
|
/**
|
|
11
13
|
* Platform Accessory
|
|
@@ -45,7 +47,7 @@ export class Humidifier extends deviceBase {
|
|
|
45
47
|
|
|
46
48
|
// Initialize the HumidifierDehumidifier Service
|
|
47
49
|
this.HumidifierDehumidifier = {
|
|
48
|
-
Service: accessory.getService(this.hap.Service.HumidifierDehumidifier)
|
|
50
|
+
Service: accessory.getService(this.hap.Service.HumidifierDehumidifier) as Service,
|
|
49
51
|
Active: accessory.context.Active || this.hap.Characteristic.Active.ACTIVE,
|
|
50
52
|
WaterLevel: accessory.context.WaterLevel || 100,
|
|
51
53
|
CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 50,
|
|
@@ -59,7 +61,7 @@ export class Humidifier extends deviceBase {
|
|
|
59
61
|
// Initialize the Temperature Sensor Service
|
|
60
62
|
if (!device.humidifier?.hide_temperature) {
|
|
61
63
|
this.TemperatureSensor = {
|
|
62
|
-
Service: accessory.getService(this.hap.Service.TemperatureSensor)
|
|
64
|
+
Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
|
|
63
65
|
CurrentTemperature: accessory.context.CurrentTemperature || 30,
|
|
64
66
|
};
|
|
65
67
|
}
|
|
@@ -158,7 +160,7 @@ export class Humidifier extends deviceBase {
|
|
|
158
160
|
`current:(${CurrentTemperature}, ${CurrentRelativeHumidity})`);
|
|
159
161
|
this.HumidifierDehumidifier.CurrentRelativeHumidity = humidity;
|
|
160
162
|
if (!this.device.humidifier?.hide_temperature) {
|
|
161
|
-
|
|
163
|
+
this.TemperatureSensor!.CurrentTemperature = convertUnits(temperature, context.scale, device.iosensor?.convertUnitTo);
|
|
162
164
|
}
|
|
163
165
|
this.updateHomeKitCharacteristics();
|
|
164
166
|
} catch (e: any) {
|
package/src/device/iosensor.ts
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
*
|
|
3
3
|
* iosensor.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
|
+
import { Units } from 'homebridge';
|
|
5
6
|
import { deviceBase } from './device.js';
|
|
6
|
-
import {
|
|
7
|
-
import { Subject, interval, skipWhile } from 'rxjs';
|
|
8
|
-
import { CharacteristicValue, PlatformAccessory, Service, Units } from 'homebridge';
|
|
9
|
-
import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
|
|
7
|
+
import { Devices } from '../settings.js';
|
|
10
8
|
import { convertUnits } from '../utils.js';
|
|
9
|
+
import { Subject, interval, skipWhile } from 'rxjs';
|
|
10
|
+
|
|
11
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
12
|
+
import type { CharacteristicValue, PlatformAccessory, Service} from 'homebridge';
|
|
13
|
+
import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
|
|
11
14
|
|
|
12
15
|
/**
|
|
13
16
|
* Platform Accessory
|
|
@@ -16,7 +19,7 @@ import { convertUnits } from '../utils.js';
|
|
|
16
19
|
*/
|
|
17
20
|
export class IOSensor extends deviceBase {
|
|
18
21
|
// Services
|
|
19
|
-
private Battery
|
|
22
|
+
private Battery: {
|
|
20
23
|
Service: Service;
|
|
21
24
|
BatteryLevel: CharacteristicValue;
|
|
22
25
|
StatusLowBattery: CharacteristicValue;
|
|
@@ -49,7 +52,7 @@ export class IOSensor extends deviceBase {
|
|
|
49
52
|
// Initialize Temperature Sensor property
|
|
50
53
|
if (!device.iosensor?.hide_temperature) {
|
|
51
54
|
this.TemperatureSensor = {
|
|
52
|
-
Service: accessory.getService(this.hap.Service.TemperatureSensor)
|
|
55
|
+
Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
|
|
53
56
|
CurrentTemperature: accessory.context.CurrentTemperature || 30,
|
|
54
57
|
};
|
|
55
58
|
}
|
|
@@ -57,14 +60,14 @@ export class IOSensor extends deviceBase {
|
|
|
57
60
|
// Initialize Humidity Sensor property
|
|
58
61
|
if (!device.iosensor?.hide_humidity) {
|
|
59
62
|
this.HumiditySensor = {
|
|
60
|
-
Service: accessory.getService(this.hap.Service.HumiditySensor)
|
|
63
|
+
Service: accessory.getService(this.hap.Service.HumiditySensor) as Service,
|
|
61
64
|
CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 50,
|
|
62
65
|
};
|
|
63
66
|
}
|
|
64
67
|
|
|
65
68
|
// Initialize Battery property
|
|
66
69
|
this.Battery = {
|
|
67
|
-
Service: accessory.getService(this.hap.Service.Battery)
|
|
70
|
+
Service: accessory.getService(this.hap.Service.Battery) as Service,
|
|
68
71
|
BatteryLevel: accessory.context.BatteryLevel || 100,
|
|
69
72
|
StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
|
|
70
73
|
};
|
package/src/device/lightstrip.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { request } from 'undici';
|
|
2
|
-
import { interval, skipWhile, Subject } from 'rxjs';
|
|
3
2
|
import { deviceBase } from './device.js';
|
|
4
|
-
import {
|
|
3
|
+
import { Devices } from '../settings.js';
|
|
5
4
|
import { hs2rgb, rgb2hs, m2hs } from '../utils.js';
|
|
5
|
+
import { interval, skipWhile, Subject } from 'rxjs';
|
|
6
6
|
import { debounceTime, take, tap } from 'rxjs/operators';
|
|
7
|
-
|
|
8
|
-
import {
|
|
7
|
+
|
|
8
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
9
|
+
import type { device, devicesConfig, deviceStatus, serviceData} from '../settings.js';
|
|
10
|
+
import type { Service, PlatformAccessory, CharacteristicValue, ControllerConstructor, Controller, ControllerServiceMap } from 'homebridge';
|
|
9
11
|
|
|
10
12
|
/**
|
|
11
13
|
* Platform Accessory
|
|
@@ -44,7 +46,7 @@ export class StripLight extends deviceBase {
|
|
|
44
46
|
|
|
45
47
|
// Initialize the LightBulb property
|
|
46
48
|
this.LightBulb = {
|
|
47
|
-
Service: accessory.getService(this.hap.Service.Lightbulb)
|
|
49
|
+
Service: accessory.getService(this.hap.Service.Lightbulb) as Service,
|
|
48
50
|
On: accessory.context.On || false,
|
|
49
51
|
Hue: accessory.context.Hue || 0,
|
|
50
52
|
Saturation: accessory.context.Saturation || 0,
|
package/src/device/lock.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { request } from 'undici';
|
|
2
2
|
import { deviceBase } from './device.js';
|
|
3
3
|
import { interval, Subject } from 'rxjs';
|
|
4
|
-
import {
|
|
4
|
+
import { Devices } from '../settings.js';
|
|
5
5
|
import { debounceTime, skipWhile, take, tap } from 'rxjs/operators';
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
|
|
7
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
8
|
+
import type { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
|
|
9
|
+
import type { device, devicesConfig, deviceStatus, serviceData } from '../settings.js';
|
|
8
10
|
|
|
9
11
|
export class Lock extends deviceBase {
|
|
10
12
|
// Services
|
|
@@ -46,14 +48,14 @@ export class Lock extends deviceBase {
|
|
|
46
48
|
|
|
47
49
|
// Initialize LockMechanism property
|
|
48
50
|
this.LockMechanism = {
|
|
49
|
-
Service: accessory.getService(this.hap.Service.LockMechanism)
|
|
51
|
+
Service: accessory.getService(this.hap.Service.LockMechanism) as Service,
|
|
50
52
|
LockTargetState: accessory.context.LockTargetState || this.hap.Characteristic.LockTargetState.SECURED,
|
|
51
53
|
LockCurrentState: accessory.context.LockCurrentState || this.hap.Characteristic.LockCurrentState.SECURED,
|
|
52
54
|
};
|
|
53
55
|
|
|
54
56
|
// Initialize Battery property
|
|
55
57
|
this.Battery = {
|
|
56
|
-
Service: accessory.getService(this.hap.Service.Battery)
|
|
58
|
+
Service: accessory.getService(this.hap.Service.Battery) as Service,
|
|
57
59
|
BatteryLevel: accessory.context.BatteryLevel || 100,
|
|
58
60
|
StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
|
|
59
61
|
};
|
|
@@ -61,7 +63,7 @@ export class Lock extends deviceBase {
|
|
|
61
63
|
// Initialize ContactSensor property
|
|
62
64
|
if (!this.device.lock?.hide_contactsensor) {
|
|
63
65
|
this.ContactSensor = {
|
|
64
|
-
Service: accessory.getService(this.hap.Service.ContactSensor)
|
|
66
|
+
Service: accessory.getService(this.hap.Service.ContactSensor) as Service,
|
|
65
67
|
ContactSensorState: accessory.context.ContactSensorState || this.hap.Characteristic.ContactSensorState.CONTACT_DETECTED,
|
|
66
68
|
};
|
|
67
69
|
}
|
|
@@ -69,7 +71,7 @@ export class Lock extends deviceBase {
|
|
|
69
71
|
// Initialize Latch Button Service
|
|
70
72
|
if (device.lock?.activate_latchbutton) {
|
|
71
73
|
this.Switch = {
|
|
72
|
-
Service: accessory.getService(this.hap.Service.Switch)
|
|
74
|
+
Service: accessory.getService(this.hap.Service.Switch) as Service,
|
|
73
75
|
On: accessory.context.On || false,
|
|
74
76
|
};
|
|
75
77
|
}
|
package/src/device/meter.ts
CHANGED
|
@@ -2,16 +2,19 @@
|
|
|
2
2
|
*
|
|
3
3
|
* meter.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
|
+
import { Units } from 'homebridge';
|
|
6
|
+
import { Devices } from '../settings.js';
|
|
5
7
|
import { deviceBase } from './device.js';
|
|
6
|
-
import { SwitchBotPlatform } from '../platform.js';
|
|
7
8
|
import { convertUnits } from '../utils.js';
|
|
8
9
|
import { Subject, interval, skipWhile } from 'rxjs';
|
|
9
|
-
|
|
10
|
-
import {
|
|
10
|
+
|
|
11
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
12
|
+
import type { CharacteristicValue, PlatformAccessory, Service} from 'homebridge';
|
|
13
|
+
import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
|
|
11
14
|
|
|
12
15
|
export class Meter extends deviceBase {
|
|
13
16
|
// Services
|
|
14
|
-
private Battery
|
|
17
|
+
private Battery: {
|
|
15
18
|
Service: Service;
|
|
16
19
|
BatteryLevel: CharacteristicValue;
|
|
17
20
|
StatusLowBattery: CharacteristicValue;
|
|
@@ -44,7 +47,7 @@ export class Meter extends deviceBase {
|
|
|
44
47
|
// Initialize Temperature Sensor property
|
|
45
48
|
if (!device.meter?.hide_temperature) {
|
|
46
49
|
this.TemperatureSensor = {
|
|
47
|
-
Service: accessory.getService(this.hap.Service.TemperatureSensor)
|
|
50
|
+
Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
|
|
48
51
|
CurrentTemperature: accessory.context.CurrentTemperature || 30,
|
|
49
52
|
};
|
|
50
53
|
}
|
|
@@ -52,14 +55,14 @@ export class Meter extends deviceBase {
|
|
|
52
55
|
// Initialize Humidity Sensor property
|
|
53
56
|
if (!device.meter?.hide_humidity) {
|
|
54
57
|
this.HumiditySensor = {
|
|
55
|
-
Service: accessory.getService(this.hap.Service.HumiditySensor)
|
|
58
|
+
Service: accessory.getService(this.hap.Service.HumiditySensor) as Service,
|
|
56
59
|
CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 50,
|
|
57
60
|
};
|
|
58
61
|
}
|
|
59
62
|
|
|
60
63
|
// Initialize Battery property
|
|
61
64
|
this.Battery = {
|
|
62
|
-
Service: accessory.getService(this.hap.Service.Battery)
|
|
65
|
+
Service: accessory.getService(this.hap.Service.Battery) as Service,
|
|
63
66
|
BatteryLevel: accessory.context.BatteryLevel || 100,
|
|
64
67
|
StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
|
|
65
68
|
};
|
package/src/device/meterplus.ts
CHANGED
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
*
|
|
3
3
|
* meterplus.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
|
+
import { Units } from 'homebridge';
|
|
6
|
+
import { Devices } from '../settings.js';
|
|
5
7
|
import { deviceBase } from './device.js';
|
|
6
|
-
import { SwitchBotPlatform } from '../platform.js';
|
|
7
8
|
import { Subject, interval, skipWhile } from 'rxjs';
|
|
8
|
-
|
|
9
|
-
import {
|
|
9
|
+
|
|
10
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
11
|
+
import type { CharacteristicValue, PlatformAccessory, Service} from 'homebridge';
|
|
12
|
+
import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
|
|
10
13
|
|
|
11
14
|
/**
|
|
12
15
|
* Platform Accessory
|
|
@@ -15,7 +18,7 @@ import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../se
|
|
|
15
18
|
*/
|
|
16
19
|
export class MeterPlus extends deviceBase {
|
|
17
20
|
// Services
|
|
18
|
-
private Battery
|
|
21
|
+
private Battery: {
|
|
19
22
|
Service: Service;
|
|
20
23
|
BatteryLevel: CharacteristicValue;
|
|
21
24
|
StatusLowBattery: CharacteristicValue;
|
|
@@ -48,7 +51,7 @@ export class MeterPlus extends deviceBase {
|
|
|
48
51
|
// Initialize Temperature Sensor property
|
|
49
52
|
if (!device.meter?.hide_temperature) {
|
|
50
53
|
this.TemperatureSensor = {
|
|
51
|
-
Service: accessory.getService(this.hap.Service.TemperatureSensor)
|
|
54
|
+
Service: accessory.getService(this.hap.Service.TemperatureSensor) as Service,
|
|
52
55
|
CurrentTemperature: accessory.context.CurrentTemperature || 30,
|
|
53
56
|
};
|
|
54
57
|
}
|
|
@@ -56,14 +59,14 @@ export class MeterPlus extends deviceBase {
|
|
|
56
59
|
// Initialize Humidity Sensor property
|
|
57
60
|
if (!device.meter?.hide_humidity) {
|
|
58
61
|
this.HumiditySensor = {
|
|
59
|
-
Service: accessory.getService(this.hap.Service.HumiditySensor)
|
|
62
|
+
Service: accessory.getService(this.hap.Service.HumiditySensor) as Service,
|
|
60
63
|
CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 50,
|
|
61
64
|
};
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
// Initialize Battery property
|
|
65
68
|
this.Battery = {
|
|
66
|
-
Service: accessory.getService(this.hap.Service.Battery)
|
|
69
|
+
Service: accessory.getService(this.hap.Service.Battery) as Service,
|
|
67
70
|
BatteryLevel: accessory.context.BatteryLevel || 100,
|
|
68
71
|
StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
|
|
69
72
|
};
|
package/src/device/motion.ts
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
*
|
|
4
4
|
* motion.ts: @switchbot/homebridge-switchbot.
|
|
5
5
|
*/
|
|
6
|
+
import { Devices } from '../settings.js';
|
|
6
7
|
import { deviceBase } from './device.js';
|
|
7
|
-
import { SwitchBotPlatform } from '../platform.js';
|
|
8
8
|
import { Subject, interval, skipWhile } from 'rxjs';
|
|
9
|
-
|
|
10
|
-
import {
|
|
9
|
+
|
|
10
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
11
|
+
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge';
|
|
12
|
+
import type { device, devicesConfig, serviceData, deviceStatus } from '../settings.js';
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* Platform Accessory
|
|
@@ -16,13 +18,13 @@ import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../se
|
|
|
16
18
|
*/
|
|
17
19
|
export class Motion extends deviceBase {
|
|
18
20
|
// Services
|
|
19
|
-
private Battery
|
|
21
|
+
private Battery: {
|
|
20
22
|
Service: Service;
|
|
21
23
|
BatteryLevel: CharacteristicValue;
|
|
22
24
|
StatusLowBattery: CharacteristicValue;
|
|
23
25
|
};
|
|
24
26
|
|
|
25
|
-
private MotionSensor
|
|
27
|
+
private MotionSensor: {
|
|
26
28
|
Service: Service;
|
|
27
29
|
MotionDetected: CharacteristicValue;
|
|
28
30
|
};
|
|
@@ -48,20 +50,36 @@ export class Motion extends deviceBase {
|
|
|
48
50
|
|
|
49
51
|
// Initialize Motion Sensor property
|
|
50
52
|
this.MotionSensor = {
|
|
51
|
-
Service: accessory.getService(this.hap.Service.MotionSensor)
|
|
53
|
+
Service: accessory.getService(this.hap.Service.MotionSensor) ?? accessory.addService(this.hap.Service.MotionSensor) as Service,
|
|
52
54
|
MotionDetected: accessory.context.MotionDetected || false,
|
|
53
55
|
};
|
|
54
56
|
|
|
57
|
+
// Initialize Battery property
|
|
58
|
+
this.Battery = {
|
|
59
|
+
Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery) as Service,
|
|
60
|
+
BatteryLevel: accessory.context.BatteryLevel || 100,
|
|
61
|
+
StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// Initialize Motion Sensor property
|
|
65
|
+
if (!device.motion?.hide_lightsensor) {
|
|
66
|
+
this.LightSensor = {
|
|
67
|
+
Service: accessory.getService(this.hap.Service.LightSensor) as Service,
|
|
68
|
+
CurrentAmbientLightLevel: accessory.context.CurrentAmbientLightLevel || 0,
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
|
|
55
73
|
// Retrieve initial values and updateHomekit
|
|
56
74
|
this.refreshStatus();
|
|
57
75
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
(this.MotionSensor.Service
|
|
62
|
-
|
|
76
|
+
/*(this.MotionSensor.Service = accessory.getService(this.hap.Service.MotionSensor)
|
|
77
|
+
|| accessory.addService(this.hap.Service.MotionSensor)), `${accessory.displayName} Motion Sensor`;*/
|
|
78
|
+
|
|
79
|
+
if (this.MotionSensor.Service) {
|
|
80
|
+
this.MotionSensor.Service.setCharacteristic(this.hap.Characteristic.Name, accessory.displayName);
|
|
81
|
+
}
|
|
63
82
|
|
|
64
|
-
this.MotionSensor.Service.setCharacteristic(this.hap.Characteristic.Name, accessory.displayName);
|
|
65
83
|
// each service must implement at-minimum the "required characteristics" for the given service type
|
|
66
84
|
// see https://developers.homebridge.io/#/service/MotionSensor
|
|
67
85
|
|
|
@@ -82,12 +100,14 @@ export class Motion extends deviceBase {
|
|
|
82
100
|
}
|
|
83
101
|
|
|
84
102
|
// Battery Service
|
|
85
|
-
const BatteryService = `${accessory.displayName} Battery`;
|
|
103
|
+
/*const BatteryService = `${accessory.displayName} Battery`;
|
|
86
104
|
(this.Battery.Service = this.accessory.getService(this.hap.Service.Battery)
|
|
87
|
-
|| accessory.addService(this.hap.Service.Battery)), BatteryService
|
|
105
|
+
|| accessory.addService(this.hap.Service.Battery)), BatteryService;*/
|
|
88
106
|
|
|
89
|
-
this.Battery.Service
|
|
90
|
-
|
|
107
|
+
if (this.Battery.Service) {
|
|
108
|
+
this.Battery.Service.setCharacteristic(this.hap.Characteristic.Name, `${accessory.displayName} Battery`);
|
|
109
|
+
this.Battery.Service.setCharacteristic(this.hap.Characteristic.ChargingState, this.hap.Characteristic.ChargingState.NOT_CHARGEABLE);
|
|
110
|
+
}
|
|
91
111
|
|
|
92
112
|
// Retrieve initial values and updateHomekit
|
|
93
113
|
this.updateHomeKitCharacteristics();
|
package/src/device/plug.ts
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
* plug.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
5
|
import { request } from 'undici';
|
|
6
|
+
import { Devices } from '../settings.js';
|
|
6
7
|
import { deviceBase } from './device.js';
|
|
7
|
-
import { SwitchBotPlatform } from '../platform.js';
|
|
8
8
|
import { Subject, debounceTime, interval, skipWhile, take, tap } from 'rxjs';
|
|
9
|
-
|
|
10
|
-
import {
|
|
9
|
+
|
|
10
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
11
|
+
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge';
|
|
12
|
+
import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
|
|
11
13
|
export class Plug extends deviceBase {
|
|
12
14
|
// Services
|
|
13
15
|
private Outlet: {
|
|
@@ -31,7 +33,7 @@ export class Plug extends deviceBase {
|
|
|
31
33
|
|
|
32
34
|
// Initialize Outlet property
|
|
33
35
|
this.Outlet = {
|
|
34
|
-
Service: accessory.getService(this.hap.Service.Outlet)
|
|
36
|
+
Service: accessory.getService(this.hap.Service.Outlet) as Service,
|
|
35
37
|
On: accessory.context.On || false,
|
|
36
38
|
};
|
|
37
39
|
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
* robotvacuumcleaner.ts: @switchbot/homebridge-switchbot.
|
|
4
4
|
*/
|
|
5
5
|
import { request } from 'undici';
|
|
6
|
-
import {
|
|
6
|
+
import { Devices } from '../settings.js';
|
|
7
7
|
import { deviceBase } from './device.js';
|
|
8
|
-
import {
|
|
8
|
+
import { Subject, interval, skipWhile } from 'rxjs';
|
|
9
9
|
import { debounceTime, take, tap } from 'rxjs/operators';
|
|
10
|
-
|
|
11
|
-
import {
|
|
10
|
+
|
|
11
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
12
|
+
import type { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
|
|
13
|
+
import type { device, devicesConfig, deviceStatus, serviceData} from '../settings.js';
|
|
12
14
|
|
|
13
15
|
export class RobotVacuumCleaner extends deviceBase {
|
|
14
16
|
// Services
|
|
@@ -40,14 +42,14 @@ export class RobotVacuumCleaner extends deviceBase {
|
|
|
40
42
|
|
|
41
43
|
// Initialize Lightbulb property
|
|
42
44
|
this.LightBulb = {
|
|
43
|
-
Service: accessory.getService(this.hap.Service.Lightbulb)
|
|
45
|
+
Service: accessory.getService(this.hap.Service.Lightbulb) as Service,
|
|
44
46
|
On: accessory.context.On || false,
|
|
45
47
|
Brightness: accessory.context.Brightness || 0,
|
|
46
48
|
};
|
|
47
49
|
|
|
48
50
|
// Initialize Battery property
|
|
49
51
|
this.Battery = {
|
|
50
|
-
Service: accessory.getService(this.hap.Service.Battery)
|
|
52
|
+
Service: accessory.getService(this.hap.Service.Battery) as Service,
|
|
51
53
|
BatteryLevel: accessory.context.BatteryLevel || 100,
|
|
52
54
|
StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
|
|
53
55
|
};
|
|
@@ -594,7 +596,7 @@ export class RobotVacuumCleaner extends deviceBase {
|
|
|
594
596
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.Battery.BatteryLevel}`);
|
|
595
597
|
} else {
|
|
596
598
|
this.accessory.context.BatteryLevel = this.Battery.BatteryLevel;
|
|
597
|
-
this.Battery.Service
|
|
599
|
+
this.Battery.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, this.Battery.BatteryLevel);
|
|
598
600
|
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.Battery.BatteryLevel}`);
|
|
599
601
|
}
|
|
600
602
|
// StatusLowBattery
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { deviceBase } from './device.js';
|
|
6
6
|
import { interval, Subject } from 'rxjs';
|
|
7
|
+
import { Devices } from '../settings.js';
|
|
7
8
|
import { skipWhile } from 'rxjs/operators';
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
|
|
10
|
+
import type { SwitchBotPlatform } from '../platform.js';
|
|
11
|
+
import type { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
|
|
12
|
+
import type { device, devicesConfig, serviceData, deviceStatus} from '../settings.js';
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* Platform Accessory
|
|
@@ -48,7 +50,7 @@ export class WaterDetector extends deviceBase {
|
|
|
48
50
|
|
|
49
51
|
// Initialize Battery property
|
|
50
52
|
this.Battery = {
|
|
51
|
-
Service: accessory.getService(this.hap.Service.Battery)
|
|
53
|
+
Service: accessory.getService(this.hap.Service.Battery) as Service,
|
|
52
54
|
BatteryLevel: accessory.context.BatteryLevel || 100,
|
|
53
55
|
StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
|
|
54
56
|
ChargingState: accessory.context.ChargingState || this.hap.Characteristic.ChargingState.NOT_CHARGEABLE,
|
|
@@ -57,7 +59,7 @@ export class WaterDetector extends deviceBase {
|
|
|
57
59
|
// Initialize Leak Sensor property
|
|
58
60
|
if (!this.device.waterdetector?.hide_leak) {
|
|
59
61
|
this.LeakSensor = {
|
|
60
|
-
Service: accessory.getService(this.hap.Service.LeakSensor)
|
|
62
|
+
Service: accessory.getService(this.hap.Service.LeakSensor) as Service,
|
|
61
63
|
StatusActive: accessory.context.StatusActive || false,
|
|
62
64
|
LeakDetected: accessory.context.LeakDetected || this.hap.Characteristic.LeakDetected.LEAK_NOT_DETECTED,
|
|
63
65
|
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
<p class="text-center">
|
|
2
2
|
<img
|
|
3
3
|
src="https://raw.githubusercontent.com/OpenWonderLabs/homebridge-switchbot/latest/branding/Homebridge_x_SwitchBot.svg"
|
|
4
|
-
alt="homebridge-switchbot logo"
|
|
5
|
-
style="width: 50%" />
|
|
4
|
+
alt="homebridge-switchbot logo" style="width: 50%" />
|
|
6
5
|
</p>
|
|
7
6
|
<div id="pageIntro" style="display: none">
|
|
8
7
|
<p class="lead text-center">Thank you for installing <strong>homebridge-switchbot</strong></p>
|
|
@@ -10,10 +9,10 @@
|
|
|
10
9
|
<ol>
|
|
11
10
|
<li class="mb-3">
|
|
12
11
|
Download the SwitchBot App from either the
|
|
13
|
-
<a href="https://apps.apple.com/us/app/switchbot/id1087374760" target="_blank" rel="noreferrer noopener">App
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
<a href="https://apps.apple.com/us/app/switchbot/id1087374760" target="_blank" rel="noreferrer noopener">App
|
|
13
|
+
Store</a> or the
|
|
14
|
+
<a href="https://play.google.com/store/apps/details?id=com.theswitchbot.switchbot&hl=en_US&gl=US" target="_blank"
|
|
15
|
+
rel="noreferrer noopener">Play Store</a>.
|
|
17
16
|
</li>
|
|
18
17
|
<li class="mb-3">Select <strong>Profile</strong>.</li>
|
|
19
18
|
<li class="mb-3">Select <strong>Preferences</strong>.</li>
|
|
@@ -84,31 +83,38 @@
|
|
|
84
83
|
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki" target="_blank">Wiki Home</a>
|
|
85
84
|
</li>
|
|
86
85
|
<li>
|
|
87
|
-
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Configuration"
|
|
86
|
+
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Configuration"
|
|
87
|
+
target="_blank">Configuration</a>
|
|
88
88
|
</li>
|
|
89
89
|
<li>
|
|
90
|
-
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Beta-Version" target="_blank">Beta
|
|
90
|
+
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Beta-Version" target="_blank">Beta
|
|
91
|
+
Version</a>
|
|
91
92
|
</li>
|
|
92
93
|
<li>
|
|
93
|
-
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Node-Version" target="_blank">Node
|
|
94
|
+
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Node-Version" target="_blank">Node
|
|
95
|
+
Version</a>
|
|
94
96
|
</li>
|
|
95
97
|
<li>
|
|
96
|
-
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Uninstallation"
|
|
98
|
+
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Uninstallation"
|
|
99
|
+
target="_blank">Uninstallation</a>
|
|
97
100
|
</li>
|
|
98
101
|
</ul>
|
|
99
102
|
<h5>Features</h5>
|
|
100
103
|
<ul>
|
|
101
104
|
<li>
|
|
102
|
-
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Supported-Devices" target="_blank">Supported
|
|
105
|
+
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Supported-Devices" target="_blank">Supported
|
|
106
|
+
Devices</a>
|
|
103
107
|
</li>
|
|
104
108
|
</ul>
|
|
105
109
|
<h5>Help/About</h5>
|
|
106
110
|
<ul>
|
|
107
111
|
<li>
|
|
108
|
-
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/issues/new/choose" target="_blank">Support
|
|
112
|
+
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/issues/new/choose" target="_blank">Support
|
|
113
|
+
Request</a>
|
|
109
114
|
</li>
|
|
110
115
|
<li>
|
|
111
|
-
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/blob/latest/CHANGELOG.md"
|
|
116
|
+
<a href="https://github.com/OpenWonderLabs/homebridge-switchbot/blob/latest/CHANGELOG.md"
|
|
117
|
+
target="_blank">Changelog</a>
|
|
112
118
|
</li>
|
|
113
119
|
</ul>
|
|
114
120
|
</div>
|
|
@@ -237,4 +243,4 @@
|
|
|
237
243
|
homebridge.hideSpinner();
|
|
238
244
|
}
|
|
239
245
|
})();
|
|
240
|
-
</script>
|
|
246
|
+
</script>
|