iobroker.poolcontrol 1.2.20 → 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 +9 -240
- package/io-package.json +27 -27
- package/lib/helpers/photovoltaicHelper.js +28 -6
- package/lib/helpers/solarHelper.js +25 -2
- package/lib/stateDefinitions/solarStates.js +24 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -186,8 +186,16 @@ 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)
|
|
189
190
|
|
|
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
|
+
|
|
194
|
+
### 1.2.21 (2026-04-15)
|
|
195
|
+
|
|
196
|
+
- Fixed photovoltaic afterrun timer restarting on every recalculation without PV surplus
|
|
197
|
+
- Afterrun now starts only once and runs reliably to completion
|
|
198
|
+
- Proper cleanup when surplus becomes active again during afterrun
|
|
191
199
|
|
|
192
200
|
### 1.2.20
|
|
193
201
|
Release: 11.04.2026
|
|
@@ -206,245 +214,6 @@ Release: 07.04.2026
|
|
|
206
214
|
- Fixed persistence issue for `status.season_active` (no longer overwritten on adapter start)
|
|
207
215
|
- Improved persistence for frost protection settings
|
|
208
216
|
|
|
209
|
-
### 1.2.17
|
|
210
|
-
Release: 07.04.2026
|
|
211
|
-
- 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.
|
|
212
|
-
|
|
213
|
-
### 1.2.15
|
|
214
|
-
Release: 22.03.2026
|
|
215
|
-
- Fix i18n usage (replace I18n.t with I18n.translate) to resolve adapter startup crash and restart loop on certain systems.
|
|
216
|
-
|
|
217
|
-
### 1.2.14
|
|
218
|
-
Release: 22.03.2026
|
|
219
|
-
- ### add i18n support for chemistry help texts
|
|
220
|
-
|
|
221
|
-
### 1.2.13
|
|
222
|
-
Release: 22.03.2026
|
|
223
|
-
- Added multilingual state names and descriptions (DE/EN)
|
|
224
|
-
- Improved consistency of all state texts
|
|
225
|
-
- Minor text and structure refinements
|
|
226
|
-
|
|
227
|
-
### 1.2.12
|
|
228
|
-
Release: 21.03.2026
|
|
229
|
-
- Repository cleanup and fixes for ioBroker repository checker
|
|
230
|
-
- Restored required native object in io-package.json
|
|
231
|
-
- Removed invalid properties and outdated entries
|
|
232
|
-
- Updated README
|
|
233
|
-
|
|
234
|
-
### 1.2.11
|
|
235
|
-
- Repository cleanup (ioBroker checker issues resolved)
|
|
236
|
-
- Removed invalid properties from io-package.json
|
|
237
|
-
- README updated
|
|
238
|
-
|
|
239
|
-
### 1.2.10 (2026-03-20)
|
|
240
|
-
- Improved German translations in the admin UI (jsonConfig)
|
|
241
|
-
- Fixed incorrect and misleading terminology (e.g. flow vs. temperature sensors)
|
|
242
|
-
- Improved consistency and wording across all configuration options
|
|
243
|
-
|
|
244
|
-
### 1.2.9
|
|
245
|
-
Release: 19.03.2026
|
|
246
|
-
- fix: correct invalid common object in runtime channel.
|
|
247
|
-
|
|
248
|
-
### 1.2.7
|
|
249
|
-
Released: 16.03.2026
|
|
250
|
-
- Corrected role definitions for writable states according to ioBroker guidelines
|
|
251
|
-
- Several internal learning and diagnostic states set to read-only
|
|
252
|
-
- Removed obsolete files from repository
|
|
253
|
-
|
|
254
|
-
### 1.2.6
|
|
255
|
-
Released: 12.03.2026
|
|
256
|
-
- Fixed remaining adapter checker issues
|
|
257
|
-
- Updated release-script plugins to latest versions
|
|
258
|
-
- Converted remaining log messages to English
|
|
259
|
-
- Updated dependabot configuration (added github-actions ecosystem)
|
|
260
|
-
- Reduced `common.news` entries in io-package.json to comply with repository requirements
|
|
261
|
-
|
|
262
|
-
### 1.2.5
|
|
263
|
-
Released: 07.03.2026
|
|
264
|
-
- Fixed an issue in `actuatorsHelper` where state changes were not handled correctly in certain situations
|
|
265
|
-
- Minor internal improvements and stability fixes
|
|
266
|
-
|
|
267
|
-
### 1.2.4
|
|
268
|
-
Release: 07.03.2026
|
|
269
|
-
- Fix: actuatorsHelper did not synchronize instance configuration with internal states (active/name). Additional actuators could not be activated.
|
|
270
|
-
|
|
271
|
-
### 1.2.3
|
|
272
|
-
Released: 06.03.2026
|
|
273
|
-
- Replaced native timers (setTimeout / setInterval) with adapter timers (adapter.setTimeout / adapter.setInterval)
|
|
274
|
-
- Added proper cleanup of timers on adapter unload
|
|
275
|
-
- Internal code cleanup and maintenance improvements
|
|
276
|
-
|
|
277
|
-
### 1.2.2
|
|
278
|
-
Released: 06.03.2026
|
|
279
|
-
- Raised required admin version to >=7.6.20
|
|
280
|
-
- Updated translations after jsonConfig i18n refactoring
|
|
281
|
-
- Maintenance update (no functional changes)
|
|
282
|
-
|
|
283
|
-
### 1.2.1
|
|
284
|
-
Released: 06.03.2026
|
|
285
|
-
- Migration of admin configuration to i18n translation environment
|
|
286
|
-
- jsonConfig now uses English labels with translations managed in admin/i18n
|
|
287
|
-
- Translations generated using `npm run translate`
|
|
288
|
-
|
|
289
|
-
### 1.2.0
|
|
290
|
-
Released: 15.02.2026
|
|
291
|
-
- Activation of multilingual support (i18n) in jsonConfig
|
|
292
|
-
- Bilingual labeling (German/English) of instance configuration
|
|
293
|
-
- No functional changes to the adapter
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
## v1.1.0 Pump Power Recommendation (23.01.2026)
|
|
297
|
-
- **Pump Power Recommendation (from v1.1.0)**
|
|
298
|
-
- New passive section `pump.speed`
|
|
299
|
-
- Derives a clear logical performance state of the running pump:
|
|
300
|
-
- `off`, `frost`, `low`, `normal`, `high`, `boost`
|
|
301
|
-
- Performance state is based exclusively on:
|
|
302
|
-
- existing pump logic
|
|
303
|
-
- active helper (e.g., frost, solar, maintenance)
|
|
304
|
-
- current pump status
|
|
305
|
-
- Additionally provides a **recommended pump power in percent (0–100%)**
|
|
306
|
-
- Percentage values are **freely configurable** and **protected against overinstallation**
|
|
307
|
-
- **No active speed control**
|
|
308
|
-
- **No interference with existing pump control**
|
|
309
|
-
- Intended for connection to external systems such as:
|
|
310
|
-
- Shelly 0–10 V
|
|
311
|
-
- Frequency converters
|
|
312
|
-
- Blockly / scripts
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
## v1.0.0 Additional Actuators (Lighting & Auxiliary Pumps) (02.01.2026)
|
|
316
|
-
- Control of optional pool actuators:
|
|
317
|
-
- Pool lighting (up to 3 channels)
|
|
318
|
-
- Auxiliary pumps / attractions (up to 3 channels)
|
|
319
|
-
- Full configuration via the Admin interface:
|
|
320
|
-
- Activation per actuator via checkbox
|
|
321
|
-
- Assignment of an **external object ID**
|
|
322
|
-
(e.g., switchable socket or boolean control state)
|
|
323
|
-
- Supported operating modes:
|
|
324
|
-
- On / Off
|
|
325
|
-
- Timed operation (runtime in minutes)
|
|
326
|
-
- Continuous operation
|
|
327
|
-
- Internal status and control states:
|
|
328
|
-
- current operating state
|
|
329
|
-
- remaining runtime
|
|
330
|
-
- switching status and operating mode
|
|
331
|
-
- Clear system separation:
|
|
332
|
-
- Additional actuators do **not**
|
|
333
|
-
affect pump, solar, heating, or AI logic
|
|
334
|
-
- Purely optional system extension
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
## v0.9.0
|
|
338
|
-
- Introduction of heating / heat pump control (`heatHelper`)
|
|
339
|
-
- Automatic heating request based on pool temperature
|
|
340
|
-
- Target and maximum temperature configurable
|
|
341
|
-
- Support for:
|
|
342
|
-
- switchable sockets
|
|
343
|
-
- boolean control states
|
|
344
|
-
- Pump overrun time after heating ends
|
|
345
|
-
- Priority system:
|
|
346
|
-
- Maintenance mode blocks heating control
|
|
347
|
-
- Active only in automatic mode
|
|
348
|
-
- Considers season status
|
|
349
|
-
- Ownership protection for pump control
|
|
350
|
-
- New internal state `heat.heating_request` for external evaluation
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
## v0.8.2 (2025-12-25)
|
|
354
|
-
- New AI module **Chemistry Help** (`aiChemistryHelpHelper`)
|
|
355
|
-
- Purely informative support system for pool water chemistry
|
|
356
|
-
- Selection of typical pool problems (e.g., pH too high/low, chlorine ineffective, green/cloudy water)
|
|
357
|
-
- Clear cause and solution hints as text output
|
|
358
|
-
- No automatic dosing
|
|
359
|
-
- No product recommendations
|
|
360
|
-
- No device or pump control
|
|
361
|
-
- No speech output (purely visual information)
|
|
362
|
-
- New data points under `ai.chemistry_help.*`
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
## v0.8.0 (2025-12-08)
|
|
366
|
-
- Modules: Weather hints (Open-Meteo), pool tips, daily summary, weekend report
|
|
367
|
-
- Automatic text outputs with optional speech output
|
|
368
|
-
- Hourly weather updates for continuous refresh
|
|
369
|
-
- Anti-spam system to avoid duplicate hints
|
|
370
|
-
- New AI forecast system `aiForecastHelper` integrated
|
|
371
|
-
- Creates a daily automatic “Forecast for Tomorrow” including:
|
|
372
|
-
- temperature range
|
|
373
|
-
- weather description
|
|
374
|
-
- rain probability
|
|
375
|
-
- wind analysis (light / moderate / strong)
|
|
376
|
-
- pool recommendations for the following day
|
|
377
|
-
- New switches, schedules and outputs under `ai.weather.*`
|
|
378
|
-
- Immediate initial execution after instance start added
|
|
379
|
-
- Extended Admin overview under “Help & Info” with important AI notes
|
|
380
|
-
- Improved internal structure of the AI system (aiHelper + aiForecastHelper)
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
## v0.7.4 (2025-12-03)
|
|
384
|
-
- Fixed bug in ControlHelper. Persistent protection for control.circulation.mode
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
## v0.7.0 (2025-11-29)
|
|
388
|
-
- Introduction of a new pressure sensor system under `pump.pressure.*`
|
|
389
|
-
- Support for external pressure sensor object ID (bar value from ioBroker)
|
|
390
|
-
- Trend detection (rising/falling/stable) and moving pressure average
|
|
391
|
-
- Self-learning min/max pressure values with manual reset state
|
|
392
|
-
- New diagnostic text (`status_text_diagnostic`) with extended analysis information
|
|
393
|
-
- Extended pump monitoring without automatic control logic (purely informational)
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
## v0.6.2 (2025-11-07)
|
|
397
|
-
- Revision of instance overview with new header structures for clearer operation
|
|
398
|
-
- New start page image “Egon in Workwear” integrated into the Admin interface
|
|
399
|
-
- Extension of speech system with configurable Alexa output times
|
|
400
|
-
- Adjustments and cleanup in jsonConfig, speechHelper and speechStates
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
## v0.6.0 (2025-11-03)
|
|
404
|
-
- Introduction of full photovoltaic control with automatic pump logic
|
|
405
|
-
(new pump mode `Automatic (PV)` under `pump.mode`)
|
|
406
|
-
- Adapter reacts to PV surplus based on configurable household consumption and generation power
|
|
407
|
-
- Start logic: pump ON when surplus ≥ (rated power + threshold)
|
|
408
|
-
- Considers season status, overrun time and optional “circulation reached” protection
|
|
409
|
-
- Automatic migration adds new mode `auto_pv` to existing installations
|
|
410
|
-
- Improved internal logic, persistence and debug logging
|
|
411
|
-
|
|
412
|
-
## v0.5.5 (2025-11-01)
|
|
413
|
-
- Fixed endless loop in weekly and monthly statistics
|
|
414
|
-
|
|
415
|
-
## v0.5.3 (2025-10-30)
|
|
416
|
-
- Added Telegram user selection
|
|
417
|
-
|
|
418
|
-
## v0.5.2 (2025-10-30)
|
|
419
|
-
|
|
420
|
-
## v0.5.0 (2025-10-28)
|
|
421
|
-
|
|
422
|
-
### **0.4.0 (26.10.2025)**
|
|
423
|
-
|
|
424
|
-
**New Features**
|
|
425
|
-
- Introduction of the new statistics system under `analytics.statistics.temperature.today`
|
|
426
|
-
- Automatic collection of **min, max and average values** of all active temperature sensors
|
|
427
|
-
- Per sensor: JSON and HTML summaries with continuous updates
|
|
428
|
-
- Overall output of all sensors (table) under
|
|
429
|
-
`analytics.statistics.temperature.today.outputs.summary_all_html`
|
|
430
|
-
- Fully **persistent data points** with overinstall protection
|
|
431
|
-
- **Automatic midnight reset** for daily reset including timestamp
|
|
432
|
-
- Preparation for future weekly, monthly and seasonal statistics
|
|
433
|
-
|
|
434
|
-
**Improvements**
|
|
435
|
-
- Unified structure through new main folder `analytics`
|
|
436
|
-
- No permanent loops or timer load – pure event processing
|
|
437
|
-
- Improved performance and memory stability
|
|
438
|
-
- Revised initialization of all statistics states at startup
|
|
439
|
-
|
|
440
|
-
**Note**
|
|
441
|
-
This version forms the stable basis for all following statistics and analysis functions
|
|
442
|
-
(e.g., weekly and monthly statistics, history and efficiency evaluations).
|
|
443
|
-
|
|
444
|
-
*(older versions see [io-package.json](./io-package.json))*
|
|
445
|
-
|
|
446
|
-
---
|
|
447
|
-
|
|
448
217
|
## Support
|
|
449
218
|
- [ioBroker Forum](https://forum.iobroker.net/)
|
|
450
219
|
- [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.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
|
+
},
|
|
19
|
+
"1.2.21": {
|
|
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.",
|
|
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.",
|
|
22
|
+
"ru": "Исправление: исправлена проблема в фотоэлектрическом помощнике, из-за которой таймер выключения непреднамеренно перезапускался при каждом перерасчете без избытка фотоэлектрической энергии. Это может значительно задержать остановку насоса. Последующий запуск теперь запускается только один раз, когда заканчивается избыток, и надежно выполняется до завершения. Также обеспечивает правильную очистку, когда излишки снова становятся активными во время выбега.",
|
|
23
|
+
"pt": "Correção de bug: Corrigido um problema no auxiliar fotovoltaico em que o temporizador pós-execução era reiniciado involuntariamente em cada recálculo sem excedente de PV. Isto pode atrasar significativamente o encerramento da bomba. A pós-execução agora começa apenas uma vez quando o excedente termina e funciona de forma confiável até a conclusão. Também garante a limpeza adequada quando o excedente fica ativo novamente durante o pós-execução.",
|
|
24
|
+
"nl": "Bugfix: Probleem opgelost in de fotovoltaïsche helper waarbij de nalooptimer onbedoeld opnieuw werd gestart bij elke herberekening zonder PV-overschot. Dit kan het uitschakelen van de pomp aanzienlijk vertragen. De afterrun start nu slechts één keer als het overschot op is en loopt betrouwbaar door tot voltooiing. Zorgt ook voor een goede opruiming wanneer het overschot weer actief wordt tijdens de afterrun.",
|
|
25
|
+
"fr": "Correction d'un bug : correction d'un problème dans l'assistant photovoltaïque où la minuterie de post-exécution était involontairement redémarrée à chaque recalcul sans excédent PV. Cela pourrait retarder considérablement l’arrêt de la pompe. L'afterrun ne démarre désormais qu'une seule fois lorsque l'excédent se termine et se déroule de manière fiable jusqu'à son terme. Assure également un nettoyage approprié lorsque le surplus redevient actif pendant la post-exécution.",
|
|
26
|
+
"it": "Bugfix: risolto un problema nell'helper fotovoltaico per cui il timer di postesecuzione veniva riavviato involontariamente ad ogni ricalcolo senza surplus fotovoltaico. Ciò potrebbe ritardare notevolmente l'arresto della pompa. L'afterrun ora inizia solo una volta quando termina il surplus e viene eseguito in modo affidabile fino al completamento. Garantisce inoltre una corretta pulizia quando il surplus diventa nuovamente attivo durante l'afterrun.",
|
|
27
|
+
"es": "Corrección de errores: se solucionó un problema en el asistente fotovoltaico por el cual el temporizador de retardo se reiniciaba involuntariamente en cada recálculo sin excedente de fotovoltaico. Esto podría retrasar significativamente el apagado de la bomba. La ejecución posterior ahora comienza solo una vez cuando termina el excedente y se ejecuta de manera confiable hasta su finalización. También garantiza una limpieza adecuada cuando el excedente se vuelve a activar durante la ejecución posterior.",
|
|
28
|
+
"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.",
|
|
29
|
+
"uk": "Виправлення помилки: виправлено проблему у фотоелектричному помічнику, через яку таймер післязапуску ненавмисно перезапускався під час кожного перерахунку без надлишку PV. Це може значно затримати зупинку насоса. Післязапуск тепер починається лише один раз, коли закінчується надлишок і працює надійно до кінця. Також забезпечує належне очищення, коли надлишки знову стають активними під час повторного циклу.",
|
|
30
|
+
"zh-cn": "错误修复:修复了光伏助手中的一个问题,即每次重新计算时没有光伏剩余时,后运行计时器会无意中重新启动。这可能会显着延迟泵的关闭。现在,后运行仅在盈余结束时启动一次,并可靠地运行直至完成。还确保在后运行期间剩余物再次活跃时进行适当的清理。"
|
|
31
|
+
},
|
|
6
32
|
"1.2.20": {
|
|
7
33
|
"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.",
|
|
8
34
|
"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.",
|
|
@@ -41,32 +67,6 @@
|
|
|
41
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.",
|
|
42
68
|
"uk": "Виправлено проблеми стійкості для сезону та морозу. Season_active тепер більше не перезаписується під час запуску адаптера. Параметри захисту від замерзання тепер зберігаються постійно.",
|
|
43
69
|
"zh-cn": "修复了季节和霜冻状态的持久性问题。 Season_active 现在不再在适配器启动时被覆盖。防霜保护设置现在可以永久存储。"
|
|
44
|
-
},
|
|
45
|
-
"1.2.17": {
|
|
46
|
-
"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.",
|
|
47
|
-
"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.",
|
|
48
|
-
"ru": "Исправление: решена проблема, из-за которой кнопка сброса обучения давлению не срабатывала надежно. PumpHelper4 теперь явно подписывается на соответствующие внутренние состояния (например, значения сброса и конфигурации), обеспечивая правильную обработку событий и немедленное выполнение логики сброса.",
|
|
49
|
-
"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.",
|
|
50
|
-
"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.",
|
|
51
|
-
"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.",
|
|
52
|
-
"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.",
|
|
53
|
-
"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.",
|
|
54
|
-
"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.",
|
|
55
|
-
"uk": "Виправлення: вирішено проблему, через яку кнопка скидання навчання тиску не спрацьовувала надійно. PumpHelper4 тепер явно підписується на свої відповідні внутрішні стани (наприклад, значення скидання та конфігурації), забезпечуючи правильну обробку подій і негайне виконання логіки скидання.",
|
|
56
|
-
"zh-cn": "修复:解决了压力学习重置按钮无法可靠触发的问题。 PumpHelper4 现在显式订阅其相关的内部状态(例如重置和配置值),确保正确的事件处理和立即执行重置逻辑。"
|
|
57
|
-
},
|
|
58
|
-
"1.2.15": {
|
|
59
|
-
"en": "Fix i18n usage (replace I18n.t with I18n.translate) to resolve adapter startup crash and restart loop on certain systems.",
|
|
60
|
-
"de": "i18n-Nutzung korrigiert (I18n.t durch I18n.translate ersetzt), um Absturz beim Adapterstart und Restart-Loop auf bestimmten Systemen zu beheben.",
|
|
61
|
-
"ru": "Исправьте использование i18n (замените I18n.t на I18n.translate), чтобы устранить сбой при запуске адаптера и цикл перезапуска в определенных системах.",
|
|
62
|
-
"pt": "Corrija o uso do i18n (substitua I18n.t por I18n.translate) para resolver falha na inicialização do adaptador e loop de reinicialização em determinados sistemas.",
|
|
63
|
-
"nl": "I18n-gebruik repareren (vervang I18n.t door I18n.translate) om de opstartcrash van de adapter en de herstartlus op bepaalde systemen op te lossen.",
|
|
64
|
-
"fr": "Correction de l'utilisation de i18n (remplacez I18n.t par I18n.translate) pour résoudre le crash de démarrage de l'adaptateur et la boucle de redémarrage sur certains systèmes.",
|
|
65
|
-
"it": "Correggere l'utilizzo di i18n (sostituire I18n.t con I18n.translate) per risolvere il crash di avvio dell'adattatore e riavviare il ciclo su alcuni sistemi.",
|
|
66
|
-
"es": "Corrija el uso de i18n (reemplace I18n.t con I18n.translate) para resolver el bloqueo de inicio del adaptador y el ciclo de reinicio en ciertos sistemas.",
|
|
67
|
-
"pl": "Napraw użycie i18n (zamień I18n.t na I18n.translate), aby rozwiązać awarię uruchamiania adaptera i pętlę restartu w niektórych systemach.",
|
|
68
|
-
"uk": "Виправте використання i18n (замініть I18n.t на I18n.translate), щоб усунути збій запуску адаптера та цикл перезапуску в певних системах.",
|
|
69
|
-
"zh-cn": "修复 i18n 使用情况(将 I18n.t 替换为 I18n.translate),以解决某些系统上的适配器启动崩溃和重新启动循环问题。"
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"titleLang": {
|
|
@@ -239,15 +239,19 @@ const photovoltaicHelper = {
|
|
|
239
239
|
},
|
|
240
240
|
|
|
241
241
|
async _maybeStartPump(reason) {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}
|
|
245
|
-
this._desiredPump = true;
|
|
242
|
+
// FIX: Wenn während eines laufenden Nachlaufs wieder Überschuss kommt,
|
|
243
|
+
// muss der Nachlauf-Timer immer beendet werden
|
|
246
244
|
if (this.afterrunTimer) {
|
|
247
245
|
clearTimeout(this.afterrunTimer);
|
|
248
246
|
this.afterrunTimer = null;
|
|
249
247
|
}
|
|
250
248
|
this._pvPumpHoldUntil = 0;
|
|
249
|
+
|
|
250
|
+
if (this._desiredPump === true) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
this._desiredPump = true;
|
|
251
255
|
this.adapter.log.info(`[photovoltaicHelper] Pump ON (reason: ${reason})`);
|
|
252
256
|
await this._setPumpSwitch(true);
|
|
253
257
|
},
|
|
@@ -267,9 +271,17 @@ const photovoltaicHelper = {
|
|
|
267
271
|
}
|
|
268
272
|
|
|
269
273
|
if (immediate || !afterrunMin || afterrunMin <= 0) {
|
|
274
|
+
// FIX: Laufenden Nachlauf-Timer bei Sofort-Aus immer sauber beenden
|
|
275
|
+
if (this.afterrunTimer) {
|
|
276
|
+
clearTimeout(this.afterrunTimer);
|
|
277
|
+
this.afterrunTimer = null;
|
|
278
|
+
}
|
|
279
|
+
this._pvPumpHoldUntil = 0;
|
|
280
|
+
|
|
270
281
|
if (this._desiredPump === false) {
|
|
271
282
|
return;
|
|
272
283
|
}
|
|
284
|
+
|
|
273
285
|
this._desiredPump = false;
|
|
274
286
|
this.adapter.log.info(`[photovoltaicHelper] Pump OFF (${tag}, no afterrun)`);
|
|
275
287
|
await this._setPumpSwitch(false);
|
|
@@ -277,11 +289,19 @@ const photovoltaicHelper = {
|
|
|
277
289
|
}
|
|
278
290
|
|
|
279
291
|
const holdMs = Math.round(afterrunMin * 60 * 1000);
|
|
280
|
-
|
|
292
|
+
|
|
293
|
+
// FIX: Nachlauf nur einmal starten, nicht bei jedem Recalc neu setzen
|
|
281
294
|
if (this.afterrunTimer) {
|
|
282
|
-
|
|
295
|
+
this.adapter.log.debug(`[photovoltaicHelper] Afterrun already active, timer not restarted (${tag})`);
|
|
296
|
+
return;
|
|
283
297
|
}
|
|
298
|
+
|
|
299
|
+
this._pvPumpHoldUntil = Date.now() + holdMs;
|
|
284
300
|
this.afterrunTimer = setTimeout(async () => {
|
|
301
|
+
// FIX: Timer-Handle direkt freigeben, damit der Zustand sauber ist
|
|
302
|
+
this.afterrunTimer = null;
|
|
303
|
+
this._pvPumpHoldUntil = 0;
|
|
304
|
+
|
|
285
305
|
if (await this._isControlHelperPriorityActive()) {
|
|
286
306
|
this.adapter.log.debug(
|
|
287
307
|
'[photovoltaicHelper] Afterrun stop suppressed because controlHelper currently has priority.',
|
|
@@ -295,10 +315,12 @@ const photovoltaicHelper = {
|
|
|
295
315
|
this.adapter.log.debug('[photovoltaicHelper] Afterrun canceled – surplus active again.');
|
|
296
316
|
return;
|
|
297
317
|
}
|
|
318
|
+
|
|
298
319
|
this._desiredPump = false;
|
|
299
320
|
this.adapter.log.info('[photovoltaicHelper] Pump OFF (afterrun finished)');
|
|
300
321
|
await this._setPumpSwitch(false);
|
|
301
322
|
}, holdMs);
|
|
323
|
+
|
|
302
324
|
this.adapter.log.debug(`[photovoltaicHelper] Afterrun started: ${afterrunMin} min (${tag})`);
|
|
303
325
|
},
|
|
304
326
|
|
|
@@ -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",
|