homebridge-dummy 0.9.1-beta.0 → 0.9.1-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 CHANGED
@@ -2,11 +2,14 @@
2
2
 
3
3
  All notable changes to homebridge-dummy will be documented in this file.
4
4
 
5
- ## 0.9.1 (2025-??-??)
5
+ ## 0.9.1 (####-##-##)
6
6
 
7
7
  ⚠️ Plugin has a new maintainer and will undergo significant cleanup and modernization in the near term. If you experience issues you can always downgrade to the last stable version v0.9.0
8
8
 
9
9
  Please report any issues you encounte here: https://github.com/mpatfield/homebridge-dummy/issues
10
10
 
11
+ ### ⚠️ BREAKING
12
+ - node-persist updated from major version 2 to 4 so stateful and dimmer switches will lose their previously saved states
13
+
11
14
  ### Changed
12
15
  - Migrated to typescript
@@ -0,0 +1,143 @@
1
+ import { PLUGIN_ALIAS, PLUGIN_NAME } from './settings.js';
2
+ import { STORAGE_KEY_SUFFIX_BRIGHTNESS, STORAGE_KEY_SUFFIX_STATE, storageGet, storageSet } from '../tools/storage.js';
3
+ import getVersion from '../tools/version.js';
4
+ const init = (api) => {
5
+ api.registerAccessory(PLUGIN_NAME, PLUGIN_ALIAS, DummySwitch);
6
+ };
7
+ export default init;
8
+ class DummySwitch {
9
+ api;
10
+ log;
11
+ service;
12
+ infoService;
13
+ persistPath;
14
+ name;
15
+ isDimmer;
16
+ isStateful;
17
+ isReverse;
18
+ brightness;
19
+ isRandom;
20
+ isResettable;
21
+ timeout;
22
+ timer = undefined;
23
+ constructor(log, config, api) {
24
+ this.api = api;
25
+ this.persistPath = api.user.persistPath();
26
+ this.name = config.name;
27
+ this.isDimmer = config.dimmer;
28
+ this.isReverse = config.reverse;
29
+ this.isStateful = config.stateful;
30
+ this.brightness = config.brightness;
31
+ this.isRandom = config.random;
32
+ this.isResettable = config.resettable;
33
+ this.timeout = config.time;
34
+ this.log = config.disableLogging ? undefined : log;
35
+ let modelString;
36
+ if (this.isDimmer) {
37
+ this.service = new api.hap.Service.Lightbulb(this.name);
38
+ modelString = 'Dummy Dimmer';
39
+ }
40
+ else {
41
+ this.service = new api.hap.Service.Switch(this.name);
42
+ modelString = 'Dummy Switch';
43
+ }
44
+ this.infoService = new api.hap.Service.AccessoryInformation();
45
+ this.infoService
46
+ .setCharacteristic(api.hap.Characteristic.Manufacturer, 'Homebridge')
47
+ .setCharacteristic(api.hap.Characteristic.Model, modelString)
48
+ .setCharacteristic(api.hap.Characteristic.FirmwareRevision, getVersion())
49
+ .setCharacteristic(api.hap.Characteristic.SerialNumber, 'Dummy-' + this.name.replace(/\s/g, '-'));
50
+ this.service.getCharacteristic(this.api.hap.Characteristic.On)
51
+ .onSet(this._setOn.bind(this));
52
+ if (this.isDimmer) {
53
+ this.service.getCharacteristic(this.api.hap.Characteristic.Brightness)
54
+ .onGet(this._getBrightness.bind(this))
55
+ .onSet(this._setBrightness.bind(this));
56
+ }
57
+ if (this.isReverse) {
58
+ this.service.setCharacteristic(this.api.hap.Characteristic.On, true);
59
+ }
60
+ if (this.isStateful) {
61
+ storageGet(this.persistPath, this.storageKey(STORAGE_KEY_SUFFIX_STATE)).then((cachedState) => {
62
+ if (!cachedState) {
63
+ this.service.setCharacteristic(this.api.hap.Characteristic.On, false);
64
+ }
65
+ else {
66
+ this.service.setCharacteristic(this.api.hap.Characteristic.On, true);
67
+ }
68
+ });
69
+ }
70
+ if (this.isDimmer) {
71
+ storageGet(this.persistPath, this.storageKey(STORAGE_KEY_SUFFIX_BRIGHTNESS)).then((cachedBrightness) => {
72
+ if (!cachedBrightness) {
73
+ this.service.setCharacteristic(this.api.hap.Characteristic.On, false);
74
+ this.service.setCharacteristic(this.api.hap.Characteristic.Brightness, 0);
75
+ }
76
+ else {
77
+ this.service.setCharacteristic(this.api.hap.Characteristic.On, true);
78
+ this.service.setCharacteristic(this.api.hap.Characteristic.Brightness, Number(cachedBrightness));
79
+ }
80
+ });
81
+ }
82
+ }
83
+ getServices() {
84
+ return [this.infoService, this.service];
85
+ }
86
+ storageKey(suffix) {
87
+ return this.name.replace(/\s/g, '_').toLowerCase() + suffix;
88
+ }
89
+ randomize(timeout) {
90
+ if (!timeout) {
91
+ return;
92
+ }
93
+ return Math.floor(Math.random() * (timeout + 1));
94
+ }
95
+ async _getBrightness() {
96
+ this.log?.('Getting ' + 'brightness: ' + this.brightness);
97
+ return this.brightness || 0;
98
+ }
99
+ async _setBrightness(brightness) {
100
+ const msg = 'Setting brightness: ' + brightness;
101
+ this.log?.(msg);
102
+ this.brightness = brightness;
103
+ await storageSet(this.persistPath, this.storageKey(STORAGE_KEY_SUFFIX_BRIGHTNESS), brightness.toString());
104
+ }
105
+ ;
106
+ async _setOn(value) {
107
+ const delay = this.isRandom ? this.randomize(this.timeout) : this.timeout;
108
+ let msg = 'Setting switch to ' + value;
109
+ if (this.isRandom && !this.isStateful) {
110
+ if (value && !this.isReverse || !value && this.isReverse) {
111
+ msg = msg + ' (random delay ' + delay + 'ms)';
112
+ }
113
+ }
114
+ this.log?.(msg);
115
+ if (value && !this.isReverse && !this.isStateful) {
116
+ if (this.isResettable && this.timer) {
117
+ clearTimeout(this.timer);
118
+ this.timer = undefined;
119
+ }
120
+ if (delay) {
121
+ this.timer = setTimeout(() => {
122
+ this.service.setCharacteristic(this.api.hap.Characteristic.On, false);
123
+ }, delay);
124
+ }
125
+ }
126
+ else if (!value && this.isReverse && !this.isStateful) {
127
+ if (this.isResettable && this.timer) {
128
+ clearTimeout(this.timer);
129
+ this.timer = undefined;
130
+ }
131
+ if (delay) {
132
+ this.timer = setTimeout(() => {
133
+ this.service.setCharacteristic(this.api.hap.Characteristic.On, true);
134
+ }, delay);
135
+ }
136
+ }
137
+ if (this.isStateful) {
138
+ storageSet(this.persistPath, this.storageKey(STORAGE_KEY_SUFFIX_STATE), value.toString());
139
+ }
140
+ }
141
+ ;
142
+ }
143
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/homebridge/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const PLUGIN_ALIAS = "DummySwitch";
2
+ export declare const PLUGIN_NAME = "homebridge-dummy";
@@ -0,0 +1,3 @@
1
+ export const PLUGIN_ALIAS = 'DummySwitch';
2
+ export const PLUGIN_NAME = 'homebridge-dummy';
3
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/homebridge/settings.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const en: {};
2
+ export default en;
@@ -0,0 +1,3 @@
1
+ const en = {};
2
+ export default en;
3
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAAA,MAAM,EAAE,GAAG,EACV,CAAC;AAEF,eAAe,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import en from './en.js';
2
+ export declare enum Language {
3
+ EN = "en",
4
+ ZZ = "zz"
5
+ }
6
+ export type Translation = typeof en;
7
+ export declare function getLanguage(): Language;
8
+ export declare function setLanguage(i18nLang: string): void;
9
+ export declare function getAllTranslations(): Translation;
10
+ declare const translations: {};
11
+ export { translations as strings };
@@ -0,0 +1,38 @@
1
+ import en from './en.js';
2
+ import zz from './zz.js';
3
+ export var Language;
4
+ (function (Language) {
5
+ Language["EN"] = "en";
6
+ Language["ZZ"] = "zz";
7
+ })(Language || (Language = {}));
8
+ const Translations = {
9
+ [Language.EN]: en,
10
+ [Language.ZZ]: zz,
11
+ };
12
+ let currentLanguage = Language.EN;
13
+ export function getLanguage() {
14
+ return currentLanguage;
15
+ }
16
+ export function setLanguage(i18nLang) {
17
+ let language = Language.EN;
18
+ switch (i18nLang) {
19
+ case Language.EN:
20
+ language = Language.EN;
21
+ break;
22
+ case Language.ZZ:
23
+ language = Language.ZZ;
24
+ break;
25
+ }
26
+ currentLanguage = Translations[language] ? language : Language.EN;
27
+ }
28
+ export function getAllTranslations() {
29
+ return Translations[currentLanguage];
30
+ }
31
+ const translations = new Proxy({}, {
32
+ get(_target, prop) {
33
+ return (Translations[currentLanguage][prop] ??
34
+ Translations[Language.EN][prop]);
35
+ },
36
+ });
37
+ export { translations as strings };
38
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/i18n/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,qBAAS,CAAA;IACT,qBAAS,CAAA;AACX,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,YAAY,GAAkC;IAClD,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;IACjB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;CAClB,CAAC;AAIF,IAAI,eAAe,GAAa,QAAQ,CAAC,EAAE,CAAC;AAE5C,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAE1C,IAAI,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC3B,QAAO,QAAQ,EAAE,CAAC;QAClB,KAAK,QAAQ,CAAC,EAAE;YACd,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;YACvB,MAAM;QACR,KAAK,QAAQ,CAAC,EAAE;YACd,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;YACvB,MAAM;IACR,CAAC;IAED,eAAe,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,YAAY,CAAC,eAAe,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,EAAiB,EAAE;IAChD,GAAG,CAAC,OAAO,EAAE,IAAY;QACvB,OAAO,CACL,YAAY,CAAC,eAAe,CAAC,CAAC,IAAyB,CAAC;YACxD,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAyB,CAAC,CACrD,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const REPLACE_THIS_WITH_ISO_CODE: {};
2
+ export default REPLACE_THIS_WITH_ISO_CODE;
@@ -0,0 +1,8 @@
1
+ import merge from 'lodash.merge';
2
+ import en from './en.js';
3
+ const overrides = {
4
+ // Copy strings from en.js to here and translate
5
+ };
6
+ const REPLACE_THIS_WITH_ISO_CODE = merge({}, en, overrides);
7
+ export default REPLACE_THIS_WITH_ISO_CODE;
8
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/i18n/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,SAAS,GAAG;AAEhB,gDAAgD;CAEjD,CAAC;AAEF,MAAM,0BAA0B,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AAE5D,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const zz: {};
2
+ export default zz;
@@ -0,0 +1,6 @@
1
+ import merge from 'lodash.merge';
2
+ import en from './en.js';
3
+ const overrides = {};
4
+ const zz = merge({}, en, overrides);
5
+ export default zz;
6
+ //# sourceMappingURL=zz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zz.js","sourceRoot":"","sources":["../../src/i18n/zz.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,SAAS,GAAG,EACjB,CAAC;AAEF,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AAEpC,eAAe,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const STORAGE_KEY_SUFFIX_BRIGHTNESS = "_brightness";
2
+ export declare const STORAGE_KEY_SUFFIX_STATE = "_state";
3
+ export declare function storageGet(dir: string, key: string): Promise<string | null>;
4
+ export declare function storageSet(dir: string, key: string, value: string): Promise<void>;
@@ -0,0 +1,26 @@
1
+ import storage from 'node-persist';
2
+ import { PLUGIN_NAME } from '../homebridge/settings.js';
3
+ export const STORAGE_KEY_SUFFIX_BRIGHTNESS = '_brightness';
4
+ export const STORAGE_KEY_SUFFIX_STATE = '_state';
5
+ async function init(dir) {
6
+ await storage.init({ dir: dir, forgiveParseErrors: true });
7
+ }
8
+ export async function storageGet(dir, key) {
9
+ try {
10
+ await init(dir);
11
+ return await storage.get(`${PLUGIN_NAME}:${key}`);
12
+ }
13
+ catch (err) {
14
+ return null;
15
+ }
16
+ }
17
+ export async function storageSet(dir, key, value) {
18
+ try {
19
+ await init(dir);
20
+ storage.set(`${PLUGIN_NAME}:${key}`, value);
21
+ }
22
+ catch {
23
+ // Nothing
24
+ }
25
+ }
26
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/tools/storage.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,CAAC,MAAM,6BAA6B,GAAG,aAAa,CAAC;AAC3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC;AAEjD,KAAK,UAAU,IAAI,CAAC,GAAW;IAC7B,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,GAAW;IACvD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,GAAW,EAAE,KAAa;IACtE,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,UAAU;IACZ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "homebridge-dummy",
3
3
  "displayName": "Homebridge Dummy",
