homebridge-dummy 1.1.0-beta.0 → 1.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -14
- package/README.md +35 -2
- package/config.schema.json +149 -69
- package/dist/accessory/base.d.ts +3 -2
- package/dist/accessory/base.js +12 -16
- package/dist/accessory/base.js.map +1 -1
- package/dist/accessory/lock.d.ts +2 -1
- package/dist/accessory/lock.js +12 -5
- package/dist/accessory/lock.js.map +1 -1
- package/dist/accessory/onoff/onoff.d.ts +2 -1
- package/dist/accessory/onoff/onoff.js +10 -3
- package/dist/accessory/onoff/onoff.js.map +1 -1
- package/dist/accessory/position/position.d.ts +2 -1
- package/dist/accessory/position/position.js +11 -4
- package/dist/accessory/position/position.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +1 -1
- package/dist/i18n/en.d.ts +14 -1
- package/dist/i18n/en.js +19 -6
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/i18n.d.ts +14 -1
- package/dist/i18n/template.d.ts +14 -1
- package/dist/i18n/zz.d.ts +14 -1
- package/dist/model/timer.d.ts +8 -4
- package/dist/model/timer.js +27 -24
- package/dist/model/timer.js.map +1 -1
- package/dist/model/trigger.d.ts +14 -0
- package/dist/model/trigger.js +73 -0
- package/dist/model/trigger.js.map +1 -0
- package/dist/model/types.d.ts +12 -0
- package/dist/model/types.js +5 -0
- package/dist/model/types.js.map +1 -1
- package/dist/tools/time.d.ts +5 -0
- package/dist/tools/time.js +15 -0
- package/dist/tools/time.js.map +1 -0
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
If upgrading from v0.9.2 or earlier, automations and scenes using Homebridge Dummy accessories will need to be reconfigured.
|
|
4
|
-
|
|
5
|
-
## ⚠️ IMPORTANT ⚠️
|
|
6
|
-
|
|
7
|
-
After installing v1.0, you must **RESTART HOMEBRIDGE SERVICE & UI** (not just *RESTART HOMEBRIDGE*) before continuing or you will experience issues with Homebridge Dummy configuration.
|
|
1
|
+
# Change Log
|
|
8
2
|
|
|
9
|
-
|
|
3
|
+
All notable changes to homebridge-dummy will be documented in this file.
|
|
10
4
|
|
|
11
|
-
|
|
5
|
+
## 1.1.0-beta.1 (2025-07-29)
|
|
12
6
|
|
|
13
|
-
|
|
7
|
+
### ‼️ WARNING — Read this if upgrading from v0.9.2 or earlier…
|
|
14
8
|
|
|
15
|
-
|
|
9
|
+
Automations and scenes using Homebridge Dummy accessories will need to be reconfigured. After upgrading, you must **RESTART HOMEBRIDGE SERVICE & UI** (not just *RESTART HOMEBRIDGE*). After restarting, open the Homebridge Dummy plugin settings to run the accessory migration helper. Full details [here](https://github.com/mpatfield/homebridge-dummy?tab=readme-ov-file#v10-migration).
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+
---
|
|
18
12
|
|
|
19
13
|
### Added
|
|
20
|
-
|
|
21
14
|
- Groups (Beta) - Items sharing the same group name will be collected together in the Home app UI
|
|
22
|
-
- ⚠️ Adding/removing/changing the group name will require you to reconfigure any HomeKit scenes or automations
|
|
15
|
+
- ⚠️ Adding/removing/changing the group name for an accessory will require you to reconfigure any HomeKit scenes or automations
|
|
16
|
+
- Auto-Trigger feature to invoke accessory at a specified interval or times
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Reorganized plugin config UI and renamed "Timer" to "Auto-Reset"
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- Timers over 1 hour were logging incorrectly ([#143](https://github.com/mpatfield/homebridge-dummy/issues/143))
|
|
23
23
|
|
|
24
24
|
## 1.0.0 (2025-07-23)
|
|
25
25
|
|
package/README.md
CHANGED
|
@@ -92,6 +92,13 @@ Using the Homebridge Config UI is the easiest way to set up this plugin. However
|
|
|
92
92
|
"units": "SECONDS | MINUTES | HOURS",
|
|
93
93
|
"random": true | false
|
|
94
94
|
},
|
|
95
|
+
"trigger": {
|
|
96
|
+
"type": "INTERVAL" | "CRON",
|
|
97
|
+
"interval": number,
|
|
98
|
+
"units": "SECONDS | MINUTES | HOURS",
|
|
99
|
+
"random": true | false,
|
|
100
|
+
"cron": "string"
|
|
101
|
+
},
|
|
95
102
|
"sensor": "CarbonDioxideSensor | CarbonMonoxideSensor | ContactSensor | LeakSensor | MotionSensor | OccupancySensor | SmokeSensor",
|
|
96
103
|
"defaultOn": true | false,
|
|
97
104
|
"defaultBrightness": 0-100,
|
|
@@ -124,6 +131,13 @@ All fields are optional unless noted with an asterisk (*)
|
|
|
124
131
|
- `timer.units` — The units to use for delay above (`SECONDS`, `MINUTES`, or `HOURS`). *Required if delay is set.
|
|
125
132
|
- `timer.random` — If true, the delay will be randomized with a maximum value of `timer.delay`
|
|
126
133
|
|
|
134
|
+
- `trigger.type` — Automatically set the accessory to it's non-default value
|
|
135
|
+
- `trigger.interval` — Trigger the accessory after this many seconds/minutes/hours. *Required if `trigger.type` = `INTERVAL`
|
|
136
|
+
- `trigger.units` — The units to use for the interval (`SECONDS`, `MINUTES`, or `HOURS`) *Required if `trigger.type` = `INTERVAL`
|
|
137
|
+
- `trigger.random` — If true, the interval will be randomized with a maximum value of `trigger.interval`
|
|
138
|
+
- `trigger.cron` — The cron string for triggering the accessory. *Required if `trigger.type` = `CRON`
|
|
139
|
+
- See [crontab.guru](http://crontab.guru) for help
|
|
140
|
+
|
|
127
141
|
- `sensor` - Optionally attach a sensor that mirrors the state of the parent accessory
|
|
128
142
|
- Only works with `Lightbulb`, `Outlet`, and `Switch`
|
|
129
143
|
- Valid values are `CarbonDioxideSensor`, `CarbonMonoxideSensor`, `ContactSensor`, `LeakSensor`, `MotionSensor`, `OccupancySensor`, or `SmokeSensor`
|
|
@@ -142,7 +156,7 @@ All fields are optional unless noted with an asterisk (*)
|
|
|
142
156
|
- `lockCommand` - Arbitraty command to execute when lock mechanism is locked
|
|
143
157
|
- `unlockCommand` - Arbitraty command to execute when lock mechanism is unlocked
|
|
144
158
|
|
|
145
|
-
- `resetOnRestart` _ If true,
|
|
159
|
+
- `resetOnRestart` _ If true, accessory will return to default state when Homebridge restarts
|
|
146
160
|
|
|
147
161
|
- `disableLogging` — If true, state changes will not be logged
|
|
148
162
|
|
|
@@ -273,10 +287,29 @@ All fields are optional unless noted with an asterisk (*)
|
|
|
273
287
|
}
|
|
274
288
|
```
|
|
275
289
|
|
|
290
|
+
### Hourly Trigger Switch
|
|
291
|
+
```json
|
|
292
|
+
{
|
|
293
|
+
"name": "Hourly",
|
|
294
|
+
"type": "Switch",
|
|
295
|
+
"timer": {
|
|
296
|
+
"delay": 1,
|
|
297
|
+
"units": "SECONDS"
|
|
298
|
+
},
|
|
299
|
+
"trigger": {
|
|
300
|
+
"type": "INTERVAL",
|
|
301
|
+
"interval": 1,
|
|
302
|
+
"units": "HOURS"
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
276
307
|
## Credits
|
|
277
308
|
|
|
278
|
-
Special thanks to [@nfarina](https://github.com/nfarina) for creating the original version of this plugin and maintaining it for almost 10 (!!!) years
|
|
309
|
+
Special thanks to [@nfarina](https://github.com/sponsors/nfarina) for creating the original version of this plugin and maintaining it for almost 10 (!!!) years
|
|
279
310
|
|
|
280
311
|
[Keryan Belahcene](https://www.instagram.com/keryan.me) for creating the [Flume](https://github.com/homebridge-plugins/homebridge-flume) banner image which was adapted for use with this plugin
|
|
281
312
|
|
|
313
|
+
Auto-Trigger feature inspired by [Homebridge Schedule](https://github.com/kbrashears5/typescript-homebridge-schedule) by [@kbrashears5](https://github.com/sponsors/kbrashears5)
|
|
314
|
+
|
|
282
315
|
And to the amazing creators/contributors of [Homebridge](https://homebridge.io) who made this plugin possible!
|
package/config.schema.json
CHANGED
|
@@ -27,6 +27,40 @@
|
|
|
27
27
|
"description": "${config.description.random}"
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
},
|
|
31
|
+
"trigger": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"properties": {
|
|
34
|
+
"type": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"title": "${config.title.type}",
|
|
37
|
+
"enum": [ "INTERVAL", "CRON"],
|
|
38
|
+
"enumNames": ["${config.enumNames.interval}", "${config.enumNames.cron}"]
|
|
39
|
+
},
|
|
40
|
+
"interval": {
|
|
41
|
+
"type": "integer",
|
|
42
|
+
"title": "${config.title.interval}",
|
|
43
|
+
"minimum": 1
|
|
44
|
+
},
|
|
45
|
+
"units": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"title": "${config.title.units}",
|
|
48
|
+
"enum": [ "SECONDS", "MINUTES", "HOURS"],
|
|
49
|
+
"enumNames": ["${config.enumNames.seconds}", "${config.enumNames.minutes}", "${config.enumNames.hours}"]
|
|
50
|
+
},
|
|
51
|
+
"random": {
|
|
52
|
+
"type": "boolean",
|
|
53
|
+
"title": "${config.title.random}",
|
|
54
|
+
"description": "${config.description.random}"
|
|
55
|
+
},
|
|
56
|
+
"cron": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"title": "${config.title.cron}",
|
|
59
|
+
"description": "${config.description.cron}",
|
|
60
|
+
"placeholder": "* * * * * *",
|
|
61
|
+
"minimum": 1
|
|
62
|
+
}
|
|
63
|
+
}
|
|
30
64
|
}
|
|
31
65
|
},
|
|
32
66
|
"properties": {
|
|
@@ -58,6 +92,7 @@
|
|
|
58
92
|
"title": "${config.title.groupName}"
|
|
59
93
|
},
|
|
60
94
|
"timer": { "$ref": "#/definitions/timer" },
|
|
95
|
+
"trigger": { "$ref": "#/definitions/trigger" },
|
|
61
96
|
"sensor": {
|
|
62
97
|
"type": "string",
|
|
63
98
|
"title": "${config.title.sensor}",
|
|
@@ -157,74 +192,7 @@
|
|
|
157
192
|
},
|
|
158
193
|
{
|
|
159
194
|
"type": "fieldset",
|
|
160
|
-
"
|
|
161
|
-
"description": "${config.description.timer}",
|
|
162
|
-
"condition": {
|
|
163
|
-
"functionBody": "return model.accessories?.[arguments[1]]?.type !== undefined;"
|
|
164
|
-
},
|
|
165
|
-
"items": [
|
|
166
|
-
{
|
|
167
|
-
"type": "div",
|
|
168
|
-
"displayFlex": true,
|
|
169
|
-
"flex-direction": "row",
|
|
170
|
-
"items": [
|
|
171
|
-
{
|
|
172
|
-
"key": "accessories[].timer.delay",
|
|
173
|
-
"flex": "1 1 0"
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
"key": "accessories[].timer.units",
|
|
177
|
-
"flex": "1 1 0"
|
|
178
|
-
}
|
|
179
|
-
]
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
"key": "accessories[].timer.random",
|
|
183
|
-
"condition": {
|
|
184
|
-
"functionBody": "return model.accessories?.[arguments[1]]?.timer?.delay !== undefined;"
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
]
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
"type": "fieldset",
|
|
191
|
-
"title": "${config.title.commands}",
|
|
192
|
-
"description": "${config.description.commands}",
|
|
193
|
-
"condition": {
|
|
194
|
-
"functionBody": "return ['Lightbulb','Outlet','Switch'].includes(model.accessories?.[arguments[1]]?.type);"
|
|
195
|
-
},
|
|
196
|
-
"items": [
|
|
197
|
-
"accessories[].commandOn",
|
|
198
|
-
"accessories[].commandOff"
|
|
199
|
-
]
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
"type": "fieldset",
|
|
203
|
-
"title": "${config.title.commands}",
|
|
204
|
-
"description": "${config.description.commands}",
|
|
205
|
-
"condition": {
|
|
206
|
-
"functionBody": "return ['LockMechanism'].includes(model.accessories?.[arguments[1]]?.type);"
|
|
207
|
-
},
|
|
208
|
-
"items": [
|
|
209
|
-
"accessories[].commandLock",
|
|
210
|
-
"accessories[].commandUnlock"
|
|
211
|
-
]
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
"type": "fieldset",
|
|
215
|
-
"title": "${config.title.commands}",
|
|
216
|
-
"description": "${config.description.commands}",
|
|
217
|
-
"condition": {
|
|
218
|
-
"functionBody": "return ['Door', 'Window', 'WindowCovering'].includes(model.accessories?.[arguments[1]]?.type);"
|
|
219
|
-
},
|
|
220
|
-
"items": [
|
|
221
|
-
"accessories[].commandOpen",
|
|
222
|
-
"accessories[].commandClose"
|
|
223
|
-
]
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
"type": "fieldset",
|
|
227
|
-
"title": "${config.title.options}",
|
|
195
|
+
"notitle": true,
|
|
228
196
|
"condition": {
|
|
229
197
|
"functionBody": "return model.accessories?.[arguments[1]]?.type !== undefined;"
|
|
230
198
|
},
|
|
@@ -297,10 +265,122 @@
|
|
|
297
265
|
"condition": {
|
|
298
266
|
"functionBody": "return model.accessories?.[arguments[1]]?.timer?.delay === undefined;"
|
|
299
267
|
}
|
|
300
|
-
}
|
|
268
|
+
}
|
|
301
269
|
]
|
|
302
270
|
}
|
|
303
271
|
]
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"type": "fieldset",
|
|
275
|
+
"title": "${config.title.trigger}",
|
|
276
|
+
"description": "${config.description.trigger}",
|
|
277
|
+
"condition": {
|
|
278
|
+
"functionBody": "return model.accessories?.[arguments[1]]?.type !== undefined;"
|
|
279
|
+
},
|
|
280
|
+
"items": [
|
|
281
|
+
{
|
|
282
|
+
"type": "div",
|
|
283
|
+
"displayFlex": true,
|
|
284
|
+
"flex-direction": "row",
|
|
285
|
+
"items": [
|
|
286
|
+
{
|
|
287
|
+
"key": "accessories[].trigger.type",
|
|
288
|
+
"flex": "1 1 0"
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"key": "accessories[].trigger.interval",
|
|
292
|
+
"flex": "1 1 0",
|
|
293
|
+
"condition": {
|
|
294
|
+
"functionBody": "return model.accessories?.[arguments[1]]?.trigger?.type === 'INTERVAL';"
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"key": "accessories[].trigger.units",
|
|
299
|
+
"flex": "1 1 0",
|
|
300
|
+
"condition": {
|
|
301
|
+
"functionBody": "return model.accessories?.[arguments[1]]?.trigger?.type === 'INTERVAL';"
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
]
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"key": "accessories[].trigger.cron",
|
|
308
|
+
"condition": {
|
|
309
|
+
"functionBody": "return model.accessories?.[arguments[1]]?.trigger?.type === 'CRON';"
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"key": "accessories[].trigger.random",
|
|
314
|
+
"condition": {
|
|
315
|
+
"functionBody": "return model.accessories?.[arguments[1]]?.trigger?.type === 'INTERVAL';"
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
]
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"type": "fieldset",
|
|
322
|
+
"title": "${config.title.timer}",
|
|
323
|
+
"description": "${config.description.timer}",
|
|
324
|
+
"condition": {
|
|
325
|
+
"functionBody": "return model.accessories?.[arguments[1]]?.type !== undefined;"
|
|
326
|
+
},
|
|
327
|
+
"items": [
|
|
328
|
+
{
|
|
329
|
+
"type": "div",
|
|
330
|
+
"displayFlex": true,
|
|
331
|
+
"flex-direction": "row",
|
|
332
|
+
"items": [
|
|
333
|
+
{
|
|
334
|
+
"key": "accessories[].timer.delay",
|
|
335
|
+
"flex": "1 1 0"
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"key": "accessories[].timer.units",
|
|
339
|
+
"flex": "1 1 0"
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"flex": "1 1 0"
|
|
343
|
+
}
|
|
344
|
+
]
|
|
345
|
+
},
|
|
346
|
+
"accessories[].timer.random"
|
|
347
|
+
]
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"type": "fieldset",
|
|
351
|
+
"title": "${config.title.commands}",
|
|
352
|
+
"description": "${config.description.commands}",
|
|
353
|
+
"condition": {
|
|
354
|
+
"functionBody": "return ['Lightbulb','Outlet','Switch'].includes(model.accessories?.[arguments[1]]?.type);"
|
|
355
|
+
},
|
|
356
|
+
"items": [
|
|
357
|
+
"accessories[].commandOn",
|
|
358
|
+
"accessories[].commandOff"
|
|
359
|
+
]
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"type": "fieldset",
|
|
363
|
+
"title": "${config.title.commands}",
|
|
364
|
+
"description": "${config.description.commands}",
|
|
365
|
+
"condition": {
|
|
366
|
+
"functionBody": "return ['LockMechanism'].includes(model.accessories?.[arguments[1]]?.type);"
|
|
367
|
+
},
|
|
368
|
+
"items": [
|
|
369
|
+
"accessories[].commandLock",
|
|
370
|
+
"accessories[].commandUnlock"
|
|
371
|
+
]
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"type": "fieldset",
|
|
375
|
+
"title": "${config.title.commands}",
|
|
376
|
+
"description": "${config.description.commands}",
|
|
377
|
+
"condition": {
|
|
378
|
+
"functionBody": "return ['Door', 'Window', 'WindowCovering'].includes(model.accessories?.[arguments[1]]?.type);"
|
|
379
|
+
},
|
|
380
|
+
"items": [
|
|
381
|
+
"accessories[].commandOpen",
|
|
382
|
+
"accessories[].commandClose"
|
|
383
|
+
]
|
|
304
384
|
}
|
|
305
385
|
]
|
|
306
386
|
}
|
package/dist/accessory/base.d.ts
CHANGED
|
@@ -13,14 +13,15 @@ export declare abstract class DummyAccessory<C extends DummyConfig> {
|
|
|
13
13
|
private readonly timer;
|
|
14
14
|
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: C, log: Log, persistPath: string, isGrouped: boolean);
|
|
15
15
|
protected abstract getAccessoryType(): AccessoryType;
|
|
16
|
+
protected abstract trigger(): Promise<void>;
|
|
17
|
+
protected abstract reset(): Promise<void>;
|
|
16
18
|
get subtype(): string | undefined;
|
|
17
19
|
teardown(): void;
|
|
18
20
|
protected get identifier(): string;
|
|
19
21
|
protected get isStateful(): boolean;
|
|
20
22
|
protected get defaultStateStorageKey(): string;
|
|
21
|
-
protected startTimer(
|
|
23
|
+
protected startTimer(): void;
|
|
22
24
|
protected cancelTimer(): void;
|
|
23
25
|
protected executeCommand(command: string): void;
|
|
24
|
-
protected assert(...keys: (keyof C)[]): boolean;
|
|
25
26
|
protected logIfDesired(message: string, ...parameters: string[]): void;
|
|
26
27
|
}
|
package/dist/accessory/base.js
CHANGED
|
@@ -3,8 +3,8 @@ import { PLATFORM_NAME, PLUGIN_ALIAS } from '../homebridge/settings.js';
|
|
|
3
3
|
import { strings } from '../i18n/i18n.js';
|
|
4
4
|
import { STORAGE_KEY_SUFFIX_DEFAULT_STATE } from '../tools/storage.js';
|
|
5
5
|
import { Timer } from '../model/timer.js';
|
|
6
|
-
import { assert } from '../tools/validation.js';
|
|
7
6
|
import getVersion from '../tools/version.js';
|
|
7
|
+
import { Trigger } from '../model/trigger.js';
|
|
8
8
|
export class DummyAccessory {
|
|
9
9
|
Service;
|
|
10
10
|
Characteristic;
|
|
@@ -16,7 +16,7 @@ export class DummyAccessory {
|
|
|
16
16
|
return config.id ?? `${PLATFORM_NAME}:${config.type}:${config.name.replace(/\s+/g, '')}`;
|
|
17
17
|
}
|
|
18
18
|
accessoryService;
|
|
19
|
-
timer;
|
|
19
|
+
timer = undefined;
|
|
20
20
|
constructor(Service, Characteristic, accessory, config, log, persistPath, isGrouped) {
|
|
21
21
|
this.Service = Service;
|
|
22
22
|
this.Characteristic = Characteristic;
|
|
@@ -24,7 +24,12 @@ export class DummyAccessory {
|
|
|
24
24
|
this.config = config;
|
|
25
25
|
this.log = log;
|
|
26
26
|
this.persistPath = persistPath;
|
|
27
|
-
|
|
27
|
+
if (config.timer) {
|
|
28
|
+
this.timer = Timer.new(config.timer, config.name, log, config.disableLogging === true);
|
|
29
|
+
}
|
|
30
|
+
if (config.trigger) {
|
|
31
|
+
new Trigger(config.trigger, config.name, log, config.disableLogging === true, this.trigger.bind(this));
|
|
32
|
+
}
|
|
28
33
|
const serviceInstance = Service[this.getAccessoryType()];
|
|
29
34
|
if (isGrouped) {
|
|
30
35
|
let accessoryService = accessory.getServiceById(serviceInstance, this.identifier);
|
|
@@ -48,7 +53,7 @@ export class DummyAccessory {
|
|
|
48
53
|
return this.accessoryService.subtype;
|
|
49
54
|
}
|
|
50
55
|
teardown() {
|
|
51
|
-
this.timer
|
|
56
|
+
this.timer?.teardown();
|
|
52
57
|
}
|
|
53
58
|
get identifier() {
|
|
54
59
|
return DummyAccessory.identifier(this.config);
|
|
@@ -59,17 +64,11 @@ export class DummyAccessory {
|
|
|
59
64
|
get defaultStateStorageKey() {
|
|
60
65
|
return `${this.identifier}:${STORAGE_KEY_SUFFIX_DEFAULT_STATE}`;
|
|
61
66
|
}
|
|
62
|
-
startTimer(
|
|
63
|
-
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (!assert(this.log, this.config.name, this.config.timer, 'units')) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
this.timer.start(this.config.timer, callback);
|
|
67
|
+
startTimer() {
|
|
68
|
+
this.timer?.start(this.reset.bind(this));
|
|
70
69
|
}
|
|
71
70
|
cancelTimer() {
|
|
72
|
-
this.timer
|
|
71
|
+
this.timer?.cancel();
|
|
73
72
|
}
|
|
74
73
|
executeCommand(command) {
|
|
75
74
|
exec(command, (_error, stdout, stderr) => {
|
|
@@ -81,9 +80,6 @@ export class DummyAccessory {
|
|
|
81
80
|
}
|
|
82
81
|
});
|
|
83
82
|
}
|
|
84
|
-
assert(...keys) {
|
|
85
|
-
return assert(this.log, this.config.name, this.config, ...keys);
|
|
86
|
-
}
|
|
87
83
|
logIfDesired(message, ...parameters) {
|
|
88
84
|
if (this.config.disableLogging) {
|
|
89
85
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/accessory/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAK1C,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/accessory/base.ts"],"names":[],"mappings":"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"}
|
package/dist/accessory/lock.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare class LockAccessory extends DummyAccessory<LockConfig> {
|
|
|
10
10
|
private get defaultLockState();
|
|
11
11
|
protected getState(): Promise<CharacteristicValue>;
|
|
12
12
|
protected setState(value: CharacteristicValue): Promise<void>;
|
|
13
|
-
|
|
13
|
+
trigger(): Promise<void>;
|
|
14
|
+
reset(): Promise<void>;
|
|
14
15
|
protected logLockState(value: CharacteristicValue): void;
|
|
15
16
|
}
|
package/dist/accessory/lock.js
CHANGED
|
@@ -47,7 +47,7 @@ export class LockAccessory extends DummyAccessory {
|
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
49
49
|
if (this.state !== this.defaultLockState) {
|
|
50
|
-
this.startTimer(
|
|
50
|
+
this.startTimer();
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
53
|
this.cancelTimer();
|
|
@@ -56,10 +56,17 @@ export class LockAccessory extends DummyAccessory {
|
|
|
56
56
|
this.accessoryService.updateCharacteristic(this.Characteristic.LockTargetState, this.state);
|
|
57
57
|
this.accessoryService.updateCharacteristic(this.Characteristic.LockCurrentState, this.state);
|
|
58
58
|
}
|
|
59
|
-
async
|
|
60
|
-
|
|
61
|
-
this.
|
|
62
|
-
|
|
59
|
+
async trigger() {
|
|
60
|
+
if (this.state === this.defaultLockState) {
|
|
61
|
+
const opposite = this.state === this.Characteristic.LockTargetState.SECURED ?
|
|
62
|
+
this.Characteristic.LockTargetState.UNSECURED : this.Characteristic.LockTargetState.SECURED;
|
|
63
|
+
await this.setState(opposite);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async reset() {
|
|
67
|
+
if (this.state !== this.defaultLockState) {
|
|
68
|
+
await this.setState(this.defaultLockState);
|
|
69
|
+
}
|
|
63
70
|
}
|
|
64
71
|
logLockState(value) {
|
|
65
72
|
const message = value === this.Characteristic.LockTargetState.SECURED ?
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/accessory/lock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAsB,gBAAgB,EAA2B,MAAM,mBAAmB,CAAC;AAGjH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,OAAO,aAAc,SAAQ,cAA0B;IAEnD,KAAK,CAAsB;IAEnC,YACE,OAAoB,EACpB,cAAkC,EAClC,SAA4B,EAC5B,MAAkB,EAClB,GAAQ,EACR,WAAmB,EACnB,SAAkB;QAElB,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAE/E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAEnC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,cAAc,CAAC,eAAe,CAAC;aACpE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC/B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,CAAC;aACrE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,eAAe;QAE3B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;QAC7F,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5F,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/F,CAAC;IAES,gBAAgB;QACxB,OAAO,aAAa,CAAC,aAAa,CAAC;IACrC,CAAC;IAED,IAAY,gBAAgB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACjE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC;IAChG,CAAC;IAES,KAAK,CAAC,QAAQ;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAES,KAAK,CAAC,QAAQ,CAAC,KAA0B;QAEjD,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAEzB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;gBACrF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC/C,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;gBAChG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzC,IAAI,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/accessory/lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export declare abstract class OnOffAccessory<C extends OnOffConfig = OnOffConfig
|
|
|
10
10
|
private get defaultOn();
|
|
11
11
|
protected getOn(): Promise<CharacteristicValue>;
|
|
12
12
|
protected setOn(value: CharacteristicValue): Promise<void>;
|
|
13
|
-
|
|
13
|
+
trigger(): Promise<void>;
|
|
14
|
+
reset(): Promise<void>;
|
|
14
15
|
protected logOnState(value: CharacteristicValue): void;
|
|
15
16
|
}
|
|
@@ -42,7 +42,7 @@ export class OnOffAccessory extends DummyAccessory {
|
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
44
44
|
if (this.on !== this.defaultOn) {
|
|
45
|
-
this.startTimer(
|
|
45
|
+
this.startTimer();
|
|
46
46
|
}
|
|
47
47
|
else {
|
|
48
48
|
this.cancelTimer();
|
|
@@ -53,8 +53,15 @@ export class OnOffAccessory extends DummyAccessory {
|
|
|
53
53
|
}
|
|
54
54
|
this.accessoryService.updateCharacteristic(this.Characteristic.On, this.on);
|
|
55
55
|
}
|
|
56
|
-
async
|
|
57
|
-
|
|
56
|
+
async trigger() {
|
|
57
|
+
if (this.on === this.defaultOn) {
|
|
58
|
+
await this.setOn(!this.on);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async reset() {
|
|
62
|
+
if (this.on !== this.defaultOn) {
|
|
63
|
+
await this.setOn(this.defaultOn);
|
|
64
|
+
}
|
|
58
65
|
}
|
|
59
66
|
logOnState(value) {
|
|
60
67
|
this.logIfDesired(value ? strings.accessory.onOff.stateOn : strings.accessory.onOff.stateOff, this.config.name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onoff.js","sourceRoot":"","sources":["../../../src/accessory/onoff/onoff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK7C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,OAAgB,cAAoD,SAAQ,cAAiB;IAEzF,EAAE,CAAsB;IAExB,MAAM,CAAmB;IAEjC,YACE,OAAoB,EACpB,cAAkC,EAClC,SAA4B,EAC5B,MAAS,EACT,GAAQ,EACR,WAAmB,EACnB,SAAkB;QAElB,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAE/E,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAEzB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEzI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;aACvD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,YAAY;QAExB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;QACvF,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9C,CAAC;IAES,KAAK,CAAC,KAAK;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAES,KAAK,CAAC,KAAK,CAAC,KAA0B;QAE9C,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAEvB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC;gBACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;QAEhB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC/B,IAAI,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"onoff.js","sourceRoot":"","sources":["../../../src/accessory/onoff/onoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export declare abstract class PositionAccessory<C extends PositionConfig = Posit
|
|
|
10
10
|
protected getState(): Promise<CharacteristicValue>;
|
|
11
11
|
protected getPosition(): Promise<CharacteristicValue>;
|
|
12
12
|
protected setPosition(value: CharacteristicValue): Promise<void>;
|
|
13
|
-
|
|
13
|
+
trigger(): Promise<void>;
|
|
14
|
+
reset(): Promise<void>;
|
|
14
15
|
protected logPosition(value: CharacteristicValue): void;
|
|
15
16
|
}
|
|
@@ -51,7 +51,7 @@ export class PositionAccessory extends DummyAccessory {
|
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
53
|
if (this.position !== this.defaultPosition) {
|
|
54
|
-
this.startTimer(
|
|
54
|
+
this.startTimer();
|
|
55
55
|
}
|
|
56
56
|
else {
|
|
57
57
|
this.cancelTimer();
|
|
@@ -60,9 +60,16 @@ export class PositionAccessory extends DummyAccessory {
|
|
|
60
60
|
this.accessoryService.updateCharacteristic(this.Characteristic.TargetPosition, this.position);
|
|
61
61
|
this.accessoryService.updateCharacteristic(this.Characteristic.CurrentPosition, this.position);
|
|
62
62
|
}
|
|
63
|
-
async
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
async trigger() {
|
|
64
|
+
if (this.position === this.defaultPosition) {
|
|
65
|
+
const opposite = this.position === POSITION_CLOSED ? POSITION_OPEN : POSITION_CLOSED;
|
|
66
|
+
await this.setPosition(opposite);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async reset() {
|
|
70
|
+
if (this.position !== this.defaultPosition) {
|
|
71
|
+
await this.setPosition(this.defaultPosition);
|
|
72
|
+
}
|
|
66
73
|
}
|
|
67
74
|
logPosition(value) {
|
|
68
75
|
const message = value === POSITION_CLOSED ? strings.accessory.position.closed : strings.accessory.position.open;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"position.js","sourceRoot":"","sources":["../../../src/accessory/position/position.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"position.js","sourceRoot":"","sources":["../../../src/accessory/position/position.ts"],"names":[],"mappings":"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"}
|