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 +2 -1
- package/dist/Digest.js +47 -5
- package/dist/MyEnergi.js +17 -12
- package/package.json +1 -1
package/dist/Digest.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare class Digest {
|
|
2
2
|
private _authDigest?;
|
|
3
|
-
|
|
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:
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
104
|
+
const jsonData = JSON.parse(data);
|
|
105
|
+
return jsonData;
|
|
101
106
|
});
|
|
102
107
|
}
|
|
103
108
|
}
|
package/package.json
CHANGED