4
- "version": "0.9.1-beta.0",
4
+ "version": "0.9.1-beta.1",
5
5
  "author": {
6
6
  "name": "mpatfield"
7
7
  },
8
8
  "description": "Dummy switches for Homebridge",
9
9
  "homepage": "https://github.com/mpatfield/homebridge-dummy#readme",
10
10
  "type": "module",
11
- "main": "dist/index.js",
11
+ "main": "dist/homebridge/index.js",
12
12
  "keywords": [
13
13
  "homebridge",
14
14
  "homebridge-plugin",
@@ -42,9 +42,11 @@
42
42
  "dependencies": {
43
43
  "@homebridge/plugin-ui-utils": "^2.0.2",
44
44
  "homebridge-lib": "^7.1.4",
45
- "node-persist": "^2.1.0"
45
+ "lodash.merge": "^4.6.2",
46
+ "node-persist": "^4.0.4"
46
47
  },
47
48
  "devDependencies": {
49
+ "@types/lodash.merge": "^4.6.9",
48
50
  "@types/node-persist": "^3.1.8",
49
51
  "esbuild": "^0.25.5",
50
52
  "eslint": "^9.27.0",
package/dist/index.js DELETED
@@ -1,148 +0,0 @@
1
- import storage from 'node-persist';
2
- import getVersion from './tools/version.js';
3
- const init = (api) => {
4
- api.registerAccessory('homebridge-dummy', 'DummySwitch', DummySwitch);
5
- };
6
- export default init;
7
- class DummySwitch {
8
- log;
9
- name;
10
- api;
11
- service;
12
- infoService;
13
- dimmer;
14
- stateful;
15
- reverse;
16
- brightness;
17
- random;
18
- resettable;
19
- time;
20
- brightnessStorageKey;
21
- disableLogging;
22
- timer = null;
23
- constructor(log, config, api) {
24
- this.log = log;
25
- this.name = config.name;
26
- this.dimmer = config.dimmer;
27
- this.reverse = config.reverse;
28
- this.stateful = config.stateful;
29
- this.brightness = config.brightness;
30
- this.random = config.random;
31
- this.resettable = config.resettable;
32
- this.time = config.time ? config.time : 1000;
33
- this.brightnessStorageKey = this.name + 'Brightness';
34
- this.disableLogging = config.disableLogging;
35
- this.api = api;
36
- let modelString;
37
- if (this.dimmer) {
38
- this.service = new api.hap.Service.Lightbulb(this.name);
39
- modelString = 'Dummy Dimmer';
40
- }
41
- else {
42
- this.service = new api.hap.Service.Switch(this.name);
43
- modelString = 'Dummy Switch';
44
- }
45
- this.infoService = new api.hap.Service.AccessoryInformation();
46
- this.infoService
47
- .setCharacteristic(api.hap.Characteristic.Manufacturer, 'Homebridge')
48
- .setCharacteristic(api.hap.Characteristic.Model, modelString)
49
- .setCharacteristic(api.hap.Characteristic.FirmwareRevision, getVersion())
50
- .setCharacteristic(api.hap.Characteristic.SerialNumber, 'Dummy-' + this.name.replace(/\s/g, '-'));
51
- const cacheDirectory = api.user.persistPath();
52
- storage.init({ dir: cacheDirectory, forgiveParseErrors: true }).then(() => {
53
- this.service.getCharacteristic(this.api.hap.Characteristic.On)
54
- .on("set" /* CharacteristicEventTypes.SET */, this._setOn.bind(this));
55
- if (this.dimmer) {
56
- this.service.getCharacteristic(this.api.hap.Characteristic.Brightness)
57
- .on("get" /* CharacteristicEventTypes.GET */, this._getBrightness.bind(this))
58
- .on("set" /* CharacteristicEventTypes.SET */, this._setBrightness.bind(this));
59
- }
60
- if (this.reverse) {
61
- this.service.setCharacteristic(this.api.hap.Characteristic.On, true);
62
- }
63
- if (this.stateful) {
64
- storage.getItem(this.name).then((cachedState) => {
65
- if ((cachedState === undefined) || (cachedState === false)) {
66
- this.service.setCharacteristic(this.api.hap.Characteristic.On, false);
67
- }
68
- else {
69
- this.service.setCharacteristic(this.api.hap.Characteristic.On, true);
70
- }
71
- });
72
- }
73
- if (this.dimmer) {
74
- storage.getItem(this.brightnessStorageKey).then((cachedBrightness) => {
75
- if ((cachedBrightness === undefined) || cachedBrightness === 0) {
76
- this.service.setCharacteristic(this.api.hap.Characteristic.On, false);
77
- this.service.setCharacteristic(this.api.hap.Characteristic.Brightness, 0);
78
- }
79
- else {
80
- this.service.setCharacteristic(this.api.hap.Characteristic.On, true);
81
- this.service.setCharacteristic(this.api.hap.Characteristic.Brightness, cachedBrightness);
82
- }
83
- });
84
- }
85
- });
86
- }
87
- getServices() {
88
- return [this.infoService, this.service];
89
- }
90
- randomize(time) {
91
- return Math.floor(Math.random() * (time + 1));
92
- }
93
- _getBrightness(callback) {
94
- if (!this.disableLogging) {
95
- this.log('Getting ' + 'brightness: ' + this.brightness);
96
- }
97
- callback(null, this.brightness);
98
- }
99
- _setBrightness(brightness, callback) {
100
- if (!this.disableLogging) {
101
- const msg = 'Setting brightness: ' + brightness;
102
- this.log(msg);
103
- }
104
- this.brightness = brightness;
105
- storage.setItem(this.brightnessStorageKey, brightness).then(() => {
106
- callback();
107
- });
108
- }
109
- ;
110
- _setOn(on, callback) {
111
- const delay = this.random ? this.randomize(this.time) : this.time;
112
- let msg = 'Setting switch to ' + on;
113
- if (this.random && !this.stateful) {
114
- if (on && !this.reverse || !on && this.reverse) {
115
- msg = msg + ' (random delay ' + delay + 'ms)';
116
- }
117
- }
118
- if (!this.disableLogging) {
119
- this.log(msg);
120
- }
121
- if (on && !this.reverse && !this.stateful) {
122
- if (this.resettable && this.timer) {
123
- clearTimeout(this.timer);
124
- }
125
- this.timer = setTimeout(() => {
126
- this.service.setCharacteristic(this.api.hap.Characteristic.On, false);
127
- }, delay);
128
- }
129
- else if (!on && this.reverse && !this.stateful) {
130
- if (this.resettable && this.timer) {
131
- clearTimeout(this.timer);
132
- }
133
- this.timer = setTimeout(() => {
134
- this.service.setCharacteristic(this.api.hap.Characteristic.On, true);
135
- }, delay);
136
- }
137
- if (this.stateful) {
138
- storage.setItem(this.name, on).then(() => {
139
- callback();
140
- });
141
- }
142
- else {
143
- callback();
144
- }
145
- }
146
- ;
147
- }
148
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
File without changes