iobroker.poolcontrol 1.3.34 → 1.3.35

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
@@ -283,6 +283,13 @@ New features are added regularly – please refer to the changelog.
283
283
  ---
284
284
 
285
285
  ## Changelog
286
+ ### 1.3.35 (2026-06-29)
287
+
288
+ - Fixed an inconsistency in the daily circulation calculation.
289
+ - `circulation.daily_remaining` is now recalculated together with `circulation.daily_required`.
290
+ - Changing the pool size or minimum daily circulation now produces consistent values immediately after adapter restart.
291
+ - The remaining daily circulation is no longer blocked by zero flow or a stopped pump.
292
+
286
293
  ### 1.3.34 (2026-06-27)
287
294
 
288
295
  - **Major stability improvement:** Completely redesigned the internal chemistry history (pH, ORP and TDS) to prevent unbounded JSON state growth. This significantly reduces the risk of oversized `states.jsonl` files and potential js-controller startup failures.
@@ -310,12 +317,6 @@ New features are added regularly – please refer to the changelog.
310
317
 
311
318
  - Fixed automatic circulation top-up logic when temperature sensors are missing. Automatic top-up is now only blocked by collector/pool temperature comparison when solar control is active and both temperatures are valid.
312
319
 
313
- ### 1.3.30 (2026-06-05)
314
-
315
- - Updated release tooling to the required minimum version.
316
- - Cleaned up outdated Admin i18n keys.
317
- - Replaced native timers in AI weather helpers with ioBroker adapter timers.
318
-
319
320
  ## Archived Release History
320
321
 
321
322
  For older releases and archived version history see:
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "poolcontrol",
4
- "version": "1.3.34",
4
+ "version": "1.3.35",
5
5
  "news": {
6
+ "1.3.35": {
7
+ "en": "Fixed daily circulation remaining calculation after changing pool size or minimum daily circulation.",
8
+ "de": "Korrigiert die Berechnung der verbleibenden täglichen Umwälzung nach Änderung von Poolgröße oder Mindestumwälzung.",
9
+ "ru": "Исправлен расчет остатка дневного тиража после изменения размера пула или минимального дневного тиража.",
10
+ "pt": "Corrigido o cálculo restante da circulação diária após alterar o tamanho da piscina ou a circulação diária mínima.",
11
+ "nl": "Vaste berekening van de resterende dagelijkse circulatie na wijziging van de zwembadgrootte of minimale dagelijkse circulatie.",
12
+ "fr": "Calcul de la circulation quotidienne restante fixe après avoir modifié la taille de la piscine ou la circulation quotidienne minimale.",
13
+ "it": "Risolto il problema con il calcolo della circolazione giornaliera rimanente dopo aver modificato le dimensioni della piscina o la circolazione giornaliera minima.",
14
+ "es": "Se corrigió el cálculo de la circulación diaria restante después de cambiar el tamaño de la piscina o la circulación diaria mínima.",
15
+ "pl": "Naprawiono obliczanie pozostałego dziennego obiegu po zmianie wielkości basenu lub minimalnego dziennego obiegu.",
16
+ "uk": "Виправлено розрахунок залишку денного тиражу після зміни розміру пулу або мінімального добового тиражу.",
17
+ "zh-cn": "修复了更改矿池大小或最低每日流通量后每日流通量剩余计算的问题。"
18
+ },
6
19
  "1.3.34": {
7
20
  "en": "Improved chemistry history architecture with protected short-term and daily history, prevented oversized JSON states, added safeguards against state database growth, enhanced solar logbook/debug log protection, and updated adapter-core dependency.",
8
21
  "de": "Chemie-Historie grundlegend verbessert: geschützte Kurzzeit- und Tageshistorie eingeführt, übergroße JSON-States verhindert, Schutz vor unkontrolliertem Wachstum der State-Datenbank ergänzt, Solar-Logbuch und Debug-Log zusätzlich abgesichert sowie adapter-core-Abhängigkeit aktualisiert.",
@@ -54,19 +67,6 @@
54
67
  "pl": "Naprawiono logikę automatycznego uzupełniania cyrkulacji w przypadku braku czujników temperatury. Automatyczne uzupełnianie jest teraz blokowane tylko przez porównanie temperatur kolektora/basenu, gdy aktywna jest kontrola solarna i obie temperatury są prawidłowe.",
55
68
  "uk": "Виправлена ​​логіка автоматичного доповнення циркуляції, коли датчики температури відсутні. Автоматичне поповнення тепер блокується лише шляхом порівняння температури колектора/басейну, коли активовано сонячне керування та обидві температури дійсні.",
56
69
  "zh-cn": "修复了缺少温度传感器时的自动循环充值逻辑。现在,仅当太阳能控制处于活动状态并且两个温度都有效时,自动充值才会被收集器/池温度比较阻止。"
57
- },
58
- "1.3.30": {
59
- "en": "Updated release tooling to the required minimum version. Cleaned up outdated Admin i18n keys. Replaced native timers in AI weather helpers with ioBroker adapter timers.",
60
- "de": "Release-Werkzeuge auf die erforderliche Mindestversion aktualisiert. Veraltete Admin-i18n-Schlüssel bereinigt. Native Timer in den KI-Wetter-Helpern durch ioBroker-Adapter-Timer ersetzt.",
61
- "ru": "Обновлены инструменты выпуска до необходимой минимальной версии. Очищены устаревшие ключи администратора i18n. Заменены встроенные таймеры в помощниках погоды AI на таймеры адаптера ioBroker.",
62
- "pt": "Ferramentas de lançamento atualizadas para a versão mínima exigida. Limpeza de chaves Admin i18n desatualizadas. Temporizadores nativos substituídos em ajudantes meteorológicos de IA por temporizadores adaptadores ioBroker.",
63
- "nl": "Releasetooling bijgewerkt naar de vereiste minimumversie. Verouderde Admin i18n-sleutels opgeschoond. Native timers in AI-weerhelpers vervangen door ioBroker-adaptertimers.",
64
- "fr": "Outils de version mis à jour vers la version minimale requise. Nettoyage des clés Admin i18n obsolètes. Remplacement des minuteries natives dans les assistants météo AI par des minuteries d'adaptateur ioBroker.",
65
- "it": "Strumenti di rilascio aggiornati alla versione minima richiesta. Ripulite le chiavi Admin i18n obsolete. Sostituiti i timer nativi negli assistenti meteorologici AI con i timer dell'adattatore ioBroker.",
66
- "es": "Herramientas de lanzamiento actualizadas a la versión mínima requerida. Se limpiaron las claves de Admin i18n obsoletas. Se reemplazaron los temporizadores nativos en los asistentes meteorológicos de IA con temporizadores del adaptador ioBroker.",
67
- "pl": "Zaktualizowano narzędzia wydania do wymaganej wersji minimalnej. Wyczyszczono nieaktualne klucze administratora i18n. Zastąpiono natywne liczniki czasu w pomocnikach pogodowych AI zegarami adaptera ioBroker.",
68
- "uk": "Оновлено інструмент випуску до необхідної мінімальної версії. Очищено застарілі ключі адміністратора i18n. Вбудовані таймери в помічниках погоди штучного інтелекту замінено на таймери адаптера ioBroker.",
69
- "zh-cn": "将发布工具更新为所需的最低版本。清理了过时的 Admin i18n 密钥。将 AI 天气助手中的本机计时器替换为 ioBroker 适配器计时器。"
70
70
  }
71
71
  },
