iobroker.poolcontrol 1.3.25 → 1.3.27

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.
@@ -0,0 +1,599 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * chemistryToolsStates.js
5
+ * -------------------------------------------------------------
6
+ * States for chemistry helper tools.
7
+ *
8
+ * Scope:
9
+ * - pH Plus calculator
10
+ * - pH Minus calculator
11
+ * - Prepared structure for future chemistry calculators
12
+ *
13
+ * No automatic dosing.
14
+ * No automatic chemical control.
15
+ * No automatic pump or actuator control based on calculator results.
16
+ * Calculations are only performed after the user presses the calculate button.
17
+ * -------------------------------------------------------------
18
+ */
19
+
20
+ async function createChannel(adapter, id, name) {
21
+ await adapter.setObjectNotExistsAsync(id, {
22
+ type: 'channel',
23
+ common: { name },
24
+ native: {},
25
+ });
26
+ }
27
+
28
+ async function createState(adapter, id, common) {
29
+ await adapter.setObjectNotExistsAsync(id, {
30
+ type: 'state',
31
+ common,
32
+ native: {},
33
+ });
34
+ }
35
+
36
+ /**
37
+ * @param {import('iobroker').Adapter} adapter - ioBroker adapter instance
38
+ */
39
+ async function createChemistryToolsStates(adapter) {
40
+ adapter.log.debug('[chemistryToolsStates] Initialization started');
41
+
42
+ await createChannel(adapter, 'chemistry', {
43
+ en: 'Chemistry',
44
+ de: 'Chemie',
45
+ });
46
+
47
+ await createChannel(adapter, 'chemistry.tools', {
48
+ en: 'Chemistry tools',
49
+ de: 'Chemie-Werkzeuge',
50
+ });
51
+
52
+ // -------------------------------------------------------------
53
+ // pH Plus calculator
54
+ // -------------------------------------------------------------
55
+ await createChannel(adapter, 'chemistry.tools.ph_plus_calculator', {
56
+ en: 'pH Plus calculator',
57
+ de: 'pH-Plus-Rechner',
58
+ });
59
+
60
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.01_pool_volume_l', {
61
+ name: {
62
+ en: 'Pool volume',
63
+ de: 'Poolvolumen',
64
+ },
65
+ desc: {
66
+ en: 'Pool water volume used for the pH Plus calculation. This value can be prefilled from PoolControl but may be overwritten manually.',
67
+ de: 'Pool-Wasservolumen für die pH-Plus-Berechnung. Der Wert kann von PoolControl vorbelegt, aber manuell überschrieben werden.',
68
+ },
69
+ type: 'number',
70
+ role: 'level',
71
+ read: true,
72
+ write: true,
73
+ def: 0,
74
+ min: 0,
75
+ unit: 'l',
76
+ persist: true,
77
+ });
78
+
79
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.02_current_ph', {
80
+ name: {
81
+ en: 'Current pH value',
82
+ de: 'Aktueller pH-Wert',
83
+ },
84
+ desc: {
85
+ en: 'Current pH value used for the pH Plus calculation. This value can be prefilled from PoolControl but may be overwritten manually.',
86
+ de: 'Aktueller pH-Wert für die pH-Plus-Berechnung. Der Wert kann von PoolControl vorbelegt, aber manuell überschrieben werden.',
87
+ },
88
+ type: 'number',
89
+ role: 'value',
90
+ read: true,
91
+ write: true,
92
+ def: 7.0,
93
+ min: 0,
94
+ max: 14,
95
+ persist: true,
96
+ });
97
+
98
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.03_target_ph', {
99
+ name: {
100
+ en: 'Target pH value',
101
+ de: 'Ziel-pH-Wert',
102
+ },
103
+ desc: {
104
+ en: 'Target pH value for the pH Plus calculation. For pH Plus, this value must be higher than the current pH value.',
105
+ de: 'Ziel-pH-Wert für die pH-Plus-Berechnung. Bei pH Plus muss dieser Wert höher als der aktuelle pH-Wert sein.',
106
+ },
107
+ type: 'number',
108
+ role: 'level',
109
+ read: true,
110
+ write: true,
111
+ def: 7.2,
112
+ min: 0,
113
+ max: 14,
114
+ persist: true,
115
+ });
116
+
117
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.04_grams_per_10000l_01ph', {
118
+ name: {
119
+ en: 'Dosage factor',
120
+ de: 'Dosierfaktor',
121
+ },
122
+ desc: {
123
+ en: 'Amount of pH Plus in grams required to raise the pH value by 0.1 in 10,000 liters of pool water. Default value follows common manufacturer information.',
124
+ de: 'Menge pH Plus in Gramm, um den pH-Wert bei 10.000 Litern Poolwasser um 0,1 zu erhöhen. Der Standardwert orientiert sich an üblichen Herstellerangaben.',
125
+ },
126
+ type: 'number',
127
+ role: 'level',
128
+ read: true,
129
+ write: true,
130
+ def: 100,
131
+ min: 0,
132
+ unit: 'g',
133
+ persist: true,
134
+ });
135
+
136
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.05_calculate', {
137
+ name: {
138
+ en: 'Calculate pH Plus amount',
139
+ de: 'pH-Plus-Menge berechnen',
140
+ },
141
+ desc: {
142
+ en: 'Starts the pH Plus calculation. The result is calculated only when this button is pressed.',
143
+ de: 'Startet die pH-Plus-Berechnung. Das Ergebnis wird nur berechnet, wenn dieser Button gedrückt wird.',
144
+ },
145
+ type: 'boolean',
146
+ role: 'button',
147
+ read: true,
148
+ write: true,
149
+ def: false,
150
+ });
151
+
152
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.10_result_grams', {
153
+ name: {
154
+ en: 'Calculated pH Plus amount',
155
+ de: 'Berechnete pH-Plus-Menge',
156
+ },
157
+ desc: {
158
+ en: 'Calculated amount of pH Plus in grams. This is an orientation value, not an automatic dosing recommendation.',
159
+ de: 'Berechnete Menge pH Plus in Gramm. Dies ist ein Orientierungswert, keine automatische Dosierempfehlung.',
160
+ },
161
+ type: 'number',
162
+ role: 'value',
163
+ read: true,
164
+ write: false,
165
+ def: 0,
166
+ min: 0,
167
+ unit: 'g',
168
+ persist: true,
169
+ });
170
+
171
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.11_result_text', {
172
+ name: {
173
+ en: 'pH Plus result text',
174
+ de: 'pH-Plus-Ergebnistext',
175
+ },
176
+ desc: {
177
+ en: 'Readable result text for the pH Plus calculation, including safety notes.',
178
+ de: 'Lesbarer Ergebnistext der pH-Plus-Berechnung inklusive Sicherheitshinweisen.',
179
+ },
180
+ type: 'string',
181
+ role: 'text',
182
+ read: true,
183
+ write: false,
184
+ def: '',
185
+ persist: true,
186
+ });
187
+
188
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.12_valid', {
189
+ name: {
190
+ en: 'pH Plus calculation valid',
191
+ de: 'pH-Plus-Berechnung gültig',
192
+ },
193
+ desc: {
194
+ en: 'Shows whether the last pH Plus calculation used valid input values.',
195
+ de: 'Zeigt an, ob die letzte pH-Plus-Berechnung gültige Eingabewerte verwendet hat.',
196
+ },
197
+ type: 'boolean',
198
+ role: 'indicator',
199
+ read: true,
200
+ write: false,
201
+ def: false,
202
+ persist: true,
203
+ });
204
+
205
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.13_last_error', {
206
+ name: {
207
+ en: 'pH Plus last error',
208
+ de: 'pH-Plus letzter Fehler',
209
+ },
210
+ desc: {
211
+ en: 'Last validation or calculation error of the pH Plus calculator.',
212
+ de: 'Letzter Prüf- oder Berechnungsfehler des pH-Plus-Rechners.',
213
+ },
214
+ type: 'string',
215
+ role: 'text',
216
+ read: true,
217
+ write: false,
218
+ def: '',
219
+ persist: true,
220
+ });
221
+
222
+ await createState(adapter, 'chemistry.tools.ph_plus_calculator.14_last_calculated_at', {
223
+ name: {
224
+ en: 'pH Plus last calculation time',
225
+ de: 'pH-Plus letzte Berechnung',
226
+ },
227
+ desc: {
228
+ en: 'Timestamp of the last pH Plus calculation.',
229
+ de: 'Zeitpunkt der letzten pH-Plus-Berechnung.',
230
+ },
231
+ type: 'number',
232
+ role: 'value.time',
233
+ read: true,
234
+ write: false,
235
+ def: 0,
236
+ persist: true,
237
+ });
238
+
239
+ // -------------------------------------------------------------
240
+ // pH Minus calculator
241
+ // -------------------------------------------------------------
242
+ await createChannel(adapter, 'chemistry.tools.ph_minus_calculator', {
243
+ en: 'pH Minus calculator',
244
+ de: 'pH-Minus-Rechner',
245
+ });
246
+
247
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.01_pool_volume_l', {
248
+ name: {
249
+ en: 'Pool volume',
250
+ de: 'Poolvolumen',
251
+ },
252
+ desc: {
253
+ en: 'Pool water volume used for the pH Minus calculation. This value can be prefilled from PoolControl but may be overwritten manually.',
254
+ de: 'Pool-Wasservolumen für die pH-Minus-Berechnung. Der Wert kann von PoolControl vorbelegt, aber manuell überschrieben werden.',
255
+ },
256
+ type: 'number',
257
+ role: 'level',
258
+ read: true,
259
+ write: true,
260
+ def: 0,
261
+ min: 0,
262
+ unit: 'l',
263
+ persist: true,
264
+ });
265
+
266
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.02_current_ph', {
267
+ name: {
268
+ en: 'Current pH value',
269
+ de: 'Aktueller pH-Wert',
270
+ },
271
+ desc: {
272
+ en: 'Current pH value used for the pH Minus calculation. This value can be prefilled from PoolControl but may be overwritten manually.',
273
+ de: 'Aktueller pH-Wert für die pH-Minus-Berechnung. Der Wert kann von PoolControl vorbelegt, aber manuell überschrieben werden.',
274
+ },
275
+ type: 'number',
276
+ role: 'value',
277
+ read: true,
278
+ write: true,
279
+ def: 7.4,
280
+ min: 0,
281
+ max: 14,
282
+ persist: true,
283
+ });
284
+
285
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.03_target_ph', {
286
+ name: {
287
+ en: 'Target pH value',
288
+ de: 'Ziel-pH-Wert',
289
+ },
290
+ desc: {
291
+ en: 'Target pH value for the pH Minus calculation. For pH Minus, this value must be lower than the current pH value.',
292
+ de: 'Ziel-pH-Wert für die pH-Minus-Berechnung. Bei pH Minus muss dieser Wert niedriger als der aktuelle pH-Wert sein.',
293
+ },
294
+ type: 'number',
295
+ role: 'level',
296
+ read: true,
297
+ write: true,
298
+ def: 7.2,
299
+ min: 0,
300
+ max: 14,
301
+ persist: true,
302
+ });
303
+
304
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.04_grams_per_10000l_01ph', {
305
+ name: {
306
+ en: 'Dosage factor',
307
+ de: 'Dosierfaktor',
308
+ },
309
+ desc: {
310
+ en: 'Amount of pH Minus in grams required to lower the pH value by 0.1 in 10,000 liters of pool water. Default value follows common manufacturer information.',
311
+ de: 'Menge pH Minus in Gramm, um den pH-Wert bei 10.000 Litern Poolwasser um 0,1 zu senken. Der Standardwert orientiert sich an üblichen Herstellerangaben.',
312
+ },
313
+ type: 'number',
314
+ role: 'level',
315
+ read: true,
316
+ write: true,
317
+ def: 100,
318
+ min: 0,
319
+ unit: 'g',
320
+ persist: true,
321
+ });
322
+
323
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.05_calculate', {
324
+ name: {
325
+ en: 'Calculate pH Minus amount',
326
+ de: 'pH-Minus-Menge berechnen',
327
+ },
328
+ desc: {
329
+ en: 'Starts the pH Minus calculation. The result is calculated only when this button is pressed.',
330
+ de: 'Startet die pH-Minus-Berechnung. Das Ergebnis wird nur berechnet, wenn dieser Button gedrückt wird.',
331
+ },
332
+ type: 'boolean',
333
+ role: 'button',
334
+ read: true,
335
+ write: true,
336
+ def: false,
337
+ });
338
+
339
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.10_result_grams', {
340
+ name: {
341
+ en: 'Calculated pH Minus amount',
342
+ de: 'Berechnete pH-Minus-Menge',
343
+ },
344
+ desc: {
345
+ en: 'Calculated amount of pH Minus in grams. This is an orientation value, not an automatic dosing recommendation.',
346
+ de: 'Berechnete Menge pH Minus in Gramm. Dies ist ein Orientierungswert, keine automatische Dosierempfehlung.',
347
+ },
348
+ type: 'number',
349
+ role: 'value',
350
+ read: true,
351
+ write: false,
352
+ def: 0,
353
+ min: 0,
354
+ unit: 'g',
355
+ persist: true,
356
+ });
357
+
358
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.11_result_text', {
359
+ name: {
360
+ en: 'pH Minus result text',
361
+ de: 'pH-Minus-Ergebnistext',
362
+ },
363
+ desc: {
364
+ en: 'Readable result text for the pH Minus calculation, including safety notes.',
365
+ de: 'Lesbarer Ergebnistext der pH-Minus-Berechnung inklusive Sicherheitshinweisen.',
366
+ },
367
+ type: 'string',
368
+ role: 'text',
369
+ read: true,
370
+ write: false,
371
+ def: '',
372
+ persist: true,
373
+ });
374
+
375
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.12_valid', {
376
+ name: {
377
+ en: 'pH Minus calculation valid',
378
+ de: 'pH-Minus-Berechnung gültig',
379
+ },
380
+ desc: {
381
+ en: 'Shows whether the last pH Minus calculation used valid input values.',
382
+ de: 'Zeigt an, ob die letzte pH-Minus-Berechnung gültige Eingabewerte verwendet hat.',
383
+ },
384
+ type: 'boolean',
385
+ role: 'indicator',
386
+ read: true,
387
+ write: false,
388
+ def: false,
389
+ persist: true,
390
+ });
391
+
392
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.13_last_error', {
393
+ name: {
394
+ en: 'pH Minus last error',
395
+ de: 'pH-Minus letzter Fehler',
396
+ },
397
+ desc: {
398
+ en: 'Last validation or calculation error of the pH Minus calculator.',
399
+ de: 'Letzter Prüf- oder Berechnungsfehler des pH-Minus-Rechners.',
400
+ },
401
+ type: 'string',
402
+ role: 'text',
403
+ read: true,
404
+ write: false,
405
+ def: '',
406
+ persist: true,
407
+ });
408
+
409
+ await createState(adapter, 'chemistry.tools.ph_minus_calculator.14_last_calculated_at', {
410
+ name: {
411
+ en: 'pH Minus last calculation time',
412
+ de: 'pH-Minus letzte Berechnung',
413
+ },
414
+ desc: {
415
+ en: 'Timestamp of the last pH Minus calculation.',
416
+ de: 'Zeitpunkt der letzten pH-Minus-Berechnung.',
417
+ },
418
+ type: 'number',
419
+ role: 'value.time',
420
+ read: true,
421
+ write: false,
422
+ def: 0,
423
+ persist: true,
424
+ });
425
+
426
+ // -------------------------------------------------------------
427
+ // Salt calculator
428
+ // -------------------------------------------------------------
429
+ await createChannel(adapter, 'chemistry.tools.salt_calculator', {
430
+ en: 'Salt calculator',
431
+ de: 'Salz-Rechner',
432
+ });
433
+
434
+ await createState(adapter, 'chemistry.tools.salt_calculator.01_pool_volume_l', {
435
+ name: {
436
+ en: 'Pool volume',
437
+ de: 'Poolvolumen',
438
+ },
439
+ desc: {
440
+ en: 'Pool water volume used for the salt calculation. This value can be prefilled from PoolControl but may be overwritten manually.',
441
+ de: 'Pool-Wasservolumen für die Salzberechnung. Der Wert kann von PoolControl vorbelegt, aber manuell überschrieben werden.',
442
+ },
443
+ type: 'number',
444
+ role: 'level',
445
+ read: true,
446
+ write: true,
447
+ def: 0,
448
+ min: 0,
449
+ unit: 'l',
450
+ persist: true,
451
+ });
452
+
453
+ await createState(adapter, 'chemistry.tools.salt_calculator.02_current_salt_ppm', {
454
+ name: {
455
+ en: 'Current salt concentration',
456
+ de: 'Aktuelle Salzkonzentration',
457
+ },
458
+ desc: {
459
+ en: 'Current salt concentration in the pool water in ppm.',
460
+ de: 'Aktuelle Salzkonzentration im Poolwasser in ppm.',
461
+ },
462
+ type: 'number',
463
+ role: 'value',
464
+ read: true,
465
+ write: true,
466
+ def: 0,
467
+ min: 0,
468
+ unit: 'ppm',
469
+ persist: true,
470
+ });
471
+
472
+ await createState(adapter, 'chemistry.tools.salt_calculator.03_target_salt_ppm', {
473
+ name: {
474
+ en: 'Target salt concentration',
475
+ de: 'Ziel-Salzkonzentration',
476
+ },
477
+ desc: {
478
+ en: 'Target salt concentration for the pool water in ppm.',
479
+ de: 'Gewünschte Ziel-Salzkonzentration für das Poolwasser in ppm.',
480
+ },
481
+ type: 'number',
482
+ role: 'level',
483
+ read: true,
484
+ write: true,
485
+ def: 4000,
486
+ min: 0,
487
+ unit: 'ppm',
488
+ persist: true,
489
+ });
490
+
491
+ await createState(adapter, 'chemistry.tools.salt_calculator.04_calculate', {
492
+ name: {
493
+ en: 'Calculate salt amount',
494
+ de: 'Salzmenge berechnen',
495
+ },
496
+ desc: {
497
+ en: 'Starts the salt calculation. The result is calculated only when this button is pressed.',
498
+ de: 'Startet die Salzberechnung. Das Ergebnis wird nur berechnet, wenn dieser Button gedrückt wird.',
499
+ },
500
+ type: 'boolean',
501
+ role: 'button',
502
+ read: true,
503
+ write: true,
504
+ def: false,
505
+ });
506
+
507
+ await createState(adapter, 'chemistry.tools.salt_calculator.10_result_kg', {
508
+ name: {
509
+ en: 'Calculated salt amount',
510
+ de: 'Berechnete Salzmenge',
511
+ },
512
+ desc: {
513
+ en: 'Calculated amount of salt in kilograms. This is an orientation value for raising the salt concentration.',
514
+ de: 'Berechnete Salzmenge in Kilogramm. Dies ist ein Orientierungswert zur Erhöhung der Salzkonzentration.',
515
+ },
516
+ type: 'number',
517
+ role: 'value',
518
+ read: true,
519
+ write: false,
520
+ def: 0,
521
+ min: 0,
522
+ unit: 'kg',
523
+ persist: true,
524
+ });
525
+
526
+ await createState(adapter, 'chemistry.tools.salt_calculator.11_result_text', {
527
+ name: {
528
+ en: 'Salt result text',
529
+ de: 'Salz-Ergebnistext',
530
+ },
531
+ desc: {
532
+ en: 'Readable result text for the salt calculation, including safety notes.',
533
+ de: 'Lesbarer Ergebnistext der Salzberechnung inklusive Hinweisen.',
534
+ },
535
+ type: 'string',
536
+ role: 'text',
537
+ read: true,
538
+ write: false,
539
+ def: '',
540
+ persist: true,
541
+ });
542
+
543
+ await createState(adapter, 'chemistry.tools.salt_calculator.12_valid', {
544
+ name: {
545
+ en: 'Salt calculation valid',
546
+ de: 'Salzberechnung gültig',
547
+ },
548
+ desc: {
549
+ en: 'Shows whether the last salt calculation used valid input values.',
550
+ de: 'Zeigt an, ob die letzte Salzberechnung gültige Eingabewerte verwendet hat.',
551
+ },
552
+ type: 'boolean',
553
+ role: 'indicator',
554
+ read: true,
555
+ write: false,
556
+ def: false,
557
+ persist: true,
558
+ });
559
+
560
+ await createState(adapter, 'chemistry.tools.salt_calculator.13_last_error', {
561
+ name: {
562
+ en: 'Salt last error',
563
+ de: 'Salz letzter Fehler',
564
+ },
565
+ desc: {
566
+ en: 'Last validation or calculation error of the salt calculator.',
567
+ de: 'Letzter Prüf- oder Berechnungsfehler des Salz-Rechners.',
568
+ },
569
+ type: 'string',
570
+ role: 'text',
571
+ read: true,
572
+ write: false,
573
+ def: '',
574
+ persist: true,
575
+ });
576
+
577
+ await createState(adapter, 'chemistry.tools.salt_calculator.14_last_calculated_at', {
578
+ name: {
579
+ en: 'Salt last calculation time',
580
+ de: 'Salz letzte Berechnung',
581
+ },
582
+ desc: {
583
+ en: 'Timestamp of the last salt calculation.',
584
+ de: 'Zeitpunkt der letzten Salzberechnung.',
585
+ },
586
+ type: 'number',
587
+ role: 'value.time',
588
+ read: true,
589
+ write: false,
590
+ def: 0,
591
+ persist: true,
592
+ });
593
+
594
+ adapter.log.debug('[chemistryToolsStates] Initialization completed');
595
+ }
596
+
597
+ module.exports = {
598
+ createChemistryToolsStates,
599
+ };
package/main.js CHANGED
@@ -31,6 +31,7 @@ const aiChemistryHelpHelper = require('./lib/helpers/aiChemistryHelpHelper');
31
31
  const chemistryPhHelper = require('./lib/helpers/chemistryPhHelper');
