homebridge-econet-rheem 1.5.11 → 1.5.12-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.
Files changed (54) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/homebridge/platform.d.ts +4 -1
  3. package/dist/homebridge/platform.js +57 -59
  4. package/dist/homebridge/platform.js.map +1 -1
  5. package/dist/homebridge/thermostatAccessory.js +8 -6
  6. package/dist/homebridge/thermostatAccessory.js.map +1 -1
  7. package/dist/homebridge/waterHeaterAccessory.js +7 -5
  8. package/dist/homebridge/waterHeaterAccessory.js.map +1 -1
  9. package/dist/lang/en.d.ts +52 -0
  10. package/dist/lang/en.js +64 -0
  11. package/dist/lang/en.js.map +1 -0
  12. package/dist/model/api.d.ts +18 -30
  13. package/dist/model/api.js +244 -196
  14. package/dist/model/api.js.map +1 -1
  15. package/dist/model/auth.d.ts +11 -0
  16. package/dist/model/auth.js +52 -0
  17. package/dist/model/auth.js.map +1 -0
  18. package/dist/model/{enums.d.ts → constants.d.ts} +4 -0
  19. package/dist/model/{enums.js → constants.js} +6 -1
  20. package/dist/model/constants.js.map +1 -0
  21. package/dist/model/equipment.d.ts +8 -8
  22. package/dist/model/equipment.js +15 -29
  23. package/dist/model/equipment.js.map +1 -1
  24. package/dist/model/recoverySimulator.d.ts +1 -1
  25. package/dist/model/recoverySimulator.js +7 -8
  26. package/dist/model/recoverySimulator.js.map +1 -1
  27. package/dist/model/thermostat.d.ts +5 -5
  28. package/dist/model/thermostat.js +62 -70
  29. package/dist/model/thermostat.js.map +1 -1
  30. package/dist/model/types.d.ts +82 -0
  31. package/dist/model/types.js +12 -0
  32. package/dist/model/types.js.map +1 -0
  33. package/dist/model/waterHeater.d.ts +6 -4
  34. package/dist/model/waterHeater.js +34 -37
  35. package/dist/model/waterHeater.js.map +1 -1
  36. package/dist/tools/storage.d.ts +3 -0
  37. package/dist/tools/storage.js +22 -0
  38. package/dist/tools/storage.js.map +1 -0
  39. package/dist/tools/temperature.d.ts +3 -0
  40. package/dist/tools/temperature.js +14 -0
  41. package/dist/tools/temperature.js.map +1 -0
  42. package/dist/tools/time.d.ts +4 -0
  43. package/dist/tools/time.js +5 -0
  44. package/dist/tools/time.js.map +1 -0
  45. package/dist/tools/version.d.ts +1 -0
  46. package/dist/tools/version.js +18 -0
  47. package/dist/tools/version.js.map +1 -0
  48. package/example_responses/auth.json +45 -0
  49. package/example_responses/locations.json +1656 -0
  50. package/package.json +3 -1
  51. package/dist/model/enums.js.map +0 -1
  52. package/dist/model/utils.d.ts +0 -9
  53. package/dist/model/utils.js +0 -53
  54. package/dist/model/utils.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ import crypto from 'crypto';
