diff --git a/.changeset/iob-package-metadata-sync.md b/.changeset/iob-package-metadata-sync.md new file mode 100644 index 0000000..35339b4 --- /dev/null +++ b/.changeset/iob-package-metadata-sync.md @@ -0,0 +1,5 @@ +--- +"iobroker.teslemetry": patch +--- + +Sync `io-package.json` adapter metadata (version, news, deprecated fields, dependency minimums) with the published package and add a test that fails CI if they drift apart again. Also addresses several ioBroker repository-checker findings: admin UI translations for English/German, JSON-config schema fixes, README/changelog/license formatting, and a `this.setInterval()`/`this.clearInterval()` fix for the polling timer. diff --git a/AGENTS.md b/AGENTS.md index 5706a79..5bc1ce5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -170,7 +170,9 @@ pnpm link --global n8n-nodes-teslemetry **Gotcha**: `VehicleHandler`/`EnergyHandler.handleStateChange()` don't catch their own write failures - a rejected SDK write propagates up to `main.ts`'s `onStateChange()`, the single place that logs it, so a new write branch must not add its own catch/log or the failure logs twice. Each write goes through `writeAndReconcile(id, value, write)` (private to each handler), which acks the requested value on success and re-acks the last confirmed value on failure, so a rejected command never leaves the ioBroker object state looking like it applied. -**Gotcha**: changesets bumps `package.json`/`CHANGELOG.md` on release but never touches `io-package.json` - its `common.version` and `common.news` need a manual sync on every release or the ioBroker repochecker hard-fails submission to `ioBroker.repositories`. No Teslemetry brand/logo asset lives in this monorepo; the real logo mark lives in the separate `website3` repo (its `public/web-app-manifest-512x512.png` is the highest-res copy) - source icons from there, don't hand-draw a placeholder. +**Gotcha**: changesets bumps `package.json`/`CHANGELOG.md` on release but never touches `io-package.json` - its `common.version` and `common.news` need a manual sync on every release (`test/packageVersionParity.test.ts` fails CI if they drift, but does not fix them for you) or the ioBroker repochecker hard-fails submission to `ioBroker.repositories`. `common.news` is truncated to the newest 7 entries by the repo builder - trim older ones when adding a new release. No Teslemetry brand/logo asset lives in this monorepo; the real logo mark lives in the separate `website3` repo (its `public/web-app-manifest-512x512.png` is the highest-res copy) - source icons from there, don't hand-draw a placeholder. + +**Gotcha**: `npx @iobroker/repochecker --local` (run from `packages/iobroker.teslemetry/`) validates against local files but still resolves the adapter identity from the GitHub repo URL - since this repo is a monorepo (not a dedicated `ioBroker.` repo), it always reports spurious `E0002`/`E0004`/`E0007`/`E0020`/`E1003`/`E2000`/`W4001` (repo/package naming) and a false-positive `E9007` (build dir tracked) from reading the filesystem instead of git. Only a dedicated single-adapter repo (a real submission concern, not a code fix) resolves those. `admin/i18n` only has `en`/`de` translations - the repochecker's other 9 suggested languages (`E5010`) are a known, intentionally-deferred gap. ## Technology Stack diff --git a/packages/iobroker.teslemetry/.gitignore b/packages/iobroker.teslemetry/.gitignore index 7d1626a..76bfe82 100644 --- a/packages/iobroker.teslemetry/.gitignore +++ b/packages/iobroker.teslemetry/.gitignore @@ -7,3 +7,4 @@ Thumbs.db .nyc_output/ coverage/ *.log +.commitinfo diff --git a/packages/iobroker.teslemetry/.npmignore b/packages/iobroker.teslemetry/.npmignore deleted file mode 100644 index 3d92a70..0000000 --- a/packages/iobroker.teslemetry/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -node_modules/ -src/ -lib/ -test/ -.github/ -.vscode/ -*.ts -!*.d.ts -tsconfig.json -.gitignore -.eslintrc.json -.nyc_output/ -coverage/ -*.log -*.tgz diff --git a/packages/iobroker.teslemetry/CHANGELOG_OLD.md b/packages/iobroker.teslemetry/CHANGELOG_OLD.md new file mode 100644 index 0000000..3560328 --- /dev/null +++ b/packages/iobroker.teslemetry/CHANGELOG_OLD.md @@ -0,0 +1,34 @@ +# Older changelog entries + +### 0.1.10 +- Dependency updates + +### 0.1.9 +- Dependency updates + +### 0.1.8 +- Dependency updates + +### 0.1.7 +- Dependency updates + +### 0.1.6 +- Dependency updates + +### 0.1.5 +- Dependency updates + +### 0.1.4 +- Dependency updates + +### 0.1.3 +- SSE event handling now uses the standard EventEmitter pattern + +### 0.1.2 +- Dependency updates + +### 0.1.1 +- Dependency updates + +### 0.1.0 +- Initial release diff --git a/packages/iobroker.teslemetry/README.md b/packages/iobroker.teslemetry/README.md index a5006ca..2e994b6 100644 --- a/packages/iobroker.teslemetry/README.md +++ b/packages/iobroker.teslemetry/README.md @@ -56,13 +56,6 @@ Before installing this adapter, you need: 5. Wait for installation to complete 6. Click on the adapter instance to configure it -### Manual Installation (for development) - -```bash -cd /opt/iobroker -npm install iobroker.teslemetry -``` - ## Configuration ### Access Token @@ -347,20 +340,37 @@ pnpm test ## Changelog -### 0.1.0 (2026-01-08) -- Initial release -- Vehicle control (climate, charging, locks, etc.) -- Energy site management (power flow, operation modes) -- Real-time SSE streaming support -- Polling fallback mode -- Multi-language support (English, German) +### 0.2.5 +- Dependency updates -## License +### 0.2.4 +- Dependency updates + +### 0.2.3 +- Dependency updates + +### 0.2.2 +- Dependency updates -Apache-2.0 © 2026 Teslemetry +### 0.2.1 +- Dependency updates + +### 0.2.0 +- Site time-of-use tariff (`tariff_id`, `tariff_content`, `tariff_content_v2`) is now exposed as read-only states under `energy.{SITE_ID}.tariff` + +### 0.1.11 +- Published to npm + +Older entries are in [CHANGELOG_OLD.md](CHANGELOG_OLD.md). ## Credits - Developed by [Teslemetry](https://teslemetry.com) - Built on [@teslemetry/api](https://www.npmjs.com/package/@teslemetry/api) - Part of the ioBroker ecosystem + +## License + +Apache-2.0 + +Copyright (c) 2026 Teslemetry diff --git a/packages/iobroker.teslemetry/admin/i18n/de/translations.json b/packages/iobroker.teslemetry/admin/i18n/de/translations.json new file mode 100644 index 0000000..d31081d --- /dev/null +++ b/packages/iobroker.teslemetry/admin/i18n/de/translations.json @@ -0,0 +1,22 @@ +{ + "Teslemetry Configuration": "Teslemetry-Konfiguration", + "Access Token": "Zugriffstoken", + "Your Teslemetry API access token. Get it from https://teslemetry.com/console": "Ihr Teslemetry-API-Zugriffstoken. Erhältlich unter https://teslemetry.com/console", + "Test Connection": "Verbindung testen", + "Region": "Region", + "Auto-detect": "Automatisch erkennen", + "North America": "Nordamerika", + "Europe": "Europa", + "Tesla API region. Use auto-detect unless you have connection issues.": "Tesla-API-Region. Verwenden Sie die automatische Erkennung, außer bei Verbindungsproblemen.", + "Data Updates": "Datenaktualisierung", + "Enable real-time streaming (SSE)": "Echtzeit-Streaming aktivieren (SSE)", + "Use Server-Sent Events for real-time updates. Recommended for best performance.": "Server-Sent Events für Echtzeit-Updates verwenden. Für beste Leistung empfohlen.", + "Poll interval (seconds)": "Abfrageintervall (Sekunden)", + "How often to fetch data when streaming is disabled. Minimum 30 seconds to avoid rate limits.": "Wie oft Daten abgerufen werden, wenn Streaming deaktiviert ist. Mindestens 30 Sekunden, um Ratenbegrenzungen zu vermeiden.", + "Device Selection": "Geräteauswahl", + "By default, all vehicles and energy sites are included. You can optionally select specific devices to monitor.": "Standardmäßig sind alle Fahrzeuge und Energieanlagen enthalten. Sie können optional bestimmte Geräte zur Überwachung auswählen.", + "Selected Vehicles (VINs)": "Ausgewählte Fahrzeuge (FIN)", + "Leave empty to include all vehicles. Add VIN numbers to include only specific vehicles.": "Leer lassen, um alle Fahrzeuge einzubeziehen. FIN hinzufügen, um nur bestimmte Fahrzeuge einzubeziehen.", + "Selected Energy Sites (IDs)": "Ausgewählte Energieanlagen (IDs)", + "Leave empty to include all energy sites. Add site IDs to include only specific sites.": "Leer lassen, um alle Energieanlagen einzubeziehen. Standort-IDs hinzufügen, um nur bestimmte Standorte einzubeziehen." +} diff --git a/packages/iobroker.teslemetry/admin/i18n/en/translations.json b/packages/iobroker.teslemetry/admin/i18n/en/translations.json new file mode 100644 index 0000000..b9a16ee --- /dev/null +++ b/packages/iobroker.teslemetry/admin/i18n/en/translations.json @@ -0,0 +1,22 @@ +{ + "Teslemetry Configuration": "Teslemetry Configuration", + "Access Token": "Access Token", + "Your Teslemetry API access token. Get it from https://teslemetry.com/console": "Your Teslemetry API access token. Get it from https://teslemetry.com/console", + "Test Connection": "Test Connection", + "Region": "Region", + "Auto-detect": "Auto-detect", + "North America": "North America", + "Europe": "Europe", + "Tesla API region. Use auto-detect unless you have connection issues.": "Tesla API region. Use auto-detect unless you have connection issues.", + "Data Updates": "Data Updates", + "Enable real-time streaming (SSE)": "Enable real-time streaming (SSE)", + "Use Server-Sent Events for real-time updates. Recommended for best performance.": "Use Server-Sent Events for real-time updates. Recommended for best performance.", + "Poll interval (seconds)": "Poll interval (seconds)", + "How often to fetch data when streaming is disabled. Minimum 30 seconds to avoid rate limits.": "How often to fetch data when streaming is disabled. Minimum 30 seconds to avoid rate limits.", + "Device Selection": "Device Selection", + "By default, all vehicles and energy sites are included. You can optionally select specific devices to monitor.": "By default, all vehicles and energy sites are included. You can optionally select specific devices to monitor.", + "Selected Vehicles (VINs)": "Selected Vehicles (VINs)", + "Leave empty to include all vehicles. Add VIN numbers to include only specific vehicles.": "Leave empty to include all vehicles. Add VIN numbers to include only specific vehicles.", + "Selected Energy Sites (IDs)": "Selected Energy Sites (IDs)", + "Leave empty to include all energy sites. Add site IDs to include only specific sites.": "Leave empty to include all energy sites. Add site IDs to include only specific sites." +} diff --git a/packages/iobroker.teslemetry/admin/jsonConfig.json b/packages/iobroker.teslemetry/admin/jsonConfig.json index e36fed1..f685780 100644 --- a/packages/iobroker.teslemetry/admin/jsonConfig.json +++ b/packages/iobroker.teslemetry/admin/jsonConfig.json @@ -8,25 +8,20 @@ "size": 3 }, "accessToken": { - "type": "text", + "type": "password", "label": "Access Token", + "xs": 12, "sm": 12, "md": 12, "lg": 12, - "password": true, - "required": true, - "help": "Your Teslemetry API access token. Get it from https://teslemetry.com/console", - "placeholder": "teslemetry_access_token_..." + "xl": 12, + "help": "Your Teslemetry API access token. Get it from https://teslemetry.com/console" }, "testConnection": { "type": "sendTo", "command": "testConnection", "jsonData": "{\"accessToken\": \"${data.accessToken}\"}", - "button": { - "text": "Test Connection", - "variant": "contained", - "color": "primary" - }, + "label": "Test Connection", "result": { "success": { "text": "${data.message}" @@ -35,9 +30,11 @@ "text": "${data.error}" } }, + "xs": 12, "sm": 12, "md": 6, - "lg": 4 + "lg": 4, + "xl": 4 }, "_spacer1": { "type": "divider" @@ -61,9 +58,11 @@ ], "default": "auto", "help": "Tesla API region. Use auto-detect unless you have connection issues.", + "xs": 12, "sm": 12, "md": 6, - "lg": 4 + "lg": 4, + "xl": 4 }, "_spacer2": { "type": "divider" @@ -78,9 +77,11 @@ "label": "Enable real-time streaming (SSE)", "default": true, "help": "Use Server-Sent Events for real-time updates. Recommended for best performance.", + "xs": 12, "sm": 12, "md": 6, - "lg": 4 + "lg": 4, + "xl": 4 }, "pollInterval": { "type": "number", @@ -90,9 +91,11 @@ "default": 60, "help": "How often to fetch data when streaming is disabled. Minimum 30 seconds to avoid rate limits.", "hidden": "data.enableStreaming === true", + "xs": 12, "sm": 12, "md": 6, - "lg": 4 + "lg": 4, + "xl": 4 }, "_spacer3": { "type": "divider" @@ -105,23 +108,31 @@ "_deviceSelectionHelp": { "type": "staticText", "text": "By default, all vehicles and energy sites are included. You can optionally select specific devices to monitor.", - "sm": 12 + "xs": 12, + "sm": 12, + "md": 12, + "lg": 12, + "xl": 12 }, "selectedVehicles": { "type": "chips", "label": "Selected Vehicles (VINs)", "help": "Leave empty to include all vehicles. Add VIN numbers to include only specific vehicles.", + "xs": 12, "sm": 12, "md": 12, - "lg": 12 + "lg": 12, + "xl": 12 }, "selectedEnergySites": { "type": "chips", "label": "Selected Energy Sites (IDs)", "help": "Leave empty to include all energy sites. Add site IDs to include only specific sites.", + "xs": 12, "sm": 12, "md": 12, - "lg": 12 + "lg": 12, + "xl": 12 } } } diff --git a/packages/iobroker.teslemetry/io-package.json b/packages/iobroker.teslemetry/io-package.json index d8ddf39..b0b26aa 100644 --- a/packages/iobroker.teslemetry/io-package.json +++ b/packages/iobroker.teslemetry/io-package.json @@ -1,61 +1,125 @@ { "common": { "name": "teslemetry", - "version": "0.1.10", + "version": "0.2.5", "news": { - "0.1.10": { + "0.2.5": { "en": "Dependency updates", - "de": "Abhängigkeiten aktualisiert" + "de": "Abhängigkeiten aktualisiert", + "ru": "Обновления зависимостей", + "pt": "Atualizações de dependências", + "nl": "Afhankelijkheden bijgewerkt", + "fr": "Mises à jour des dépendances", + "it": "Aggiornamenti delle dipendenze", + "es": "Actualizaciones de dependencias", + "pl": "Aktualizacje zależności", + "uk": "Оновлення залежностей", + "zh-cn": "依赖更新" }, - "0.1.9": { + "0.2.4": { "en": "Dependency updates", - "de": "Abhängigkeiten aktualisiert" + "de": "Abhängigkeiten aktualisiert", + "ru": "Обновления зависимостей", + "pt": "Atualizações de dependências", + "nl": "Afhankelijkheden bijgewerkt", + "fr": "Mises à jour des dépendances", + "it": "Aggiornamenti delle dipendenze", + "es": "Actualizaciones de dependencias", + "pl": "Aktualizacje zależności", + "uk": "Оновлення залежностей", + "zh-cn": "依赖更新" }, - "0.1.8": { + "0.2.3": { "en": "Dependency updates", - "de": "Abhängigkeiten aktualisiert" + "de": "Abhängigkeiten aktualisiert", + "ru": "Обновления зависимостей", + "pt": "Atualizações de dependências", + "nl": "Afhankelijkheden bijgewerkt", + "fr": "Mises à jour des dépendances", + "it": "Aggiornamenti delle dipendenze", + "es": "Actualizaciones de dependencias", + "pl": "Aktualizacje zależności", + "uk": "Оновлення залежностей", + "zh-cn": "依赖更新" }, - "0.1.7": { + "0.2.2": { "en": "Dependency updates", - "de": "Abhängigkeiten aktualisiert" + "de": "Abhängigkeiten aktualisiert", + "ru": "Обновления зависимостей", + "pt": "Atualizações de dependências", + "nl": "Afhankelijkheden bijgewerkt", + "fr": "Mises à jour des dépendances", + "it": "Aggiornamenti delle dipendenze", + "es": "Actualizaciones de dependencias", + "pl": "Aktualizacje zależności", + "uk": "Оновлення залежностей", + "zh-cn": "依赖更新" }, - "0.1.6": { + "0.2.1": { "en": "Dependency updates", - "de": "Abhängigkeiten aktualisiert" + "de": "Abhängigkeiten aktualisiert", + "ru": "Обновления зависимостей", + "pt": "Atualizações de dependências", + "nl": "Afhankelijkheden bijgewerkt", + "fr": "Mises à jour des dépendances", + "it": "Aggiornamenti delle dipendenze", + "es": "Actualizaciones de dependencias", + "pl": "Aktualizacje zależności", + "uk": "Оновлення залежностей", + "zh-cn": "依赖更新" }, - "0.1.5": { - "en": "Dependency updates", - "de": "Abhängigkeiten aktualisiert" - }, - "0.1.4": { - "en": "Dependency updates", - "de": "Abhängigkeiten aktualisiert" - }, - "0.1.3": { - "en": "SSE event handling now uses the standard EventEmitter pattern", - "de": "SSE-Ereignisbehandlung verwendet jetzt das Standard-EventEmitter-Muster" - }, - "0.1.2": { - "en": "Dependency updates", - "de": "Abhängigkeiten aktualisiert" - }, - "0.1.1": { - "en": "Dependency updates", - "de": "Abhängigkeiten aktualisiert" + "0.2.0": { + "en": "Site time-of-use tariff (tariff_id, tariff_content, tariff_content_v2) is now exposed as read-only states under energy.{SITE_ID}.tariff", + "de": "Der Zeittarif der Anlage (tariff_id, tariff_content, tariff_content_v2) wird jetzt als schreibgeschützte Zustände unter energy.{SITE_ID}.tariff bereitgestellt", + "ru": "Погодинний тариф объекта (tariff_id, tariff_content, tariff_content_v2) теперь доступен только для чтения в energy.{SITE_ID}.tariff", + "pt": "A tarifa horária do local (tariff_id, tariff_content, tariff_content_v2) agora é exposta como estados somente leitura em energy.{SITE_ID}.tariff", + "nl": "De tijdstariefinstelling van de locatie (tariff_id, tariff_content, tariff_content_v2) is nu beschikbaar als alleen-lezen status onder energy.{SITE_ID}.tariff", + "fr": "Le tarif horaire du site (tariff_id, tariff_content, tariff_content_v2) est désormais exposé en lecture seule sous energy.{SITE_ID}.tariff", + "it": "La tariffa oraria del sito (tariff_id, tariff_content, tariff_content_v2) è ora esposta come stati di sola lettura in energy.{SITE_ID}.tariff", + "es": "La tarifa horaria del sitio (tariff_id, tariff_content, tariff_content_v2) ahora se expone como estados de solo lectura en energy.{SITE_ID}.tariff", + "pl": "Taryfa czasowa lokalizacji (tariff_id, tariff_content, tariff_content_v2) jest teraz udostępniana jako stany tylko do odczytu w energy.{SITE_ID}.tariff", + "uk": "Погодинний тариф об'єкта (tariff_id, tariff_content, tariff_content_v2) тепер доступний лише для читання в energy.{SITE_ID}.tariff", + "zh-cn": "站点分时电价 (tariff_id, tariff_content, tariff_content_v2) 现在以只读状态形式在 energy.{SITE_ID}.tariff 下提供" }, - "0.1.0": { - "en": "Initial release", - "de": "Erstveröffentlichung" + "0.1.11": { + "en": "Published to npm", + "de": "Auf npm veröffentlicht", + "ru": "Опубликовано в npm", + "pt": "Publicado no npm", + "nl": "Gepubliceerd op npm", + "fr": "Publié sur npm", + "it": "Pubblicato su npm", + "es": "Publicado en npm", + "pl": "Opublikowano w npm", + "uk": "Опубліковано в npm", + "zh-cn": "已发布到 npm" } }, - "title": "Teslemetry", "titleLang": { "en": "Teslemetry", - "de": "Teslemetry" + "de": "Teslemetry", + "ru": "Teslemetry", + "pt": "Teslemetry", + "nl": "Teslemetry", + "fr": "Teslemetry", + "it": "Teslemetry", + "es": "Teslemetry", + "pl": "Teslemetry", + "uk": "Teslemetry", + "zh-cn": "Teslemetry" }, "desc": { "en": "Control Tesla vehicles and energy sites via Teslemetry API", - "de": "Steuerung von Tesla-Fahrzeugen und Energieanlagen über Teslemetry API" + "de": "Steuerung von Tesla-Fahrzeugen und Energieanlagen über Teslemetry API", + "ru": "Управление автомобилями Tesla и энергетическими объектами через API Teslemetry", + "pt": "Controle veículos Tesla e sistemas de energia através da API Teslemetry", + "nl": "Bedien Tesla-voertuigen en energiesystemen via de Teslemetry API", + "fr": "Contrôlez les véhicules Tesla et les sites énergétiques via l'API Teslemetry", + "it": "Controlla veicoli Tesla e impianti energetici tramite l'API Teslemetry", + "es": "Controla vehículos Tesla y sistemas de energía a través de la API de Teslemetry", + "pl": "Steruj pojazdami Tesla i instalacjami energetycznymi za pomocą API Teslemetry", + "uk": "Керуйте автомобілями Tesla та енергетичними об'єктами через API Teslemetry", + "zh-cn": "通过 Teslemetry API 控制特斯拉车辆和能源站点" }, "authors": [ "Teslemetry " @@ -66,12 +130,9 @@ "energy", "powerwall", "solar", - "iot", - "smart home" + "iot" ], - "license": "Apache-2.0", "platform": "Javascript/Node.js", - "main": "build/src/main.cjs", "icon": "teslemetry.png", "enabled": true, "extIcon": "https://raw.githubusercontent.com/Teslemetry/typescript-teslemetry/main/packages/iobroker.teslemetry/admin/teslemetry.png", @@ -88,12 +149,12 @@ }, "dependencies": [ { - "js-controller": ">=5.0.0" + "js-controller": ">=6.0.11" } ], "globalDependencies": [ { - "admin": ">=6.0.0" + "admin": ">=7.6.20" } ], "licenseInformation": { @@ -101,6 +162,8 @@ "license": "Apache-2.0" } }, + "protectedNative": ["accessToken"], + "encryptedNative": ["accessToken"], "native": { "accessToken": "", "region": "auto", diff --git a/packages/iobroker.teslemetry/package.json b/packages/iobroker.teslemetry/package.json index 0046bdb..f66df2a 100644 --- a/packages/iobroker.teslemetry/package.json +++ b/packages/iobroker.teslemetry/package.json @@ -9,7 +9,7 @@ "homepage": "https://github.com/Teslemetry/typescript-teslemetry", "license": "Apache-2.0", "keywords": [ - "iobroker", + "ioBroker", "tesla", "teslemetry", "smart-home", @@ -24,7 +24,7 @@ "directory": "packages/iobroker.teslemetry" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" }, "os": [ "linux", @@ -48,14 +48,12 @@ "LICENSE" ], "dependencies": { - "@iobroker/adapter-core": "^3.3.0", + "@iobroker/adapter-core": "^3.4.1", "@teslemetry/api": "workspace:*" }, "devDependencies": { - "@iobroker/testing": "^5.0.0", + "@iobroker/testing": "^5.2.2", "@types/node": "^22.10.2", - "chai": "^4.5.0", - "mocha": "^10.8.2", "nyc": "^17.1.0", "tsdown": "^0.22.4", "tsx": "^4.20.6", diff --git a/packages/iobroker.teslemetry/src/main.ts b/packages/iobroker.teslemetry/src/main.ts index 97c2714..ddc1f0f 100644 --- a/packages/iobroker.teslemetry/src/main.ts +++ b/packages/iobroker.teslemetry/src/main.ts @@ -25,7 +25,7 @@ class TeslemetryAdapter extends utils.Adapter { private vehicleHandler?: VehicleHandler; private energyHandler?: EnergyHandler; private streamHandler?: StreamHandler; - private pollInterval?: NodeJS.Timeout; + private pollInterval?: ioBroker.Interval; public constructor(options: Partial = {}) { super({ @@ -150,7 +150,7 @@ class TeslemetryAdapter extends utils.Adapter { // Stop polling if (this.pollInterval) { - clearInterval(this.pollInterval); + this.clearInterval(this.pollInterval); this.pollInterval = undefined; } @@ -257,7 +257,7 @@ class TeslemetryAdapter extends utils.Adapter { const interval = (this.config.pollInterval || 60) * 1000; this.log.info(`Starting polling with interval: ${interval / 1000}s`); - this.pollInterval = setInterval(async () => { + this.pollInterval = this.setInterval(async () => { try { await this.vehicleHandler?.fetchAllVehicleData(false); await this.energyHandler?.fetchAllSiteData(); diff --git a/packages/iobroker.teslemetry/test/packageVersionParity.test.ts b/packages/iobroker.teslemetry/test/packageVersionParity.test.ts new file mode 100644 index 0000000..560e13e --- /dev/null +++ b/packages/iobroker.teslemetry/test/packageVersionParity.test.ts @@ -0,0 +1,17 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; +import path from 'node:path'; + +const packageRoot = path.dirname(__dirname); + +test('io-package.json common.version matches package.json version', () => { + const pkg = JSON.parse(readFileSync(path.join(packageRoot, 'package.json'), 'utf8')); + const ioPkg = JSON.parse(readFileSync(path.join(packageRoot, 'io-package.json'), 'utf8')); + + assert.equal( + ioPkg.common.version, + pkg.version, + 'io-package.json common.version must be bumped alongside package.json version (changesets does not do this automatically)', + ); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9bdeb3..974ba27 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,24 +67,18 @@ importers: packages/iobroker.teslemetry: dependencies: '@iobroker/adapter-core': - specifier: ^3.3.0 - version: 3.3.2(@iobroker/types@7.1.0) + specifier: ^3.4.1 + version: 3.4.3(@iobroker/js-controller-common-db@7.2.2)(@iobroker/types@7.1.0) '@teslemetry/api': specifier: workspace:* version: link:../api devDependencies: '@iobroker/testing': - specifier: ^5.0.0 + specifier: ^5.2.2 version: 5.2.2 '@types/node': specifier: ^22.10.2 version: 22.19.3 - chai: - specifier: ^4.5.0 - version: 4.5.0 - mocha: - specifier: ^10.8.2 - version: 10.8.2 nyc: specifier: ^17.1.0 version: 17.1.0 @@ -152,6 +146,9 @@ packages: '@alcalzone/esbuild-register@2.5.1-1': resolution: {integrity: sha512-u19/K/ZaiWQhYIQZeF2FImUeJDiMD4i2h7qPdU0HVFCxoQynye59N4oy6EvjxeXaxLnGkppcb5KKeiYD4cT1iQ==} + '@alcalzone/pak@0.11.0': + resolution: {integrity: sha512-S6s2Xug8VJ04Xgam7kV+dUydVB2gJmTem+Kr7oxneeXndWddgoQxphQNI9WqgpsifTkonC9wiAbj3qkMFlNeAA==} + '@anthropic-ai/sdk@0.27.3': resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} @@ -869,6 +866,11 @@ packages: '@dabh/diagnostics@2.0.8': resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} + '@datalust/winston-seq@1.0.2': + resolution: {integrity: sha512-TxmBkN/26j+8rC/yshm9t29DKSPN69cQuGyvRmufvhPQIU2SnDlQLZmEGsPL3vQYWoBTTgu7+foYs+HmgeOl/g==} + peerDependencies: + winston: ^3.0.0 + '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} @@ -1401,12 +1403,17 @@ packages: '@types/node': optional: true - '@iobroker/adapter-core@3.3.2': - resolution: {integrity: sha512-knuCX6F1JUTnY1OdHzDhwNtOoe9/RZgBziDKSzCO3E4koteY/KRqZ7gtzmoavcAokejG68S5osbEnIb4MYT3VA==} - engines: {node: '>=16'} + '@iobroker/adapter-core@3.4.3': + resolution: {integrity: sha512-6pFFcWsiZY966xmdeORTkhs1MMtuNSfdab6XxmKRWOO3RXWN8vWIh1vvgnFhttrF7+56ykE4iDr4rgjdEWCtog==} + engines: {node: '>=18'} peerDependencies: + '@iobroker/js-controller-common-db': '>=7.2.2' '@iobroker/types': '>=6.0.11' + '@iobroker/js-controller-common-db@7.2.2': + resolution: {integrity: sha512-RDa2jKZ7+uLLMpopN3EELQgOnGYHl//4qR0A+atGdj7k3ocH+4cCnurQ+NIB3Ihv7x7Ul3ewVpUQp90qMZXZog==} + engines: {node: '>=18.0.0'} + '@iobroker/testing@5.2.2': resolution: {integrity: sha512-AiYi9qziPLiNDcwZJa3tcgdSjIq9lq7z4QFvWY9w099chmKOWyvUgWzDy3S/R3L7lJ0yviOeNEdpOHtX4wTf6g==} @@ -4761,6 +4768,9 @@ packages: axios@1.13.2: resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + axios@1.19.0: + resolution: {integrity: sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==} + axios@1.8.3: resolution: {integrity: sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==} @@ -5117,10 +5127,6 @@ packages: resolution: {integrity: sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==} engines: {node: '>= 0.12'} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -5591,6 +5597,9 @@ packages: babel-plugin-macros: optional: true + deep-clone@3.0.3: + resolution: {integrity: sha512-6jtXIlCBAwr3GP/7Il52clbIFIKAxg/pnNkL4/sE6+Oqb10MXMtm9LDZV2IAuwdaKV9VBm8hlxAFk9r6pF8XRw==} + deep-eql@4.0.0: resolution: {integrity: sha512-GxJC5MOg2KyQlv6WiUF/VAnMj4MWnYiXo4oLgeptOELVoknyErb4Z8+5F/IM/K4g9/80YzzatxmWcyRwUseH0A==} engines: {node: '>=6'} @@ -5706,10 +5715,6 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - diff@7.0.0: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} @@ -5725,6 +5730,9 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + diskusage@1.2.0: + resolution: {integrity: sha512-2u3OG3xuf5MFyzc4MctNRUKjjwK+UkovRYdD2ed/NZNZPrt0lqHnLKxGhlFVvAb4/oufIgQG3nWgwmeTbHOvXA==} + dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} @@ -5938,6 +5946,9 @@ packages: es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + esbuild@0.11.23: resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==} hasBin: true @@ -6140,6 +6151,10 @@ packages: resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} engines: {node: '>=4'} + execa@5.0.1: + resolution: {integrity: sha512-4hFTjFbFzQa3aCLobpbPJR/U+VoL1wdV5ozOWjeet0AWDeYr9UFGM1eUFWHX+VtOWFq4p0xXUXfW1YxUaP4fpw==} + engines: {node: '>=10'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -6294,6 +6309,9 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-stream-rotator@0.6.1: + resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} + file-type@16.5.4: resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} engines: {node: '>=10'} @@ -6371,6 +6389,15 @@ packages: debug: optional: true + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -6417,6 +6444,10 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} @@ -6457,6 +6488,10 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + fs-extra@11.3.0: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} @@ -6645,11 +6680,6 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} @@ -6670,6 +6700,9 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} + globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -6678,6 +6711,13 @@ packages: resolution: {integrity: sha512-JPDtMSr0bt25W64q792rvlrSwIaZwqUAhqdYKSr57Wh/xBcQ5JDWLM85ndn+Q1WdBQXLb9YGCl0QN/T0HpqU0A==} engines: {node: '>=0.10.0'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + + glossy@0.1.7: + resolution: {integrity: sha512-mTCC51QFadK75MvAhrL5nPVIP291NjML1guo10Sa7Yj04tJU4V++Vgm780NIddg9etQD9D8FM67hFGqM8EE2HQ==} + engines: {node: '>= 0.2.5'} + gm@1.25.1: resolution: {integrity: sha512-jgcs2vKir9hFogGhXIfs0ODhJTfIrbECCehg38tqFgHm8zqXx7kAJyCYAFK4jTjx71AxrkFtkJBawbAxYUPX9A==} engines: {node: '>=14'} @@ -6804,6 +6844,10 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -7084,10 +7128,6 @@ packages: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-boolean-object@1.2.2: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} @@ -7318,6 +7358,10 @@ packages: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} + is@3.3.2: + resolution: {integrity: sha512-a2xr4E3s1PjDS8ORcGgXpWx6V+liNs+O3JRD2mb9aeugD7rtkkZ0zgLdYgw0tWsKhsdiezGYptSiMlVazCBTuQ==} + engines: {node: '>= 0.4'} + isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} @@ -8211,11 +8255,6 @@ packages: mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} - mocha@10.8.2: - resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} - engines: {node: '>= 14.0.0'} - hasBin: true - mocha@11.7.5: resolution: {integrity: sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -8529,6 +8568,10 @@ packages: resolution: {integrity: sha512-RinNxoz4W1cep1b928fuFhvAQ5ag/+1UlMDV7rbyGthBIgsiEouS4kvRayvvboxii4m8eolKOIBo3OjDqbc+uQ==} engines: {node: '>=6'} + node.extend@2.0.3: + resolution: {integrity: sha512-xwADg/okH48PvBmRZyoX8i8GJaKuJ1CqlqotlZOhUio8egD1P5trJupHKBzcPjSF9ifK2gPcEICRBnkfPqQXZw==} + engines: {node: '>=0.4.0'} + nodemailer@6.9.9: resolution: {integrity: sha512-dexTll8zqQoVJEZPwQAKzxxtFn0qTnjdQTchoU6Re9BUUGBJiOy3YMn/0ShTW6J5M0dfQ1NeDeRTTl4oIWgQMA==} engines: {node: '>=6.0.0'} @@ -9243,6 +9286,10 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} + promisify-child-process@4.1.2: + resolution: {integrity: sha512-APnkIgmaHNJpkAn7k+CrJSi9WMuff5ctYFbD0CO2XIPkM8yO7d/ShouU2clywbpHV/DUsyc4bpJCsNgddNtx4g==} + engines: {node: '>=8'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -9265,6 +9312,10 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -9410,10 +9461,6 @@ packages: resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} engines: {node: '>=8'} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -9425,6 +9472,9 @@ packages: readline2@1.0.1: resolution: {integrity: sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==} + readline@1.3.0: + resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} + recast@0.22.0: resolution: {integrity: sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==} engines: {node: '>= 4'} @@ -9772,6 +9822,9 @@ packages: sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + seq-logging@1.1.2: + resolution: {integrity: sha512-9n7bCIHiMdBene104oSEa2917OcNBw+uee2v+we4AQxmjqt/aeQkWy1296IvGsogbj5fK6wuDNhVhm/DYmauVA==} + seq-queue@0.0.5: resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} @@ -10279,6 +10332,9 @@ packages: resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} engines: {node: '>=0.10.0'} + tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -10655,6 +10711,10 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unix-dgram@2.0.6: + resolution: {integrity: sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==} + engines: {node: '>=0.10.48'} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -10885,6 +10945,18 @@ packages: engines: {node: '>= 0.10.0'} hasBin: true + winston-daily-rotate-file@5.0.0: + resolution: {integrity: sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==} + engines: {node: '>=8'} + peerDependencies: + winston: ^3 + + winston-syslog@2.7.1: + resolution: {integrity: sha512-MrU5gSwXgEbHwz5wFhn1rZtSCbRcP1PEB8zU49tgsfjQ63EjIVAkQpXmMocdbTLnTJ2cW3gLW6gmoOOOhyJZgg==} + engines: {node: '>= 8'} + peerDependencies: + winston: ^3.8.2 + winston-transport@4.9.0: resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} engines: {node: '>= 12.0.0'} @@ -10918,9 +10990,6 @@ packages: worker-timers@7.1.8: resolution: {integrity: sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==} - workerpool@6.5.1: - resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} - workerpool@9.3.4: resolution: {integrity: sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==} @@ -11190,6 +11259,17 @@ snapshots: esbuild: 0.11.23 jsonc-parser: 3.3.1 + '@alcalzone/pak@0.11.0': + dependencies: + axios: 1.19.0 + execa: 5.0.1 + fs-extra: 10.1.0 + semver: 7.8.5 + tiny-glob: 0.2.9 + transitivePeerDependencies: + - debug + - supports-color + '@anthropic-ai/sdk@0.27.3(encoding@0.1.13)': dependencies: '@types/node': 18.19.130 @@ -13129,6 +13209,13 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 + '@datalust/winston-seq@1.0.2(winston@3.18.3)': + dependencies: + seq-logging: 1.1.2 + winston: 3.18.3 + winston-transport: 4.9.0 + optional: true + '@emnapi/core@1.11.1': dependencies: '@emnapi/wasi-threads': 1.2.2 @@ -13584,10 +13671,37 @@ snapshots: optionalDependencies: '@types/node': 24.10.1 - '@iobroker/adapter-core@3.3.2(@iobroker/types@7.1.0)': + '@iobroker/adapter-core@3.4.3(@iobroker/js-controller-common-db@7.2.2)(@iobroker/types@7.1.0)': dependencies: + '@iobroker/js-controller-common-db': 7.2.2 '@iobroker/types': 7.1.0 + '@iobroker/js-controller-common-db@7.2.2': + dependencies: + '@alcalzone/pak': 0.11.0 + axios: 1.19.0 + ci-info: 3.9.0 + deep-clone: 3.0.3 + event-stream: 4.0.1 + fs-extra: 11.3.3 + jsonwebtoken: 9.0.3 + node-forge: 1.3.3 + node.extend: 2.0.3 + promisify-child-process: 4.1.2 + readline: 1.3.0 + semver: 7.8.5 + triple-beam: 1.4.1 + winston: 3.18.3 + winston-daily-rotate-file: 5.0.0(winston@3.18.3) + winston-transport: 4.9.0 + optionalDependencies: + '@datalust/winston-seq': 1.0.2(winston@3.18.3) + diskusage: 1.2.0 + winston-syslog: 2.7.1(winston@3.18.3) + transitivePeerDependencies: + - debug + - supports-color + '@iobroker/testing@5.2.2': dependencies: '@alcalzone/esbuild-register': 2.5.1-1 @@ -17275,6 +17389,16 @@ snapshots: transitivePeerDependencies: - debug + axios@1.19.0: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.6 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + - supports-color + axios@1.8.3: dependencies: follow-redirects: 1.15.11(debug@4.4.3) @@ -17777,18 +17901,6 @@ snapshots: parse5: 6.0.1 parse5-htmlparser2-tree-adapter: 6.0.1 - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -18248,6 +18360,8 @@ snapshots: dedent@1.7.0: {} + deep-clone@3.0.3: {} + deep-eql@4.0.0: dependencies: type-detect: 4.1.0 @@ -18366,8 +18480,6 @@ snapshots: diff-sequences@29.6.3: {} - diff@5.2.0: {} - diff@7.0.0: {} diff@8.0.2: {} @@ -18378,6 +18490,12 @@ snapshots: dependencies: path-type: 4.0.0 + diskusage@1.2.0: + dependencies: + es6-promise: 4.2.8 + nan: 2.24.0 + optional: true + dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 @@ -18660,6 +18778,9 @@ snapshots: es6-error@4.1.1: {} + es6-promise@4.2.8: + optional: true + esbuild@0.11.23: {} esbuild@0.25.12: @@ -18956,6 +19077,18 @@ snapshots: signal-exit: 3.0.7 strip-eof: 1.0.0 + execa@5.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -19195,6 +19328,10 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-stream-rotator@0.6.1: + dependencies: + moment: 2.30.1 + file-type@16.5.4: dependencies: readable-web-to-node-stream: 3.0.4 @@ -19286,6 +19423,8 @@ snapshots: optionalDependencies: debug: 4.4.3(supports-color@8.1.1) + follow-redirects@1.16.0: {} + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -19345,6 +19484,14 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + formdata-node@4.4.1: dependencies: node-domexception: 1.0.0 @@ -19376,6 +19523,12 @@ snapshots: fs-constants@1.0.0: {} + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 @@ -19604,14 +19757,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - global-dirs@0.1.1: dependencies: ini: 1.3.8 @@ -19637,6 +19782,8 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 + globalyzer@0.1.0: {} + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -19655,6 +19802,11 @@ snapshots: pify: 2.3.0 pinkie-promise: 2.0.1 + globrex@0.1.2: {} + + glossy@0.1.7: + optional: true + gm@1.25.1: dependencies: array-parallel: 0.1.3 @@ -19852,6 +20004,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + he@1.2.0: {} header-case@2.0.4: @@ -20219,10 +20375,6 @@ snapshots: dependencies: has-bigints: 1.1.0 - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - is-boolean-object@1.2.2: dependencies: call-bound: 1.0.4 @@ -20410,6 +20562,8 @@ snapshots: dependencies: is-inside-container: 1.0.0 + is@3.3.2: {} + isarray@0.0.1: {} isarray@1.0.0: {} @@ -21505,29 +21659,6 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 - mocha@10.8.2: - dependencies: - ansi-colors: 4.1.3 - browser-stdout: 1.3.1 - chokidar: 3.6.0 - debug: 4.4.3(supports-color@8.1.1) - diff: 5.2.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 8.1.0 - he: 1.2.0 - js-yaml: 4.1.1 - log-symbols: 4.1.0 - minimatch: 5.1.6 - ms: 2.1.3 - serialize-javascript: 6.0.2 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 6.5.1 - yargs: 16.2.0 - yargs-parser: 20.2.9 - yargs-unparser: 2.0.0 - mocha@11.7.5: dependencies: browser-stdout: 1.3.1 @@ -22320,6 +22451,11 @@ snapshots: node-watch@0.7.4: {} + node.extend@2.0.3: + dependencies: + hasown: 2.0.2 + is: 3.3.2 + nodemailer@6.9.9: {} nodemailer@7.0.10: {} @@ -23076,6 +23212,8 @@ snapshots: retry: 0.12.0 optional: true + promisify-child-process@4.1.2: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -23109,6 +23247,8 @@ snapshots: proxy-from-env@1.1.0: {} + proxy-from-env@2.1.0: {} + pseudomap@1.0.2: {} psl@1.15.0: @@ -23273,10 +23413,6 @@ snapshots: dependencies: readable-stream: 4.7.0 - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - readdirp@4.1.2: {} readdirp@5.0.0: {} @@ -23287,6 +23423,8 @@ snapshots: is-fullwidth-code-point: 1.0.0 mute-stream: 0.0.5 + readline@1.3.0: {} + recast@0.22.0: dependencies: assert: 2.1.0 @@ -23764,6 +23902,9 @@ snapshots: tslib: 2.8.1 upper-case-first: 2.0.2 + seq-logging@1.1.2: + optional: true + seq-queue@0.0.5: {} serialize-javascript@6.0.2: @@ -24393,6 +24534,11 @@ snapshots: timed-out@4.0.1: {} + tiny-glob@0.2.9: + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + tinyexec@0.3.2: {} tinyexec@1.2.4: {} @@ -24794,6 +24940,12 @@ snapshots: universalify@2.0.1: {} + unix-dgram@2.0.6: + dependencies: + bindings: 1.5.0 + nan: 2.24.0 + optional: true + unpipe@1.0.0: {} unrs-resolver@1.11.1: @@ -25059,6 +25211,24 @@ snapshots: window-size@0.2.0: {} + winston-daily-rotate-file@5.0.0(winston@3.18.3): + dependencies: + file-stream-rotator: 0.6.1 + object-hash: 3.0.0 + triple-beam: 1.4.1 + winston: 3.18.3 + winston-transport: 4.9.0 + + winston-syslog@2.7.1(winston@3.18.3): + dependencies: + glossy: 0.1.7 + triple-beam: 1.4.1 + winston: 3.18.3 + winston-transport: 4.9.0 + optionalDependencies: + unix-dgram: 2.0.6 + optional: true + winston-transport@4.9.0: dependencies: logform: 2.7.0 @@ -25128,8 +25298,6 @@ snapshots: worker-timers-broker: 6.1.8 worker-timers-worker: 7.0.71 - workerpool@6.5.1: {} - workerpool@9.3.4: {} wrap-ansi@2.1.0: