iobroker.parcel 0.0.7 → 0.0.8
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/README.md +17 -2
- package/admin/index_m.html +15 -0
- package/io-package.json +9 -1
- package/main.js +96 -9
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -35,10 +35,25 @@ Login und Passwort eingeben
|
|
|
35
35
|
|
|
36
36
|
In den Instanz Einstellung aktivieren und z.B. telegram.0 eingeben
|
|
37
37
|
|
|
38
|
+
## Vis ##
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
**Sendungen als Vis Table darstellen**
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
Datenpunkte alle Sendungen:
|
|
43
|
+
parcel.0.allProviderJson
|
|
44
|
+
|
|
45
|
+
Datenpunkte in Zustellung:
|
|
46
|
+
parcel.0.inDelivery
|
|
47
|
+
|
|
48
|
+
**Widget: json Table**
|
|
49
|
+
|
|
50
|
+
Anleitung:
|
|
51
|
+
https://www.smarthome-tricks.de/software-iobroker/iobroker-vis-json-table-widget-teil-1-basics/
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
**DHL Briefverfolgung in Vis anzeigen.**
|
|
55
|
+
|
|
56
|
+
Den Datenpunkt parcel.0.dhl.briefe....image ein "String img src" element als Object ID zuordnen
|
|
42
57
|
|
|
43
58
|
## Diskussion und Fragen
|
|
44
59
|
|
package/admin/index_m.html
CHANGED
|
@@ -159,6 +159,21 @@
|
|
|
159
159
|
<label for="glspassword" class="translate">App Password</label>
|
|
160
160
|
</div>
|
|
161
161
|
</div>
|
|
162
|
+
<div class="row">
|
|
163
|
+
<div class="col"><h5>Hermes</h5></div>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="row">
|
|
166
|
+
<div class="col s6 input-field">
|
|
167
|
+
<input type="text" class="value" id="hermesusername" />
|
|
168
|
+
<label for="hermesusername" class="translate">App Username</label>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
<div class="row">
|
|
172
|
+
<div class="col s6 input-field">
|
|
173
|
+
<input type="password" class="value" id="hermespassword" />
|
|
174
|
+
<label for="hermespassword" class="translate">App Password</label>
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
162
177
|
<div class="row">
|
|
163
178
|
<div class="col"><h5>UPS</h5></div>
|
|
164
179
|
</div>
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "parcel",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.8",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.0.8": {
|
|
7
|
+
"en": "Hermes hinzugefügt"
|
|
8
|
+
},
|
|
6
9
|
"0.0.7": {
|
|
7
10
|
"en": "Datenpunkt für in Zustellung hinzugefügt, Fix für wiederholende Benachrichtigungen"
|
|
8
11
|
},
|
|
@@ -55,6 +58,7 @@
|
|
|
55
58
|
"dhl",
|
|
56
59
|
"gls",
|
|
57
60
|
"ups",
|
|
61
|
+
"hermes",
|
|
58
62
|
"paket",
|
|
59
63
|
"17Track",
|
|
60
64
|
"Amazon",
|
|
@@ -97,6 +101,7 @@
|
|
|
97
101
|
"dpdpassword",
|
|
98
102
|
"t17password",
|
|
99
103
|
"upspassword",
|
|
104
|
+
"hermespassword",
|
|
100
105
|
"postchpassword",
|
|
101
106
|
"postatpassword",
|
|
102
107
|
"glspassword"
|
|
@@ -107,6 +112,7 @@
|
|
|
107
112
|
"dpdpassword",
|
|
108
113
|
"t17password",
|
|
109
114
|
"upspassword",
|
|
115
|
+
"hermespassword",
|
|
110
116
|
"postchpassword",
|
|
111
117
|
"postatpassword",
|
|
112
118
|
"glspassword"
|
|
@@ -118,6 +124,8 @@
|
|
|
118
124
|
"glspassword": "",
|
|
119
125
|
"upsusername": "",
|
|
120
126
|
"upspassword": "",
|
|
127
|
+
"hermespassword": "",
|
|
128
|
+
"hermesusername": "",
|
|
121
129
|
"postchusername": "",
|
|
122
130
|
"postchpassword": "",
|
|
123
131
|
"postatusername": "",
|
package/main.js
CHANGED
|
@@ -49,10 +49,6 @@ class Parcel extends utils.Adapter {
|
|
|
49
49
|
this.config.interval = 0.5;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
// const alreadySentMessagesState = await this.getStateAsync("alreadySentMessages");
|
|
53
|
-
// if (alreadySentMessagesState && alreadySentMessagesState.val) {
|
|
54
|
-
// this.alreadySentMessages = JSON.parse(alreadySentMessagesState.val);
|
|
55
|
-
// }
|
|
56
52
|
this.cookieJar = new tough.CookieJar();
|
|
57
53
|
const cookieState = await this.getStateAsync("auth.cookie");
|
|
58
54
|
if (cookieState && cookieState.val) {
|
|
@@ -97,6 +93,10 @@ class Parcel extends utils.Adapter {
|
|
|
97
93
|
this.log.info("Login to UPS");
|
|
98
94
|
await this.loginUPS();
|
|
99
95
|
}
|
|
96
|
+
if (this.config.hermesusername && this.config.hermespassword) {
|
|
97
|
+
this.log.info("Login to Hermes");
|
|
98
|
+
await this.loginHermes();
|
|
99
|
+
}
|
|
100
100
|
|
|
101
101
|
this.updateInterval = null;
|
|
102
102
|
this.reLoginTimeout = null;
|
|
@@ -451,7 +451,7 @@ class Parcel extends utils.Adapter {
|
|
|
451
451
|
})
|
|
452
452
|
.then(async (res) => {
|
|
453
453
|
if (res.data && res.data.indexOf("Login fehlgeschlagen") !== -1) {
|
|
454
|
-
this.log.
|
|
454
|
+
this.log.error("Login to DPD failed, please check username and password");
|
|
455
455
|
return;
|
|
456
456
|
}
|
|
457
457
|
})
|
|
@@ -569,6 +569,61 @@ class Parcel extends utils.Adapter {
|
|
|
569
569
|
this.log.error(error);
|
|
570
570
|
});
|
|
571
571
|
}
|
|
572
|
+
async loginHermes() {
|
|
573
|
+
await this.requestClient({
|
|
574
|
+
method: "post",
|
|
575
|
+
url: "https://mobile-api.myhermes.de/mobile-api-web/v2/users/login",
|
|
576
|
+
headers: {
|
|
577
|
+
Host: "mobile-api.myhermes.de",
|
|
578
|
+
accept: "application/json",
|
|
579
|
+
"content-type": "application/json; charset=utf-8",
|
|
580
|
+
"user-agent": "Hermes/33 CFNetwork/1240.0.4 Darwin/20.6.0",
|
|
581
|
+
"accept-language": "de-de",
|
|
582
|
+
},
|
|
583
|
+
data: `{"username":"${this.config.hermesusername}","password":"${this.config.hermespassword}"}`,
|
|
584
|
+
|
|
585
|
+
jar: this.cookieJar,
|
|
586
|
+
withCredentials: true,
|
|
587
|
+
})
|
|
588
|
+
.then(async (res) => {
|
|
589
|
+
this.log.debug(JSON.stringify(res.data));
|
|
590
|
+
if (res.data.accessToken) {
|
|
591
|
+
this.hermesAuthToken = res.data.accessToken;
|
|
592
|
+
this.sessions["hermes"] = res.data;
|
|
593
|
+
this.log.info("Login to Hermes successful");
|
|
594
|
+
await this.setObjectNotExistsAsync("hermes", {
|
|
595
|
+
type: "device",
|
|
596
|
+
common: {
|
|
597
|
+
name: "Hermes Tracking",
|
|
598
|
+
},
|
|
599
|
+
native: {},
|
|
600
|
+
});
|
|
601
|
+
await this.setObjectNotExistsAsync("hermes.json", {
|
|
602
|
+
type: "state",
|
|
603
|
+
common: {
|
|
604
|
+
name: "Json Sendungen",
|
|
605
|
+
write: false,
|
|
606
|
+
read: true,
|
|
607
|
+
type: "string",
|
|
608
|
+
role: "json",
|
|
609
|
+
},
|
|
610
|
+
native: {},
|
|
611
|
+
});
|
|
612
|
+
this.setState("info.connection", true, true);
|
|
613
|
+
} else {
|
|
614
|
+
this.log.error("Login to Hermes failed");
|
|
615
|
+
this.log.error(JSON.stringify(res.data));
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
return;
|
|
619
|
+
})
|
|
620
|
+
.catch((error) => {
|
|
621
|
+
this.log.error(error);
|
|
622
|
+
if (error.response) {
|
|
623
|
+
this.log.error(JSON.stringify(error.response.data));
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
}
|
|
572
627
|
async loginUPS() {
|
|
573
628
|
await this.requestClient({
|
|
574
629
|
method: "post",
|
|
@@ -934,6 +989,18 @@ class Parcel extends utils.Adapter {
|
|
|
934
989
|
},
|
|
935
990
|
},
|
|
936
991
|
],
|
|
992
|
+
hermes: [
|
|
993
|
+
{
|
|
994
|
+
path: "hermes",
|
|
995
|
+
url: "https://mobile-api.myhermes.de/mobile-api-web/v2/shipments",
|
|
996
|
+
header: {
|
|
997
|
+
accept: "application/json",
|
|
998
|
+
"user-agent": "Hermes/33 CFNetwork/1240.0.4 Darwin/20.6.0",
|
|
999
|
+
"accept-language": "de-de",
|
|
1000
|
+
authorization: "Bearer " + this.hermesAuthToken,
|
|
1001
|
+
},
|
|
1002
|
+
},
|
|
1003
|
+
],
|
|
937
1004
|
ups: [
|
|
938
1005
|
{
|
|
939
1006
|
path: "ups",
|
|
@@ -993,6 +1060,12 @@ class Parcel extends utils.Adapter {
|
|
|
993
1060
|
}
|
|
994
1061
|
data = { sendungen: res.data.response.shipments };
|
|
995
1062
|
}
|
|
1063
|
+
if (id === "hermes") {
|
|
1064
|
+
for (const parcel of res.data) {
|
|
1065
|
+
parcel.id = parcel.shipmentId;
|
|
1066
|
+
}
|
|
1067
|
+
data = { sendungen: res.data };
|
|
1068
|
+
}
|
|
996
1069
|
const forceIndex = true;
|
|
997
1070
|
const preferedArrayName = null;
|
|
998
1071
|
if (id === "dpd") {
|
|
@@ -1057,7 +1130,7 @@ class Parcel extends utils.Adapter {
|
|
|
1057
1130
|
native: {},
|
|
1058
1131
|
});
|
|
1059
1132
|
}
|
|
1060
|
-
if ((id === "dhl" || id === "dpd" || id === "amz" || id === "gls" || id === "ups") && data && data.sendungen) {
|
|
1133
|
+
if ((id === "dhl" || id === "dpd" || id === "amz" || id === "gls" || id === "ups" || id === "hermes") && data && data.sendungen) {
|
|
1061
1134
|
const states = await this.getStatesAsync(id + ".sendungen*.id");
|
|
1062
1135
|
const sendungsArray = data.sendungen.map((sendung) => {
|
|
1063
1136
|
return sendung.id;
|
|
@@ -1108,6 +1181,15 @@ class Parcel extends utils.Adapter {
|
|
|
1108
1181
|
});
|
|
1109
1182
|
this.mergedJson = this.mergedJson.concat(sendungsArray);
|
|
1110
1183
|
}
|
|
1184
|
+
if (id === "hermes" && data.sendungen) {
|
|
1185
|
+
const sendungsArray = data.sendungen.map((sendung) => {
|
|
1186
|
+
const sendungsObject = { id: sendung.id, name: sendung.description, status: sendung.lastStatusMessage, source: "Hermes" };
|
|
1187
|
+
this.mergedJsonObject[sendung.id] = sendungsObject;
|
|
1188
|
+
this.inDeliveryCheck(sendungsObject);
|
|
1189
|
+
return sendungsObject;
|
|
1190
|
+
});
|
|
1191
|
+
this.mergedJson = this.mergedJson.concat(sendungsArray);
|
|
1192
|
+
}
|
|
1111
1193
|
|
|
1112
1194
|
if (id === "dpd" && data && data.sendungen) {
|
|
1113
1195
|
for (const sendung of data.sendungen) {
|
|
@@ -1169,14 +1251,13 @@ class Parcel extends utils.Adapter {
|
|
|
1169
1251
|
this.sendTo(this.config.sendToInstance, "📦 " + sendungen[id].name + "\n" + sendungen[id].status);
|
|
1170
1252
|
this.alreadySentMessages[id + sendungen[id].source] = sendungen[id].status;
|
|
1171
1253
|
}
|
|
1172
|
-
|
|
1173
|
-
// this.setState("alreadySentMessages", JSON.stringify(this.alreadySentMessages), true);
|
|
1174
1254
|
}
|
|
1175
1255
|
}
|
|
1176
1256
|
inDeliveryCheck(sendungsObject) {
|
|
1177
1257
|
if (
|
|
1178
1258
|
sendungsObject.status.toLocaleLowerCase().includes("in zustellung") ||
|
|
1179
|
-
|
|
1259
|
+
sendungsObject.status.toLocaleLowerCase().includes("zustellung heute") ||
|
|
1260
|
+
sendungsObject.status.toLocaleLowerCase().includes("heute zugestell") ||
|
|
1180
1261
|
sendungsObject.status.toLocaleLowerCase().includes("wird zugestellt") ||
|
|
1181
1262
|
sendungsObject.status.toLocaleLowerCase().includes("zustellfahrzeug")
|
|
1182
1263
|
) {
|
|
@@ -1386,6 +1467,12 @@ class Parcel extends utils.Adapter {
|
|
|
1386
1467
|
if (id === "gls") {
|
|
1387
1468
|
this.loginGLS();
|
|
1388
1469
|
}
|
|
1470
|
+
if (id === "ups") {
|
|
1471
|
+
this.loginUPS();
|
|
1472
|
+
}
|
|
1473
|
+
if (id === "hermes") {
|
|
1474
|
+
this.loginHermes();
|
|
1475
|
+
}
|
|
1389
1476
|
}
|
|
1390
1477
|
}
|
|
1391
1478
|
async createDHLStates() {
|
package/package.json
CHANGED