iobroker.poolcontrol 1.3.6 → 1.3.7

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
@@ -188,6 +188,12 @@ New features are added regularly – please refer to the changelog.
188
188
  ---
189
189
 
190
190
  ## Changelog
191
+ ### 1.3.7 (2026-04-23)
192
+
193
+ Bugfixes
194
+ - solarInsightsHelper: fixed detection of standard solar runtime, replaced non-existing solar.active with solar.request_active, improved reliability of solar_ran_today for normal solar setups
195
+ - photovoltaicHelper: round surplus value in status text (avoid long decimal numbers), switched afterrun timer to adapter.setTimeout / clearTimeout
196
+
191
197
  ### 1.3.6 (2026-04-21)
192
198
 
193
199
  frostHelper
@@ -212,15 +218,6 @@ frostHelper
212
218
  - Added solar COP calculation to evaluate system efficiency
213
219
  - Added solar logbook helper with easy-to-read daily summaries for better user understanding
214
220
 
215
- ### 1.3.2 (2026-04-17)
216
-
217
- - Fix: Solar Extended no longer interferes with controlHelper or timeHelper (prevents unwanted pump shutdown)
218
- - Fix: Solar Extended no longer interferes with standard solar mode
219
- - Fix: Improved handling of external actuator (clean ON/OFF behavior depending on Solar Extended state)
220
- - Improvement: Added stable delta hysteresis (delta_on / delta_off) to prevent switching fluctuations
221
- - Improvement: Replaced global timers with adapter timers in solarExtendedHelper
222
- - Cleanup: Removed duplicate reading of request_active state
223
-
224
221
  ## Support
