iobroker.leapmotor 0.6.1 → 0.6.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/README.md CHANGED
@@ -145,6 +145,10 @@ Which comfort commands actually appear depends on the detected vehicle model —
145
145
  `admin-tab/src/vehicleCapabilities.js` in the repository for the current capability matrix per model.
146
146
 
147
147
  ## Changelog
148
+ ### 0.6.2 (2026-07-08)
149
+ - Fix: B10 model now correctly uses the c10 cloud status endpoint (community-confirmed), resolving empty status/trips/charging datapoints
150
+ - Fix: enabled full i18n for jsonConfig.json now that admin/i18n translation files cover all keys
151
+
148
152
  ### 0.6.1 (2026-07-03)
149
153
  - Fix: repository checker findings - node: prefix for built-in modules, removed raw setTimeout fallback, included admin-tab i18n source in npm package, trimmed news list to 7 entries
150
154
 
@@ -160,13 +164,6 @@ Which comfort commands actually appear depends on the detected vehicle model —
160
164
  ### 0.5.7 (2026-06-29)
161
165
  - Fix: avoid npm transparency log conflict from a previous failed publish attempt (no functional changes vs. 0.5.5)
162
166
 
163
- ### 0.5.6 (2026-06-29)
164
- - New: Trips tab showing daily kilometers with individual detected trips and an "Other" entry for any unaccounted distance
165
- - Fix: trip detection now backfills kilometers driven before the trip was first detected (closes the gap caused by the 5-minute polling interval)
166
- - Fix: critical bug where `adminTab.link` used a relative path, causing a 404 error when opening the tab for all users — now uses an absolute path
167
- - Fix: admin tab files (`index_m.html`, `tab.html`, `tab.js`, `tab_m.html`) were missing from the published package; they are now included
168
- - Fix: `index_m.html` contained leftover placeholder content instead of the real mobile tab loader
169
-
170
167
  Older changes can be found in [CHANGELOG_OLD.md](CHANGELOG_OLD.md).
171
168
 
