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.
Files changed (44) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/config.schema.json +2 -3
  3. package/dist/accessory/abstract/base.d.ts +17 -10
  4. package/dist/accessory/abstract/base.js +74 -4
  5. package/dist/accessory/abstract/base.js.map +1 -1
  6. package/dist/accessory/abstract/statusActive.d.ts +4 -7
  7. package/dist/accessory/abstract/statusActive.js +11 -20
  8. package/dist/accessory/abstract/statusActive.js.map +1 -1
  9. package/dist/accessory/lock.d.ts +3 -6
  10. package/dist/accessory/lock.js +38 -62
  11. package/dist/accessory/lock.js.map +1 -1
  12. package/dist/accessory/onoff/lightbulb.d.ts +9 -17
  13. package/dist/accessory/onoff/lightbulb.js +53 -70
  14. package/dist/accessory/onoff/lightbulb.js.map +1 -1
  15. package/dist/accessory/onoff/onoff.d.ts +5 -6
  16. package/dist/accessory/onoff/onoff.js +28 -29
  17. package/dist/accessory/onoff/onoff.js.map +1 -1
  18. package/dist/accessory/onoff/outlet.d.ts +2 -4
  19. package/dist/accessory/onoff/outlet.js +14 -27
  20. package/dist/accessory/onoff/outlet.js.map +1 -1
  21. package/dist/accessory/onoff/switch.js.map +1 -1
  22. package/dist/accessory/security.d.ts +2 -7
  23. package/dist/accessory/security.js +42 -77
  24. package/dist/accessory/security.js.map +1 -1
  25. package/dist/accessory/temperatureSensor.d.ts +1 -2
  26. package/dist/accessory/temperatureSensor.js +6 -8
  27. package/dist/accessory/temperatureSensor.js.map +1 -1
  28. package/dist/homebridge/platform.js +7 -6
  29. package/dist/homebridge/platform.js.map +1 -1
  30. package/dist/homebridge-ui/public/index.html +2 -2
  31. package/dist/i18n/en.d.ts +8 -2
  32. package/dist/i18n/en.js +54 -48
  33. package/dist/i18n/en.js.map +1 -1
  34. package/dist/i18n/i18n.d.ts +8 -2
  35. package/dist/i18n/template.d.ts +8 -2
  36. package/dist/model/enums.d.ts +23 -0
  37. package/dist/model/enums.js +25 -0
  38. package/dist/model/enums.js.map +1 -1
  39. package/dist/model/mqtt.d.ts +3 -3
  40. package/dist/model/mqtt.js.map +1 -1
  41. package/dist/model/types.d.ts +2 -2
  42. package/dist/tools/primitive.d.ts +3 -3
  43. package/dist/tools/primitive.js.map +1 -1
  44. 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.0 (2025-08-26)
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
 
@@ -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 50%"
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 get topicHandlers(): TopicHandler[];
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 publish(topic: string, value: Primitive): void;
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 assert(...keys: (keyof any)[]): boolean;
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
- export function makeHandler(topic, handler) {
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
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
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":"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"}
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, Service } from 'homebridge';
2
- import { MQTTAccessory, TopicHandler } from './base.js';
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 abstract getAccessoryService(): Service;
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 { makeHandler, MQTTAccessory } from './base.js';
1
+ import { MQTTAccessory } from './base.js';
2
2
  import { strings } from '../../i18n/i18n.js';
3
- import { toPrimitive } from '../../tools/primitive.js';
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.accessoryService = this.getAccessoryService();
7
+ this.set(CharacteristicKey.StatusActive, true);
10
8
  this.accessoryService.getCharacteristic(Characteristic.StatusActive)
11
9
  .onGet(this.getStatusActive.bind(this));
12
10
  }