72
72
  "titleLang": {
@@ -230,20 +230,23 @@ const runtimeHelper = {
230
230
  const poolSize = (await this.adapter.getStateAsync('general.pool_size'))?.val || 0;
231
231
  const minCirc = (await this.adapter.getStateAsync('general.min_circulation_per_day'))?.val || 1;
232
232
 
233
- // daily_required immer direkt setzen – auch ohne Durchfluss
233
+ // Soll- und Restmenge immer direkt setzen – auch ohne Durchfluss
234
234
  const dailyRequired = Math.round(poolSize * minCirc);
235
- if (dailyRequired > 0) {
236
- await this.adapter.setStateAsync('circulation.daily_required', { val: dailyRequired, ack: true });
237
- }
235
+
236
+ // Bestehenden Tageswert laden, damit daily_remaining unabhängig vom Live-Durchfluss konsistent bleibt
237
+ const oldTotal = Number((await this.adapter.getStateAsync('circulation.daily_total'))?.val || 0);
238
+ const remainingFromCurrentTotal = Math.max(dailyRequired - oldTotal, 0);
239
+
240
+ await this.adapter.setStateAsync('circulation.daily_required', { val: dailyRequired, ack: true });
241
+ await this.adapter.setStateAsync('circulation.daily_remaining', {
242
+ val: remainingFromCurrentTotal,
243
+ ack: true,
244
+ });
238
245
 
239
246
  // Umwälzmenge berechnen
240
247
  // Reeller Durchflusswert aus pump.live.flow_current_lh
241
248
  const liveFlowLh = Number((await this.adapter.getStateAsync('pump.live.flow_current_lh'))?.val || 0);
242
249
 
243
- // Bestehende Werte für Total/Remaining laden
244
- const oldTotal = Number((await this.adapter.getStateAsync('circulation.daily_total'))?.val || 0);
245
- const oldRemaining = Number((await this.adapter.getStateAsync('circulation.daily_remaining'))?.val || 0);
246
-
247
250
  if (liveFlowLh <= 0) {
248
251
  await this._updateCirculationPlausibility({
249
252
  dailyTotal: oldTotal,
@@ -279,7 +282,7 @@ const runtimeHelper = {
279
282
  );
280
283
  } else {
281
284
  this.adapter.log.debug(
282
- `[runtimeHelper] No valid live data – keeping existing values (Total=${oldTotal}, Required=${dailyRequired}, Remaining=${oldRemaining})`,
285
+ `[runtimeHelper] No valid live data – keeping existing total (Total=${oldTotal}, Required=${dailyRequired}, Remaining=${remainingFromCurrentTotal})`,
283
286
  );
284
287
  }
285
288
  } catch (err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.poolcontrol",
3
- "version": "1.3.34",
3
+ "version": "1.3.35",
4
4
  "description": "Steuerung & Automatisierung für den Pool (Pumpe, Heizung, Ventile, Sensoren).",
5
5
  "author": "DasBo1975 <dasbo1975@outlook.de>",
6
6
  "homepage": "https://github.com/DasBo1975/ioBroker.poolcontrol",