iobroker.poolcontrol 1.3.1 → 1.3.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 +9 -4
- package/io-package.json +14 -14
- package/lib/helpers/solarExtendedHelper.js +35 -14
- package/lib/helpers/solarHelper.js +4 -4
- package/lib/helpers/timeHelper.js +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -188,6 +188,15 @@ New features are added regularly – please refer to the changelog.
|
|
|
188
188
|
---
|
|
189
189
|
|
|
190
190
|
## Changelog
|
|
191
|
+
### 1.3.2 (2026-04-17)
|
|
192
|
+
|
|
193
|
+
- Fix: Solar Extended no longer interferes with controlHelper or timeHelper (prevents unwanted pump shutdown)
|
|
194
|
+
- Fix: Solar Extended no longer interferes with standard solar mode
|
|
195
|
+
- Fix: Improved handling of external actuator (clean ON/OFF behavior depending on Solar Extended state)
|
|
196
|
+
- Improvement: Added stable delta hysteresis (delta_on / delta_off) to prevent switching fluctuations
|
|
197
|
+
- Improvement: Replaced global timers with adapter timers in solarExtendedHelper
|
|
198
|
+
- Cleanup: Removed duplicate reading of request_active state
|
|
199
|
+
|
|
191
200
|
### 1.3.1 (2026-04-17)
|
|
192
201
|
|
|
193
202
|
- Fix: Solar Extended now correctly controls the pump
|
|
@@ -216,10 +225,6 @@ New features are added regularly – please refer to the changelog.
|
|
|
216
225
|
- Afterrun now starts only once and runs reliably to completion
|
|
217
226
|
- Proper cleanup when surplus becomes active again during afterrun
|
|
218
227
|
|
|
219
|
-
### 1.2.20
|
|
220
|
-
Release: 11.04.2026
|
|
221
|
-
- (DasBo) Reduced unnecessary state writes in status and photovoltaic helpers. Summary and PV timestamps are now only updated when the functional result actually changes, making the adapter quieter without affecting existing logic.
|
|
222
|
-
|
|
223
228
|
## Support
|
|
224
229
|
- [ioBroker Forum](https://forum.iobroker.net/)
|
|
225
230
|
- [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.
|
|
4
|
+
"version": "1.3.2",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.3.2": {
|
|
7
|
+
"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.",
|
|
8
|
+
"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.",
|
|
9
|
+
"ru": "Исправлены конфликты Solar Extended с controlHelper/timeHelper и стандартным солнечным режимом, улучшено управление внешним приводом, добавлен стабильный дельта-гистерезис и согласована обработка таймера с таймерами адаптера.",
|
|
10
|
+
"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.",
|
|
11
|
+
"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.",
|
|
12
|
+
"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.",
|
|
13
|
+
"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.",
|
|
14
|
+
"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.",
|
|
15
|
+
"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.",
|
|
16
|
+
"uk": "Виправлено конфлікти Solar Extended з controlHelper/timeHelper і стандартним сонячним режимом, покращено обробку зовнішнього приводу, додано стабільний дельта-гістерезис і узгоджено обробку таймера з таймерами адаптера.",
|
|
17
|
+
"zh-cn": "修复了 Solar Extended 与 controlHelper/timeHelper 和标准太阳能模式的冲突,改进了外部执行器处理,添加了稳定的增量迟滞,以及与适配器计时器对齐的计时器处理。"
|
|
18
|
+
},
|
|
6
19
|
"1.3.1": {
|
|
7
20
|
"en": "Fix: Solar Extended now correctly controls the pump and integrates with existing solar status handling. The helper now uses speech.solar_active like the standard solar logic, ensuring consistent pump status display and behavior. Minor fixes and optimizations.",
|
|
8
21
|
"de": "Fix: Solar Extended steuert jetzt korrekt die Pumpe und ist sauber in die bestehende Solar-Statuslogik integriert. Der Helper nutzt nun wie die Standard-Solarsteuerung den State speech.solar_active, wodurch Anzeige und Verhalten der Pumpe konsistent sind. Kleine Fehlerbehebungen und Optimierungen.",
|
|
@@ -54,19 +67,6 @@
|
|
|
54
67
|
"pl": "Poprawka błędu: Naprawiono problem w pomocniku fotowoltaicznym polegający na niezamierzonym ponownym uruchomieniu licznika czasu dobiegu przy każdym ponownym obliczeniu bez nadwyżki PV. Może to znacznie opóźnić wyłączenie pompy. Dobieg rozpoczyna się teraz tylko raz, gdy kończy się nadwyżka i przebiega niezawodnie do końca. Zapewnia również właściwe czyszczenie, gdy nadwyżka stanie się ponownie aktywna podczas dobiegu.",
|
|
55
68
|
"uk": "Виправлення помилки: виправлено проблему у фотоелектричному помічнику, через яку таймер післязапуску ненавмисно перезапускався під час кожного перерахунку без надлишку PV. Це може значно затримати зупинку насоса. Післязапуск тепер починається лише один раз, коли закінчується надлишок і працює надійно до кінця. Також забезпечує належне очищення, коли надлишки знову стають активними під час повторного циклу.",
|
|
56
69
|
"zh-cn": "错误修复:修复了光伏助手中的一个问题,即每次重新计算时没有光伏剩余时,后运行计时器会无意中重新启动。这可能会显着延迟泵的关闭。现在,后运行仅在盈余结束时启动一次,并可靠地运行直至完成。还确保在后运行期间剩余物再次活跃时进行适当的清理。"
|
|
57
|
-
},
|
|
58
|
-
"1.2.20": {
|
|
59
|
-
"en": "Bugfix release. Reduced unnecessary state writes in the status and photovoltaic helpers. Summary timestamps and PV update timestamps are now only written when the related functional result actually changes. This makes the adapter noticeably quieter and avoids needless state updates without changing the existing control logic.",
|
|
60
|
-
"de": "Bugfix-Release. Reduziert unnötige State-Schreibvorgänge im Status- und Photovoltaik-Helper. Summary-Zeitstempel und PV-Aktualisierungszeitstempel werden jetzt nur noch dann geschrieben, wenn sich das zugehörige fachliche Ergebnis tatsächlich ändert. Dadurch arbeitet der Adapter spürbar ruhiger und vermeidet unnötige State-Updates, ohne die bestehende Steuerlogik zu verändern.",
|
|
61
|
-
"ru": "Выпуск с исправлением ошибок. Уменьшено количество ненужных записей в статусе и фотоэлектрических помощниках. Сводные временные метки и временные метки обновления PV теперь записываются только тогда, когда соответствующий функциональный результат действительно изменяется. Это делает адаптер заметно тише и позволяет избежать ненужных обновлений состояния без изменения существующей логики управления.",
|
|
62
|
-
"pt": "Lançamento de correção de bug. Gravações de estado desnecessárias reduzidas nos ajudantes de status e fotovoltaicos. Os carimbos de data e hora de resumo e os carimbos de data e hora de atualização do PV agora são gravados apenas quando o resultado funcional relacionado realmente muda. Isto torna o adaptador visivelmente mais silencioso e evita atualizações de estado desnecessárias sem alterar a lógica de controle existente.",
|
|
63
|
-
"nl": "Bugfix-release. Verminderde onnodige statusschrijven in de status en fotovoltaïsche helpers. Samenvattende tijdstempels en tijdstempels voor PV-updates worden nu alleen geschreven als het gerelateerde functionele resultaat daadwerkelijk verandert. Dit maakt de adapter merkbaar stiller en vermijdt onnodige statusupdates zonder de bestaande besturingslogica te veranderen.",
|
|
64
|
-
"fr": "Version de correction de bugs. Réduction des écritures d'état inutiles dans les aides d'état et photovoltaïques. Les horodatages récapitulatifs et les horodatages de mise à jour PV ne sont désormais écrits que lorsque le résultat fonctionnel associé change réellement. Cela rend l'adaptateur sensiblement plus silencieux et évite les mises à jour d'état inutiles sans modifier la logique de contrôle existante.",
|
|
65
|
-
"it": "Rilascio di correzione bug. Ridotte le scritture di stato non necessarie nello stato e gli aiutanti fotovoltaici. I timestamp di riepilogo e quelli di aggiornamento PV ora vengono scritti solo quando il relativo risultato funzionale cambia effettivamente. Ciò rende l'adattatore notevolmente più silenzioso ed evita aggiornamenti di stato inutili senza modificare la logica di controllo esistente.",
|
|
66
|
-
"es": "Lanzamiento de corrección de errores. Reducción de escrituras de estado innecesarias en el estado y ayudantes fotovoltaicos. Las marcas de tiempo de resumen y las marcas de tiempo de actualización de PV ahora solo se escriben cuando el resultado funcional relacionado realmente cambia. Esto hace que el adaptador sea notablemente más silencioso y evita actualizaciones de estado innecesarias sin cambiar la lógica de control existente.",
|
|
67
|
-
"pl": "Wydanie poprawek błędów. Redukcja zbędnych zapisów stanu w statusie i pomocnikach fotowoltaicznych. Sumaryczne znaczniki czasu i znaczniki czasu aktualizacji PV są teraz zapisywane tylko wtedy, gdy faktycznie zmienia się powiązany wynik funkcjonalny. Dzięki temu adapter jest zauważalnie cichszy i pozwala uniknąć niepotrzebnych aktualizacji stanu bez zmiany istniejącej logiki sterowania.",
|
|
68
|
-
"uk": "Реліз виправлення помилок. Зменшено непотрібні записи стану в статусі та фотоелектричні помічники. Підсумкові мітки часу та мітки часу оновлення PV тепер записуються лише тоді, коли відповідний функціональний результат фактично змінюється. Це робить адаптер помітно тихішим і дозволяє уникнути непотрібних оновлень стану без зміни існуючої логіки керування.",
|
|
69
|
-
"zh-cn": "错误修复版本。减少状态和光伏助手中不必要的状态写入。摘要时间戳和 PV 更新时间戳现在仅在相关功能结果实际更改时写入。这使得适配器明显更安静,并且在不改变现有控制逻辑的情况下避免了不必要的状态更新。"
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"titleLang": {
|
|
@@ -26,12 +26,13 @@ const solarExtendedHelper = {
|
|
|
26
26
|
|
|
27
27
|
_scheduleCheck() {
|
|
28
28
|
if (this.checkTimer) {
|
|
29
|
-
clearInterval(this.checkTimer);
|
|
29
|
+
this.adapter.clearInterval(this.checkTimer);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
this.checkTimer = setInterval(() => this._checkSolarExtended(), 60 * 1000);
|
|
32
|
+
this.checkTimer = this.adapter.setInterval(() => this._checkSolarExtended(), 60 * 1000);
|
|
33
|
+
|
|
33
34
|
// Beim Start sofort prüfen
|
|
34
|
-
this._checkSolarExtended();
|
|
35
|
+
void this._checkSolarExtended();
|
|
35
36
|
},
|
|
36
37
|
|
|
37
38
|
async _checkSolarExtended() {
|
|
@@ -52,7 +53,7 @@ const solarExtendedHelper = {
|
|
|
52
53
|
const controlInverted = (await this.adapter.getStateAsync('solar.extended.control_inverted'))?.val === true;
|
|
53
54
|
|
|
54
55
|
const oldEnabledByMaster = (await this.adapter.getStateAsync('solar.extended.enabled_by_master'))?.val;
|
|
55
|
-
const oldRequestActive = (await this.adapter.getStateAsync('solar.extended.request_active'))?.val;
|
|
56
|
+
const oldRequestActive = (await this.adapter.getStateAsync('solar.extended.request_active'))?.val === true;
|
|
56
57
|
const oldActive = (await this.adapter.getStateAsync('solar.extended.active'))?.val;
|
|
57
58
|
const oldBlocked = (await this.adapter.getStateAsync('solar.extended.blocked'))?.val;
|
|
58
59
|
const oldBlockedBy = (await this.adapter.getStateAsync('solar.extended.blocked_by'))?.val;
|
|
@@ -148,11 +149,12 @@ const solarExtendedHelper = {
|
|
|
148
149
|
this.adapter.log.debug('[solarExtendedHelper] No valid temperatures available');
|
|
149
150
|
} else {
|
|
150
151
|
const delta = collector - pool;
|
|
152
|
+
|
|
153
|
+
requestActive = oldRequestActive;
|
|
154
|
+
|
|
151
155
|
if (delta >= deltaOn && pool < maxTemperature) {
|
|
152
156
|
requestActive = true;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
if (delta <= deltaOff || pool >= maxTemperature) {
|
|
157
|
+
} else if (delta <= deltaOff || pool >= maxTemperature) {
|
|
156
158
|
requestActive = false;
|
|
157
159
|
}
|
|
158
160
|
|
|
@@ -178,10 +180,21 @@ const solarExtendedHelper = {
|
|
|
178
180
|
actorWriteValue = !actorWriteValue;
|
|
179
181
|
}
|
|
180
182
|
|
|
183
|
+
// FIX:
|
|
184
|
+
// Definiert den AUS-Zustand des externen Aktors abhängig von der Invertierung.
|
|
185
|
+
const actorOffValue = controlInverted ? true : false;
|
|
186
|
+
|
|
181
187
|
if (actorConfigOk) {
|
|
182
188
|
try {
|
|
183
|
-
|
|
184
|
-
|
|
189
|
+
// FIX:
|
|
190
|
+
// Der externe Aktor darf nur dann aktiv sein,
|
|
191
|
+
// wenn Solar Extended tatsächlich selbst aktiv ist.
|
|
192
|
+
// Bei Blockierung durch controlHelper/timeHelper
|
|
193
|
+
// oder ohne eigene Anforderung wird der Aktor deaktiviert.
|
|
194
|
+
const effectiveActorValue = !blocked ? actorWriteValue : actorOffValue;
|
|
195
|
+
|
|
196
|
+
await this.adapter.setForeignStateAsync(controlObjectId, effectiveActorValue, false);
|
|
197
|
+
actorState = effectiveActorValue;
|
|
185
198
|
|
|
186
199
|
if (!blocked) {
|
|
187
200
|
active = requestActive;
|
|
@@ -190,6 +203,8 @@ const solarExtendedHelper = {
|
|
|
190
203
|
? I18n.translate('extended active')
|
|
191
204
|
: I18n.translate('extended inactive');
|
|
192
205
|
}
|
|
206
|
+
} else {
|
|
207
|
+
active = false;
|
|
193
208
|
}
|
|
194
209
|
} catch (err) {
|
|
195
210
|
blocked = true;
|
|
@@ -215,10 +230,16 @@ const solarExtendedHelper = {
|
|
|
215
230
|
});
|
|
216
231
|
}
|
|
217
232
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
233
|
+
// FIX:
|
|
234
|
+
// Den zentralen Pumpenschalter nur dann schreiben,
|
|
235
|
+
// wenn Solar Extended überhaupt der zuständige Solarmodus ist
|
|
236
|
+
// und keine höhere Fremdpriorität aktiv ist.
|
|
237
|
+
if (isExtendedMode && !isControlPriority && !isTimePriority) {
|
|
238
|
+
await this.adapter.setStateChangedAsync('pump.pump_switch', {
|
|
239
|
+
val: speechSolarActive,
|
|
240
|
+
ack: false,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
222
243
|
|
|
223
244
|
await this.adapter.setStateChangedAsync('solar.extended.enabled_by_master', {
|
|
224
245
|
val: enabledByMaster,
|
|
@@ -290,7 +311,7 @@ const solarExtendedHelper = {
|
|
|
290
311
|
|
|
291
312
|
cleanup() {
|
|
292
313
|
if (this.checkTimer) {
|
|
293
|
-
clearInterval(this.checkTimer);
|
|
314
|
+
this.adapter.clearInterval(this.checkTimer);
|
|
294
315
|
this.checkTimer = null;
|
|
295
316
|
}
|
|
296
317
|
},
|
|
@@ -23,11 +23,11 @@ const solarHelper = {
|
|
|
23
23
|
|
|
24
24
|
_scheduleCheck() {
|
|
25
25
|
if (this.checkTimer) {
|
|
26
|
-
clearInterval(this.checkTimer);
|
|
26
|
+
this.adapter.clearInterval(this.checkTimer);
|
|
27
27
|
}
|
|
28
|
-
this.checkTimer = setInterval(() => this._checkSolar(), 60 * 1000);
|
|
28
|
+
this.checkTimer = this.adapter.setInterval(() => this._checkSolar(), 60 * 1000);
|
|
29
29
|
// Beim Start sofort prüfen
|
|
30
|
-
this._checkSolar();
|
|
30
|
+
void this._checkSolar();
|
|
31
31
|
},
|
|
32
32
|
|
|
33
33
|
async _checkSolar() {
|
|
@@ -211,7 +211,7 @@ const solarHelper = {
|
|
|
211
211
|
|
|
212
212
|
cleanup() {
|
|
213
213
|
if (this.checkTimer) {
|
|
214
|
-
clearInterval(this.checkTimer);
|
|
214
|
+
this.adapter.clearInterval(this.checkTimer);
|
|
215
215
|
this.checkTimer = null;
|
|
216
216
|
}
|
|
217
217
|
},
|
|
@@ -23,11 +23,11 @@ const timeHelper = {
|
|
|
23
23
|
|
|
24
24
|
_scheduleCheck() {
|
|
25
25
|
if (this.checkTimer) {
|
|
26
|
-
clearInterval(this.checkTimer);
|
|
26
|
+
this.adapter.clearInterval(this.checkTimer);
|
|
27
27
|
}
|
|
28
|
-
this.checkTimer = setInterval(() => this._checkWindows(), 60 * 1000);
|
|
28
|
+
this.checkTimer = this.adapter.setInterval(() => this._checkWindows(), 60 * 1000);
|
|
29
29
|
// Beim Start sofort prüfen
|
|
30
|
-
this._checkWindows();
|
|
30
|
+
void this._checkWindows();
|
|
31
31
|
},
|
|
32
32
|
|
|
33
33
|
async _checkWindows() {
|
|
@@ -109,7 +109,7 @@ const timeHelper = {
|
|
|
109
109
|
|
|
110
110
|
cleanup() {
|
|
111
111
|
if (this.checkTimer) {
|
|
112
|
-
clearInterval(this.checkTimer);
|
|
112
|
+
this.adapter.clearInterval(this.checkTimer);
|
|
113
113
|
this.checkTimer = null;
|
|
114
114
|
}
|
|
115
115
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.poolcontrol",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
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",
|