iobroker.zeekr 0.1.46

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) 2026 Fryyyyy
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,256 @@
1
+ # ioBroker Zeekr Adapter
2
+
3
+ <p align="center">
4
+ <img src="admin/zeekr.svg" alt="Zeekr logo" width="160" height="160" />
5
+ </p>
6
+
7
+ This repository contains an ioBroker adapter for [Zeekr electric vehicles](https://www.zeekr.com). It follows the standard ioBroker adapter structure and exposes vehicle state data as datapoints.
8
+
9
+ ## Features
10
+
11
+ - Standard ioBroker adapter layout with a configuration UI
12
+ - Zeekr username/password plus the Zeekr-specific secrets required by the upstream zeekr_ev_api client are configurable in the ioBroker admin interface
13
+ - Optional automatic secret extraction from a `zeekr_secrets.json` file or directly from the Zeekr APKs on the ioBroker host
14
+ - Vehicle discovery and status polling via a Python bridge that uses the Zeekr API client
15
+ - Datapoints for vehicle identity, battery level, range, odometer, charging state, lock state, climate state, and raw payloads
16
+ - Health and alert states such as `info.health`, `info.alertCount`, and `info.lastSuccessfulUpdate`
17
+ - Automatic bootstrap of a local Python runtime and Zeekr dependency on first use
18
+
19
+ ## Requirements
20
+
21
+ - Node.js 18+ (20+ recommended)
22
+ - Python 3
23
+
24
+ No manual Python package installation is required. The adapter creates a local virtual environment on first run and installs the Zeekr dependency automatically.
25
+
26
+ ## Development
27
+
28
+ Run the test suite locally:
29
+
30
+ ```bash
31
+ npm test
32
+ ```
33
+
34
+ ## Installation in a local ioBroker instance
35
+
36
+ The adapter is designed to be installed directly into an ioBroker host.
37
+
38
+ Important: the adapter repository is published at `solderer-de/iobroker.zeekr`. For `iobroker url` installs, use a direct tarball URL from `codeload.github.com` rather than a GitHub repository URL or a GitHub release asset URL. The ioBroker CLI treats GitHub repository URLs as Git dependencies and can fall back to SSH-based installs; that is what triggers the `Permission denied (publickey)` failures on this host. A `codeload` tarball URL installs the package as a normal tarball and avoids that Git fallback.
39
+
40
+ For tarball-based installs, pass the adapter name explicitly as the second argument. `iobroker url <url> zeekr ...` is the reliable form for this adapter. Without the explicit adapter name, the CLI can treat the full URL as the adapter identifier and fail later in the install/upload step even though the npm tarball install itself succeeded.
41
+
42
+ ### Install via CLI (recommended)
43
+
44
+ Use this exact install form:
45
+
46
+ ```bash
47
+ iobroker url https://codeload.github.com/solderer-de/iobroker.zeekr/tar.gz/refs/tags/v0.1.45 zeekr --host iobroker --debug
48
+ ```
49
+
50
+ The second argument (`zeekr`) is required for this adapter. This is the concrete install command for the current release.
51
+
52
+ ### Install via ioBroker Admin UI
53
+
54
+ If you prefer the Admin UI, use the same GitHub release asset URL in the "Adapter from URL install" field. If you upload a file instead, upload the tarball from the release; it must contain the adapter package root with `io-package.json`, `package.json`, `main.js`, `lib/`, `admin/`, and `img/`.
55
+
56
+ After installation, restart ioBroker and create a new instance of the `Zeekr` adapter.
57
+
58
+ ### Repairing a broken or half-installed adapter
59
+
60
+ If a previous install left a stale `node_modules/iobroker.zeekr` directory behind, `iobroker del zeekr` can fail with:
61
+
62
+ ```text
63
+ Cannot find module 'iobroker.zeekr/io-package.json'
64
+ ```
65
+
66
+ In that case, remove the stale module directory from the ioBroker host and reinstall the adapter from the current codeload tarball URL:
67
+
68
+ ```bash
69
+ sudo rm -rf /opt/iobroker/node_modules/iobroker.zeekr
70
+ sudo iobroker fix
71
+ sudo iobroker url https://codeload.github.com/solderer-de/iobroker.zeekr/tar.gz/refs/tags/v0.1.45 zeekr --host iobroker --debug
72
+ ```
73
+
74
+ The repository also ships helper scripts for this case:
75
+
76
+ ```bash
77
+ ./scripts/repair-install.sh
78
+ ./scripts/install-adapter.sh
79
+ ```
80
+
81
+ Both scripts use the same `codeload` tarball URL format and pass the adapter name `zeekr` explicitly for a clean, SSH-free installation path.
82
+
83
+ ### Option B: Install directly from a local checkout
84
+
85
+ If you want to test the adapter from a local repository checkout, run:
86
+
87
+ ```bash
88
+ cd /path/to/iobroker.zeekr
89
+ npm ci
90
+ ```
91
+
92
+ Then make the adapter visible to ioBroker on a typical Linux host:
93
+
94
+ ```bash
95
+ mkdir -p /opt/iobroker/node_modules
96
+ ln -s /path/to/iobroker.zeekr /opt/iobroker/node_modules/iobroker.zeekr
97
+ ```
98
+
99
+ If you run ioBroker in Docker or a different base path, adapt the target directory accordingly.
100
+
101
+ ### 3. Restart ioBroker
102
+
103
+ Restart the ioBroker service or container so the adapter is discovered.
104
+
105
+ ### 4. Add an instance in the admin UI
106
+
107
+ Open the ioBroker Admin UI, create a new instance of the `Zeekr` adapter, and configure:
108
+
109
+ - username: your Zeekr account email or login name
110
+ - password: your Zeekr account password
111
+ - countryCode: ISO country code used by the upstream Zeekr API client (defaults to `AU`)
112
+ - hmacAccessKey: HMAC access key required by the upstream client
113
+ - hmacSecretKey: HMAC secret key required by the upstream client
114
+ - passwordPublicKey: password encryption public key required by the upstream client
115
+ - prodSecret: production secret required by the upstream client
116
+ - vinKey: VIN encryption key required by the upstream client
117
+ - vinIv: VIN encryption IV required by the upstream client
118
+ - polling interval: refresh interval in seconds
119
+ - vehicle filter: optional substring filter for one or more vehicles; it only decides which vehicles are exposed as datapoints
120
+ - pythonBinary: optional override for the Python executable used by the adapter bridge and secret extractor
121
+ - autoExtractSecrets: if enabled, the adapter will try to extract missing secrets from the APKs or from a `zeekr_secrets.json` file when the adapter starts
122
+ - apkBasePath/apkArm64Path: optional paths to the Zeekr APK files for automated extraction
123
+ - secretsJsonPath: optional path to a `zeekr_secrets.json` created by the extractor
124
+ - extractRegion: region used by the upstream extractor (`EM`, `SEA`, `EU`, `CN`)
125
+ - debug: enable verbose bridge logging
126
+
127
+ ## Automatic secret extraction
128
+
129
+ The adapter can automate the extraction flow from the upstream `zeekr_key_extractor` tool. For this to work, you need either:
130
+
131
+ - the full Zeekr base APK and the matching ARM64 split APK on the ioBroker host, or
132
+ - a pre-generated `zeekr_secrets.json` file.
133
+
134
+ ### How to obtain the APKs from a phone or emulator
135
+
136
+ 1. On the Android phone or emulator, install the Zeekr app from the Play Store or from the APK package you already have.
137
+ 2. Export the installed app package from the device/emulator. Typical ways are:
138
+ - use `adb shell pm path <package>` and `adb pull` to copy the APK from the device
139
+ - use an emulator snapshot or Android backup tool to export the app package
140
+ - if you already have the APK from another source, use that file directly
141
+ 3. If you use `adb`, the typical workflow is:
142
+ - `adb devices`
143
+ - `adb shell pm path com.zeekr.app` (or the package name used by your Zeekr app build)
144
+ - `adb pull /data/app/<...>/base.apk /tmp/base.apk`
145
+ - `adb pull /data/app/<...>/split_config.arm64_v8a.apk /tmp/arm64.apk`
146
+ 4. Copy the resulting files to a location readable by the `iobroker` user on the ioBroker host, for example:
147
+ - `sudo mkdir -p /opt/iobroker/iobroker-data/zeekr`
148
+ - `sudo cp /tmp/base.apk /opt/iobroker/iobroker-data/zeekr/base.apk`
149
+ - `sudo cp /tmp/arm64.apk /opt/iobroker/iobroker-data/zeekr/arm64.apk`
150
+ 5. Make sure the files are readable by the `iobroker` user:
151
+ - `sudo chown iobroker:iobroker /opt/iobroker/iobroker-data/zeekr/base.apk /opt/iobroker/iobroker-data/zeekr/arm64.apk`
152
+ - `sudo chmod 644 /opt/iobroker/iobroker-data/zeekr/base.apk /opt/iobroker/iobroker-data/zeekr/arm64.apk`
153
+ 6. In the adapter admin UI, enable `autoExtractSecrets` and enter the absolute paths in `apkBasePath` and `apkArm64Path`.
154
+ 7. Set `extractRegion` to the region that matches your Zeekr account (`EM`, `SEA`, `EU`, or `CN`).
155
+ 8. Save the adapter configuration and restart the instance. The adapter will then try to clone the extractor tool into `.tools/zeekr_key_extractor`, install its Python dependencies, run the extractor, and populate the missing secrets automatically.
156
+
157
+ ### Alternative: use a secrets JSON file
158
+
159
+ If you already have a `zeekr_secrets.json` from the extractor, you can skip the APK step completely and provide its absolute path in `secretsJsonPath`.
160
+
161
+ This removes the need to copy the six secrets manually into the admin page once the APKs or the JSON file are available on the host.
162
+
163
+ ## Configuration
164
+
165
+ The adapter exposes the following configuration fields:
166
+
167
+ - `username`
168
+ - `password`
169
+ - `countryCode`
170
+ - `hmacAccessKey`
171
+ - `hmacSecretKey`
172
+ - `passwordPublicKey`
173
+ - `prodSecret`
174
+ - `vinKey`
175
+ - `vinIv`
176
+ - `pollingInterval`
177
+ - `vehicleFilter`
178
+ - `pythonBinary` (optional)
179
+ - `autoExtractSecrets` (boolean)
180
+ - `apkBasePath` / `apkArm64Path` (optional)
181
+ - `secretsJsonPath` (optional)
182
+ - `extractRegion`
183
+ - `debug` (boolean)
184
+
185
+ ## Datapoints
186
+
187
+ The adapter creates a vehicle channel for each discovered vehicle with the following subchannels:
188
+
189
+ - `status`: battery, range, odometer, charging power, speed, plug state, charging state, lock state, climate state, and timestamps
190
+ - `control`: command payload, service ID, send button, last command, and last result
191
+ - `raw`: raw payloads from the bridge
192
+ - `details`: additional metadata such as model information
193
+
194
+ The adapter also exposes root states under `info` for connection status, health, errors, logs, and the last successful update.
195
+
196
+ ## Commands
197
+
198
+ The adapter accepts a lightweight `sendCommand` message with:
199
+
200
+ - `vin`: target vehicle VIN
201
+ - `command`: remote-control command (for example `start` or `stop`, depending on the target action)
202
+ - `serviceId`: Zeekr service identifier (for example `RCS` for charge control or other remote-control services)
203
+ - `setting`: payload object forwarded to the Zeekr API
204
+
205
+ The command is routed through the Python bridge and forwarded to the underlying `zeekr_ev_api` client.
206
+
207
+ ## Release and Maintenance
208
+
209
+ - The repository includes GitHub Actions for CI and release creation.
210
+ - Releases are automated with `release-please`; publishing a release triggers the asset build workflow.
211
+ - The release workflow builds a tar archive and attaches it to the GitHub release automatically.
212
+ - A scheduled upstream sync workflow checks the reference repository for new commits and opens a tracking issue when changes are detected.
213
+
214
+ ## Roadmap
215
+
216
+ - [x] erweiterte Datenpunkte (VTM/Reifendruck/GPS/12V, Lade-Limit, Lade-/Travel-Pläne, letzte Trips)
217
+ - [x] typisierte Controls (Lock/Unlock, Klima Start/Stopp, Charge Start/Stopp via RCS, Charge-/Travel-Plan)
218
+ - [x] Live-Validierung ohne Account (Mock-Modus + `testConnection`-Message)
219
+ - [ ] Live-Validierung gegen echten Account (Command-Defaults pro Modell verifizieren)
220
+ - [ ] weitere Datenpunkte nach Bedarf
221
+
222
+ ## Disclaimer
223
+
224
+ Unofficial community project. Not affiliated with Zeekr or Geely.
225
+
226
+ - Personal and educational use only, at your own risk.
227
+ - The adapter talks to undocumented Zeekr APIs and derives keys from the official Android app (see `wysie/zeekr_key_extractor`). Reverse engineering and API use may violate Zeekr's terms and local law; check before use.
228
+ - Never commit APKs, `zeekr_secrets.json`, credentials, or tokens. Secrets belong in ioBroker `protectedNative`, never in git, logs, or states (enforced by CI secret scan).
229
+ - No APKs or keys are shipped in this repository.
230
+
231
+ ## Changelog
232
+
233
+ ### 0.1.46
234
+
235
+ - Correct Zeekr logo icon (re-rendered from SVG)
236
+
237
+ ### 0.1.45
238
+
239
+ - Repository compliance for the ioBroker listing (translations, license schema, encrypted secrets)
240
+ - Simplified admin with Zugang/Keys/Erweitert tabs
241
+ - Green CI on Ubuntu/Windows, secret scan, upstream dependency checks
242
+
243
+ ### 0.1.44
244
+
245
+ - EU key wizard with region preset, prod-secret candidates loop and error hints
246
+ - Typed charging/climate controls (lock, climate, RCS charge) and charge/travel plans
247
+ - Mock mode with testConnection for validation without a real account
248
+ - ioBroker repository compliance (vehicle type, news, encrypted secrets)
249
+
250
+ See [GitHub releases](https://github.com/solderer-de/ioBroker.zeekr/releases) for the full history. Releases are created automatically with release-please.
251
+
252
+ ## License
253
+
254
+ Copyright (c) 2026 solderer-de
255
+
256
+ MIT — see [LICENSE](LICENSE). This is an unofficial community project, not affiliated with Zeekr or Geely.
@@ -0,0 +1,321 @@
1
+ {
2
+ "i18n": false,
3
+ "type": "tabs",
4
+ "items": {
5
+ "access": {
6
+ "type": "panel",
7
+ "label": "Zugang",
8
+ "items": {
9
+ "_hint": {
10
+ "type": "staticText",
11
+ "text": "Zeekr-Account eintragen. EU-Konten (com.zeekr.overseas) brauchen Region EU. Details stehen im README.",
12
+ "sm": 12,
13
+ "xs": 12,
14
+ "md": 12,
15
+ "lg": 12,
16
+ "xl": 12
17
+ },
18
+ "username": {
19
+ "type": "text",
20
+ "label": "Benutzername (E-Mail)",
21
+ "help": "Tipp: Zweitaccount in der Zeekr-App fürs Auto freigeben (Fehler 079021 vermeiden).",
22
+ "sm": 6,
23
+ "xs": 12,
24
+ "md": 6,
25
+ "lg": 6,
26
+ "xl": 6
27
+ },
28
+ "password": {
29
+ "type": "password",
30
+ "label": "Passwort",
31
+ "sm": 6,
32
+ "xs": 12,
33
+ "md": 6,
34
+ "lg": 6,
35
+ "xl": 6
36
+ },
37
+ "countryCode": {
38
+ "type": "select",
39
+ "label": "Land",
40
+ "default": "AU",
41
+ "options": [
42
+ {
43
+ "label": "DE – Deutschland (EU)",
44
+ "value": "DE"
45
+ },
46
+ {
47
+ "label": "DK – Dänemark (EU)",
48
+ "value": "DK"
49
+ },
50
+ {
51
+ "label": "SE – Schweden (EU)",
52
+ "value": "SE"
53
+ },
54
+ {
55
+ "label": "NL – Niederlande (EU)",
56
+ "value": "NL"
57
+ },
58
+ {
59
+ "label": "EU – sonstiges Europa",
60
+ "value": "EU"
61
+ },
62
+ {
63
+ "label": "AU – Australien (EM)",
64
+ "value": "AU"
65
+ },
66
+ {
67
+ "label": "SG – Singapur (EM/SEA)",
68
+ "value": "SG"
69
+ },
70
+ {
71
+ "label": "CN – China",
72
+ "value": "CN"
73
+ }
74
+ ],
75
+ "sm": 6,
76
+ "xs": 12,
77
+ "md": 6,
78
+ "lg": 6,
79
+ "xl": 6
80
+ },
81
+ "extractRegion": {
82
+ "type": "select",
83
+ "label": "Region",
84
+ "help": "EU-Konten brauchen EU. Bei „Invalid access key“ ist die Region fast immer falsch.",
85
+ "default": "EM",
86
+ "options": [
87
+ {
88
+ "label": "EM – Emerging Markets",
89
+ "value": "EM"
90
+ },
91
+ {
92
+ "label": "EU – Europa",
93
+ "value": "EU"
94
+ },
95
+ {
96
+ "label": "SEA – Südostasien",
97
+ "value": "SEA"
98
+ },
99
+ {
100
+ "label": "CN – China",
101
+ "value": "CN"
102
+ }
103
+ ],
104
+ "sm": 6,
105
+ "xs": 12,
106
+ "md": 6,
107
+ "lg": 6,
108
+ "xl": 6
109
+ },
110
+ "autoExtractSecrets": {
111
+ "type": "checkbox",
112
+ "label": "Fehlende Keys beim Start automatisch auslesen",
113
+ "sm": 12,
114
+ "xs": 12,
115
+ "md": 12,
116
+ "lg": 12,
117
+ "xl": 12
118
+ },
119
+ "apkBasePath": {
120
+ "type": "text",
121
+ "label": "APK base.apk (Pfad am ioBroker-Host)",
122
+ "help": "z.B. /opt/iobroker/iobroker-data/zeekr/base.apk",
123
+ "sm": 6,
124
+ "xs": 12,
125
+ "md": 6,
126
+ "lg": 6,
127
+ "xl": 6
128
+ },
129
+ "apkArm64Path": {
130
+ "type": "text",
131
+ "label": "APK split_config.arm64_v8a.apk (Pfad)",
132
+ "help": "Enthält die HMAC-Keys. Nicht die xxhdpi-Datei nehmen.",
133
+ "sm": 6,
134
+ "xs": 12,
135
+ "md": 6,
136
+ "lg": 6,
137
+ "xl": 6
138
+ },
139
+ "secretsJsonPath": {
140
+ "type": "text",
141
+ "label": "Oder: zeekr_secrets.json Pfad (statt APKs)",
142
+ "sm": 12,
143
+ "xs": 12,
144
+ "md": 12,
145
+ "lg": 12,
146
+ "xl": 12
147
+ }
148
+ }
149
+ },
150
+ "keys": {
151
+ "type": "panel",
152
+ "label": "Keys",
153
+ "items": {
154
+ "_hint": {
155
+ "type": "staticText",
156
+ "text": "Werden per Auto-Extraktion gefüllt. Nur von Hand eintragen, wenn die Extraktion nicht möglich ist.",
157
+ "sm": 12,
158
+ "xs": 12,
159
+ "md": 12,
160
+ "lg": 12,
161
+ "xl": 12
162
+ },
163
+ "hmacAccessKey": {
164
+ "type": "password",
165
+ "label": "HMAC Access Key",
166
+ "sm": 6,
167
+ "xs": 12,
168
+ "md": 6,
169
+ "lg": 6,
170
+ "xl": 6
171
+ },
172
+ "hmacSecretKey": {
173
+ "type": "password",
174
+ "label": "HMAC Secret Key",
175
+ "sm": 6,
176
+ "xs": 12,
177
+ "md": 6,
178
+ "lg": 6,
179
+ "xl": 6
180
+ },
181
+ "passwordPublicKey": {
182
+ "type": "password",
183
+ "label": "Password Public Key",
184
+ "sm": 6,
185
+ "xs": 12,
186
+ "md": 6,
187
+ "lg": 6,
188
+ "xl": 6
189
+ },
190
+ "prodSecret": {
191
+ "type": "password",
192
+ "label": "Prod Secret",
193
+ "sm": 6,
194
+ "xs": 12,
195
+ "md": 6,
196
+ "lg": 6,
197
+ "xl": 6
198
+ },
199
+ "prodSecretCandidates": {
200
+ "type": "text",
201
+ "label": "Prod-Secret Kandidaten (kommagetrennt)",
202
+ "help": "Falls mehrere in zeekr_secrets.json stehen: alle hierher, werden durchprobiert.",
203
+ "sm": 12,
204
+ "xs": 12,
205
+ "md": 12,
206
+ "lg": 12,
207
+ "xl": 12
208
+ },
209
+ "vinKey": {
210
+ "type": "password",
211
+ "label": "VIN Key",
212
+ "sm": 6,
213
+ "xs": 12,
214
+ "md": 6,
215
+ "lg": 6,
216
+ "xl": 6
217
+ },
218
+ "vinIv": {
219
+ "type": "password",
220
+ "label": "VIN IV",
221
+ "sm": 6,
222
+ "xs": 12,
223
+ "md": 6,
224
+ "lg": 6,
225
+ "xl": 6
226
+ }
227
+ }
228
+ },
229
+ "advanced": {
230
+ "type": "panel",
231
+ "label": "Erweitert",
232
+ "items": {
233
+ "_hint": {
234
+ "type": "staticText",
235
+ "text": "Nur bei Problemen nötig. Fehlerhinweise stehen live unter info.lastErrorHint.",
236
+ "sm": 12,
237
+ "xs": 12,
238
+ "md": 12,
239
+ "lg": 12,
240
+ "xl": 12
241
+ },
242
+ "pollingInterval": {
243
+ "type": "number",
244
+ "label": "Abfrageintervall (Sekunden)",
245
+ "default": 300,
246
+ "min": 30,
247
+ "step": 30,
248
+ "sm": 6,
249
+ "xs": 12,
250
+ "md": 6,
251
+ "lg": 6,
252
+ "xl": 6
253
+ },
254
+ "vehicleFilter": {
255
+ "type": "text",
256
+ "label": "Fahrzeug-Filter",
257
+ "help": "Teilstring aus Name oder VIN. Leer = alle.",
258
+ "sm": 6,
259
+ "xs": 12,
260
+ "md": 6,
261
+ "lg": 6,
262
+ "xl": 6
263
+ },
264
+ "apkLegacyPath": {
265
+ "type": "text",
266
+ "label": "Legacy-APK 1.5.5 (nur VIN, alte Apps)",
267
+ "sm": 6,
268
+ "xs": 12,
269
+ "md": 6,
270
+ "lg": 6,
271
+ "xl": 6
272
+ },
273
+ "runtimeSecretsJsonPath": {
274
+ "type": "text",
275
+ "label": "Runtime-JSON aus Frida (nur App 3.x)",
276
+ "sm": 6,
277
+ "xs": 12,
278
+ "md": 6,
279
+ "lg": 6,
280
+ "xl": 6
281
+ },
282
+ "pythonBinary": {
283
+ "type": "text",
284
+ "label": "Python-Programm (leer = automatisch)",
285
+ "sm": 6,
286
+ "xs": 12,
287
+ "md": 6,
288
+ "lg": 6,
289
+ "xl": 6
290
+ },
291
+ "alertWebhook": {
292
+ "type": "text",
293
+ "label": "Alert-Webhook https://",
294
+ "sm": 6,
295
+ "xs": 12,
296
+ "md": 6,
297
+ "lg": 6,
298
+ "xl": 6
299
+ },
300
+ "debug": {
301
+ "type": "checkbox",
302
+ "label": "Debug-Logging",
303
+ "sm": 6,
304
+ "xs": 12,
305
+ "md": 6,
306
+ "lg": 6,
307
+ "xl": 6
308
+ },
309
+ "mockMode": {
310
+ "type": "checkbox",
311
+ "label": "Mock-Modus (Test ohne echten Account)",
312
+ "sm": 6,
313
+ "xs": 12,
314
+ "md": 6,
315
+ "lg": 6,
316
+ "xl": 6
317
+ }
318
+ }
319
+ }
320
+ }
321
+ }
Binary file
@@ -0,0 +1,7 @@
1
+ <svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1567 1568" width="1567" height="1568">
2
+ <title>Zeekr_logo-svg</title>
3
+ <style>
4
+ .s0 { fill: #000000 }
5
+ </style>
6
+ <path id="Layer" fill-rule="evenodd" class="s0" d="m0 0h1566.1v1567.3h-1566.1zm913.2 1436.3v-429.6l-391.6-391.5v-484.7h-391.2v1306.3zm522-1305.9h-782.8v431l391.7 391.5v483.8h391.6z"/>
7
+ </svg>