iobroker.sprinklecontrol 0.2.12 → 0.2.13

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.
Files changed (37) hide show
  1. package/README.md +42 -41
  2. package/admin/index_m.html +1 -1
  3. package/admin/index_m.js +1 -2
  4. package/admin/words.js +2 -2
  5. package/docs/de/img/E-Mail.jpg +0 -0
  6. package/docs/de/img/Extraeinstellungen.jpg +0 -0
  7. package/docs/de/img/Pumpeneinstellung.jpg +0 -0
  8. package/docs/de/img/Pushover.jpg +0 -0
  9. package/docs/de/img/Select_ID.jpg +0 -0
  10. package/docs/de/img/Telegram.jpg +0 -0
  11. package/docs/de/img/Ventil-Haupteinstellung.jpg +0 -0
  12. package/docs/de/img/Ventil-Pumpeneinstellung.jpg +0 -0
  13. package/docs/de/img/WhatsApp.jpg +0 -0
  14. package/docs/de/img/Zeiteinstellung.jpg +0 -0
  15. package/docs/de/img/addTime.jpg +0 -0
  16. package/docs/de/img/analog.jpg +0 -0
  17. package/docs/de/img/ber-verdunstung.jpg +0 -0
  18. package/docs/de/img/bew-einstellung.jpg +0 -0
  19. package/docs/de/img/bew-feste-tage.jpg +0 -0
  20. package/docs/de/img/bistabil.jpg +0 -0
  21. package/docs/de/img/bodenf-analog.jpg +0 -0
  22. package/docs/de/img/bodenf-bistabil.jpg +0 -0
  23. package/docs/de/img/calculation.jpg +0 -0
  24. package/docs/de/img/einschaltpunkt-giessen.jpg +0 -0
  25. package/docs/de/img/festeTage.jpg +0 -0
  26. package/docs/de/img/main.jpg +0 -0
  27. package/docs/de/img/main_tab.jpg +0 -0
  28. package/docs/de/img/max-bodenfeuchtigkeit.jpg +0 -0
  29. package/docs/de/img/verdunstDiagra.jpg +0 -0
  30. package/docs/de/img/zus-bew-einstellung.jpg +0 -0
  31. package/docs/de/sprinklecontrol.md +123 -55
  32. package/io-package.json +13 -1
  33. package/lib/tools.js +8 -1
  34. package/lib/valveControl.js +9 -10
  35. package/main.js +115 -51
  36. package/package.json +12 -9
  37. package/.commitmessage +0 -4
