myenergi-api 0.4.0 → 0.5.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',
package/dist/MyEnergi.js CHANGED
@@ -29,23 +29,25 @@ class MyEnergi {
29
29
  this._config = {
30
30
  username: '',
31
31
  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',
32
+ base_url: 'https://s18.myenergi.net',
33
+ eddi_url: '/cgi-jstatus-E',
34
+ zappi_url: '/cgi-jstatus-Z',
35
+ harvi_url: '/cgi-jstatus-H',
36
+ status_url: '/cgi-jstatus-*',
37
+ dayhour_url: '/cgi-jdayhour-',
38
+ zappi_mode_url: '/cgi-zappi-mode-Z',
39
+ zappi_min_green_url: '/cgi-set-min-green-Z',
39
40
  //https://s18.myenergi.net/cgi-jdayhour-Znnnnnnnn-YYYY-MM-DD
40
41
  };
41
42
  this._config.username = username;
42
43
  this._config.password = password;
43
- this._digest = new Digest_1.Digest(this._config.username, this._config.password);
44
+ this._digest = new Digest_1.Digest(this._config.base_url, this._config.username, this._config.password);
44
45
  }
45
46
  getStatusAll() {
46
47
  return __awaiter(this, void 0, void 0, function* () {
47
48
  const data = yield this._digest.get(this._config.status_url);
48
- return data;
49
+ const jsonData = JSON.parse(data);
50
+ return jsonData;
49
51
  });
50
52
  }
51
53
  getStatusZappiAll() {
@@ -79,7 +81,8 @@ class MyEnergi {
79
81
  return __awaiter(this, void 0, void 0, function* () {
80
82
  const url = `${this._config.zappi_mode_url}${serialNo}-${chargeMode}-0-0-0000`;
81
83
  const data = yield this._digest.get(url);
82
- return data;
84
+ const jsonData = JSON.parse(data);
85
+ return jsonData;
83
86
  });
84
87
  }
85
88
  setZappiBoostMode(serialNo, boostMode, kwh = 0, completeTime = '0000') {
@@ -90,14 +93,16 @@ class MyEnergi {
90
93
  }
91
94
  const url = `${this._config.zappi_mode_url}${serialNo}-0-${boostMode}-${kwh}-${completeTime}`;
92
95
  const data = yield this._digest.get(url);
93
- return data;
96
+ const jsonData = JSON.parse(data);
97
+ return jsonData;
94
98
  });
95
99
  }
96
100
  setZappiGreenLevel(serialNo, percentage) {
97
101
  return __awaiter(this, void 0, void 0, function* () {
98
102
  const url = `${this._config.zappi_min_green_url}${serialNo}-${percentage}`;
99
103
  const data = yield this._digest.get(url);
100
- return data;
104
+ const jsonData = JSON.parse(data);
105
+ return jsonData;
101
106
  });
102
107
  }
103
108
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myenergi-api",
3
- "version": "0.4.0",
3
+ "version": "0.5.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",