iobroker.sprinklecontrol 0.2.8 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,6 @@
7
7
  ![Number of Installations](http://iobroker.live/badges/sprinklecontrol-stable.svg)
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
- [![Dependency Status](https://img.shields.io/david/Dirk-Peter-md/iobroker.sprinklecontrol.svg)](https://david-dm.org/Dirk-Peter-md/iobroker.sprinklecontrol)
11
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)
12
11
  [![Build Status](https://travis-ci.com/Dirk-Peter-md/ioBroker.sprinklecontrol.svg?branch=master)](https://travis-ci.com/Dirk-Peter-md/ioBroker.sprinklecontrol)
13
12
 
@@ -35,10 +34,20 @@ Wetterabhängige automatische Steuerung der Gartenbewässerung
35
34
  Placeholder for the next version (at the beginning of the line):
36
35
  ### **WORK IN PROGRESS**
37
36
  -->
37
+ ### 0.2.11 (2022-05-22)
38
+ * (Dirk-Peter-md) Bug fixed => analog soil moisture sensor with negative characteristic
39
+ * (Dirk-Peter-md) Attention => maximum soil moisture in rain now in %
40
+
41
+ ### 0.2.10 (2022-05-15)
42
+ * (Dirk-Peter-md) manual watering limited to a maximum of 100%
43
+ * (Dirk-Peter-md) Error whatsapp message fixed
44
+
45
+ ### 0.2.9 (2022-04-10)
46
+ * (Dirk-Peter-md) Bug-Initialisierungsroutine
38
47
 
39
48
  ### 0.2.8 (2022-03-20)
40
- * Adaptation for js controller 4
41
- * switched main.js to async
49
+ * (Dirk-Peter-md) Adaptation for js controller 4
50
+ * (Dirk-Peter-md) switched main.js to async
42
51
 
43
52
  ### 0.2.7 (16.10.2021)
44
53
  * (Dirk-Peter-md) zusätzliche Testnachrichten gelöscht, Readme aktualisiert
@@ -81,7 +81,7 @@
81
81
  <th data-name="wateringAdd" id="events_col_7" data-type="number" style="width: 0" class="translate"></th>
82
82
  <th data-name="wateringInterval" id="events_col_8" data-type="number" style="width: 0" class="translate"></th>
83
83
  <th data-name="maxSoilMoistureIrrigation" id="events_col_9" data-type="number" style="width: 0" class="translate"></th>
84
- <th data-name="maxSoilMoistureRain" id="events_col_10" data-type="number" style="width: 0" class="translate"></th>
84
+ <th data-name="maxSoilMoistureRainPct" id="events_col_10" data-type="number" style="width: 0" class="translate"></th>
85
85
  <th data-name="triggersIrrigation" id="events_col_11" data-type="number" style="width: 0" class="translate"></th>
86
86
  <th data-name="pipeFlow" id="events_col_12" data-type="number" style="width: 0" class="translate"></th>
87
87
  <th data-name="booster" id="events_col_13" data-type="checkbox" style="width: 0" class="translate"></th>
@@ -733,9 +733,9 @@
733
733
  <span class="translate">maximum soil moisture after the irrigation in (mm)</span>
734
734
  </div>
735
735
  <div class="col s12 l4 input-field">
736
- <input type="number" class="form-control" id="maxSoilMoistureRain" min="5.0" max="25.0" placeholder="5.0-25.0" step="0.1" />
737
- <label for="maxSoilMoistureRain" class="translate"></label>
738
- <span class="translate">maximum soil moisture after the rain in (mm)</span>
736
+ <input type="number" class="form-control" id="maxSoilMoistureRainPct" min="100" max="200" placeholder="100-200" step="1" />
737
+ <label for="maxSoilMoistureRainPct" class="translate"></label>
738
+ <span class="translate">maximum soil moisture after the rain in (%)</span>
739
739
  </div>
740
740
  </div>
741
741
  </div>
package/admin/index_m.js CHANGED
@@ -59,7 +59,7 @@ function load(settings, onChange) {
59
59
  $('#events .values-input[data-name="wateringAdd"][data-index="' + id + '"]').val('200').trigger('change');
60
60
  $('#events .values-input[data-name="wateringInterval"][data-index="' + id + '"]').val('0').trigger('change');
61
61
  $('#events .values-input[data-name="maxSoilMoistureIrrigation"][data-index="' + id + '"]').val('8').trigger('change');
62
- $('#events .values-input[data-name="maxSoilMoistureRain"][data-index="' + id + '"]').val('10').trigger('change');
62
+ $('#events .values-input[data-name="maxSoilMoistureRainPct"][data-index="' + id + '"]').val('120').trigger('change');
63
63
  $('#events .values-input[data-name="triggersIrrigation"][data-index="' + id + '"]').val('50').trigger('change');
64
64
  $('#events .values-input[data-name="pipeFlow"][data-index="' + id + '"]').val('700').trigger('change');
65
65
  $('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').val('calculation').trigger('change');
@@ -331,7 +331,7 @@ function tableOnReady() {
331
331
  $('#wateringAdd').val($('#events .values-input[data-name="wateringAdd"][data-index="' + id + '"]').val());
332
332
  $('#wateringInterval').val($('#events .values-input[data-name="wateringInterval"][data-index="' + id + '"]').val());
333
333
  $('#maxSoilMoistureIrrigation').val($('#events .values-input[data-name="maxSoilMoistureIrrigation"][data-index="' + id + '"]').val());
334
- $('#maxSoilMoistureRain').val($('#events .values-input[data-name="maxSoilMoistureRain"][data-index="' + id + '"]').val());
334
+ $('#maxSoilMoistureRainPct').val($('#events .values-input[data-name="maxSoilMoistureRainPct"][data-index="' + id + '"]').val());
335
335
  $('#triggersIrrigation').val($('#events .values-input[data-name="triggersIrrigation"][data-index="' + id + '"]').val());
336
336
  $('#pipeFlow').val($('#events .values-input[data-name="pipeFlow"][data-index="' + id + '"]').val());
337
337
  $('#methodControlSM').val($('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').val());
@@ -362,7 +362,7 @@ function tableOnReady() {
362
362
  let newWateringAdd = $('#wateringAdd').val();
363
363
  let newWateringInterval = $('#wateringInterval').val();
364
364
  let newMaxSoilMoistureIrrigation = $('#maxSoilMoistureIrrigation').val();
365
- let newMaxSoilMoistureRain = $('#maxSoilMoistureRain').val();
365
+ let newMaxSoilMoistureRainPct = $('#maxSoilMoistureRainPct').val();
366
366
  let newTriggersIrrigation = $('#triggersIrrigation').val();
367
367
  let newPipeFlow = $('#pipeFlow').val();
368
368
  let newMethodControlSM = $('#methodControlSM').val();
@@ -387,7 +387,7 @@ function tableOnReady() {
387
387
  $('#events .values-input[data-name="wateringAdd"][data-index="' + id + '"]').val(newWateringAdd).trigger('change');
388
388
  $('#events .values-input[data-name="wateringInterval"][data-index="' + id + '"]').val(newWateringInterval).trigger('change');
389
389
  $('#events .values-input[data-name="maxSoilMoistureIrrigation"][data-index="' + id + '"]').val(newMaxSoilMoistureIrrigation).trigger('change');
390
- $('#events .values-input[data-name="maxSoilMoistureRain"][data-index="' + id + '"]').val(newMaxSoilMoistureRain).trigger('change');
390
+ $('#events .values-input[data-name="maxSoilMoistureRainPct"][data-index="' + id + '"]').val(newMaxSoilMoistureRainPct).trigger('change');
391
391
  $('#events .values-input[data-name="triggersIrrigation"][data-index="' + id + '"]').val(newTriggersIrrigation).trigger('change');
392
392
  $('#events .values-input[data-name="pipeFlow"][data-index="' + id + '"]').val(newPipeFlow).trigger('change');
393
393
  $('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').val(newMethodControlSM).trigger('change');
package/admin/words.js CHANGED
@@ -77,7 +77,7 @@ systemDictionary = {
77
77
  'after irrigation = 100': {'en': 'Soil moisture = 100% after irrigation', 'de': 'Bodenfeuchtigkeit = 100% nach Bewässerung', 'ru': 'Влажность почвы = 100% после полива', 'pt': 'Umidade do solo = 100% após a irrigação', 'nl': 'Bodemvocht = 100% na irrigatie', 'fr': 'Humidité du sol = 100% après irrigation', 'it': "Umidità del suolo = 100% dopo l'irrigazione", 'es': 'Humedad del suelo = 100% después del riego.', 'pl': 'Wilgotność gleby = 100% po nawadnianiu', 'zh-cn': '灌溉后土壤水分= 100%'},
78
78
  'maximum soil moisture': {'en': 'maximum soil moisture', 'de': 'maximale Bodenfeuchtigkeit', 'ru': 'максимальная влажность почвы', 'pt': 'umidade máxima do solo', 'nl': 'maximale bodemvochtigheid', 'fr': 'humidité maximale du sol', 'it': 'umidità massima del suolo', 'es': 'humedad máxima del suelo', 'pl': 'maksymalna wilgotność gleby', 'zh-cn': '最大土壤水分'},
79
79
  'maximum soil moisture after the irrigation in (mm)': {'en': 'maximum soil moisture after the irrigation in (mm)', 'de': 'maximale Bodenfeuchtigkeit nach der Bewässerung in (mm)', 'ru': 'максимальная влажность почвы после полива в (мм)', 'pt': 'umidade máxima do solo após a irrigação em (mm)', 'nl': 'maximale bodemvochtigheid na de beregening in (mm)', 'fr': "humidité maximale du sol après l'irrigation en (mm)", 'it': "umidità massima del suolo dopo l'irrigazione in (mm)", 'es': 'humedad máxima del suelo después del riego en (mm)', 'pl': 'maksymalna wilgotność gleby po nawadnianiu w (mm)', 'zh-cn': '灌溉后的最大土壤湿度(毫米)'},
80
- 'maximum soil moisture after the rain in (mm)': {'en': 'maximum soil moisture after the rain in (mm)', 'de': 'maximale Bodenfeuchtigkeit nach dem Regen in (mm)', 'ru': 'максимальная влажность почвы после дождя в (мм)', 'pt': 'umidade máxima do solo após a chuva em (mm)', 'nl': 'maximale bodemvochtigheid na regen in (mm)', 'fr': 'humidité maximale du sol après la pluie en (mm)', 'it': 'umidità massima del suolo dopo la pioggia in (mm)', 'es': 'humedad máxima del suelo después de la lluvia en (mm)', 'pl': 'maksymalna wilgotność gleby po deszczu w (mm)', 'zh-cn': '雨后的最大土壤水分(mm)'},
80
+ 'maximum soil moisture after the rain in (%)': {'en': 'maximum soil moisture after the rain in (%)', 'de': 'maximale Bodenfeuchtigkeit nach dem Regen in (%)', 'ru': 'максимальная влажность почвы после дождя в (%)', 'pt': 'umidade máxima do solo após a chuva em (%)', 'nl': 'maximale bodemvochtigheid na regen in (%)', 'fr': 'humidité maximale du sol après la pluie en (%)', 'it': 'umidità massima del suolo dopo la pioggia in (%)', 'es': 'humedad máxima del suelo después de la lluvia en (%)', 'pl': 'maksymalna wilgotność gleby po deszczu w (%)', 'zh-cn': '雨后的最大土壤水分(%)'},
81
81
  'Configuration of the analog soil moisture sensor': {'en': 'Configuration of the analog soil moisture sensor', 'de': 'Konfiguration des analogen Bodenfeuchtesensors', 'ru': 'Конфигурация аналогового датчика влажности почвы', 'pt': 'Configuração do sensor analógico de umidade do solo', 'nl': 'Configuratie van de analoge bodemvochtsensor', 'fr': "Configuration du capteur analogique d'humidité du sol", 'it': 'Configurazione del sensore di umidità del suolo analogico', 'es': 'Configuración del sensor de humedad del suelo analógico', 'pl': 'Konfiguracja analogowego czujnika wilgotności gleby', 'zh-cn': '模拟土壤湿度传感器的配置'},
82
82
  'analog soil moisture sensor at 0 percent (sensor in the air)': {'en': 'analog soil moisture sensor at 0 percent (sensor in the air)', 'de': 'analoger Bodenfeuchtesensor bei 0 Prozent (Sensor in der Luft)', 'ru': 'аналоговый датчик влажности почвы на 0 процентов (датчик в воздухе)', 'pt': 'sensor analógico de umidade do solo a 0 por cento (sensor no ar)', 'nl': 'analoge bodemvochtsensor op 0 procent (sensor in de lucht)', 'fr': "capteur analogique d'humidité du sol à 0 pour cent (capteur dans l'air)", 'it': "sensore di umidità del suolo analogico a 0 percento (sensore nell'aria)", 'es': 'sensor de humedad del suelo analógico al 0 por ciento (sensor en el aire)', 'pl': 'analogowy czujnik wilgotności gleby na 0 procent (czujnik w powietrzu)', 'zh-cn': '0% 时的模拟土壤湿度传感器(空气中的传感器)'},
83
83
  'analog soil moisture sensor at 100 percent (sensor in the water)': {'en': 'analog soil moisture sensor at 100 percent (sensor in the water)', 'de': 'analoger Bodenfeuchtesensor bei 100 Prozent (Sensor im Wasser)', 'ru': 'аналоговый датчик влажности почвы на 100 процентов (датчик в воде)', 'pt': 'sensor analógico de umidade do solo a 100 por cento (sensor na água)', 'nl': 'analoge bodemvochtsensor op 100 procent (sensor in het water)', 'fr': "capteur analogique d'humidité du sol à 100 pour cent (capteur dans l'eau)", 'it': "sensore di umidità del suolo analogico al 100% (sensore nell'acqua)", 'es': 'sensor de humedad del suelo analógico al 100 por ciento (sensor en el agua)','pl': 'analogowy czujnik wilgotności gleby na 100 procent (czujnik w wodzie)', 'zh-cn': '100% 模拟土壤湿度传感器(传感器在水中)'},
package/io-package.json CHANGED
@@ -1,8 +1,44 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "sprinklecontrol",
4
- "version": "0.2.8",
4
+ "version": "0.2.11",
5
5
  "news": {
6
+ "0.2.11": {
7
+ "en": "Bug fixed => analogue soil moisture sensor with negative characteristic; Attention => maximum soil moisture in rain now in %",
8
+ "de": "Fehler behoben => analoger Bodenfeuchtesensor mit negativer Kennlinie; Achtung => maximale Bodenfeuchte bei Regen jetzt in %",
9
+ "ru": "Исправлена ошибка => аналоговый датчик влажности почвы с отрицательной характеристикой; Внимание => максимальная влажность почвы в дождь теперь в %",
10
+ "pt": "Bug corrigido => sensor analógico de umidade do solo com característica negativa; Atenção => umidade máxima do solo na chuva agora em %",
11
+ "nl": "Bug opgelost => analoge bodemvochtsensor met negatieve karakteristiek; Let op => maximale bodemvochtigheid bij regen nu in %",
12
+ "fr": "Bug corrigé => capteur d'humidité du sol analogique avec caractéristique négative ; Attention => humidité maximale du sol sous la pluie maintenant en %",
13
+ "it": "Bug risolto => sensore di umidità del suolo analogico con caratteristica negativa; Attenzione => umidità massima del suolo sotto la pioggia ora in %",
14
+ "es": "Error solucionado => sensor de humedad del suelo analógico con característica negativa; Atención => humedad máxima del suelo en lluvia ahora en %",
15
+ "pl": "Poprawiony błąd => analogowy czujnik wilgotności gleby o charakterystyce ujemnej; Uwaga => maksymalna wilgotność gleby w deszczu teraz w %",
16
+ "zh-cn": "错误修复 => 具有负特性的模拟土壤湿度传感器;注意 => 现在雨中的最大土壤水分百分比"
17
+ },
18
+ "0.2.10": {
19
+ "en": "- manual watering limited to a maximum of 100%; - Error whatsapp message fixed",
20
+ "de": "- manuelle Bewässerung begrenzt auf maximal 100 %; - Fehler WhatsApp-Nachricht behoben",
21
+ "ru": "- ручной полив ограничен максимум 100%; - Исправлено сообщение об ошибке WhatsApp",
22
+ "pt": "- rega manual limitada a um máximo de 100%; - Mensagem de erro do whatsapp corrigida",
23
+ "nl": "- handmatige bewatering beperkt tot maximaal 100%; - Fout whatsapp-bericht opgelost",
24
+ "fr": "- arrosage manuel limité à 100% maximum ; - Message d'erreur WhatsApp corrigé",
25
+ "it": "- irrigazione manuale limitata ad un massimo del 100%; - Errore messaggio whatsapp risolto",
26
+ "es": "- riego manual limitado a un máximo del 100%; - Mensaje de error de whatsapp arreglado",
27
+ "pl": "- nawadnianie ręczne ograniczone do maksymalnie 100%; - Naprawiono błąd wiadomości WhatsApp",
28
+ "zh-cn": "- 手动浇水限制为最大 100%; - 错误whatsapp消息已修复"
29
+ },
30
+ "0.2.9": {
31
+ "en": "Bug initialization routine",
32
+ "de": "Bug-Initialisierungsroutine",
33
+ "ru": "Процедура инициализации ошибки",
34
+ "pt": "Rotina de inicialização de bugs",
35
+ "nl": "Bug initialisatie routine",
36
+ "fr": "Routine d'initialisation de bogue",
37
+ "it": "Routine di inizializzazione dei bug",
38
+ "es": "Rutina de inicialización de errores",
39
+ "pl": "Procedura inicjowania błędów",
40
+ "zh-cn": "错误初始化例程"
41
+ },
6
42
  "0.2.8": {
7
43
  "en": "Adaptation for js controller 4; switched main.js to async",
8
44
  "de": "Anpassung für js-Controller 4; main.js auf async umgestellt",
@@ -206,18 +242,6 @@
206
242
  "es": "Riego mediante segunda bomba (cisterna con control prioritario) en función del nivel.",
207
243
  "pl": "Nawadnianie przez drugą pompę (cysterna z priorytetem sterowania) w zależności od poziomu.",
208
244
  "zh-cn": "根据液位,通过第二个泵(带优先控制的水箱)进行灌溉。"
209
- },
210
- "0.0.11": {
211
- "en": "Fehler bei der Verarbeitung der Regenvorhersage vom Adapter \"Das Wetter\"",
212
- "de": "Fehler bei der Lösung der Regenvorhersage vom Adapter \"Das Wetter\"",
213
- "ru": "Fehler bei der Verarbeitung der Regenvorhersage vom Адаптер \"Das Wetter\"",
214
- "pt": "Fehler bei der Verarbeitung der Regenvorhersage vom Adaptador \"Das Wetter\"",
215
- "nl": "Fehler bei der Verarbeitung der Regenvorhersage vom Adapter \"Das Wetter\"",
216
- "fr": "Adaptateur pour Fehler bei der Verarbeitung der Regenvorhersage vom \"Das Wetter\"",
217
- "it": "Fehler bei der Verarbeitung der Regenvorhersage vom Adapter \"Das Wetter\"",
218
- "es": "Adaptador \"Das Wetter\" Fehler bei der Verarbeitung der Regenvorhersage vom",
219
- "pl": "Fehler bei der Verarbeitung der Regenvorhersage vom Adapter „Das Wetter”",
220
- "zh-cn": "Fehler bei der Verarbeitung der Regenvorhersage vom适配器“ Das Wetter”"
221
245
  }
222
246
  },
223
247
  "title": "Sprinkle Control",
@@ -344,7 +368,7 @@
344
368
  "wateringAdd": "200",
345
369
  "wateringInterval": "0",
346
370
  "maxSoilMoistureIrrigation": "8",
347
- "maxSoilMoistureRain": "10",
371
+ "maxSoilMoistureRainPct": "120",
348
372
  "triggersIrrigation": "50",
349
373
  "pipeFlow": "1100",
350
374
  "booster": false,
@@ -362,13 +362,13 @@ const evaporation = {
362
362
  },
363
363
  /**
364
364
  * akt. Regenmengenzähler
365
- * → Bei einer Änderung über 10 mm wird der Wert nur intern gespeichert,
365
+ * → Bei einer Änderung über 20 mm wird der Wert nur intern gespeichert,
366
366
  * es findet aber keine Anwendung statt!
367
367
  * @param {number} value current rain counter → aktueller Regencontainer in mm
368
368
  */
369
369
  setCurAmountOfRain (value) {
370
370
  if ((value > lastRainCounter) // es regnet
371
- && ((value - lastRainCounter) < 10) // && Plausibilitätskontrolle (Regenmenge unter 10 mm)
371
+ && ((value - lastRainCounter) < 20) // && Plausibilitätskontrolle (Regenmenge unter 10 mm)
372
372
  ) {
373
373
  addEvaporation(lastRainCounter - value);
374
374
  }
package/lib/myConfig.js CHANGED
@@ -21,7 +21,7 @@ let adapter;
21
21
  * @param {string} res.analogZPct - analog Zero Percent [Auswahlfeld in der Config des Sprinklers > Bodenfeuchte-Sensor > analog > Wert bei 0 %]
22
22
  * @param {string} res.analogOHPct - analog One Hundert Percent [Auswahlfeld in der Config des Sprinklers > Bodenfeuchte-Sensor > analog > Wert bei 100 %]
23
23
  * @param {string} res.maxSoilMoistureIrrigation - maximale Bodenfeuchte nach der Bewässerung [Auswahlfeld in der Config des Sprinklers]
24
- * @param {string} res.startDay - Auswahl (threeRd = Start im 3 Tages Rhythmus,twoNd = Start im 2 Tages Rhythmus, fixDay = Start an festen Tagen Sun-Sat)
24
+ * @param {string} res.startDay - Auswahl (threeRd = Start im 3-Tages-Rhythmus,twoNd = Start im 2-Tages-Rhythmus, fixDay = Start an festen Tagen Sun-Sat)
25
25
  * @param {boolean} res.sun - Sontag, Sunday (Sun)
26
26
  * @param {boolean} res.mon - Montag, Monday (Mon)
27
27
  * @param {boolean} res.tue - Dienstag, Tuesday (Tue) (Tues)
@@ -111,7 +111,18 @@ function getMetConSM(res) {
111
111
  setBool: null
112
112
  };
113
113
  } else {
114
- adapter.log.warn('No irrigation type is selected in the SprinkleControl configuration! Please adjust.');
114
+ adapter.log.warn('Emergency program! No irrigation type is selected in the SprinkleControl configuration! Please adjust.');
115
+ return {
116
+ setStartDay: 'twoNd',
117
+ setStartFixDay: [false, false, false, false, false, false, false], // Sun, Mon, Tue, Wed, Thur, Fri, Sat
118
+ setMetConSM: 'fixDay',
119
+ setTrigSM: '',
120
+ setAnalogZPct: null,
121
+ setAnalogOHPct: null,
122
+ setPct: null,
123
+ setVal: null,
124
+ setBool: null
125
+ };
115
126
  }
116
127
  }
117
128
 
@@ -140,7 +151,8 @@ const myConfig = {
140
151
  /** Starttage in der Woche
141
152
  * - 0(Sun); 1(Mon); 2(Tue); 3(Wed); 4(Thur); 5(Fri); 6(Sat)
142
153
  * @type {Array.<boolean>}
143
- * startFixDay */ startFixDay: metConSM.setStartFixDay, // Sontag, Sunday (Sun)// Montag, Monday (Mon)// Dienstag, Tuesday (Tue) (Tues)// Mittwoch, Wednesday (Wed)// Donnerstag, Thursday (Thur) (Thurs)// Freitag, Friday (Fri)// Samstag, Saturday (Sat)
154
+ * startFixDay */
155
+ startFixDay: metConSM.setStartFixDay, // Sontag, Sunday (Sun)// Montag, Monday (Mon)// Dienstag, Tuesday (Tue) (Tues)// Mittwoch, Wednesday (Wed)// Donnerstag, Thursday (Thur) (Thurs)// Freitag, Friday (Fri)// Samstag, Saturday (Sat)
144
156
  /** - Auswahl:
145
157
  * - threeRd = Start im 3 Tages Rhythmus,
146
158
  * - twoNd = Start im 2 Tages Rhythmus
@@ -150,30 +162,30 @@ const myConfig = {
150
162
  /** @type {boolean} */ booster: res.booster,
151
163
  /** @type {number} */ endIrrigation: res.endIrrigation,
152
164
  /** @type {boolean} */ autoOn: true,
153
- /** @type {string} */ autoOnID: adapter.namespace + '.sprinkle.' + objectName + '.autoOn', // sprinklecontrol.0.sprinkle.Rasenumrandung.autoOnID
154
- /** @type {string} */ objectName: objectName, // z.B. Rasenumrandung
155
- /** @type {string} */ objectID: adapter.namespace + '.sprinkle.' + objectName + '.runningTime', // sprinklecontrol.0.sprinkle.Rasenumrandung.runningTime
156
- /** @type {string} */ idState: res.name, // "hm-rpc.0.MEQ1234567.3.STATE"
157
- /** @type {any} */ updateStateTimerID: null, // Timer wird gelöscht wenn Rückmeldung erfolgte
158
- /** @type {number} */ sprinkleID: myConfig.config.length, // Array[0...]
159
- /** @type {number} */ wateringTime: parseInt(res.wateringTime), // ...min
160
- /** @type {number} */ wateringAdd: parseInt(res.wateringAdd), // 0 ... 200%
161
- /** @type {number} */ wateringInterval: ((60 * parseInt(res.wateringInterval)) || 0), // 5,10,15min
162
- /** @type {number} */ pipeFlow: parseInt(res.pipeFlow), // Wasserverbrauch des sprinkler-Kreises
163
- /** @type {string} */ methodControlSM: metConSM.setMetConSM, // Art der Kontrolle der Bodenfeuchte ('calculation'; 'bistable'; 'analog'; fixDay)
164
- /** @type {string} */ triggerSM: metConSM.setTrigSM, // Sensor für die Bodenfeuchte
165
- /** @type {boolean} */ inGreenhouse: res.inGreenhouse || false, // keine Wettervorhersage verwenden (Gewächshaus)
166
- /** @type {number} */ analogZPct: metConSM.setAnalogZPct, // analoger Sensor Wert bei 0% (analog zero percent)
167
- /** @type {number} */ analogOHPct: metConSM.setAnalogOHPct, // analoger Sensor Wert bei 100% (analog one hundert percent)
165
+ /** @type {string} */ autoOnID: adapter.namespace + '.sprinkle.' + objectName + '.autoOn', // sprinklecontrol.0.sprinkle.Rasenumrandung.autoOnID
166
+ /** @type {string} */ objectName: objectName, // z.B. Rasenumrandung
167
+ /** @type {string} */ objectID: adapter.namespace + '.sprinkle.' + objectName + '.runningTime', // sprinklecontrol.0.sprinkle.Rasenumrandung.runningTime
168
+ /** @type {string} */ idState: res.name, // "hm-rpc.0.MEQ1234567.3.STATE"
169
+ /** @type {any} */ updateStateTimerID: null, // Timer wird gelöscht wenn Rückmeldung erfolgte
170
+ /** @type {number} */ sprinkleID: myConfig.config.length, // Array[0...]
171
+ /** @type {number} */ wateringTime: parseInt(res.wateringTime), // ...min
172
+ /** @type {number} */ wateringAdd: parseInt(res.wateringAdd), // 0 ... 200%
173
+ /** @type {number} */ wateringInterval: ((60 * parseInt(res.wateringInterval)) || 0), // 5,10,15min
174
+ /** @type {number} */ pipeFlow: parseInt(res.pipeFlow), // Wasserverbrauch des sprinkler-Kreises
175
+ /** @type {string} */ methodControlSM: metConSM.setMetConSM, // Art der Kontrolle der Bodenfeuchte ('calculation'; 'bistable'; 'analog'; fixDay)
176
+ /** @type {string} */ triggerSM: metConSM.setTrigSM, // Sensor für die Bodenfeuchte
177
+ /** @type {boolean} */ inGreenhouse: res.inGreenhouse || false, // keine Wettervorhersage verwenden (Gewächshaus)
178
+ /** @type {number} */ analogZPct: metConSM.setAnalogZPct, // analoger Sensor Wert bei 0% (analog zero percent)
179
+ /** @type {number} */ analogOHPct: metConSM.setAnalogOHPct, // analoger Sensor Wert bei 100% (analog one hundert percent)
168
180
  'soilMoisture': {
169
- /** @type {number} */ val: metConSM.setVal, // Bodenfeuchte / Wassergehalt der oberen Bodenschicht (zB. 5 mm == 50%)
170
- /** @type {number} */ pct: metConSM.setPct, // Bodenfeuchte in % zB. 50% = maxSoilMoistureIrrigation) / 2
171
- /** @type {boolean} */ bool: metConSM.setBool, // Bodenfeuchtezustand trocken/feucht === true/false
172
- /** @type {number} */ min: parseFloat(res.maxSoilMoistureIrrigation) / 100, // (zB. 0,02 mm)
173
- /** @type {number} */ maxIrrigation: parseFloat(res.maxSoilMoistureIrrigation), // (zB. 10 mm)
174
- /** @type {number} */ maxRain: parseFloat(res.maxSoilMoistureRain), // (zB. 12 mm)
175
- /** @type {number} */ triggersIrrigation: parseFloat(res.maxSoilMoistureIrrigation) * parseInt(res.triggersIrrigation) / 100, // (zB. 50 % ==> 5 mm)
176
- /** @type {number} */ pctTriggerIrrigation: parseFloat(res.triggersIrrigation), // Auslöser der Bewässerung in % (zB. 50%)
181
+ /** @type {number} */ val: metConSM.setVal, // Bodenfeuchte / Wassergehalt der oberen Bodenschicht (zB. 5 mm == 50%)
182
+ /** @type {number} */ pct: metConSM.setPct, // Bodenfeuchte in % zB. 50% = maxSoilMoistureIrrigation) / 2
183
+ /** @type {boolean} */ bool: metConSM.setBool, // Bodenfeuchtezustand trocken/feucht === true/false
184
+ /** @type {number} */ min: parseFloat(res.maxSoilMoistureIrrigation) / 100, // (zB. 0,02 mm)
185
+ /** @type {number} */ maxIrrigation: parseFloat(res.maxSoilMoistureIrrigation), // (zB. 10 mm)
186
+ /** @type {number} */ maxRain: parseFloat(res.maxSoilMoistureIrrigation) /100 * (parseFloat(res.maxSoilMoistureRainPct) || 120), // (zB. 12 mm)
187
+ /** @type {number} */ triggersIrrigation: parseFloat(res.maxSoilMoistureIrrigation) * parseInt(res.triggersIrrigation) / 100, // (zB. 50 % ==> 5 mm)
188
+ /** @type {number} */ pctTriggerIrrigation: parseFloat(res.triggersIrrigation), // Auslöser der Bewässerung in % (zB. 50%)
177
189
  }
178
190
  };
179
191
  myConfig.config.push(newEntry);
@@ -190,7 +202,7 @@ const myConfig = {
190
202
  },
191
203
  /**
192
204
  * apply Evaporation
193
- * => Verdunstung anwenden auf die einzelnen Sprenger kreise
205
+ * Verdunstung anwenden auf die einzelnen Sprenger kreise
194
206
  * @param {number} eTP - pot. Evapotranspiration nach Penman ETp in mm/d
195
207
  */
196
208
  applyEvaporation: (eTP) => {
@@ -257,20 +269,35 @@ const myConfig = {
257
269
  setSoilMoistPct: (mySprinkleID, newVal) => {
258
270
  if (myConfig.config[mySprinkleID].methodControlSM === 'analog') {
259
271
  if (typeof parseFloat(newVal) === 'number') {
272
+ /**aktueller Wert des Bodenfeuchte-Sensor
273
+ * @type {number} myVal
274
+ */
260
275
  let myVal;
276
+ /**Reversible Eingang des Bodenfeuchte sensors
277
+ * @type {boolean} reverse -Eingang analogOHPct < analogZPct
278
+ *
279
+ */
280
+ const reverse = (myConfig.config[mySprinkleID].analogOHPct < myConfig.config[mySprinkleID].analogZPct);
281
+ if (myConfig.config[mySprinkleID].analogOHPct === myConfig.config[mySprinkleID].analogZPct) {
282
+ adapter.log.warn(`${myConfig.config[mySprinkleID].objectName}: analog soil moisture sensor at 0% and at 100% => the values are the same`);
283
+ }
261
284
  newVal = parseFloat(newVal);
262
- if (newVal < myConfig.config[mySprinkleID].analogZPct) {
285
+
286
+ if ((!reverse && newVal < myConfig.config[mySprinkleID].analogZPct)
287
+ || (reverse && myConfig.config[mySprinkleID].analogZPct < newVal)) {
263
288
  myVal = myConfig.config[mySprinkleID].analogZPct;
264
- adapter.log.warn(`${myConfig.config[mySprinkleID].objectName}: analog soil moisture sensor at 0 % => The value range was undercut`);
265
- } else if (newVal > myConfig.config[mySprinkleID].analogOHPct) {
289
+ adapter.log.warn(`${myConfig.config[mySprinkleID].objectName} (${newVal}): analog soil moisture sensor at 0 % => ${reverse ? "The range of values has been exceeded (reverse)" : "The value range was undercut"}`);
290
+ } else if ((!reverse && newVal > myConfig.config[mySprinkleID].analogOHPct)
291
+ || (reverse && myConfig.config[mySprinkleID].analogOHPct > newVal)) {
266
292
  myVal = myConfig.config[mySprinkleID].analogOHPct;
267
- adapter.log.warn(`${myConfig.config[mySprinkleID].objectName}: analog soil moisture sensor at 100 % => The range of values has been exceeded`);
293
+ adapter.log.warn(`${myConfig.config[mySprinkleID].objectName} (${newVal}): analog soil moisture sensor at 100 % => ${reverse ? "The value range was undercut (reverse)" : "The range of values has been exceeded"}`);
268
294
  } else {
269
295
  myVal = newVal;
270
296
  }
271
- myConfig.config[mySprinkleID].soilMoisture.pct = (trend(myConfig.config[mySprinkleID].analogZPct, myConfig.config[mySprinkleID].analogOHPct, 0, 100, myVal));
297
+
298
+ myConfig.config[mySprinkleID].soilMoisture.pct = Math.round(10 * trend(myConfig.config[mySprinkleID].analogZPct, myConfig.config[mySprinkleID].analogOHPct, 0, 100, myVal)) / 10;
272
299
  adapter.setState('sprinkle.' + [myConfig.config[mySprinkleID].objectName] + '.actualSoilMoisture', {
273
- val: Math.round(10 * myConfig.config[mySprinkleID].soilMoisture.pct) / 10,
300
+ val: myConfig.config[mySprinkleID].soilMoisture.pct,
274
301
  ack: true
275
302
  });
276
303
  } else {
@@ -281,13 +308,18 @@ const myConfig = {
281
308
  }
282
309
  },
283
310
  /**
284
- * Bodenfeuchte (soilMoisture) erhöhen bis maxRain
311
+ * Bodenfeuchte (soilMoisture) erhöhen bis maxIrrigation (100%)
285
312
  * @param {number} mySprinkleID - ID des Bewässerungskreis
286
313
  * @param {number} addVal - soilMoisture.val wird um den Wert addVal erhöht
287
314
  */
288
315
  addSoilMoistVal: (mySprinkleID, addVal) => {
289
- myConfig.config[mySprinkleID].soilMoisture.val += addVal;
290
- if (myConfig.config[mySprinkleID].soilMoisture.val > myConfig.config[mySprinkleID].soilMoisture.maxRain) {myConfig.config[mySprinkleID].soilMoisture.val = myConfig.config[mySprinkleID].soilMoisture.maxRain}
316
+ if (myConfig.config[mySprinkleID].soilMoisture.val < myConfig.config[mySprinkleID].soilMoisture.maxIrrigation) {
317
+ myConfig.config[mySprinkleID].soilMoisture.val += addVal;
318
+ if (myConfig.config[mySprinkleID].soilMoisture.val > myConfig.config[mySprinkleID].soilMoisture.maxIrrigation) {
319
+ myConfig.config[mySprinkleID].soilMoisture.val = myConfig.config[mySprinkleID].soilMoisture.maxIrrigation;
320
+ }
321
+ }
322
+
291
323
  myConfig.config[mySprinkleID].soilMoisture.pct = Math.round(1000 * myConfig.config[mySprinkleID].soilMoisture.val
292
324
  / myConfig.config[mySprinkleID].soilMoisture.maxIrrigation) / 10; // Berechnung in %
293
325
  adapter.setState('sprinkle.' + myConfig.config[mySprinkleID].objectName + '.actualSoilMoisture', {
@@ -51,7 +51,7 @@ const sendMessageText = {
51
51
  /** @type {string} */ emailReceiver: adapter.config.emailReceiver,
52
52
  /** @type {string} */ emailSender: adapter.config.emailSender,
53
53
  /** @type {boolean} */ onlyError: adapter.config.emailOnlyError,
54
- /** @type {number} */ waiting: parseInt(adapter.config.emailWaitToSend) * 1000
54
+ /** @type {number} */ waiting: (parseInt(adapter.config.emailWaitToSend) * 1000) || 0
55
55
  };
56
56
  break;
57
57
 
@@ -172,6 +172,7 @@ const sendMessageText = {
172
172
  ObjMessage.instance !== null &&
173
173
  ObjMessage.instance !== undefined) {
174
174
  sendMessage = '<b><u>SprinkleControl:</u></b>\n' + sendMessage;
175
+ sendMessage = sendMessage.replace(/\n/g,'%0A'); // Zeilenumbruch
175
176
  sendMessage = sendMessage.replace(/<b>|<\/b>/g, '*'); // Fett Bold
176
177
  sendMessage = sendMessage.replace(/<i>|<\/i>/g, '_'); // kursive Italic
177
178
  sendMessage = sendMessage.replace(/<u>|<\/u>/g, ''); // unterstrichen
@@ -253,7 +253,7 @@ const switchTheValvesOffOn = async (threadList, parallel) => {
253
253
  if (err) {
254
254
  return err;
255
255
  } else {
256
- adapter.log.info(`Valve => Set (${myConfig.config[entry.sprinkleID].methodControlSM}) ID: ${entry.sprinkleName}, value: ${entry.enabled}, duration: ${addTime(entry.wateringTime,'')}`);
256
+ adapter.log.info(`Set (${myConfig.config[entry.sprinkleID].methodControlSM}) ID: ${entry.sprinkleName}, value: ${entry.enabled}, duration: ${addTime(entry.wateringTime,'')}`);
257
257
  }
258
258
  });
259
259
  entry.enabledState = entry.enabled;
@@ -576,7 +576,7 @@ function setPumpOnOff(pumpOnOff) {
576
576
  ack: false
577
577
  });
578
578
  currentPumpUse.enable = true;
579
- adapter.log.info('Set pump on');
579
+ adapter.log.info('Set (pump) on');
580
580
  }
581
581
  } else {
582
582
  if (state.val !== false) {
@@ -585,7 +585,7 @@ function setPumpOnOff(pumpOnOff) {
585
585
  ack: false
586
586
  });
587
587
  currentPumpUse.enable = false;
588
- adapter.log.info('Set pump off');
588
+ adapter.log.info('Set (pump) off');
589
589
  }
590
590
  }
591
591
  } else if (err) {
@@ -610,7 +610,7 @@ function setVoltageOnOff(voltageOnOff) {
610
610
  val: true,
611
611
  ack: false
612
612
  });
613
- adapter.log.info('Set voltage on');
613
+ adapter.log.info('Set (voltage) on');
614
614
  }
615
615
  } else {
616
616
  if (state.val !== false) {
@@ -618,7 +618,7 @@ function setVoltageOnOff(voltageOnOff) {
618
618
  val: false ,
619
619
  ack: false
620
620
  });
621
- adapter.log.info('Set voltage off');
621
+ adapter.log.info('Set (voltage) off');
622
622
  }
623
623
  }
624
624
  } else if (err) {
@@ -860,7 +860,7 @@ const valveControl = {
860
860
  clearTimeout(entry.times.boostTime2);
861
861
  entry.times.boostTime2 = null;
862
862
  }
863
- threadList.pop();
863
+ threadList.pop(); // del last array
864
864
  adapter.log.debug(`order deleted Stop all ID: ${entry.sprinkleName} ( rest orders: ${threadList.length} )`);
865
865
  }
866
866
  updateList();
package/main.js CHANGED
@@ -116,7 +116,7 @@ function startAdapter(options) {
116
116
  err && adapter.log.error(err);
117
117
  if (state && state.val) {
118
118
  try {
119
- adapter.log.info('getTelegramUser:' + state.val);
119
+ adapter.log.debug('getTelegramUser:' + state.val);
120
120
  adapter.sendTo(obj.from, obj.command, JSON.parse(state.val), obj.callback);
121
121
  } catch (err) {
122
122
  err && adapter.log.error(err);
@@ -443,24 +443,24 @@ async function checkActualStates () {
443
443
  if (adapter.config.publicHolidays === true && (adapter.config.publicHolInstance !== 'none' || adapter.config.publicHolInstance !== '')) {
444
444
  /**
445
445
  * Feiertag Heute
446
- * @type {ioBroker.GetStatePromise}
446
+ * @type {ioBroker.State | void}
447
447
  * @private
448
448
  */
449
- const _publicHolInstanceHeute = adapter.getForeignStateAsync(
449
+ const _publicHolInstanceHeute = await adapter.getForeignStateAsync(
450
450
  adapter.config.publicHolInstance + '.heute.boolean'
451
451
  ).catch((e) => adapter.log.warn(e));
452
- if (await _publicHolInstanceHeute && _publicHolInstanceHeute.val) {
453
- publicHolidayStr = _publicHolInstanceHeute.val;
454
- }
452
+ if (_publicHolInstanceHeute && _publicHolInstanceHeute.val) {
453
+ publicHolidayStr = _publicHolInstanceHeute.val;
454
+ }
455
455
  /**
456
456
  * Feiertag MORGEN
457
- * @type {ioBroker.GetStatePromise}
457
+ * @type {ioBroker.State | void}
458
458
  * @private
459
459
  */
460
- const _publicHolInstanceMorgen = adapter.getForeignStateAsync(
460
+ const _publicHolInstanceMorgen = await adapter.getForeignStateAsync(
461
461
  adapter.config.publicHolInstance + '.morgen.boolean'
462
462
  ).catch((e) => adapter.log.warn(e));
463
- if (await _publicHolInstanceMorgen && _publicHolInstanceMorgen.val) {
463
+ if (_publicHolInstanceMorgen && _publicHolInstanceMorgen.val) {
464
464
  publicHolidayTomorrowStr = _publicHolInstanceMorgen.val;
465
465
  }
466
466
  }
@@ -468,13 +468,13 @@ async function checkActualStates () {
468
468
  if (adapter.config.weatherForecast === true && (adapter.config.weatherForInstance !== 'none' || adapter.config.weatherForInstance !== '')) {
469
469
  /**
470
470
  * Niederschlagsmenge HEUTE in mm
471
- * @type {ioBroker.GetStatePromise}
471
+ * @type {ioBroker.State | void}
472
472
  * @private
473
473
  */
474
- const _weatherForInstanceToday = adapter.getForeignStateAsync(
474
+ const _weatherForInstanceToday = await adapter.getForeignStateAsync(
475
475
  adapter.config.weatherForInstance + '.NextDaysDetailed.Location_1.Day_1.rain_value'
476
476
  ).catch((e) => adapter.log.warn(e));
477
- if (await _weatherForInstanceToday && _weatherForInstanceToday.val) {
477
+ if (_weatherForInstanceToday && _weatherForInstanceToday.val) {
478
478
  if (typeof _weatherForInstanceToday.val == 'string') {
479
479
  weatherForecastTodayNum = parseFloat(_weatherForInstanceToday.val);
480
480
  } else if (typeof _weatherForInstanceToday.val == 'number') {
@@ -491,28 +491,30 @@ async function checkActualStates () {
491
491
 
492
492
  /**
493
493
  * Niederschlagsmenge MORGEN in mm
494
- * @type {ioBroker.GetStatePromise}
494
+ * @type {ioBroker.State | void}
495
495
  * @private
496
496
  */
497
- const _weatherForInstance = adapter.getForeignStateAsync(
497
+ const _weatherForInstance = await adapter.getForeignStateAsync(
498
498
  adapter.config.weatherForInstance + '.NextDaysDetailed.Location_1.Day_2.rain_value'
499
499
  ).catch((e) => adapter.log.warn(e));
500
- if (_weatherForInstance && _weatherForInstance.val) {
501
- weatherForecastTomorrowNum = _weatherForInstance.val;
502
- await adapter.setStateAsync(
503
- 'info.rainTomorrow',
504
- weatherForecastTomorrowNum,
505
- true
506
- );
507
- }
500
+ if (_weatherForInstance && _weatherForInstance.val) {
501
+ weatherForecastTomorrowNum = _weatherForInstance.val;
502
+ await adapter.setStateAsync(
503
+ 'info.rainTomorrow',
504
+ weatherForecastTomorrowNum,
505
+ true
506
+ );
507
+ }
508
508
  }
509
509
  if (adapter.config.actualValueLevel){
510
510
  /**
511
511
  * Füllstand der Zisterne in %
512
- * @type {ioBroker.GetStatePromise}
512
+ * @type {ioBroker.State | void}
513
513
  * @private
514
514
  */
515
- const _actualValueLevel = adapter.getForeignStateAsync(adapter.config.actualValueLevel).catch((e) => adapter.log.warn(e));
515
+ const _actualValueLevel = await adapter.getForeignStateAsync(
516
+ adapter.config.actualValueLevel
517
+ ).catch((e) => adapter.log.warn(e));
516
518
  if (_actualValueLevel && typeof _actualValueLevel.val !== undefined) {
517
519
  valveControl.setFillLevelCistern(parseFloat(_actualValueLevel.val));
518
520
  }
@@ -520,6 +522,8 @@ async function checkActualStates () {
520
522
  /**
521
523
  * return the saved objects under sprinkle.*
522
524
  * rückgabe der gespeicherten Objekte unter sprinkle.*
525
+ * @type {ioBroker.NonNullCallbackReturnTypeOf<(err?: (Error | null), objects?: Record<string, ioBroker.AnyObject & {type: "channel"}>) => void> | void}
526
+ * @private
523
527
  */
524
528
  const _list = await adapter.getForeignObjectsAsync(adapter.namespace + '.sprinkle.*', 'channel').catch((e) => adapter.log.warn(e));
525
529
  if (_list) {
@@ -949,6 +953,22 @@ async function createSprinklers() {
949
953
  break;
950
954
  default:
951
955
  adapter.log.warn(`sprinkleControl cannot created ... Please check your sprinkleControl config ${objectName} methodControl`);
956
+ nameMetConSM = objectName + ' => Emergency program! start on a fixed day';
957
+ objMetConSM = {
958
+ 'type': 'state',
959
+ 'common': {
960
+ 'role': 'state',
961
+ 'name': nameMetConSM,
962
+ 'type': 'number',
963
+ 'min': 0,
964
+ 'max': 7,
965
+ 'states': {"0":"Sun", "1":"Mon", "2":"Tue", "3":"Wed", "4":"Thur", "5":"Fri", "6":"Sat", "7":"off"},
966
+ 'read': true,
967
+ 'write': false,
968
+ 'def': 7
969
+ },
970
+ 'native': {},
971
+ };
952
972
  }
953
973
  }
954
974
  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //
@@ -1082,14 +1102,14 @@ async function createSprinklers() {
1082
1102
  'type': 'boolean',
1083
1103
  'read': true,
1084
1104
  'write': true,
1085
- 'def': false
1105
+ 'def': true
1086
1106
  },
1087
1107
  'native': {},
1088
1108
  }).catch((e) => adapter.log.warn(`${objectName}.autoOn ${e}`));
1089
1109
  // Create Object for .actualSoilMoisture
1090
1110
  const _actualSoilMoistureNotExist = await adapter.setObjectNotExistsAsync(objPfad + '.actualSoilMoisture',
1091
1111
  objMetConSM
1092
- ).catch((e) => adapter.log.warn(`${objectName}.autoOn ${e}`));
1112
+ ).catch((e) => adapter.log.warn(`${objectName}.actualSoilMoisture ${e}`));
1093
1113
  // Create Object for .countdown => Countdown des Ventils
1094
1114
  const _countdownNotExist = adapter.setObjectNotExistsAsync(objPfad + '.countdown', {
1095
1115
  'type': 'state',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.sprinklecontrol",
3
- "version": "0.2.8",
3
+ "version": "0.2.11",
4
4
  "description": "Control of several sprinklers depending on weather conditions and pump performance.",
5
5
  "author": {
6
6
  "name": "Dirk Peter",
@@ -33,15 +33,15 @@
33
33
  "@types/chai-as-promised": "^7.1.5",
34
34
  "@types/gulp": "^4.0.9",
35
35
  "@types/mocha": "^9.1.0",
36
- "@types/node": "^17.0.21",
36
+ "@types/node": "^17.0.23",
37
37
  "@types/node-schedule": "^1.3.2",
38
38
  "@types/proxyquire": "^1.3.28",
39
39
  "@types/sinon": "^10.0.11",
40
- "@types/sinon-chai": "^3.2.5",
40
+ "@types/sinon-chai": "^3.2.8",
41
41
  "axios": "^0.26.1",
42
42
  "chai": "^4.3.4",
43
43
  "chai-as-promised": "^7.1.1",
44
- "eslint": "^8.11.0",
44
+ "eslint": "^8.12.0",
45
45
  "gulp": "^4.0.2",
46
46
  "mocha": "^9.1.2",
47
47
  "proxyquire": "^2.1.3",