homebridge-dummy 1.1.0-beta.0 → 1.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +16 -14
  2. package/README.md +68 -10
  3. package/config.schema.json +218 -83
  4. package/dist/accessory/base.d.ts +6 -4
  5. package/dist/accessory/base.js +15 -17
  6. package/dist/accessory/base.js.map +1 -1
  7. package/dist/accessory/helpers.js +3 -0
  8. package/dist/accessory/helpers.js.map +1 -1
  9. package/dist/accessory/lock.d.ts +2 -1
  10. package/dist/accessory/lock.js +12 -5
  11. package/dist/accessory/lock.js.map +1 -1
  12. package/dist/accessory/onoff/onoff.d.ts +2 -1
  13. package/dist/accessory/onoff/onoff.js +10 -3
  14. package/dist/accessory/onoff/onoff.js.map +1 -1
  15. package/dist/accessory/position/position.d.ts +2 -1
  16. package/dist/accessory/position/position.js +11 -4
  17. package/dist/accessory/position/position.js.map +1 -1
  18. package/dist/accessory/thermostat.d.ts +28 -0
  19. package/dist/accessory/thermostat.js +147 -0
  20. package/dist/accessory/thermostat.js.map +1 -0
  21. package/dist/homebridge-ui/public/index.html +1 -1
  22. package/dist/i18n/en.d.ts +31 -1
  23. package/dist/i18n/en.js +36 -6
  24. package/dist/i18n/en.js.map +1 -1
  25. package/dist/i18n/i18n.d.ts +31 -1
  26. package/dist/i18n/template.d.ts +31 -1
  27. package/dist/i18n/zz.d.ts +31 -1
  28. package/dist/model/timer.d.ts +9 -5
  29. package/dist/model/timer.js +33 -30
  30. package/dist/model/timer.js.map +1 -1
  31. package/dist/model/trigger.d.ts +18 -0
  32. package/dist/model/trigger.js +92 -0
  33. package/dist/model/trigger.js.map +1 -0
  34. package/dist/model/types.d.ts +31 -0
  35. package/dist/model/types.js +18 -0
  36. package/dist/model/types.js.map +1 -1
  37. package/dist/tools/storage.d.ts +1 -0
  38. package/dist/tools/storage.js +1 -0
  39. package/dist/tools/storage.js.map +1 -1
  40. package/dist/tools/temperature.d.ts +3 -0
  41. package/dist/tools/temperature.js +14 -0
  42. package/dist/tools/temperature.js.map +1 -0
  43. package/dist/tools/time.d.ts +5 -0
  44. package/dist/tools/time.js +15 -0
  45. package/dist/tools/time.js.map +1 -0
  46. package/package.json +3 -1
@@ -7,6 +7,7 @@ export declare enum AccessoryType {
7
7
  LockMechanism = "LockMechanism",
8
8
  Outlet = "Outlet",
9
9
  Switch = "Switch",
10
+ Thermostat = "Thermostat",
10
11
  Window = "Window",
11
12
  WindowCovering = "WindowCovering"
12
13
  }
@@ -36,6 +37,12 @@ export declare enum DefaultPosition {
36
37
  OPEN = "open",
37
38
  CLOSED = "closed"
38
39
  }
