iobroker.poolcontrol 1.2.21 → 1.2.22
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 +5 -4
- package/io-package.json +14 -14
- package/lib/helpers/solarHelper.js +25 -2
- package/lib/stateDefinitions/solarStates.js +24 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -186,6 +186,11 @@ New features are added regularly – please refer to the changelog.
|
|
|
186
186
|
- [help.md (detailed description and notes)](./help.md)
|
|
187
187
|
|
|
188
188
|
---
|
|
189
|
+
### 1.2.22 (2026-04-16)
|
|
190
|
+
|
|
191
|
+
- Added new read-only state `solar.request_active` to indicate when solar logic would request the pump
|
|
192
|
+
- Improved solarHelper robustness by handling invalid temperature values
|
|
193
|
+
|
|
189
194
|
### 1.2.21 (2026-04-15)
|
|
190
195
|
|
|
191
196
|
- Fixed photovoltaic afterrun timer restarting on every recalculation without PV surplus
|
|
@@ -209,10 +214,6 @@ Release: 07.04.2026
|
|
|
209
214
|
- Fixed persistence issue for `status.season_active` (no longer overwritten on adapter start)
|
|
210
215
|
- Improved persistence for frost protection settings
|
|
211
216
|
|
|
212
|
-
### 1.2.17
|
|
213
|
-
Release: 07.04.2026
|
|
214
|
-
- Fix: Resolved an issue where the pressure learning reset button did not trigger reliably. The pumpHelper4 now explicitly subscribes to its relevant internal states to ensure proper event handling.
|
|
215
|
-
|
|
216
217
|
## Support
|
|
217
218
|
- [ioBroker Forum](https://forum.iobroker.net/)
|
|
218
219
|
- [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.2.
|
|
4
|
+
"version": "1.2.22",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.2.22": {
|
|
7
|
+
"en": "Added new read-only state solar.request_active to indicate when solar logic would request the pump. Improved robustness of solarHelper by handling invalid temperature values.",
|
|
8
|
+
"de": "Neuer read-only Datenpunkt solar.request_active hinzugefügt, der anzeigt, wann die Solarlogik die Pumpe anfordern würde. Stabilität des solarHelpers verbessert durch Behandlung ungültiger Temperaturwerte.",
|
|
9
|
+
"ru": "Добавлено новое состояние Solar.request_active, доступное только для чтения, чтобы указать, когда солнечная логика запросит насос. Повышена надежность SolarHelper за счет обработки недопустимых значений температуры.",
|
|
10
|
+
"pt": "Adicionado novo estado somente leitura solar.request_active para indicar quando a lógica solar solicitaria a bomba. Robustez aprimorada do solarHelper ao lidar com valores de temperatura inválidos.",
|
|
11
|
+
"nl": "Nieuwe alleen-lezen status solar.request_active toegevoegd om aan te geven wanneer de zonnelogica de pomp zou aanvragen. Verbeterde robuustheid van solarHelper door ongeldige temperatuurwaarden te verwerken.",
|
|
12
|
+
"fr": "Ajout d'un nouvel état en lecture seule solar.request_active pour indiquer quand la logique solaire demanderait la pompe. Robustesse améliorée de solarHelper en gérant des valeurs de température invalides.",
|
|
13
|
+
"it": "Aggiunto nuovo stato di sola lettura solar.request_active per indicare quando la logica solare richiederebbe la pompa. Robustezza migliorata di solarHelper gestendo valori di temperatura non validi.",
|
|
14
|
+
"es": "Se agregó un nuevo estado de solo lectura solar.request_active para indicar cuándo la lógica solar solicitaría la bomba. Robustez mejorada de solarHelper al manejar valores de temperatura no válidos.",
|
|
15
|
+
"pl": "Dodano nowy stan tylko do odczytu solar.request_active, aby wskazać, kiedy logika solarna zażąda pompy. Poprawiona niezawodność solarHelper poprzez obsługę nieprawidłowych wartości temperatur.",
|
|
16
|
+
"uk": "Додано новий стан solar.request_active лише для читання, щоб вказати, коли сонячна логіка запитуватиме насос. Покращена надійність solarHelper завдяки обробці недійсних значень температури.",
|
|
17
|
+
"zh-cn": "添加了新的只读状态 Solar.request_active 以指示太阳能逻辑何时请求泵。通过处理无效温度值提高了 SolarHelper 的稳健性。"
|
|
18
|
+
},
|
|
6
19
|
"1.2.21": {
|
|
7
20
|
"en": "Bugfix: Fixed an issue in the photovoltaic helper where the afterrun timer was unintentionally restarted on every recalculation without PV surplus. This could delay the pump shutdown significantly. The afterrun now starts only once when surplus ends and runs reliably to completion. Also ensures proper cleanup when surplus becomes active again during afterrun.",
|
|
8
21
|
"de": "Bugfix: Fehler im Photovoltaik-Helper behoben, bei dem der Nachlauf-Timer bei jedem Recalc ohne PV-Überschuss erneut gestartet wurde. Dadurch konnte sich das Abschalten der Pumpe stark verzögern. Der Nachlauf startet jetzt nur noch einmal beim Wegfall des Überschusses und läuft zuverlässig zu Ende. Zusätzlich wird der Nachlauf sauber beendet, wenn währenddessen wieder Überschuss vorhanden ist.",
|
|
@@ -54,19 +67,6 @@
|
|
|
54
67
|
"pl": "Naprawiono problemy z trwałością stanów pór roku i mrozu. Sezon_aktywny nie jest już nadpisywany podczas uruchamiania adaptera. Ustawienia ochrony przed zamarzaniem są teraz przechowywane trwale.",
|
|
55
68
|
"uk": "Виправлено проблеми стійкості для сезону та морозу. Season_active тепер більше не перезаписується під час запуску адаптера. Параметри захисту від замерзання тепер зберігаються постійно.",
|
|
56
69
|
"zh-cn": "修复了季节和霜冻状态的持久性问题。 Season_active 现在不再在适配器启动时被覆盖。防霜保护设置现在可以永久存储。"
|
|
57
|
-
},
|
|
58
|
-
"1.2.17": {
|
|
59
|
-
"en": "Fix: Resolved an issue where the pressure learning reset button did not trigger reliably. The pumpHelper4 now explicitly subscribes to its relevant internal states (e.g. reset and configuration values), ensuring proper event handling and immediate execution of the reset logic.",
|
|
60
|
-
"de": "Fix: Problem behoben, bei dem der Reset-Button für das Druck-Lernsystem nicht zuverlässig ausgelöst wurde. Der pumpHelper4 abonniert nun explizit die relevanten eigenen States (z. B. Reset und Konfigurationswerte), wodurch die Eventverarbeitung und die sofortige Ausführung der Reset-Logik sichergestellt sind.",
|
|
61
|
-
"ru": "Исправление: решена проблема, из-за которой кнопка сброса обучения давлению не срабатывала надежно. PumpHelper4 теперь явно подписывается на соответствующие внутренние состояния (например, значения сброса и конфигурации), обеспечивая правильную обработку событий и немедленное выполнение логики сброса.",
|
|
62
|
-
"pt": "Correção: Resolvido um problema em que o botão de redefinição do aprendizado de pressão não acionava de maneira confiável. O pumpHelper4 agora assina explicitamente seus estados internos relevantes (por exemplo, valores de redefinição e configuração), garantindo o tratamento adequado de eventos e a execução imediata da lógica de redefinição.",
|
|
63
|
-
"nl": "Oplossing: een probleem opgelost waarbij de resetknop voor het leren van de druk niet betrouwbaar werd geactiveerd. De pumpHelper4 onderschrijft nu expliciet de relevante interne statussen (bijvoorbeeld reset- en configuratiewaarden), waardoor een juiste afhandeling van gebeurtenissen en onmiddellijke uitvoering van de resetlogica wordt gegarandeerd.",
|
|
64
|
-
"fr": "Correction : Résolution d'un problème où le bouton de réinitialisation de l'apprentissage de la pression ne se déclenchait pas de manière fiable. Le PumpHelper4 s'abonne désormais explicitement à ses états internes pertinents (par exemple, les valeurs de réinitialisation et de configuration), garantissant une gestion appropriée des événements et l'exécution immédiate de la logique de réinitialisation.",
|
|
65
|
-
"it": "Correzione: risolto un problema per cui il pulsante di ripristino dell'apprendimento della pressione non si attivava in modo affidabile. Il pumpHelper4 ora sottoscrive esplicitamente i suoi stati interni rilevanti (ad esempio valori di ripristino e configurazione), garantendo la corretta gestione degli eventi e l'esecuzione immediata della logica di ripristino.",
|
|
66
|
-
"es": "Solución: se resolvió un problema por el cual el botón de reinicio del aprendizaje de presión no se activaba de manera confiable. El pumpHelper4 ahora se suscribe explícitamente a sus estados internos relevantes (por ejemplo, valores de reinicio y configuración), lo que garantiza un manejo adecuado de eventos y la ejecución inmediata de la lógica de reinicio.",
|
|
67
|
-
"pl": "Poprawka: rozwiązano problem polegający na tym, że przycisk resetowania uczenia się ciśnienia nie uruchamiał się niezawodnie. PumpHelper4 teraz jawnie subskrybuje swoje odpowiednie stany wewnętrzne (np. wartości resetowania i konfiguracji), zapewniając prawidłową obsługę zdarzeń i natychmiastowe wykonanie logiki resetowania.",
|
|
68
|
-
"uk": "Виправлення: вирішено проблему, через яку кнопка скидання навчання тиску не спрацьовувала надійно. PumpHelper4 тепер явно підписується на свої відповідні внутрішні стани (наприклад, значення скидання та конфігурації), забезпечуючи правильну обробку подій і негайне виконання логіки скидання.",
|
|
69
|
-
"zh-cn": "修复:解决了压力学习重置按钮无法可靠触发的问题。 PumpHelper4 现在显式订阅其相关的内部状态(例如重置和配置值),确保正确的事件处理和立即执行重置逻辑。"
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"titleLang": {
|
|
@@ -32,15 +32,24 @@ const solarHelper = {
|
|
|
32
32
|
|
|
33
33
|
async _checkSolar() {
|
|
34
34
|
try {
|
|
35
|
-
// --- NEU: Vorrangprüfung durch ControlHelper ---
|
|
36
35
|
const activeHelper = (await this.adapter.getStateAsync('pump.active_helper'))?.val || '';
|
|
36
|
+
|
|
37
|
+
// --- NEU: Vorrangprüfung durch ControlHelper ---
|
|
37
38
|
if (activeHelper === 'controlHelper') {
|
|
39
|
+
await this.adapter.setStateChangedAsync('solar.request_active', {
|
|
40
|
+
val: false,
|
|
41
|
+
ack: true,
|
|
42
|
+
});
|
|
38
43
|
this.adapter.log.debug('[solarHelper] Priority by ControlHelper active – solar control paused.');
|
|
39
44
|
return;
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
// --- NEU: Vorrangprüfung durch TimeHelper ---
|
|
43
48
|
if (activeHelper === 'timeHelper') {
|
|
49
|
+
await this.adapter.setStateChangedAsync('solar.request_active', {
|
|
50
|
+
val: false,
|
|
51
|
+
ack: true,
|
|
52
|
+
});
|
|
44
53
|
this.adapter.log.debug('[solarHelper] Priority by TimeHelper active – solar control paused.');
|
|
45
54
|
return;
|
|
46
55
|
}
|
|
@@ -63,7 +72,12 @@ const solarHelper = {
|
|
|
63
72
|
const collector = Number((await this.adapter.getStateAsync('temperature.collector.current'))?.val);
|
|
64
73
|
const pool = Number((await this.adapter.getStateAsync('temperature.surface.current'))?.val); // Oberfläche = Pooltemp
|
|
65
74
|
|
|
66
|
-
|
|
75
|
+
// NEU: Absicherung gegen ungültige Werte
|
|
76
|
+
if (isNaN(collector) || isNaN(pool)) {
|
|
77
|
+
await this.adapter.setStateChangedAsync('solar.request_active', {
|
|
78
|
+
val: false,
|
|
79
|
+
ack: true,
|
|
80
|
+
});
|
|
67
81
|
this.adapter.log.debug('[solarHelper] No valid temperatures available');
|
|
68
82
|
return;
|
|
69
83
|
}
|
|
@@ -96,6 +110,10 @@ const solarHelper = {
|
|
|
96
110
|
ack: true,
|
|
97
111
|
});
|
|
98
112
|
}
|
|
113
|
+
await this.adapter.setStateChangedAsync('solar.request_active', {
|
|
114
|
+
val: shouldRun,
|
|
115
|
+
ack: true,
|
|
116
|
+
});
|
|
99
117
|
|
|
100
118
|
// ZENTRAL: Pumpe über Bool-Schalter setzen
|
|
101
119
|
await this.adapter.setStateChangedAsync('pump.pump_switch', {
|
|
@@ -107,6 +125,11 @@ const solarHelper = {
|
|
|
107
125
|
`[solarHelper] Solar control → pump ${shouldRun ? 'ON' : 'OFF'} (Collector=${collector}°C, Pool=${pool}°C, Delta=${delta}°C)`,
|
|
108
126
|
);
|
|
109
127
|
} else {
|
|
128
|
+
await this.adapter.setStateChangedAsync('solar.request_active', {
|
|
129
|
+
val: false,
|
|
130
|
+
ack: true,
|
|
131
|
+
});
|
|
132
|
+
|
|
110
133
|
// Keine Schaltung – Grund protokollieren
|
|
111
134
|
const reason = !season
|
|
112
135
|
? 'Saison inaktiv'
|
|
@@ -140,6 +140,30 @@ async function createSolarStates(adapter) {
|
|
|
140
140
|
});
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
// NEU: Reiner Anzeige-State, ob der solarHelper aktuell eine Solaranforderung stellen wuerde
|
|
144
|
+
await adapter.setObjectNotExistsAsync('solar.request_active', {
|
|
145
|
+
type: 'state',
|
|
146
|
+
common: {
|
|
147
|
+
name: {
|
|
148
|
+
en: 'Solar request active',
|
|
149
|
+
de: 'Solaranforderung aktiv',
|
|
150
|
+
},
|
|
151
|
+
desc: {
|
|
152
|
+
en: 'Shows whether the solar logic would currently request the pump based on collector temperature',
|
|
153
|
+
de: 'Zeigt an, ob die Solarlogik aktuell die Pumpe anhand der Kollektortemperatur anfordern wuerde',
|
|
154
|
+
},
|
|
155
|
+
type: 'boolean',
|
|
156
|
+
role: 'indicator',
|
|
157
|
+
read: true,
|
|
158
|
+
write: false,
|
|
159
|
+
},
|
|
160
|
+
native: {},
|
|
161
|
+
});
|
|
162
|
+
await adapter.setStateAsync('solar.request_active', {
|
|
163
|
+
val: false,
|
|
164
|
+
ack: true,
|
|
165
|
+
});
|
|
166
|
+
|
|
143
167
|
// Warnung Kollektortemperatur aktiv
|
|
144
168
|
await adapter.setObjectNotExistsAsync('solar.collector_warning', {
|
|
145
169
|
type: 'state',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.poolcontrol",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.22",
|
|
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",
|