2
+ import { safeGetItem, safeSetItem } from '../tools/storage.js';
3
+ const STORAGE_AUTH_KEY = 'auth';
4
+ export class Auth {
5
+ data;
6
+ constructor(data) {
7
+ this.data = data;
8
+ }
9
+ get token() {
10
+ return this.data.user_token;
11
+ }
12
+ get userId() {
13
+ return this.data.user_id;
14
+ }
15
+ get accountId() {
16
+ return this.data.options.account_id;
17
+ }
18
+ static digest(encryptionKey) {
19
+ return crypto.createHash('sha256').update(encryptionKey).digest();
20
+ }
21
+ save(filePath, encryptionKey) {
22
+ const serailzed = JSON.stringify({
23
+ data: this.data,
24
+ });
25
+ const digest = Auth.digest(encryptionKey);
26
+ const iv = crypto.randomBytes(16);
27
+ const cipher = crypto.createCipheriv('aes-256-cbc', digest, iv);
28
+ const encrypted = Buffer.concat([cipher.update(serailzed, 'utf8'), cipher.final()]);
29
+ const final = iv.toString('hex') + ':' + encrypted.toString('hex');
30
+ safeSetItem(filePath, STORAGE_AUTH_KEY, final);
31
+ }
32
+ static load(filePath, encryptionKey) {
33
+ const final = safeGetItem(filePath, STORAGE_AUTH_KEY);
34
+ if (!final) {
35
+ return null;
36
+ }
37
+ try {
38
+ const digest = Auth.digest(encryptionKey);
39
+ const [ivHex, encryptedHex] = final.split(':');
40
+ const iv = Buffer.from(ivHex, 'hex');
41
+ const encrypted = Buffer.from(encryptedHex, 'hex');
42
+ const decipher = crypto.createDecipheriv('aes-256-cbc', digest, iv);
43
+ const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]).toString('utf8');
44
+ const obj = JSON.parse(decrypted);
45
+ return new Auth(obj.data);
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/model/auth.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,OAAO,IAAI;IAGI;IADnB,YACmB,IAAe;QAAf,SAAI,GAAJ,IAAI,CAAW;IAChC,CAAC;IAEH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACtC,CAAC;IAEO,MAAM,CAAC,MAAM,CAAC,aAAqB;QACzC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,QAAgB,EAAE,aAAqB;QAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEnE,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,QAAgB,EAAE,aAAqB;QAEjD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YAEH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEjG,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAyC,CAAC;YAC1E,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -1,3 +1,7 @@
1
+ export declare enum EquipmentType {
2
+ THERMOSTAT = "HVAC",
3
+ WATER_HEATER = "WH"
4
+ }
1
5
  export declare enum ThermostatOperationMode {
2
6
  OFF = 1,
3
7
  HEATING = 2,
@@ -1,3 +1,8 @@
1
+ export var EquipmentType;
2
+ (function (EquipmentType) {
3
+ EquipmentType["THERMOSTAT"] = "HVAC";
4
+ EquipmentType["WATER_HEATER"] = "WH";
5
+ })(EquipmentType || (EquipmentType = {}));
1
6
  export var ThermostatOperationMode;
2
7
  (function (ThermostatOperationMode) {
3
8
  ThermostatOperationMode[ThermostatOperationMode["OFF"] = 1] = "OFF";
@@ -13,4 +18,4 @@ export var TemperatureUnits;
13
18
  TemperatureUnits[TemperatureUnits["FAHRENHEIT"] = 1] = "FAHRENHEIT";
14
19
  TemperatureUnits[TemperatureUnits["CELSIUS"] = 2] = "CELSIUS";
15
20
  })(TemperatureUnits || (TemperatureUnits = {}));
16
- //# sourceMappingURL=enums.js.map
21
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/model/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,MAAM,CAAN,IAAY,uBAQX;AARD,WAAY,uBAAuB;IACjC,mEAAO,CAAA;IACP,2EAAW,CAAA;IACX,2EAAW,CAAA;IACX,qEAAQ,CAAA;IACR,6EAAY,CAAA;IACZ,yFAAkB,CAAA;IAClB,4EAAY,CAAA;AACd,CAAC,EARW,uBAAuB,KAAvB,uBAAuB,QAQlC;AAED,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,mEAAc,CAAA;IACd,6DAAW,CAAA;AACb,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B"}
@@ -1,24 +1,24 @@
1
1
  import { EconetApi } from './api.js';
2
- import { TemperatureUnits } from './enums.js';
2
+ import { EquipmentType, TemperatureUnits } from './constants.js';
3
+ import { EquipmentData, MQTTData } from './types.js';
3
4
  export declare abstract class Equipment {
5
+ readonly api: EconetApi;
4
6
  private device_id?;
5
7
  private serial_number?;
6
8
  private device_name?;
7
- private alertCount;
9
+ private alert_count;
8
10
  private temp_units;
9
- private running;
10
- protected _api: EconetApi;
11
+ protected running: boolean;
11
12
  private _onUpdateCallback;
12
- constructor(api: EconetApi);
13
+ constructor(api: EconetApi, data: EquipmentData);
14
+ abstract get type(): EquipmentType;
13
15
  get deviceId(): string;
14
16
  get serialNumber(): string;
15
17
  get deviceName(): string;
16
18
  get hasAlert(): boolean;
17
19
  get units(): TemperatureUnits;
18
- protected abstract get runningKey(): string;
19
20
  get isRunning(): boolean;
20
21
  setOnUpdateCallback(callback: (serialNumber: string) => void): void;
21
22
  protected didUpdate(): void;
22
- protected updateFromREST(update: any): void;
23
- updateFromMQTT(update: any): void;
23
+ updateFromMQTT(update: MQTTData): void;
24
24
  }
@@ -1,15 +1,21 @@
1
- import { TemperatureUnits } from './enums.js';
1
+ import { TemperatureUnits } from './constants.js';
2
+ import strings from '../lang/en.js';
2
3
  export class Equipment {
4
+ api;
3
5
  device_id;
4
6
  serial_number;
5
7
  device_name;
6
- alertCount = 0;
8
+ alert_count = 0;
7
9
  temp_units = TemperatureUnits.CELSIUS;
8
10
  running = false;
9
- _api;
10
11
  _onUpdateCallback = null;
11
- constructor(api) {
12
- this._api = api;
12
+ constructor(api, data) {
13
+ this.api = api;
14
+ this.device_id = data.device_name;
15
+ this.serial_number = data.serial_number;
16
+ this.device_name = data['@NAME'].value;
17
+ this.alert_count = data['@ALERTCOUNT'];
18
+ this.temp_units = data['@SETPOINT'].constraints.units.includes('F') ? TemperatureUnits.FAHRENHEIT : TemperatureUnits.CELSIUS;
13
19
  }
14
20
  get deviceId() {
15
21
  return this.device_id || 'undefined';
@@ -21,7 +27,7 @@ export class Equipment {
21
27
  return this.device_name || 'undefined';
22
28
  }
23
29
  get hasAlert() {
24
- return this.alertCount > 0;
30
+ return this.alert_count > 0;
25
31
  }
26
32
  get units() {
27
33
  return this.temp_units;
@@ -37,30 +43,10 @@ export class Equipment {
37
43
  this._onUpdateCallback(this.serialNumber);
38
44
  }
39
45
  }
40
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
- updateFromREST(update) {
42
- this.device_id = update.device_name;
43
- this.serial_number = update.serial_number;
44
- this.device_name = update['@NAME'].value ?? '';
45
- if ('@ALERTCOUNT' in update) {
46
- this.alertCount = update['@ALERTCOUNT'] ?? 0;
47
- }
48
- if ('@SETPOINT' in update) {
49
- this.temp_units = update['@SETPOINT'].constraints.units.includes('F') ? TemperatureUnits.FAHRENHEIT : TemperatureUnits.CELSIUS;
50
- }
51
- if (this.runningKey in update) {
52
- this.running = update[this.runningKey].replace(/\s/g, '').length > 0;
53
- }
54
- }
55
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
46
  updateFromMQTT(update) {
57
- if ('@ALERTCOUNT' in update) {
58
- this.alertCount = update['@ALERTCOUNT'] ?? 0;
59
- this._api.log.debug(`${this.deviceName} alert count = ${this.alertCount}`);
60
- }
61
- if (this.runningKey in update) {
62
- this.running = update[this.runningKey].replace(/\s/g, '').length > 0;
63
- this._api.log.debug(`${this.deviceName} running = ${this.running}`);
47
+ if (update['@ALERTCOUNT']) {
48
+ this.alert_count = update['@ALERTCOUNT'];
49
+ this.api.log.debug(strings.alertCount, this.deviceName, this.alert_count);
64
50
  }
65
51
  }
66
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"equipment.js","sourceRoot":"","sources":["../../src/model/equipment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"equipment.js","sourceRoot":"","sources":["../../src/model/equipment.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,OAAO,MAAM,eAAe,CAAC;AAEpC,MAAM,OAAgB,SAAS;IAUR;IATb,SAAS,CAAiB;IAC1B,aAAa,CAAiB;IAC9B,WAAW,CAAiB;IAC5B,WAAW,GAAW,CAAC,CAAC;IACxB,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC;IACpC,OAAO,GAAY,KAAK,CAAC;IAE3B,iBAAiB,GAA4C,IAAI,CAAC;IAE1E,YAAqB,GAAc,EAAE,IAAmB;QAAnC,QAAG,GAAH,GAAG,CAAW;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC;IAC/H,CAAC;IAID,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC;IACvC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC;IAC3C,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;IACzC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,mBAAmB,CAAC,QAAwC;QAC1D,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;IACpC,CAAC;IAES,SAAS;QACjB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,cAAc,CAAC,MAAgB;QAE7B,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;CACF"}
@@ -2,8 +2,8 @@ import { EconetApi } from './api.js';
2
2
  import { WaterHeater } from './waterHeater.js';
3
3
  export declare class RecoverySimulator {
4
4
  private readonly api;
5
+ readonly waterHeater: WaterHeater;
5
6
  private readonly onUpdate;
6
- private readonly recoveryRatesFilePath;
7
7
  private readonly minRecoveryRate;
8
8
  private readonly defaultRecoveryRate;
9
9
  private recoveryRates;
@@ -1,16 +1,15 @@
1
- import path from 'path';
2
- import { TemperatureUnits } from './enums.js';
3
- import { HOUR, MINUTE, safeGetItem, safeSetItem } from './utils.js';
1
+ import { TemperatureUnits } from './constants.js';
2
+ import { HOUR, MINUTE } from '../tools/time.js';
3
+ import { safeGetItem, safeSetItem } from '../tools/storage.js';
4
4
  const VERSION = 1;
5
- const RECOVERY_FILE_NAME = 'econetWHRecoveryRates.json';
6
5
  // in degrees Celsius per hour
7
6
  const DEFAULT_RECOVERY_RATE = 20;
8
7
  const MINIMUM_RECOVERY_RATE = 1;
9
8
  const RECOVERY_TIMER_INTERVAL = 2 * MINUTE;
10
9
  export class RecoverySimulator {
11
10
  api;
11
+ waterHeater;
12
12
  onUpdate;
13
- recoveryRatesFilePath;
14
13
  minRecoveryRate;
15
14
  defaultRecoveryRate;
16
15
  recoveryRates;
@@ -24,13 +23,13 @@ export class RecoverySimulator {
24
23
  recoveryStartTemp = null;
25
24
  constructor(api, waterHeater, onUpdate) {
26
25
  this.api = api;
26
+ this.waterHeater = waterHeater;
27
27
  this.onUpdate = onUpdate;
28
28
  this.serialNumber = waterHeater.serialNumber;
29
29
  this.availability = waterHeater.availability;
30
30
  this.setPoint = waterHeater.setPoint;
31
31
  this.previousSetPoint = this.setPoint;
32
32
  this.simulatedTemp = this.setPoint;
33
- this.recoveryRatesFilePath = path.join(api.storagePath, RECOVERY_FILE_NAME);
34
33
  this.minRecoveryRate = MINIMUM_RECOVERY_RATE * (waterHeater.units === TemperatureUnits.FAHRENHEIT ? 1.8 : 1);
35
34
  this.defaultRecoveryRate = DEFAULT_RECOVERY_RATE * (waterHeater.units === TemperatureUnits.FAHRENHEIT ? 1.8 : 1);
36
35
  this.recoveryRates = this._loadRecoveryRates() ?? [this.defaultRecoveryRate];
@@ -124,12 +123,12 @@ export class RecoverySimulator {
124
123
  }
125
124
  _loadRecoveryRates() {
126
125
  const key = `${VERSION}_${this.serialNumber}`;
127
- const stored = safeGetItem(this.recoveryRatesFilePath, key);
126
+ const stored = safeGetItem(this.waterHeater.storageFilePath, key);
128
127
  return stored ? JSON.parse(stored) : null;
129
128
  }
130
129
  _saveRecoveryRates() {
131
130
  const key = `${VERSION}_${this.serialNumber}`;
132
- safeSetItem(this.recoveryRatesFilePath, key, JSON.stringify(this.recoveryRates));
131
+ safeSetItem(this.waterHeater.storageFilePath, key, JSON.stringify(this.recoveryRates));
133
132
  }
134
133
  }
135
134
  //# sourceMappingURL=recoverySimulator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recoverySimulator.js","sourceRoot":"","sources":["../../src/model/recoverySimulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recoverySimulator.js","sourceRoot":"","sources":["../../src/model/recoverySimulator.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { EconetApi } from './api.js';
2
- import { ThermostatOperationMode } from './enums.js';
2
+ import { EquipmentType, ThermostatOperationMode } from './constants.js';
3
3
  import { Equipment } from './equipment.js';
4
+ import { MQTTData, ThermostatData } from './types.js';
4
5
  export declare class Thermostat extends Equipment {
5
6
  private current_humidity;
6
7
  private current_temp;
@@ -13,8 +14,8 @@ export declare class Thermostat extends Equipment {
13
14
  private dead_band;
14
15
  private modes;
15
16
  private current_mode;
16
- constructor(api: EconetApi, restUpdate: any);
17
- protected get runningKey(): string;
17
+ constructor(api: EconetApi, data: ThermostatData);
18
+ get type(): EquipmentType;
18
19
  get humidity(): number;
19
20
  get currentTemp(): number;
20
21
  get coolSetPoint(): number;
@@ -23,8 +24,7 @@ export declare class Thermostat extends Equipment {
23
24
  get heatSetPointLimits(): [number, number];
24
25
  get deadband(): number;
25
26
  get mode(): ThermostatOperationMode;
26
- protected updateFromREST(update: any): void;
27
- updateFromMQTT(update: any): void;
27
+ updateFromMQTT(data: MQTTData): void;
28
28
  private _modeFromString;
29
29
  private _stringFromMode;
30
30
  setMode(mode: ThermostatOperationMode): void;
@@ -1,5 +1,7 @@
1
- import { ThermostatOperationMode } from './enums.js';
1
+ import { EquipmentType, ThermostatOperationMode } from './constants.js';
2
2
  import { Equipment } from './equipment.js';
3
+ import strings from '../lang/en.js';
4
+ import { getValue } from './types.js';
3
5
  export class Thermostat extends Equipment {
4
6
  current_humidity = 0;
5
7
  current_temp = 0;
@@ -12,13 +14,33 @@ export class Thermostat extends Equipment {
12
14
  dead_band = 0;
13
15
  modes = new Map();
14
16
  current_mode = ThermostatOperationMode.UNKNOWN;
15
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
- constructor(api, restUpdate) {
17
- super(api);
18
- this.updateFromREST(restUpdate);
17
+ constructor(api, data) {
18
+ super(api, data);
19
+ this.running = data['@RUNNINGSTATUS'].replace(/\s/g, '').length > 0;
20
+ this.current_humidity = data['@HUMIDITY'].value;
21
+ this.current_temp = data['@SETPOINT'].value || 70;
22
+ this.cool_lower_limit = data['@COOLSETPOINT'].constraints.lowerLimit;
23
+ this.cool_upper_limit = data['@COOLSETPOINT'].constraints.upperLimit;
24
+ this.cool_set_point = data['@COOLSETPOINT'].value;
25
+ this.heat_lower_limit = data['@HEATSETPOINT'].constraints.lowerLimit || 50;
26
+ this.heat_upper_limit = data['@HEATSETPOINT'].constraints.upperLimit || 90;
27
+ this.heat_set_point = data['@HEATSETPOINT'].value || 70;
28
+ this.dead_band = data['@DEADBAND'].value || 0;
29
+ const text_modes = data['@MODE'].constraints.enumText;
30
+ this.modes.clear();
31
+ if (text_modes) {
32
+ text_modes.forEach((textMode, index) => {
33
+ const mode = this._modeFromString(textMode);
34
+ if (mode !== ThermostatOperationMode.UNKNOWN) {
35
+ this.modes.set(index, mode);
36
+ }
37
+ });
38
+ }
39
+ this.current_mode = this.modes.get(data['@MODE'].value) ?? ThermostatOperationMode.UNKNOWN;
40
+ this.didUpdate();
19
41
  }
20
- get runningKey() {
21
- return '@RUNNINGSTATUS';
42
+ get type() {
43
+ return EquipmentType.THERMOSTAT;
22
44
  }
23
45
  get humidity() {
24
46
  return this.current_humidity;
@@ -44,62 +66,32 @@ export class Thermostat extends Equipment {
44
66
  get mode() {
45
67
  return this.current_mode;
46
68
  }
47
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- updateFromREST(update) {
49
- super.updateFromREST(update);
50
- if ('@HUMIDITY' in update) {
51
- this.current_humidity = update['@HUMIDITY'].value || 0;
52
- }
53
- if ('@SETPOINT' in update) {
54
- this.current_temp = update['@SETPOINT'].value || 70;
55
- }
56
- if ('@COOLSETPOINT' in update) {
57
- this.cool_lower_limit = update['@COOLSETPOINT'].constraints.lowerLimit || 50;
58
- this.cool_upper_limit = update['@COOLSETPOINT'].constraints.upperLimit || 90;
59
- this.cool_set_point = update['@COOLSETPOINT'].value || 70;
60
- }
61
- if ('@HEATSETPOINT' in update) {
62
- this.heat_lower_limit = update['@HEATSETPOINT'].constraints.lowerLimit || 50;
63
- this.heat_upper_limit = update['@HEATSETPOINT'].constraints.upperLimit || 90;
64
- this.heat_set_point = update['@HEATSETPOINT'].value || 70;
65
- }
66
- this.dead_band = update['@DEADBAND']?.value || 0;
67
- const text_modes = update['@MODE']?.constraints.enumText;
68
- this.modes.clear();
69
- if (text_modes) {
70
- text_modes.forEach((textMode, index) => {
71
- const mode = this._modeFromString(textMode);
72
- if (mode !== ThermostatOperationMode.UNKNOWN) {
73
- this.modes.set(index, mode);
74
- }
75
- });
69
+ updateFromMQTT(data) {
70
+ super.updateFromMQTT(data);
71
+ if (data['@HUMIDITY']) {
72
+ this.current_humidity = data['@HUMIDITY'];
73
+ this.api.log.debug(strings.humidityState, this.deviceName, this.current_humidity);
76
74
  }
77
- this.current_mode = this.modes.get(update['@MODE']?.value) ?? ThermostatOperationMode.UNKNOWN;
78
- this.didUpdate();
79
- }
80
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
- updateFromMQTT(update) {
82
- super.updateFromMQTT(update);
83
- if ('@HUMIDITY' in update) {
84
- this.current_humidity = update['@HUMIDITY'] || 0;
85
- this._api.log.debug(`${this.deviceName} humidity = ${this.current_humidity}`);
86
- }
87
- if ('@SETPOINT' in update) {
88
- this.current_temp = update['@SETPOINT'] || 70;
89
- this._api.log.debug(`${this.deviceName} current temp = ${this.current_temp}`);
90
- }
91
- if ('@COOLSETPOINT' in update) {
92
- this.cool_set_point = update['@COOLSETPOINT'] || 70;
93
- this._api.log.debug(`${this.deviceName} cool setpoint = ${this.cool_set_point}`);
94
- }
95
- if ('@HEATSETPOINT' in update) {
96
- this.heat_set_point = update['@HEATSETPOINT'] || 70;
97
- this._api.log.debug(`${this.deviceName} heat setpoint = ${this.heat_set_point}`);
98
- }
99
- if ('@MODE' in update) {
100
- const modeIndex = update['@MODE'] ?? update['@MODE'].value;
75
+ if (data['@SETPOINT']) {
76
+ this.current_temp = data['@SETPOINT'];
77
+ this.api.log.debug(strings.currentTempState, this.deviceName, this.current_temp);
78
+ }
79
+ if (data['@COOLSETPOINT']) {
80
+ this.cool_set_point = data['@COOLSETPOINT'];
81
+ this.api.log.debug(strings.coolSetpoint, this.deviceName, this.cool_set_point);
82
+ }
83
+ if (data['@HEATSETPOINT']) {
84
+ this.heat_set_point = data['@HEATSETPOINT'];
85
+ this.api.log.debug(strings.heatSetpoint, this.deviceName, this.heat_set_point);
86
+ }
87
+ if (data['@MODE']) {
88
+ const modeIndex = getValue(data['@MODE']);
101
89
  this.current_mode = this.modes.get(modeIndex) ?? ThermostatOperationMode.UNKNOWN;
102
- this._api.log.debug(`${this.deviceName} mode = ${this._stringFromMode(this.current_mode) ?? 'UNKNOWN'}`);
90
+ this.api.log.debug(strings.modeState, this.deviceName, this._stringFromMode(this.current_mode) ?? 'UNKNOWN');
91
+ }
92
+ if (data['@RUNNINGSTATUS']) {
93
+ this.running = data['@RUNNINGSTATUS'].replace(/\s/g, '').length > 0;
94
+ this.api.log.debug(strings.runningState, this.deviceName, this.running);
103
95
  }
104
96
  this.didUpdate();
105
97
  }
@@ -119,7 +111,7 @@ export class Thermostat extends Equipment {
119
111
  case 'EMERGENCYHEAT':
120
112
  return ThermostatOperationMode.EMERGENCY_HEAT;
121
113
  default:
122
- this._api.log.error('Unknown thermostat mode:', strValue);
114
+ this.api.log.error(strings.unknownMode, strValue);
123
115
  return ThermostatOperationMode.UNKNOWN;
124
116
  }
125
117
  }
@@ -149,10 +141,10 @@ export class Thermostat extends Equipment {
149
141
  }
150
142
  }
151
143
  if (Object.keys(payload).length > 0) {
152
- this._api.publish(payload, this.deviceId, this.serialNumber);
144
+ this.api.publish(payload, this.deviceId, this.serialNumber);
153
145
  }
154
146
  else {
155
- this._api.log.error('Unknown thermostat mode:', mode);
147
+ this.api.log.error(strings.unknownMode, mode);
156
148
  }
157
149
  }
158
150
  setSetPoint(targetTemp, targetTempCool, targetTempHeat) {
@@ -165,7 +157,7 @@ export class Thermostat extends Equipment {
165
157
  coolPayload['@COOLSETPOINT'] = temp;
166
158
  }
167
159
  else {
168
- this._api.log.error(`Cool set point out of range. Lower: ${lower}, Upper: ${upper}, Set point: ${temp}`);
160
+ this.api.log.error(strings.outOfRangeCool, lower, upper, temp);
169
161
  }
170
162
  }
171
163
  if (targetTempHeat || (targetTemp && [ThermostatOperationMode.HEATING, ThermostatOperationMode.EMERGENCY_HEAT].includes(this.mode))) {
@@ -175,16 +167,16 @@ export class Thermostat extends Equipment {
175
167
  heatPayload['@HEATSETPOINT'] = temp;
176
168
  }
177
169
  else {
178
- this._api.log.error(`Heat set point out of range. Lower: ${lower}, Upper: ${upper}, Set point: ${temp}`);
170
+ this.api.log.error(strings.outOfRangeHeat, lower, upper, temp);
179
171
  }
180
172
  }
181
173
  let hasSetTemp = false;
182
174
  if (coolPayload && [ThermostatOperationMode.AUTO, ThermostatOperationMode.COOLING].includes(this.mode)) {
183
- this._api.publish(coolPayload, this.deviceId, this.serialNumber);
175
+ this.api.publish(coolPayload, this.deviceId, this.serialNumber);
184
176
  hasSetTemp = true;
185
177
  }
186
178
  if (heatPayload && [ThermostatOperationMode.AUTO, ThermostatOperationMode.HEATING, ThermostatOperationMode.EMERGENCY_HEAT].includes(this.mode)) {
187
- this._api.publish(heatPayload, this.deviceId, this.serialNumber);
179
+ this.api.publish(heatPayload, this.deviceId, this.serialNumber);
188
180
  hasSetTemp = true;
189
181
  }
190
182
  if (targetTemp && !hasSetTemp) {
@@ -196,10 +188,10 @@ export class Thermostat extends Equipment {
196
188
  payload = heatPayload;
197
189
  }
198
190
  else {
199
- this._api.log.error(`Can't auto determine set point to set when mode is: ${this.mode}`);
191
+ this.api.log.error(strings.setpointUnknown, this.mode);
200
192
  }
201
193
  if (Object.keys(payload).length > 0) {
202
- this._api.publish(payload, this.deviceId, this.serialNumber);
194
+ this.api.publish(payload, this.deviceId, this.serialNumber);
203
195
  }
204
196
  }
205
197
  }
@@ -1 +1 @@
1
- {"version":3,"file":"thermostat.js","sourceRoot":"","sources":["../../src/model/thermostat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,OAAO,UAAW,SAAQ,SAAS;IAE/B,gBAAgB,GAAG,CAAC,CAAC;IACrB,YAAY,GAAG,CAAC,CAAC;IAEjB,cAAc,GAAG,CAAC,CAAC;IACnB,gBAAgB,GAAG,CAAC,CAAC;IACrB,gBAAgB,GAAG,CAAC,CAAC;IAErB,cAAc,GAAG,CAAC,CAAC;IACnB,gBAAgB,GAAG,CAAC,CAAC;IACrB,gBAAgB,GAAG,CAAC,CAAC;IAErB,SAAS,GAAG,CAAC,CAAC;IAEd,KAAK,GAAyC,IAAI,GAAG,EAAE,CAAC;IACxD,YAAY,GAAG,uBAAuB,CAAC,OAAO,CAAC;IAEvD,8DAA8D;IAC9D,YAAY,GAAc,EAAE,UAAe;QACzC,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED,IAAc,UAAU;QACtB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,8DAA8D;IACpD,cAAc,CAAC,MAAW;QAClC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE7B,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,CAAC;QAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;YAC7E,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;YAC7E,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5D,CAAC;QAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;YAC7E,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;YAC7E,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC;QAEzD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,KAAa,EAAE,EAAE;gBACrD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,IAAI,KAAK,uBAAuB,CAAC,OAAO,EAAE,CAAC;oBAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,uBAAuB,CAAC,OAAO,CAAC;QAE9F,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,8DAA8D;IAC9D,cAAc,CAAC,MAAW;QACxB,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE7B,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,eAAe,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,mBAAmB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,oBAAoB,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,oBAAoB,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;YAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,uBAAuB,CAAC,OAAO,CAAC;YACjF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,WAAW,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;QAC3G,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEO,eAAe,CAAC,QAAgB;QACtC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,QAAQ,aAAa,EAAE,CAAC;YACxB,KAAK,KAAK;gBACR,OAAO,uBAAuB,CAAC,GAAG,CAAC;YACrC,KAAK,SAAS;gBACZ,OAAO,uBAAuB,CAAC,OAAO,CAAC;YACzC,KAAK,SAAS;gBACZ,OAAO,uBAAuB,CAAC,OAAO,CAAC;YACzC,KAAK,MAAM;gBACT,OAAO,uBAAuB,CAAC,IAAI,CAAC;YACtC,KAAK,SAAS;gBACZ,OAAO,uBAAuB,CAAC,QAAQ,CAAC;YAC1C,KAAK,eAAe;gBAClB,OAAO,uBAAuB,CAAC,cAAc,CAAC;YAChD;gBACE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;gBAC1D,OAAO,uBAAuB,CAAC,OAAO,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,IAA6B;QACnD,QAAO,IAAI,EAAE,CAAC;YACd,KAAK,uBAAuB,CAAC,GAAG;gBAC9B,OAAO,KAAK,CAAC;YACf,KAAK,uBAAuB,CAAC,OAAO;gBAClC,OAAO,SAAS,CAAC;YACnB,KAAK,uBAAuB,CAAC,OAAO;gBAClC,OAAO,SAAS,CAAC;YACnB,KAAK,uBAAuB,CAAC,IAAI;gBAC/B,OAAO,MAAM,CAAC;YAChB,KAAK,uBAAuB,CAAC,QAAQ;gBACnC,OAAO,SAAS,CAAC;YACnB,KAAK,uBAAuB,CAAC,cAAc;gBACzC,OAAO,eAAe,CAAC;YACzB;gBACE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAA6B;QACnC,MAAM,OAAO,GAA8B,EAAE,CAAC;QAE9C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,WAAW,CAAC,UAAmB,EAAE,cAAuB,EAAE,cAAuB;QAC/E,MAAM,WAAW,GAA8B,EAAE,CAAC;QAClD,MAAM,WAAW,GAA8B,EAAE,CAAC;QAElD,IAAI,cAAc,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,GAAG,cAAc,IAAI,UAAW,CAAC;YAC3C,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC/C,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBACnC,WAAW,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,KAAK,YAAY,KAAK,gBAAgB,IAAI,EAAE,CAAC,CAAC;YAC3G,CAAC;QACH,CAAC;QAED,IAAI,cAAc,IAAI,CAAC,UAAU,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACpI,MAAM,IAAI,GAAG,cAAc,IAAI,UAAW,CAAC;YAC3C,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC/C,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBACnC,WAAW,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,KAAK,YAAY,KAAK,gBAAgB,IAAI,EAAE,CAAC,CAAC;YAC3G,CAAC;QACH,CAAC;QAED,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,WAAW,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACjE,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,WAAW,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/I,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACjE,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,IAAI,KAAK,uBAAuB,CAAC,OAAO,EAAE,CAAC;gBAClD,OAAO,GAAG,WAAW,CAAC;YACxB,CAAC;iBAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzG,OAAO,GAAG,WAAW,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uDAAuD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"thermostat.js","sourceRoot":"","sources":["../../src/model/thermostat.ts"],"names":[],"mappings":"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"}