homebridge-easy-mqtt 1.0.0-beta.0 → 1.0.0-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/CHANGELOG.md +14 -2
- package/README.md +54 -25
- package/config.schema.json +180 -53
- package/dist/accessory/base.d.ts +7 -5
- package/dist/accessory/base.js +19 -11
- package/dist/accessory/base.js.map +1 -1
- package/dist/accessory/lightbulb.d.ts +30 -0
- package/dist/accessory/lightbulb.js +106 -0
- package/dist/accessory/lightbulb.js.map +1 -0
- package/dist/accessory/lock.d.ts +13 -16
- package/dist/accessory/lock.js +56 -85
- package/dist/accessory/lock.js.map +1 -1
- package/dist/accessory/onoff.d.ts +15 -0
- package/dist/accessory/onoff.js +57 -0
- package/dist/accessory/onoff.js.map +1 -0
- package/dist/accessory/outlet.d.ts +16 -0
- package/dist/accessory/outlet.js +59 -0
- package/dist/accessory/outlet.js.map +1 -0
- package/dist/accessory/statusActive.d.ts +14 -0
- package/dist/accessory/statusActive.js +41 -0
- package/dist/accessory/statusActive.js.map +1 -0
- package/dist/accessory/switch.d.ts +6 -17
- package/dist/accessory/switch.js +6 -86
- package/dist/accessory/switch.js.map +1 -1
- package/dist/homebridge/platform.js +12 -4
- package/dist/homebridge/platform.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +1 -1
- package/dist/homebridge-ui/public/ui.js +1 -1
- package/dist/i18n/en.d.ts +45 -15
- package/dist/i18n/en.js +46 -16
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/i18n.d.ts +45 -15
- package/dist/i18n/template.d.ts +45 -15
- package/dist/i18n/zz.d.ts +45 -15
- package/dist/model/mqtt.d.ts +0 -2
- package/dist/model/mqtt.js +3 -13
- package/dist/model/mqtt.js.map +1 -1
- package/dist/model/types.d.ts +34 -13
- package/dist/model/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { PlatformAccessory, Service } from 'homebridge';
|
|
2
|
+
import { TopicHandler } from './base.js';
|
|
3
|
+
import { OnOffAccessory } from './onoff.js';
|
|
4
|
+
import { CharacteristicType, LightbulbConfig as LightbulbConfig, ServiceType } from '../model/types.js';
|
|
5
|
+
import { Log } from '../tools/log.js';
|
|
6
|
+
export declare class LightbulbAccessory extends OnOffAccessory {
|
|
7
|
+
private readonly lightbulbConfig;
|
|
8
|
+
private brightness;
|
|
9
|
+
private hue;
|
|
10
|
+
private colorTemperature;
|
|
11
|
+
private saturation;
|
|
12
|
+
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, lightbulbConfig: LightbulbConfig, log: Log);
|
|
13
|
+
protected getAccessoryService(): Service;
|
|
14
|
+
protected get topicHandlers(): TopicHandler[];
|
|
15
|
+
private getBrightness;
|
|
16
|
+
private getHue;
|
|
17
|
+
private getColorTemperature;
|
|
18
|
+
private getSaturation;
|
|
19
|
+
private onBrightnessUpdate;
|
|
20
|
+
private setBrightness;
|
|
21
|
+
private onHueUpdate;
|
|
22
|
+
private setHue;
|
|
23
|
+
private onColorTemperatureUpdate;
|
|
24
|
+
private setColorTemperature;
|
|
25
|
+
private onSaturationUpdate;
|
|
26
|
+
private setSaturation;
|
|
27
|
+
private _onUpdate;
|
|
28
|
+
private _set;
|
|
29
|
+
private toCharacteristicKey;
|
|
30
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { makeHandler } from './base.js';
|
|
2
|
+
import { OnOffAccessory } from './onoff.js';
|
|
3
|
+
import { strings } from '../i18n/i18n.js';
|
|
4
|
+
import { toPrimitive } from '../model/types.js';
|
|
5
|
+
export class LightbulbAccessory extends OnOffAccessory {
|
|
6
|
+
lightbulbConfig;
|
|
7
|
+
brightness = 100;
|
|
8
|
+
hue = 0;
|
|
9
|
+
colorTemperature = 500;
|
|
10
|
+
saturation = 100;
|
|
11
|
+
constructor(Service, Characteristic, accessory, lightbulbConfig, log) {
|
|
12
|
+
super(Service, Characteristic, accessory, lightbulbConfig, log, LightbulbAccessory.name);
|
|
13
|
+
this.lightbulbConfig = lightbulbConfig;
|
|
14
|
+
this.accessoryService.getCharacteristic(this.Characteristic.Brightness)
|
|
15
|
+
.onGet(this.getBrightness.bind(this))
|
|
16
|
+
.onSet(this.setBrightness.bind(this));
|
|
17
|
+
this.accessoryService.getCharacteristic(this.Characteristic.Hue)
|
|
18
|
+
.onGet(this.getHue.bind(this))
|
|
19
|
+
.onSet(this.setHue.bind(this));
|
|
20
|
+
this.accessoryService.getCharacteristic(this.Characteristic.ColorTemperature)
|
|
21
|
+
.onGet(this.getColorTemperature.bind(this))
|
|
22
|
+
.onSet(this.setColorTemperature.bind(this));
|
|
23
|
+
this.accessoryService.getCharacteristic(this.Characteristic.Saturation)
|
|
24
|
+
.onGet(this.getSaturation.bind(this))
|
|
25
|
+
.onSet(this.setSaturation.bind(this));
|
|
26
|
+
}
|
|
27
|
+
getAccessoryService() {
|
|
28
|
+
return this.accessory.getService(this.Service.Lightbulb) || this.accessory.addService(this.Service.Lightbulb);
|
|
29
|
+
}
|
|
30
|
+
get topicHandlers() {
|
|
31
|
+
const topicHandlers = super.topicHandlers;
|
|
32
|
+
if (this.lightbulbConfig.topicGetBrightness) {
|
|
33
|
+
topicHandlers.push(makeHandler(this.lightbulbConfig.topicGetBrightness, this.onBrightnessUpdate.bind(this)));
|
|
34
|
+
}
|
|
35
|
+
if (this.lightbulbConfig.topicGetHue) {
|
|
36
|
+
topicHandlers.push(makeHandler(this.lightbulbConfig.topicGetHue, this.onHueUpdate.bind(this)));
|
|
37
|
+
}
|
|
38
|
+
if (this.lightbulbConfig.topicGetColorTemperature) {
|
|
39
|
+
topicHandlers.push(makeHandler(this.lightbulbConfig.topicGetColorTemperature, this.onColorTemperatureUpdate.bind(this)));
|
|
40
|
+
}
|
|
41
|
+
if (this.lightbulbConfig.topicGetSaturation) {
|
|
42
|
+
topicHandlers.push(makeHandler(this.lightbulbConfig.topicGetSaturation, this.onSaturationUpdate.bind(this)));
|
|
43
|
+
}
|
|
44
|
+
return topicHandlers;
|
|
45
|
+
}
|
|
46
|
+
async getBrightness() {
|
|
47
|
+
return this.brightness;
|
|
48
|
+
}
|
|
49
|
+
async getHue() {
|
|
50
|
+
return this.hue;
|
|
51
|
+
}
|
|
52
|
+
async getColorTemperature() {
|
|
53
|
+
return this.colorTemperature;
|
|
54
|
+
}
|
|
55
|
+
async getSaturation() {
|
|
56
|
+
return this.saturation;
|
|
57
|
+
}
|
|
58
|
+
async onBrightnessUpdate(topic, value) {
|
|
59
|
+
this._onUpdate('brightness', value, strings.lightbulb.brightness);
|
|
60
|
+
}
|
|
61
|
+
async setBrightness(value) {
|
|
62
|
+
this._set('topicSetBrightness', 'brightness', value, strings.lightbulb.futureBrightness);
|
|
63
|
+
}
|
|
64
|
+
async onHueUpdate(topic, value) {
|
|
65
|
+
this._onUpdate('hue', value, strings.lightbulb.hue);
|
|
66
|
+
}
|
|
67
|
+
async setHue(value) {
|
|
68
|
+
this._set('topicSetHue', 'hue', value, strings.lightbulb.futureHue);
|
|
69
|
+
}
|
|
70
|
+
async onColorTemperatureUpdate(topic, value) {
|
|
71
|
+
this._onUpdate('colorTemperature', value, strings.lightbulb.colorTemperature);
|
|
72
|
+
}
|
|
73
|
+
async setColorTemperature(value) {
|
|
74
|
+
this._set('topicSetColorTemperature', 'colorTemperature', value, strings.lightbulb.futureColorTemperature);
|
|
75
|
+
}
|
|
76
|
+
async onSaturationUpdate(topic, value) {
|
|
77
|
+
this._onUpdate('saturation', value, strings.lightbulb.saturation);
|
|
78
|
+
}
|
|
79
|
+
async setSaturation(value) {
|
|
80
|
+
this._set('topicSetSaturation', 'saturation', value, strings.lightbulb.futureSaturation);
|
|
81
|
+
}
|
|
82
|
+
async _onUpdate(propertyKey, value, logString) {
|
|
83
|
+
if (value === this[propertyKey]) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this[propertyKey] = value;
|
|
87
|
+
const characteristicKey = this.toCharacteristicKey(propertyKey);
|
|
88
|
+
this.accessoryService.updateCharacteristic(this.Characteristic[characteristicKey], value);
|
|
89
|
+
this.logIfDesired(logString, this.lightbulbConfig.info.name, value.toString());
|
|
90
|
+
}
|
|
91
|
+
_set(topic, propertyKey, value, logString) {
|
|
92
|
+
if (!this.assert(topic)) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
this[propertyKey] = value;
|
|
96
|
+
this.logIfDesired(logString, this.lightbulbConfig.info.name, value.toString());
|
|
97
|
+
const characteristicKey = this.toCharacteristicKey(propertyKey);
|
|
98
|
+
this.accessoryService.updateCharacteristic(this.Characteristic[characteristicKey], value);
|
|
99
|
+
this.publish(this.lightbulbConfig[topic], toPrimitive(value));
|
|
100
|
+
}
|
|
101
|
+
toCharacteristicKey(key) {
|
|
102
|
+
const capitalized = key.charAt(0).toUpperCase() + key.slice(1);
|
|
103
|
+
return capitalized;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=lightbulb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightbulb.js","sourceRoot":"","sources":["../../src/accessory/lightbulb.ts"],"names":[],"mappings":"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"}
|
package/dist/accessory/lock.d.ts
CHANGED
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
import { PlatformAccessory } from 'homebridge';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { PlatformAccessory, Service } from 'homebridge';
|
|
2
|
+
import { TopicHandler } from './base.js';
|
|
3
|
+
import { CharacteristicType, LockMechanismConfig, ServiceType } from '../model/types.js';
|
|
4
4
|
import { Log } from '../tools/log.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
private readonly
|
|
8
|
-
private
|
|
9
|
-
private
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
import { StatusActiveAccessory } from './statusActive.js';
|
|
6
|
+
export declare class LockMechanismAccessory extends StatusActiveAccessory {
|
|
7
|
+
private readonly lockMechanismConfig;
|
|
8
|
+
private currentState;
|
|
9
|
+
private targetState;
|
|
10
|
+
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, lockMechanismConfig: LockMechanismConfig, log: Log);
|
|
11
|
+
protected getAccessoryService(): Service;
|
|
12
12
|
protected get topicHandlers(): TopicHandler[];
|
|
13
|
-
private onActiveUpdate;
|
|
14
|
-
private onCurrentUpdate;
|
|
15
|
-
private onTargetUpdate;
|
|
16
|
-
private getActive;
|
|
17
13
|
private getCurrentState;
|
|
18
14
|
private getTargetState;
|
|
15
|
+
private onCurrentStateUpdate;
|
|
16
|
+
private onTargetStateUpdate;
|
|
19
17
|
private setTargetState;
|
|
20
|
-
private
|
|
18
|
+
private valueFromTargetState;
|
|
21
19
|
private currentStateFromValue;
|
|
22
20
|
private targetStateFromValue;
|
|
23
21
|
private stringForState;
|
|
24
|
-
private logIfDesired;
|
|
25
22
|
}
|
package/dist/accessory/lock.js
CHANGED
|
@@ -1,138 +1,115 @@
|
|
|
1
|
-
import { makeHandler
|
|
1
|
+
import { makeHandler } from './base.js';
|
|
2
2
|
import { strings } from '../i18n/i18n.js';
|
|
3
3
|
import { toPrimitive } from '../model/types.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
this.active = true;
|
|
15
|
-
this.current = this.Characteristic.LockCurrentState.UNKNOWN;
|
|
16
|
-
this.target = this.Characteristic.LockTargetState.SECURED;
|
|
17
|
-
this.accessoryService.getCharacteristic(this.Characteristic.StatusActive)
|
|
18
|
-
.onGet(this.getActive.bind(this));
|
|
4
|
+
import { StatusActiveAccessory } from './statusActive.js';
|
|
5
|
+
export class LockMechanismAccessory extends StatusActiveAccessory {
|
|
6
|
+
lockMechanismConfig;
|
|
7
|
+
currentState;
|
|
8
|
+
targetState;
|
|
9
|
+
constructor(Service, Characteristic, accessory, lockMechanismConfig, log) {
|
|
10
|
+
super(Service, Characteristic, accessory, lockMechanismConfig, log, LockMechanismAccessory.name);
|
|
11
|
+
this.lockMechanismConfig = lockMechanismConfig;
|
|
12
|
+
this.currentState = this.Characteristic.LockCurrentState.UNKNOWN;
|
|
13
|
+
this.targetState = this.Characteristic.LockTargetState.SECURED;
|
|
19
14
|
this.accessoryService.getCharacteristic(this.Characteristic.LockCurrentState)
|
|
20
15
|
.onGet(this.getCurrentState.bind(this));
|
|
21
16
|
this.accessoryService.getCharacteristic(this.Characteristic.LockTargetState)
|
|
22
17
|
.onGet(this.getTargetState.bind(this))
|
|
23
18
|
.onSet(this.setTargetState.bind(this));
|
|
24
19
|
}
|
|
20
|
+
getAccessoryService() {
|
|
21
|
+
return this.accessory.getService(this.Service.LockMechanism) || this.accessory.addService(this.Service.LockMechanism);
|
|
22
|
+
}
|
|
25
23
|
get topicHandlers() {
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
const topicHandlers = super.topicHandlers;
|
|
25
|
+
if (!this.assert('topicGetLockCurrentState', 'topicGetLockTargetState')) {
|
|
26
|
+
return topicHandlers;
|
|
28
27
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
...(this.config.topicGetActive ? [makeHandler(this.config.topicGetActive, this.onActiveUpdate.bind(this))] : []),
|
|
33
|
-
];
|
|
28
|
+
topicHandlers.push(makeHandler(this.lockMechanismConfig.topicGetLockCurrentState, this.onCurrentStateUpdate.bind(this)));
|
|
29
|
+
topicHandlers.push(makeHandler(this.lockMechanismConfig.topicGetLockTargetState, this.onTargetStateUpdate.bind(this)));
|
|
30
|
+
return topicHandlers;
|
|
34
31
|
}
|
|
35
|
-
async
|
|
36
|
-
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
const active = value === toPrimitive(this.config.valueActive);
|
|
40
|
-
if (active === this.active) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
this.active = active;
|
|
44
|
-
this.accessoryService.updateCharacteristic(this.Characteristic.StatusActive, this.active);
|
|
45
|
-
if (this.active) {
|
|
46
|
-
this.logIfDesired(strings.accessory.statusActive, this.config.info.name);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
this.log.warning(strings.accessory.statusInactive, this.config.info.name);
|
|
50
|
-
}
|
|
32
|
+
async getCurrentState() {
|
|
33
|
+
return this.currentState;
|
|
51
34
|
}
|
|
52
|
-
async
|
|
35
|
+
async getTargetState() {
|
|
36
|
+
return this.targetState;
|
|
37
|
+
}
|
|
38
|
+
async onCurrentStateUpdate(topic, value) {
|
|
53
39
|
const current = this.currentStateFromValue(value);
|
|
54
|
-
if (current === this.
|
|
40
|
+
if (current === this.currentState) {
|
|
55
41
|
return;
|
|
56
42
|
}
|
|
57
|
-
this.
|
|
58
|
-
this.accessoryService.updateCharacteristic(this.Characteristic.LockCurrentState, this.
|
|
59
|
-
if (this.
|
|
60
|
-
this.log.error(this.stringForState(this.
|
|
43
|
+
this.currentState = current;
|
|
44
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.LockCurrentState, this.currentState);
|
|
45
|
+
if (this.currentState === this.Characteristic.LockCurrentState.JAMMED) {
|
|
46
|
+
this.log.error(this.stringForState(this.currentState), this.config.info.name);
|
|
61
47
|
}
|
|
62
48
|
else {
|
|
63
|
-
this.logIfDesired(this.stringForState(this.
|
|
49
|
+
this.logIfDesired(this.stringForState(this.currentState), this.config.info.name);
|
|
64
50
|
}
|
|
65
51
|
}
|
|
66
|
-
async
|
|
52
|
+
async onTargetStateUpdate(topic, value) {
|
|
67
53
|
const target = this.targetStateFromValue(value);
|
|
68
|
-
if (target === this.
|
|
54
|
+
if (target === this.targetState) {
|
|
69
55
|
return;
|
|
70
56
|
}
|
|
71
|
-
this.
|
|
72
|
-
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.
|
|
73
|
-
this.logIfDesired(this.stringForState(this.
|
|
74
|
-
}
|
|
75
|
-
async getActive() {
|
|
76
|
-
return this.active;
|
|
77
|
-
}
|
|
78
|
-
async getCurrentState() {
|
|
79
|
-
return this.current;
|
|
80
|
-
}
|
|
81
|
-
async getTargetState() {
|
|
82
|
-
return this.target;
|
|
57
|
+
this.targetState = target;
|
|
58
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.targetState);
|
|
59
|
+
this.logIfDesired(this.stringForState(this.targetState, true), this.config.info.name);
|
|
83
60
|
}
|
|
84
61
|
async setTargetState(value) {
|
|
85
|
-
if (!this.assert('
|
|
62
|
+
if (!this.assert('topicSetTargetState')) {
|
|
86
63
|
return;
|
|
87
64
|
}
|
|
88
|
-
const target = this.
|
|
65
|
+
const target = this.valueFromTargetState(value);
|
|
89
66
|
if (target === undefined) {
|
|
90
67
|
this.log.error(strings.lock.badTarget, this.config.info.name, value);
|
|
91
68
|
return;
|
|
92
69
|
}
|
|
93
|
-
this.
|
|
94
|
-
this.logIfDesired(this.stringForState(this.
|
|
95
|
-
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.
|
|
96
|
-
this.
|
|
97
|
-
this.accessoryService.updateCharacteristic(this.Characteristic.LockCurrentState, this.
|
|
98
|
-
this.publish(this.
|
|
70
|
+
this.targetState = value;
|
|
71
|
+
this.logIfDesired(this.stringForState(this.targetState, true), this.config.info.name);
|
|
72
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.targetState);
|
|
73
|
+
this.currentState = this.targetState;
|
|
74
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.LockCurrentState, this.currentState);
|
|
75
|
+
this.publish(this.lockMechanismConfig.topicSetTargetState, target);
|
|
99
76
|
}
|
|
100
|
-
|
|
101
|
-
if (value === undefined || !this.assert('
|
|
77
|
+
valueFromTargetState(value) {
|
|
78
|
+
if (value === undefined || !this.assert('valueLockStateSecured', 'valueLockStateUnsecured')) {
|
|
102
79
|
return undefined;
|
|
103
80
|
}
|
|
104
81
|
switch (value) {
|
|
105
82
|
case this.Characteristic.LockTargetState.SECURED:
|
|
106
|
-
return toPrimitive(this.
|
|
83
|
+
return toPrimitive(this.lockMechanismConfig.valueLockStateSecured);
|
|
107
84
|
case this.Characteristic.LockTargetState.UNSECURED:
|
|
108
|
-
return toPrimitive(this.
|
|
85
|
+
return toPrimitive(this.lockMechanismConfig.valueLockStateUnsecured);
|
|
109
86
|
default:
|
|
110
87
|
return undefined;
|
|
111
88
|
}
|
|
112
89
|
}
|
|
113
90
|
currentStateFromValue(value) {
|
|
114
|
-
if (value === undefined || !this.assert('
|
|
91
|
+
if (value === undefined || !this.assert('valueLockStateSecured', 'valueLockStateUnsecured')) {
|
|
115
92
|
return this.Characteristic.LockCurrentState.UNKNOWN;
|
|
116
93
|
}
|
|
117
94
|
switch (value) {
|
|
118
|
-
case toPrimitive(this.
|
|
95
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateSecured):
|
|
119
96
|
return this.Characteristic.LockCurrentState.SECURED;
|
|
120
|
-
case toPrimitive(this.
|
|
97
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateUnsecured):
|
|
121
98
|
return this.Characteristic.LockCurrentState.UNSECURED;
|
|
122
|
-
case toPrimitive(this.
|
|
99
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateJammed):
|
|
123
100
|
return this.Characteristic.LockCurrentState.JAMMED;
|
|
124
101
|
default:
|
|
125
102
|
return this.Characteristic.LockCurrentState.UNKNOWN;
|
|
126
103
|
}
|
|
127
104
|
}
|
|
128
105
|
targetStateFromValue(value) {
|
|
129
|
-
if (value === undefined || !this.assert('
|
|
106
|
+
if (value === undefined || !this.assert('valueLockStateSecured', 'valueLockStateUnsecured')) {
|
|
130
107
|
return this.Characteristic.LockTargetState.SECURED;
|
|
131
108
|
}
|
|
132
109
|
switch (value) {
|
|
133
|
-
case toPrimitive(this.
|
|
110
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateUnsecured):
|
|
134
111
|
return this.Characteristic.LockTargetState.UNSECURED;
|
|
135
|
-
case toPrimitive(this.
|
|
112
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateSecured):
|
|
136
113
|
default:
|
|
137
114
|
return this.Characteristic.LockTargetState.SECURED;
|
|
138
115
|
}
|
|
@@ -149,11 +126,5 @@ export class LockAccessory extends MQTTAccessory {
|
|
|
149
126
|
return strings.lock.stateUnknown;
|
|
150
127
|
}
|
|
151
128
|
}
|
|
152
|
-
logIfDesired(message, ...parameters) {
|
|
153
|
-
if (this.config.disableLogging) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
this.log.always(message, ...parameters);
|
|
157
|
-
}
|
|
158
129
|
}
|
|
159
130
|
//# sourceMappingURL=lock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/accessory/lock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/accessory/lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PlatformAccessory } from 'homebridge';
|
|
2
|
+
import { TopicHandler } from './base.js';
|
|
3
|
+
import { CharacteristicType, OnOffConfig, ServiceType } from '../model/types.js';
|
|
4
|
+
import { Log } from '../tools/log.js';
|
|
5
|
+
import { StatusActiveAccessory } from './statusActive.js';
|
|
6
|
+
export declare abstract class OnOffAccessory extends StatusActiveAccessory {
|
|
7
|
+
private readonly onOffConfig;
|
|
8
|
+
private on;
|
|
9
|
+
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, onOffConfig: OnOffConfig, log: Log, className: string);
|
|
10
|
+
protected get topicHandlers(): TopicHandler[];
|
|
11
|
+
private onOnUpdate;
|
|
12
|
+
private getOn;
|
|
13
|
+
private setOn;
|
|
14
|
+
private stringForState;
|
|
15
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { makeHandler } from './base.js';
|
|
2
|
+
import { strings } from '../i18n/i18n.js';
|
|
3
|
+
import { toPrimitive } from '../model/types.js';
|
|
4
|
+
import { StatusActiveAccessory } from './statusActive.js';
|
|
5
|
+
export class OnOffAccessory extends StatusActiveAccessory {
|
|
6
|
+
onOffConfig;
|
|
7
|
+
on = false;
|
|
8
|
+
constructor(Service, Characteristic, accessory, onOffConfig, log, className) {
|
|
9
|
+
super(Service, Characteristic, accessory, onOffConfig, log, className);
|
|
10
|
+
this.onOffConfig = onOffConfig;
|
|
11
|
+
this.accessoryService.getCharacteristic(Characteristic.On)
|
|
12
|
+
.onGet(this.getOn.bind(this))
|
|
13
|
+
.onSet(this.setOn.bind(this));
|
|
14
|
+
}
|
|
15
|
+
get topicHandlers() {
|
|
16
|
+
const topicHandlers = super.topicHandlers;
|
|
17
|
+
if (!this.assert('topicGetOn')) {
|
|
18
|
+
return topicHandlers;
|
|
19
|
+
}
|
|
20
|
+
topicHandlers.push(makeHandler(this.onOffConfig.topicGetOn, this.onOnUpdate.bind(this)));
|
|
21
|
+
return topicHandlers;
|
|
22
|
+
}
|
|
23
|
+
async onOnUpdate(topic, value) {
|
|
24
|
+
if (!this.assert('valueOn')) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const on = value === toPrimitive(this.onOffConfig.valueOn);
|
|
28
|
+
if (on === this.on) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.on = on;
|
|
32
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.On, this.on);
|
|
33
|
+
this.logIfDesired(this.stringForState(this.on), this.config.info.name);
|
|
34
|
+
}
|
|
35
|
+
async getOn() {
|
|
36
|
+
return this.on;
|
|
37
|
+
}
|
|
38
|
+
async setOn(value) {
|
|
39
|
+
if (!this.assert('topicSetOn', 'valueOn', 'valueOff')) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const on = value ? this.onOffConfig.valueOn : this.onOffConfig.valueOff;
|
|
43
|
+
this.on = value;
|
|
44
|
+
this.logIfDesired(this.stringForState(this.on, true), this.config.info.name);
|
|
45
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.On, this.on);
|
|
46
|
+
this.publish(this.onOffConfig.topicSetOn, on);
|
|
47
|
+
}
|
|
48
|
+
stringForState(on, future = false) {
|
|
49
|
+
if (on) {
|
|
50
|
+
return future ? strings.onOff.stateFutureOn : strings.onOff.stateOn;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return future ? strings.onOff.stateFutureOff : strings.onOff.stateOff;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=onoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onoff.js","sourceRoot":"","sources":["../../src/accessory/onoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PlatformAccessory, Service } from 'homebridge';
|
|
2
|
+
import { TopicHandler } from './base.js';
|
|
3
|
+
import { OnOffAccessory } from './onoff.js';
|
|
4
|
+
import { CharacteristicType, OutletConfig, ServiceType } from '../model/types.js';
|
|
5
|
+
import { Log } from '../tools/log.js';
|
|
6
|
+
export declare class OutletAccessory extends OnOffAccessory {
|
|
7
|
+
private readonly outletConfig;
|
|
8
|
+
private inUse;
|
|
9
|
+
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, outletConfig: OutletConfig, log: Log);
|
|
10
|
+
protected getAccessoryService(): Service;
|
|
11
|
+
protected get topicHandlers(): TopicHandler[];
|
|
12
|
+
private getInUse;
|
|
13
|
+
private onInUseUpdate;
|
|
14
|
+
private setInUse;
|
|
15
|
+
private stringForInUse;
|
|
16
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { makeHandler } from './base.js';
|
|
2
|
+
import { OnOffAccessory } from './onoff.js';
|
|
3
|
+
import { strings } from '../i18n/i18n.js';
|
|
4
|
+
import { toPrimitive } from '../model/types.js';
|
|
5
|
+
export class OutletAccessory extends OnOffAccessory {
|
|
6
|
+
outletConfig;
|
|
7
|
+
inUse = false;
|
|
8
|
+
constructor(Service, Characteristic, accessory, outletConfig, log) {
|
|
9
|
+
super(Service, Characteristic, accessory, outletConfig, log, OutletAccessory.name);
|
|
10
|
+
this.outletConfig = outletConfig;
|
|
11
|
+
this.accessoryService.getCharacteristic(this.Characteristic.OutletInUse)
|
|
12
|
+
.onGet(this.getInUse.bind(this))
|
|
13
|
+
.onSet(this.setInUse.bind(this));
|
|
14
|
+
}
|
|
15
|
+
getAccessoryService() {
|
|
16
|
+
return this.accessory.getService(this.Service.Outlet) || this.accessory.addService(this.Service.Outlet);
|
|
17
|
+
}
|
|
18
|
+
get topicHandlers() {
|
|
19
|
+
const topicHandlers = super.topicHandlers;
|
|
20
|
+
if (this.outletConfig.topicGetOutletInUse) {
|
|
21
|
+
topicHandlers.push(makeHandler(this.outletConfig.topicGetOutletInUse, this.onInUseUpdate.bind(this)));
|
|
22
|
+
}
|
|
23
|
+
return topicHandlers;
|
|
24
|
+
}
|
|
25
|
+
async getInUse() {
|
|
26
|
+
return this.inUse;
|
|
27
|
+
}
|
|
28
|
+
async onInUseUpdate(topic, value) {
|
|
29
|
+
if (!this.assert('valueOutletInUse')) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const inUse = value === toPrimitive(this.outletConfig.valueOutletInUse);
|
|
33
|
+
if (inUse === this.inUse) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this.inUse = inUse;
|
|
37
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.OutletInUse, this.inUse);
|
|
38
|
+
this.logIfDesired(this.stringForInUse(this.inUse), this.config.info.name);
|
|
39
|
+
}
|
|
40
|
+
async setInUse(value) {
|
|
41
|
+
if (!this.assert('topicSetOutletInUse', 'valueOutletInUse', 'valueOutletNotInUse')) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const inUse = value ? this.outletConfig.valueOutletInUse : this.outletConfig.valueOutletNotInUse;
|
|
45
|
+
this.inUse = value;
|
|
46
|
+
this.logIfDesired(this.stringForInUse(this.inUse, true), this.config.info.name);
|
|
47
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.OutletInUse, this.inUse);
|
|
48
|
+
this.publish(this.outletConfig.topicSetOutletInUse, inUse);
|
|
49
|
+
}
|
|
50
|
+
stringForInUse(inUse, future = false) {
|
|
51
|
+
if (inUse) {
|
|
52
|
+
return future ? strings.outlet.futureInUse : strings.outlet.inUse;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
return future ? strings.outlet.futureNotInUse : strings.outlet.notInUse;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=outlet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outlet.js","sourceRoot":"","sources":["../../src/accessory/outlet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PlatformAccessory, Service } from 'homebridge';
|
|
2
|
+
import { MQTTAccessory, TopicHandler } from './base.js';
|
|
3
|
+
import { CharacteristicType, StatusActiveConfig, ServiceType } from '../model/types.js';
|
|
4
|
+
import { Log } from '../tools/log.js';
|
|
5
|
+
export declare abstract class StatusActiveAccessory extends MQTTAccessory {
|
|
6
|
+
private readonly statusActiveConfig;
|
|
7
|
+
protected readonly accessoryService: Service;
|
|
8
|
+
private statusActive;
|
|
9
|
+
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, statusActiveConfig: StatusActiveConfig, log: Log, className: string);
|
|
10
|
+
protected abstract getAccessoryService(): Service;
|
|
11
|
+
protected get topicHandlers(): TopicHandler[];
|
|
12
|
+
private onStatusActiveUpdate;
|
|
13
|
+
private getStatusActive;
|
|
14
|
+
}
|