iobroker.poolcontrol 1.3.15 → 1.3.18

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.
@@ -209,11 +209,11 @@ async function createChemistryPhStates(adapter) {
209
209
  en: 'Readable date and time when the last pH value was received.',
210
210
  de: 'Lesbares Datum und Uhrzeit, wann der letzte pH-Wert empfangen wurde.',
211
211
  },
212
- type: 'string',
212
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
213
213
  role: 'value.time',
214
214
  read: true,
215
215
  write: false,
216
- def: '',
216
+ def: 0, // FIX: numeric timestamp default for value.time.
217
217
  persist: true,
218
218
  });
219
219
 
@@ -245,11 +245,11 @@ async function createChemistryPhStates(adapter) {
245
245
  en: 'Readable date and time of the last valid pH value.',
246
246
  de: 'Lesbares Datum und Uhrzeit des letzten gültigen pH-Werts.',
247
247
  },
248
- type: 'string',
248
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
249
249
  role: 'value.time',
250
250
  read: true,
251
251
  write: false,
252
- def: '',
252
+ def: 0, // FIX: numeric timestamp default for value.time.
253
253
  persist: true,
254
254
  });
255
255
 
@@ -281,11 +281,11 @@ async function createChemistryPhStates(adapter) {
281
281
  en: 'Readable date and time of the previous valid pH value.',
282
282
  de: 'Lesbares Datum und Uhrzeit des vorherigen gültigen pH-Werts.',
283
283
  },
284
- type: 'string',
284
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
285
285
  role: 'value.time',
286
286
  read: true,
287
287
  write: false,
288
- def: '',
288
+ def: 0, // FIX: numeric timestamp default for value.time.
289
289
  persist: true,
290
290
  });
291
291
 
@@ -651,6 +651,220 @@ async function createChemistryPhStates(adapter) {
651
651
  persist: true,
652
652
  });
653
653
 
