homebridge-easy-mqtt 1.0.0-beta.0 → 1.0.0-beta.2
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 +19 -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 +58 -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.d.ts +1 -1
- package/dist/homebridge/platform.js +17 -9
- 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,117 @@
|
|
|
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
|
-
|
|
60
|
-
|
|
43
|
+
this.currentState = current;
|
|
44
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.LockCurrentState, this.currentState);
|
|
45
|
+
this.targetState = this.currentState;
|
|
46
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.targetState);
|
|
47
|
+
if (this.currentState === this.Characteristic.LockCurrentState.JAMMED) {
|
|
48
|
+
this.log.error(this.stringForState(this.currentState), this.config.info.name);
|
|
61
49
|
}
|
|
62
50
|
else {
|
|
63
|
-
this.logIfDesired(this.stringForState(this.
|
|
51
|
+
this.logIfDesired(this.stringForState(this.currentState), this.config.info.name);
|
|
64
52
|
}
|
|
65
53
|
}
|
|
66
|
-
async
|
|
54
|
+
async onTargetStateUpdate(topic, value) {
|
|
67
55
|
const target = this.targetStateFromValue(value);
|
|
68
|
-
if (target === this.
|
|
56
|
+
if (target === this.targetState) {
|
|
69
57
|
return;
|
|
70
58
|
}
|
|
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;
|
|
59
|
+
this.targetState = target;
|
|
60
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.targetState);
|
|
61
|
+
this.logIfDesired(this.stringForState(this.targetState, true), this.config.info.name);
|
|
83
62
|
}
|
|
84
63
|
async setTargetState(value) {
|
|
85
|
-
if (!this.assert('
|
|
64
|
+
if (!this.assert('topicSetTargetState')) {
|
|
86
65
|
return;
|
|
87
66
|
}
|
|
88
|
-
const target = this.
|
|
67
|
+
const target = this.valueFromTargetState(value);
|
|
89
68
|
if (target === undefined) {
|
|
90
69
|
this.log.error(strings.lock.badTarget, this.config.info.name, value);
|
|
91
70
|
return;
|
|
92
71
|
}
|
|
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.
|
|
72
|
+
this.targetState = value;
|
|
73
|
+
this.logIfDesired(this.stringForState(this.targetState, true), this.config.info.name);
|
|
74
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.targetState);
|
|
75
|
+
this.currentState = this.targetState;
|
|
76
|
+
this.accessoryService.updateCharacteristic(this.Characteristic.LockCurrentState, this.currentState);
|
|
77
|
+
this.publish(this.lockMechanismConfig.topicSetTargetState, target);
|
|
99
78
|
}
|
|
100
|
-
|
|
101
|
-
if (value === undefined || !this.assert('
|
|
79
|
+
valueFromTargetState(value) {
|
|
80
|
+
if (value === undefined || !this.assert('valueLockStateSecured', 'valueLockStateUnsecured')) {
|
|
102
81
|
return undefined;
|
|
103
82
|
}
|
|
104
83
|
switch (value) {
|
|
105
84
|
case this.Characteristic.LockTargetState.SECURED:
|
|
106
|
-
return toPrimitive(this.
|
|
85
|
+
return toPrimitive(this.lockMechanismConfig.valueLockStateSecured);
|
|
107
86
|
case this.Characteristic.LockTargetState.UNSECURED:
|
|
108
|
-
return toPrimitive(this.
|
|
87
|
+
return toPrimitive(this.lockMechanismConfig.valueLockStateUnsecured);
|
|
109
88
|
default:
|
|
110
89
|
return undefined;
|
|
111
90
|
}
|
|
112
91
|
}
|
|
113
92
|
currentStateFromValue(value) {
|
|
114
|
-
if (value === undefined || !this.assert('
|
|
93
|
+
if (value === undefined || !this.assert('valueLockStateSecured', 'valueLockStateUnsecured')) {
|
|
115
94
|
return this.Characteristic.LockCurrentState.UNKNOWN;
|
|
116
95
|
}
|
|
117
96
|
switch (value) {
|
|
118
|
-
case toPrimitive(this.
|
|
97
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateSecured):
|
|
119
98
|
return this.Characteristic.LockCurrentState.SECURED;
|
|
120
|
-
case toPrimitive(this.
|
|
99
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateUnsecured):
|
|
121
100
|
return this.Characteristic.LockCurrentState.UNSECURED;
|
|
122
|
-
case toPrimitive(this.
|
|
101
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateJammed):
|
|
123
102
|
return this.Characteristic.LockCurrentState.JAMMED;
|
|
124
103
|
default:
|
|
125
104
|
return this.Characteristic.LockCurrentState.UNKNOWN;
|
|
126
105
|
}
|
|
127
106
|
}
|
|
128
107
|
targetStateFromValue(value) {
|
|
129
|
-
if (value === undefined || !this.assert('
|
|
108
|
+
if (value === undefined || !this.assert('valueLockStateSecured', 'valueLockStateUnsecured')) {
|
|
130
109
|
return this.Characteristic.LockTargetState.SECURED;
|
|
131
110
|
}
|
|
132
111
|
switch (value) {
|
|
133
|
-
case toPrimitive(this.
|
|
112
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateUnsecured):
|
|
134
113
|
return this.Characteristic.LockTargetState.UNSECURED;
|
|
135
|
-
case toPrimitive(this.
|
|
114
|
+
case toPrimitive(this.lockMechanismConfig.valueLockStateSecured):
|
|
136
115
|
default:
|
|
137
116
|
return this.Characteristic.LockTargetState.SECURED;
|
|
138
117
|
}
|
|
@@ -149,11 +128,5 @@ export class LockAccessory extends MQTTAccessory {
|
|
|
149
128
|
return strings.lock.stateUnknown;
|
|
150
129
|
}
|
|
151
130
|
}
|
|
152
|
-
logIfDesired(message, ...parameters) {
|
|
153
|
-
if (this.config.disableLogging) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
this.log.always(message, ...parameters);
|
|
157
|
-
}
|
|
158
131
|
}
|
|
159
132
|
//# 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
|
+
}
|