40
+ export declare enum DefaultThermostatState {
41
+ OFF = "off",
42
+ COOL = "cool",
43
+ HEAT = "heat",
44
+ AUTO = "auto"
45
+ }
39
46
  export type LegacyAccessoryConfig = AccessoryConfig & {
40
47
  name: string;
41
48
  dimmer?: boolean;
@@ -56,18 +63,34 @@ export declare enum TimeUnits {
56
63
  MINUTES = "MINUTES",
57
64
  HOURS = "HOURS"
58
65
  }
66
+ export declare enum TriggerType {
67
+ INTERVAL = "INTERVAL",
68
+ CRON = "CRON"
69
+ }
70
+ export declare enum TemperatureUnits {
71
+ CELSIUS = "C",
72
+ FAHRENHEIT = "F"
73
+ }
59
74
  export type Assertable = {};
60
75
  export type TimerConfig = Assertable & {
61
76
  delay: number;
62
77
  units: TimeUnits;
63
78
  random?: boolean;
64
79
  };
80
+ export type TriggerConfig = Assertable & {
81
+ type: TriggerType;
82
+ interval?: number;
83
+ units?: TimeUnits;
84
+ random?: boolean;
85
+ cron?: string;
86
+ };
65
87
  export type DummyConfig = {
66
88
  id: string;
67
89
  name: string;
68
90
  type: AccessoryType;
69
91
  groupName?: string;
70
92
  timer?: TimerConfig;
93
+ trigger?: TriggerConfig;
71
94
  resetOnRestart?: boolean;
72
95
  disableLogging?: boolean;
73
96
  };
@@ -87,6 +110,14 @@ export type LockConfig = DummyConfig & {
87
110
  commandLock?: string;
88
111
  commandUnlock?: string;
89
112
  };
113
+ export type ThermostatConfig = DummyConfig & {
114
+ temperatureUnits?: TemperatureUnits;
115
+ defaultThermostatState?: DefaultThermostatState;
116
+ defaultTemperature?: number;
117
+ commandOn?: string;
118
+ commandOff?: string;
119
+ commandTemperature?: string;
120
+ };
90
121
  export type PositionConfig = DummyConfig & {
91
122
  defaultPosition?: DefaultPosition;
92
123
  commandOpen?: string;
@@ -5,6 +5,7 @@ export var AccessoryType;
5
5
  AccessoryType["LockMechanism"] = "LockMechanism";
6
6
  AccessoryType["Outlet"] = "Outlet";
7
7
  AccessoryType["Switch"] = "Switch";
8
+ AccessoryType["Thermostat"] = "Thermostat";
8
9
  AccessoryType["Window"] = "Window";
9
10
  AccessoryType["WindowCovering"] = "WindowCovering";
10
11
  })(AccessoryType || (AccessoryType = {}));
@@ -38,10 +39,27 @@ export var DefaultPosition;
38
39
  DefaultPosition["OPEN"] = "open";
39
40
  DefaultPosition["CLOSED"] = "closed";
40
41
  })(DefaultPosition || (DefaultPosition = {}));
42
+ export var DefaultThermostatState;
43
+ (function (DefaultThermostatState) {
44
+ DefaultThermostatState["OFF"] = "off";
45
+ DefaultThermostatState["COOL"] = "cool";
46
+ DefaultThermostatState["HEAT"] = "heat";
47
+ DefaultThermostatState["AUTO"] = "auto";
48
+ })(DefaultThermostatState || (DefaultThermostatState = {}));
41
49
  export var TimeUnits;
42
50
  (function (TimeUnits) {
43
51
  TimeUnits["SECONDS"] = "SECONDS";
44
52
  TimeUnits["MINUTES"] = "MINUTES";
45
53
  TimeUnits["HOURS"] = "HOURS";
46
54
  })(TimeUnits || (TimeUnits = {}));