654
+ // -------------------------------------------------------------
655
+ // History
656
+ // -------------------------------------------------------------
657
+ await createChannel(adapter, 'chemistry.ph.history', {
658
+ en: 'History',
659
+ de: 'Historie',
660
+ });
661
+
662
+ await createState(adapter, 'chemistry.ph.history.samples_json', {
663
+ name: {
664
+ en: 'Samples JSON',
665
+ de: 'Messwerte JSON',
666
+ },
667
+ desc: {
668
+ en: 'Internal JSON list of valid pH samples for up to 30 days.',
669
+ de: 'Interne JSON-Liste gültiger pH-Messpunkte für bis zu 30 Tage.',
670
+ },
671
+ type: 'string',
672
+ role: 'json',
673
+ read: true,
674
+ write: false,
675
+ def: '[]',
676
+ persist: true,
677
+ });
678
+
679
+ await createState(adapter, 'chemistry.ph.history.samples_count', {
680
+ name: {
681
+ en: 'Samples count',
682
+ de: 'Anzahl Messwerte',
683
+ },
684
+ desc: {
685
+ en: 'Number of stored valid pH samples.',
686
+ de: 'Anzahl gespeicherter gültiger pH-Messpunkte.',
687
+ },
688
+ type: 'number',
689
+ role: 'value',
690
+ read: true,
691
+ write: false,
692
+ def: 0,
693
+ persist: true,
694
+ });
695
+
696
+ await createState(adapter, 'chemistry.ph.history.oldest_sample_at', {
697
+ name: {
698
+ en: 'Oldest sample time',
699
+ de: 'Ältester Messwert',
700
+ },
701
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
702
+ role: 'value.time',
703
+ read: true,
704
+ write: false,
705
+ def: 0, // FIX: numeric timestamp default for value.time.
706
+ persist: true,
707
+ });
708
+
709
+ await createState(adapter, 'chemistry.ph.history.newest_sample_at', {
710
+ name: {
711
+ en: 'Newest sample time',
712
+ de: 'Neuester Messwert',
713
+ },
714
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
715
+ role: 'value.time',
716
+ read: true,
717
+ write: false,
718
+ def: 0, // FIX: numeric timestamp default for value.time.
719
+ persist: true,
720
+ });
721
+
722
+ // -------------------------------------------------------------
723
+ // Trend
724
+ // -------------------------------------------------------------
725
+ await createChannel(adapter, 'chemistry.ph.trend', {
726
+ en: 'Trend',
727
+ de: 'Trend',
728
+ });
729
+
730
+ const phTrendStates = [
731
+ ['reference_24h_value', '24h reference value', '24h-Referenzwert'],
732
+ ['reference_7d_value', '7 day reference value', '7-Tage-Referenzwert'],
733
+ ['reference_30d_value', '30 day reference value', '30-Tage-Referenzwert'],
734
+ ['delta_24h', '24h delta', '24h-Differenz'],
735
+ ['delta_7d', '7 day delta', '7-Tage-Differenz'],
736
+ ['delta_30d', '30 day delta', '30-Tage-Differenz'],
737
+ ];
738
+
739
+ for (const [stateId, enName, deName] of phTrendStates) {
740
+ await createState(adapter, `chemistry.ph.trend.${stateId}`, {
741
+ name: {
742
+ en: enName,
743
+ de: deName,
744
+ },
745
+ type: 'number',
746
+ role: 'value',
747
+ read: true,
748
+ write: false,
749
+ def: 0,
750
+ persist: true,
751
+ });
752
+ }
753
+
754
+ const phTrendTimeStates = [
755
+ ['reference_24h_at', '24h reference time', 'Zeitpunkt des 24h-Referenzwerts'],
756
+ ['reference_7d_at', '7 day reference time', 'Zeitpunkt des 7-Tage-Referenzwerts'],
757
+ ['reference_30d_at', '30 day reference time', 'Zeitpunkt des 30-Tage-Referenzwerts'],
758
+ ];
759
+
760
+ for (const [stateId, enName, deName] of phTrendTimeStates) {
761
+ await createState(adapter, `chemistry.ph.trend.${stateId}`, {
762
+ name: {
763
+ en: enName,
764
+ de: deName,
765
+ },
766
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
767
+ role: 'value.time',
768
+ read: true,
769
+ write: false,
770
+ def: 0, // FIX: numeric timestamp default for value.time.
771
+ persist: true,
772
+ });
773
+ }
774
+
775
+ await createState(adapter, 'chemistry.ph.trend.direction', {
776
+ name: {
777
+ en: 'Trend direction',
778
+ de: 'Trendrichtung',
779
+ },
780
+ desc: {
781
+ en: 'Overall trend direction: stable, rising, falling or not enough data.',
782
+ de: 'Gesamte Trendrichtung: stabil, steigend, fallend oder noch nicht genug Daten.',
783
+ },
784
+ type: 'string',
785
+ role: 'text',
786
+ read: true,
787
+ write: false,
788
+ def: 'not_enough_data',
789
+ persist: true,
790
+ });
791
+
792
+ await createState(adapter, 'chemistry.ph.trend.status', {
793
+ name: {
794
+ en: 'Trend status',
795
+ de: 'Trendstatus',
796
+ },
797
+ desc: {
798
+ en: 'Readable status of the pH trend development.',
799
+ de: 'Lesbarer Status der pH-Trendentwicklung.',
800
+ },
801
+ type: 'string',
802
+ role: 'text',
803
+ read: true,
804
+ write: false,
805
+ def: 'not_enough_data',
806
+ persist: true,
807
+ });
808
+
809
+ // -------------------------------------------------------------
810
+ // Outputs
811
+ // -------------------------------------------------------------
812
+ await createChannel(adapter, 'chemistry.ph.outputs', {
813
+ en: 'Outputs',
814
+ de: 'Ausgaben',
815
+ });
816
+
817
+ await createState(adapter, 'chemistry.ph.outputs.summary_text', {
818
+ name: {
819
+ en: 'Summary text',
820
+ de: 'Zusammenfassung Text',
821
+ },
822
+ desc: {
823
+ en: 'Readable pH summary text.',
824
+ de: 'Lesbare pH-Zusammenfassung.',
825
+ },
826
+ type: 'string',
827
+ role: 'text',
828
+ read: true,
829
+ write: false,
830
+ def: '',
831
+ persist: true,
832
+ });
833
+
834
+ await createState(adapter, 'chemistry.ph.outputs.summary_html', {
835
+ name: {
836
+ en: 'Summary HTML',
837
+ de: 'Zusammenfassung HTML',
838
+ },
839
+ desc: {
840
+ en: 'HTML summary for VIS or widgets.',
841
+ de: 'HTML-Zusammenfassung für VIS oder Widgets.',
842
+ },
843
+ type: 'string',
844
+ role: 'html',
845
+ read: true,
846
+ write: false,
847
+ def: '',
848
+ persist: true,
849
+ });
850
+
851
+ await createState(adapter, 'chemistry.ph.outputs.summary_json', {
852
+ name: {
853
+ en: 'Summary JSON',
854
+ de: 'Zusammenfassung JSON',
855
+ },
856
+ desc: {
857
+ en: 'Structured pH summary as JSON.',
858
+ de: 'Strukturierte pH-Zusammenfassung als JSON.',
859
+ },
860
+ type: 'string',
861
+ role: 'json',
862
+ read: true,
863
+ write: false,
864
+ def: '',
865
+ persist: true,
866
+ });
867
+
654
868
  // -------------------------------------------------------------
