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 +12 -3
- package/admin/index_m.html +4 -4
- package/admin/index_m.js +4 -4
- package/admin/words.js +1 -1
- package/io-package.json +38 -14
- package/lib/evaporation.js +2 -2
- package/lib/myConfig.js +68 -36
- package/lib/sendMessageText.js +2 -1
- package/lib/valveControl.js +6 -6
- package/main.js +46 -26
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|

|
|
8
8
|
[](https://www.npmjs.com/package/iobroker.sprinklecontrol)
|
|
9
9
|
[](https://www.npmjs.com/package/iobroker.sprinklecontrol)
|
|
10
|
-
[](https://david-dm.org/Dirk-Peter-md/iobroker.sprinklecontrol)
|
|
11
10
|
[](https://snyk.io/test/github/Dirk-Peter-md/ioBroker.sprinklecontrol)
|
|
12
11
|
[](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
|
package/admin/index_m.html
CHANGED
|
@@ -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="
|
|
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="
|
|
737
|
-
<label for="
|
|
738
|
-
<span class="translate">maximum soil moisture after the rain in (
|
|
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="
|
|
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
|
-
$('#
|
|
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
|
|
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="
|
|
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 (
|
|
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.
|
|
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
|
-
"
|
|
371
|
+
"maxSoilMoistureRainPct": "120",
|
|
348
372
|
"triggersIrrigation": "50",
|
|
349
373
|
"pipeFlow": "1100",
|
|
350
374
|
"booster": false,
|
package/lib/evaporation.js
CHANGED
|
@@ -362,13 +362,13 @@ const evaporation = {
|
|
|
362
362
|
},
|
|
363
363
|
/**
|
|
364
364
|
* akt. Regenmengenzähler
|
|
365
|
-
* → Bei einer Änderung über
|
|
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) <
|
|
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
|
|
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 */
|
|
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',
|
|
154
|
-
/** @type {string} */ objectName: objectName,
|
|
155
|
-
/** @type {string} */ objectID: adapter.namespace + '.sprinkle.' + objectName + '.runningTime',
|
|
156
|
-
/** @type {string} */ idState: res.name,
|
|
157
|
-
/** @type {any} */ updateStateTimerID: null,
|
|
158
|
-
/** @type {number} */ sprinkleID: myConfig.config.length,
|
|
159
|
-
/** @type {number} */ wateringTime: parseInt(res.wateringTime),
|
|
160
|
-
/** @type {number} */ wateringAdd: parseInt(res.wateringAdd),
|
|
161
|
-
/** @type {number} */ wateringInterval: ((60 * parseInt(res.wateringInterval)) || 0),
|
|
162
|
-
/** @type {number} */ pipeFlow: parseInt(res.pipeFlow),
|
|
163
|
-
/** @type {string} */ methodControlSM: metConSM.setMetConSM,
|
|
164
|
-
/** @type {string} */ triggerSM: metConSM.setTrigSM,
|
|
165
|
-
/** @type {boolean} */ inGreenhouse: res.inGreenhouse || false,
|
|
166
|
-
/** @type {number} */ analogZPct: metConSM.setAnalogZPct,
|
|
167
|
-
/** @type {number} */ analogOHPct: metConSM.setAnalogOHPct,
|
|
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,
|
|
170
|
-
/** @type {number} */ pct: metConSM.setPct,
|
|
171
|
-
/** @type {boolean} */ bool: metConSM.setBool,
|
|
172
|
-
/** @type {number} */ min: parseFloat(res.maxSoilMoistureIrrigation) / 100,
|
|
173
|
-
/** @type {number} */ maxIrrigation: parseFloat(res.maxSoilMoistureIrrigation),
|
|
174
|
-
/** @type {number} */ maxRain: parseFloat(res.
|
|
175
|
-
/** @type {number} */ triggersIrrigation: parseFloat(res.maxSoilMoistureIrrigation) * parseInt(res.triggersIrrigation) / 100,
|
|
176
|
-
/** @type {number} */ pctTriggerIrrigation: parseFloat(res.triggersIrrigation),
|
|
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
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
|
290
|
-
|
|
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', {
|
package/lib/sendMessageText.js
CHANGED
|
@@ -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
|
package/lib/valveControl.js
CHANGED
|
@@ -253,7 +253,7 @@ const switchTheValvesOffOn = async (threadList, parallel) => {
|
|
|
253
253
|
if (err) {
|
|
254
254
|
return err;
|
|
255
255
|
} else {
|
|
256
|
-
adapter.log.info(`
|
|
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.
|
|
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.
|
|
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
|
-
|
|
453
|
-
|
|
454
|
-
|
|
452
|
+
if (_publicHolInstanceHeute && _publicHolInstanceHeute.val) {
|
|
453
|
+
publicHolidayStr = _publicHolInstanceHeute.val;
|
|
454
|
+
}
|
|
455
455
|
/**
|
|
456
456
|
* Feiertag MORGEN
|
|
457
|
-
* @type {ioBroker.
|
|
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 (
|
|
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.
|
|
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 (
|
|
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.
|
|
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
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
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.
|
|
512
|
+
* @type {ioBroker.State | void}
|
|
513
513
|
* @private
|
|
514
514
|
*/
|
|
515
|
-
const _actualValueLevel = adapter.getForeignStateAsync(
|
|
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':
|
|
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}.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
44
|
+
"eslint": "^8.12.0",
|
|
45
45
|
"gulp": "^4.0.2",
|
|
46
46
|
"mocha": "^9.1.2",
|
|
47
47
|
"proxyquire": "^2.1.3",
|