homebridge-econet-rheem 1.5.19-beta.0 → 1.6.0-alpha.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +12 -4
  2. package/README.md +36 -6
  3. package/config.schema.json +117 -17
  4. package/dist/homebridge/platform.js +4 -1
  5. package/dist/homebridge/platform.js.map +1 -1
  6. package/dist/homebridge/settings.d.ts +3 -6
  7. package/dist/homebridge/settings.js +3 -6
  8. package/dist/homebridge/settings.js.map +1 -1
  9. package/dist/homebridge-ui/public/index.html +1 -1
  10. package/dist/i18n/en.d.ts +27 -12
  11. package/dist/i18n/en.js +28 -13
  12. package/dist/i18n/en.js.map +1 -1
  13. package/dist/i18n/i18n.d.ts +27 -12
  14. package/dist/i18n/template.d.ts +27 -12
  15. package/dist/i18n/zz.d.ts +27 -12
  16. package/dist/model/api.d.ts +14 -20
  17. package/dist/model/api.js +72 -210
  18. package/dist/model/api.js.map +1 -1
  19. package/dist/model/auth.d.ts +14 -6
  20. package/dist/model/auth.js +37 -35
  21. package/dist/model/auth.js.map +1 -1
  22. package/dist/model/equipment.d.ts +3 -1
  23. package/dist/model/equipment.js +6 -1
  24. package/dist/model/equipment.js.map +1 -1
  25. package/dist/model/mqtt.d.ts +33 -0
  26. package/dist/model/mqtt.js +221 -0
  27. package/dist/model/mqtt.js.map +1 -0
  28. package/dist/model/recoverySimulator.d.ts +2 -3
  29. package/dist/model/recoverySimulator.js +9 -13
  30. package/dist/model/recoverySimulator.js.map +1 -1
  31. package/dist/model/thermostat.d.ts +1 -1
  32. package/dist/model/thermostat.js +2 -2
  33. package/dist/model/thermostat.js.map +1 -1
  34. package/dist/model/types.d.ts +6 -2
  35. package/dist/model/types.js +0 -21
  36. package/dist/model/types.js.map +1 -1
  37. package/dist/model/waterHeater.d.ts +2 -4
  38. package/dist/model/waterHeater.js +7 -13
  39. package/dist/model/waterHeater.js.map +1 -1
  40. package/dist/tools/storage.d.ts +10 -3
  41. package/dist/tools/storage.js +68 -18
  42. package/dist/tools/storage.js.map +1 -1
  43. package/dist/tools/time.d.ts +1 -0
  44. package/dist/tools/time.js +1 -0
  45. package/dist/tools/time.js.map +1 -1
  46. package/package.json +2 -2
@@ -8,23 +8,17 @@ const DEFAULT_LOWER_LIMIT = 35;
8
8
  const DEFAULT_UPPER_LIMIT = 65;
9
9
  const DEFAULT_SETPOINT = 50;