55
+ export var TriggerType;
56
+ (function (TriggerType) {
57
+ TriggerType["INTERVAL"] = "INTERVAL";
58
+ TriggerType["CRON"] = "CRON";
59
+ })(TriggerType || (TriggerType = {}));
60
+ export var TemperatureUnits;
61
+ (function (TemperatureUnits) {
62
+ TemperatureUnits["CELSIUS"] = "C";
63
+ TemperatureUnits["FAHRENHEIT"] = "F";
64
+ })(TemperatureUnits || (TemperatureUnits = {}));
47
65
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":"AAKA,MAAM,CAAN,IAAY,aAQX;AARD,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,wCAAuB,CAAA;IACvB,gDAA+B,CAAA;IAC/B,kCAAiB,CAAA;IACjB,kCAAiB,CAAA;IACjB,kCAAiB,CAAA;IACjB,kDAAiC,CAAA;AACnC,CAAC,EARW,aAAa,KAAb,aAAa,QAQxB;AAED,MAAM,CAAN,IAAY,UAQX;AARD,WAAY,UAAU;IACpB,yDAA2C,CAAA;IAC3C,2DAA6C,CAAA;IAC7C,6CAA+B,CAAA;IAC/B,uCAAyB,CAAA;IACzB,2CAA6B,CAAA;IAC7B,iDAAmC,CAAA;IACnC,yCAA2B,CAAA;AAC7B,CAAC,EARW,UAAU,KAAV,UAAU,QAQrB;AAED,MAAM,CAAN,IAAY,oBAQX;AARD,WAAY,oBAAoB;IAC9B,uEAA+C,CAAA;IAC/C,yEAAiD,CAAA;IACjD,iEAAyC,CAAA;IACzC,qDAA6B,CAAA;IAC7B,yDAAiC,CAAA;IACjC,+DAAuC,CAAA;IACvC,uDAA+B,CAAA;AACjC,CAAC,EARW,oBAAoB,KAApB,oBAAoB,QAQ/B;AAED,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,yCAAqB,CAAA;AACvB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,oCAAiB,CAAA;AACnB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AAmBD,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,gCAAmB,CAAA;IACnB,gCAAmB,CAAA;IACnB,4BAAe,CAAA;AACjB,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":"AAKA,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,wCAAuB,CAAA;IACvB,gDAA+B,CAAA;IAC/B,kCAAiB,CAAA;IACjB,kCAAiB,CAAA;IACjB,0CAAyB,CAAA;IACzB,kCAAiB,CAAA;IACjB,kDAAiC,CAAA;AACnC,CAAC,EATW,aAAa,KAAb,aAAa,QASxB;AAED,MAAM,CAAN,IAAY,UAQX;AARD,WAAY,UAAU;IACpB,yDAA2C,CAAA;IAC3C,2DAA6C,CAAA;IAC7C,6CAA+B,CAAA;IAC/B,uCAAyB,CAAA;IACzB,2CAA6B,CAAA;IAC7B,iDAAmC,CAAA;IACnC,yCAA2B,CAAA;AAC7B,CAAC,EARW,UAAU,KAAV,UAAU,QAQrB;AAED,MAAM,CAAN,IAAY,oBAQX;AARD,WAAY,oBAAoB;IAC9B,uEAA+C,CAAA;IAC/C,yEAAiD,CAAA;IACjD,iEAAyC,CAAA;IACzC,qDAA6B,CAAA;IAC7B,yDAAiC,CAAA;IACjC,+DAAuC,CAAA;IACvC,uDAA+B,CAAA;AACjC,CAAC,EARW,oBAAoB,KAApB,oBAAoB,QAQ/B;AAED,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,yCAAqB,CAAA;AACvB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,oCAAiB,CAAA;AACnB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AAED,MAAM,CAAN,IAAY,sBAKX;AALD,WAAY,sBAAsB;IAChC,qCAAW,CAAA;IACX,uCAAa,CAAA;IACb,uCAAa,CAAA;IACb,uCAAa,CAAA;AACf,CAAC,EALW,sBAAsB,KAAtB,sBAAsB,QAKjC;AAmBD,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,gCAAmB,CAAA;IACnB,gCAAmB,CAAA;IACnB,4BAAe,CAAA;AACjB,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,4BAAa,CAAA;AACf,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB;AAED,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iCAAa,CAAA;IACb,oCAAgB,CAAA;AAClB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B"}
@@ -1,4 +1,5 @@
1
1
  export declare const STORAGE_KEY_SUFFIX_DEFAULT_STATE = "DefaultState";
2
2
  export declare const STORAGE_KEY_SUFFIX_DEFAULT_BRIGHTNESS = "Brightness";
3
+ export declare const STORAGE_KEY_SUFFIX_DEFAULT_TEMPERATURE = "Temperature";
3
4
  export declare function storageGet(dir: string, key: string): Promise<any>;
4
5
  export declare function storageSet(dir: string, key: string, value: any): Promise<void>;
@@ -1,6 +1,7 @@
1
1
  import storage from 'node-persist';
2
2
  export const STORAGE_KEY_SUFFIX_DEFAULT_STATE = 'DefaultState';
3
3
  export const STORAGE_KEY_SUFFIX_DEFAULT_BRIGHTNESS = 'Brightness';