13
- get topicHandlers() {
14
- return [
15
- ...(this.config.topicGetStatusActive ? [makeHandler(this.config.topicGetStatusActive, this.onStatusActiveUpdate.bind(this))] : []),
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
- if (!this.assert('valueStatusActive')) {
20
- return;
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
- this.statusActive = statusActive;
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,WAAW,EAAE,aAAa,EAAgB,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK7C,OAAO,EAAa,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,OAAgB,qBAAyE,SAAQ,aAAgB;IAClG,gBAAgB,CAAU;IAErC,YAAY,GAAwB,IAAI,CAAC;IAEjD,YACE,OAAoB,EACpB,cAAkC,EAClC,SAA4B,EAC5B,MAAS,EACT,GAAQ,EACR,SAAiB;QAEjB,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAElE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEnD,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;IAID,IAAc,aAAa;QACzB,OAAO;YACL,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE,CAAC;SAClI,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAAa,EAAE,KAAgB;QAEhE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC1E,IAAI,YAAY,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,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;IAEO,KAAK,CAAC,eAAe;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF"}
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"}
@@ -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
- get topicHandlers(): TopicHandler[];
8
+ addTopicHandlers(): void;
12
9
  private getCurrentState;
13
10
  private getTargetState;
14
11
  private onCurrentStateUpdate;
15
12
  private onTargetStateUpdate;
16
- private setTargetState;
17
- private valueFromTargetState;
13
+ private onSetTargetState;
18
14
  private currentStateFromValue;
19
15
  private targetStateFromValue;
16
+ private valueFromTargetState;
20
17
  private stringForState;
21
18
  }
@@ -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 { toPrimitive } from '../tools/primitive.js';
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.currentState = this.Characteristic.LockCurrentState.UNKNOWN;
11
- this.targetState = this.Characteristic.LockTargetState.SECURED;
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.setTargetState.bind(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
- get topicHandlers() {
22
- const topicHandlers = super.topicHandlers;
23
- if (!this.assert('topicGetLockCurrentState', 'topicGetLockTargetState')) {
24
- return topicHandlers;
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.currentState;
24
+ return this.get(CharacteristicKey.LockCurrentState);
32
25
  }
33
26
  async getTargetState() {
34
- return this.targetState;
27
+ return this.get(CharacteristicKey.LockTargetState);
35
28
  }
36
29
  async onCurrentStateUpdate(topic, value) {
37
30
  const current = this.currentStateFromValue(value);
38
- if (current === this.currentState) {
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.currentState = current;
42
- this.accessoryService.updateCharacteristic(this.Characteristic.LockCurrentState, this.currentState);
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(this.currentState));
41
+ this.logIfDesired(this.stringForState(current));
50
42
  }
51
43
  }
52
44
  async onTargetStateUpdate(topic, value) {
53
45
  const target = this.targetStateFromValue(value);
54
- if (target === this.targetState) {
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 setTargetState(value) {
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
- if (this.targetState !== value) {
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 || !this.assert('valueLockStateSecured', 'valueLockStateUnsecured')) {
56
+ if (value === undefined) {
92
57
  return this.Characteristic.LockCurrentState.UNKNOWN;
93
58
  }
94
59
  switch (value) {
95
- case toPrimitive(this.config.valueLockStateSecured):
60
+ case this.getPrimitiveValue('valueLockStateSecured'):
96
61
  return this.Characteristic.LockCurrentState.SECURED;
97
- case toPrimitive(this.config.valueLockStateUnsecured):
62
+ case this.getPrimitiveValue('valueLockStateUnsecured'):
98
63
  return this.Characteristic.LockCurrentState.UNSECURED;
99
- case toPrimitive(this.config.valueLockStateJammed):
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 || !this.assert('valueLockStateSecured', 'valueLockStateUnsecured')) {
71
+ if (value === undefined) {
107
72
  return this.Characteristic.LockTargetState.SECURED;
108
73
  }
109
74
  switch (value) {
110
- case toPrimitive(this.config.valueLockStateUnsecured):
75
+ case this.getPrimitiveValue('valueLockStateUnsecured'):
111
76
  return this.Characteristic.LockTargetState.UNSECURED;
112
- case toPrimitive(this.config.valueLockStateSecured):
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":"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"}
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
- get topicHandlers(): TopicHandler[];
8
+ addTopicHandlers(): void;
14
9
  private getBrightness;
15
- private getHue;
16
- private getColorTemperature;
17
- private getSaturation;
18
10
  private onBrightnessUpdate;
19
- private setBrightness;
20
- private onHueUpdate;
21
- private setHue;
11
+ private onSetBrightness;
12
+ private getColorTemperature;
22
13
  private onColorTemperatureUpdate;
23
- private setColorTemperature;
14
+ private onSetColorTemperature;
15
+ private getHue;
16
+ private onHueUpdate;
17
+ private onSetHue;
18
+ private getSaturation;
24
19
  private onSaturationUpdate;
25
- private setSaturation;
26
- private _onUpdate;
27
- private _set;
28
- private toCharacteristicKey;
20
+ private onSetSaturation;
29
21
  }