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,82 @@
1
+ import { ThermostatOperationMode } from './constants';
2
+ export declare const SENSITIVE_KEYS: string[];
3
+ export type ValueOrObject<T> = T | {
4
+ value: T;
5
+ };
6
+ export declare function getValue<T>(input: ValueOrObject<T>): T;
7
+ export type TokenData = {
8
+ user_id: string;
9
+ user_token: string;
10
+ options: {
11
+ account_id: string;
12
+ };
13
+ };
14
+ export type StringValue = {
15
+ value: string;
16
+ };
17
+ export type NumberValue = {
18
+ value: number;
19
+ };
20
+ export type Setpoint = {
21
+ constraints: SetpointConstraints;
22
+ value: number;
23
+ };
24
+ export type SetpointConstraints = {
25
+ lowerLimit: number;
26
+ upperLimit: number;
27
+ units: string;
28
+ };
29
+ export type ModeConstraints = {
30
+ enumText: string[];
31
+ };
32
+ export type Mode = {
33
+ constraints: ModeConstraints;
34
+ value: ThermostatOperationMode;
35
+ };
36
+ export type EquipmentData = {
37
+ device_type: string;
38
+ device_name: string;
39
+ serial_number: string;
40
+ '@NAME': StringValue;
41
+ '@ALERTCOUNT': number;
42
+ '@SETPOINT': Setpoint;
43
+ };
44
+ export type LocationData = {
45
+ equiptments: EquipmentData[];
46
+ };
47
+ export type LocationsResponse = {
48
+ results: {
49
+ locations: LocationData[];
50
+ };
51
+ };
52
+ export type ThermostatData = {
53
+ '@HUMIDITY': NumberValue;
54
+ '@SETPOINT': NumberValue;
55
+ '@COOLSETPOINT': Setpoint;
56
+ '@HEATSETPOINT': Setpoint;
57
+ '@DEADBAND': NumberValue;
58
+ '@MODE': Mode;
59
+ '@RUNNINGSTATUS': string;
60
+ };
61
+ export type WaterHeaterData = {
62
+ '@RUNNING': string;
63
+ '@ENABLED': NumberValue;
64
+ '@SETPOINT': Setpoint;
65
+ '@HOTWATER': string;
66
+ };
67
+ export type MQTTData = {
68
+ serial_number: string;
69
+ '@ALERTCOUNT'?: number;
70
+ '@ENABLED'?: ValueOrObject<number>;
71
+ '@SETPOINT': number;
72
+ '@HOTWATER': string;
73
+ '@RUNNING': string;
74
+ '@RUNNINGSTATUS': string;
75
+ '@HUMIDITY': number;
76
+ '@COOLSETPOINT': number;
77
+ '@HEATSETPOINT': number;
78
+ '@MODE': NumberValue;
79
+ };
80
+ export interface MQTTError extends Error {
81
+ code?: string | number;
82
+ }
@@ -0,0 +1,12 @@
1
+ export const SENSITIVE_KEYS = [
2
+ 'user_id', 'user_token', 'account_id', 'address', 'email', 'first_name',
3
+ 'last_name', 'phone_number', 'postal_code', 'macAddress', 'serialNumber',
4
+ 'street', 'city', 'zipcode', 'name', 'coordinates', 'loc', 'device_name',
5
+ 'serial_number', 'mac_address',
6
+ ];
7
+ export function getValue(input) {
8
+ return typeof input === 'object' && input !== null && 'value' in input
9
+ ? input.value
10
+ : input;
11
+ }
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY;IACvE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc;IACxE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa;IACxE,eAAe,EAAE,aAAa;CAC/B,CAAC;AAIF,MAAM,UAAU,QAAQ,CAAI,KAAuB;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK;QACpE,CAAC,CAAC,KAAK,CAAC,KAAK;QACb,CAAC,CAAE,KAAW,CAAC;AACnB,CAAC"}
@@ -1,22 +1,24 @@
1
1
  import { EconetApi } from './api.js';
2
2
  import { Equipment } from './equipment.js';
3
+ import { MQTTData, WaterHeaterData } from './types.js';
4
+ import { EquipmentType } from './constants.js';
3
5
  export declare class WaterHeater extends Equipment {
6
+ readonly storageFilePath: string;
4
7
  private enabled;
5
8
  private lower_limit;
6
9
  private upper_limit;
7
10
  private set_point;
8
11
  private availability_icon;
9
12
  private recoverySimulator;
10
- constructor(api: EconetApi, restUpdate: any);
13
+ constructor(api: EconetApi, data: WaterHeaterData, storageFilePath: string);
14
+ get type(): EquipmentType;
11
15
  get isEnabled(): boolean;
12
- protected get runningKey(): string;
13
16
  get limits(): [number, number];
14
17
  get availability(): number;
15
18
  currentTemp(inputTemp?: number | null): number;
16
19
  get setPoint(): number;
17
20
  protected didUpdate(): void;
18
- protected updateFromREST(update: any): void;
19
- updateFromMQTT(update: any): void;
21
+ updateFromMQTT(data: MQTTData): void;
20
22
  setEnabled(enabled: boolean): void;
21
23
  setSetPoint(setPoint: number): void;
22
24
  }