655
869
  // Debug
656
870
  // -------------------------------------------------------------
@@ -668,11 +882,11 @@ async function createChemistryPhStates(adapter) {
668
882
  en: 'Readable timestamp of the last pH evaluation update.',
669
883
  de: 'Lesbarer Zeitstempel der letzten pH-Auswertung.',
670
884
  },
671
- type: 'string',
885
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
672
886
  role: 'value.time',
673
887
  read: true,
674
888
  write: false,
675
- def: '',
889
+ def: 0, // FIX: numeric timestamp default for value.time.
676
890
  persist: true,
677
891
  });
678
892
 
@@ -211,11 +211,11 @@ async function createChemistryTdsStates(adapter) {
211
211
  en: 'Readable date and time when the last TDS value was received.',
212
212
  de: 'Lesbares Datum und Uhrzeit, wann der letzte TDS-Wert empfangen wurde.',
213
213
  },
214
- type: 'string',
214
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
215
215
  role: 'value.time',
216
216
  read: true,
217
217
  write: false,
218
- def: '',
218
+ def: 0, // FIX: numeric timestamp default for value.time.
219
219
  persist: true,
220
220
  });
221
221
 
@@ -247,11 +247,11 @@ async function createChemistryTdsStates(adapter) {
247
247
  en: 'Readable date and time of the last valid TDS value.',
248
248
  de: 'Lesbares Datum und Uhrzeit des letzten gültigen TDS-Werts.',
249
249
  },
250
- type: 'string',
250
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
251
251
  role: 'value.time',
252
252
  read: true,
253
253
  write: false,
254
- def: '',
254
+ def: 0, // FIX: numeric timestamp default for value.time.
255
255
  persist: true,
256
256
  });
257
257
 
@@ -283,11 +283,11 @@ async function createChemistryTdsStates(adapter) {
283
283
  en: 'Readable date and time of the previous valid TDS value.',
284
284
  de: 'Lesbares Datum und Uhrzeit des vorherigen gültigen TDS-Werts.',
285
285
  },
286
- type: 'string',
286
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
287
287
  role: 'value.time',
288
288
  read: true,
289
289
  write: false,
290
- def: '',
290
+ def: 0, // FIX: numeric timestamp default for value.time.
291
291
  persist: true,
292
292
  });
293
293
 
@@ -480,11 +480,11 @@ async function createChemistryTdsStates(adapter) {
480
480
  en: 'Readable date and time when the initial reference value was set.',
481
481
  de: 'Lesbares Datum und Uhrzeit, wann der Referenzwert gesetzt wurde.',
482
482
  },
483
- type: 'string',
483
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
484
484
  role: 'value.time',
485
485
  read: true,
486
486
  write: false,
487
- def: '',
487
+ def: 0, // FIX: numeric timestamp default for value.time.
488
488
  persist: true,
489
489
  });
490
490
 
@@ -584,11 +584,11 @@ async function createChemistryTdsStates(adapter) {
584
584
  en: enName,
585
585
  de: deName,
586
586
  },
587
- type: 'string',
587
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
588
588
  role: 'value.time',
589
589
  read: true,
590
590
  write: false,
591
- def: '',
591
+ def: 0, // FIX: numeric timestamp default for value.time.
592
592
  persist: true,
593
593
  });
594
594
  }
@@ -767,11 +767,11 @@ async function createChemistryTdsStates(adapter) {
767
767
  en: 'Oldest sample time',
768
768
  de: 'Ältester Messwert',
769
769
  },
770
- type: 'string',
770
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
771
771
  role: 'value.time',
772
772
  read: true,
773
773
  write: false,
774
- def: '',
774
+ def: 0, // FIX: numeric timestamp default for value.time.
775
775
  persist: true,
776
776
  });
777
777
 
@@ -780,11 +780,11 @@ async function createChemistryTdsStates(adapter) {
780
780
  en: 'Newest sample time',
781
781
  de: 'Neuester Messwert',
782
782
  },
783
- type: 'string',
783
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
784
784
  role: 'value.time',
785
785
  read: true,
786
786
  write: false,
