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 +21 -0
- package/README.md +256 -0
- package/admin/jsonConfig.json +321 -0
- package/admin/zeekr.png +0 -0
- package/admin/zeekr.svg +7 -0
- package/io-package.json +196 -0
- package/lib/adapter.js +1225 -0
- package/lib/bridge.py +508 -0
- package/lib/extract_secrets.py +226 -0
- package/main.js +20 -0
- package/package.json +51 -0
- package/requirements.txt +1 -0
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
|
+
}
|
package/admin/zeekr.png
ADDED
|
Binary file
|
package/admin/zeekr.svg
ADDED
|
@@ -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>
|