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 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
- ### DHL Briefverfolgung in der Vis anzeigen.
40
+ **Sendungen als Vis Table darstellen**
40
41
 
41
- Den Datenpunkt image ein "String img src" element als Object ID zuordnen
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
 
@@ -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.7",
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.warn("Login to DPD failed");
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
- (sendungsObject.status.toLocaleLowerCase().includes("heute") && !sendungsObject.status.toLocaleLowerCase().includes("heute bestellt")) ||
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.parcel",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "Parcel tracking",
5
5
  "author": {
6
6
  "name": "TA2k",
@@ -15,6 +15,7 @@
15
15
  "briefe",
16
16
  "dpd",
17
17
  "gls",
18
+ "hermes",
18
19
  "ups",
19
20
  "amazon",
20
21
  "paket"