package/README.md CHANGED
@@ -8,8 +8,6 @@
8
8
  [![NPM version](http://img.shields.io/npm/v/iobroker.sprinklecontrol.svg)](https://www.npmjs.com/package/iobroker.sprinklecontrol)
9
9
  [![Downloads](https://img.shields.io/npm/dm/iobroker.sprinklecontrol.svg)](https://www.npmjs.com/package/iobroker.sprinklecontrol)
10
10
  [![Known Vulnerabilities](https://snyk.io/test/github/Dirk-Peter-md/ioBroker.sprinklecontrol/badge.svg)](https://snyk.io/test/github/Dirk-Peter-md/ioBroker.sprinklecontrol)
11
- [![Build Status](https://travis-ci.com/Dirk-Peter-md/ioBroker.sprinklecontrol.svg?branch=master)](https://travis-ci.com/Dirk-Peter-md/ioBroker.sprinklecontrol)
12
-
13
11
  [![NPM](https://nodei.co/npm/iobroker.sprinklecontrol.png?downloads=true)](https://nodei.co/npm/iobroker.sprinklecontrol/)
14
12
 
15
13
 
@@ -33,78 +31,81 @@ Wetterabhängige automatische Steuerung der Gartenbewässerung
33
31
  <!--
34
32
  Placeholder for the next version (at the beginning of the line):
35
33
  ### **WORK IN PROGRESS**
36
- -->
37
-
34
+ -->
35
+ ### 0.2.13 (2022-09-06)
36
+ * (Dirk-Peter-md) various bugs fixed
37
+ * (Dirk-Peter-md) Preparing the stable release
38
+
38
39
  ### 0.2.12 (2022-07-17)
39
40
  * (Dirk-Peter-md) fixDay(twoNd,threeRd) => postpone by one day
40
41
  * (Dirk-Peter-md) Bug fixed => autoOn
41
- * (Dirk-Peter-md) Additional post-watering => in case of high evaporation / switchable externally
42
-
42
+ * (Dirk-Peter-md) Additional post-watering => in case of high evaporation / switchable externally
43
+
43
44
  ### 0.2.11 (2022-05-22)
44
45
  * (Dirk-Peter-md) Bug fixed => analog soil moisture sensor with negative characteristic
45
- * (Dirk-Peter-md) Attention => maximum soil moisture in rain now in %
46
-
46
+ * (Dirk-Peter-md) Attention => maximum soil moisture in rain now in %
47
+
47
48
  ### 0.2.10 (2022-05-15)
48
49
  * (Dirk-Peter-md) manual watering limited to a maximum of 100%
49
- * (Dirk-Peter-md) Error whatsapp message fixed
50
-
50
+ * (Dirk-Peter-md) Error whatsapp message fixed
51
+
51
52
  ### 0.2.9 (2022-04-10)
52
- * (Dirk-Peter-md) Bug-Initialisierungsroutine
53
-
53
+ * (Dirk-Peter-md) Bug-Initialisierungsroutine
54
+
54
55
  ### 0.2.8 (2022-03-20)
55
56
  * (Dirk-Peter-md) Adaptation for js controller 4
56
- * (Dirk-Peter-md) switched main.js to async
57
-
57
+ * (Dirk-Peter-md) switched main.js to async
58
+
58
59
  ### 0.2.7 (16.10.2021)
59
- * (Dirk-Peter-md) zusätzliche Testnachrichten gelöscht, Readme aktualisiert
60
-
60
+ * (Dirk-Peter-md) zusätzliche Testnachrichten gelöscht, Readme aktualisiert
61
+
61
62
  ### 0.2.6 (03.10.2021)
62
- * (Dirk-Peter-md) inGreenhouse in Bewässerungsverfahren "Calculation" hinzugefügt
63
-
63
+ * (Dirk-Peter-md) inGreenhouse in Bewässerungsverfahren "Calculation" hinzugefügt
64
+
64
65
  ### 0.2.5 (18.08.2021)
65
66
  * (Dirk-Peter-md) Mehrfachverwendung von Bodenfeuchte-Sensoren
66
- * (Dirk-Peter-md) Objekte mit \"def\": ... überarbeitet
67
-
67
+ * (Dirk-Peter-md) Objekte mit \"def\": ... überarbeitet
68
+
68
69
  ### 0.2.4 (16.08.2021)
69
70
  * (Dirk-Peter-md) Triggerpunktanzeige hinzufügen
70
- * (Dirk-Peter-md) Fehler in der Bodenfeuchteanalyse behoben
71
-
71
+ * (Dirk-Peter-md) Fehler in der Bodenfeuchteanalyse behoben
72
+
72
73
  ### 0.2.3 (15.08.2021)
73
74
  * (Dirk-Peter-md) index_m-Fehler behoben
74
- * (Dirk-Peter-md) timeExtension (FixDay, bistabil) Fehler behoben
75
-
75
+ * (Dirk-Peter-md) timeExtension (FixDay, bistabil) Fehler behoben
76
+
76
77
  ### 0.2.2 (27.07.2021)
77
78
  * (Dirk-Peter-md) Fehler FixDay behoben
78
79
  * (Dirk-Peter-md) Anzeige actualSoilMoisture überarbeitet
79
- * (Dirk-Peter-md) Infomeldungen überarbeitet
80
-
80
+ * (Dirk-Peter-md) Infomeldungen überarbeitet
81
+
81
82
  ### 0.2.1 (13.07.2021)
82
83
  * (Dirk-Peter-md) Start an festen Wochentagen (ohne Sensoren) hinzugefügt
83
- * (Dirk-Peter-md) Fehler behoben
84
-
84
+ * (Dirk-Peter-md) Fehler behoben
85
+
85
86
  ### 0.2.0 (03.07.2021)
86
87
  * (Dirk-Peter-md) Bodenfeuchte-Sensor hinzugefügt
87
- * (Dirk-Peter-md) Schwellwert für Wettervorhersage hinzugefügt
88
-
88
+ * (Dirk-Peter-md) Schwellwert für Wettervorhersage hinzugefügt
89
+
89
90
  ### 0.1.7 (22.05.2021)
90
91
  * (Dirk-Peter-md) Beschreibung in englischer Sprache hinzugefügt
91
- * (Dirk-Peter-md) bereit für stable
92
-
92
+ * (Dirk-Peter-md) bereit für stable
93
+
93
94
  ### 0.1.5 (05.05.2021)
94
- * (Dirk-Peter-md) Zurücksetzen der Regenmenge im 24-Stunden-Modus hinzugefügt
95
-
95
+ * (Dirk-Peter-md) Zurücksetzen der Regenmenge im 24-Stunden-Modus hinzugefügt
96
+
96
97
  ### 0.1.4 (21.04.2021)
97
- * (Dirk-Peter-md) Fehler bei deaktivierter Wettervorhersage behoben
98
-
98
+ * (Dirk-Peter-md) Fehler bei deaktivierter Wettervorhersage behoben
99
+
99
100
  ### 0.1.2 (30.12.2020)
100
- * (Dirk-Peter-md) Beschreibung von SprinkleControl überarbeitet
101
-
101
+ * (Dirk-Peter-md) Beschreibung von SprinkleControl überarbeitet
102
+
102
103
  ### 0.0.12 (10.10.2020)
103
104
  * (Dirk-Peter-md) Bewässerung über eine 2. Pumpe (Zisterne mit Vorrangschaltung) in abhängigkeit vom Füllstand hinzugefügt.
104
105
 
105
106
 
106
- *************************************************************************************************************************************
107
-
107
+ *************************************************************************************************************************************
108
+
108
109
  ## License
109
110
  MIT License
110
111
 
@@ -126,4 +127,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
126
127
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
127
128
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
128
129
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
129
- SOFTWARE.
130
+ SOFTWARE.
@@ -240,7 +240,7 @@
240
240
  <option value="withExternalSignal" class="translate">Start, with external signal</option>
241
241
  </select>
242
242
  <label for="selectAddStartTime" class="translate"></label>
243
- <span class="translate">Start time for additional irrigation</span>
243
+ <span class="translate">Starting conditions</span>
244
244
  </div>
245
245
  <div class="col s12 m4 l2 showGreaterETpCur input-field">
246
246
  <input type="number" class="value" id="triggerAddStartTimeETpCur" min=0 max=10 placeholder="0-10.0" step="0.1" />
package/admin/index_m.js CHANGED
@@ -28,8 +28,7 @@ function load(settings, onChange) {
28
28
  .on('change', () => {
29
29
  showHideSettings();
30
30
  onChange(); // set listener to checkbox and call onChange if the value has changed => setze listener auf checkbox und rufe onChange auf, wenn sich der Wert geändert hat
31
- })
32
- ;
31
+ });
33
32
  } else {
34
33
  $key.val(settings[id])
35
34
  .on('change', () => onChange())
package/admin/words.js CHANGED
@@ -34,7 +34,7 @@ systemDictionary = {
34
34
  "No additional start time": {"en": "No additional start time", "de": "Keine zusätzliche Startzeit", "ru": "Нет дополнительного времени начала", "pt": "Não há tempo de início adicional", "nl": "Geen extra starttijd", "fr": "Pas de démarrage supplémentaire", "it": "Nessun ulteriore tempo di inizio", "es": "No hay tiempo de inicio adicional", "pl": "Czas nieoczekiwanie", "zh-cn": "没有增加开工时间"},
35
35
  "Start at ETpCurrent greater than": {"en": "Start at ETpCurrent greater than", "de": "Start bei ETpCurrent größer als", "ru": "Начните в ETpCurrent больше, чем", "pt": "Comece no ETpCurrent maior do que", "nl": "Begin bij aankomst", "fr": "Commencez par ETpCurrent plus que", "it": "Iniziare a ETpCurrent più grande di", "es": "Empieza en ETpCurrent más grande que", "pl": "Zaczyna się w ETpCurrent większym niż w przypadku ETpCurrenta", "zh-cn": "从ETpCurrent的起,比照高得多"},
36
36
  "Start, with external signal": {"en": "Start, with external signal", "de": "Start, mit externem Signal", "ru": "Начните, с внешним сигналом", "pt": "Iniciar, com sinal externo", "nl": "Begin met externe signaal", "fr": "Démarrer, avec signal externe", "it": "Avviare, con segnale esterno", "es": "Inicio, con señal externa", "pl": "Zaczynając od sygnału zewnętrznego", "zh-cn": "从外部信号开始"},
37
- "Start time for additional irrigation": {"en": "Start time for additional irrigation", "de": "Startzeit für zusätzliche Bewässerung", "ru": "Время начала дополнительного орошения", "pt": "Tempo de início para irrigação adicional", "nl": "Begin tijd voor extra irrigatie", "fr": "Temps de démarrage pour l'irrigation supplémentaire", "it": "Avviare il tempo per l'irrigazione aggiuntiva", "es": "Hora de inicio para riego adicional", "pl": "Początkowy czas nawadniania dodatkowych irygacji", "zh-cn": "B. 增加灌溉时间"},
37
+ "Starting conditions": {"en": "Starting conditions", "de": "Startbedingungen", "ru": "Начало условий", "pt": "Condições de início", "nl": "Beginnende omstandigheden", "fr": "Conditions de démarrage", "it": "Condizioni di partenza", "es": "Condiciones de inicio", "pl": "Warunki startowe", "zh-cn": "启动条件"},
38
38
  "Activation of additional watering under objects:": {"en": "Activation of additional watering under objects:", "de": "Aktivierung einer zusätzlichen Bewässerung unter Objekten:", "ru": "Активация дополнительного полива под объектами:", "pt": "Ativação de rega adicional sob objetos:", "nl": "Activatie van extra water onder objecten:", "fr": "Activation d'arrosage supplémentaire sous les objets:", "it": "Attivazione di ulteriori innaffiature sotto oggetti:", "es": "Activación de riego adicional bajo objetos:", "pl": "Aktywacja dodatkowej wody pod obiektami", "zh-cn": "目标下增加水的行为:"},
39
39
  "Additional irrigation in case of high evaporation": {"en": "Additional irrigation in case of high evaporation", "de": "Zusätzliche Bewässerung bei hoher Verdunstung", "ru": "Дополнительное орошение в случае высокой испарения", "pt": "Irrigação adicional em caso de alta evaporação", "nl": "Additionele irrigatie in geval van hoge verdamping", "fr": "Irrigation supplémentaire en cas d'évaporation élevée", "it": "Irrigazione aggiuntiva in caso di elevata evaporazione", "es": "Riego adicional en caso de alta evaporación", "pl": "Dodatkowe irygacje w przypadku wysokich parowania", "zh-cn": "在高蒸气的情况下,更多的灌溉"},
40
40
  "Additional watering time in min": {"en": "Additional watering time in min", "de": "Zusätzliche Bewässerungszeit in min", "ru": "Дополнительное время полива в мин", "pt": "Tempo adicional de rega em min", "nl": "Additionele watering tijd in", "fr": "Temps d'arrosage supplémentaire en min", "it": "Tempo di irrigazione supplementare in min", "es": "Tiempo de riego adicional en min", "pl": "Dodatkowy czas w wodzie", "zh-cn": "增水时间"},
@@ -44,7 +44,7 @@ systemDictionary = {
44
44
  'different start time on weekends': {'en': 'different start time on weekends', 'de': 'andere Startzeit am Wochenende', 'ru': 'разное время начала по выходным', 'pt': 'horário de início diferente nos finais de semana', 'nl': 'verschillende starttijd in het weekend', 'fr': 'heure de début différente le week-end', 'it': 'orario di inizio diverso nei fine settimana', 'es': 'hora de inicio diferente los fines de semana', 'pl': 'inny czas rozpoczęcia w weekendy', 'zh-cn': '周末的开始时间不同'},
45
45
  'Start time at the weekend': {'en': 'Start time at the weekend', 'de': 'Startzeit am Wochenende', 'ru': 'Время начала на выходных', 'pt': 'Hora de início no fim de semana', 'nl': 'Starttijd in het weekend', 'fr': 'Heure de départ le week-end', 'it': 'Ora di inizio nel fine settimana', 'es': 'Hora de inicio del fin de semana', 'pl': 'Rozpocznij czas w weekend', 'zh-cn': '周末开始时间'},
46
46
  'Settings for the start time on public holidays': {'en': 'Settings for the start time on public holidays', 'de': 'Einstellungen für die Startzeit an Feiertagen', 'ru': 'Настройки времени начала в праздничные дни', 'pt': 'Configurações para o horário de início em feriados', 'nl': 'Instellingen voor de starttijd op feestdagen', 'fr': "Paramètres de l'heure de début les jours fériés", 'it': "Impostazioni per l'ora di inizio nei giorni festivi", 'es': 'Configuración de la hora de inicio en días festivos', 'pl': 'Ustawienia godziny rozpoczęcia w dni świąteczne', 'zh-cn': '公众假期开始时间的设置'},
47
- 'Start time of public holidays as on weekends': {'en': 'Start time of public holidays as on weekends', 'de': 'Startzeit der Feiertage wie am Wochenende', 'ru': 'Время начала государственных праздников, как в выходные дни', 'pt': 'Hora de início dos feriados, como nos finais de semana', 'nl': 'Starttijd van feestdagen zoals in het weekend', 'fr': 'Heure de début des jours fériés comme le week-end', 'it': 'Ora di inizio dei giorni festivi come nei fine settimana', 'es': 'Hora de inicio de los días festivos como los fines de semana.', 'pl': 'Rozpocznij dni ustawowo wolne od pracy jak w weekendy', 'zh-cn': '公众假期的开始时间为周末'},
47
+ 'Start time of public holidays as on weekends': {'en': 'Start time of public holidays as on weekends', 'de': 'Startzeit an Feiertagen wie am Wochenende', 'ru': 'Время начала государственных праздников, как в выходные дни', 'pt': 'Hora de início dos feriados, como nos finais de semana', 'nl': 'Starttijd van feestdagen zoals in het weekend', 'fr': 'Heure de début des jours fériés comme le week-end', 'it': 'Ora di inizio dei giorni festivi come nei fine settimana', 'es': 'Hora de inicio de los días festivos como los fines de semana.', 'pl': 'Rozpocznij dni ustawowo wolne od pracy jak w weekendy', 'zh-cn': '公众假期的开始时间为周末'},
48
48
  'public holidays Instance': {'en': 'public holidays Instance', 'de': 'Feiertage Instanz', 'ru': 'государственные праздники', 'pt': 'feriados públicos Instância', 'nl': 'feestdagen exemplaar', 'fr': 'jours fériés Instance', 'it': 'istanza festiva', 'es': 'días festivos Instancia', 'pl': 'wystąpienie w święta państwowe', 'zh-cn': '公共假期实例'},
49
49
  'Astro settings': {'en': 'Astro settings', 'de': 'Astro-Einstellungen', 'ru': 'Астро настройки', 'pt': 'Configurações do Astro', 'nl': 'Astro-instellingen', 'fr': 'Paramètres Astro', 'it': 'Impostazioni Astro', 'es': 'Configuraciones astro', 'pl': 'Ustawienia Astro', 'zh-cn': '天文设置'},
50
50
  'latitude': {'en': 'latitude', 'de': 'Breite', 'ru': 'широта', 'pt': 'latitude', 'nl': 'breedtegraad', 'fr': 'latitude', 'it': 'latitudine', 'es': 'latitud', 'pl': 'szerokość', 'zh-cn': '纬度'},
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -12,23 +12,22 @@
12
12
  * [3 Konfiguration](#3-konfiguration)
13
13
  * [4 Haupteinstellungen - Startseite](#4-haupteinstellungen)
14
14
  * [4.1 Aufbau der Tabelle](#41-aufbau-der-tabelle)
15
- * [4.2 individuelle Konfiguration eines Bewässerungskreises](#42-individuelle-konfiguration-eines-bewsserungskreises)
15
+ * [4.2 spezifische Konfiguration des jeweiligen Bewässerungskreises](#42-spezifische-konfiguration-des-jeweiligen-bewsserungskreises)
16
16
  * [4.2.1 Haupteinstellungen des Ventils](#421-haupteinstellungen-des-ventils)
17
- * [4.2.1.1 Bewässerungseinstellungen](#4211-bewasserungseinstellungen)
18
- * [4.2.1.2 Einschaltpunkt zum Gießen](#4212-einschaltpunkt)
17
+ * [4.2.1.1 Bewässerungseinstellungen](#4211-bewsserungseinstellungen)
18
+ * [4.2.1.2 Einschaltpunkt zum Gießen](#4212-einschaltpunkt-zum-gieen)
19
19
  * [Berechnung der Verdunstung](#einschaltpunkt-berechnung)
20
20
  * [Bodenfeuchte-Sensor bistabil](#einschaltpunkt-bistabil)
21
- * [Bodenfeuchte-Sensor analog](#einschaltpunkt-analog)
21
+ * [Bodenfeuchte-Sensor analog](#einschaltpunkt-analog)
22
22
  * [Start an festen Wochentagen (ohne Sensoren)](#einschaltpunkt-feste-tage)
23
23
  * [4.2.2 Pumpeneinstellungen des Ventils](#422-pumpeneinstellungen-des-ventils)
24
24
  * [5 Pumpen-Einstellungen](#5-pumpen-einstellungen)
25
25
  * [6 Zeit-Einstellungen](#6-zeit-einstellungen)
26
26
  * [7 Zusätzliche-Einstellungen](#7-zustzliche-einstellungen)
27
- * [7.1 Astro-Einstellungen](#71-astro-einstellungen)
28
- * [7.2 Debug-Einstellungen](#72-debug-einstellungen)
29
- * [7.3 Zusätzliche Benachrichtigungseinstellung](#73-zustzliche-benachrichtigungseinstellungen)
30
- * [7.4 Sensoren zur Berechnung der Verdunstung](#74-sensoren-zur-berechnung-der-verdunstung)
31
- * [7.5 Wettervorhersage](#75-wettervorhersage)
27
+ * [7.1 Astro-Einstellungen](#71-astro-einstellungen)
28
+ * [7.2 Zusätzliche Benachrichtigungseinstellung](#72-zustzliche-benachrichtigungseinstellungen)
29
+ * [7.3 Sensoren zur Berechnung der Verdunstung](#73-sensoren-zur-berechnung-der-verdunstung)
30
+ * [7.4 Wettervorhersage](#74-wettervorhersage)
32
31
  * [8 Benachrichtigungen](#8-benachrichtigungen)
33
32
  * [8.1 Telegram](#81-telegram)
34
33
  * [8.2 Pushover](#82-pushover)
@@ -41,7 +40,6 @@
41
40
  * [9.4 sprinkle](#94-sprinkle)
42
41
  * [10 Was ist für die Zukunft geplant](#10-was-ist-fr-die-zukunft-geplant)
43
42
 
44
-
45
43
  ---
46
44
 
47
45
 
@@ -147,8 +145,8 @@ Nach Abschluss der ID-Auswahl ist der Adapter bereits betriebsbereit, aber noch
147
145
  ---
148
146
 
149
147
 
150
- <a id="42-individuelle-konfiguration-eines-bewsserungskreises"></a>
151
- ## 4.2. individuelle Konfiguration eines Bewässerungskreises
148
+ <a id="42-spezifische-konfiguration-des-jeweiligen-bewsserungskreises"></a>
149
+ ## 4.2. spezifische Konfiguration des jeweiligen Bewässerungskreises
152
150
 
153
151
  Diese Konfigurationsebene besteht aus zwei Reitern: [**Haupteinstellungen**](#421-haupteinstellungen-des-ventils) und [**Pumpeneinstellungen**](#422-pumpeneinstellungen-des-ventils)
154
152
 
@@ -163,9 +161,11 @@ Diese Konfigurationsebene besteht aus zwei Reitern: [**Haupteinstellungen**](#42
163
161
  ---
164
162
 
165
163
 
166
- <a id="4211-bewasserungseinstellungen"></a>
164
+ <a id="4211-bewsserungseinstellungen"></a>
167
165
  #### 4.2.1.1 Bewässerungseinstellungen
168
166
 
167
+ ![bew-einstellung.jpg](img/bew-einstellung.jpg)
168
+
169
169
  * **Bewässerungszeit in min** – Einstellung der Zeit zum Bewässern in Minuten
170
170
  > **Information** → Unter "Berechnung der Verdunstung“ und "Bodenfeuchte-Sensor analog“ wird die Bewässerungszeit verlängert je weiter der Trigger "niedrigster Prozentsatz der Bodenfeuchte“ unterschritten wurde.
171
171
  > Bei **Start an festen Wochentagen (ohne Sensoren)** und **Bodenfeuchte-Sensor bistabil** erfolgt die Verlängerung proportional der extraterrestrische Strahlung ihrer Region.
@@ -178,48 +178,95 @@ Diese Konfigurationsebene besteht aus zwei Reitern: [**Haupteinstellungen**](#42
178
178
  ---
179
179
 
180
180
 
181
- <a id="4212-einschaltpunkt"></a>
181
+ <a id="4212-einschaltpunkt-zum-gieen"></a>
182
182
  #### 4.2.1.2 Einschaltpunkt zum Gießen
183
183
 
184
+ ![einschaltpunkt-giessen.jpg](img/einschaltpunkt-giessen.jpg)
185
+
184
186
  * Über **Methode zur Kontrolle der Bodenfeuchtigkeit** werden die verschiedenen Sensoren, zur Steuerung der Bewässerung und deren verhalten, festgelegt.
185
- > **Information** → Über [**„Zusätzliche Einstellungen" → „Wettervorhersage"**](#75-wettervorhersage) kann der Startvorgang verschoben werden, wenn es Regen soll.
187
+ > **Information** → Über [**„Zusätzliche Einstellungen" → „Wettervorhersage"**](#74-wettervorhersage) kann der Startvorgang verschoben werden, wenn es Regen soll.
188
+ * zur Verfügung stehende Methoden:
189
+ * [Berechnung der Verdunstung](#einschaltpunkt-berechnung)
190
+ * [Bodenfeuchte-Sensor bistabil](#einschaltpunkt-bistabil)
191
+ * [Bodenfeuchte-Sensor analog](#einschaltpunkt-analog)
192
+ * [Start an festen Wochentagen (ohne Sensoren)](#einschaltpunkt-feste-tage)
193
+ * Drei Tage Rhythmus
194
+ * Jeden zweiten Tag
195
+ * An festen Wochentagen
186
196
 
187
197
  ---
188
198
 
199
+
189
200
  <a id="einschaltpunkt-berechnung"></a>
190
- + **Berechnung der Verdunstung**
201
+ #### **Berechnung der Verdunstung**
191
202
 
192
- ![verdunstung.jpg](img/verdunstung.jpg)
193
-
203
+ ![Berechnung der Verdunstung](img/ber-verdunstung.jpg)
204
+ + ***Zusätzliche Bewässerung bei hoher Verdunstung***
205
+ + **Zusätzliche Bewässerungszeit in min** Diese Zeile wird unter ZEIT EINSTELLUNGEN => Zusätzliche Startzeit aktiviert und ist für Gebiete mit Sandigen Boden gedacht, wo **eine Wassergabe** pro Tag nicht ausreichen würde.
206
+ > **Tipp** -> maximale Bodenfeuchte nach der Bewässerung in (mm) <= 6; Bodenfeuchte = 100 % nach der Bewässerung = deaktiviert; Einschaltpunkt (Bodenfeuchte) der Bewässerungsventile in % >= 60
207
+
208
+ + ***Einschaltpunkt zum Gießen***
209
+ + **Methode zur Kontrolle der Bodenfeuchtigkeit** Hier wird die Art der Bewässerung ausgewählt, wie unter [4.2.1.2 Einschaltpunkt zum Gießen](#4212-einschaltpunkt-zum-gieen) beschrieben ist.
194
210
  + **Sensor im Gewächshaus** bei true (Auswahl) wird aktuelle Regenmenge und die Regenvorhersage nicht berücksichtigt
195
211
  + **Einschaltpunkt (Bodenfeuchte) der Bewässerungsventile in %** – Auslösetrigger: Wenn dieser Wert unterschritten wird, so beginnt zum Startzeitpunkt die Bewässerung.
196
- + **Bodenfeuchte = 100 % nach der Bewässerung** bei Aktivierung, wird die Bodenfeuchte nach der Bewässerung auf 100 % gesetzt. Ansonsten bleibt sie knapp darunter Aufgrund der Verdunstung während der Bewässerung.
197
-
198
- ***maximale Bodenfeuchtigkeit***
212
+ + **Bodenfeuchte = 100 % nach der Bewässerung** Bei Aktivierung, wird die Bodenfeuchte nach der Bewässerung auf 100 % gesetzt. Dies kann passieren, wenn eine Begrenzung der Bewässerungszeit über die Aktivierung der **maximalen Bewässerungsverlängerung in %** erfolgt.
199
213
 
214
+ + ***maximale Bodenfeuchtigkeit***
200
215
  * **maximale Bodenfeuchte nach der Bewässerung in (mm)** – Max. Wassergehalt im Boden nach der Bewässerung.
201
216
  > **Tipp** –> Rasengitter: 5; Blumenbeet: 10; Rasenfläche: 14
202
- * **maximale Bodenfeuchte nach einem Regen in (mm)** – Max. Wassergehalt im Boden nach einem kräftigen Regen.
203
- > **Tipp** –> Rasengitter: 6; Blumenbeet: 15; Rasenfläche: 19
217
+ * **maximale Bodenfeuchte nach einem Regen in (%)** – Max. Wassergehalt im Boden nach einem kräftigen Regen. Die Prozentzahl bezieht sich auf die max. Bodenfeuchtigkeit nach der Bewässerung
218
+ > **Tipp** –> Je größer der Wert ist, um so länger wird nach einem kräftigen Regen nicht bewässert.
219
+
220
+ + ***Funktionsweise Berechnung der Verdunstung***
221
+
222
+ ![Beispiel einer Calculation](img/calculation.jpg)
223
+ Die aktuelle Verdunstung wird ständig mit dem eintreffen neuer Wetterdaten von der Bodenfeuchte abgezogen (blaue Linie). Wenn nun zum Einschaltpunkt der Bewässerung die aktuelle Bodenfeuchte (actualSoilMoisture) unter dem Einschaltpunkt (im Diagramm 50%) liegt, so wird das Ventil gestartet.
224
+ An der blauen Linie kann man auch die Zeitverlängerung gut erkennen. Wenn wir nun davon ausgehen, das die Bodenfeuchte bei 13,6 % lag, so ergibt sich eine Verlängerung der Bewässerung auf 104 min. Wenn wir nun eine so lange Bewässerung nicht wollen, so können wir unter Bewässerungseinstellungen => maximale Bewässerungsverlängerung in % das ganze begrenzen.
225
+ In unserem Fall auf 100%. Beim Bewässern würden wir also die rote Linie wieder hinauf fahren und mit etwas unter 63,6 % die Bewässerung beenden, da ja während des Bewässerns auch eine Verdunstung stattfindet. Da nach der Bewässerung wir aber wieder mit 100 % Bodenfeuchtigkeit starten sollten, sollte man in diesem Fall **Bodenfeuchte = 100 % nach der Bewässerung** aktivieren.
226
+ Eine Ausnahme bildet die zusätzliche Bewässerung!
227
+
228
+ + ***Zusätzliche Bewässerung bei hoher Verdunstung***
229
+
230
+ ![Beispiel einer Zusätzlichen Bewässerung](img/addTime.jpg)
231
+ Wenn unter [**ZEIT EINSTELLUNGEN => Zusätzliche Startzeit**](#6-zeit-einstellungen) aktiviert wurde, so wird diese Zeile eingeblendet.
232
+ Desweiteren müssen die ausgewählten Startbedingungen (ETpToday > x mm oder externe Freigabe) unter ZEIT EINSTELLUNGEN => Zusätzliche Startzeit erfüllt sein, damit die zusätzliche Startzeit aktive wird.
233
+ Sind diese Bedingungen erfüllt, so startet die zusätzliche Bewässerung zur angegebenen Zeit, wenn actualSoilMoisture in unserem Beispiel des oberen Diagramms unter 40 % ist. Hierbei läuft die Bewässerung bis der Einschaltpunkt (60 %) wieder erreicht wurde.
204
234
 
205
235
  ---
206
236
 
237
+
207
238
  <a id="einschaltpunkt-bistabil"></a>
208
239
  + **Bodenfeuchte-Sensor bistabil**
209
240
 
210
241
  ![bistabil.jpg](img/bistabil.jpg)
211
242
 
243
+ + **Zusätzliche Bewässerungszeit bei hoher Verdunstung**
244
+
245
+ Diese Zeile wird unter ZEIT EINSTELLUNGEN => Zusätzliche Startzeit aktiviert und ist für Gebiete mit Sandigen Boden gedacht, wo **eine Wassergabe** pro Tag nicht ausreichen würde.
246
+ + Aktivierung einer zusätzlichen Bewässerung unter Objekten: sprinklecontrol. ... .control.addStartTimeSwitch Dies kann mittels externen Script erfolgen.
247
+ + **Zusätzliche Bewässerungszeit in min** Zeit der zusätzlichen Bewässerung
248
+ > Achtung: Wenn diese Zeit zu lang ist, wird dieses Ventil am nächsten Tag nicht starten, da der Boden noch zu feucht ist. (keine Verdunstung in der Nacht)
249
+
212
250
  + **Einschaltpunkt zum Gießen (Bodenfeuchte-Sensor → bistabil true(Bewässerung ein), false(Bewässerung aus))**
213
251
 
214
- + **Bodenfeuchte-Sensor** Auswahl des Sensors über das PLUS-Zeichen
215
- + **Sensor im Gewächshaus** bei true (Auswahl) wird die Regenvorhersage nicht berücksichtigt
252
+ + **Bodenfeuchte-Sensor** Auswahl des Sensors über das PLUS-Zeichen
253
+ + **Sensor im Gewächshaus** bei true (Auswahl) wird die Regenvorhersage nicht berücksichtigt
216
254
 
217
255
  ---
218
256
 
257
+
219
258
  <a id="einschaltpunkt-analog"></a>
220
259
  + **Bodenfeuchte-Sensor analog**
221
260
 
222
261
  ![analog.jpg](img/analog.jpg)
262
+
263
+ + **Zusätzliche Bewässerung bei hoher Verdunstung**
264
+
265
+ Diese Zeile wird unter ZEIT EINSTELLUNGEN => Zusätzliche Startzeit aktiviert und ist für Gebiete mit Sandigen Boden gedacht, wo **eine Wassergabe** pro Tag nicht ausreichen würde.
266
+ + Aktivierung einer zusätzlichen Bewässerung unter Objekten: sprinklecontrol. ... .control.addStartTimeSwitch Dies kann mittels externen Script erfolgen.
267
+ + **Zusätzliche Bewässerungszeit in min** => Bewässerungszeit der zusätzlichen Bewässerung in Minuten
268
+ + **Einschaltpunkt (Bodenfeuchte) der zusätzlichen Bewässerungszeit** → Einschaltpunkt der Bewässerung in Prozent des analogen Bodenfeuchtesensors
269
+ > Achtung: Wenn die Bewässerungszeit zu lang ist, wird dieses Ventil am nächsten Tag nicht starten, da der Boden noch zu feucht ist. (keine Verdunstung in der Nacht)
223
270
 
224
271
  **Einschaltpunkt zum Gießen (Berechnung der Verdunstung → analog interne Umrechnung in 0 - 100 %)**
225
272
  + **Methode zur Kontrolle der Bodenfeuchtigkeit** → Bodenfeuchte-Sensor analog
@@ -239,10 +286,13 @@ Diese Konfigurationsebene besteht aus zwei Reitern: [**Haupteinstellungen**](#42
239
286
 
240
287
  ![festeTage.jpg](img/festeTage.jpg)
241
288
  **Auswahl der Bewässerungstage in der Woche**
289
+ + **Sensor im Gewächshaus** → Bei Aktivierung wird durch eine Regenvorhersage die Bewässerung nicht um einen Tag verschoben.
242
290
  + **Drei Tage Rhythmus** → Der 1. Tag der Bewässerung ist der Folgetag, nach dem Speichern der Konfiguration, und dann jeden 3. Tag in Folge.
243
291
  + **Jeden zweiten Tag** → Der 1. Tag der Bewässerung ist der Folgetag, nach dem Speichern der Konfiguration, und dann jeden 2. Tag in Folge.
244
- + **An festen Tagen starten** → Die Bewässerungstage werden individuell nach Wochentagen bestimmt.
245
- > **Info** → Die Bewässerungsdauer wird verlängert siehe [Bewässerungseinstellungen](#4211-bewasserungseinstellungen)
292
+ + **An festen Wochentagen** → Die Bewässerungstage werden individuell nach Wochentagen bestimmt.
293
+ > **Info** → Die Bewässerungsdauer wird verlängert siehe [Bewässerungseinstellungen](#4211-bewsserungseinstellungen)
294
+ >
295
+ > **Tipp** → Bei der Auswahl **Drei Tage Rhythmus** und **Jeden zweiten Tag** kann unter Objekte sprinkle.*.postponeByOneDay die Bewässerung um einen Tag weitergeschaltet werden.
246
296
 
247
297
  ---
248
298
 
@@ -268,7 +318,8 @@ Diese Konfigurationsebene besteht aus zwei Reitern: [**Haupteinstellungen**](#42
268
318
 
269
319
  <a id="5-pumpen-einstellungen"></a>
270
320
  # 5. Pumpen-Einstellungen
271
- Hier werden die Einstellung der Hauptpumpe (Grundwasser), einer zweiten Pumpe (Zisterne) und der Spannungsversorgung der Regelkreise vorgenommen.
321
+ Hier werden die Einstellung der Hauptpumpe (z.B. Grundwasser), einer zweiten Pumpe (Zisterne) und der Spannungsversorgung der Regelkreise vorgenommen.
322
+ >Wenn das Schalten der Steuerspannung bzw. einer Pumpe bei Ihnen nicht vorgesehen ist, so lassen Sie dieses Feld einfach leer!
272
323
 
273
324
  ![Pumpeneinstellung.jpg](img/Pumpeneinstellung.jpg)
274
325
 
@@ -306,7 +357,7 @@ In diesem Abschnitt wird die Startzeiten von SprinkleControl festgelegt.
306
357
 
307
358
  ![Zeiteinstellung.jpg](img/Zeiteinstellung.jpg)
308
359
 
309
- ## Einstellungen für die Startzeit
360
+ ## Startzeit
310
361
  * **Beginnen Sie mit einer festen Startzeit** – Bei dieser Auswahl startet die Bewässerung zu einer festgelegten, unter "Startzeit in der Woche" festgelegten Zeit.
311
362
  * **Startzeit in der Woche** – Angabe der Startzeit in der Woche.
312
363
  * **Startzeit bei Sonnenaufgang** – Wenn sie diese Option auswählen, so startet die Bewässerung bei Sonnenaufgang. Diese Zeit kann aber noch unter Zeitverschiebung variiert werden.
@@ -316,7 +367,19 @@ In diesem Abschnitt wird die Startzeiten von SprinkleControl festgelegt.
316
367
  ---
317
368
 
318
369
 
319
- ## Einstellungen für die Startzeit am Wochenende
370
+ ## Zusätzliche Startzeit
371
+ * **Startbedingungen**
372
+ * **Keine zusätzliche Startzeit** - zusätzlicher Start ist deaktiviert / ausgeschaltet
373
+ * **Start bei ETpCurrent größer als** - Startfreigabe über interne berechnung der Verdunstung (Sensoren "(z.B. Homematic HmIP-SWO-PL)" zur Berechnung der Verdunstung notwendig)
374
+ * **Start bei ETpCurrent größer als** - Eingabe der Verdunstung die zur Startzeit von *evaporation.ETpToday* erreicht sein muss.
375
+ * **Start, mit externem Signal** - Aktivierung einer zusätzlichen Bewässerung unter Objekten:
376
+ sprinklecontrol. ... .control.addStartTimeSwitch
377
+ >Tipp: Über *control.addStartTimeSwitch* können sie die Zusätzliche Startzeit über ein kleines Skript nach Ihren Wünschen steuern. z.B. beim überschreiten einer bestimmten Temperatur
378
+
379
+ ---
380
+
381
+
382
+ ## Wochenendstart
320
383
  * **andere Startzeit am Wochenende** – Soll die Bewässerung am Wochenende zu einer anderen Zeit starten (um z. B. den Nachbarn nicht zu verärgern), so kann man es hier aktivieren.
321
384
  * **Startzeit am Wochenende** – Startzeit für das Wochenende.
322
385
 
@@ -353,17 +416,8 @@ In den Extra-Einstellungen werden verschiedene Einstellungen eingegeben, die bei
353
416
  ---
354
417
 
355
418
 
356
- <a id="72-debug-einstellungen"></a>
357
- ## 7.2 Debug-Einstellungen
358
-
359
- * **debuggen**
360
- Durch Aktivierung werden im Log zusätzliche Informationen angezeigt, wodurch Fehler schneller ermittelt werden können.
361
-
362
- ---
363
-
364
-
365
- <a id="73-zustzliche-benachrichtigungseinstellungen"></a>
366
- ## 7.3 Zusätzliche Benachrichtigungseinstellungen
419
+ <a id="72-zustzliche-benachrichtigungseinstellungen"></a>
420
+ ## 7.2 Zusätzliche Benachrichtigungseinstellungen
367
421
 
368
422
  * **Benachrichtigungen aktivieren / deaktivieren**
369
423
  Einschalten des Reiters Benachrichtigungen. Hier werden dann die Einstellungen zur Kommunikation vorgenommen.
@@ -371,8 +425,8 @@ In den Extra-Einstellungen werden verschiedene Einstellungen eingegeben, die bei
371
425
  ---
372
426
 
373
427
 
374
- <a id="74-sensoren-zur-berechnung-der-verdunstung"></a>
375
- ## 7.4. Sensoren zur Berechnung der Verdunstung
428
+ <a id="73-sensoren-zur-berechnung-der-verdunstung"></a>
429
+ ## 7.3. Sensoren zur Berechnung der Verdunstung
376
430
  > **Achtung** → Das Program ist auf die Sensoren der Homematic HmIP-SWO-PL zur Berechnung der Verdunstung abgestimmt!
377
431
  > > **Andere mir bekannte verwendete Wetterstationen** → Eurochron Funk-Wetterstation EFWS 2900 mit Sainlogic Adapter.
378
432
 
@@ -380,8 +434,8 @@ In den Extra-Einstellungen werden verschiedene Einstellungen eingegeben, die bei
380
434
 
381
435
  Über die Sensoren wird die max. mögliche Verdunstung der pot. Evapotranspiration nach Penman ETp berechnet und zur Steuerung der Bewässerungsanlage genutzt.
382
436
  Dies geschieht jedes Mal, wenn die Temperatur sich ändert.
383
- > **Achtung** → Zur Berechnung werden der Verdunstung Werden die Sensoren der Temperatur, der Feuchtigkeit, der Windgeschwindigkeit und der Helligkeit herangezogen.
384
- Diese müssen unbedingt für die Steuerung der Bewässerung über die „Berechnung der Verdunstung" verfügbar sein.
437
+ > **Achtung** → Zur Berechnung der Verdunstung werden die Sensoren der Temperatur, der Feuchtigkeit, der Windgeschwindigkeit und der Helligkeit herangezogen.
438
+ Diese müssen unbedingt für die Steuerung der Bewässerung über die Option „Berechnung der Verdunstung" verfügbar sein.
385
439
 
386
440
  * **Temperatursensor** – Durch anklicken des (+) Symbols öffnet sich das Select-ID State Fenster. Hier können sie die ID des Luftsensors in °C auswählen.
387
441
  * **Feuchtigkeitssensor** – Durch anklicken des (+) Symbols öffnet sich das Select-ID State Fenster. Hier können sie die ID des Feuchtigkeitssensors in % auswählen.
@@ -392,13 +446,22 @@ Diese müssen unbedingt für die Steuerung der Bewässerung über die „Berechn
392
446
  ---
393
447
 
394
448
 
395
- <a id="75-wettervorhersage"></a>
396
- ## 7.5 Wettervorhersage
449
+ <a id="74-wettervorhersage"></a>
450
+ ## 7.4 Wettervorhersage
397
451
 
398
452
  Beim Aktivieren des Feldes "Wettervorhersage verwenden", erscheint ein Auswahlfeld. In diesem muss die Instanz vom Adapter "Das Wetter" ausgewählt werden.
399
- Im Adapter "Das Wetter“ muss der "Pfad 2: XML-Datei mit 5-Tage-Wettervorhersage und detaillierten Informationen für alle 3 Stunden" ausgefüllt sein,
400
- damit SprinkleControl auf das Objekt **„daswetter.0.NextDaysDetailed.Location_1.Day_1.rain_value"** zugreifen kann. Dieser Wert wird dann bei jedem Start im Automatikmodus zur Entscheidung einer Beregnung verwendet.
401
- * **Niederschlags-Schwellwert in mm** → Erst wenn dieser Wert von der Regenvorhersage überschritten wird, so wird diese berücksichtigt.
453
+
454
+ * **Wettervorhersage verwenden**
455
+ * **Wettervorhersage-Dienst**
456
+ * **eigener Datenpunkt** → Steuerung mittels externen Signals (Script,Adapter)
457
+ * **Regenvorhersage - Pfad** → Über das + Zeichen können sie den Pfad zur Niederschlagsvorhersage eingeben.
458
+ * **Niederschlags-Schwellwert in mm** → Erst wenn dieser Wert von der Regenvorhersage überschritten wird, so wird dieser beim Start der Bewässerung berücksichtigt.
459
+ * **daswetter** → zugriff auf den Adapter "daswetter"
460
+ * **Wählen Sie die Wettervorhersageinstanz aus** → daswetter.0
461
+ * **Niederschlags-Schwellwert in mm** → Erst wenn dieser Wert von der Regenvorhersage überschritten wird, so wird dieser beim Start der Bewässerung berücksichtigt.
462
+ >info: Im Adapter "Das Wetter“ muss der "Pfad 2: XML-Datei mit 5-Tage-Wettervorhersage und detaillierten Informationen für alle 3 Stunden" ausgefüllt sein,
463
+ damit SprinkleControl auf das Objekt **„daswetter.0.NextDaysDetailed.Location_1.Day_1.rain_value"** zugreifen kann. Dieser Wert wird dann bei jedem Start im Automatikmodus zur Entscheidung einer Beregnung verwendet.
464
+
402
465
 
403
466
  ---
404
467
 
@@ -476,7 +539,7 @@ damit SprinkleControl auf das Objekt **„daswetter.0.NextDaysDetailed.Location_
476
539
  * **Benachrichtigungsstil** Umfang des Benachrichtigungstextes
477
540
  + kurze Benachrichtigung → nur Startvorgänge
478
541
  + Lange Benachrichtigung → umfangreiche Benachrichtigungen
479
- * **Warten auf den Versand (Sekunden)** warten bis zum Versand
542
+ * **Warten auf den Versand (Sekunden)** warten bis zum Versand
480
543
  * **Benachrichtigung nur bei Fehlern** – noch nicht in Benutzung
481
544
 
482
545
  ---
@@ -513,6 +576,7 @@ damit SprinkleControl auf das Objekt **„daswetter.0.NextDaysDetailed.Location_
513
576
  <a id="91-control"></a>
514
577
  ## 9.1 control
515
578
  * **Holiday** - Wenn Holiday auf true gesetzt wird, so wird die Bewässerung wie am Wochenende gestartet. Falls die Wochenendeinstellung aktiviert wurde. Die Verbindung mit einem Kalender wäre hier auch möglich.
579
+ * **addStartTimeSwitch** - Wird nur angezeigt, wenn unter Konfiguration, zusätzliche Startzeit, ein start mit externen Signal ausgewählt wurde.
516
580
  * **autoOnOff** – Bei Einstellung "off“ ist der Automatikbetrieb der Bewässerungsanlage deaktiviert.
517
581
  * **parallelOfMax** – z. B. (3 : 4) Drei Bewässerungskreise sind von vier möglichen aktive. (Dies ist nur eine Anzeige!)
518
582
  * **restFlow** – Anzeige der noch möglichen Restfördermenge der Pumpe. (Dies ist nur eine Anzeige!)
@@ -534,8 +598,8 @@ Ich habe mich zur Berechnung der Verdunstung nach der Formel für die Berechnung
534
598
  ## 9.3 info
535
599
  * **cisternState** – Anzeige vom Status der Zisterne und deren Zustände, wenn sie vorhanden ist.
536
600
  * **nextAutoStart** – Anzeige des nächsten Starts der Bewässerungsanlage.
537
- * **rainToday** – aktueller Niederschlag des heutigen Tages
538
- * **rainTomorrow** – Niederschlagsmenge des morgigen Tages
601
+ * **rainToday** – Aktuelle Vorhersage für den Niederschlag des heutigen Tages, wenn es in der Konfiguration ausgewählt wurde.
602
+ * **rainTomorrow** – Niederschlagsmenge des morgigen Tages laut Vorhersage.
539
603
 
540
604
  ---
541
605
 
@@ -556,8 +620,9 @@ Ich habe mich zur Berechnung der Verdunstung nach der Formel für die Berechnung
556
620
  * **Bodenfeuchte-Sensor analog** - Zustand des Sensors true/false
557
621
  * **Bodenfeuchte-Sensor bistabil** – aktuelle virtuelle Bodenfeuchte in % (max. 100 % nach der Beregnung, >100 % nach einem kräftigen Regen) (hat mit der tatsächlichen nichts zu tun)
558
622
  * **Start an festen Wochentagen (ohne Sensoren)** - Anzeige des nächsten Starttermins z. B. Mon, Thu, Wed
559
- * **autoOn** - Automatik ein (Hier könnt ihr die automatische Bewässerung dieses Kreises ausschalten, z. B. bei einer Reparatur, wobei manuelles Bewässern jederzeit möglich ist.)
623
+ * **autoOn** - Automatik ein (Hier könnt ihr die automatische Bewässerung dieses Kreises ausschalten, z. B. bei einer Reparatur, wobei manuelles Bewässern jederzeit möglich ist.)
560
624
  * **countdown** – Restzeit des Beregnungskreises
625
+ * **postponeByOneDay** - Wird nur angezeigt, wenn Start mit festen Tagen in 2 bzw 3-Tagesintervallen ausgewählt wurde und dient zum weiterschalten der einzelnen Starttage.
561
626
  * **runningTime** – Laufzeit des Beregnungskreises
562
627
  - wenn hier eine Zahl > 0 eingegeben wird, so startet der Beregnungskreises für die angegebene Zeit in Minuten
563
628
  - bei eingabe einer 0 wird die Bewässerung des Beregnungskreises beendet
@@ -578,7 +643,10 @@ Ich habe mich zur Berechnung der Verdunstung nach der Formel für die Berechnung
578
643
 
579
644
  <a id="10-was-ist-fr-die-zukunft-geplant"></a>
580
645
  # 10 Was ist für die Zukunft geplant
581
- + Das wichtigste haben wir jetzt erst einmal. Mal sehen, was mir noch so einfällt.
646
+ + Async. arbeiten des Adapters
647
+ + Überwachen ob Ventile wirklich geschaltet haben, mit Fehlermeldung über Benachrichtigung
648
+ + Zisterne als Einzelpumpe mit Bewässerungsunterbrechung bei Unterschreitung minimalniveau
649
+ + Ventile nach der Bewässerung x Minuten lang spülen (Bei Zisterne / Grundwasser kombination und eisenhaltigem Wasser)
582
650
  + Die Visualisierung, die ich früher noch plante, werde ich nicht weiter verfolgen.
583
651
 
584
652
  ---
package/io-package.json CHANGED
@@ -16,8 +16,20 @@
16
16
  "authors": [
17
17
  "Dirk Peter <dirk.peter@freenet.de>"
18
18
  ],
19
- "version": "0.2.12",
19
+ "version": "0.2.13",
20
20
  "news": {
21
+ "0.2.13": {
22
+ "en": "various bugs fixed; Preparing the stable release",
23
+ "de": "verschiedene Fehler behoben; Vorbereitung der stabilen Freigabe",
24
+ "ru": "исправлены различные баги; Подготовка стабильного релиза",
25
+ "pt": "vários bugs corrigidos; Preparando a liberação estável",
26
+ "nl": "diverse insecten gerepareerd. De stabiele vrijlating voorbereiden",
27
+ "fr": "divers bugs corrigés; Préparation de la libération stable",
28
+ "it": "vari bug fissi; Preparazione del rilascio stabile",
29
+ "es": "varios errores fijos; Preparación de la liberación estable",
30
+ "pl": "różne trąbki ustalono; Preparowanie stabilnego wydania",
31
+ "zh-cn": "(a) 固定地点; 准备稳定释放"
32
+ },
21
33
  "0.2.12": {
22
34
  "en": "fixDay(twoNd,threeRd) => postpone by one day; Bug fixed => autoOn; Additional post-watering => in case of high evaporation / switchable externally",
23
35
  "de": "fixDay(twoNd,threeRd) => Verschiebung um einen Tag; Bug fix => autoOn; Zusätzliche Nachbewässerung => bei hoher Verdampfung / schaltbar extern",
package/lib/tools.js CHANGED
@@ -53,7 +53,8 @@ function addTime(time1, time2){
53
53
  * - 'dayNr': Tag des Jahres (Tagesnummer)
54
54
  * - 'day': Wochentag
55
55
  * - 'dd.mm. hh:mm': Rückgabe Datum und Zeit
56
- * @returns {string|number}
56
+ * - 'past': true => Heute schon vorbei
57
+ * @returns {string|number|boolean}
57
58
  */
58
59
  function formatTime(adapter, myDate, timeFormat) { // 'kW' 'dd.mm. hh:mm'
59
60
  function zweiStellen (s) {
@@ -91,6 +92,12 @@ function formatTime(adapter, myDate, timeFormat) { // 'kW' 'dd.mm. hh:mm'
91
92
  case 'dd.mm. hh:mm':
92
93
  return tag + '.' + monat + ' ' + stunde + ':' + minute;
93
94
 
95
+ case 'past': // true → Heute schon vorbei
96
+ const cd = new Date();
97
+ const cStunde = zweiStellen(cd.getHours());
98
+ const cMinute = zweiStellen(cd.getMinutes());
99
+ return ((stunde > cStunde) || ((stunde === cStunde) && (minute > cMinute)));
100
+
94
101
  default:
95
102
  adapter.log.info('function formatTime: falsches Format angegeben');
96
103
  break;
@@ -1,7 +1,4 @@
1
1
  'use strict';
2
- /*
3
- info: log aufbau valveControl.js: #2.*
4
- */
5
2
 
6
3
  const myConfig = require('./myConfig.js');
7
4
  const addTime = require('./tools.js').addTime;
@@ -253,7 +250,7 @@ const switchTheValvesOffOn = async (threadList, parallel) => {
253
250
  if (err) {
254
251
  return err;
255
252
  } else {
256
- adapter.log.info(`Set (${myConfig.config[entry.sprinkleID].methodControlSM}) ID: ${entry.sprinkleName}, value: ${entry.enabled}, duration: ${addTime(entry.wateringTime,'')}`);
253
+ adapter.log.info(`Set Valve (${myConfig.config[entry.sprinkleID].methodControlSM}) ID: ${entry.sprinkleName}, value: ${entry.enabled}, duration: ${addTime(entry.wateringTime,'')}`);
257
254
  }
258
255
  });
259
256
  entry.enabledState = entry.enabled;
@@ -335,6 +332,7 @@ function updateList () {
335
332
  }
336
333
  /* Intervall-Beregnung wenn angegeben (onOffTime > 0) */
337
334
  if ((entry.onOffTime > 0) && !(entry.count % entry.onOffTime)) {
335
+ adapter.log.info(`Intervall-Beregnung, onOffTime: ${entry.onOffTime}, count: ${entry.count}, count % onOffTime: ${entry.count % entry.onOffTime}`);
338
336
  entry.enabled = false;
339
337
  entry.myBreak = true;
340
338
  /* Zustand des Ventils im Thread < 0 > off, < 1 > wait, < 2 > on, <<< 3 >>> break, < 4 > Boost(on), < 5 > off(Boost) */
@@ -352,7 +350,7 @@ function updateList () {
352
350
  ack: true
353
351
  });
354
352
  updateList();
355
- },1000 * entry.onOffTime);
353
+ },1000 * (entry.onOffTime < 600 ? 600 : entry.onOffTime)); // 600 sek Pause (10 min)
356
354
  }
357
355
  } else { /* zeit abgelaufen => Ventil ausschalten */
358
356
  /* Zustand des Ventils im Thread <<< 0 >>> off, < 1 > wait, < 2 > on, < 3 > break, < 4 > Boost(on), < 5 > off(Boost) */
@@ -380,7 +378,7 @@ function updateList () {
380
378
  if (myConfig.config[entry.sprinkleID].booster) {
381
379
  if (boostOn) {boostKill(entry.sprinkleID);}
382
380
  boostReady = true;
383
- adapter.log.debug(`ID: ${entry.sprinkleName}UpdateList Sprinkle Off: boostReady = ${boostReady}`);
381
+ adapter.log.debug(`ID: ${entry.sprinkleName} UpdateList Sprinkle Off: boostReady = ${boostReady}`);
384
382
  }
385
383
  /* Zeiten löschen */
386
384
  clearInterval(entry.countdown);
@@ -421,7 +419,7 @@ function updateList () {
421
419
  ack: true
422
420
  });
423
421
  // valveOnOff(entry, false, '#2.6 Set: wait, ID: ');
424
- adapter.log.info(`Set ID: ${entry.sprinkleName} Pump delivery rate too low, wait! curFlow ${curFlow} parallel: ${parallel}`);
422
+ adapter.log.info(`Set Valve ID: ${entry.sprinkleName} Pump delivery rate too low, wait! curFlow ${curFlow} parallel: ${parallel}`);
425
423
  }
426
424
  }
427
425
  }
@@ -763,7 +761,7 @@ const valveControl = {
763
761
  entry.autoOn = res.auto; // auto: = true autostart; = false Handbetrieb
764
762
  adapter.setState('sprinkle.' + sprinkleName + '.runningTime', {
765
763
  val: addTime(res.wateringTime, ''),
766
- ack: false
764
+ ack: true
767
765
  });
768
766
  addDone = true; // Sprinkle found
769
767
  adapter.log.debug(`update ID: ${entry.sprinkleName} new time: ${addTime(res.wateringTime, '')}`);
@@ -809,7 +807,7 @@ const valveControl = {
809
807
  });
810
808
  adapter.setState('sprinkle.' + sprinkleName + '.runningTime', {
811
809
  val: addTime(res.wateringTime, ''),
812
- ack: false
810
+ ack: true
813
811
  });
814
812
  adapter.log.debug(`ID: ${sprinkleName} new order created: ${JSON.stringify(threadList[newThread.id])}`);
815
813
  }
@@ -833,6 +831,7 @@ const valveControl = {
833
831
  counter--) {
834
832
  const entry = threadList[counter];
835
833
  if (entry.enabledState) {
834
+ adapter.log.info(`Set Valve (SprinkleControl: off) ID: ${entry.sprinkleName}, value: false`);
836
835
  adapter.setForeignState(entry.idState, {
837
836
  val: false,
838
837
  ack: true
@@ -868,8 +867,8 @@ const valveControl = {
868
867
  clearTimeout(entry.times.boostTime2);
869
868
  entry.times.boostTime2 = null;
870
869
  }
871
- threadList.pop(); // del last array
872
870
  adapter.log.debug(`order deleted Stop all ID: ${entry.sprinkleName} ( rest orders: ${threadList.length} )`);
871
+ threadList.pop(); // del last array
873
872
  }
874
873
  updateList();
875
874
  }, // End clearEntireList
package/main.js CHANGED
@@ -1,7 +1,5 @@
1
1
  'use strict';
2
- /*
3
- info: log aufbau main.js: #0.*
4
- */
2
+
5
3
  // Load your modules here, e.g.: => // Laden Sie Ihre Module hier, z.B.
6
4
  // const fs = require("fs");
7
5
 
@@ -171,19 +169,30 @@ function startAdapter(options) {
171
169
  adapter.log.debug(`state ${id} changed: ${state.val} (ack = ${state.ack})`);
172
170
 
173
171
  // wenn (Holiday == true) ist, soll das Wochenendprogramm gefahren werden.
174
- if (id === adapter.namespace + '.control.Holiday') {
172
+ if (id === adapter.namespace + '.control.Holiday' && state.ack === false) {
175
173
  holidayStr = state.val;
174
+ adapter.setState(id, {
175
+ val: state.val,
176
+ ack: true
177
+ });
176
178
  startTimeSprinkle();
177
179
  }
178
180
  // wenn (addStartTimeSwitch == true) wird die zusätzliche Bewässerung aktiviert
179
- if (id === `${adapter.namespace}.control.addStartTimeSwitch`
180
- && typeof state.val === 'boolean') {
181
+ if (id === `${adapter.namespace}.control.addStartTimeSwitch` && typeof state.val === 'boolean' && state.ack === false) {
181
182
  addStartTimeSwitch = state.val;
183
+ adapter.setState(id, {
184
+ val: state.val,
185
+ ack: true
186
+ });
182
187
  }
183
188
  // wenn (autoOnOff == false) so werden alle Sprenger nicht mehr automatisch gestartet.
184
- if (id === adapter.namespace + '.control.autoOnOff') {
189
+ if ((id === adapter.namespace + '.control.autoOnOff') && (state.ack === false)) {
185
190
  autoOnOffStr = state.val;
186
191
  adapter.log.info(`startAdapter: control.autoOnOff: ${state.val}`);
192
+ adapter.setState(id, {
193
+ val: state.val,
194
+ ack: true
195
+ });
187
196
  if (!state.val) {
188
197
  valveControl.clearEntireList();
189
198
  }
@@ -202,11 +211,15 @@ function startAdapter(options) {
202
211
  sprinkleID: found.sprinkleID,
203
212
  wateringTime: (state.val <= 0) ? state.val : Math.round(60 * state.val)
204
213
  }]);
214
+ adapter.setState(id, {
215
+ val: state.val,
216
+ ack: true
217
+ });
205
218
  }
206
219
  }
207
220
  }
208
221
  }
209
- // wenn in der config unter methodControlSM !== 'analog' oder 'bistable' eingegeben wurde, dann Bodenfeuchte-Sensor auslesen
222
+ // wenn in der config unter methodControlSM!== 'analog' oder 'bistable' eingegeben wurde, dann Bodenfeuchte-Sensor auslesen
210
223
  if (myConfig.config) {
211
224
  function filterByID(obj){
212
225
  return (((obj.methodControlSM === 'analog') || (obj.methodControlSM === 'bistable')) && (obj.triggerSM === id));
@@ -227,25 +240,37 @@ function startAdapter(options) {
227
240
  }
228
241
  // wenn (...sprinkleName.autoOn == false[off]) so wird der aktuelle Sprenger [sprinkleName]
229
242
  // bei false nicht automatisch gestartet
230
- if (myConfig.config && (typeof state.val === 'boolean')) {
243
+ if (myConfig.config && (typeof state.val === 'boolean') && (state.ack === false)) {
231
244
  const found = myConfig.config.find(d => d.autoOnID === id);
232
245
  if (found && id === myConfig.config[found.sprinkleID].autoOnID) {
233
246
  myConfig.config[found.sprinkleID].autoOn = state.val;
234
- valveControl.addList(
235
- [{
236
- auto: false,
237
- sprinkleID: found.sprinkleID,
238
- wateringTime: 0
239
- }]);
247
+ adapter.setState(id, { // Bestätigung
248
+ val: state.val,
249
+ ack: true
250
+ });
251
+ adapter.log.info(`set ${found.objectName}.autoOn = ${state.val}, id: ${id}`);
252
+ if (state.val === false) {
253
+ valveControl.addList(
254
+ [{
255
+ auto: false,
256
+ sprinkleID: found.sprinkleID,
257
+ wateringTime: 0
258
+ }]
259
+ );
260
+ }
240
261
  }
241
262
  }
242
263
 
243
264
  // postponeByOneDay → um einen Tag verschieben bei fixDay (twoNd & threeRd)
244
265
  let idSplit = id.split('.', 5);
245
- if (idSplit[4] === `postponeByOneDay`) {
266
+ if (idSplit[4] === `postponeByOneDay` && state.ack === false) {
246
267
  const found = myConfig.config.find(d => d.objectName === idSplit[3]);
247
268
  if (found) {
248
269
  myConfig.postponeByOneDay(found.sprinkleID).catch((e) => {adapter.log.warn(`postponeByOneDay: ${e}`)});
270
+ adapter.setState(id, {
271
+ val: false,
272
+ ack: true
273
+ });
249
274
  }
250
275
  }
251
276
 
@@ -377,11 +402,12 @@ function curNextFixDay (sprinkleID, returnOn) {
377
402
  const weekDayArray = myConfig.config[sprinkleID].startFixDay;
378
403
  const objPfad = 'sprinkle.' + myConfig.config[sprinkleID].objectName;
379
404
  const weekday = ['Sun','Mon','Tue','Wed','Thur','Fri','Sat'];
405
+ let found = false;
380
406
  let curDay = formatTime(adapter, '', 'day');
381
407
  for ( let i=0; i<7; i++ ) {
382
- curDay++;
383
408
  if (curDay > 6) {curDay = curDay - 7;}
384
409
  if (weekDayArray[curDay] === true) {
410
+ found = true;
385
411
  if (returnOn) {
386
412
  return weekday[curDay];
387
413
  } else {
@@ -392,7 +418,9 @@ function curNextFixDay (sprinkleID, returnOn) {
392
418
  }
393
419
  break;
394
420
  }
421
+ curDay++;
395
422
  }
423
+ if (returnOn && found === false) {return 'off'}
396
424
  }
397
425
 
398
426
  //
@@ -417,7 +445,9 @@ function checkStates() {
417
445
  * @param {ioBroker.State|null|undefined} state
418
446
  */
419
447
  adapter.getState('control.autoOnOff', (err, state) => {
420
- if (state && (state.val == null) && (state.val === undefined)) {
448
+ if (state && (typeof state.val === "boolean")) {
449
+ autoOnOffStr = state.val;
450
+ } else {
421
451
  autoOnOffStr = true;
422
452
  adapter.setState('control.autoOnOff', {
423
453
  val: autoOnOffStr,
@@ -462,7 +492,7 @@ async function checkActualStates () {
462
492
  * @private
463
493
  */
464
494
  const _holiday = await adapter.getStateAsync('control.Holiday');
465
- if (_holiday && _holiday.val) {
495
+ if (_holiday && _holiday.val && typeof _holiday.val === "boolean") {
466
496
  holidayStr = _holiday.val;
467
497
  }
468
498
 
@@ -472,7 +502,7 @@ async function checkActualStates () {
472
502
  * @private
473
503
  */
474
504
  const _autoOnOff = await adapter.getStateAsync('control.autoOnOff');
475
- if (_autoOnOff && _autoOnOff.val) {
505
+ if (_autoOnOff && _autoOnOff.val && typeof _autoOnOff.val === "boolean") {
476
506
  autoOnOffStr = _autoOnOff.val;
477
507
  }
478
508
 
@@ -560,8 +590,9 @@ async function checkActualStates () {
560
590
  const _autoOn = await adapter.getForeignStateAsync(
561
591
  res.autoOnID
562
592
  ).catch((e) => adapter.log.warn(e));
563
- if (typeof _autoOn.val === 'boolean') {
593
+ if (_autoOn && typeof _autoOn.val === 'boolean') {
564
594
  res.autoOn = _autoOn.val;
595
+ if (_autoOn.val === false) {adapter.log.info(`get ${res.objectName}.autoOn = ${res.autoOn}`)}
565
596
  }
566
597
  }
567
598
  }
@@ -662,10 +693,15 @@ function sunPos() {
662
693
  }
663
694
 
664
695
  function addStartTimeSprinkle() {
696
+ schedule.cancelJob('sprinkleAddStartTime');
665
697
  if (adapter.config.selectAddStartTime === 'greaterETpCurrent' || adapter.config.selectAddStartTime === 'withExternalSignal') {
666
698
  let addStartTimeSplit = adapter.config.addWateringStartTime.split(':');
667
699
  const scheduleAddStartTime = schedule.scheduleJob('sprinkleAddStartTime', addStartTimeSplit[1] + ' ' + addStartTimeSplit[0] + ' * * *', function() {
668
- adapter.log.debug(`greaterETpCurrent: ${(adapter.config.selectAddStartTime === 'greaterETpCurrent')} & ${(adapter.config.triggerAddStartTimeETpCur < evaporation.getETpTodayNum())}, withExternalSignal; ${(adapter.config.selectAddStartTime === 'withExternalSignal')} & ${addStartTimeSwitch}`);
700
+ // if (autoOnOff == false) => keine auto Start
701
+ if (!autoOnOffStr) {
702
+ schedule.cancelJob('sprinkleAddStartTime');
703
+ return;
704
+ }
669
705
  if (((adapter.config.selectAddStartTime === 'greaterETpCurrent') && (adapter.config.triggerAddStartTimeETpCur < evaporation.getETpTodayNum()))
670
706
  || (adapter.config.selectAddStartTime === 'withExternalSignal' && addStartTimeSwitch)) {
671
707
  let messageText = '';
@@ -692,13 +728,10 @@ function addStartTimeSprinkle() {
692
728
  }
693
729
 
694
730
  for(const res of result) {
695
- adapter.log.debug(`${res.objectName}: ${res.autoOn}, ${res.addWateringTime}, ${resRain(res.inGreenhouse)} <= 0, if(${res.autoOn && (res.addWateringTime > 0) && (resRain(res.inGreenhouse) <= 0)})`);
696
731
  if (res.autoOn // Ventil aktiv
697
732
  && (res.addWateringTime > 0) // zusätzliche Bewässerung aktiv time > 0
698
733
  && (resRain(res.inGreenhouse) <= 0)) { // keine Regenvorhersage
699
734
 
700
-
701
-
702
735
  switch (res.methodControlSM) {
703
736
  case 'bistable':
704
737
  if (res.soilMoisture.bool) {
@@ -745,14 +778,21 @@ function addStartTimeSprinkle() {
745
778
  }
746
779
  break;
747
780
  }
748
- valveControl.addList(memAddList);
781
+ } else {
782
+ adapter.log.debug(`${res.objectName}: autoOn (${res.autoOn}) && addWateringTime (${res.addWateringTime} > 0) && resRain (${resRain(res.inGreenhouse)}) <= 0, if(${res.autoOn && (res.addWateringTime > 0) && (resRain(res.inGreenhouse) <= 0)})`);
749
783
  }
750
784
  }
751
- if(!sendMessageText.onlySendError() && messageText.length > 0){
752
- sendMessageText.sendMessage(messageText);
753
- }
785
+ valveControl.addList(memAddList);
754
786
  }
787
+ if(!sendMessageText.onlySendError() && messageText.length > 0){
788
+ sendMessageText.sendMessage(messageText);
789
+ }
790
+ } else {
791
+ adapter.log.debug(`greaterETpCurrent: ${(adapter.config.selectAddStartTime === 'greaterETpCurrent')} & ${(adapter.config.triggerAddStartTimeETpCur < evaporation.getETpTodayNum())}, withExternalSignal; ${(adapter.config.selectAddStartTime === 'withExternalSignal')} & ${addStartTimeSwitch}`);
755
792
  }
793
+ setTimeout(()=>{
794
+ schedule.cancelJob('sprinkleAddStartTime');
795
+ }, 200);
756
796
  });
757
797
  }
758
798
  }
@@ -765,7 +805,7 @@ function startTimeSprinkle() {
765
805
 
766
806
  schedule.cancelJob('sprinkleStartTime');
767
807
 
768
- // if autoOnOff == false => keine auto Start
808
+ // if (autoOnOff == false) => keine auto Start
769
809
  if (!autoOnOffStr) {
770
810
  adapter.log.info(`Sprinkle: autoOnOff == Aus ( ${autoOnOffStr} )`);
771
811
  adapter.setState('info.nextAutoStart', {
@@ -826,7 +866,7 @@ function startTimeSprinkle() {
826
866
  break;
827
867
  }
828
868
  // Start am Wochenende →, wenn andere Zeiten verwendet werden soll
829
- if((adapter.config.publicWeekend) && ((myWeekday) === 6 || (myWeekday) === 0)){
869
+ if((adapter.config.publicWeekend) && ((myWeekday === 6) || (myWeekday === 0))){
830
870
  infoMessage = 'Start am Wochenende ';
831
871
  newStartTime = adapter.config.weekEndLiving;
832
872
  }
@@ -976,8 +1016,16 @@ function startTimeSprinkle() {
976
1016
  } else if (adapter.config.weatherForecast){
977
1017
  messageText += ' ' + '<i>' + 'Start verschoben, da heute ' + weatherForecastTodayNum + 'mm Niederschlag' + '</i> ' + '\n';
978
1018
  adapter.log.info(`${res.objectName}: Start verschoben, da Regenvorhersage für Heute ${weatherForecastTodayNum} mm [ ${resRain(false)} > 0 ]`);
979
- res.startFixDay[today] = false;
980
- res.startFixDay[(+ today + 1 > 6) ? (+ today-6) : (+ today+1)] = true;
1019
+ if ((res.startDay === 'threeRd') || (res.startDay === 'twoNd')) {
1020
+ let startDay = -1;
1021
+ res.startFixDay.forEach((item, index) => {if (item) {startDay = index}});
1022
+ if (startDay !== -1) {
1023
+ res.startFixDay[startDay] = false;
1024
+ res.startFixDay[(+ startDay + 1 > 6) ? (+ startDay-6) : (+ startDay+1)] = true;
1025
+ } else {
1026
+ adapter.log.warn(`${res.objectName}: no start day found`)
1027
+ }
1028
+ }
981
1029
  }
982
1030
  curNextFixDay(res.sprinkleID, false);
983
1031
  break;
@@ -1000,7 +1048,7 @@ function startTimeSprinkle() {
1000
1048
  } else if (adapter.config.weatherForecast) {
1001
1049
  /* Bewässerung unterdrückt da ausreichende Regenvorhersage */
1002
1050
  messageText += ' ' + '<i>' + 'Start verschoben, da heute ' + weatherForecastTodayNum + 'mm Niederschlag' + '</i> ' + '\n';
1003
- adapter.log.info(`${res.objectName}: Start verschoben, da Regenvorhersage für Heute ${weatherForecastTodayNum} mm [ ${res.soilMoisture.val} (${resMoisture}) <= ${res.soilMoisture.triggersIrrigation} ]`);
1051
+ adapter.log.info(`${res.objectName}: Start verschoben, da Regenvorhersage für Heute ${weatherForecastTodayNum} mm [ ${res.soilMoisture.val.toFixed(1)} (${resMoisture.toFixed(1)}) <= ${res.soilMoisture.triggersIrrigation} ]`);
1004
1052
  }
1005
1053
  }
1006
1054
  break;
@@ -1309,7 +1357,7 @@ async function createSprinklers() {
1309
1357
  'def': true
1310
1358
  },
1311
1359
  'native': {},
1312
- }).catch((e) => adapter.log.warn(`set .autoOn ${e}`));
1360
+ }).catch((e) => adapter.log.warn(`setObjectNotExistsAsync ${objectName}.autoOn ${e}`));
1313
1361
  // Create Object for .actualSoilMoisture
1314
1362
  const _actualSoilMoistureFind = await adapter.findForeignObjectAsync(`${adapter.namespace}.${objPfad}.actualSoilMoisture`, `${objMetConSM.common.type}`);
1315
1363
  if (_actualSoilMoistureFind.id !== `${adapter.namespace}.${objPfad}.actualSoilMoisture` || _actualSoilMoistureFind.name !== nameMetConSM) {
@@ -1532,7 +1580,7 @@ async function createSprinklers() {
1532
1580
  * false → Zweitage-modus (twoNd)
1533
1581
  */
1534
1582
  async function setNewDay (threeRd) {
1535
- const today = formatTime(adapter,'', 'day');
1583
+ const today = await formatTime(adapter,'', 'day');
1536
1584
  /**
1537
1585
  *
1538
1586
  * @type {ioBroker.GetStatePromise} _actualSoilMoisture
@@ -1564,7 +1612,6 @@ async function createSprinklers() {
1564
1612
  } else if (myConfig.config[j].startDay === 'twoNd') {
1565
1613
  await setNewDay(false);
1566
1614
  } else if (myConfig.config[j].startDay === 'fixDay') {
1567
- adapter.log.info(`set Day (fixDay): ${myConfig.config[j].objectName}`);
1568
1615
  curNextFixDay(myConfig.config[j].sprinkleID, false);
1569
1616
  }
1570
1617
 
@@ -1636,27 +1683,44 @@ async function createSprinklers() {
1636
1683
  if (fullRes.indexOf(resultID) === -1) {
1637
1684
  try {
1638
1685
  // object deleted
1686
+ /**
1687
+ * del when exist Object Async
1688
+ * @param id - the id of the object
1689
+ * @param type - common.type of the state
1690
+ * @returns {Promise<void>}
1691
+ */
1692
+ const delWhenExistObjectAsync = async (id, type) => {
1693
+ const _find = await adapter.findForeignObjectAsync(`${id}`, `${type}`);
1694
+ if (_find && _find.id === `${id}`) {
1695
+ await adapter.delObjectAsync(`${id}`).catch((e) => adapter.log.warn(e)); // "sprinklecontrol.0.sprinkle.???.postponeByOneDay"
1696
+ }
1697
+ }
1698
+
1639
1699
  Promise.all([
1640
1700
  adapter.delObjectAsync(resID + '.actualSoilMoisture'), // "sprinklecontrol.0.sprinkle.???.actualSoilMoisture"
1641
1701
  adapter.delObjectAsync(resID + '.triggerPoint'), // "sprinklecontrol.0.sprinkle.???.triggerPoint"
1642
1702
  adapter.delObjectAsync(resID + '.sprinklerState'), // "sprinklecontrol.0.sprinkle.???.sprinklerState"
1643
- adapter.delObjectAsync(resID + '.runningTime'), // "sprinklecontrol.0.sprinkle.???.runningTime"
1644
- adapter.delObjectAsync(resID + '.countdown'), // "sprinklecontrol.0.sprinkle.???.countdown"
1703
+ adapter.delObjectAsync(resID + '.runningTime'), // "sprinklecontrol.0.sprinkle.???.runningTime"
1704
+ delWhenExistObjectAsync(`${resID}.postponeByOneDay`, `boolean`), // "sprinklecontrol.0.sprinkle.???.postponeByOneDay" wenn vorhanden löschen
1705
+ adapter.delObjectAsync(resID + '.countdown'), // "sprinklecontrol.0.sprinkle.???.countdown"
1645
1706
  adapter.delObjectAsync(resID + '.autoOn'), // "sprinklecontrol.0.sprinkle.???.autoOn"
1646
- adapter.delObjectAsync(resID + '.history.lastOn'), // "sprinklecontrol.0.sprinkle.???..history.lastOn"
1647
- adapter.delObjectAsync(resID + '.history.lastConsumed'), // "sprinklecontrol.0.sprinkle.???..history.lastConsumed"
1648
- adapter.delObjectAsync(resID + '.history.lastRunningTime'), // "sprinklecontrol.0.sprinkle.???.history.lastRunningTime"
1649
- adapter.delObjectAsync(resID + '.history.curCalWeekConsumed'), // "sprinklecontrol.0.sprinkle.???.history.curCalWeekConsumed"
1650
- adapter.delObjectAsync(resID + '.history.lastCalWeekConsumed'), // "sprinklecontrol.0.sprinkle.???.history.lastCalWeekConsumed"
1651
- adapter.delObjectAsync(resID + '.history.curCalWeekRunningTime'), // "sprinklecontrol.0.sprinkle.???.history.curCalWeekRunningTime"
1652
- adapter.delObjectAsync(resID + '.history.lastCalWeekRunningTime'), // "sprinklecontrol.0.sprinkle.???.history.lastCalWeekRunningTime"
1707
+ adapter.delObjectAsync(resID + '.history.lastOn'), // "sprinklecontrol.0.sprinkle.???.history.lastOn"
1708
+ adapter.delObjectAsync(resID + '.history.lastConsumed'), // "sprinklecontrol.0.sprinkle.???.history.lastConsumed"
1709
+ adapter.delObjectAsync(resID + '.history.lastRunningTime'), // "sprinklecontrol.0.sprinkle.???.history.lastRunningTime"
1710
+ adapter.delObjectAsync(resID + '.history.curCalWeekConsumed'), // "sprinklecontrol.0.sprinkle.???.history.curCalWeekConsumed"
1711
+ adapter.delObjectAsync(resID + '.history.lastCalWeekConsumed'), // "sprinklecontrol.0.sprinkle.???.history.lastCalWeekConsumed"
1712
+ adapter.delObjectAsync(resID + '.history.curCalWeekRunningTime'), // "sprinklecontrol.0.sprinkle.???.history.curCalWeekRunningTime"
1713
+ adapter.delObjectAsync(resID + '.history.lastCalWeekRunningTime') // "sprinklecontrol.0.sprinkle.???.history.lastCalWeekRunningTime"
1714
+ ]
1715
+ ).then(async ()=>{
1653
1716
  // History - Objekt(Ordner.history) löschen
1654
- await adapter.delObjectAsync(resID + '.history'),
1717
+ await adapter.delObjectAsync(resID + '.history');
1718
+ }).then(async ()=>{
1655
1719
  // Objekt(Ordner) löschen
1656
- await adapter.delObjectAsync(resID)
1657
- ]).then((resultID)=>{
1658
- adapter.log.info(`sprinkleControl [${resultID}] was deleted`);
1659
- })
1720
+ await adapter.delObjectAsync(resID);
1721
+ }).then(()=>{
1722
+ adapter.log.info(`sprinkleControl [${resID}] was deleted`);
1723
+ });
1660
1724
  } catch (e) {
1661
1725
  adapter.log.warn(e);
1662
1726
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.sprinklecontrol",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "Control of several sprinklers depending on weather conditions and pump performance.",
5
5
  "author": {
6
6
  "name": "Dirk Peter",
@@ -28,21 +28,21 @@
28
28
  "@alcalzone/release-script": "^3.5.9",
29
29
  "@alcalzone/release-script-plugin-iobroker": "^3.5.9",
30
30
  "@alcalzone/release-script-plugin-license": "^3.5.9",
31
- "@iobroker/testing": "^3.0.2",
32
- "@types/chai": "^4.3.1",
31
+ "@iobroker/testing": "^4.1.0",
32
+ "@types/chai": "^4.3.3",
33
33
  "@types/chai-as-promised": "^7.1.5",
34
34
  "@types/gulp": "^4.0.9",
35
35
  "@types/mocha": "^9.1.1",
36
- "@types/node": "^18.0.0",
36
+ "@types/node": "^18.7.14",
37
37
  "@types/node-schedule": "^2.1.0",
38
38
  "@types/proxyquire": "^1.3.28",
39
- "@types/sinon": "^10.0.12",
39
+ "@types/sinon": "^10.0.13",
40
40
  "@types/sinon-chai": "^3.2.8",
41
41
  "axios": "^0.27.2",
42
- "chai": "^4.3.4",
42
+ "chai": "^4.3.6",
43
43
  "chai-as-promised": "^7.1.1",
44
- "eslint": "^8.17.0",
45
- "gulp": "^4.0.2",
44
+ "eslint": "^8.23.0",
45
+ "gulp": "^3.9.1",
46
46
  "mocha": "^10.0.0",
47
47
  "proxyquire": "^2.1.3",
48
48
  "sinon": "^14.0.0",
@@ -55,7 +55,10 @@
55
55
  "test:package": "mocha test/package --exit",
56
56
  "test:unit": "mocha test/unit --exit",
57
57
  "test:integration": "mocha test/integration --exit",
58
- "release": "release-script"
58
+ "release": "release-script patch --yes",
59
+ "release-test": "release-script patch -- --dry",
60
+ "release-minor": "release-script minor --yes",
61
+ "release-mojor": "release-script major --yes"
59
62
  },
60
63
  "bugs": {
61
64
  "url": "https://github.com/Dirk-Peter-md/ioBroker.sprinklecontrol/issues"
package/.commitmessage DELETED
@@ -1,4 +0,0 @@
1
- chore: release v0.2.8
2
-
3
- * Adaptation for js controller 4
4
- * switched main.js to async