homebridge-easy-mqtt 1.2.0-beta.0 → 1.2.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 +6 -1
- package/config.schema.json +2 -3
- package/dist/accessory/abstract/base.d.ts +17 -10
- package/dist/accessory/abstract/base.js +74 -4
- package/dist/accessory/abstract/base.js.map +1 -1
- package/dist/accessory/abstract/statusActive.d.ts +4 -7
- package/dist/accessory/abstract/statusActive.js +11 -20
- package/dist/accessory/abstract/statusActive.js.map +1 -1
- package/dist/accessory/lock.d.ts +3 -6
- package/dist/accessory/lock.js +38 -62
- package/dist/accessory/lock.js.map +1 -1
- package/dist/accessory/onoff/lightbulb.d.ts +9 -17
- package/dist/accessory/onoff/lightbulb.js +53 -70
- package/dist/accessory/onoff/lightbulb.js.map +1 -1
- package/dist/accessory/onoff/onoff.d.ts +5 -6
- package/dist/accessory/onoff/onoff.js +28 -29
- package/dist/accessory/onoff/onoff.js.map +1 -1
- package/dist/accessory/onoff/outlet.d.ts +2 -4
- package/dist/accessory/onoff/outlet.js +14 -27
- package/dist/accessory/onoff/outlet.js.map +1 -1
- package/dist/accessory/onoff/switch.js.map +1 -1
- package/dist/accessory/security.d.ts +2 -7
- package/dist/accessory/security.js +42 -77
- package/dist/accessory/security.js.map +1 -1
- package/dist/accessory/temperatureSensor.d.ts +1 -2
- package/dist/accessory/temperatureSensor.js +6 -8
- package/dist/accessory/temperatureSensor.js.map +1 -1
- package/dist/homebridge/platform.js +7 -6
- package/dist/homebridge/platform.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +2 -2
- package/dist/i18n/en.d.ts +8 -2
- package/dist/i18n/en.js +54 -48
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/i18n.d.ts +8 -2
- package/dist/i18n/template.d.ts +8 -2
- package/dist/model/enums.d.ts +23 -0
- package/dist/model/enums.js +25 -0
- package/dist/model/enums.js.map +1 -1
- package/dist/model/mqtt.d.ts +3 -3
- package/dist/model/mqtt.js.map +1 -1
- package/dist/model/types.d.ts +2 -2
- package/dist/tools/primitive.d.ts +3 -3
- package/dist/tools/primitive.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to homebridge-dummy will be documented in this file.
|
|
4
4
|
|
|
5
|
-
## 1.2.0-beta.
|
|
5
|
+
## 1.2.0-beta.1 (2025-08-??)
|
|
6
6
|
|
|
7
7
|
### HELP NEEDED! (no coding experience required)
|
|
8
8
|
|
|
@@ -11,8 +11,13 @@ Would you like to see Homebridge Easy MQTT in your language? Please consider [ge
|
|
|
11
11
|
### Added
|
|
12
12
|
- Security System accessory type
|
|
13
13
|
|
|
14
|
+
### Fixed
|
|
15
|
+
- Allow raw strings in mqtt messages
|
|
16
|
+
- Changing accessory type cleans up old Homebridge accessories
|
|
17
|
+
|
|
14
18
|
### Changed
|
|
15
19
|
- Updated dev dependencies
|
|
20
|
+
- Significant under-the-hood refactoring to speed future development
|
|
16
21
|
|
|
17
22
|
## 1.1.0 (2025-08-20)
|
|
18
23
|
|
package/config.schema.json
CHANGED
|
@@ -176,8 +176,7 @@
|
|
|
176
176
|
},
|
|
177
177
|
"valueStatusActive": {
|
|
178
178
|
"type": "string",
|
|
179
|
-
"title": "${config.title.valueStatusActive}"
|
|
180
|
-
"description": "${config.description.valueStatusActive}"
|
|
179
|
+
"title": "${config.title.valueStatusActive}"
|
|
181
180
|
},
|
|
182
181
|
"valueLockStateSecured": {
|
|
183
182
|
"type": "string",
|
|
@@ -550,7 +549,7 @@
|
|
|
550
549
|
"items": [
|
|
551
550
|
{
|
|
552
551
|
"key": "accessories[].valueStatusActive",
|
|
553
|
-
"flex": "0 0
|
|
552
|
+
"flex": "0 0 25%"
|
|
554
553
|
}
|
|
555
554
|
]
|
|
556
555
|
}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import { PlatformAccessory } from 'homebridge';
|
|
1
|
+
import { CharacteristicValue, PlatformAccessory, PrimitiveTypes, Service } from 'homebridge';
|
|
2
|
+
import { CharacteristicKey } from '../../model/enums.js';
|
|
2
3
|
import { AccessoryConfig, CharacteristicType, ServiceType } from '../../model/types.js';
|
|
3
4
|
import { Log } from '../../tools/log.js';
|
|
4
|
-
import { Primitive } from '../../tools/primitive.js';
|
|
5
|
-
export type TopicHandler = {
|
|
6
|
-
topic: string;
|
|
7
|
-
handler: ((topic: string, value: Primitive) => Promise<void>);
|
|
8
|
-
};
|
|
9
|
-
export declare function makeHandler(topic: string, handler: (topic: string, value: Primitive) => Promise<void>): TopicHandler;
|
|
10
5
|
export declare abstract class MQTTAccessory<C extends AccessoryConfig> {
|
|
11
6
|
protected readonly Service: ServiceType;
|
|
12
7
|
protected readonly Characteristic: CharacteristicType;
|
|
@@ -14,12 +9,24 @@ export declare abstract class MQTTAccessory<C extends AccessoryConfig> {
|
|
|
14
9
|
protected readonly config: C;
|
|
15
10
|
protected readonly log: Log;
|
|
16
11
|
private readonly mqttClient;
|
|
12
|
+
private readonly properties;
|
|
13
|
+
private readonly topicHandlers;
|
|
14
|
+
protected readonly accessoryService: Service;
|
|
17
15
|
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: C, log: Log, caller: string);
|
|
18
16
|
private onMQTTConnect;
|
|
19
|
-
protected abstract
|
|
17
|
+
protected abstract getAccessoryService(): Service;
|
|
18
|
+
protected abstract addTopicHandlers(): void;
|
|
19
|
+
protected addTopicHandler(topicKey: keyof C, handler: (topic: string, value: PrimitiveTypes) => Promise<void>, assert?: boolean): void;
|
|
20
20
|
protected get name(): string;
|
|
21
|
-
protected
|
|
21
|
+
protected getRawValue(property: keyof C, assert?: boolean): string | undefined;
|
|
22
|
+
protected getPrimitiveValue(property: keyof C, assert?: boolean): PrimitiveTypes | undefined;
|
|
23
|
+
protected publish(topic: string, value: PrimitiveTypes): void;
|
|
22
24
|
teardown(): void;
|
|
23
|
-
protected
|
|
25
|
+
protected get(key: CharacteristicKey): CharacteristicValue;
|
|
26
|
+
protected set(key: CharacteristicKey, value: CharacteristicValue): void;
|
|
27
|
+
protected assert(...keys: (keyof C)[]): boolean;
|
|
28
|
+
protected assertNumber(value: PrimitiveTypes, error: string): boolean;
|
|
29
|
+
protected onUpdate(key: CharacteristicKey, value: CharacteristicValue, logString?: string | undefined): boolean;
|
|
30
|
+
protected onSet(key: CharacteristicKey, value: CharacteristicValue, publish: PrimitiveTypes, topic: keyof C, logString: string | undefined): void;
|
|
24
31
|
protected logIfDesired(message: string, ...parameters: string[]): void;
|
|
25
32
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { PLATFORM_NAME } from '../../homebridge/settings.js';
|
|
2
|
+
import { AccessoryType } from '../../model/enums.js';
|
|
2
3
|
import { MQTT } from '../../model/mqtt.js';
|
|
3
4
|
import getVersion from '../../tools/version.js';
|
|
4
5
|
import { assert } from '../../tools/validation.js';
|
|
5
|
-
|
|
6
|
-
return { topic, handler };
|
|
7
|
-
}
|
|
6
|
+
import { toPrimitive } from '../../tools/primitive.js';
|
|
8
7
|
export class MQTTAccessory {
|
|
9
8
|
Service;
|
|
10
9
|
Characteristic;
|
|
@@ -12,6 +11,9 @@ export class MQTTAccessory {
|
|
|
12
11
|
config;
|
|
13
12
|
log;
|
|
14
13
|
mqttClient;
|
|
14
|
+
properties = {};
|
|
15
|
+
topicHandlers = [];
|
|
16
|
+
accessoryService;
|
|
15
17
|
constructor(Service, Characteristic, accessory, config, log, caller) {
|
|
16
18
|
this.Service = Service;
|
|
17
19
|
this.Characteristic = Characteristic;
|
|
@@ -30,25 +32,93 @@ export class MQTTAccessory {
|
|
|
30
32
|
.setCharacteristic(Characteristic.SerialNumber, config.info.serialNumber ?? `${PLATFORM_NAME}:${name}`)
|
|
31
33
|
.setCharacteristic(Characteristic.Model, config.info.model ?? caller)
|
|
32
34
|
.setCharacteristic(Characteristic.FirmwareRevision, config.info.version ?? getVersion());
|
|
35
|
+
this.accessoryService = this.getAccessoryService();
|
|
36
|
+
for (const type of Object.values(AccessoryType)) {
|
|
37
|
+
const existingService = accessory.getService(Service[type]);
|
|
38
|
+
if (existingService && type !== config.info.type) {
|
|
39
|
+
accessory.removeService(existingService);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
this.addTopicHandlers();
|
|
33
43
|
}
|
|
34
44
|
async onMQTTConnect() {
|
|
35
45
|
this.topicHandlers.forEach(topicHandler => {
|
|
36
46
|
this.mqttClient?.subscribe(topicHandler.topic, topicHandler.handler);
|
|
37
47
|
});
|
|
38
48
|
}
|
|
49
|
+
addTopicHandler(topicKey, handler, assert = true) {
|
|
50
|
+
if (!topicKey.toString().startsWith('topic')) {
|
|
51
|
+
throw new Error(`Trying to fetch topic with unexpected property name '${topicKey.toString()}'`);
|
|
52
|
+
}
|
|
53
|
+
if (assert && !this.assert(topicKey)) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const topic = this.config[topicKey];
|
|
57
|
+
if (topic === undefined) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this.topicHandlers.push({ topic: topic, handler });
|
|
61
|
+
}
|
|
39
62
|
get name() {
|
|
40
63
|
return this.config.info.name;
|
|
41
64
|
}
|
|
65
|
+
getRawValue(property, assert = true) {
|
|
66
|
+
if (!property.toString().startsWith('value')) {
|
|
67
|
+
throw new Error(`Trying to fetch value with unexpected property name '${property.toString()}'`);
|
|
68
|
+
}
|
|
69
|
+
if (assert && !this.assert(property)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
return this.config[property];
|
|
73
|
+
}
|
|
74
|
+
getPrimitiveValue(property, assert = true) {
|
|
75
|
+
const stringValue = this.getRawValue(property, assert);
|
|
76
|
+
return stringValue ? toPrimitive(stringValue) : undefined;
|
|
77
|
+
}
|
|
42
78
|
publish(topic, value) {
|
|
43
79
|
this.mqttClient?.publish(topic, value);
|
|
44
80
|
}
|
|
45
81
|
teardown() {
|
|
46
82
|
this.mqttClient?.teardown();
|
|
47
83
|
}
|
|
48
|
-
|
|
84
|
+
get(key) {
|
|
85
|
+
return this.properties[key];
|
|
86
|
+
}
|
|
87
|
+
set(key, value) {
|
|
88
|
+
this.properties[key] = value;
|
|
89
|
+
}
|
|
49
90
|
assert(...keys) {
|
|
50
91
|
return assert(this.log, this.name, this.config, ...keys);
|
|
51
92
|
}
|
|
93
|
+
assertNumber(value, error) {
|
|
94
|
+
if (typeof value === 'number') {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
this.log.error(error, this.name, `'${value}'`);
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
onUpdate(key, value, logString = undefined) {
|
|
101
|
+
if (value === this.get(key)) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
this.set(key, value);
|
|
105
|
+
this.accessoryService.updateCharacteristic(this.Characteristic[key], value);
|
|
106
|
+
if (logString) {
|
|
107
|
+
this.logIfDesired(logString);
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
onSet(key, value, publish, topic, logString) {
|
|
112
|
+
if (!this.assert(topic)) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (logString && value !== this.get(key)) {
|
|
116
|
+
this.logIfDesired(logString);
|
|
117
|
+
}
|
|
118
|
+
this.set(key, value);
|
|
119
|
+
this.accessoryService.updateCharacteristic(this.Characteristic[key], value);
|
|
120
|
+
this.publish(this.config[topic], publish);
|
|
121
|
+
}
|
|
52
122
|
logIfDesired(message, ...parameters) {
|
|
53
123
|
if (this.config.disableLogging) {
|
|
54
124
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/accessory/abstract/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/accessory/abstract/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { PlatformAccessory
|
|
2
|
-
import { MQTTAccessory
|
|
1
|
+
import { PlatformAccessory } from 'homebridge';
|
|
2
|
+
import { MQTTAccessory } from './base.js';
|
|
3
3
|
import { CharacteristicType, StatusActiveConfig, ServiceType } from '../../model/types.js';
|
|
4
4
|
import { Log } from '../../tools/log.js';
|
|
5
5
|
export declare abstract class StatusActiveAccessory<C extends StatusActiveConfig = StatusActiveConfig> extends MQTTAccessory<C> {
|
|
6
|
-
protected readonly accessoryService: Service;
|
|
7
|
-
private statusActive;
|
|
8
6
|
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: C, log: Log, className: string);
|
|
9
|
-
protected
|
|
10
|
-
protected get topicHandlers(): TopicHandler[];
|
|
11
|
-
private onStatusActiveUpdate;
|
|
7
|
+
protected addTopicHandlers(): void;
|
|
12
8
|
private getStatusActive;
|
|
9
|
+
private onStatusActiveUpdate;
|
|
13
10
|
}
|
|
@@ -1,39 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MQTTAccessory } from './base.js';
|
|
2
2
|
import { strings } from '../../i18n/i18n.js';
|
|
3
|
-
import {
|
|
3
|
+
import { CharacteristicKey } from '../../model/enums.js';
|
|
4
4
|
export class StatusActiveAccessory extends MQTTAccessory {
|
|
5
|
-
accessoryService;
|
|
6
|
-
statusActive = true;
|
|
7
5
|
constructor(Service, Characteristic, accessory, config, log, className) {
|
|
8
6
|
super(Service, Characteristic, accessory, config, log, className);
|
|
9
|
-
this.
|
|
7
|
+
this.set(CharacteristicKey.StatusActive, true);
|
|
10
8
|
this.accessoryService.getCharacteristic(Characteristic.StatusActive)
|
|
11
9
|
.onGet(this.getStatusActive.bind(this));
|
|
12
10
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
addTopicHandlers() {
|
|
12
|
+
this.addTopicHandler('topicGetStatusActive', this.onStatusActiveUpdate.bind(this), false);
|
|
13
|
+
}
|
|
14
|
+
async getStatusActive() {
|
|
15
|
+
return this.get(CharacteristicKey.StatusActive);
|
|
17
16
|
}
|
|
18
17
|
async onStatusActiveUpdate(topic, value) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
const statusActive = value === toPrimitive(this.config.valueStatusActive);
|
|
23
|
-
if (statusActive === this.statusActive) {
|
|
18
|
+
const statusActive = value === this.getPrimitiveValue('valueStatusActive');
|
|
19
|
+
if (!this.onUpdate(CharacteristicKey.StatusActive, statusActive)) {
|
|
24
20
|
return;
|
|
25
21
|
}
|
|
26
|
-
|
|
27
|
-
this.accessoryService.updateCharacteristic(this.Characteristic.StatusActive, this.statusActive);
|
|
28
|
-
if (this.statusActive) {
|
|
22
|
+
if (statusActive) {
|
|
29
23
|
this.logIfDesired(strings.accessory.statusActive);
|
|
30
24
|
}
|
|
31
25
|
else {
|
|
32
26
|
this.log.warning(strings.accessory.statusInactive, this.name);
|
|
33
27
|
}
|
|
34
28
|
}
|
|
35
|
-
async getStatusActive() {
|
|
36
|
-
return this.statusActive;
|
|
37
|
-
}
|
|
38
29
|
}
|
|
39
30
|
//# sourceMappingURL=statusActive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusActive.js","sourceRoot":"","sources":["../../../src/accessory/abstract/statusActive.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"statusActive.js","sourceRoot":"","sources":["../../../src/accessory/abstract/statusActive.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAKzD,MAAM,OAAgB,qBAAyE,SAAQ,aAAgB;IAErH,YAAY,OAAoB,EAAE,cAAkC,EAAE,SAA4B,EAAE,MAAS,EAAE,GAAQ,EAAE,SAAiB;QACxI,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAElE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,cAAc,CAAC,YAAY,CAAC;aACjE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IAES,gBAAgB;QACxB,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5F,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAAa,EAAE,KAAqB;QAErE,MAAM,YAAY,GAAG,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;YACjE,OAAO;QACT,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;CACF"}
|
package/dist/accessory/lock.d.ts
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import { PlatformAccessory, Service } from 'homebridge';
|
|
2
|
-
import { TopicHandler } from './abstract/base.js';
|
|
3
2
|
import { StatusActiveAccessory } from './abstract/statusActive.js';
|
|
4
3
|
import { CharacteristicType, LockMechanismConfig, ServiceType } from '../model/types.js';
|
|
5
4
|
import { Log } from '../tools/log.js';
|
|
6
5
|
export declare class LockMechanismAccessory extends StatusActiveAccessory<LockMechanismConfig> {
|
|
7
|
-
private currentState;
|
|
8
|
-
private targetState;
|
|
9
6
|
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: LockMechanismConfig, log: Log);
|
|
10
7
|
protected getAccessoryService(): Service;
|
|
11
|
-
|
|
8
|
+
addTopicHandlers(): void;
|
|
12
9
|
private getCurrentState;
|
|
13
10
|
private getTargetState;
|
|
14
11
|
private onCurrentStateUpdate;
|
|
15
12
|
private onTargetStateUpdate;
|
|
16
|
-
private
|
|
17
|
-
private valueFromTargetState;
|
|
13
|
+
private onSetTargetState;
|
|
18
14
|
private currentStateFromValue;
|
|
19
15
|
private targetStateFromValue;
|
|
16
|
+
private valueFromTargetState;
|
|
20
17
|
private stringForState;
|
|
21
18
|
}
|
package/dist/accessory/lock.js
CHANGED
|
@@ -1,119 +1,95 @@
|
|
|
1
|
-
import { makeHandler } from './abstract/base.js';
|
|
2
1
|
import { StatusActiveAccessory } from './abstract/statusActive.js';
|
|
3
2
|
import { strings } from '../i18n/i18n.js';
|
|
4
|
-
import {
|
|
3
|
+
import { CharacteristicKey } from '../model/enums.js';
|
|
5
4
|
export class LockMechanismAccessory extends StatusActiveAccessory {
|
|
6
|
-
currentState;
|
|
7
|
-
targetState;
|
|
8
5
|
constructor(Service, Characteristic, accessory, config, log) {
|
|
9
6
|
super(Service, Characteristic, accessory, config, log, LockMechanismAccessory.name);
|
|
10
|
-
this.
|
|
11
|
-
this.
|
|
7
|
+
this.set(CharacteristicKey.LockCurrentState, Characteristic.LockCurrentState.UNKNOWN);
|
|
8
|
+
this.set(CharacteristicKey.LockTargetState, Characteristic.LockTargetState.SECURED);
|
|
12
9
|
this.accessoryService.getCharacteristic(this.Characteristic.LockCurrentState)
|
|
13
10
|
.onGet(this.getCurrentState.bind(this));
|
|
14
11
|
this.accessoryService.getCharacteristic(this.Characteristic.LockTargetState)
|
|
15
12
|
.onGet(this.getTargetState.bind(this))
|
|
16
|
-
.onSet(this.
|
|
13
|
+
.onSet(this.onSetTargetState.bind(this));
|
|
17
14
|
}
|
|
18
15
|
getAccessoryService() {
|
|
19
16
|
return this.accessory.getService(this.Service.LockMechanism) || this.accessory.addService(this.Service.LockMechanism);
|
|
20
17
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
topicHandlers.push(makeHandler(this.config.topicGetLockCurrentState, this.onCurrentStateUpdate.bind(this)));
|
|
27
|
-
topicHandlers.push(makeHandler(this.config.topicGetLockTargetState, this.onTargetStateUpdate.bind(this)));
|
|
28
|
-
return topicHandlers;
|
|
18
|
+
addTopicHandlers() {
|
|
19
|
+
super.addTopicHandlers();
|
|
20
|
+
this.addTopicHandler('topicGetLockCurrentState', this.onCurrentStateUpdate.bind(this));
|
|
21
|
+
this.addTopicHandler('topicGetLockTargetState', this.onTargetStateUpdate.bind(this));
|
|
29
22
|
}
|
|
30
23
|
async getCurrentState() {
|
|
31
|
-
return this.
|
|
24
|
+
return this.get(CharacteristicKey.LockCurrentState);
|
|
32
25
|
}
|
|
33
26
|
async getTargetState() {
|
|
34
|
-
return this.
|
|
27
|
+
return this.get(CharacteristicKey.LockTargetState);
|
|
35
28
|
}
|
|
36
29
|
async onCurrentStateUpdate(topic, value) {
|
|
37
30
|
const current = this.currentStateFromValue(value);
|
|
38
|
-
if (current
|
|
31
|
+
if (current <= this.Characteristic.LockTargetState.SECURED) {
|
|
32
|
+
this.onUpdate(CharacteristicKey.LockTargetState, current);
|
|
33
|
+
}
|
|
34
|
+
if (!this.onUpdate(CharacteristicKey.LockCurrentState, current)) {
|
|
39
35
|
return;
|
|
40
36
|
}
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
this.targetState = this.currentState;
|
|
44
|
-
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.targetState);
|
|
45
|
-
if (this.currentState === this.Characteristic.LockCurrentState.JAMMED) {
|
|
46
|
-
this.log.error(this.stringForState(this.currentState), this.name);
|
|
37
|
+
if (current === this.Characteristic.LockCurrentState.JAMMED) {
|
|
38
|
+
this.log.error(this.stringForState(current), this.name);
|
|
47
39
|
}
|
|
48
40
|
else {
|
|
49
|
-
this.logIfDesired(this.stringForState(
|
|
41
|
+
this.logIfDesired(this.stringForState(current));
|
|
50
42
|
}
|
|
51
43
|
}
|
|
52
44
|
async onTargetStateUpdate(topic, value) {
|
|
53
45
|
const target = this.targetStateFromValue(value);
|
|
54
|
-
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
this.targetState = target;
|
|
58
|
-
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.targetState);
|
|
59
|
-
this.logIfDesired(this.stringForState(this.targetState, true));
|
|
46
|
+
this.onUpdate(CharacteristicKey.LockTargetState, target, this.stringForState(target, true));
|
|
60
47
|
}
|
|
61
|
-
async
|
|
62
|
-
if (!this.assert('topicSetTargetState')) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
48
|
+
async onSetTargetState(value) {
|
|
65
49
|
const target = this.valueFromTargetState(value);
|
|
66
50
|
if (target === undefined) {
|
|
67
|
-
this.log.error(strings.lock.badTarget, this.name, value);
|
|
68
51
|
return;
|
|
69
52
|
}
|
|
70
|
-
|
|
71
|
-
this.logIfDesired(this.stringForState(value, true));
|
|
72
|
-
}
|
|
73
|
-
this.targetState = value;
|
|
74
|
-
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.targetState);
|
|
75
|
-
this.publish(this.config.topicSetTargetState, target);
|
|
76
|
-
}
|
|
77
|
-
valueFromTargetState(value) {
|
|
78
|
-
if (value === undefined || !this.assert('valueLockStateSecured', 'valueLockStateUnsecured')) {
|
|
79
|
-
return undefined;
|
|
80
|
-
}
|
|
81
|
-
switch (value) {
|
|
82
|
-
case this.Characteristic.LockTargetState.SECURED:
|
|
83
|
-
return toPrimitive(this.config.valueLockStateSecured);
|
|
84
|
-
case this.Characteristic.LockTargetState.UNSECURED:
|
|
85
|
-
return toPrimitive(this.config.valueLockStateUnsecured);
|
|
86
|
-
default:
|
|
87
|
-
return undefined;
|
|
88
|
-
}
|
|
53
|
+
this.onSet(CharacteristicKey.LockTargetState, value, target, 'topicSetTargetState', this.stringForState(value, true));
|
|
89
54
|
}
|
|
90
55
|
currentStateFromValue(value) {
|
|
91
|
-
if (value === undefined
|
|
56
|
+
if (value === undefined) {
|
|
92
57
|
return this.Characteristic.LockCurrentState.UNKNOWN;
|
|
93
58
|
}
|
|
94
59
|
switch (value) {
|
|
95
|
-
case
|
|
60
|
+
case this.getPrimitiveValue('valueLockStateSecured'):
|
|
96
61
|
return this.Characteristic.LockCurrentState.SECURED;
|
|
97
|
-
case
|
|
62
|
+
case this.getPrimitiveValue('valueLockStateUnsecured'):
|
|
98
63
|
return this.Characteristic.LockCurrentState.UNSECURED;
|
|
99
|
-
case
|
|
64
|
+
case this.getPrimitiveValue('valueLockStateJammed', false):
|
|
100
65
|
return this.Characteristic.LockCurrentState.JAMMED;
|
|
101
66
|
default:
|
|
102
67
|
return this.Characteristic.LockCurrentState.UNKNOWN;
|
|
103
68
|
}
|
|
104
69
|
}
|
|
105
70
|
targetStateFromValue(value) {
|
|
106
|
-
if (value === undefined
|
|
71
|
+
if (value === undefined) {
|
|
107
72
|
return this.Characteristic.LockTargetState.SECURED;
|
|
108
73
|
}
|
|
109
74
|
switch (value) {
|
|
110
|
-
case
|
|
75
|
+
case this.getPrimitiveValue('valueLockStateUnsecured'):
|
|
111
76
|
return this.Characteristic.LockTargetState.UNSECURED;
|
|
112
|
-
case
|
|
77
|
+
case this.getPrimitiveValue('valueLockStateSecured'):
|
|
113
78
|
default:
|
|
114
79
|
return this.Characteristic.LockTargetState.SECURED;
|
|
115
80
|
}
|
|
116
81
|
}
|
|
82
|
+
valueFromTargetState(value) {
|
|
83
|
+
switch (value) {
|
|
84
|
+
case this.Characteristic.LockTargetState.SECURED:
|
|
85
|
+
return this.getPrimitiveValue('valueLockStateSecured');
|
|
86
|
+
case this.Characteristic.LockTargetState.UNSECURED:
|
|
87
|
+
return this.getPrimitiveValue('valueLockStateUnsecured');
|
|
88
|
+
default:
|
|
89
|
+
this.log.error(strings.lock.badTarget, this.name, `'${value}'`);
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
117
93
|
stringForState(state, future = false) {
|
|
118
94
|
switch (state) {
|
|
119
95
|
case this.Characteristic.LockCurrentState.SECURED:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/accessory/lock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/accessory/lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,21 @@
|
|
|
1
1
|
import { PlatformAccessory, Service } from 'homebridge';
|
|
2
|
-
import { TopicHandler } from '../abstract/base.js';
|
|
3
2
|
import { OnOffAccessory } from './onoff.js';
|
|
4
3
|
import { CharacteristicType, LightbulbConfig, ServiceType } from '../../model/types.js';
|
|
5
4
|
import { Log } from '../../tools/log.js';
|
|
6
5
|
export declare class LightbulbAccessory extends OnOffAccessory<LightbulbConfig> {
|
|
7
|
-
private brightness;
|
|
8
|
-
private hue;
|
|
9
|
-
private colorTemperature;
|
|
10
|
-
private saturation;
|
|
11
6
|
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: LightbulbConfig, log: Log);
|
|
12
7
|
protected getAccessoryService(): Service;
|
|
13
|
-
|
|
8
|
+
addTopicHandlers(): void;
|
|
14
9
|
private getBrightness;
|
|
15
|
-
private getHue;
|
|
16
|
-
private getColorTemperature;
|
|
17
|
-
private getSaturation;
|
|
18
10
|
private onBrightnessUpdate;
|
|
19
|
-
private
|
|
20
|
-
private
|
|
21
|
-
private setHue;
|
|
11
|
+
private onSetBrightness;
|
|
12
|
+
private getColorTemperature;
|
|
22
13
|
private onColorTemperatureUpdate;
|
|
23
|
-
private
|
|
14
|
+
private onSetColorTemperature;
|
|
15
|
+
private getHue;
|
|
16
|
+
private onHueUpdate;
|
|
17
|
+
private onSetHue;
|
|
18
|
+
private getSaturation;
|
|
24
19
|
private onSaturationUpdate;
|
|
25
|
-
private
|
|
26
|
-
private _onUpdate;
|
|
27
|
-
private _set;
|
|
28
|
-
private toCharacteristicKey;
|
|
20
|
+
private onSetSaturation;
|
|
29
21
|
}
|