iobroker.poolcontrol 1.3.5 → 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 +15 -16
- package/io-package.json +27 -27
- package/lib/helpers/frostHelper.js +24 -15
- package/lib/helpers/photovoltaicHelper.js +9 -7
- package/lib/helpers/solarInsightsHelper.js +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -188,6 +188,21 @@ 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
|
+
|
|
197
|
+
### 1.3.6 (2026-04-21)
|
|
198
|
+
|
|
199
|
+
frostHelper
|
|
200
|
+
- Fixed incorrect pump shutdown when other helpers (e.g. photovoltaicHelper) are active
|
|
201
|
+
- frostHelper now only disables the pump if it previously activated it itself
|
|
202
|
+
- improved internal ownership logic for safer multi-helper interaction
|
|
203
|
+
- corrected frost speech state handling (no longer based on current pump state)
|
|
204
|
+
- switched timer to adapter.setInterval / adapter.clearInterval for better stability and ioBroker compliance
|
|
205
|
+
|
|
191
206
|
### 1.3.5 (2026-04-19)
|
|
192
207
|
|
|
193
208
|
- Fixed critical i18n issue in solarInsightsHelper and solarLogbookHelper that could lead to instability or crashes
|
|
@@ -203,22 +218,6 @@ New features are added regularly – please refer to the changelog.
|
|
|
203
218
|
- Added solar COP calculation to evaluate system efficiency
|
|
204
219
|
- Added solar logbook helper with easy-to-read daily summaries for better user understanding
|
|
205
220
|
|
|
206
|
-
### 1.3.2 (2026-04-17)
|
|
207
|
-
|
|
208
|
-
- Fix: Solar Extended no longer interferes with controlHelper or timeHelper (prevents unwanted pump shutdown)
|
|
209
|
-
- Fix: Solar Extended no longer interferes with standard solar mode
|
|
210
|
-
- Fix: Improved handling of external actuator (clean ON/OFF behavior depending on Solar Extended state)
|
|
211
|
-
- Improvement: Added stable delta hysteresis (delta_on / delta_off) to prevent switching fluctuations
|
|
212
|
-
- Improvement: Replaced global timers with adapter timers in solarExtendedHelper
|
|
213
|
-
- Cleanup: Removed duplicate reading of request_active state
|
|
214
|
-
|
|
215
|
-
### 1.3.1 (2026-04-17)
|
|
216
|
-
|
|
217
|
-
- Fix: Solar Extended now correctly controls the pump
|
|
218
|
-
- Fix: Integrated Solar Extended into existing solar status handling via `speech.solar_active`
|
|
219
|
-
- Improvement: Consistent pump status display for Solar and Solar Extended
|
|
220
|
-
- Minor bug fixes and internal optimizations
|
|
221
|
-
|
|
222
221
|
## Support
|
|
223
222
|
- [ioBroker Forum](https://forum.iobroker.net/)
|
|
224
223
|
- [GitHub Issues](https://github.com/DasBo1975/ioBroker.poolcontrol/issues)
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "poolcontrol",
|
|
4
|
-
"version": "1.3.
|
|
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
|
+
},
|
|
19
|
+
"1.3.6": {
|
|
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.",
|
|
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.",
|
|
22
|
+
"ru": "Исправление FrostHelper: предотвращает некорректное выключение насоса, когда активны другие помощники (например, фотоэлектрические). Защита от замерзания теперь отключает насос только в том случае, если он ранее активировал его сам. Улучшена логика речевого состояния для индикации замерзания. Таймер FrostHelper переключен на адаптер.setInterval для большей стабильности и соответствия требованиям ioBroker.",
|
|
23
|
+
"pt": "Correção parafrostHelper: evita o desligamento incorreto da bomba quando outros auxiliares (por exemplo, fotovoltaicos) estão ativos. A proteção contra congelamento agora só desativa a bomba se ela mesma a tiver ativado anteriormente. Lógica de estado de fala aprimorada para indicação de congelamento. Mudou o temporizadorfrostHelper para adaptador.setInterval para melhor estabilidade e conformidade com ioBroker.",
|
|
24
|
+
"nl": "Oplossing voor FrostHelper: voorkomt onjuiste pompuitschakeling wanneer andere helpers (bijv. fotovoltaïsche energie) actief zijn. De vorstbeveiliging schakelt de pomp nu alleen uit als deze deze eerder zelf heeft geactiveerd. Verbeterde spraakstatuslogica voor vorstindicatie. FrostHelper-timer omgeschakeld naar adapter.setInterval voor betere stabiliteit en ioBroker-compliance.",
|
|
25
|
+
"fr": "Correctif pour frostHelper : empêche un arrêt incorrect de la pompe lorsque d'autres assistants (par exemple photovoltaïques) sont actifs. La protection antigel désactive désormais la pompe uniquement si elle l'a activée elle-même auparavant. Logique d’état vocale améliorée pour l’indication de gel. La minuterie FrostHelper a été remplacée par adapter.setInterval pour une meilleure stabilité et une meilleure conformité à ioBroker.",
|
|
26
|
+
"it": "Correzione per FrostHelper: impedisce lo spegnimento errato della pompa quando altri helper (ad esempio fotovoltaico) sono attivi. La protezione antigelo ora disabilita la pompa solo se precedentemente l'aveva attivata da sola. Logica dello stato vocale migliorata per l'indicazione del gelo. Cambiato il timer FrostHelper su Adapter.setInterval per una migliore stabilità e conformità con ioBroker.",
|
|
27
|
+
"es": "Solución para frostHelper: evita el apagado incorrecto de la bomba cuando otros ayudantes (por ejemplo, fotovoltaicos) están activos. La protección contra heladas ahora solo desactiva la bomba si previamente la activó ella misma. Lógica de estado de voz mejorada para indicación de escarcha. Se cambió el temporizador frostHelper a adaptor.setInterval para una mejor estabilidad y cumplimiento de ioBroker.",
|
|
28
|
+
"pl": "Poprawka dla FrostHelper: zapobiega nieprawidłowemu wyłączeniu pompy, gdy aktywne są inne pomoce (np. fotowoltaiczne). Ochrona przed zamarzaniem wyłącza teraz pompę tylko wtedy, gdy wcześniej sama ją uruchomiła. Ulepszona logika stanu mowy dla sygnalizacji mrozu. Zmieniono licznik czasu FrostHelper na adapter.setInterval, aby zapewnić lepszą stabilność i zgodność z ioBrokerem.",
|
|
29
|
+
"uk": "Виправлення для frostHelper: запобігає неправильному вимкненню насоса, коли інші помічники (наприклад, фотоелектричні) активні. Захист від замерзання тепер вимикає насос лише в тому випадку, якщо він раніше сам його активував. Покращена логіка стану мови для індикації морозу. Перемкнуто таймер frostHelper на adapter.setInterval для кращої стабільності та відповідності ioBroker.",
|
|
30
|
+
"zh-cn": "修复霜助手:防止当其他助手(例如光伏)处于活动状态时错误地关闭泵。现在,防冻保护只会在泵之前自行激活的情况下禁用泵。改进了霜冻指示的语音状态逻辑。将frostHelper计时器切换为adapter.setInterval以获得更好的稳定性和ioBroker合规性。"
|
|
31
|
+
},
|
|
6
32
|
"1.3.5": {
|
|
7
33
|
"en": "Fixed critical i18n issue in solarInsightsHelper and solarLogbookHelper that could lead to instability or crashes. Switched translation handling to I18n.translate() to ensure stable operation.",
|
|
8
34
|
"de": "Kritischer i18n-Fehler in solarInsightsHelper und solarLogbookHelper behoben, der zu Instabilität oder Abstürzen führen konnte. Übersetzungen wurden auf I18n.translate() umgestellt, um einen stabilen Betrieb sicherzustellen.",
|
|
@@ -41,32 +67,6 @@
|
|
|
41
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.",
|
|
42
68
|
"uk": "Додано розрахунок COP сонячної енергії та помічник сонячного журналу із зрозумілими для людини щоденними записами на основі даних про сонячну енергію.",
|
|
43
69
|
"zh-cn": "添加了太阳能 COP 计算和太阳能日志助手,其中包含基于太阳能洞察的人类可读的每日条目。"
|
|
44
|
-
},
|
|
45
|
-
"1.3.2": {
|
|
46
|
-
"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.",
|
|
47
|
-
"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.",
|
|
48
|
-
"ru": "Исправлены конфликты Solar Extended с controlHelper/timeHelper и стандартным солнечным режимом, улучшено управление внешним приводом, добавлен стабильный дельта-гистерезис и согласована обработка таймера с таймерами адаптера.",
|
|
49
|
-
"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.",
|
|
50
|
-
"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.",
|
|
51
|
-
"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.",
|
|
52
|
-
"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.",
|
|
53
|
-
"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.",
|
|
54
|
-
"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.",
|
|
55
|
-
"uk": "Виправлено конфлікти Solar Extended з controlHelper/timeHelper і стандартним сонячним режимом, покращено обробку зовнішнього приводу, додано стабільний дельта-гістерезис і узгоджено обробку таймера з таймерами адаптера.",
|
|
56
|
-
"zh-cn": "修复了 Solar Extended 与 controlHelper/timeHelper 和标准太阳能模式的冲突,改进了外部执行器处理,添加了稳定的增量迟滞,以及与适配器计时器对齐的计时器处理。"
|
|
57
|
-
},
|
|
58
|
-
"1.3.1": {
|
|
59
|
-
"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.",
|
|
60
|
-
"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.",
|
|
61
|
-
"ru": "Исправление: Solar Extended теперь правильно управляет насосом и интегрируется с существующей системой обработки состояния солнечной энергии. Помощник теперь использует voice.solar_active как стандартную логику Solar, обеспечивая единообразное отображение состояния и поведения насоса. Мелкие исправления и оптимизации.",
|
|
62
|
-
"pt": "Correção: o Solar Extended agora controla corretamente a bomba e se integra ao tratamento do status solar existente. O auxiliar agora usa Speech.solar_active como a lógica solar padrão, garantindo exibição e comportamento consistentes do status da bomba. Pequenas correções e otimizações.",
|
|
63
|
-
"nl": "Oplossing: Solar Extended bestuurt de pomp nu correct en integreert met bestaande zonnestatusafhandeling. De helper gebruikt nu speech.solar_active zoals de standaard zonnelogica, waardoor een consistente weergave en gedrag van de pompstatus wordt gegarandeerd. Kleine reparaties en optimalisaties.",
|
|
64
|
-
"fr": "Correctif : Solar Extended contrôle désormais correctement la pompe et s'intègre à la gestion de l'état solaire existante. L'assistant utilise désormais Speech.solar_active comme la logique solaire standard, garantissant un affichage et un comportement cohérents de l'état de la pompe. Corrections mineures et optimisations.",
|
|
65
|
-
"it": "Correzione: Solar Extended ora controlla correttamente la pompa e si integra con la gestione dello stato solare esistente. L'helper ora utilizza Speech.solar_active come la logica solare standard, garantendo una visualizzazione e un comportamento coerenti dello stato della pompa. Correzioni e ottimizzazioni minori.",
|
|
66
|
-
"es": "Solución: Solar Extended ahora controla correctamente la bomba y se integra con el manejo del estado solar existente. El asistente ahora utiliza Speech.solar_active como la lógica solar estándar, lo que garantiza una visualización y un comportamiento consistentes del estado de la bomba. Correcciones y optimizaciones menores.",
|
|
67
|
-
"pl": "Poprawka: Solar Extended teraz poprawnie steruje pompą i integruje się z istniejącą obsługą stanu solarnego. Pomocnik używa teraz mowy.solar_active jak standardowej logiki solarnej, zapewniając spójne wyświetlanie stanu i zachowanie pompy. Drobne poprawki i optymalizacje.",
|
|
68
|
-
"uk": "Виправлення: Solar Extended тепер правильно керує насосом та інтегрується з існуючою обробкою стану сонячної енергії. Помічник тепер використовує speak.solar_active як стандартну сонячну логіку, забезпечуючи послідовне відображення стану насоса та поведінку. Незначні виправлення та оптимізації.",
|
|
69
|
-
"zh-cn": "修复:Solar Extended 现在可以正确控制泵并与现有的太阳能状态处理集成。助手现在像标准太阳能逻辑一样使用pepe.solar_active,确保一致的泵状态显示和行为。小修复和优化。"
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"titleLang": {
|
|
@@ -27,9 +27,9 @@ const frostHelper = {
|
|
|
27
27
|
|
|
28
28
|
_scheduleCheck() {
|
|
29
29
|
if (this.checkTimer) {
|
|
30
|
-
clearInterval(this.checkTimer);
|
|
30
|
+
this.adapter.clearInterval(this.checkTimer);
|
|
31
31
|
}
|
|
32
|
-
this.checkTimer = setInterval(() => this._checkFrost(), 60 * 1000);
|
|
32
|
+
this.checkTimer = this.adapter.setInterval(() => this._checkFrost(), 60 * 1000);
|
|
33
33
|
// Beim Start sofort prüfen
|
|
34
34
|
this._checkFrost();
|
|
35
35
|
},
|
|
@@ -84,11 +84,12 @@ const frostHelper = {
|
|
|
84
84
|
shouldRun = false;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
//
|
|
87
|
+
// FIX: Sprachsignal nur nach echter Frostlogik setzen, nicht nach aktuellem Pumpenzustand
|
|
88
|
+
const frostNowActive = outsideRounded <= frostTempRounded;
|
|
88
89
|
const oldVal = (await this.adapter.getStateAsync('speech.frost_active'))?.val;
|
|
89
|
-
if (oldVal !==
|
|
90
|
+
if (oldVal !== frostNowActive) {
|
|
90
91
|
await this.adapter.setStateChangedAsync('speech.frost_active', {
|
|
91
|
-
val:
|
|
92
|
+
val: frostNowActive,
|
|
92
93
|
ack: true,
|
|
93
94
|
});
|
|
94
95
|
}
|
|
@@ -106,26 +107,34 @@ const frostHelper = {
|
|
|
106
107
|
// Frost als aktiven Helper/Modus setzen (damit der pumpHelper "EIN (Frostschutz)" anzeigt)
|
|
107
108
|
await this.adapter.setStateAsync('pump.active_helper', { val: 'frostHelper', ack: true });
|
|
108
109
|
await this.adapter.setStateAsync('pump.mode', { val: 'frostHelper', ack: true });
|
|
110
|
+
|
|
111
|
+
await this.adapter.setStateAsync('pump.pump_switch', {
|
|
112
|
+
val: true,
|
|
113
|
+
ack: false,
|
|
114
|
+
});
|
|
115
|
+
this.adapter.log.info(
|
|
116
|
+
`[frostHelper] Frost protection -> pump ON (outside=${outside}°C, limit=${frostTemp}°C)`,
|
|
117
|
+
);
|
|
109
118
|
} else {
|
|
110
|
-
//
|
|
119
|
+
// FIX: Nur ausschalten, wenn der Frosthelfer die Pumpe selbst übernommen hat
|
|
111
120
|
const activeHelperNow = (await this.adapter.getStateAsync('pump.active_helper'))?.val || '';
|
|
112
121
|
if (activeHelperNow === 'frostHelper') {
|
|
113
122
|
const modeToRestore = this._prevModeBeforeFrost || 'auto';
|
|
114
123
|
await this.adapter.setStateAsync('pump.active_helper', { val: '', ack: true });
|
|
115
124
|
await this.adapter.setStateAsync('pump.mode', { val: modeToRestore, ack: true });
|
|
125
|
+
|
|
126
|
+
await this.adapter.setStateAsync('pump.pump_switch', {
|
|
127
|
+
val: false,
|
|
128
|
+
ack: false,
|
|
129
|
+
});
|
|
130
|
+
this.adapter.log.info(
|
|
131
|
+
`[frostHelper] Frost protection -> pump OFF (outside=${outside}°C, limit=${frostTemp}°C)`,
|
|
132
|
+
);
|
|
116
133
|
}
|
|
117
134
|
// internen Zwischenspeicher nach Ende löschen
|
|
118
135
|
this._prevModeBeforeFrost = null;
|
|
119
136
|
}
|
|
120
137
|
// ENDE NEU
|
|
121
|
-
|
|
122
|
-
await this.adapter.setStateAsync('pump.pump_switch', {
|
|
123
|
-
val: shouldRun,
|
|
124
|
-
ack: false,
|
|
125
|
-
});
|
|
126
|
-
this.adapter.log.info(
|
|
127
|
-
`[frostHelper] Frost protection -> pump ${shouldRun ? 'ON' : 'OFF'} (outside=${outside}°C, limit=${frostTemp}°C)`,
|
|
128
|
-
);
|
|
129
138
|
}
|
|
130
139
|
} catch (err) {
|
|
131
140
|
this.adapter.log.warn(`[frostHelper] Error in check: ${err.message}`);
|
|
@@ -134,7 +143,7 @@ const frostHelper = {
|
|
|
134
143
|
|
|
135
144
|
cleanup() {
|
|
136
145
|
if (this.checkTimer) {
|
|
137
|
-
clearInterval(this.checkTimer);
|
|
146
|
+
this.adapter.clearInterval(this.checkTimer);
|
|
138
147
|
this.checkTimer = null;
|
|
139
148
|
}
|
|
140
149
|
},
|
|
@@ -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 (${
|
|
140
|
-
: `Kein Überschuss (${
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|