172
169
  ## License
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "panel",
3
- "i18n": false,
3
+ "i18n": true,
4
4
  "items": {
5
5
  "email": {
6
6
  "type": "text",
package/io-package.json CHANGED
@@ -1,33 +1,33 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "leapmotor",
4
- "version": "0.6.1",
4
+ "version": "0.6.2",
5
5
  "news": {
6
+ "0.6.2": {
7
+ "en": "Fix: B10 model now correctly uses the c10 cloud status endpoint (community-confirmed), resolving empty status/trips/charging datapoints. Fix: enabled full i18n for jsonConfig.json now that admin/i18n translation files cover all keys.",
8
+ "de": "Fix: B10-Modell nutzt jetzt korrekt den c10-Cloud-Statusendpunkt (community-bestaetigt), behebt leere status/trips/charging-Datenpunkte. Fix: vollstaendiges i18n fuer jsonConfig.json aktiviert, da admin/i18n-Uebersetzungsdateien jetzt alle Schluessel abdecken.",
9
+ "ru": "Исправление: модель B10 теперь корректно использует облачную конечную точку статуса c10 (подтверждено сообществом), что устраняет пустые точки данных status/trips/charging. Исправление: включена полная локализация i18n для jsonConfig.json, так как файлы перевода admin/i18n теперь охватывают все ключи.",
10
+ "pt": "Correção: o modelo B10 agora usa corretamente o endpoint de status c10 na nuvem (confirmado pela comunidade), resolvendo os pontos de dados vazios de status/trips/charging. Correção: i18n completo habilitado para jsonConfig.json, já que os arquivos de tradução admin/i18n agora cobrem todas as chaves.",
11
+ "nl": "Fix: B10-model gebruikt nu correct het c10-cloud statusendpoint (door de community bevestigd), waardoor lege status/trips/charging-datapunten worden opgelost. Fix: volledige i18n ingeschakeld voor jsonConfig.json, aangezien admin/i18n-vertaalbestanden nu alle sleutels dekken.",
12
+ "fr": "Correction : le modèle B10 utilise désormais correctement le point de terminaison de statut cloud c10 (confirmé par la communauté), résolvant les points de données status/trips/charging vides. Correction : i18n complet activé pour jsonConfig.json, les fichiers de traduction admin/i18n couvrant désormais toutes les clés.",
13
+ "it": "Correzione: il modello B10 ora utilizza correttamente l'endpoint di stato cloud c10 (confermato dalla community), risolvendo i datapoint status/trips/charging vuoti. Correzione: i18n completo abilitato per jsonConfig.json, poiché i file di traduzione admin/i18n ora coprono tutte le chiavi.",
14
+ "es": "Corrección: el modelo B10 ahora usa correctamente el endpoint de estado en la nube c10 (confirmado por la comunidad), resolviendo los puntos de datos vacíos de status/trips/charging. Corrección: se habilitó i18n completo para jsonConfig.json, ya que los archivos de traducción admin/i18n ahora cubren todas las claves.",
15
+ "pl": "Poprawka: model B10 poprawnie korzysta teraz z chmurowego punktu końcowego statusu c10 (potwierdzone przez społeczność), co rozwiązuje puste punkty danych status/trips/charging. Poprawka: włączono pełne i18n dla jsonConfig.json, ponieważ pliki tłumaczeń admin/i18n obejmują teraz wszystkie klucze.",
16
+ "uk": "Виправлення: модель B10 тепер коректно використовує хмарну кінцеву точку статусу c10 (підтверджено спільнотою), що вирішує проблему порожніх точок даних status/trips/charging. Виправлення: увімкнено повну локалізацію i18n для jsonConfig.json, оскільки файли перекладу admin/i18n тепер охоплюють усі ключі.",
17
+ "zh-cn": "修复:B10 车型现在正确使用 c10 云状态端点(已由社区确认),解决了 status/trips/charging 数据点为空的问题。修复:由于 admin/i18n 翻译文件现已覆盖所有键,为 jsonConfig.json 启用了完整的 i18n 支持。"
18
+ },
6
19
  "0.6.1": {
7
20
  "en": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries.",
8
21
  "de": "Fix: Repository-Checker-Befunde behoben - node:-Praefix fuer eingebaute Module verwendet, rohen setTimeout-Fallback entfernt, admin-tab-i18n-Quellcode ins npm-Paket aufgenommen, News-Liste auf 7 Eintraege gekuerzt.",
9
- "ru": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries.",
10
- "pt": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries.",
11
- "nl": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries.",
12
- "fr": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries.",
13
- "it": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries.",
14
- "es": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries.",
15
- "pl": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries.",
16
- "uk": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries.",
17
- "zh-cn": "Fix: repository checker findings - use node: prefix for built-in modules, remove raw setTimeout fallback, include admin-tab i18n source in npm package, trim news list to 7 entries."
18
- },
19
- "0.6.0": {
20
- "en": "Refactor: moved to standard plain-JS repository layout (main.js at repository root, supporting modules under lib/ instead of build/). Fix: removed dead/duplicate code, added VIN sanitization for object IDs, subscribed and acknowledged config.* states, enforced upper bound on polling interval in code, switched picture cache from package-directory file to adapter's own file storage, translated remaining German backend strings to English, enabled compact mode support, adapter-managed timers used throughout.",
21
- "de": "Refactor: Umstellung auf Standard-Repository-Layout fuer reines JavaScript (main.js im Repository-Root, unterstuetzende Module unter lib/ statt build/). Fix: doppelten/toten Code entfernt, VIN-Sanitisierung fuer Objekt-IDs ergaenzt, config.*-States werden nun subscribed und quittiert, Obergrenze fuer Abfrageintervall im Code erzwungen, Bilder-Cache von Datei im Package-Verzeichnis auf adaptereigene Dateispeicherung umgestellt, verbliebene deutsche Backend-Texte ins Englische uebersetzt, Compact-Mode-Unterstuetzung aktiviert, durchgaengig adaptereigene Timer verwendet.",
22
- "ru": "Рефакторинг: переход на стандартную структуру репозитория для чистого JavaScript (main.js в корне репозитория, вспомогательные модули в lib/ вместо build/). Исправление: удален мертвый/дублирующийся код, добавлена очистка VIN для идентификаторов объектов, состояния config.* теперь подписаны и подтверждаются, введено верхнее ограничение интервала опроса в коде, кэш изображений перенесен из файла в каталоге пакета в собственное файловое хранилище адаптера, оставшиеся немецкие строки backend переведены на английский, включена поддержка компактного режима, повсеместно используются таймеры адаптера.",
23
- "pt": "Refatoração: migração para o layout padrão de repositório JavaScript puro (main.js na raiz do repositório, módulos de suporte em lib/ em vez de build/). Correção: código morto/duplicado removido, sanitização de VIN adicionada para IDs de objeto, estados config.* agora são inscritos e confirmados, limite superior do intervalo de sondagem imposto no código, cache de imagens migrado de arquivo no diretório do pacote para armazenamento próprio do adaptador, strings de backend restantes em alemão traduzidas para inglês, suporte a modo compacto ativado, temporizadores gerenciados pelo adaptador usados em todo o código.",
24
- "nl": "Refactor: overgestapt op standaard repository-indeling voor pure JavaScript (main.js in de repository-root, ondersteunende modules onder lib/ in plaats van build/). Fix: dode/dubbele code verwijderd, VIN-sanitisatie toegevoegd voor object-ID's, config.*-statussen worden nu geabonneerd en bevestigd, bovengrens voor pollinginterval afgedwongen in code, afbeeldingscache overgezet van bestand in pakketmap naar eigen bestandsopslag van de adapter, resterende Duitse backend-teksten vertaald naar Engels, compacte modus ondersteuning ingeschakeld, overal door de adapter beheerde timers gebruikt.",
25
- "fr": "Refactorisation : passage à la disposition standard de dépôt JavaScript pur (main.js à la racine du dépôt, modules de support sous lib/ au lieu de build/). Correction : suppression du code mort/dupliqué, ajout de la désinfection du VIN pour les ID d'objets, les états config.* sont désormais abonnés et acquittés, limite supérieure de l'intervalle d'interrogation imposée dans le code, cache d'images déplacé d'un fichier dans le répertoire du paquet vers le stockage de fichiers propre à l'adaptateur, chaînes backend allemandes restantes traduites en anglais, prise en charge du mode compact activée, minuteries gérées par l'adaptateur utilisées partout.",
26
- "it": "Refactoring: passaggio al layout standard del repository per JavaScript puro (main.js nella radice del repository, moduli di supporto in lib/ invece di build/). Correzione: rimosso codice morto/duplicato, aggiunta la sanificazione del VIN per gli ID oggetto, gli stati config.* ora vengono sottoscritti e confermati, imposto un limite superiore all'intervallo di polling nel codice, cache delle immagini spostata da un file nella directory del pacchetto all'archiviazione file propria dell'adattatore, stringhe backend tedesche rimanenti tradotte in inglese, supporto alla modalità compatta abilitato, timer gestiti dall'adattatore utilizzati ovunque.",
27
- "es": "Refactorización: cambio al diseño estándar de repositorio para JavaScript puro (main.js en la raíz del repositorio, módulos de soporte en lib/ en lugar de build/). Corrección: se eliminó código muerto/duplicado, se añadió la sanitización de VIN para los ID de objeto, los estados config.* ahora se suscriben y confirman, se impuso un límite superior al intervalo de sondeo en el código, la caché de imágenes se trasladó de un archivo en el directorio del paquete al almacenamiento de archivos propio del adaptador, las cadenas de backend en alemán restantes se tradujeron al inglés, se habilitó el soporte de modo compacto, se utilizan temporizadores gestionados por el adaptador en todo el código.",
28
- "pl": "Refaktoryzacja: przejście na standardowy układ repozytorium dla czystego JavaScript (main.js w katalogu głównym repozytorium, moduły pomocnicze w lib/ zamiast build/). Poprawka: usunięto martwy/zduplikowany kod, dodano sanityzację VIN dla identyfikatorów obiektów, stany config.* są teraz subskrybowane i potwierdzane, wymuszono górny limit interwału odpytywania w kodzie, pamięć podręczna obrazów przeniesiona z pliku w katalogu pakietu do własnego magazynu plików adaptera, pozostałe niemieckie ciągi backendu przetłumaczono na angielski, włączono obsługę trybu kompaktowego, wszędzie używane są zarządzane przez adapter liczniki czasu.",
29
- "uk": "Рефакторинг: перехід на стандартну структуру репозиторію для чистого JavaScript (main.js у корені репозиторію, допоміжні модулі в lib/ замість build/). Виправлення: видалено мертвий/дубльований код, додано очищення VIN для ідентифікаторів об'єктів, стани config.* тепер підписуються та підтверджуються, введено верхню межу інтервалу опитування в коді, кеш зображень перенесено з файлу в каталозі пакета до власного файлового сховища адаптера, решту німецьких рядків backend перекладено англійською, увімкнено підтримку компактного режиму, всюди використовуються таймери, керовані адаптером.",
30
- "zh-cn": "重构:迁移到标准纯 JavaScript 仓库布局(main.js 位于仓库根目录,支持模块位于 lib/ 而非 build/)。修复:删除死代码/重复代码,为对象 ID 添加了 VIN 清理,config.* 状态现在会被订阅并确认,代码中强制执行了轮询间隔的上限,图片缓存从包目录中的文件改为适配器自身的文件存储,其余的德语后端字符串已翻译为英语,启用了紧凑模式支持,全程使用适配器管理的计时器。"
22
+ "ru": "Исправление: устранены замечания проверки репозитория - использован префикс node: для встроенных модулей, удалён резервный вызов setTimeout, исходный код i18n admin-tab включён в npm-пакет, список новостей сокращён до 7 записей.",
23
+ "pt": "Correção: correções de verificação do repositório - uso do prefixo node: para módulos integrados, remoção do fallback bruto de setTimeout, inclusão do código-fonte i18n do admin-tab no pacote npm, lista de notícias reduzida para 7 entradas.",
24
+ "nl": "Fix: bevindingen van de repository-checker verholpen - node:-prefix gebruikt voor ingebouwde modules, ruwe setTimeout-fallback verwijderd, admin-tab i18n broncode opgenomen in npm-pakket, nieuwslijst teruggebracht tot 7 items.",
25
+ "fr": "Correction : corrections du vérificateur de dépôt - utilisation du préfixe node: pour les modules intégrés, suppression du repli setTimeout brut, inclusion du code source i18n de l'admin-tab dans le paquet npm, liste des actualités réduite à 7 entrées.",
26
+ "it": "Correzione: risolti i rilievi del controllo del repository - usato il prefisso node: per i moduli integrati, rimosso il fallback grezzo di setTimeout, incluso il codice sorgente i18n dell'admin-tab nel pacchetto npm, elenco notizie ridotto a 7 voci.",
27
+ "es": "Corrección: se resolvieron los hallazgos del verificador del repositorio - se usó el prefijo node: para los módulos integrados, se eliminó el fallback bruto de setTimeout, se incluyó el código fuente i18n del admin-tab en el paquete npm, se redujo la lista de noticias a 7 entradas.",
28
+ "pl": "Poprawka: rozwiązano ustalenia weryfikatora repozytorium - użyto prefiksu node: dla modułów wbudowanych, usunięto surowy fallback setTimeout, dołączono kod źródłowy i18n admin-tab do pakietu npm, skrócono listę nowości do 7 pozycji.",
29
+ "uk": "Виправлення: усунено зауваження перевірки репозиторію - використано префікс node: для вбудованих модулів, видалено резервний виклик setTimeout, вихідний код i18n admin-tab включено до npm-пакета, список новин скорочено до 7 записів.",
30
+ "zh-cn": "修复:解决仓库检查器发现的问题 - 为内置模块使用 node: 前缀,移除了原始的 setTimeout 回退,将 admin-tab i18n 源代码包含在 npm 包中,新闻列表精简至 7 条。"
31
31
  },
32
32
  "0.5.8": {
33
33
  "en": "Fix: repository checker compliance - added missing intermediate object structure (charging/consumption/pictures/trips channels), corrected invalid state roles, added real integration test.",
@@ -6,6 +6,29 @@ const forge=require('node-forge');
6
6
  const axios=require('axios');
7
7
  const {deriveAccountP12Password,deriveSignKey,deriveSessionDeviceId,encryptOperatePassword,buildLoginHeaders,buildSignedHeaders,buildRemoteCtlWriteHeaders,buildRemoteCtlWriteHeadersWithoutPin,buildRemoteCtlResultHeaders,buildOperpwdVerifyHeaders}=require('./leapmotor-crypto');
8
8
  const KNOWN_PASSWORDS=['','leapmotor','leap123'];
9
+
10
+ // The vehicle status endpoint path segment does not always match the
11
+ // vehicle's own carType 1:1. Models that share the same underlying
12
+ // platform/backend as another model (e.g. B10 sits on the same LEAP
13
+ // platform family as the C10) use that other model's endpoint segment
14
+ // instead of their own name. CONFIRMED for B10->c10 via a real B10 owner
15
+ // running probe-status-endpoint.js (2026-07): the "c10" segment returned
16
+ // real vehicle data (GPS/signal values), not just a generic 200 response.
17
+ // Unmapped models fall back to their own carType, lowercased (this is
18
+ // what already works for T03).
19
+ const STATUS_ENDPOINT_OVERRIDES={
20
+ B10:'c10',
21
+ // B05, C16 are suspected to share the same C10-family endpoint but this
22
+ // is UNCONFIRMED - add/adjust here once verified by an owner via
23
+ // probe-status-endpoint.js.
24
+ };
25
+
26
+ function mapCarTypeToStatusEndpoint(carType){
27
+ const ct=String(carType||'').trim();
28
+ const override=STATUS_ENDPOINT_OVERRIDES[ct.toUpperCase()];
29
+ return (override||ct).toLowerCase();
30
+ }
31
+
9
32
  class LeapmotorClient{
10
33
  constructor(config){
11
34
  this.userId=null;this.token=null;this.signIkm=null;this.signSalt=null;this.signInfo=null;
@@ -67,7 +90,7 @@ class LeapmotorClient{
67
90
  }));
68
91
  }
69
92
  async getVehicleStatus(vehicle){
70
- const ct=vehicle.carType.trim().toLowerCase();
93
+ const ct=mapCarTypeToStatusEndpoint(vehicle.carType);
71
94
  const h={...this._h(buildSignedHeaders({signKey:this._signKey,deviceId:this.deviceId,vin:vehicle.vin,language:this.config.language})),...this._authHeaders()};
72
95
  const resp=await this.http.post(`/carownerservice/oversea/vehicle/v1/status/get/${ct}`,`vin=${encodeURIComponent(vehicle.vin)}`,{headers:h});
73
96
  return this._parseResponse(resp.data,'vehicle status').data||{};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.leapmotor",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "Leapmotor electric vehicle integration for ioBroker",
5
5
  "author": {
6
6
  "name": "Henrik Schönhofen",