iobroker.parcel 0.0.2

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 TA2k <tombox2020@gmail.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,140 @@
1
+ ![Logo](admin/parcel.png)
2
+
3
+ # ioBroker.parcel
4
+
5
+ [![NPM version](https://img.shields.io/npm/v/iobroker.parcel.svg)](https://www.npmjs.com/package/iobroker.parcel)
6
+ [![Downloads](https://img.shields.io/npm/dm/iobroker.parcel.svg)](https://www.npmjs.com/package/iobroker.parcel)
7
+ ![Number of Installations](https://iobroker.live/badges/parcel-installed.svg)
8
+ ![Current version in stable repository](https://iobroker.live/badges/parcel-stable.svg)
9
+ [![Dependency Status](https://img.shields.io/david/TA2k/iobroker.parcel.svg)](https://david-dm.org/TA2k/iobroker.parcel)
10
+
11
+ [![NPM](https://nodei.co/npm/iobroker.parcel.png?downloads=true)](https://nodei.co/npm/iobroker.parcel/)
12
+
13
+ **Tests:** ![Test and Release](https://github.com/TA2k/ioBroker.parcel/workflows/Test%20and%20Release/badge.svg)
14
+
15
+ ## parcel adapter for ioBroker
16
+
17
+ Parcel tracking
18
+
19
+ ## Loginablauf
20
+
21
+ DHL:
22
+
23
+ * DHL App Login eingeben
24
+ * SMS/EMail Code erhalten
25
+ * In die Instanzeinstellungen eingeben und speichern
26
+
27
+ ## Amazon Vorbedingungen
28
+
29
+ Es müssen auf Linuxsysteme Pakete installiert werden.
30
+ Nach jeder Variante den Adapter neustarten um zu sehen ob der Login funktioniert.
31
+
32
+ Variante #1 minimal
33
+
34
+ ```
35
+ sudo apt-get install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm-dev libxkbcommon-dev libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm-dev libpango-1.0-0
36
+ ```
37
+
38
+ Variante #2 falls Variante #1 nicht funktioniert
39
+
40
+ ```
41
+ sudo apt-get install -yq \
42
+ gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
43
+ libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
44
+ libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 \
45
+ libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates \
46
+ fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
47
+ ```
48
+
49
+ Variante #3 **Nur Falls Variante #2 nicht funktioniert**
50
+
51
+ ```
52
+ sudo apt-get install -y chromium-browser
53
+ ```
54
+
55
+ ## Skripte
56
+
57
+ ### Telegram Benachrichtigung bei Statusänderung via Javascript Skript:
58
+
59
+ ```
60
+ const alreadySentMessages = {}
61
+ on({ id: "parcel.0.allProviderObjects", change: "ne" }, function (obj) {
62
+ const sendungen = JSON.parse(obj.state.val)
63
+ const ids = Object.keys(sendungen)
64
+ for (const id of ids) {
65
+ if (alreadySentMessages[id] === sendungen[id].status) {
66
+ return
67
+ }
68
+ sendTo('telegram.0', sendungen[id].name + '\n' + sendungen[id].status);
69
+ alreadySentMessages[id] = sendungen[id].status
70
+ }
71
+ });
72
+ ```
73
+
74
+ ### DHL Briefverfolgung Telegram versenden via Javascript Skript:
75
+
76
+ ```
77
+ const alreadySent = {}
78
+ const fs = require('fs')
79
+ on({id:/^parcel\.0\.dhl\.briefe.*image$/, change: "ne"}, async function(obj){
80
+
81
+ const parentId = obj.id.split(".")
82
+ parentId.splice(-1)
83
+ parentId.push("image_url")
84
+ const urlState = await getStateAsync(parentId.join("."))
85
+
86
+ if (alreadySent[urlState.val]) {
87
+ return
88
+ }
89
+ const base64Data = obj.state.val.split("base64,")[1]
90
+ fs.writeFile("/tmp/snapshot.jpg", base64Data, 'base64', function(err) {
91
+ if (err) {
92
+ console.error(err);
93
+ } else {
94
+ sendTo('telegram.0', 'Briefankündigung');
95
+ sendTo('telegram.0', '/tmp/snapshot.jpg');
96
+ alreadySent[urlState.val] = true
97
+ }
98
+ });
99
+ });
100
+
101
+
102
+ ```
103
+
104
+ ### DHL Briefverfolgung in der Vis anzeigen.
105
+
106
+ Den Datenpunkt image ein "String img src" element als Object ID zuordnen
107
+
108
+ ## Diskussion und Fragen
109
+
110
+ <https://forum.iobroker.net/topic/51795/test-adapter-parcel-paketverfolgung-dhl-v0-0-1>
111
+
112
+ ## Changelog
113
+
114
+ ### 0.0.1
115
+
116
+ * (TA2k) initial release
117
+
118
+ ## License
119
+
120
+ MIT License
121
+
122
+ Copyright (c) 2022 TA2k <tombox2020@gmail.com>
123
+
124
+ Permission is hereby granted, free of charge, to any person obtaining a copy
125
+ of this software and associated documentation files (the "Software"), to deal
126
+ in the Software without restriction, including without limitation the rights
127
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
128
+ copies of the Software, and to permit persons to whom the Software is
129
+ furnished to do so, subject to the following conditions:
130
+
131
+ The above copyright notice and this permission notice shall be included in all
132
+ copies or substantial portions of the Software.
133
+
134
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
135
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
136
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
137
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
138
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
139
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
140
+ SOFTWARE.
@@ -0,0 +1,157 @@
1
+ <html>
2
+ <head>
3
+ <!-- Load ioBroker scripts and styles-->
4
+ <link rel="stylesheet" type="text/css" href="../../css/adapter.css" />
5
+ <link rel="stylesheet" type="text/css" href="../../lib/css/materialize.css" />
6
+
7
+ <script type="text/javascript" src="../../lib/js/jquery-3.2.1.min.js"></script>
8
+ <script type="text/javascript" src="../../socket.io/socket.io.js"></script>
9
+
10
+ <script type="text/javascript" src="../../js/translate.js"></script>
11
+ <script type="text/javascript" src="../../lib/js/materialize.js"></script>
12
+ <script type="text/javascript" src="../../js/adapter-settings.js"></script>
13
+
14
+ <!-- Load our own files -->
15
+ <link rel="stylesheet" type="text/css" href="style.css" />
16
+ <script type="text/javascript" src="words.js"></script>
17
+
18
+ <script type="text/javascript">
19
+ // This will be called by the admin adapter when the settings page loads
20
+ function load(settings, onChange) {
21
+ // example: select elements with id=key and class=value and insert value
22
+ if (!settings) return;
23
+ $(".value").each(function () {
24
+ var $key = $(this);
25
+ var id = $key.attr("id");
26
+ if ($key.attr("type") === "checkbox") {
27
+ // do not call onChange direct, because onChange could expect some arguments
28
+ $key.prop("checked", settings[id]).on("change", () => onChange());
29
+ } else {
30
+ // do not call onChange direct, because onChange could expect some arguments
31
+ $key.val(settings[id])
32
+ .on("change", () => onChange())
33
+ .on("keyup", () => onChange());
34
+ }
35
+ });
36
+ onChange(false);
37
+ // reinitialize all the Materialize labels on the page if you are dynamically adding inputs:
38
+ if (M) M.updateTextFields();
39
+ }
40
+
41
+ // This will be called by the admin adapter when the user presses the save button
42
+ function save(callback) {
43
+ // example: select elements with class=value and build settings object
44
+ var obj = {};
45
+ $(".value").each(function () {
46
+ var $this = $(this);
47
+ if ($this.attr("type") === "checkbox") {
48
+ obj[$this.attr("id")] = $this.prop("checked");
49
+ } else if ($this.attr("type") === "number") {
50
+ obj[$this.attr("id")] = parseFloat($this.val());
51
+ } else {
52
+ obj[$this.attr("id")] = $this.val();
53
+ }
54
+ });
55
+ callback(obj);
56
+ }
57
+ </script>
58
+ </head>
59
+
60
+ <body>
61
+ <div class="m adapter-container">
62
+ <div class="row">
63
+ <div class="col s12 m4 l2">
64
+ <img src="parcel.png" class="logo" />
65
+ </div>
66
+ </div>
67
+
68
+ <!-- Put your content here -->
69
+ <div class="row">
70
+ <div class="col">DHL</div>
71
+ </div>
72
+ <div class="row">
73
+ <div class="col s6 input-field">
74
+ <input type="text" class="value" id="dhlusername" />
75
+ <label for="dhlusername" class="translate">App Email</label>
76
+ </div>
77
+ </div>
78
+ <div class="row">
79
+ <div class="col s6 input-field">
80
+ <input type="password" class="value" id="dhlpassword" />
81
+ <label for="dhlpassword" class="translate">App Password</label>
82
+ </div>
83
+ </div>
84
+ <div class="row">
85
+ <div class="col s6 input-field">
86
+ <input type="text" class="value" id="dhlMfa" />
87
+ <label for="dhlMfa" class="translate">SMS/Mail Pin nach erstem Start</label>
88
+ </div>
89
+ </div>
90
+ <div class="row">
91
+ <div class="col">Amazon (erhöhter RAM Verbrauch)</div>
92
+ <a href="https://github.com/TA2k/ioBroker.parcel/blob/master/README.md#amazon-vorbedingungen" target="_blank">Linux Zusatzpakete installieren</a>
93
+ </div>
94
+ <div class="row">
95
+ <div class="col s6 input-field">
96
+ <input type="text" class="value" id="amzusername" />
97
+ <label for="amzusername" class="translate">App Email</label>
98
+ </div>
99
+ </div>
100
+ <div class="row">
101
+ <div class="col s6 input-field">
102
+ <input type="password" class="value" id="amzpassword" />
103
+ <label for="amzpassword" class="translate">App Password</label>
104
+ </div>
105
+ </div>
106
+ <div class="row">
107
+ <div class="col">DPD</div>
108
+ </div>
109
+ <div class="row">
110
+ <div class="col s6 input-field">
111
+ <input type="text" class="value" id="dpdusername" />
112
+ <label for="dpdusername" class="translate">App Email</label>
113
+ </div>
114
+ </div>
115
+ <div class="row">
116
+ <div class="col s6 input-field">
117
+ <input type="password" class="value" id="dpdpassword" />
118
+ <label for="dpdpassword" class="translate">App Password</label>
119
+ </div>
120
+ </div>
121
+ <div class="row">
122
+ <div class="col">17Track Normal User</div>
123
+ </div>
124
+ <div class="row">
125
+ <div class="col s6 input-field">
126
+ <input type="text" class="value" id="t17username" />
127
+ <label for="t17username" class="translate">App Email</label>
128
+ </div>
129
+ </div>
130
+ <div class="row">
131
+ <div class="col s6 input-field">
132
+ <input type="password" class="value" id="t17password" />
133
+ <label for="t17password" class="translate">App Password</label>
134
+ </div>
135
+ </div>
136
+ <div class="row">
137
+ <div class="col">
138
+ <div>17Track</div>
139
+ <a href="https://api.17track.net/en/admin/settings" target="_blank">Register HERE to receive a API Key</a>
140
+ </div>
141
+ </div>
142
+ <div class="row">
143
+ <div class="col s6 input-field">
144
+ <input type="text" class="value" id="17trackKey" />
145
+ <label for="17trackKey" class="translate">17Track API Key</label>
146
+ </div>
147
+ </div>
148
+
149
+ <div class="row">
150
+ <div class="col s2 input-field">
151
+ <input type="number" class="value" id="interval" />
152
+ <label for="interval" class="translate">Update interval in minutes</label>
153
+ </div>
154
+ </div>
155
+ </div>
156
+ </body>
157
+ </html>
Binary file
@@ -0,0 +1,32 @@
1
+ /* You can delete those if you want. I just found them very helpful */
2
+ * {
3
+ box-sizing: border-box
4
+ }
5
+ .m {
6
+ /* Don't cut off dropdowns! */
7
+ overflow: initial;
8
+ }
9
+ .m.adapter-container,
10
+ .m.adapter-container > div.App {
11
+ /* Fix layout/scrolling issues with tabs */
12
+ height: 100%;
13
+ width: 100%;
14
+ position: relative;
15
+ }
16
+ .m .select-wrapper + label {
17
+ /* The positioning for dropdown labels is messed up */
18
+ transform: none !important;
19
+ }
20
+
21
+ label > i[title] {
22
+ /* Display the help cursor for the tooltip icons and fix their positioning */
23
+ cursor: help;
24
+ margin-left: 0.25em;
25
+ }
26
+
27
+ .dropdown-content {
28
+ /* Don't wrap text in dropdowns */
29
+ white-space: nowrap;
30
+ }
31
+
32
+ /* Add your styles here */
package/admin/words.js ADDED
@@ -0,0 +1,53 @@
1
+ /*global systemDictionary:true */
2
+ "use strict";
3
+
4
+ systemDictionary = {
5
+ "parcel adapter settings": {
6
+ en: "Adapter settings for parcel",
7
+ de: "Adaptereinstellungen für parcel",
8
+ ru: "Настройки адаптера для parcel",
9
+ pt: "Configurações do adaptador para parcel",
10
+ nl: "Adapterinstellingen voor parcel",
11
+ fr: "Paramètres d'adaptateur pour parcel",
12
+ it: "Impostazioni dell'adattatore per parcel",
13
+ es: "Ajustes del adaptador para parcel",
14
+ pl: "Ustawienia adaptera dla parcel",
15
+ "zh-cn": "parcel的适配器设置",
16
+ },
17
+ "App Email": {
18
+ en: "App Email",
19
+ de: "App-E-Mail",
20
+ ru: "Электронная почта приложения",
21
+ pt: "Email do aplicativo",
22
+ nl: "App-e-mail",
23
+ fr: "Courriel de l'application",
24
+ it: "E-mail dell'app",
25
+ es: "Correo electrónico de la aplicación",
26
+ pl: "E-mail aplikacji",
27
+ "zh-cn": "应用电子邮件",
28
+ },
29
+ "App Password": {
30
+ en: "App Password",
31
+ de: "App-Passwort",
32
+ ru: "Пароль приложения",
33
+ pt: "Senha de app",
34
+ nl: "App-wachtwoord",
35
+ fr: "Mot de passe de l'application",
36
+ it: "Password dell'app",
37
+ es: "Contraseña de la aplicación",
38
+ pl: "Hasło do aplikacji",
39
+ "zh-cn": "应用密码",
40
+ },
41
+ "Update interval (in minutes)": {
42
+ en: "Update interval (in minutes)",
43
+ de: "Aktualisierungsintervall (in Minuten)",
44
+ ru: "Интервал обновления (в минутах)",
45
+ pt: "Intervalo de atualização (em minutos)",
46
+ nl: "Update-interval (in minuten)",
47
+ fr: "Intervalle de mise à jour (en minutes)",
48
+ it: "Intervallo di aggiornamento (in minuti)",
49
+ es: "Intervalo de actualización (en minutos)",
50
+ pl: "Interwał aktualizacji (w minutach)",
51
+ "zh-cn": "更新间隔(分钟)",
52
+ },
53
+ };
@@ -0,0 +1,270 @@
1
+ {
2
+ "common": {
3
+ "name": "parcel",
4
+ "version": "0.0.2",
5
+ "news": {
6
+ "0.0.2": {
7
+ "en": "initial release",
8
+ "de": "Erstveröffentlichung",
9
+ "ru": "Начальная версия",
10
+ "pt": "lançamento inicial",
11
+ "nl": "Eerste uitgave",
12
+ "fr": "Première version",
13
+ "it": "Versione iniziale",
14
+ "es": "Versión inicial",
15
+ "pl": "Pierwsze wydanie",
16
+ "zh-cn": "首次出版"
17
+ }
18
+ },
19
+ "title": "Parcel tracking",
20
+ "titleLang": {
21
+ "en": "Parcel tracking",
22
+ "de": "Paket Sendungsverfolgung",
23
+ "ru": "Отслеживание посылок",
24
+ "pt": "Rastreamento de encomendas",
25
+ "nl": "Pakket volgen",
26
+ "fr": "Suivi colis",
27
+ "it": "Tracciamento del pacco",
28
+ "es": "Seguimiento de paquetes",
29
+ "pl": "Śledzenie przesyłek",
30
+ "zh-cn": "包裹追踪"
31
+ },
32
+ "desc": {
33
+ "en": "Parcel tracking",
34
+ "de": "Paket Sendungsverfolgung",
35
+ "ru": "Отслеживание посылок",
36
+ "pt": "Rastreamento de encomendas",
37
+ "nl": "Pakket volgen",
38
+ "fr": "Suivi colis",
39
+ "it": "Tracciamento del pacco",
40
+ "es": "Seguimiento de paquetes",
41
+ "pl": "Śledzenie przesyłek",
42
+ "zh-cn": "包裹追踪"
43
+ },
44
+ "authors": [
45
+ "TA2k <tombox2020@gmail.com>"
46
+ ],
47
+ "keywords": [
48
+ "parcel",
49
+ "tracking",
50
+ "dhl",
51
+ "paket",
52
+ "17Track",
53
+ "Amazon",
54
+ "dpd",
55
+ "briefe"
56
+ ],
57
+ "license": "MIT",
58
+ "platform": "Javascript/Node.js",
59
+ "main": "main.js",
60
+ "icon": "parcel.png",
61
+ "enabled": true,
62
+ "extIcon": "https://raw.githubusercontent.com/TA2k/ioBroker.parcel/master/admin/parcel.png",
63
+ "readme": "https://github.com/TA2k/ioBroker.parcel/blob/master/README.md",
64
+ "loglevel": "info",
65
+ "mode": "daemon",
66
+ "type": "misc-data",
67
+ "compact": true,
68
+ "connectionType": "cloud",
69
+ "dataSource": "poll",
70
+ "materialize": true,
71
+ "plugins": {
72
+ "sentry": {
73
+ "dsn": ""
74
+ }
75
+ },
76
+ "dependencies": [
77
+ {
78
+ "js-controller": ">=3.2.0"
79
+ }
80
+ ],
81
+ "globalDependencies": [
82
+ {
83
+ "admin": ">=4.0.9"
84
+ }
85
+ ]
86
+ },
87
+ "encryptedNative": [
88
+ "dhlpassword",
89
+ "amzpassword",
90
+ "dpdpassword",
91
+ "t17password"
92
+ ],
93
+ "protectedNative": [
94
+ "dhlpassword",
95
+ "amzpassword",
96
+ "dpdpassword",
97
+ "t17password"
98
+ ],
99
+ "native": {
100
+ "amzusername": "",
101
+ "amzpassword": "",
102
+ "t17username": "",
103
+ "t17password": "",
104
+ "dpdusername": "",
105
+ "dpdpassword": "",
106
+ "dhlusername": "",
107
+ "dhlpassword": "",
108
+ "dhlMfa": "",
109
+ "17trackKey": "",
110
+ "interval": 10
111
+ },
112
+ "objects": [],
113
+ "instanceObjects": [
114
+ {
115
+ "_id": "info",
116
+ "type": "channel",
117
+ "common": {
118
+ "name": "Information"
119
+ },
120
+ "native": {}
121
+ },
122
+ {
123
+ "_id": "allProviderJson",
124
+ "type": "state",
125
+ "common": {
126
+ "role": "state",
127
+ "name": "Tracking List of all Providers",
128
+ "type": "json",
129
+ "read": true,
130
+ "write": false
131
+ },
132
+ "native": {}
133
+ },
134
+ {
135
+ "_id": "allProviderObjects",
136
+ "type": "state",
137
+ "common": {
138
+ "role": "state",
139
+ "name": "Tracking Dictionary of all Providers",
140
+ "type": "json",
141
+ "read": true,
142
+ "write": false
143
+ },
144
+ "native": {}
145
+ },
146
+ {
147
+ "_id": "17t",
148
+ "type": "channel",
149
+ "common": {
150
+ "name": "17Track API key Tracking"
151
+ },
152
+ "native": {}
153
+ },
154
+ {
155
+ "_id": "17t.trackinginfo",
156
+ "type": "channel",
157
+ "common": {
158
+ "name": "17Track Tracking Info"
159
+ },
160
+ "native": {}
161
+ },
162
+ {
163
+ "_id": "17t.register",
164
+ "type": "state",
165
+ "common": {
166
+ "role": "state",
167
+ "name": "Register a new tracking id",
168
+ "type": "mixed",
169
+ "read": true,
170
+ "write": true
171
+ },
172
+ "native": {}
173
+ },
174
+ {
175
+ "_id": "17t.trackinginfo.json",
176
+ "type": "state",
177
+ "common": {
178
+ "role": "state",
179
+ "name": "Json tracking info",
180
+ "type": "mixed",
181
+ "read": true,
182
+ "write": false,
183
+ "def": false
184
+ },
185
+ "native": {}
186
+ },
187
+ {
188
+ "_id": "17t.deleteTrack",
189
+ "type": "state",
190
+ "common": {
191
+ "role": "state",
192
+ "name": "Unregister a tracking id",
193
+ "type": "mixed",
194
+ "read": true,
195
+ "write": true
196
+ },
197
+ "native": {}
198
+ },
199
+ {
200
+ "_id": "17t.trackList",
201
+ "type": "state",
202
+ "common": {
203
+ "role": "state",
204
+ "name": "Registered tracking ids",
205
+ "type": "object",
206
+ "read": true,
207
+ "write": false
208
+ },
209
+ "native": {}
210
+ },
211
+ {
212
+ "_id": "auth",
213
+ "type": "channel",
214
+ "common": {
215
+ "name": "Auth Information"
216
+ },
217
+ "native": {}
218
+ },
219
+ {
220
+ "_id": "auth.dhlMfaToken",
221
+ "type": "state",
222
+ "common": {
223
+ "role": "state",
224
+ "name": "DHL Mfa Token",
225
+ "type": "string",
226
+ "read": true,
227
+ "write": false
228
+ },
229
+ "native": {}
230
+ },
231
+ {
232
+ "_id": "auth.cookie",
233
+ "type": "state",
234
+ "common": {
235
+ "role": "state",
236
+ "name": "Cookie state",
237
+ "type": "string",
238
+ "read": true,
239
+ "write": false
240
+ },
241
+ "native": {}
242
+ },
243
+ {
244
+ "_id": "info.connection",
245
+ "type": "state",
246
+ "common": {
247
+ "role": "indicator.connected",
248
+ "name": "Device or service connected",
249
+ "type": "boolean",
250
+ "read": true,
251
+ "write": false,
252
+ "def": false
253
+ },
254
+ "native": {}
255
+ },
256
+ {
257
+ "_id": "refresh",
258
+ "type": "state",
259
+ "common": {
260
+ "role": "boolean",
261
+ "name": "Force data refresh",
262
+ "type": "boolean",
263
+ "read": true,
264
+ "write": true,
265
+ "def": false
266
+ },
267
+ "native": {}
268
+ }
269
+ ]
270
+ }