10
10
  export class WaterHeater extends Equipment {
11
- persistPath;
12
11
  enabled = true;
13
12
  lower_limit = 0;
14
13
  upper_limit = 0;
15
14
  set_point = 0;
16
15
  availability_icon = null;
17
- recoverySimulator = null;
18
- static async create(api, data, persistPath) {
19
- const waterHeater = new WaterHeater(api, data, persistPath);
20
- waterHeater.recoverySimulator = await RecoverySimulator.create(waterHeater, () => {
21
- waterHeater.didUpdate();
22
- });
23
- return waterHeater;
24
- }
25
- constructor(api, data, persistPath) {
16
+ recoverySimulator;
17
+ constructor(api, data) {
26
18
  super(api, data);
27
- this.persistPath = persistPath;
19
+ this.recoverySimulator = new RecoverySimulator(this, () => {
20
+ this.didUpdate();
21
+ });
28
22
  this.running = data['@RUNNING'] ? data['@RUNNING']?.replace(/\s/g, '').length > 0 : false;
29
23
  this.enabled = data['@ENABLED']?.value === 1;
30
24
  this.lower_limit = data['@SETPOINT']?.constraints.lowerLimit ?? fromCelsius(DEFAULT_LOWER_LIMIT, this.units);
@@ -74,8 +68,8 @@ export class WaterHeater extends Equipment {
74
68
  this.recoverySimulator?.handleUpdate(this);
75
69
  super.didUpdate();
76
70
  }
77
- updateFromMQTT(data) {
78
- super.updateFromMQTT(data);
71
+ updateFromUserMQTT(data) {
72
+ super.updateFromUserMQTT(data);
79
73
  if (data['@ENABLED'] !== undefined) {
80
74
  this.enabled = getValue(data['@ENABLED']) === 1;
81
75
  this.log.ifVerbose(strings.debug.enabledState, this.deviceName, this.enabled);
@@ -1 +1 @@
1
- {"version":3,"file":"waterHeater.js","sourceRoot":"","sources":["../../src/model/waterHeater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"waterHeater.js","sourceRoot":"","sources":["../../src/model/waterHeater.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,12 @@
1
- export declare const STORAGE_KEY_AUTH = "auth";
1
+ export declare const STORAGE_KEY_USER_AUTH = "auth";
2
2
  export declare const STORAGE_KEY_MQTT = "mqtt";
3
3
  export declare const STORAGE_KEY_RECOVERY_RATES = "rates";
4
- export declare function storageGet(dir: string, key: string): Promise<string | null>;
5
- export declare function storageSet(dir: string, key: string, value: string): Promise<void>;
4
+ export declare class Storage {
5
+ static init(persistPath: string): Promise<void>;
6
+ static get(key: string, encryptionKey?: string | undefined): string | undefined;
7
+ static set(key: string, value: string, encryptionKey?: string | undefined): void;
8
+ private static initLegacy;
9
+ private static digest;
10
+ private static encrypt;
11
+ private static decrypt;
12
+ }
@@ -1,27 +1,77 @@
1
+ import crypto from 'crypto';
1
2
  import storage from 'node-persist';
2
- import { PLUGIN_NAME } from '../homebridge/settings.js';
3
- export const STORAGE_KEY_AUTH = 'auth';
3
+ import { PLATFORM_NAME, PLUGIN_NAME } from '../homebridge/settings.js';
4
+ export const STORAGE_KEY_USER_AUTH = 'auth';
4
5
  export const STORAGE_KEY_MQTT = 'mqtt';
5
6
  export const STORAGE_KEY_RECOVERY_RATES = 'rates';
6
- async function init(dir) {
7
- await storage.init({ dir: dir, forgiveParseErrors: true });
8
- }
9
- export async function storageGet(dir, key) {
10
- try {
11
- await init(dir);
12
- return await storage.get(`${PLUGIN_NAME}:${key}`);
7
+ const STORAGE = new Map();
8
+ export class Storage {
9
+ static async init(persistPath) {
10
+ await storage.init({ dir: persistPath, forgiveParseErrors: true });
11
+ await this.initLegacy();
12
+ const storageJson = await storage.get(PLATFORM_NAME);
13
+ if (storageJson === undefined) {
14
+ return;
15
+ }
16
+ const storageArray = JSON.parse(storageJson);
17
+ for (const [key, value] of storageArray) {
18
+ STORAGE.set(key, value);
19
+ }
13
20
  }
14
- catch (err) {
15
- return null;
21
+ static get(key, encryptionKey = undefined) {
22
+ let value = STORAGE.get(key);
23
+ if (value !== undefined && encryptionKey !== undefined) {
24
+ value = Storage.decrypt(value, encryptionKey);
25
+ }
26
+ return value;
16
27
  }
17
- }
18
- export async function storageSet(dir, key, value) {
19
- try {
20
- await init(dir);
21
- storage.set(`${PLUGIN_NAME}:${key}`, value);
28
+ static set(key, value, encryptionKey = undefined) {
29
+ if (encryptionKey !== undefined) {
30
+ value = Storage.encrypt(value, encryptionKey);
31
+ }
32
+ if (STORAGE.get(key) === value) {
33
+ return;
34
+ }
35
+ STORAGE.set(key, value);
36
+ const storageArray = Array.from(STORAGE.entries());
37
+ const storageJson = JSON.stringify(storageArray);
38
+ storage.set(PLATFORM_NAME, storageJson);
39
+ }
40
+ static async initLegacy() {
41
+ const auth = await storage.get(`${PLUGIN_NAME}:${STORAGE_KEY_USER_AUTH}`);
42
+ if (auth !== undefined) {
43
+ Storage.set(STORAGE_KEY_USER_AUTH, auth);
44
+ storage.removeItem(`${PLUGIN_NAME}:${STORAGE_KEY_USER_AUTH}`);
45
+ }
46
+ const recoveryRates = await storage.get(`${PLUGIN_NAME}:${STORAGE_KEY_RECOVERY_RATES}`);
47
+ if (recoveryRates !== undefined) {
48
+ Storage.set(STORAGE_KEY_RECOVERY_RATES, recoveryRates);
49
+ storage.removeItem(`${PLUGIN_NAME}:${STORAGE_KEY_RECOVERY_RATES}`);
50
+ }
51
+ }
52
+ static digest(encryptionKey) {
53
+ return crypto.createHash('sha256').update(encryptionKey).digest();
54
+ }
55
+ static encrypt(serialized, encryptionKey) {
56
+ const digest = Storage.digest(encryptionKey);
57
+ const iv = crypto.randomBytes(16);
58
+ const cipher = crypto.createCipheriv('aes-256-cbc', digest, iv);
59
+ const encrypted = Buffer.concat([cipher.update(serialized, 'utf8'), cipher.final()]);
60
+ return iv.toString('hex') + ':' + encrypted.toString('hex');
22
61
  }
23
- catch {
24
- // Nothing
62
+ static decrypt(final, encryptionKey) {
63
+ try {
64
+ const digest = Storage.digest(encryptionKey);
65
+ const [ivHex, encryptedHex] = final.split(':');
66
+ const iv = Buffer.from(ivHex, 'hex');
67
+ const encrypted = Buffer.from(encryptedHex, 'hex');
68
+ const decipher = crypto.createDecipheriv('aes-256-cbc', digest, iv);
69
+ const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]).toString('utf8');
70
+ return decrypted;
71
+ }
72
+ catch {
73
+ // nothing
74
+ }
25
75
  }
26
76
  }
27
77
  //# sourceMappingURL=storage.js.map
@@ -1 +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,gBAAgB,GAAG,MAAM,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACvC,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAElD,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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/tools/storage.ts"],"names":[],"mappings":"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"}
@@ -2,3 +2,4 @@ export declare const SECOND = 1000;
2
2
  export declare const MINUTE: number;
3
3
  export declare const HOUR: number;
4
4
  export declare const DAY: number;
5
+ export declare const DELAYS: number[];
@@ -2,4 +2,5 @@ export const SECOND = 1000;
2
2
  export const MINUTE = 60 * SECOND;
3
3
  export const HOUR = 60 * MINUTE;
4
4
  export const DAY = 24 * HOUR;
5
+ export const DELAYS = [5 * SECOND, 15 * SECOND, MINUTE, 2 * MINUTE, 5 * MINUTE];
5
6
  //# sourceMappingURL=time.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/tools/time.ts"],"names":[],"mappings":"AACA,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;AAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/tools/time.ts"],"names":[],"mappings":"AAAA,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;AAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "displayName": "Homebridge Econet Rheem",
5
5
  "description": "Homebridge plugin for control of Rheem and Ruud thermostats and water heaters",
6
6
  "type": "module",
7
- "version": "1.5.19-beta.0",
7
+ "version": "1.6.0-alpha.0",
8
8
  "homepage": "https://github.com/mpatfield/homebridge-econet-rheem#readme",
9
9
  "repository": {
10
10
  "type": "git",
@@ -54,7 +54,7 @@
54
54
  "@types/lodash.merge": "^4.6.9",
55
55
  "@types/node-persist": "^3.1.8",
56
56
  "@types/ws": "^8.18.1",
57
- "esbuild": "^0.25.5",
57
+ "esbuild": "^0.27.0",
58
58
  "eslint": "^9.34.0",
59
59
  "homebridge": "^2.0.0-beta.0",
60
60
  "jiti": "^2.4.2",