@uboness/homebridge-mqtt 0.2.4 → 0.2.6

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 (55) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +108 -1
  3. package/dist/Future.d.ts +12 -0
  4. package/dist/Future.d.ts.map +1 -0
  5. package/dist/Future.js +39 -0
  6. package/dist/Future.js.map +1 -0
  7. package/dist/Mqtt.d.ts +24 -2
  8. package/dist/Mqtt.d.ts.map +1 -1
  9. package/dist/Mqtt.js +108 -13
  10. package/dist/Mqtt.js.map +1 -1
  11. package/dist/common.d.ts +1 -0
  12. package/dist/common.d.ts.map +1 -1
  13. package/dist/common.js.map +1 -1
  14. package/dist/service/WindowCovering.d.ts +1 -1
  15. package/dist/service/WindowCovering.d.ts.map +1 -1
  16. package/dist/service/WindowCovering.js +16 -13
  17. package/dist/service/WindowCovering.js.map +1 -1
  18. package/dist/service/characteristic/action/Action.d.ts +21 -0
  19. package/dist/service/characteristic/action/Action.d.ts.map +1 -0
  20. package/dist/service/characteristic/action/Action.js +39 -0
  21. package/dist/service/characteristic/action/Action.js.map +1 -0
  22. package/dist/service/characteristic/action/CommonAction.d.ts +10 -0
  23. package/dist/service/characteristic/action/CommonAction.d.ts.map +1 -0
  24. package/dist/service/characteristic/action/CommonAction.js +15 -0
  25. package/dist/service/characteristic/action/CommonAction.js.map +1 -0
  26. package/dist/service/characteristic/action/MqttAction.d.ts +17 -0
  27. package/dist/service/characteristic/action/MqttAction.d.ts.map +1 -0
  28. package/dist/service/characteristic/action/MqttAction.js +23 -0
  29. package/dist/service/characteristic/action/MqttAction.js.map +1 -0
  30. package/dist/service/characteristic/action/index.d.ts +1 -0
  31. package/dist/service/characteristic/action/index.d.ts.map +1 -0
  32. package/dist/service/characteristic/action/index.js +2 -0
  33. package/dist/service/characteristic/action/index.js.map +1 -0
  34. package/dist/service/characteristic/archetype/BooleanValue.d.ts +2 -0
  35. package/dist/service/characteristic/archetype/BooleanValue.d.ts.map +1 -1
  36. package/dist/service/characteristic/archetype/BooleanValue.js +8 -2
  37. package/dist/service/characteristic/archetype/BooleanValue.js.map +1 -1
  38. package/dist/service/characteristic/archetype/EnumValue.d.ts +2 -0
  39. package/dist/service/characteristic/archetype/EnumValue.d.ts.map +1 -1
  40. package/dist/service/characteristic/archetype/EnumValue.js +8 -2
  41. package/dist/service/characteristic/archetype/EnumValue.js.map +1 -1
  42. package/dist/service/characteristic/archetype/NumericValue.d.ts +2 -0
  43. package/dist/service/characteristic/archetype/NumericValue.d.ts.map +1 -1
  44. package/dist/service/characteristic/archetype/NumericValue.js +8 -2
  45. package/dist/service/characteristic/archetype/NumericValue.js.map +1 -1
  46. package/dist/service/characteristic/archetype/Signal.d.ts.map +1 -1
  47. package/dist/service/characteristic/archetype/Signal.js +0 -2
  48. package/dist/service/characteristic/archetype/Signal.js.map +1 -1
  49. package/dist/service/characteristic/archetype/ZeroOneValue.d.ts +2 -0
  50. package/dist/service/characteristic/archetype/ZeroOneValue.d.ts.map +1 -1
  51. package/dist/service/characteristic/archetype/ZeroOneValue.js +8 -2
  52. package/dist/service/characteristic/archetype/ZeroOneValue.js.map +1 -1
  53. package/dist/service/characteristic/stickyOn.js +5 -5
  54. package/dist/service/characteristic/stickyOn.js.map +1 -1
  55. package/package.json +10 -8