32
32
  const chemistryTdsHelper = require('./lib/helpers/chemistryTdsHelper');
33
33
  const chemistryOrpHelper = require('./lib/helpers/chemistryOrpHelper');
34
+ const chemistryToolsHelper = require('./lib/helpers/chemistryToolsHelper'); // NEU
34
35
  const controlHelper = require('./lib/helpers/controlHelper');
35
36
  const controlHelper2 = require('./lib/helpers/controlHelper2');
36
37
  const debugLogHelper = require('./lib/helpers/debugLogHelper');
@@ -65,6 +66,7 @@ const { createAiChemistryHelpStates } = require('./lib/stateDefinitions/aiChemis
65
66
  const { createChemistryPhStates } = require('./lib/stateDefinitions/chemistryPhStates');
66
67
  const { createChemistryTdsStates } = require('./lib/stateDefinitions/chemistryTdsStates');
67
68
  const { createChemistryOrpStates } = require('./lib/stateDefinitions/chemistryOrpStates');
69
+ const { createChemistryToolsStates } = require('./lib/stateDefinitions/chemistryToolsStates'); // NEU: Chemie-Werkzeuge
68
70
  const { createHeatStates } = require('./lib/stateDefinitions/heatStates');
69
71
  const { createActuatorsStates } = require('./lib/stateDefinitions/actuatorsStates');
70
72
  const { createSolarInsightsStates } = require('./lib/stateDefinitions/solarInsightsStates');
@@ -177,6 +179,9 @@ class Poolcontrol extends utils.Adapter {
177
179
  // --- Chemistry / ORP evaluation ---
178
180
  await createChemistryOrpStates(this);
179
181
 
182
+ // --- Chemistry / tools ---
183
+ await createChemistryToolsStates(this);
184
+
180
185
  // --- Zusatz-Aktoren (Beleuchtung & Zusatzpumpen) ---
181
186
  await createActuatorsStates(this);
182
187
 
@@ -208,6 +213,7 @@ class Poolcontrol extends utils.Adapter {
208
213
  chemistryPhHelper.init(this);
209
214
  chemistryTdsHelper.init(this);
210
215
  chemistryOrpHelper.init(this);
216
+ chemistryToolsHelper.init(this); // NEU
211
217
  frostHelper.init(this);
212
218
  statusHelper.init(this);
213
219
  infoHelper.init(this);
@@ -309,6 +315,9 @@ class Poolcontrol extends utils.Adapter {
309
315
  if (chemistryOrpHelper.cleanup) {
310
316
  chemistryOrpHelper.cleanup();
311
317
  }
318
+ if (chemistryToolsHelper.cleanup) {
319
+ chemistryToolsHelper.cleanup();
320
+ }
312
321
  if (aiChemistryHelpHelper.cleanup) {
313
322
  aiChemistryHelpHelper.cleanup();
314
323
  }
@@ -452,6 +461,11 @@ class Poolcontrol extends utils.Adapter {
452
461
  } catch (e) {
453
462
  this.log.warn(`[chemistryOrpHelper] Error in handleStateChange: ${e.message}`);
454
463
  }
464
+ try {
465
+ await chemistryToolsHelper.handleStateChange(id, state);
466
+ } catch (e) {
467
+ this.log.warn(`[chemistryToolsHelper] Error in handleStateChange: ${e.message}`);
468
+ }
455
469
  try {
456
470
  statusHelper.handleStateChange(id, state);
457
471
  } catch (e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.poolcontrol",
3
- "version": "1.3.25",
3
+ "version": "1.3.27",
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",