4
+ export const STORAGE_KEY_SUFFIX_DEFAULT_TEMPERATURE = 'Temperature';
4
5
  async function init(dir) {
5
6
  await storage.init({ dir: dir, forgiveParseErrors: true });
6
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/tools/storage.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,MAAM,gCAAgC,GAAG,cAAc,CAAC;AAC/D,MAAM,CAAC,MAAM,qCAAqC,GAAG,YAAY,CAAC;AAElE,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,8DAA8D;AAC9D,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,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU;IACZ,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,GAAW,EAAE,KAAU;IACnE,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,UAAU;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/tools/storage.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,MAAM,gCAAgC,GAAG,cAAc,CAAC;AAC/D,MAAM,CAAC,MAAM,qCAAqC,GAAG,YAAY,CAAC;AAClE,MAAM,CAAC,MAAM,sCAAsC,GAAG,aAAa,CAAC;AAEpE,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,8DAA8D;AAC9D,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,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU;IACZ,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,GAAW,EAAE,KAAU;IACnE,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,UAAU;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TemperatureUnits } from '../model/types.js';
2
+ export declare const toCelsius: (temp: number, units?: TemperatureUnits) => number;
3
+ export declare const fromCelsius: (temp: number, units?: TemperatureUnits) => number;
@@ -0,0 +1,14 @@
1
+ import { TemperatureUnits } from '../model/types.js';
2
+ const fahrenheitToCelsius = (fahrenheit) => {
3
+ return Number(((fahrenheit - 32) * 5 / 9).toFixed(1));
4
+ };
5
+ const celsiusToFahrenheit = (celsius) => {
6
+ return Math.round((celsius * 9 / 5) + 32);
7
+ };
8
+ export const toCelsius = (temp, units) => {
9
+ return units === TemperatureUnits.FAHRENHEIT ? fahrenheitToCelsius(temp) : temp;
10
+ };
11
+ export const fromCelsius = (temp, units) => {
12
+ return units === TemperatureUnits.FAHRENHEIT ? celsiusToFahrenheit(temp) : temp;
13
+ };
14
+ //# sourceMappingURL=temperature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temperature.js","sourceRoot":"","sources":["../../src/tools/temperature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAU,EAAE;IACzD,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC;AACF,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAU,EAAE;IACtD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,KAAwB,EAAU,EAAE;IAC1E,OAAO,KAAK,KAAK,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,KAAwB,EAAU,EAAE;IAC5E,OAAO,KAAK,KAAK,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClF,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { TimeUnits } from '../model/types.js';
2
+ export declare const SECOND = 1000;
3
+ export declare const MINUTE: number;
4
+ export declare const HOUR: number;
5
+ export declare function toMilliseconds(value: number, units: TimeUnits): number;
@@ -0,0 +1,15 @@
1
+ import { TimeUnits } from '../model/types.js';
2
+ export const SECOND = 1000;
3
+ export const MINUTE = 60 * SECOND;
4
+ export const HOUR = 60 * MINUTE;
5
+ export function toMilliseconds(value, units) {
6
+ switch (units) {
7
+ case TimeUnits.SECONDS:
8
+ return value * SECOND;
9
+ case TimeUnits.MINUTES:
10
+ return value * MINUTE;
11
+ case TimeUnits.HOURS:
12
+ return value * HOUR;
13
+ }
14
+ }
15
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/tools/time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;AAC3B,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC;AAClC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;AAEhC,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,KAAgB;IAC5D,QAAO,KAAK,EAAE,CAAC;QACf,KAAK,SAAS,CAAC,OAAO;YACpB,OAAO,KAAK,GAAG,MAAM,CAAC;QACxB,KAAK,SAAS,CAAC,OAAO;YACpB,OAAO,KAAK,GAAG,MAAM,CAAC;QACxB,KAAK,SAAS,CAAC,KAAK;YAClB,OAAO,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "displayName": "Homebridge Dummy",
5
5
  "description": "Dummy devices for Homebridge",
6
6
  "type": "module",
7
- "version": "1.1.0-beta.0",
7
+ "version": "1.1.0-beta.2",
8
8
  "homepage": "https://github.com/mpatfield/homebridge-dummy#readme",
9
9
  "repository": {
10
10
  "type": "git",
@@ -39,6 +39,7 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "@homebridge/plugin-ui-utils": "^2.0.2",
42
+ "cron": "^4.3.2",
42
43
  "homebridge-lib": "^7.1.4",
43
44
  "lodash.merge": "^4.6.2",
44
45
  "node-persist": "^4.0.4"
@@ -49,6 +50,7 @@
49
50
  "esbuild": "^0.25.5",
50
51
  "eslint": "^9.27.0",
51
52
  "homebridge": "^2.0.0-beta.0",
53
+ "jiti": "^2.5.1",
52
54
  "rimraf": "^6.0.1",
53
55
  "ts-node": "^10.9.2",
54
56
  "typescript-eslint": "^8.35.1"