package/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [0.2.6](https://github.com/uboness/{{name}}/compare/v0.2.5...v0.2.6) (2026-02-22)
6
+
7
+ ## [0.2.5](https://github.com/uboness/{{name}}/compare/v0.2.4...v0.2.5) (2025-09-16)
8
+
9
+
10
+ ### Features
11
+
12
+ * added the notion of "actions" and `preSet` for "settable" characteristics. ([df92575](https://github.com/uboness/{{name}}/commit/df925750b351031ac811dd906075a19cc3bd038e))
13
+
5
14
  ## [0.2.4](https://github.com/uboness/{{name}}/compare/v0.2.3...v0.2.4) (2025-09-13)
6
15
 
7
16
 
package/README.md CHANGED
@@ -443,13 +443,16 @@ of templates has the potential of a greater added value overall.
443
443
 
444
444
  ### Booleans
445
445
  - `boolean` - Converts "true" and "false" string values or `true` and `false` JSON values.
446
- - `one-zero` - Converts "1" and "0" to `true` and `false` (also `1` and `0` numeric JSON values)
446
+ - `zero-one` - Converts "1" and "0" to `true` and `false` (also `1` and `0` numeric JSON values)
447
447
  - `{ "on": "<on_value>", "off": "<off_value>" }` - Indicates the values that represent `true` (on) and `false` (off)
448
448
 
449
449
  ### Percentages (%)
450
450
  - `homekit` - Homekit expects numbers between 0 - 100.
451
451
  - `decimal` - Converts numbers between 0 - 1 (`0.34` indicates `34%`)
452
452
  - `{ "min": <number>, "max": <number> }` - Translate any number between these bounds to a percentage value. Any number above the max will be converted to `max` and any number below the min will be converted to `min`.
453
+ - `[ "value1", "value2", ... ]` - The values in the array represent the MQTT values, the index of each value in the array determines the 0-100 HomeKit value the MQTT value maps to.
454
+ for example [ "low", "mid", "high" ] will map `low` to 0, `mid` to 50 and `high` to 100. The converter will also
455
+ make sure that 0, 50, and 100 are the only possible values the characteristic will have (rounding other values to one of these values)
453
456
 
454
457
  ### Hue
455
458
  - `homekit` - Homekit expects numbers representing arc degrees (0 - 360)
@@ -473,6 +476,7 @@ of templates has the potential of a greater added value overall.
473
476
 
474
477
 
475
478
  ## Characteristics Reference
479
+
476
480
  - [Common Characteristics](#common-characteristics)
477
481
  - [Common Sensor Characteristics](#common-sensor-characteristics)
478
482
  - [active](#code-stylecolor-greenactivecode)
@@ -546,6 +550,109 @@ of templates has the potential of a greater added value overall.
546
550
  - [waterLevel](#code-stylecolor-greenwaterLevelcode)
547
551
 
548
552
 
553
+ The HomeKit spec. define a list of characteristics for every service type. Some are mandatory and some are options.
554
+ The characteristics here are defined under the `topics` field as a JSON object where the keys identify
555
+ the characteristic types and the values are the configurations for those characteristics. Since we're
556
+ dealing with MQTT here, all the characteristics are driven by MQTT topics.
557
+
558
+ Generally, every characteristic that can be read (e.g. `currentTemperature`) will have a `get` configuration which defines the topic to which
559
+ the characteristic will subscribe to and the published values will be set on the characteristic. Similarly,
560
+ a characteristic that can be set, will have a `set` configuration which holds the topic to which the characteristic will
561
+ publish its values when they change. Quite a few characteristics are both `read` and `write` and so they have
562
+ both `get` and `set` settings.
563
+
564
+ In addition to `set` and `get` it's also possible to configure a `converter` for the characteristic which determines how
565
+ the MQTT values are converted to the HomeKit values and vice versa. There are a fixed set of converters that are built in
566
+ which you can pick from.
567
+
568
+ ### Actions
569
+
570
+ For write characteristics, in addition to the `set` topic, it's possible to define a `preSet` configuration. These are
571
+ essentially a list of actions that will be executed prior to publishing the value to MQTT. If any of the actions
572
+ fail, the value will be not be published to the MQTT.
573
+
574
+
575
+ The following actions are current supported:
576
+
577
+ #### mqtt-publish
578
+
579
+ Publishes a value to a MQTT topic. In addition, a `feedback` can be configured indicating that as a result
580
+ of publishing the value, another value should be published (as a sort of confirmation) to another topic, in which
581
+ case the action will subscribe to that topic and wait for that value. Once the value arrives, the action
582
+ is considered as "executed successfully". It's also possible to define a `timeout` for the feedback, in which
583
+ case when the timeout has passed and the feedback value is not yet published, the action execution will be
584
+ considered as "failed".
585
+
586
+ ```js
587
+ {
588
+ "set": "...",
589
+ "preSet": [
590
+ {
591
+ "type": "mqtt-publish",
592
+ "topic": "<the topic to publish the value to>",
593
+ "value": "<the value to publish>",
594
+ "feedback?": { // optional
595
+ "topic": "<feedback topic>",
596
+ "value": "<expected feedback value>",
597
+ "timeout?": <number> // timeout in milliseconds
598
+ }
599
+ }
600
+ ]
601
+ }
602
+ ```
603
+
604
+ #### wait
605
+
606
+ An action that simply stalls the execution for the configured timeout (in milliseconds). This can be useful
607
+ when the system on the other side requires some "breathing space" between commands
608
+
609
+ ```js
610
+ {
611
+ "set": "...",
612
+ "preSet": [
613
+ {
614
+ "type": "wait",
615
+ "timeout": <number> // the time to wait before continuing execution
616
+ }
617
+ ]
618
+ }
619
+ ```
620
+
621
+ Here's a small use-case for the use of actions. Let's say you have a `window-covering` service representing blinds.
622
+ You can control the blinds by opening or closing them, but also send a "hold" command to command them to stop at their
623
+ current position. In some systems, when you want to move directly from "closing" to "opening" you first need to send
624
+ a "hold" command. This is where actions can help, by publishing a "hold" value prior to publishing the set value for
625
+ the `targetPosition`. Here is how this configuration may look like:
626
+
627
+ ```js
628
+ {
629
+ ...
630
+ "topics": {
631
+ "targetPosition": {
632
+ "preSet": [
633
+ {
634
+ "type": "mqtt-publish",
635
+ "topic": "blinds/targetPosition/set",
636
+ "value": "50", // 50 represents a "hold" value
637
+ "feedback": {
638
+ "topic": "blinds/targetPosition",
639
+ "value": "50", // expecting 50 in return
640
+ "timeout": 4000
641
+ }
642
+ }
643
+ ],
644
+ "set": "test/blinds/targetPosition/set",
645
+ "get": "test/blinds/targetPosition",
646
+ "converter": [ "100", "50", "0" ]
647
+ },
648
+ "currentPosition": {
649
+ "get": "test/blinds/currentPosition",
650
+ "converter": [ "100", "50", "0"]
651
+ }
652
+ }
653
+ }
654
+ ```
655
+
549
656
  ### Common Characteristics
550
657
 
551
658
  The following characteristic are optional and may be configured on any service type
@@ -0,0 +1,12 @@
1
+ export declare class Future<T> {
2
+ private value?;
3
+ private _error;
4
+ private resolve?;
5
+ private reject?;
6
+ private _resolved;
7
+ get resolved(): boolean;
8
+ set(value: T): void;
9
+ error(error: any): void;
10
+ get(): Promise<T>;
11
+ }
12
+ //# sourceMappingURL=Future.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Future.d.ts","sourceRoot":"","sources":["../src/Future.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM,CAAC,CAAC;IAEjB,OAAO,CAAC,KAAK,CAAC,CAAI;IAClB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAC,CAAyB;IACzC,OAAO,CAAC,MAAM,CAAC,CAA2B;IAE1C,OAAO,CAAC,SAAS,CAAS;IAE1B,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,GAAG,CAAC,KAAK,EAAE,CAAC;IAOZ,KAAK,CAAC,KAAK,EAAE,GAAG;IAOV,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;CAY1B"}
package/dist/Future.js ADDED
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Future = void 0;
4
+ class Future {
5
+ constructor() {
6
+ this._resolved = false;
7
+ }
8
+ get resolved() {
9
+ return this._resolved;
10
+ }
11
+ set(value) {
12
+ var _a;
13
+ this.value = value;
14
+ this._error = undefined;
15
+ this._resolved = true;
16
+ (_a = this.resolve) === null || _a === void 0 ? void 0 : _a.call(this, this.value);
17
+ }
18
+ error(error) {
19
+ var _a;
20
+ this.value = undefined;
21
+ this._error = error;
22
+ this._resolved = true;
23
+ (_a = this.reject) === null || _a === void 0 ? void 0 : _a.call(this, this._error);
24
+ }
25
+ async get() {
26
+ if (this.value) {
27
+ return Promise.resolve(this.value);
28
+ }
29
+ if (this._error) {
30
+ return Promise.reject(this._error);
31
+ }
32
+ return new Promise((resolve, reject) => {
33
+ this.resolve = resolve;
34
+ this.reject = reject;
35
+ });
36
+ }
37
+ }
38
+ exports.Future = Future;
39
+ //# sourceMappingURL=Future.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Future.js","sourceRoot":"","sources":["../src/Future.ts"],"names":[],"mappings":";;;AAEA,MAAa,MAAM;IAAnB;QAOY,cAAS,GAAG,KAAK,CAAC;IAgC9B,CAAC;IA9BG,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,KAAQ;;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAA,IAAI,CAAC,OAAO,qDAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAU;;QACZ,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAA,IAAI,CAAC,MAAM,qDAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,GAAG;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAvCD,wBAuCC"}
package/dist/Mqtt.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import mqtt from 'mqtt';
2
- import { Callback, Detachable, ValueCallback } from './common';
2
+ import { Callback, Detachable, Predicate, ValueCallback } from './common';
3
3
  import { ILogger } from './Logger';
4
4
  import { MqttPlatform } from './MqttPlatform';
5
5
  export declare class Mqtt {
@@ -14,12 +14,31 @@ export declare class Mqtt {
14
14
  readonly logger: ILogger;
15
15
  private readonly emitter;
16
16
  private client?;
17
+ private subscriptions;
17
18
  constructor(platform: MqttPlatform, logger: ILogger, options: Mqtt.Options);
18
19
  get state(): Mqtt.State;
19
20
  get online(): boolean;
20
21
  start(): Promise<void>;
21
22
  close(): Promise<void>;
22
- subscribe(topic: string, handler?: ValueCallback<string>): Promise<Detachable>;
23
+ /**
24
+ * Subscribes the given handler to the given topic. Returns a detachable which enables unsubscribing.
25
+ *
26
+ * While MQTT enables you to subscribe and unsubscribe to topics, it doesn't keep track of the subscriptions. That is
27
+ * when you subscribe multiple times (form different places in the code base) to a topic, it only takes one call
28
+ * to unsubscribe to effectively unsubscribe all the subscriptions.
29
+ *
30
+ * This method overcomes this limitation by assigning each subscription a unique id and keeping track of all subscriptions.
31
+ * When unsubscribing (via the retuned detachable) only the associated id of this subscription will effectively be unsubscribed.
32
+ * When all subscriptions for a specific topic are unsubscribed, only then we unsubscribe from MQTT for that topic.
33
+ *
34
+ * The returned Detachable holds the subscription id
35
+ */
36
+ subscribe(topic: string, handler?: ValueCallback<string>): Promise<Detachable & {
37
+ id: string;
38
+ }>;
39
+ subscribeOnce(topic: string, handler: ValueCallback<string>): Promise<Detachable>;
40
+ subscribeValue(topic: string, expectedValue: string | Predicate<string>, timeout?: number): Promise<string>;
41
+ subscribeNext(topic: string, timeout?: number): Promise<string>;
23
42
  publish(topic: string, value: string | number | boolean, options?: {
24
43
  retain?: boolean;
25
44
  qos?: 0 | 1 | 2;
@@ -27,6 +46,9 @@ export declare class Mqtt {
27
46
  on(event: `ctrl.online_status`, handler: ValueCallback<boolean>): Detachable;
28
47
  on(event: `ctrl.close`, handler: Callback): Detachable;
29
48
  on(event: `topic.${string}`, handler: ValueCallback<string>): Detachable;
49
+ once(event: `ctrl.online_status`, handler: ValueCallback<boolean>): Detachable;
50
+ once(event: `ctrl.close`, handler: Callback): Detachable;
51
+ once(event: `topic.${string}`, handler: ValueCallback<string>): Detachable;
30
52
  private stripTopic;
31
53
  private fullTopic;
32
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Mqtt.d.ts","sourceRoot":"","sources":["../src/Mqtt.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAY,aAAa,EAAE,MAAM,UAAU,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,IAAI;IAEb,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAkB;IAEjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAE5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAE9C,OAAO,CAAC,MAAM,CAAC,CAAkB;gBAEpB,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO;IAW3E,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAEtB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAEK,KAAK;IAyCL,KAAK;IAOL,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAoB9E,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;KAAE;IAQ9G,EAAE,CAAC,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,UAAU;IAC5E,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,GAAG,UAAU;IACtD,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,UAAU;IAMxE,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,SAAS;CAGpB;AAED,yBAAiB,IAAI,CAAC;IAElB,KAAY,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAE3E,KAAY,OAAO,GAAG;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE;YACH,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;SACpB,CAAA;KAEJ,CAAA;CACJ"}
1
+ {"version":3,"file":"Mqtt.d.ts","sourceRoot":"","sources":["../src/Mqtt.ts"],"names":[],"mappings":"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"}
package/dist/Mqtt.js CHANGED
@@ -39,13 +39,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.Mqtt = void 0;
40
40
  const events_1 = __importDefault(require("events"));
41
41
  const mqtt_1 = __importDefault(require("mqtt"));
42
+ const uuid_1 = require("uuid");
42
43
  const common_1 = require("./common");
44
+ const node_timers_1 = require("node:timers");
45
+ const Future_1 = require("./Future");
43
46
  class Mqtt {
44
47
  constructor(platform, logger, options) {
45
48
  var _a, _b;
46
49
  this._state = 'init';
47
50
  this._online = false;
48
51
  this.emitter = new events_1.default();
52
+ this.subscriptions = new Map;
49
53
  this.id = options.id;
50
54
  this.host = options.host;
51
55
  this.port = (_a = options.port) !== null && _a !== void 0 ? _a : 1883;
@@ -107,26 +111,113 @@ class Mqtt {
107
111
  this.client = undefined;
108
112
  this._state = 'closed';
109
113
  }
114
+ /**
115
+ * Subscribes the given handler to the given topic. Returns a detachable which enables unsubscribing.
116
+ *
117
+ * While MQTT enables you to subscribe and unsubscribe to topics, it doesn't keep track of the subscriptions. That is
118
+ * when you subscribe multiple times (form different places in the code base) to a topic, it only takes one call
119
+ * to unsubscribe to effectively unsubscribe all the subscriptions.
120
+ *
121
+ * This method overcomes this limitation by assigning each subscription a unique id and keeping track of all subscriptions.
122
+ * When unsubscribing (via the retuned detachable) only the associated id of this subscription will effectively be unsubscribed.
123
+ * When all subscriptions for a specific topic are unsubscribed, only then we unsubscribe from MQTT for that topic.
124
+ *
125
+ * The returned Detachable holds the subscription id
126
+ */
110
127
  async subscribe(topic, handler) {
111
- var _a;
128
+ var _a, _b;
129
+ const id = (0, uuid_1.v4)();
112
130
  topic = topic.startsWith('/') ? topic.substring(1) : topic;
113
- // if a handler is provided, we want to register it first, such that
114
- // it will immediately be notified with the retained message upon subscription
131
+ const detach = async () => {
132
+ var _a;
133
+ detachable === null || detachable === void 0 ? void 0 : detachable.detach();
134
+ const subscriptions = this.subscriptions.get(fullTopic);
135
+ let noSubscriptions = subscriptions && subscriptions.length === 0;
136
+ if (subscriptions) {
137
+ (0, common_1.spliceFirstMatch)(subscriptions, subscription => subscription.id === id);
138
+ noSubscriptions = subscriptions.length === 0;
139
+ if (noSubscriptions) {
140
+ this.subscriptions.delete(fullTopic);
141
+ }
142
+ }
143
+ if (noSubscriptions) {
144
+ return (_a = this.client) === null || _a === void 0 ? void 0 : _a.unsubscribeAsync(fullTopic);
145
+ }
146
+ };
147
+ if (handler) {
148
+ // enabling the handler to detach itself (useful for `subscribeOnce` and `subscribeNext`)
149
+ handler.detach = () => detach();
150
+ }
115
151
  const detachable = handler ? this.on(`topic.${topic}`, handler) : common_1.Detachable.NOOP;
116
152
  const fullTopic = this.fullTopic(topic);
117
- await ((_a = this.client) === null || _a === void 0 ? void 0 : _a.subscribeAsync(fullTopic, {
118
- qos: 0,
119
- nl: true,
120
- rap: true,
121
- rh: 1,
122
- }));
153
+ const subscriptions = (_a = this.subscriptions.get(fullTopic)) !== null && _a !== void 0 ? _a : [];
154
+ if (subscriptions.length === 0) {
155
+ this.subscriptions.set(fullTopic, subscriptions);
156
+ await ((_b = this.client) === null || _b === void 0 ? void 0 : _b.subscribeAsync(fullTopic, {
157
+ qos: 0,
158
+ nl: true,
159
+ rap: true,
160
+ rh: 1,
161
+ }));
162
+ }
163
+ subscriptions.push({ id });
123
164
  return {
124
- detach: async () => {
125
- var _a;
126
- detachable.detach();
127
- return (_a = this.client) === null || _a === void 0 ? void 0 : _a.unsubscribeAsync(fullTopic);
165
+ id,
166
+ detach
167
+ };
168
+ }
169
+ async subscribeOnce(topic, handler) {
170
+ return await this.subscribe(topic, function _(value) {
171
+ _.detach();
172
+ handler(value);
173
+ });
174
+ }
175
+ async subscribeValue(topic, expectedValue, timeout) {
176
+ const future = new Future_1.Future();
177
+ const predicate = !(0, common_1.isString)(expectedValue) ? expectedValue : (value) => value === expectedValue;
178
+ if ((0, common_1.isNil)(timeout)) {
179
+ await this.subscribe(topic, function _(value) {
180
+ if (predicate(value)) {
181
+ _.detach();
182
+ future.set(value);
183
+ }
184
+ });
185
+ return future.get();
186
+ }
187
+ const controller = new AbortController();
188
+ const detachable = await this.subscribe(topic, function _(value) {
189
+ if (predicate(value)) {
190
+ (0, node_timers_1.clearTimeout)(abortTimer);
191
+ _.detach();
192
+ future.set(value);
128
193
  }
194
+ });
195
+ controller.signal.onabort = () => {
196
+ detachable === null || detachable === void 0 ? void 0 : detachable.detach();
197
+ future.error(new Error('timeout'));
198
+ };
199
+ const abortTimer = future.resolved ? undefined : setTimeout(() => controller.abort('timeout'), timeout);
200
+ return future.get();
201
+ }
202
+ async subscribeNext(topic, timeout) {
203
+ if ((0, common_1.isNil)(timeout)) {
204
+ return new Promise(resolve => {
205
+ this.subscribeOnce(topic, resolve);
206
+ });
207
+ }
208
+ const controller = new AbortController();
209
+ const future = new Future_1.Future();
210
+ const detachable = await this.subscribeOnce(topic, function _(value) {
211
+ (0, node_timers_1.clearTimeout)(abortTimer);
212
+ _.detach();
213
+ future.set(value);
214
+ });
215
+ controller.signal.onabort = () => {
216
+ detachable === null || detachable === void 0 ? void 0 : detachable.detach();
217
+ future.error(new Error('timeout'));
129
218
  };
219
+ const abortTimer = future.resolved ? undefined : setTimeout(() => controller.abort('timeout'), timeout);
220
+ return future.get();
130
221
  }
131
222
  async publish(topic, value, options) {
132
223
  var _a, _b, _c;
@@ -140,6 +231,10 @@ class Mqtt {
140
231
  this.emitter.on(event, handler);
141
232
  return { detach: () => this.emitter.off(event, handler) };
142
233
  }
234
+ once(event, handler) {
235
+ this.emitter.once(event, handler);
236
+ return { detach: () => this.emitter.off(event, handler) };
237
+ }
143
238
  stripTopic(fullTopic) {
144
239
  if (!this.baseTopic) {
145
240
  return fullTopic;
package/dist/Mqtt.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Mqtt.js","sourceRoot":"","sources":["../src/Mqtt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Mqtt.js","sourceRoot":"","sources":["../src/Mqtt.ts"],"names":[],"mappings":"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"}
package/dist/common.d.ts CHANGED
@@ -5,6 +5,7 @@ export type Detachable = {
5
5
  export type Nil = null | undefined;
6
6
  export type Optional<T> = T | undefined;
7
7
  export type AnyFunction<R = any> = (...args: any) => R;
8
+ export type Predicate<T> = (value: T) => boolean;
8
9
  export declare namespace Detachable {
9
10
  const NOOP: Detachable;
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { CurrentHorizontalTiltAngle, CurrentPosition, CurrentVerticalTiltAngle, HoldPosition, ObstructionDetected, PositionState, TargetHorizontalTiltAngle, TargetPosition, TargetVerticalTiltAngle } from './characteristic/index.js';
1
+ import { CurrentHorizontalTiltAngle, CurrentPosition, CurrentVerticalTiltAngle, HoldPosition, ObstructionDetected, PositionState, TargetHorizontalTiltAngle, TargetPosition, TargetVerticalTiltAngle } from './characteristic';
2
2
  import { MqttService } from './MqttService.js';
3
3
  export declare namespace WindowCovering {
4
4
  const TYPE: "window-covering";
@@ -1 +1 @@
1
- {"version":3,"file":"WindowCovering.d.ts","sourceRoot":"","sources":["../../src/service/WindowCovering.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,0BAA0B,EAE1B,eAAe,EAEf,wBAAwB,EAGxB,YAAY,EAEZ,mBAAmB,EAEnB,aAAa,EAEb,yBAAyB,EAEzB,cAAc,EAEd,uBAAuB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,yBAAiB,cAAc,CAAC;IAErB,MAAM,IAAI,EAAG,iBAA0B,CAAC;IAE/C,KAAY,MAAM,GAAG;QACjB,IAAI,EAAE,OAAO,IAAI,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,EACF,cAAc,GACd,OAAO,CAAC,eAAe,CAAC,GACxB,OAAO,CAAC,aAAa,CAAC,GACtB,OAAO,CAAC,YAAY,CAAC,GACrB,OAAO,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,yBAAyB,CAAC,GACxE,OAAO,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC,GACpE,OAAO,CAAC,mBAAmB,CAAC,GAC5B,WAAW,CAAC,cAAc,CAAA;KACjC,CAAA;IAEM,MAAM,MAAM,EAAE,WAAW,CAAC,OAoEhC,CAAC;CACL"}
1
+ {"version":3,"file":"WindowCovering.d.ts","sourceRoot":"","sources":["../../src/service/WindowCovering.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,0BAA0B,EAE1B,eAAe,EAEf,wBAAwB,EAGxB,YAAY,EAEZ,mBAAmB,EAEnB,aAAa,EAEb,yBAAyB,EAEzB,cAAc,EAEd,uBAAuB,EAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,yBAAiB,cAAc,CAAC;IAErB,MAAM,IAAI,EAAG,iBAA0B,CAAC;IAE/C,KAAY,MAAM,GAAG;QACjB,IAAI,EAAE,OAAO,IAAI,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,EACF,cAAc,GACd,OAAO,CAAC,eAAe,CAAC,GACxB,OAAO,CAAC,aAAa,CAAC,GACtB,OAAO,CAAC,YAAY,CAAC,GACrB,OAAO,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,yBAAyB,CAAC,GACxE,OAAO,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC,GACpE,OAAO,CAAC,mBAAmB,CAAC,GAC5B,WAAW,CAAC,cAAc,CAAA;KACjC,CAAA;IAEM,MAAM,MAAM,EAAE,WAAW,CAAC,OAsEhC,CAAC;CACL"}
@@ -2,12 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WindowCovering = void 0;
4
4
  const common_1 = require("../common");
5
- const index_js_1 = require("./characteristic/index.js");
5
+ const characteristic_1 = require("./characteristic");
6
6
  const until_js_1 = require("./until.js");
7
7
  var WindowCovering;
8
8
  (function (WindowCovering) {
9
9
  WindowCovering.TYPE = 'window-covering';
10
10
  WindowCovering.create = async (platform, mqtt, accessory, serviceConfig, primary) => {
11
+ var _a, _b;
11
12
  if (serviceConfig.type !== WindowCovering.TYPE) {
12
13
  throw new Error(`WindowCovering factory expects a '${WindowCovering.TYPE}' config`);
13
14
  }
@@ -16,9 +17,11 @@ var WindowCovering;
16
17
  if (!config.topics.targetPosition) {
17
18
  throw new Error(`Could not create '${WindowCovering.TYPE}' service [${config.name}] for device [${accessory.context.deviceId}]. missing 'targetPosition' topics`);
18
19
  }
19
- const targetPos = await (0, index_js_1.targetPosition)(platform, mqtt, accessory, service, config.topics.targetPosition, ctx);
20
- const currentPos = config.topics.currentPosition ?
21
- await (0, index_js_1.currentPosition)(platform, mqtt, accessory, service, config.topics.currentPosition, ctx) :
20
+ const targetConfig = { ...config.topics.targetPosition, reverse: (_a = config.topics.targetPosition.reverse) !== null && _a !== void 0 ? _a : config.reverse };
21
+ const targetPos = await (0, characteristic_1.targetPosition)(platform, mqtt, accessory, service, targetConfig, ctx);
22
+ const currentConfig = !config.topics.currentPosition ? undefined : { ...config.topics.currentPosition, reverse: (_b = config.topics.currentPosition.reverse) !== null && _b !== void 0 ? _b : config.reverse };
23
+ const currentPos = currentConfig ?
24
+ await (0, characteristic_1.currentPosition)(platform, mqtt, accessory, service, currentConfig, ctx) :
22
25
  defaultCurrentPosition(platform, service, ctx);
23
26
  cleanup.push(currentPos);
24
27
  if (!config.topics.targetPosition.get && config.topics.currentPosition) {
@@ -35,28 +38,28 @@ var WindowCovering;
35
38
  }
36
39
  cleanup.push(targetPos);
37
40
  if (config.topics.positionState) {
38
- cleanup.push(await (0, index_js_1.positionState)(platform, mqtt, accessory, service, config.topics.positionState, ctx));
41
+ cleanup.push(await (0, characteristic_1.positionState)(platform, mqtt, accessory, service, config.topics.positionState, ctx));
39
42
  }
40
43
  else {
41
44
  cleanup.push(setDefaultPositionState(platform, accessory, service, config, targetPos, currentPos));
42
45
  }
43
46
  if (config.topics.holdPosition) {
44
- cleanup.push(await (0, index_js_1.holdPosition)(platform, mqtt, accessory, service, config.topics.holdPosition, ctx));
47
+ cleanup.push(await (0, characteristic_1.holdPosition)(platform, mqtt, accessory, service, config.topics.holdPosition, ctx));
45
48
  }
46
49
  if (config.topics.currentHorizontalTiltAngle) {
47
- cleanup.push(await (0, index_js_1.currentHorizontalTiltAngle)(platform, mqtt, accessory, service, config.topics.currentHorizontalTiltAngle, ctx));
50
+ cleanup.push(await (0, characteristic_1.currentHorizontalTiltAngle)(platform, mqtt, accessory, service, config.topics.currentHorizontalTiltAngle, ctx));
48
51
  }
49
52
  if (config.topics.targetHorizontalTiltAngle) {
50
- cleanup.push(await (0, index_js_1.targetHorizontalTiltAngle)(platform, mqtt, accessory, service, config.topics.targetHorizontalTiltAngle, ctx));
53
+ cleanup.push(await (0, characteristic_1.targetHorizontalTiltAngle)(platform, mqtt, accessory, service, config.topics.targetHorizontalTiltAngle, ctx));
51
54
  }
52
55
  if (config.topics.currentVerticalTiltAngle) {
53
- cleanup.push(await (0, index_js_1.currentVerticalTiltAngle)(platform, mqtt, accessory, service, config.topics.currentVerticalTiltAngle, ctx));
56
+ cleanup.push(await (0, characteristic_1.currentVerticalTiltAngle)(platform, mqtt, accessory, service, config.topics.currentVerticalTiltAngle, ctx));
54
57
  }
55
58
  if (config.topics.targetVerticalTiltAngle) {
56
- cleanup.push(await (0, index_js_1.targetVerticalTiltAngle)(platform, mqtt, accessory, service, config.topics.targetVerticalTiltAngle, ctx));
59
+ cleanup.push(await (0, characteristic_1.targetVerticalTiltAngle)(platform, mqtt, accessory, service, config.topics.targetVerticalTiltAngle, ctx));
57
60
  }
58
61
  if (config.topics.obstructionDetected) {
59
- cleanup.push(await (0, index_js_1.obstructionDetected)(platform, mqtt, accessory, service, config.topics.obstructionDetected, ctx));
62
+ cleanup.push(await (0, characteristic_1.obstructionDetected)(platform, mqtt, accessory, service, config.topics.obstructionDetected, ctx));
60
63
  }
61
64
  return {
62
65
  config,
@@ -69,12 +72,12 @@ var WindowCovering;
69
72
  const defaultCurrentPosition = (platform, service, serviceCtx) => {
70
73
  var _a;
71
74
  const currentPos = ((_a = service.getCharacteristic(platform.Characteristic.CurrentPosition)) !== null && _a !== void 0 ? _a : service.addCharacteristic(platform.Characteristic.CurrentPosition));
72
- const targetSetListener = (value, ctx) => {
75
+ const targetSetListener = (value) => {
73
76
  currentPos.setValue(value);
74
77
  };
75
78
  serviceCtx.emitter.on('targetPosition.set', targetSetListener);
76
79
  const detachable = { detach: () => serviceCtx.emitter.off('targetPosition.set', targetSetListener) };
77
- return index_js_1.DetachableCharacteristic.mixin(currentPos, detachable);
80
+ return characteristic_1.DetachableCharacteristic.mixin(currentPos, detachable);
78
81
  };
79
82
  const setDefaultPositionState = (platform, accessory, service, config, target, current) => {
80
83
  var _a, _b;