homebridge-dummy 1.0.0 → 1.1.0-beta.0
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 +24 -1
- package/config.schema.json +10 -2
- package/dist/accessory/base.d.ts +1 -0
- package/dist/accessory/base.js +9 -3
- package/dist/accessory/base.js.map +1 -1
- package/dist/accessory/group.d.ts +1 -0
- package/dist/accessory/group.js +13 -3
- package/dist/accessory/group.js.map +1 -1
- package/dist/accessory/helpers.d.ts +1 -1
- package/dist/accessory/helpers.js +1 -1
- package/dist/accessory/helpers.js.map +1 -1
- package/dist/homebridge/platform.d.ts +2 -1
- package/dist/homebridge/platform.js +31 -19
- package/dist/homebridge/platform.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +5 -5
- package/dist/i18n/en.d.ts +1 -0
- package/dist/i18n/en.js +38 -37
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/i18n.d.ts +1 -0
- package/dist/i18n/template.d.ts +1 -0
- package/dist/i18n/zz.d.ts +1 -0
- package/dist/model/types.d.ts +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,13 @@ Full details [here](https://github.com/mpatfield/homebridge-dummy?tab=readme-ov-
|
|
|
14
14
|
|
|
15
15
|
All notable changes to homebridge-dummy will be documented in this file.
|
|
16
16
|
|
|
17
|
+
## 1.1.0-beta.X (XXXX-XX-XX)
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- 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
|
|
23
|
+
|
|
17
24
|
## 1.0.0 (2025-07-23)
|
|
18
25
|
|
|
19
26
|
### Changed
|
package/README.md
CHANGED
|
@@ -85,6 +85,7 @@ Using the Homebridge Config UI is the easiest way to set up this plugin. However
|
|
|
85
85
|
{
|
|
86
86
|
"id": "string",
|
|
87
87
|
"name": "string",
|
|
88
|
+
"groupName": "string",
|
|
88
89
|
"type": "Door | Lightbulb | LockMechanism | Outlet | Switch | Window | WindoCovering",
|
|
89
90
|
"timer": {
|
|
90
91
|
"delay": number,
|
|
@@ -116,6 +117,9 @@ All fields are optional unless noted with an asterisk (*)
|
|
|
116
117
|
- `name`* - The display name for the accessory in HomeKit
|
|
117
118
|
- `type`* - The type of accessory: `Door`, `Lightbulb`, `LockMechanism`, `Outlet`, `Switch`, `Window`, or `WindowCovering`
|
|
118
119
|
|
|
120
|
+
- `groupName` - (Beta) Items sharing the same group name will be collected together in the Home app UI
|
|
121
|
+
- ⚠️ Adding/removing/changing the group name will require you to reconfigure any HomeKit scenes or automations
|
|
122
|
+
|
|
119
123
|
- `timer.delay` — If defined, the switch will automatically toggle after this many seconds/minutes/hours
|
|
120
124
|
- `timer.units` — The units to use for delay above (`SECONDS`, `MINUTES`, or `HOURS`). *Required if delay is set.
|
|
121
125
|
- `timer.random` — If true, the delay will be randomized with a maximum value of `timer.delay`
|
|
@@ -173,7 +177,7 @@ All fields are optional unless noted with an asterisk (*)
|
|
|
173
177
|
"delay": 5,
|
|
174
178
|
"units": "SECONDS"
|
|
175
179
|
},
|
|
176
|
-
"defaultOn: true
|
|
180
|
+
"defaultOn": true
|
|
177
181
|
}
|
|
178
182
|
```
|
|
179
183
|
|
|
@@ -250,6 +254,25 @@ All fields are optional unless noted with an asterisk (*)
|
|
|
250
254
|
}
|
|
251
255
|
```
|
|
252
256
|
|
|
257
|
+
### Group
|
|
258
|
+
```json
|
|
259
|
+
{
|
|
260
|
+
"name": "Outlet 1",
|
|
261
|
+
"type": "Outlet",
|
|
262
|
+
"groupName": "Powerstrip"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"name": "Outlet 2",
|
|
266
|
+
"type": "Outlet",
|
|
267
|
+
"groupName": "Powerstrip"
|
|
268
|
+
}
|
|
269
|
+
{
|
|
270
|
+
"name": "Outlet 3",
|
|
271
|
+
"type": "Outlet",
|
|
272
|
+
"groupName": "Powerstrip"
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
253
276
|
## Credits
|
|
254
277
|
|
|
255
278
|
Special thanks to [@nfarina](https://github.com/nfarina) for creating the original version of this plugin and maintaining it for almost 10 (!!!) years
|
package/config.schema.json
CHANGED
|
@@ -53,6 +53,10 @@
|
|
|
53
53
|
"enum": ["Door", "Lightbulb", "LockMechanism", "Outlet", "Switch", "Window", "WindowCovering"],
|
|
54
54
|
"enumNames": ["${config.enumNames.door}", "${config.enumNames.lightbulb}", "${config.enumNames.lockMechanism}", "${config.enumNames.outlet}", "${config.enumNames.switch}", "${config.enumNames.window}", "${config.enumNames.windowCovering}"]
|
|
55
55
|
},
|
|
56
|
+
"groupName": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"title": "${config.title.groupName}"
|
|
59
|
+
},
|
|
56
60
|
"timer": { "$ref": "#/definitions/timer" },
|
|
57
61
|
"sensor": {
|
|
58
62
|
"type": "string",
|
|
@@ -62,9 +66,9 @@
|
|
|
62
66
|
},
|
|
63
67
|
"defaultBrightness": {
|
|
64
68
|
"type": "number",
|
|
69
|
+
"title": "${config.title.defaultBrightness}",
|
|
65
70
|
"minimum": 0,
|
|
66
|
-
"maximum": 100
|
|
67
|
-
"title": "${config.title.defaultBrightness}"
|
|
71
|
+
"maximum": 100
|
|
68
72
|
},
|
|
69
73
|
"defaultOn": {
|
|
70
74
|
"type": "number",
|
|
@@ -144,6 +148,10 @@
|
|
|
144
148
|
{
|
|
145
149
|
"key": "accessories[].type",
|
|
146
150
|
"flex": "1 1 0"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"key": "accessories[].groupName",
|
|
154
|
+
"flex": "1 1 0"
|
|
147
155
|
}
|
|
148
156
|
]
|
|
149
157
|
},
|
package/dist/accessory/base.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ 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
|
+
get subtype(): string | undefined;
|
|
16
17
|
teardown(): void;
|
|
17
18
|
protected get identifier(): string;
|
|
18
19
|
protected get isStateful(): boolean;
|
package/dist/accessory/base.js
CHANGED
|
@@ -27,9 +27,12 @@ export class DummyAccessory {
|
|
|
27
27
|
this.timer = new Timer(config.name, config.disableLogging ? undefined : log);
|
|
28
28
|
const serviceInstance = Service[this.getAccessoryType()];
|
|
29
29
|
if (isGrouped) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
let accessoryService = accessory.getServiceById(serviceInstance, this.identifier);
|
|
31
|
+
if (!accessoryService) {
|
|
32
|
+
accessoryService = accessory.addService(serviceInstance, config.name, this.identifier);
|
|
33
|
+
accessoryService.setCharacteristic(Characteristic.ConfiguredName, config.name);
|
|
34
|
+
}
|
|
35
|
+
this.accessoryService = accessoryService;
|
|
33
36
|
return;
|
|
34
37
|
}
|
|
35
38
|
accessory.getService(Service.AccessoryInformation)
|
|
@@ -41,6 +44,9 @@ export class DummyAccessory {
|
|
|
41
44
|
.setCharacteristic(Characteristic.FirmwareRevision, getVersion());
|
|
42
45
|
this.accessoryService = accessory.getService(serviceInstance) || accessory.addService(serviceInstance);
|
|
43
46
|
}
|
|
47
|
+
get subtype() {
|
|
48
|
+
return this.accessoryService.subtype;
|
|
49
|
+
}
|
|
44
50
|
teardown() {
|
|
45
51
|
this.timer.teardown();
|
|
46
52
|
}
|
|
@@ -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,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,OAAgB,cAAc;IAWb;IACA;IACA;IACA;IACA;IACA;IAdd,MAAM,CAAC,UAAU,CAAC,MAAmB;QAC1C,OAAO,MAAM,CAAC,EAAE,IAAI,GAAG,aAAa,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAC,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;IAEkB,gBAAgB,CAAU;IAE5B,KAAK,CAAQ;IAE9B,YACqB,OAAoB,EACpB,cAAkC,EAClC,SAA4B,EAC5B,MAAS,EACT,GAAQ,EACR,WAAmB,EACtC,SAAkB;QANC,YAAO,GAAP,OAAO,CAAa;QACpB,mBAAc,GAAd,cAAc,CAAoB;QAClC,cAAS,GAAT,SAAS,CAAmB;QAC5B,WAAM,GAAN,MAAM,CAAG;QACT,QAAG,GAAH,GAAG,CAAK;QACR,gBAAW,GAAX,WAAW,CAAQ;QAItC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAE7E,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAEzD,IAAI,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/accessory/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export declare class GroupAccessory {
|
|
|
8
8
|
protected readonly config: GroupConfig;
|
|
9
9
|
protected readonly log: Log;
|
|
10
10
|
protected readonly persistPath: string;
|
|
11
|
+
static identifier(groupName: string): string;
|
|
11
12
|
private readonly accessories;
|
|
12
13
|
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: GroupConfig, log: Log, persistPath: string);
|
|
13
14
|
teardown(): void;
|
package/dist/accessory/group.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { PLUGIN_ALIAS } from '../homebridge/settings.js';
|
|
1
|
+
import { createDummyAccessory } from './helpers.js';
|
|
2
|
+
import { PLATFORM_NAME, PLUGIN_ALIAS } from '../homebridge/settings.js';
|
|
3
3
|
import getVersion from '../tools/version.js';
|
|
4
4
|
export class GroupAccessory {
|
|
5
5
|
Service;
|
|
@@ -8,6 +8,9 @@ export class GroupAccessory {
|
|
|
8
8
|
config;
|
|
9
9
|
log;
|
|
10
10
|
persistPath;
|
|
11
|
+
static identifier(groupName) {
|
|
12
|
+
return `${PLATFORM_NAME}:Group:${groupName.replace(/\s+/g, '')})}`;
|
|
13
|
+
}
|
|
11
14
|
accessories = [];
|
|
12
15
|
constructor(Service, Characteristic, accessory, config, log, persistPath) {
|
|
13
16
|
this.Service = Service;
|
|
@@ -21,14 +24,21 @@ export class GroupAccessory {
|
|
|
21
24
|
.setCharacteristic(Characteristic.Model, GroupAccessory.name)
|
|
22
25
|
.setCharacteristic(Characteristic.SerialNumber, accessory.UUID)
|
|
23
26
|
.setCharacteristic(Characteristic.FirmwareRevision, getVersion());
|
|
27
|
+
const keepSubtypes = new Set();
|
|
24
28
|
for (const dummyConfig of config.accessories) {
|
|
25
|
-
const dummyAccessory =
|
|
29
|
+
const dummyAccessory = createDummyAccessory(this.Service, this.Characteristic, accessory, dummyConfig, this.log, persistPath, true);
|
|
26
30
|
if (!dummyAccessory) {
|
|
27
31
|
continue;
|
|
28
32
|
}
|
|
33
|
+
keepSubtypes.add(dummyAccessory.subtype);
|
|
29
34
|
this.accessories.push(dummyAccessory);
|
|
30
35
|
}
|
|
31
36
|
;
|
|
37
|
+
for (const service of [...accessory.services]) {
|
|
38
|
+
if (service.subtype && !keepSubtypes.has(service.subtype)) {
|
|
39
|
+
accessory.removeService(service);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
32
42
|
}
|
|
33
43
|
teardown() {
|
|
34
44
|
this.accessories.forEach(accessory => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.js","sourceRoot":"","sources":["../../src/accessory/group.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"group.js","sourceRoot":"","sources":["../../src/accessory/group.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAKpD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,OAAO,cAAc;IASJ;IACA;IACA;IACA;IACA;IACA;IAZd,MAAM,CAAC,UAAU,CAAC,SAAiB;QACxC,OAAO,GAAG,aAAa,UAAU,SAAS,CAAC,OAAO,CAAC,MAAM,EAAC,EAAE,CAAC,IAAI,CAAC;IACpE,CAAC;IAEgB,WAAW,GAAoC,EAAE,CAAC;IAEnE,YACqB,OAAoB,EACpB,cAAkC,EAClC,SAA4B,EAC5B,MAAmB,EACnB,GAAQ,EACR,WAAmB;QALnB,YAAO,GAAP,OAAO,CAAa;QACpB,mBAAc,GAAd,cAAc,CAAoB;QAClC,cAAS,GAAT,SAAS,CAAmB;QAC5B,WAAM,GAAN,MAAM,CAAa;QACnB,QAAG,GAAH,GAAG,CAAK;QACR,gBAAW,GAAX,WAAW,CAAQ;QAGtC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAE;aAChD,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC;aAC5D,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC;aAC5D,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC;aAC9D,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC;QAEpE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QAEvC,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAE7C,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACpI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YAED,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,OAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;QAAA,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,WAAW,CAAC,OAAO,CAAE,SAAS,CAAC,EAAE;YACpC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -2,4 +2,4 @@ import { PlatformAccessory } from 'homebridge';
|
|
|
2
2
|
import { DummyAccessory } from './base.js';
|
|
3
3
|
import * as Types from '../model/types.js';
|
|
4
4
|
import { Log } from '../tools/log.js';
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function createDummyAccessory(Service: Types.ServiceType, Characteristic: Types.CharacteristicType, accessory: PlatformAccessory, config: Types.DummyConfig, log: Log, persistPath: string, isGrouped?: boolean): DummyAccessory<Types.DummyConfig> | null;
|
|
@@ -7,7 +7,7 @@ import { SwitchAccessory } from './onoff/switch.js';
|
|
|
7
7
|
import { WindowAccessory } from './position/window.js';
|
|
8
8
|
import { strings } from '../i18n/i18n.js';
|
|
9
9
|
import * as Types from '../model/types.js';
|
|
10
|
-
export function
|
|
10
|
+
export function createDummyAccessory(Service, Characteristic, accessory, config, log, persistPath, isGrouped = false) {
|
|
11
11
|
switch (config.type) {
|
|
12
12
|
case Types.AccessoryType.Door:
|
|
13
13
|
return new DoorAccessory(Service, Characteristic, accessory, config, log, persistPath, isGrouped);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/accessory/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAI3C,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/accessory/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAI3C,MAAM,UAAU,oBAAoB,CAClC,OAA0B,EAC1B,cAAwC,EACxC,SAA4B,EAC5B,MAAyB,EACzB,GAAQ,EACR,WAAmB,EACnB,YAAqB,KAAK;IAG1B,QAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,KAAK,CAAC,aAAa,CAAC,IAAI;YAC3B,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACpG,KAAK,KAAK,CAAC,aAAa,CAAC,SAAS;YAChC,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACzG,KAAK,KAAK,CAAC,aAAa,CAAC,aAAa;YACpC,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACpG,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM;YAC7B,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACtG,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM;YAC7B,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACtG,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM;YAC7B,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACtG,KAAK,KAAK,CAAC,aAAa,CAAC,cAAc;YACrC,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACrG;YACE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -6,11 +6,12 @@ export declare class HomebridgeDummyPlatform implements DynamicPlatformPlugin {
|
|
|
6
6
|
private readonly Service;
|
|
7
7
|
private readonly Characteristic;
|
|
8
8
|
private readonly log;
|
|
9
|
-
private readonly
|
|
9
|
+
private readonly platformAccessories;
|
|
10
10
|
private readonly dummyAccessories;
|
|
11
11
|
constructor(logger: Logger, config: DummyPlatformConfig, api: API);
|
|
12
12
|
configureAccessory(accessory: PlatformAccessory): void;
|
|
13
13
|
private teardown;
|
|
14
14
|
private setup;
|
|
15
|
+
private createPlatformAccessory;
|
|
15
16
|
private removeCachedAccessory;
|
|
16
17
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
2
2
|
import { DummyAccessory } from '../accessory/base.js';
|
|
3
|
-
import {
|
|
3
|
+
import { GroupAccessory } from '../accessory/group.js';
|
|
4
|
+
import { createDummyAccessory } from '../accessory/helpers.js';
|
|
4
5
|
import { setLanguage, strings } from '../i18n/i18n.js';
|
|
5
6
|
import { migrateAccessories } from '../tools/configMigration.js';
|
|
6
7
|
import { Log } from '../tools/log.js';
|
|
@@ -11,7 +12,7 @@ export class HomebridgeDummyPlatform {
|
|
|
11
12
|
Service;
|
|
12
13
|
Characteristic;
|
|
13
14
|
log;
|
|
14
|
-
|
|
15
|
+
platformAccessories = new Map();
|
|
15
16
|
dummyAccessories = [];
|
|
16
17
|
constructor(logger, config, api) {
|
|
17
18
|
this.config = config;
|
|
@@ -31,7 +32,7 @@ export class HomebridgeDummyPlatform {
|
|
|
31
32
|
}
|
|
32
33
|
configureAccessory(accessory) {
|
|
33
34
|
this.log.always(strings.startup.restoringAccessory, accessory.displayName);
|
|
34
|
-
this.
|
|
35
|
+
this.platformAccessories.set(accessory.context.identifier, accessory);
|
|
35
36
|
}
|
|
36
37
|
teardown() {
|
|
37
38
|
this.dummyAccessories.forEach(accessory => {
|
|
@@ -46,31 +47,33 @@ export class HomebridgeDummyPlatform {
|
|
|
46
47
|
accessories.push(...migratedAccessories);
|
|
47
48
|
}
|
|
48
49
|
const persistPath = this.api.user.persistPath();
|
|
49
|
-
const
|
|
50
|
+
const groupAccessories = new Map();
|
|
50
51
|
for (const accessoryConfig of accessories) {
|
|
52
|
+
if (accessoryConfig.groupName?.length) {
|
|
53
|
+
const groupConfig = groupAccessories.get(accessoryConfig.groupName) || { accessories: [] };
|
|
54
|
+
groupConfig.accessories.push(accessoryConfig);
|
|
55
|
+
groupAccessories.set(accessoryConfig.groupName, groupConfig);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
51
58
|
const id = DummyAccessory.identifier(accessoryConfig);
|
|
52
59
|
keepIdentifiers.add(id);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const name = accessoryConfig.name;
|
|
56
|
-
this.log.always(strings.startup.newAccessory, name);
|
|
57
|
-
const uuid = this.api.hap.uuid.generate(id);
|
|
58
|
-
accessory = new this.api.platformAccessory(name, uuid);
|
|
59
|
-
accessory.context.identifier = id;
|
|
60
|
-
newAccessories.push(accessory);
|
|
61
|
-
this.cachedAccessories.set(id, accessory);
|
|
62
|
-
}
|
|
63
|
-
const dummyAccessory = createAccessory(this.Service, this.Characteristic, accessory, accessoryConfig, this.log, persistPath);
|
|
60
|
+
const accessory = this.platformAccessories.get(id) ?? this.createPlatformAccessory(id, accessoryConfig.name);
|
|
61
|
+
const dummyAccessory = createDummyAccessory(this.Service, this.Characteristic, accessory, accessoryConfig, this.log, persistPath);
|
|
64
62
|
if (!dummyAccessory) {
|
|
65
63
|
continue;
|
|
66
64
|
}
|
|
67
65
|
this.dummyAccessories.push(dummyAccessory);
|
|
68
66
|
}
|
|
69
67
|
;
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
for (const groupName of groupAccessories.keys()) {
|
|
69
|
+
const groupConfig = groupAccessories.get(groupName);
|
|
70
|
+
const id = GroupAccessory.identifier(groupName);
|
|
71
|
+
keepIdentifiers.add(id);
|
|
72
|
+
const accessory = this.platformAccessories.get(id) ?? this.createPlatformAccessory(id, groupName);
|
|
73
|
+
const groupAccessory = new GroupAccessory(this.Service, this.Characteristic, accessory, groupConfig, this.log, persistPath);
|
|
74
|
+
this.dummyAccessories.push(groupAccessory);
|
|
72
75
|
}
|
|
73
|
-
this.
|
|
76
|
+
this.platformAccessories.forEach(accessory => {
|
|
74
77
|
if (!keepIdentifiers.has(accessory.context.identifier)) {
|
|
75
78
|
this.removeCachedAccessory(accessory);
|
|
76
79
|
}
|
|
@@ -78,10 +81,19 @@ export class HomebridgeDummyPlatform {
|
|
|
78
81
|
const randIndex = Math.floor(Math.random() * strings.startup.welcome.length);
|
|
79
82
|
this.log.always(strings.startup.setupComplete, strings.startup.welcome[randIndex]);
|
|
80
83
|
}
|
|
84
|
+
createPlatformAccessory(id, name) {
|
|
85
|
+
this.log.always(strings.startup.newAccessory, name);
|
|
86
|
+
const uuid = this.api.hap.uuid.generate(id);
|
|
87
|
+
const accessory = new this.api.platformAccessory(name, uuid);
|
|
88
|
+
accessory.context.identifier = id;
|
|
89
|
+
this.platformAccessories.set(id, accessory);
|
|
90
|
+
this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
|
|
91
|
+
return accessory;
|
|
92
|
+
}
|
|
81
93
|
removeCachedAccessory(accessory) {
|
|
82
94
|
this.log.always(strings.startup.removeAccessory, accessory.displayName);
|
|
83
95
|
this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
|
|
84
|
-
this.
|
|
96
|
+
this.platformAccessories.delete(accessory.context.identifier);
|
|
85
97
|
}
|
|
86
98
|
}
|
|
87
99
|
//# sourceMappingURL=platform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/homebridge/platform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/homebridge/platform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAIvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,OAAO,uBAAuB;IAWf;IACA;IAXF,OAAO,CAAC;IACR,cAAc,CAAC;IAEf,GAAG,CAAM;IAET,mBAAmB,GAAmC,IAAI,GAAG,EAAE,CAAC;IAChE,gBAAgB,GAAqD,EAAE,CAAC;IAEzF,YACE,MAAc,EACG,MAA2B,EAC3B,GAAQ;QADR,WAAM,GAAN,MAAM,CAAqB;QAC3B,QAAG,GAAH,GAAG,CAAK;QAGzB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEtB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;QAE7C,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAE3B,IAAI,CAAC,GAAG,CAAC,MAAM,CACb,oDAAoD,EACpD,UAAU,EAAE,EACZ,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,OAAO,EACf,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAC5B,CAAC;QAEF,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,SAA4B;QAC7C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;QAC3E,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,SAAS,CAAC,EAAE;YACzC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,KAAK;QAEjB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAE1C,MAAM,WAAW,GAAkB,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,mBAAmB,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC;YACjG,WAAW,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEhD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;QAExD,KAAK,MAAM,eAAe,IAAI,WAAW,EAAE,CAAC;YAE1C,IAAI,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAgB,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;gBACxG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC9C,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAC7D,SAAS;YACX,CAAC;YAED,MAAM,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YACtD,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAExB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;YAE7G,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAClI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC;QAAA,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC;YAEhD,MAAM,WAAW,GAAgB,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;YAElE,MAAM,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAChD,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAExB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAElG,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAC5H,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC3C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACrF,CAAC;IAEO,uBAAuB,CAAC,EAAU,EAAE,IAAY;QAEtD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE5C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7D,SAAS,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;QAElC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAE5C,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAE9E,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAAC,SAA4B;QACxD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;CACF"}
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
<div id="intro" class="text-center" style="display: none;">
|
|
23
23
|
<p class="lead" i18n="thankYou" i18n_replace="dummy"></p></br>
|
|
24
24
|
<p class="lead" i18n="migrate"></p></br>
|
|
25
|
-
<button type="button" class="btn btn-
|
|
26
|
-
<button type="button" class="btn btn-
|
|
25
|
+
<button type="button" class="btn btn-secondary" id="showSettings" i18n="no"></button>
|
|
26
|
+
<button type="button" class="btn btn-secondary" id="showMigration" i18n="yes"></button>
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<div id="migration" class="text-center" style="display: none;">
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
<br/>
|
|
38
38
|
<p class="lead" i18n="migrationDetails4"></p>
|
|
39
39
|
<br/>
|
|
40
|
-
<button type="button" class="btn btn-
|
|
41
|
-
<button type="button" class="btn btn-
|
|
40
|
+
<button type="button" class="btn btn-secondary" id="skipMigration" i18n="no"></button>
|
|
41
|
+
<button type="button" class="btn btn-secondary" id="doMigration" i18n="yes"></button>
|
|
42
42
|
</br></br></br>
|
|
43
43
|
<em><p i18n="migrationDetails5" i18n_replace="migration"></p></em></br>
|
|
44
44
|
</div>
|
|
45
45
|
|
|
46
|
-
<script src="ui.js?v=1.0.0"></script>
|
|
46
|
+
<script src="ui.js?v=1.1.0-beta.0"></script>
|
package/dist/i18n/en.d.ts
CHANGED
package/dist/i18n/en.js
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
const en = {
|
|
2
2
|
accessory: {
|
|
3
|
-
missingRequired: '%s is missing required config variable %s',
|
|
3
|
+
missingRequired: '%s is missing required config variable %s', // accessory name, variable name
|
|
4
4
|
command: {
|
|
5
|
-
executed: '%s executed command',
|
|
6
|
-
error: '%s failed to execute command',
|
|
5
|
+
executed: '%s executed command', // accessory name
|
|
6
|
+
error: '%s failed to execute command', // accessory name
|
|
7
7
|
},
|
|
8
8
|
lightbulb: {
|
|
9
|
-
brightness: '%s brightness is %s',
|
|
10
|
-
stateOn: '%s is on %s%',
|
|
9
|
+
brightness: '%s brightness is %s', // accessory name, number
|
|
10
|
+
stateOn: '%s is on %s%', // accessory name, number
|
|
11
11
|
},
|
|
12
12
|
lock: {
|
|
13
|
-
secured: '%s is locked',
|
|
14
|
-
unsecured: '%s is unlocked',
|
|
13
|
+
secured: '%s is locked', // accessory name
|
|
14
|
+
unsecured: '%s is unlocked', // accessory name
|
|
15
15
|
},
|
|
16
16
|
onOff: {
|
|
17
|
-
stateOn: '%s is on',
|
|
18
|
-
stateOff: '%s is off',
|
|
17
|
+
stateOn: '%s is on', // accessory name
|
|
18
|
+
stateOff: '%s is off', // accessory name
|
|
19
19
|
},
|
|
20
20
|
position: {
|
|
21
|
-
closed: '%s is closed',
|
|
22
|
-
open: '%s is open',
|
|
21
|
+
closed: '%s is closed', // accessory name
|
|
22
|
+
open: '%s is open', // accessory name
|
|
23
23
|
},
|
|
24
24
|
timer: {
|
|
25
|
-
cancel: 'Cancelled the timer for %s',
|
|
26
|
-
reset: 'Reset the timer for %s',
|
|
27
|
-
setSeconds: '%s is waiting %s seconds',
|
|
28
|
-
setMinutes: '%s is waiting %s minutes',
|
|
29
|
-
setHours: '%s is waiting %s hours',
|
|
25
|
+
cancel: 'Cancelled the timer for %s', // accessory name
|
|
26
|
+
reset: 'Reset the timer for %s', // accessory name
|
|
27
|
+
setSeconds: '%s is waiting %s seconds', // accessory name, number
|
|
28
|
+
setMinutes: '%s is waiting %s minutes', // accessory name, number
|
|
29
|
+
setHours: '%s is waiting %s hours', // accessory name, number
|
|
30
30
|
},
|
|
31
31
|
},
|
|
32
32
|
config: {
|
|
@@ -35,11 +35,11 @@ const en = {
|
|
|
35
35
|
migrationDetails2: 'Please downgrade to v0.9.2 or earlier if you want to keep your current setup.',
|
|
36
36
|
migrationDetails3: '%s can try to recreate your accessories, but you will still need reconfigure HomeKit scenes and automations.', // plugin name
|
|
37
37
|
migrationDetails4: 'Would you like to recreate your accessories now?',
|
|
38
|
-
migrationDetails5: 'For more details, please visit %s',
|
|
39
|
-
migrationRestartTitle: '
|
|
40
|
-
migrationRestartDescription: 'Please restart
|
|
41
|
-
support: 'For documentation and support please visit %s',
|
|
42
|
-
thankYou: 'Thank you for installing %s',
|
|
38
|
+
migrationDetails5: 'For more details, please visit %s', // url
|
|
39
|
+
migrationRestartTitle: 'Restart Homebridge',
|
|
40
|
+
migrationRestartDescription: 'Please restart Homebridge to begin %s migration', // plugin name
|
|
41
|
+
support: 'For documentation and support please visit %s', // url
|
|
42
|
+
thankYou: 'Thank you for installing %s', // plugin name
|
|
43
43
|
yes: 'Yes',
|
|
44
44
|
no: 'No',
|
|
45
45
|
description: {
|
|
@@ -86,6 +86,7 @@ const en = {
|
|
|
86
86
|
defaultState: 'Default State',
|
|
87
87
|
delay: 'Delay',
|
|
88
88
|
disableLogging: 'Disable Logging',
|
|
89
|
+
groupName: 'Group Name (Beta)',
|
|
89
90
|
name: 'Name',
|
|
90
91
|
options: 'Additional Settings',
|
|
91
92
|
resetOnRestart: 'Reset on Restart',
|
|
@@ -98,37 +99,37 @@ const en = {
|
|
|
98
99
|
},
|
|
99
100
|
sensor: {
|
|
100
101
|
carbonDioxide: {
|
|
101
|
-
active: '%s detected carbon dioxide',
|
|
102
|
-
inactive: '%s stopped detecting carbon dioxide',
|
|
102
|
+
active: '%s detected carbon dioxide', // accessory name
|
|
103
|
+
inactive: '%s stopped detecting carbon dioxide', // accessory name
|
|
103
104
|
},
|
|
104
105
|
carbonMonoxide: {
|
|
105
|
-
active: '%s detected carbon monoxide',
|
|
106
|
-
inactive: '%s stopped detecting carbon monoxide',
|
|
106
|
+
active: '%s detected carbon monoxide', // accessory name
|
|
107
|
+
inactive: '%s stopped detecting carbon monoxide', // accessory name
|
|
107
108
|
},
|
|
108
109
|
contact: {
|
|
109
|
-
active: '%s detected contact',
|
|
110
|
-
inactive: '%s stopped detecting contact',
|
|
110
|
+
active: '%s detected contact', // accessory name
|
|
111
|
+
inactive: '%s stopped detecting contact', // accessory name
|
|
111
112
|
},
|
|
112
113
|
leak: {
|
|
113
|
-
active: '%s detected a leak',
|
|
114
|
-
inactive: '%s stopped detecting leaks',
|
|
114
|
+
active: '%s detected a leak', // accessory name
|
|
115
|
+
inactive: '%s stopped detecting leaks', // accessory name
|
|
115
116
|
},
|
|
116
117
|
motion: {
|
|
117
|
-
active: '%s detected motion',
|
|
118
|
-
inactive: '%s stopped detecting motion',
|
|
118
|
+
active: '%s detected motion', // accessory name
|
|
119
|
+
inactive: '%s stopped detecting motion', // accessory name
|
|
119
120
|
},
|
|
120
121
|
occupancy: {
|
|
121
|
-
active: '%s detected occupancy',
|
|
122
|
-
inactive: '%s stopped detecting occupancy',
|
|
122
|
+
active: '%s detected occupancy', // accessory name
|
|
123
|
+
inactive: '%s stopped detecting occupancy', // accessory name
|
|
123
124
|
},
|
|
124
125
|
smoke: {
|
|
125
|
-
active: '%s detected smoke',
|
|
126
|
-
inactive: '%s stopped detecting smoke',
|
|
126
|
+
active: '%s detected smoke', // accessory name
|
|
127
|
+
inactive: '%s stopped detecting smoke', // accessory name
|
|
127
128
|
},
|
|
128
129
|
},
|
|
129
130
|
startup: {
|
|
130
131
|
migrationBridge: '‼️ Please restart Homebridge one more time for migration to take full effect ‼️',
|
|
131
|
-
migrationComplete: 'Successfully migrated %s accessories!',
|
|
132
|
+
migrationComplete: 'Successfully migrated %s accessories!', // number
|
|
132
133
|
migrationNoAccessories: 'Unable to find any accessories to migrate',
|
|
133
134
|
migrationIgnore: 'You may safely ignore \'No plugin was found…\' errors — they should go away the next time you restart Homebridge',
|
|
134
135
|
migrationFailed: 'Sorry, something went wrong with the accessory migration',
|
|
@@ -137,7 +138,7 @@ const en = {
|
|
|
137
138
|
removeAccessory: 'Removing accessory:',
|
|
138
139
|
restoringAccessory: 'Restoring accessory:',
|
|
139
140
|
setupComplete: '✓ Setup complete',
|
|
140
|
-
unsupportedType: 'Unsupported accessory type %s',
|
|
141
|
+
unsupportedType: 'Unsupported accessory type %s', // accessory type
|
|
141
142
|
welcome: [
|
|
142
143
|
'Please ★ this plugin on GitHub if you\'re finding it useful! https://github.com/mpatfield/homebridge-dummy',
|
|
143
144
|
'Would you like to sponsor this plugin? https://github.com/sponsors/mpatfield',
|
package/dist/i18n/en.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAAA,MAAM,EAAE,GAAG;IAET,SAAS,EAAE;QAET,eAAe,EAAE,2CAA2C;
|
|
1
|
+
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/i18n.d.ts
CHANGED
package/dist/i18n/template.d.ts
CHANGED
package/dist/i18n/zz.d.ts
CHANGED
package/dist/model/types.d.ts
CHANGED
package/package.json
CHANGED