225
222
  - [ioBroker Forum](https://forum.iobroker.net/)
226
223
  - [GitHub Issues](https://github.com/DasBo1975/ioBroker.poolcontrol/issues)
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "poolcontrol",
4
- "version": "1.3.6",
4
+ "version": "1.3.7",
5
5
  "news": {
6
+ "1.3.7": {
7
+ "en": "Fix solarInsights detection for standard solar (use solar.request_active instead of non-existing solar.active). photovoltaicHelper improvements: rounded surplus value in status text and switched afterrun timer to adapter.setTimeout/clearTimeout.",
8
+ "de": "Fix der solarInsights-Erkennung für Standard-Solar (Verwendung von solar.request_active statt nicht vorhandenem solar.active). Verbesserungen im photovoltaicHelper: Rundung des Überschusswerts im Status-Text und Umstellung des Afterrun-Timers auf adapter.setTimeout/clearTimeout.",
9
+ "ru": "Исправлено обнаружение SolarInsights для стандартной солнечной энергии (используйте Solar.request_active вместо несуществующего Solar.active). Улучшения photovoltaicHelper: округленное лишнее значение в тексте состояния и переключение таймера послезапуска на адаптер.setTimeout/clearTimeout.",
10
+ "pt": "Corrija a detecção do solarInsights para energia solar padrão (use solar.request_active em vez de solar.active inexistente). Melhorias no photovoltaicHelper: valor excedente arredondado no texto de status e temporizador pós-execução alterado para adaptador.setTimeout/clearTimeout.",
11
+ "nl": "Fix solarInsights-detectie voor standaard zonne-energie (gebruik solar.request_active in plaats van niet-bestaande solar.active). photovoltaicHelper-verbeteringen: afgeronde meerwaarde in statustekst en geschakelde nalooptimer naar adapter.setTimeout/clearTimeout.",
12
+ "fr": "Correction de la détection solarInsights pour l'énergie solaire standard (utilisez solar.request_active au lieu de solar.active inexistant). Améliorations de photovoltaicHelper : valeur excédentaire arrondie dans le texte d'état et minuterie de post-exécution commutée sur adapter.setTimeout/clearTimeout.",
13
+ "it": "Correggere il rilevamento di solarInsights per l'energia solare standard (utilizzare solar.request_active anziché solar.active inesistente). Miglioramenti di fotovoltaicoHelper: valore surplus arrotondato nel testo di stato e timer di postesecuzione commutato su Adapter.setTimeout/clearTimeout.",
14
+ "es": "Se corrigió la detección de solarInsights para energía solar estándar (use solar.request_active en lugar de solar.active no existente). Mejoras en photovoltaicHelper: valor excedente redondeado en el texto de estado y temporizador de posejecución cambiado a adaptor.setTimeout/clearTimeout.",
15
+ "pl": "Napraw wykrywanie solarInsights dla standardowej energii słonecznej (użyj solar.request_active zamiast nieistniejącego solar.active). Udoskonalenia programu photovoltaicHelper: zaokrąglona wartość nadwyżki w tekście statusu i przełączona licznik czasu afterrun na adapter.setTimeout/clearTimeout.",
16
+ "uk": "Виправте виявлення solarInsights для стандартної сонячної енергії (використовуйте solar.request_active замість неіснуючого solar.active). Покращення photovoltaicHelper: округлене надлишкове значення в тексті стану та переключений таймер післязапуску на adapter.setTimeout/clearTimeout.",
17
+ "zh-cn": "修复标准太阳能的 SolarInsights 检测(使用 Solar.request_active 而不是不存在的 Solar.active)。 PVHelper 改进:对状态文本中的剩余值进行四舍五入,并将 Afterrun 计时器切换为 adapter.setTimeout/clearTimeout。"
18
+ },
6
19
  "1.3.6": {
7
20
  "en": "Fix for frostHelper: prevents incorrect pump shutdown when other helpers (e.g. photovoltaic) are active. Frost protection now only disables the pump if it previously activated it itself. Improved speech state logic for frost indication. Switched frostHelper timer to adapter.setInterval for better stability and ioBroker compliance.",
8
21
  "de": "Fix für frostHelper: verhindert falsches Abschalten der Pumpe, wenn andere Helper (z. B. Photovoltaik) aktiv sind. Frostschutz schaltet die Pumpe jetzt nur noch aus, wenn er sie zuvor selbst aktiviert hat. Sprach-State für Frostanzeige korrigiert. Timer im frostHelper auf adapter.setInterval umgestellt für bessere Stabilität und ioBroker-Konformität.",
@@ -54,19 +67,6 @@
54
67
  "pl": "Dodano obliczenia COP energii słonecznej i pomocnika dziennika słonecznego z czytelnymi dla człowieka codziennymi wpisami opartymi na spostrzeżeniach dotyczących energii słonecznej.",
55
68
  "uk": "Додано розрахунок COP сонячної енергії та помічник сонячного журналу із зрозумілими для людини щоденними записами на основі даних про сонячну енергію.",
56
69
  "zh-cn": "添加了太阳能 COP 计算和太阳能日志助手,其中包含基于太阳能洞察的人类可读的每日条目。"
57
- },
58
- "1.3.2": {
59
- "en": "Fixed Solar Extended conflicts with controlHelper/timeHelper and standard solar mode, improved external actuator handling, added stable delta hysteresis, and aligned timer handling with adapter timers.",
60
- "de": "Solar-Extended-Konflikte mit controlHelper/timeHelper und dem Standard-Solarmodus behoben, externe Aktorsteuerung verbessert, stabile Delta-Hysterese ergänzt und Timer auf Adapter-Timer umgestellt.",
61
- "ru": "Исправлены конфликты Solar Extended с controlHelper/timeHelper и стандартным солнечным режимом, улучшено управление внешним приводом, добавлен стабильный дельта-гистерезис и согласована обработка таймера с таймерами адаптера.",
62
- "pt": "Corrigidos conflitos Solar Extended com controlHelper/timeHelper e modo solar padrão, manuseio aprimorado do atuador externo, histerese delta estável adicionada e manuseio de temporizador alinhado com temporizadores adaptadores.",
63
- "nl": "Vaste Solar Extended-conflicten met controlHelper/timeHelper en standaard zonnemodus, verbeterde afhandeling van externe actuatoren, toegevoegde stabiele delta-hysteresis en afgestemde timerafhandeling met adaptertimers.",
64
- "fr": "Correction des conflits solaires étendus avec controlHelper/timeHelper et le mode solaire standard, gestion améliorée des actionneurs externes, ajout d'une hystérésis delta stable et gestion des minuteries alignées avec les minuteries de l'adaptateur.",
65
- "it": "Risolti i conflitti Solar Extended con controlHelper/timeHelper e la modalità solare standard, migliore gestione dell'attuatore esterno, aggiunta isteresi delta stabile e gestione del timer allineata con i timer dell'adattatore.",
66
- "es": "Se corrigieron los conflictos de Solar Extended con controlHelper/timeHelper y el modo solar estándar, manejo mejorado del actuador externo, histéresis delta estable agregada y manejo del temporizador alineado con temporizadores adaptadores.",
67
- "pl": "Naprawiono konflikty Solar Extended z ControlHelper/timeHelper i standardowym trybem solarnym, ulepszono obsługę zewnętrznego siłownika, dodano stabilną histerezę delta i dostosowano obsługę timera z timerami adaptera.",
68
- "uk": "Виправлено конфлікти Solar Extended з controlHelper/timeHelper і стандартним сонячним режимом, покращено обробку зовнішнього приводу, додано стабільний дельта-гістерезис і узгоджено обробку таймера з таймерами адаптера.",
69
- "zh-cn": "修复了 Solar Extended 与 controlHelper/timeHelper 和标准太阳能模式的冲突,改进了外部执行器处理,添加了稳定的增量迟滞,以及与适配器计时器对齐的计时器处理。"
70
70
  }
71
71
  },
72
72
  "titleLang": {
@@ -130,14 +130,16 @@ const photovoltaicHelper = {
130
130
 
131
131
  // Überschussberechnung
132
132
  const surplus = Math.max(0, gen - house);
133
+ // FIX: Nur für die Textausgabe auf ganze Watt runden
134
+ const surplusDisplay = Math.round(surplus);
133
135
 
134
136
  // **NEU:** Einschaltlogik = Pumpenleistung + Sicherheitsaufschlag
135
137
  const requiredPower = pumpMax + threshold;
136
138
  const surplusActive = surplus >= requiredPower && seasonActive;
137
139
 
138
140
  const txt = surplusActive
139
- ? `Überschuss aktiv (${surplus} W ≥ ${pumpMax}+${threshold} W)`
140
- : `Kein Überschuss (${surplus} W < ${pumpMax}+${threshold} W)`;
141
+ ? `Überschuss aktiv (${surplusDisplay} W ≥ ${pumpMax}+${threshold} W)`
142
+ : `Kein Überschuss (${surplusDisplay} W < ${pumpMax}+${threshold} W)`;
141
143
 
142
144
  // FIX: Bestehende Ergebnisstates zuerst lesen, damit last_update nur bei echter Ergebnisänderung gesetzt wird
143
145
  const currentSurplus = Number((await this.adapter.getStateAsync('photovoltaic.power_surplus_w'))?.val ?? 0);
@@ -242,7 +244,7 @@ const photovoltaicHelper = {
242
244
  // FIX: Wenn während eines laufenden Nachlaufs wieder Überschuss kommt,
243
245
  // muss der Nachlauf-Timer immer beendet werden
244
246
  if (this.afterrunTimer) {
245
- clearTimeout(this.afterrunTimer);
247
+ this.adapter.clearTimeout(this.afterrunTimer);
246
248
  this.afterrunTimer = null;
247
249
  }
248
250
  this._pvPumpHoldUntil = 0;
@@ -259,7 +261,7 @@ const photovoltaicHelper = {
259
261
  async _maybeStopPump(immediate, afterrunMin, tag) {
260
262
  if (await this._isControlHelperPriorityActive()) {
261
263
  if (this.afterrunTimer) {
262
- clearTimeout(this.afterrunTimer);
264
+ this.adapter.clearTimeout(this.afterrunTimer);
263
265
  this.afterrunTimer = null;
264
266
  }
265
267
  this._pvPumpHoldUntil = 0;
@@ -273,7 +275,7 @@ const photovoltaicHelper = {
273
275
  if (immediate || !afterrunMin || afterrunMin <= 0) {
274
276
  // FIX: Laufenden Nachlauf-Timer bei Sofort-Aus immer sauber beenden
275
277
  if (this.afterrunTimer) {
276
- clearTimeout(this.afterrunTimer);
278
+ this.adapter.clearTimeout(this.afterrunTimer);
277
279
  this.afterrunTimer = null;
278
280
  }
279
281
  this._pvPumpHoldUntil = 0;
@@ -297,7 +299,7 @@ const photovoltaicHelper = {
297
299
  }
298
300
 
299
301
  this._pvPumpHoldUntil = Date.now() + holdMs;
300
- this.afterrunTimer = setTimeout(async () => {
302
+ this.afterrunTimer = this.adapter.setTimeout(async () => {
301
303
  // FIX: Timer-Handle direkt freigeben, damit der Zustand sauber ist
302
304
  this.afterrunTimer = null;
303
305
  this._pvPumpHoldUntil = 0;
@@ -364,7 +366,7 @@ const photovoltaicHelper = {
364
366
 
365
367
  cleanup() {
366
368
  if (this.afterrunTimer) {
367
- clearTimeout(this.afterrunTimer);
369
+ this.adapter.clearTimeout(this.afterrunTimer);
368
370
  this.afterrunTimer = null;
369
371
  }
370
372
  this._pvPumpHoldUntil = 0;
@@ -36,7 +36,7 @@ const solarInsightsHelper = {
36
36
  }
37
37
 
38
38
  // Tages-Latch sofort setzen, wenn Solar aktiv wird
39
- if ((id === 'solar.active' || id === 'solar.extended.active') && state.val === true) {
39
+ if ((id === 'solar.request_active' || id === 'solar.extended.active') && state.val === true) {
40
40
  void this.adapter.setStateChangedAsync('analytics.insights.solar.results.solar_ran_today', {
41
41
  val: true,
42
42
  ack: true,
@@ -144,7 +144,7 @@ const solarInsightsHelper = {
144
144
  'pump.live.current_power_w',
145
145
  'temperature.delta.surface_ground',
146
146
 
147
- 'solar.active',
147
+ 'solar.request_active',
148
148
  'solar.extended.active',
149
149
  'solar.control_mode',
150
150
 
@@ -178,7 +178,7 @@ const solarInsightsHelper = {
178
178
  'pump.live.current_power_w',
179
179
  'temperature.delta.surface_ground',
180
180
 
181
- 'solar.active',
181
+ 'solar.request_active',
182
182
  'solar.extended.active',
183
183
  'solar.control_mode',
184
184
 
@@ -284,7 +284,7 @@ const solarInsightsHelper = {
284
284
  usedSensors.push('weather');
285
285
  }
286
286
 
287
- const solarStandardActive = await this._readBoolean('solar.active');
287
+ const solarStandardActive = await this._readBoolean('solar.request_active');
288
288
  const solarExtendedActive = await this._readBoolean('solar.extended.active');
289
289
  const oldSolarRanToday = await this._readBoolean('analytics.insights.solar.results.solar_ran_today');
290
290
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.poolcontrol",
3
- "version": "1.3.6",
3
+ "version": "1.3.7",
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",