@@ -1,23 +1,33 @@
1
1
  import { Equipment } from './equipment.js';
2
2
  import { RecoverySimulator } from './recoverySimulator.js';
3
+ import strings from '../lang/en.js';
4
+ import { getValue } from './types.js';
5
+ import { EquipmentType } from './constants.js';
3
6
  export class WaterHeater extends Equipment {
7
+ storageFilePath;
4
8
  enabled = true;
5
9
  lower_limit = 100;
6
10
  upper_limit = 150;
7
11
  set_point = 0;
8
12
  availability_icon = null;
9
13
  recoverySimulator = null;
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
- constructor(api, restUpdate) {
12
- super(api);
13
- this.updateFromREST(restUpdate);
14
+ constructor(api, data, storageFilePath) {
15
+ super(api, data);
16
+ this.storageFilePath = storageFilePath;
17
+ this.running = data['@RUNNING'].replace(/\s/g, '').length > 0;
18
+ this.enabled = data['@ENABLED'].value === 1;
19
+ this.lower_limit = data['@SETPOINT'].constraints.lowerLimit;
20
+ this.upper_limit = data['@SETPOINT'].constraints.upperLimit;
21
+ this.set_point = data['@SETPOINT'].value;
22
+ this.availability_icon = data['@HOTWATER'];
23
+ this.didUpdate();
24
+ }
25
+ get type() {
26
+ return EquipmentType.WATER_HEATER;
14
27
  }
15
28
  get isEnabled() {
16
29
  return this.enabled;
17
30
  }
18
- get runningKey() {
19
- return '@RUNNING';
20
- }
21
31
  get limits() {
22
32
  return [this.lower_limit, this.upper_limit];
23
33
  }
@@ -51,51 +61,38 @@ export class WaterHeater extends Equipment {
51
61
  }
52
62
  didUpdate() {
53
63
  if (!this.recoverySimulator) {
54
- this.recoverySimulator = new RecoverySimulator(this._api, this, () => {
64
+ this.recoverySimulator = new RecoverySimulator(this.api, this, () => {
55
65
  super.didUpdate();
56
66
  });
57
67
  }
58
68
  this.recoverySimulator.handleUpdate(this);
59
69
  super.didUpdate();
60
70
  }
61
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
- updateFromREST(update) {
63
- super.updateFromREST(update);
64
- if ('@ENABLED' in update) {
65
- this.enabled = update['@ENABLED'].value === 1;
66
- }
67
- if ('@SETPOINT' in update) {
68
- this.lower_limit = update['@SETPOINT'].constraints.lowerLimit || 100;
69
- this.upper_limit = update['@SETPOINT'].constraints.upperLimit || 150;
70
- this.set_point = update['@SETPOINT'].value || 0;
71
+ updateFromMQTT(data) {
72
+ super.updateFromMQTT(data);
73
+ if (data['@ENABLED']) {
74
+ this.enabled = getValue(data['@ENABLED']) === 1;
75
+ this.api.log.debug(strings.enabledState, this.deviceName, this.enabled);
71
76
  }
72
- if ('@HOTWATER' in update) {
73
- this.availability_icon = update['@HOTWATER'];
74
- }
75
- this.didUpdate();
76
- }
77
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
- updateFromMQTT(update) {
79
- super.updateFromMQTT(update);
80
- if ('@ENABLED' in update) {
81
- this.enabled = update['@ENABLED'] === 1 || update['@ENABLED'].value === 1;
82
- this._api.log.debug(`${this.deviceName} enabled = ${this.enabled}`);
77
+ if (data['@SETPOINT']) {
78
+ this.set_point = data['@SETPOINT'];
79
+ this.api.log.debug(strings.setpointState, this.deviceName, this.set_point);
83
80
  }
84
- if ('@SETPOINT' in update) {
85
- this.set_point = update['@SETPOINT'];
86
- this._api.log.debug(`${this.deviceName} set_point = ${this.set_point}`);
81
+ if (data['@HOTWATER']) {
82
+ this.availability_icon = data['@HOTWATER'];
83
+ this.api.log.debug(strings.availabilityState, this.deviceName, this.availability_icon);
87
84
  }
88
- if ('@HOTWATER' in update) {
89
- this.availability_icon = update['@HOTWATER'];
90
- this._api.log.debug(`${this.deviceName} availability = ${this.availability_icon}`);
85
+ if (data['@RUNNING']) {
86
+ this.running = data['@RUNNING'].replace(/\s/g, '').length > 0;
87
+ this.api.log.debug(strings.runningState, this.deviceName, this.running);
91
88
  }
92
89
  this.didUpdate();
93
90
  }
94
91
  setEnabled(enabled) {
95
- this._api.publish({ '@ENABLED': enabled ? 1 : 0 }, this.deviceId, this.serialNumber);
92
+ this.api.publish({ '@ENABLED': enabled ? 1 : 0 }, this.deviceId, this.serialNumber);
96
93
  }
97
94
  setSetPoint(setPoint) {
98
- this._api.publish({ '@SETPOINT': setPoint }, this.deviceId, this.serialNumber);
95
+ this.api.publish({ '@SETPOINT': setPoint }, this.deviceId, this.serialNumber);
99
96
  }
100
97
  }
101
98
  //# sourceMappingURL=waterHeater.js.map
@@ -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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"}
@@ -0,0 +1,3 @@
1
+ export declare const STORAGE_FILE_NAME = "econetRheem.json";
2
+ export declare function safeGetItem(filePath: string, key: string): string | null;
3
+ export declare function safeSetItem(filePath: string, key: string, value: string): void;
@@ -0,0 +1,22 @@
1
+ import fs from 'fs';
2
+ export const STORAGE_FILE_NAME = 'econetRheem.json';
3
+ function readStorage(filePath) {
4
+ if (!fs.existsSync(filePath)) {
5
+ return {};
6
+ }
7
+ const data = fs.readFileSync(filePath, 'utf-8');
8
+ return JSON.parse(data);
9
+ }
10
+ function writeStorage(filePath, storage) {
11
+ fs.writeFileSync(filePath, JSON.stringify(storage, null, 2));
12
+ }
13
+ export function safeGetItem(filePath, key) {
14
+ const storage = readStorage(filePath);
15
+ return storage[key] ?? null;
16
+ }
17
+ export function safeSetItem(filePath, key, value) {
18
+ const storage = readStorage(filePath);
19
+ storage[key] = value;
20
+ writeStorage(filePath, storage);
21
+ }
22
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/tools/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AACD,SAAS,YAAY,CAAC,QAAgB,EAAE,OAA+B;IACrE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,GAAW;IACvD,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,GAAW,EAAE,KAAa;IACtE,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACrB,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TemperatureUnits } from '../model/constants.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/constants.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,uBAAuB,CAAC;AAEzD,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,KAAuB,EAAU,EAAE;IACzE,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,KAAuB,EAAU,EAAE;IAC3E,OAAO,KAAK,KAAK,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const SECOND = 1000;
2
+ export declare const MINUTE: number;
3
+ export declare const HOUR: number;
4
+ export declare const DAY: number;
@@ -0,0 +1,5 @@
1
+ export const SECOND = 1000;
2
+ export const MINUTE = 60 * SECOND;
3
+ export const HOUR = 60 * MINUTE;
4
+ export const DAY = 24 * HOUR;
5
+ //# sourceMappingURL=time.js.map
@@ -0,0 +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"}
@@ -0,0 +1 @@
1
+ export default function getVersion(): string;
@@ -0,0 +1,18 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ function loadPackageJson() {
6
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
+ const packageJSONPath = path.join(__dirname, '../../package.json');
8
+ return JSON.parse(fs.readFileSync(packageJSONPath, { encoding: 'utf8' }));
9
+ }
10
+ export default function getVersion() {
11
+ try {
12
+ return loadPackageJson().version;
13
+ }
14
+ catch (error) {
15
+ return '0.0.0';
16
+ }
17
+ }
18
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/tools/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,8DAA8D;AAC9D,SAAS,eAAe;IACtB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,UAAU;IAChC,IAAI,CAAC;QACH,OAAO,eAAe,EAAE,CAAC,OAAO,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,45 @@
1
+ {
2
+ "options":{
3
+ "@CONNECTIVITY":{
4
+ "last_connected":1748457902331,
5
+ "last_disconnected":1748459364489
6
+ },
7
+ "_id":"****redacted****",
8
+ "account_id":"****redacted****",
9
+ "address":"****redacted****",
10
+ "allow_email_notifications":false,
11
+ "allow_product_alert_emails":true,
12
+ "allow_product_alert_text_msg":false,
13
+ "allow_push_notifications":true,
14
+ "allow_special_offers_emails":false,
15
+ "allow_special_offers_text_msg":false,
16
+ "allow_text_notifications":false,
17
+ "app_brand":"rheem",
18
+ "app_version":"6.9.0",
19
+ "cb_service_account":false,
20
+ "city":"****redacted****",
21
+ "connected":false,
22
+ "country":"US",
23
+ "created_at":"2021-05-23T22:57:16.000Z",
24
+ "creation_date":1621810634,
25
+ "email":"****redacted****",
26
+ "first_name":"****redacted****",
27
+ "is_phone_verified":true,
28
+ "last_name":"****redacted****",
29
+ "legacy_user":0,
30
+ "os_version":"ios",
31
+ "phone_number":"****redacted****",
32
+ "postal_code":"****redacted****",
33
+ "receive_marketing_messages":false,
34
+ "report_state":true,
35
+ "role":0,
36
+ "security_code":0,
37
+ "state":"CA",
38
+ "success":true,
39
+ "temperature_display_unit":"Fahrenheit",
40
+ "updated_at":"2025-05-28T19:09:24.489Z",
41
+ "user_id":"****redacted****"
42
+ },
43
+ "user_id":"****redacted****",
44
+ "user_token":"****redacted****"
45
+ }