@uboness/homebridge-mqtt 0.2.4 → 0.2.5
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 +7 -0
- package/README.md +108 -1
- package/dist/Future.d.ts +12 -0
- package/dist/Future.d.ts.map +1 -0
- package/dist/Future.js +39 -0
- package/dist/Future.js.map +1 -0
- package/dist/Mqtt.d.ts +24 -2
- package/dist/Mqtt.d.ts.map +1 -1
- package/dist/Mqtt.js +108 -13
- package/dist/Mqtt.js.map +1 -1
- package/dist/common.d.ts +1 -0
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js.map +1 -1
- package/dist/service/WindowCovering.d.ts +1 -1
- package/dist/service/WindowCovering.d.ts.map +1 -1
- package/dist/service/WindowCovering.js +16 -13
- package/dist/service/WindowCovering.js.map +1 -1
- package/dist/service/characteristic/action/Action.d.ts +21 -0
- package/dist/service/characteristic/action/Action.d.ts.map +1 -0
- package/dist/service/characteristic/action/Action.js +39 -0
- package/dist/service/characteristic/action/Action.js.map +1 -0
- package/dist/service/characteristic/action/CommonAction.d.ts +10 -0
- package/dist/service/characteristic/action/CommonAction.d.ts.map +1 -0
- package/dist/service/characteristic/action/CommonAction.js +15 -0
- package/dist/service/characteristic/action/CommonAction.js.map +1 -0
- package/dist/service/characteristic/action/MqttAction.d.ts +17 -0
- package/dist/service/characteristic/action/MqttAction.d.ts.map +1 -0
- package/dist/service/characteristic/action/MqttAction.js +23 -0
- package/dist/service/characteristic/action/MqttAction.js.map +1 -0
- package/dist/service/characteristic/action/index.d.ts +1 -0
- package/dist/service/characteristic/action/index.d.ts.map +1 -0
- package/dist/service/characteristic/action/index.js +2 -0
- package/dist/service/characteristic/action/index.js.map +1 -0
- package/dist/service/characteristic/archetype/BooleanValue.d.ts +2 -0
- package/dist/service/characteristic/archetype/BooleanValue.d.ts.map +1 -1
- package/dist/service/characteristic/archetype/BooleanValue.js +8 -2
- package/dist/service/characteristic/archetype/BooleanValue.js.map +1 -1
- package/dist/service/characteristic/archetype/EnumValue.d.ts +2 -0
- package/dist/service/characteristic/archetype/EnumValue.d.ts.map +1 -1
- package/dist/service/characteristic/archetype/EnumValue.js +8 -2
- package/dist/service/characteristic/archetype/EnumValue.js.map +1 -1
- package/dist/service/characteristic/archetype/NumericValue.d.ts +2 -0
- package/dist/service/characteristic/archetype/NumericValue.d.ts.map +1 -1
- package/dist/service/characteristic/archetype/NumericValue.js +8 -2
- package/dist/service/characteristic/archetype/NumericValue.js.map +1 -1
- package/dist/service/characteristic/archetype/Signal.d.ts.map +1 -1
- package/dist/service/characteristic/archetype/Signal.js +0 -2
- package/dist/service/characteristic/archetype/Signal.js.map +1 -1
- package/dist/service/characteristic/archetype/ZeroOneValue.d.ts +2 -0
- package/dist/service/characteristic/archetype/ZeroOneValue.d.ts.map +1 -1
- package/dist/service/characteristic/archetype/ZeroOneValue.js +8 -2
- package/dist/service/characteristic/archetype/ZeroOneValue.js.map +1 -1
- package/dist/service/characteristic/stickyOn.js +5 -5
- package/dist/service/characteristic/stickyOn.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
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.5](https://github.com/uboness/{{name}}/compare/v0.2.4...v0.2.5) (2025-09-16)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* added the notion of "actions" and `preSet` for "settable" characteristics. ([df92575](https://github.com/uboness/{{name}}/commit/df925750b351031ac811dd906075a19cc3bd038e))
|
|
11
|
+
|
|
5
12
|
## [0.2.4](https://github.com/uboness/{{name}}/compare/v0.2.3...v0.2.4) (2025-09-13)
|
|
6
13
|
|
|
7
14
|
|
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
|
|
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
|
package/dist/Future.d.ts
ADDED
|
@@ -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
|
-
|
|
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
|
}
|
package/dist/Mqtt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mqtt.d.ts","sourceRoot":"","sources":["../src/Mqtt.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
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
|
-
|
|
114
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,gDAAwB;AACxB,
|
|
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
|
}
|
package/dist/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
|
package/dist/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":";;;
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
20
|
-
const
|
|
21
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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;
|