787
- def: '',
787
+ def: 0, // FIX: numeric timestamp default for value.time.
788
788
  persist: true,
789
789
  });
790
790
 
@@ -860,11 +860,11 @@ async function createChemistryTdsStates(adapter) {
860
860
  en: 'Last update',
861
861
  de: 'Letzte Aktualisierung',
862
862
  },
863
- type: 'string',
863
+ type: 'number', // FIX: ioBroker value.time states must store Unix timestamps in milliseconds.
864
864
  role: 'value.time',
865
865
  read: true,
866
866
  write: false,
867
- def: '',
867
+ def: 0, // FIX: numeric timestamp default for value.time.
868
868
  persist: true,
869
869
  });
870
870
 
package/main.js CHANGED
@@ -30,6 +30,7 @@ const aiForecastHelper = require('./lib/helpers/aiForecastHelper');
30
30
  const aiChemistryHelpHelper = require('./lib/helpers/aiChemistryHelpHelper');
31
31
  const chemistryPhHelper = require('./lib/helpers/chemistryPhHelper');
32
32
  const chemistryTdsHelper = require('./lib/helpers/chemistryTdsHelper');
33
+ const chemistryOrpHelper = require('./lib/helpers/chemistryOrpHelper');
33
34
  const controlHelper = require('./lib/helpers/controlHelper');
34
35
  const controlHelper2 = require('./lib/helpers/controlHelper2');
35
36
  const debugLogHelper = require('./lib/helpers/debugLogHelper');
@@ -63,6 +64,7 @@ const { createAiStates } = require('./lib/stateDefinitions/aiStates'); // NEU: K
63
64
  const { createAiChemistryHelpStates } = require('./lib/stateDefinitions/aiChemistryHelpStates'); // NEU: KI-Chemie-Hilfe
64
65
  const { createChemistryPhStates } = require('./lib/stateDefinitions/chemistryPhStates');
65
66
  const { createChemistryTdsStates } = require('./lib/stateDefinitions/chemistryTdsStates');
67
+ const { createChemistryOrpStates } = require('./lib/stateDefinitions/chemistryOrpStates');
66
68
  const { createHeatStates } = require('./lib/stateDefinitions/heatStates');
67
69
  const { createActuatorsStates } = require('./lib/stateDefinitions/actuatorsStates');
68
70
  const { createSolarInsightsStates } = require('./lib/stateDefinitions/solarInsightsStates');
@@ -172,6 +174,9 @@ class Poolcontrol extends utils.Adapter {
172
174
  // --- Chemistry / TDS evaluation ---
173
175
  await createChemistryTdsStates(this);
174
176
 
177
+ // --- Chemistry / ORP evaluation ---
178
+ await createChemistryOrpStates(this);
179
+
175
180
  // --- Zusatz-Aktoren (Beleuchtung & Zusatzpumpen) ---
176
181
  await createActuatorsStates(this);
177
182
 
@@ -202,6 +207,7 @@ class Poolcontrol extends utils.Adapter {
202
207
  aiChemistryHelpHelper.init(this);
203
208
  chemistryPhHelper.init(this);
204
209
  chemistryTdsHelper.init(this);
210
+ chemistryOrpHelper.init(this);
205
211
  frostHelper.init(this);
206
212
  statusHelper.init(this);
207
213
  infoHelper.init(this);
@@ -300,6 +306,9 @@ class Poolcontrol extends utils.Adapter {
300
306
  if (chemistryTdsHelper.cleanup) {
301
307
  chemistryTdsHelper.cleanup();
302
308
  }
309
+ if (chemistryOrpHelper.cleanup) {
310
+ chemistryOrpHelper.cleanup();
311
+ }
303
312
  if (aiChemistryHelpHelper.cleanup) {
304
313
  aiChemistryHelpHelper.cleanup();
305
314
  }
@@ -438,6 +447,11 @@ class Poolcontrol extends utils.Adapter {
438
447
  } catch (e) {
439
448
  this.log.warn(`[chemistryTdsHelper] Error in handleStateChange: ${e.message}`);
440
449
  }
450
+ try {
451
+ await chemistryOrpHelper.handleStateChange(id, state);
452
+ } catch (e) {
453
+ this.log.warn(`[chemistryOrpHelper] Error in handleStateChange: ${e.message}`);
454
+ }
441
455
  try {
442
456
  statusHelper.handleStateChange(id, state);
443
457
  } catch (e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.poolcontrol",
3
- "version": "1.3.15",
3
+ "version": "1.3.18",
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",