myenergi-api 0.4.0 → 0.8.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.
package/dist/Digest.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export declare class Digest {
2
2
  private _authDigest?;
3
- constructor(username: string, password: string);
3
+ private _baseUrl;
4
+ constructor(baseUrl: string, username: string, password: string);
4
5
  private request;
5
6
  get(requestUrl: string, data?: any): Promise<any>;
6
7
  }
package/dist/Digest.js CHANGED
@@ -24,12 +24,13 @@ const https = __importStar(require("https"));
24
24
  const url = __importStar(require("url"));
25
25
  const AuthDigest_1 = require("./AuthDigest");
26
26
  class Digest {
27
- constructor(username, password) {
27
+ constructor(baseUrl, username, password) {
28
+ this._baseUrl = url.parse(baseUrl, true);
28
29
  this._authDigest = new AuthDigest_1.AuthDigest(username, password, (err) => {
29
30
  console.error(err);
30
31
  });
31
32
  }
32
- request(options, data, retryCount = 0) {
33
+ request(options, data, retryCount = 0, redirectCount = 0) {
33
34
  return new Promise((resolve, reject) => {
34
35
  var _a;
35
36
  let resData = '';
@@ -62,6 +63,27 @@ class Digest {
62
63
  });
63
64
  }
64
65
  else if (res.statusCode >= 200 && res.statusCode < 300) {
66
+ // myenergi asn redirect handler.
67
+ const myenergiAsn = res.headers['x_myenergi-asn'];
68
+ if (myenergiAsn && myenergiAsn !== 'undefined' && myenergiAsn !== this._baseUrl.host) {
69
+ if (redirectCount > 2) {
70
+ reject(`Too many redirects: ${myenergiAsn}`);
71
+ return;
72
+ }
73
+ this._baseUrl.host = myenergiAsn;
74
+ this._baseUrl.hostname = myenergiAsn;
75
+ options.host = myenergiAsn;
76
+ options.hostname = myenergiAsn;
77
+ redirectCount++;
78
+ return this.request(options, data, retryCount, redirectCount)
79
+ .then((value) => {
80
+ resolve(value);
81
+ })
82
+ .catch((resaon) => {
83
+ reject(resaon);
84
+ });
85
+ }
86
+ // Plain 200 handling
65
87
  res.setEncoding('utf8');
66
88
  res.on('data', (chunk) => {
67
89
  resData += chunk;
@@ -70,6 +92,25 @@ class Digest {
70
92
  resolve(resData);
71
93
  });
72
94
  }
95
+ else if (res.statusCode >= 300 && res.statusCode < 400) {
96
+ if (redirectCount > 2) {
97
+ reject(`Too many redirects: ${res.headers['location']}`);
98
+ return;
99
+ }
100
+ const location = res.headers['location'];
101
+ const uri = url.parse(location, true);
102
+ if (uri.host !== this._baseUrl.host) {
103
+ this._baseUrl.host = uri.host;
104
+ }
105
+ redirectCount++;
106
+ return this.request(options, data, retryCount, redirectCount)
107
+ .then((value) => {
108
+ resolve(value);
109
+ })
110
+ .catch((resaon) => {
111
+ reject(resaon);
112
+ });
113
+ }
73
114
  else {
74
115
  console.error('status code failed!!');
75
116
  reject('status code failed!!');
@@ -89,9 +130,10 @@ class Digest {
89
130
  get(requestUrl, data) {
90
131
  const uri = url.parse(requestUrl, true);
91
132
  const options = {
92
- hostname: uri.hostname,
93
- port: uri.port,
94
- path: uri.pathname,
133
+ hostname: this._baseUrl.hostname,
134
+ host: this._baseUrl.host,
135
+ port: this._baseUrl.port,
136
+ path: uri.path,
95
137
  method: 'GET',
96
138
  headers: {
97
139
  Connection: 'Keep-Alive',
@@ -1,15 +1,7 @@
1
+ import { Eddi } from './models/Eddi';
2
+ import { Harvi } from './models/Harvi';
3
+ import { EddiBoost, EddiMode, ZappiBoostMode, ZappiChargeMode } from './models/Types';
1
4
  import { Zappi } from './models/Zappi';
2
- export declare enum ZappiChargeMode {
3
- Off = 4,
4
- Fast = 1,
5
- Eco = 2,
6
- EcoPlus = 3
7
- }
8
- export declare enum ZappiBoostMode {
9
- Manual = 10,
10
- Smart = 11,
11
- Stop = 2
12
- }
13
5
  export declare class MyEnergi {
14
6
  private _config;
15
7
  private _digest;
@@ -20,4 +12,10 @@ export declare class MyEnergi {
20
12
  setZappiChargeMode(serialNo: string, chargeMode: ZappiChargeMode): Promise<any>;
21
13
  setZappiBoostMode(serialNo: string, boostMode: ZappiBoostMode, kwh?: number, completeTime?: string): Promise<any>;
22
14
  setZappiGreenLevel(serialNo: string, percentage: number): Promise<any>;
15
+ getStatusEddiAll(): Promise<Eddi[]>;
16
+ getStatusEddi(serialNumber: string): Promise<Eddi | null>;
17
+ setEddiMode(serialNo: string, mode: EddiMode): Promise<any>;
18
+ setEddiBoost(serialNo: string, boost: EddiBoost, minutes?: number): Promise<any>;
19
+ getStatusHarviAll(): Promise<Harvi[]>;
20
+ getStatusHarvi(serialNumber: string): Promise<Harvi | null>;
23
21
  }
package/dist/MyEnergi.js CHANGED
@@ -9,43 +9,35 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.MyEnergi = exports.ZappiBoostMode = exports.ZappiChargeMode = void 0;
12
+ exports.MyEnergi = void 0;
13
13
  const Digest_1 = require("./Digest");
14
- var ZappiChargeMode;
15
- (function (ZappiChargeMode) {
16
- ZappiChargeMode[ZappiChargeMode["Off"] = 4] = "Off";
17
- ZappiChargeMode[ZappiChargeMode["Fast"] = 1] = "Fast";
18
- ZappiChargeMode[ZappiChargeMode["Eco"] = 2] = "Eco";
19
- ZappiChargeMode[ZappiChargeMode["EcoPlus"] = 3] = "EcoPlus";
20
- })(ZappiChargeMode = exports.ZappiChargeMode || (exports.ZappiChargeMode = {}));
21
- var ZappiBoostMode;
22
- (function (ZappiBoostMode) {
23
- ZappiBoostMode[ZappiBoostMode["Manual"] = 10] = "Manual";
24
- ZappiBoostMode[ZappiBoostMode["Smart"] = 11] = "Smart";
25
- ZappiBoostMode[ZappiBoostMode["Stop"] = 2] = "Stop";
26
- })(ZappiBoostMode = exports.ZappiBoostMode || (exports.ZappiBoostMode = {}));
14
+ const Types_1 = require("./models/Types");
27
15
  class MyEnergi {
28
16
  constructor(username, password) {
29
17
  this._config = {
30
18
  username: '',
31
19
  password: '',
32
- eddi_url: 'https://s18.myenergi.net/cgi-jstatus-E',
33
- zappi_url: 'https://s18.myenergi.net/cgi-jstatus-Z',
34
- harvi_url: 'https://s18.myenergi.net/cgi-jstatus-H',
35
- status_url: 'https://s18.myenergi.net/cgi-jstatus-*',
36
- dayhour_url: 'https://s18.myenergi.net/cgi-jdayhour-',
37
- zappi_mode_url: 'https://s18.myenergi.net/cgi-zappi-mode-Z',
38
- zappi_min_green_url: 'https://s18.myenergi.net/cgi-set-min-green-Z',
20
+ base_url: 'https://s18.myenergi.net',
21
+ eddi_url: '/cgi-jstatus-E',
22
+ zappi_url: '/cgi-jstatus-Z',
23
+ harvi_url: '/cgi-jstatus-H',
24
+ status_url: '/cgi-jstatus-*',
25
+ dayhour_url: '/cgi-jdayhour-',
26
+ zappi_mode_url: '/cgi-zappi-mode-Z',
27
+ zappi_min_green_url: '/cgi-set-min-green-Z',
28
+ eddi_mode_url: '/cgi-eddi-mode-E',
29
+ eddi_boost_url: '/cgi-eddi-boost-E'
39
30
  //https://s18.myenergi.net/cgi-jdayhour-Znnnnnnnn-YYYY-MM-DD
40
31
  };
41
32
  this._config.username = username;
42
33
  this._config.password = password;
43
- this._digest = new Digest_1.Digest(this._config.username, this._config.password);
34
+ this._digest = new Digest_1.Digest(this._config.base_url, this._config.username, this._config.password);
44
35
  }
45
36
  getStatusAll() {
46
37
  return __awaiter(this, void 0, void 0, function* () {
47
38
  const data = yield this._digest.get(this._config.status_url);
48
- return data;
39
+ const jsonData = JSON.parse(data);
40
+ return jsonData;
49
41
  });
50
42
  }
51
43
  getStatusZappiAll() {
@@ -79,25 +71,98 @@ class MyEnergi {
79
71
  return __awaiter(this, void 0, void 0, function* () {
80
72
  const url = `${this._config.zappi_mode_url}${serialNo}-${chargeMode}-0-0-0000`;
81
73
  const data = yield this._digest.get(url);
82
- return data;
74
+ const jsonData = JSON.parse(data);
75
+ return jsonData;
83
76
  });
84
77
  }
85
78
  setZappiBoostMode(serialNo, boostMode, kwh = 0, completeTime = '0000') {
86
79
  return __awaiter(this, void 0, void 0, function* () {
87
- if (boostMode === ZappiBoostMode.Stop) {
80
+ if (boostMode === Types_1.ZappiBoostMode.Stop) {
88
81
  kwh = 0;
89
82
  completeTime = '0000';
90
83
  }
91
84
  const url = `${this._config.zappi_mode_url}${serialNo}-0-${boostMode}-${kwh}-${completeTime}`;
92
85
  const data = yield this._digest.get(url);
93
- return data;
86
+ const jsonData = JSON.parse(data);
87
+ return jsonData;
94
88
  });
95
89
  }
96
90
  setZappiGreenLevel(serialNo, percentage) {
97
91
  return __awaiter(this, void 0, void 0, function* () {
98
92
  const url = `${this._config.zappi_min_green_url}${serialNo}-${percentage}`;
99
93
  const data = yield this._digest.get(url);
100
- return data;
94
+ const jsonData = JSON.parse(data);
95
+ return jsonData;
96
+ });
97
+ }
98
+ getStatusEddiAll() {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ const data = yield this._digest.get(this._config.eddi_url);
101
+ const jsonData = JSON.parse(data);
102
+ if (jsonData.eddi)
103
+ return Object.assign([], jsonData.eddi);
104
+ else
105
+ return [];
106
+ });
107
+ }
108
+ getStatusEddi(serialNumber) {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ const data = yield this._digest.get(this._config.eddi_url);
111
+ const jsonData = JSON.parse(data);
112
+ if (jsonData.eddi) {
113
+ const eddi = Object.assign([], jsonData.eddi).find((eddi) => {
114
+ return eddi.sno === serialNumber;
115
+ });
116
+ if (eddi)
117
+ return Object.assign({}, eddi);
118
+ else
119
+ return null;
120
+ }
121
+ else
122
+ return null;
123
+ });
124
+ }
125
+ setEddiMode(serialNo, mode) {
126
+ return __awaiter(this, void 0, void 0, function* () {
127
+ const url = `${this._config.eddi_mode_url}${serialNo}-${mode}`;
128
+ const data = yield this._digest.get(url);
129
+ const jsonData = JSON.parse(data);
130
+ return jsonData;
131
+ });
132
+ }
133
+ setEddiBoost(serialNo, boost, minutes = 0) {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ const url = `${this._config.eddi_boost_url}${serialNo}-${boost}-${minutes}`;
136
+ const data = yield this._digest.get(url);
137
+ const jsonData = JSON.parse(data);
138
+ return jsonData;
139
+ });
140
+ }
141
+ getStatusHarviAll() {
142
+ return __awaiter(this, void 0, void 0, function* () {
143
+ const data = yield this._digest.get(this._config.harvi_url);
144
+ const jsonData = JSON.parse(data);
145
+ if (jsonData.harvi)
146
+ return Object.assign([], jsonData.harvi);
147
+ else
148
+ return [];
149
+ });
150
+ }
151
+ getStatusHarvi(serialNumber) {
152
+ return __awaiter(this, void 0, void 0, function* () {
153
+ const data = yield this._digest.get(this._config.harvi_url);
154
+ const jsonData = JSON.parse(data);
155
+ if (jsonData.harvi) {
156
+ const harvi = Object.assign([], jsonData.harvi).find((harvi) => {
157
+ return harvi.sno === serialNumber;
158
+ });
159
+ if (harvi)
160
+ return Object.assign({}, harvi);
161
+ else
162
+ return null;
163
+ }
164
+ else
165
+ return null;
101
166
  });
102
167
  }
103
168
  }
package/dist/index.d.ts CHANGED
@@ -1,2 +1,6 @@
1
+ import { Eddi } from './models/Eddi';
2
+ import { Harvi } from './models/Harvi';
3
+ import { EddiBoost, EddiMode, ZappiBoostMode, ZappiChargeMode } from './models/Types';
4
+ import { Zappi } from './models/Zappi';
1
5
  import { MyEnergi } from './MyEnergi';
2
- export { MyEnergi };
6
+ export { MyEnergi, Eddi, Zappi, Harvi, EddiBoost, EddiMode, ZappiBoostMode, ZappiChargeMode };
package/dist/index.js CHANGED
@@ -1,5 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MyEnergi = void 0;
3
+ exports.ZappiChargeMode = exports.ZappiBoostMode = exports.EddiMode = exports.EddiBoost = exports.MyEnergi = void 0;
4
+ const Types_1 = require("./models/Types");
5
+ Object.defineProperty(exports, "EddiBoost", { enumerable: true, get: function () { return Types_1.EddiBoost; } });
6
+ Object.defineProperty(exports, "EddiMode", { enumerable: true, get: function () { return Types_1.EddiMode; } });
7
+ Object.defineProperty(exports, "ZappiBoostMode", { enumerable: true, get: function () { return Types_1.ZappiBoostMode; } });
8
+ Object.defineProperty(exports, "ZappiChargeMode", { enumerable: true, get: function () { return Types_1.ZappiChargeMode; } });
4
9
  const MyEnergi_1 = require("./MyEnergi");
5
10
  Object.defineProperty(exports, "MyEnergi", { enumerable: true, get: function () { return MyEnergi_1.MyEnergi; } });
@@ -0,0 +1,31 @@
1
+ export interface Eddi {
2
+ sno: string;
3
+ bsm: number;
4
+ che: number;
5
+ cmt: number;
6
+ dat: string;
7
+ div: number;
8
+ dst: number;
9
+ ectp1: number;
10
+ ectp2: number;
11
+ ectt1: string;
12
+ ectt2: string;
13
+ frq: number;
14
+ fwv: number;
15
+ gen: number;
16
+ grd: number;
17
+ hno: number;
18
+ ht1: string;
19
+ ht2: string;
20
+ pha: number;
21
+ pri: number;
22
+ r1a: number;
23
+ r2a: number;
24
+ r2b: number;
25
+ rbt: number;
26
+ sta: number;
27
+ tim: string;
28
+ tp: number;
29
+ tp2: number;
30
+ vol: number;
31
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,15 @@
1
+ export interface Harvi {
2
+ sno: string;
3
+ dat: string;
4
+ tim: string;
5
+ ectp1: number;
6
+ ectp2: number;
7
+ ectp3: number;
8
+ ectt1: string;
9
+ ectt2: string;
10
+ ectt3: string;
11
+ ect1p: number;
12
+ ect2p: number;
13
+ ect3p: number;
14
+ fwv: string;
15
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,25 @@
1
+ export declare enum EddiBoost {
2
+ CancelHeater1 = "1-1",
3
+ CancelHeater2 = "1-1",
4
+ CancelRelay1 = "1-11",
5
+ CancelRelay2 = "1-12",
6
+ ManualHeater1 = "10-1",
7
+ ManualHeater2 = "10-1",
8
+ ManualRelay1 = "10-11",
9
+ ManualRelay2 = "10-12"
10
+ }
11
+ export declare enum EddiMode {
12
+ Off = 0,
13
+ On = 1
14
+ }
15
+ export declare enum ZappiBoostMode {
16
+ Manual = 10,
17
+ Smart = 11,
18
+ Stop = 2
19
+ }
20
+ export declare enum ZappiChargeMode {
21
+ Off = 4,
22
+ Fast = 1,
23
+ Eco = 2,
24
+ EcoPlus = 3
25
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZappiChargeMode = exports.ZappiBoostMode = exports.EddiMode = exports.EddiBoost = void 0;
4
+ var EddiBoost;
5
+ (function (EddiBoost) {
6
+ EddiBoost["CancelHeater1"] = "1-1";
7
+ EddiBoost["CancelHeater2"] = "1-1";
8
+ EddiBoost["CancelRelay1"] = "1-11";
9
+ EddiBoost["CancelRelay2"] = "1-12";
10
+ EddiBoost["ManualHeater1"] = "10-1";
11
+ EddiBoost["ManualHeater2"] = "10-1";
12
+ EddiBoost["ManualRelay1"] = "10-11";
13
+ EddiBoost["ManualRelay2"] = "10-12";
14
+ })(EddiBoost = exports.EddiBoost || (exports.EddiBoost = {}));
15
+ var EddiMode;
16
+ (function (EddiMode) {
17
+ EddiMode[EddiMode["Off"] = 0] = "Off";
18
+ EddiMode[EddiMode["On"] = 1] = "On";
19
+ })(EddiMode = exports.EddiMode || (exports.EddiMode = {}));
20
+ var ZappiBoostMode;
21
+ (function (ZappiBoostMode) {
22
+ ZappiBoostMode[ZappiBoostMode["Manual"] = 10] = "Manual";
23
+ ZappiBoostMode[ZappiBoostMode["Smart"] = 11] = "Smart";
24
+ ZappiBoostMode[ZappiBoostMode["Stop"] = 2] = "Stop";
25
+ })(ZappiBoostMode = exports.ZappiBoostMode || (exports.ZappiBoostMode = {}));
26
+ var ZappiChargeMode;
27
+ (function (ZappiChargeMode) {
28
+ ZappiChargeMode[ZappiChargeMode["Off"] = 4] = "Off";
29
+ ZappiChargeMode[ZappiChargeMode["Fast"] = 1] = "Fast";
30
+ ZappiChargeMode[ZappiChargeMode["Eco"] = 2] = "Eco";
31
+ ZappiChargeMode[ZappiChargeMode["EcoPlus"] = 3] = "EcoPlus";
32
+ })(ZappiChargeMode = exports.ZappiChargeMode || (exports.ZappiChargeMode = {}));
@@ -14,8 +14,6 @@ export interface Zappi {
14
14
  ectt4: string;
15
15
  ectt5: string;
16
16
  ectt6: string;
17
- bsm: number;
18
- bst: number;
19
17
  cmt: number;
20
18
  dst: number;
21
19
  div: number;
@@ -23,15 +21,24 @@ export interface Zappi {
23
21
  fwv: string;
24
22
  gen: number;
25
23
  grd: number;
24
+ mgl: number;
26
25
  pha: number;
27
26
  pri: number;
28
27
  sta: number;
29
28
  tz: number;
30
29
  vol: number;
31
30
  che: number;
32
- bss: number;
33
31
  lck: number;
34
32
  pst: string;
33
+ bsm: number;
34
+ bst: number;
35
+ bss: number;
36
+ sbh: number;
37
+ sbk: number;
38
+ sbm: number;
39
+ tbh: number;
40
+ tbk: number;
41
+ tbm: number;
35
42
  zmo: number;
36
43
  zs: number;
37
44
  rdc: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myenergi-api",
3
- "version": "0.4.0",
3
+ "version": "0.8.0",
4
4
  "description": "NodeJS implementation of MyEnergi API for controlling Zappi, Eddi and other MyEnergi products",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",