iobroker.sprinklecontrol 1.0.6 → 1.0.7
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 +3 -26
- package/admin/i18n/de/translations.json +8 -1
- package/admin/i18n/en/translations.json +7 -0
- package/admin/i18n/es/translations.json +7 -0
- package/admin/i18n/fr/translations.json +7 -0
- package/admin/i18n/it/translations.json +7 -0
- package/admin/i18n/nl/translations.json +7 -0
- package/admin/i18n/pl/translations.json +7 -0
- package/admin/i18n/pt/translations.json +7 -0
- package/admin/i18n/ru/translations.json +7 -0
- package/admin/i18n/uk/translations.json +7 -0
- package/admin/i18n/zh-cn/translations.json +7 -0
- package/admin/index_m.html +33 -2
- package/admin/index_m.js +11 -1
- package/admin/words.js +8 -1
- package/io-package.json +19 -16
- package/lib/evaporation.js +3 -3
- package/lib/tools.js +9 -2
- package/lib/valveControl.js +215 -22
- package/main.js +44 -7
- package/package.json +1 -1
package/admin/words.js
CHANGED
|
@@ -56,6 +56,7 @@ systemDictionary = {
|
|
|
56
56
|
"Maximum parallel operation of the valves": { "en": "Maximum parallel operation of the valves", "de": "Maximaler Parallelbetrieb der Ventile", "ru": "Максимальная параллельная работа клапанов", "pt": "Operação paralela máxima das válvulas", "nl": "Maximale parallelle werking van de kleppen", "fr": "Fonctionnement parallèle maximal des vannes", "it": "Massima operazione parallela delle valvole", "es": "Máximo funcionamiento paralelo de las válvulas.", "pl": "Maksymalna równoległa praca zaworów", "uk": "Максимальна паралельна робота клапанів", "zh-cn": "阀门最大平行运行"},
|
|
57
57
|
"Method of controlling soil moisture": { "en": "Method of controlling soil moisture", "de": "Methode zur Kontrolle der Bodenfeuchtigkeit", "ru": "Метод контроля влажности почвы", "pt": "Método de controle da umidade do solo", "nl": "Methode voor het beheersen van bodemvocht", "fr": "Méthode de contrôle de l'humidité du sol", "it": "Metodo di controllo dell'umidità del suolo", "es": "Método de control de la humedad del suelo.", "pl": "Metoda kontrolowania wilgotności gleby", "uk": "Спосіб контролю вологості ґрунту", "zh-cn": "控制土壤水分的方法"},
|
|
58
58
|
"Minimum fill level of the cysts in %": { "en": "Minimum fill level of the cysts in %", "de": "Mindestfüllstand der Zysten in %", "ru": "Минимальный уровень заполнения кист в %", "pt": "Nível mínimo de preenchimento dos cistos em %", "nl": "Minimaal vulniveau van de cysten in %", "fr": "Niveau de remplissage minimum des kystes en %", "it": "Livello minimo di riempimento delle cisti in %", "es": "Nivel mínimo de llenado de los quistes en %", "pl": "Minimalny poziom napełnienia torbieli w %", "uk": "Мінімальний рівень заповнення кіст у %", "zh-cn": "囊肿的最小填充水平,以%为单位"},
|
|
59
|
+
"Minimum pressure in the irrigation line in bar": {"en": "Minimum pressure in the irrigation line in bar", "de": "Mindestdruck in der Bewässerungsleitung in bar", "ru": "Минимальное давление в оросительной линии, бар", "pt": "Pressão mínima na linha de irrigação em bar", "nl": "Minimale druk in de irrigatieleiding in bar", "fr": "Pression minimale dans la conduite d'irrigation en bar", "it": "Pressione minima nella linea di irrigazione in bar", "es": "Presión mínima en la línea de riego en bar", "pl": "Minimalne ciśnienie w linii nawadniającej w barach", "uk": "Мінімальний тиск в зрошувальній лінії в барах", "zh-cn": "灌溉管路中的最小压力(巴)"},
|
|
59
60
|
"Monday": { "en": "Monday", "de": "Montag", "ru": "понедельник", "pt": "Segunda-feira", "nl": "maandag", "fr": "lundi", "it": "Lunedi", "es": "lunes", "pl": "poniedziałek", "uk": "понеділок", "zh-cn": "周一"},
|
|
60
61
|
"Name": { "en": "name", "de": "Name", "ru": "имя", "pt": "nome", "nl": "naam", "fr": "Nom", "it": "nome", "es": "nombre", "pl": "imię", "uk": "назва", "zh-cn": "名称"},
|
|
61
62
|
"No Notification": { "en": "No Notification", "de": "Keine Benachrichtigung", "ru": "Нет уведомления", "pt": "Nenhuma notificação", "nl": "Geen melding", "fr": "Aucune notification", "it": "Nessuna notifica", "es": "Sin notificación", "pl": "Brak powiadomienia", "uk": "Немає сповіщень", "zh-cn": "无通知"},
|
|
@@ -69,6 +70,8 @@ systemDictionary = {
|
|
|
69
70
|
"Precipitation threshold in mm": { "en": "Precipitation threshold in mm", "de": "Niederschlags-Schwellwert in mm", "ru": "Порог осадков в мм", "pt": "Limiar de precipitação em mm", "nl": "Neerslagdrempel in mm", "fr": "Seuil de précipitation en mm", "it": "Soglia di precipitazione in mm", "es": "Umbral de precipitación en mm", "pl": "Próg opadów w mm", "uk": "Поріг опадів в мм", "zh-cn": "以毫米为单位的降水阈值"},
|
|
70
71
|
"Pressure relief in the lines before shutdown": { "en": "Pressure relief in the lines before shutdown", "de": "Druckentlastung der Leitungen vor der Abschaltung", "ru": "Сброс давления в линиях перед остановом", "pt": "Alívio de pressão nas linhas antes do desligamento", "nl": "Drukontlasting in de leidingen vóór uitschakeling", "fr": "Décompression dans les conduites avant l'arrêt", "it": "Depressurizzazione nelle linee prima dell'arresto", "es": "Alivio de presión en las líneas antes de la parada.", "pl": "Redukcja ciśnienia w przewodach przed wyłączeniem", "uk": "Скидання тиску в лініях перед відключенням", "zh-cn": "停机前管线压力释放"},
|
|
71
72
|
"Pressure relief! Switches on the largest water consumer for 10 seconds after the pump has been switched off.": {"en": "Pressure relief! Switches on the largest water consumer for 10 seconds after the pump has been switched off.", "de": "Druckentlastung! Schaltet nach dem Abschalten der Pumpe den größten Wasserverbraucher für 10 Sekunden ein.", "ru": "Сброс давления! Включает самый большой водопотребитель на 10 секунд после выключения насоса.", "pt": "Alívio de pressão! Liga o maior consumidor de água durante 10 segundos após a bomba ter sido desligada.", "nl": "Drukverlichting! Schakelt de grootste waterverbruiker gedurende 10 seconden in nadat de pomp is uitgeschakeld.", "fr": "Soulagement de la pression ! Allume le plus gros consommateur d'eau pendant 10 secondes après l'arrêt de la pompe.", "it": "Alleviamento della pressione! Accende l'utenza d'acqua più grande per 10 secondi dopo lo spegnimento della pompa.", "es": "¡Alivio de presión! Enciende el mayor consumidor de agua durante 10 segundos después de apagar la bomba.", "pl": "Redukcja ciśnienia! Włącza największy odbiornik wody na 10 sekund po wyłączeniu pompy.", "uk": "Зняття тиску! Вмикає найбільшого споживача води на 10 секунд після вимкнення насоса.", "zh-cn": "压力缓解!泵关闭后,打开最大耗水量 10 秒。"},
|
|
73
|
+
"Pressure sensor - path": { "en": "Pressure sensor - path", "de": "Drucksensor - Pfad", "ru": "Датчик давления - путь", "pt": "Sensor de pressão - caminho", "nl": "Druksensor - pad", "fr": "Capteur de pression - chemin", "it": "Sensore di pressione - percorso", "es": "Sensor de presión - trayectoria", "pl": "Czujnik ciśnienia - ścieżka", "uk": "Датчик тиску - тракт", "zh-cn": "压力传感器 - 路径"},
|
|
74
|
+
"Pressure sensor for monitoring irrigation": { "en": "Pressure sensor for monitoring irrigation", "de": "Drucksensor zur Überwachung der Bewässerung", "ru": "Датчик давления для контроля полива", "pt": "Sensor de pressão para monitoramento de irrigação", "nl": "Druksensor voor het monitoren van de irrigatie", "fr": "Capteur de pression pour surveiller l'irrigation", "it": "Sensore di pressione per il monitoraggio dell'irrigazione", "es": "Sensor de presión para el seguimiento del riego.", "pl": "Czujnik ciśnienia do monitorowania nawadniania", "uk": "Датчик тиску для контролю зрошення", "zh-cn": "用于监测灌溉的压力传感器"},
|
|
72
75
|
"Pump Settings": { "en": "Pump Settings", "de": "Pumpeneinstellungen", "ru": "Настройки насоса", "pt": "Configurações da bomba", "nl": "Pompinstellingen", "fr": "Paramètres de la pompe", "it": "Impostazioni della pompa", "es": "Configuraciones de bomba", "pl": "Ustawienia pompy", "uk": "Налаштування насоса", "zh-cn": "泵设定"},
|
|
73
76
|
"Pump selection": { "en": "Pump selection", "de": "Pumpenauswahl", "ru": "Выбор насоса", "pt": "Seleção de bomba", "nl": "Pomp selectie", "fr": "Choix de la pompe", "it": "Selezione pompa", "es": "Selección de bombas", "pl": "Wybór Pumpa", "uk": "Вибір насоса", "zh-cn": "倾销选择"},
|
|
74
77
|
"Pump settings": { "en": "Pump settings", "de": "Pumpeneinstellungen", "ru": "Настройки насоса", "pt": "Configurações da bomba", "nl": "Pomp instellingen", "fr": "Paramètres de la pompe", "it": "Impostazioni della pompa", "es": "Ajustes de la bomba", "pl": "Ustawienia pompy", "uk": "Налаштування насоса", "zh-cn": "泵设定"},
|
|
@@ -121,6 +124,7 @@ systemDictionary = {
|
|
|
121
124
|
"Switch-on point (soil moisture) of the irrigation valves in %": {"en": "Switch-on point (soil moisture) of the irrigation valves in %", "de": "Einschaltpunkt (Bodenfeuchtigkeit) des Bewässerungsventile in %", "ru": "Точка включения (влажность почвы) оросительных клапанов в %", "pt": "Ponto de ativação (umidade do solo) das válvulas de irrigação em %", "nl": "Inschakelpunt (bodemvocht) van de besproeiingsventielen in %", "fr": "Point d'enclenchement (humidité du sol) des vannes d'irrigation en%", "it": "Punto di attivazione (umidità del suolo) delle valvole di irrigazione in %", "es": "Punto de activación (humedad del suelo) de las válvulas de riego en %", "pl": "Punkt włączenia (wilgotność gleby) zaworów nawadniających w %", "uk": "Точка вмикання (вологість ґрунту) зрошувальних клапанів у %", "zh-cn": "灌溉阀的开启点(土壤水分),以%为单位"},
|
|
122
125
|
"Switch-on point for watering": { "en": "Switch-on point for watering", "de": "Einschaltpunkt zum Gießen", "ru": "Точка включения полива", "pt": "Ponto de ligação para rega", "nl": "Inschakelpunt voor bewatering", "fr": "Point de mise en marche pour l'arrosage", "it": "Punto di accensione per l'irrigazione", "es": "Punto de encendido para riego", "pl": "Punkt włączenia podlewania", "uk": "Точка включення для поливу", "zh-cn": "浇水点"},
|
|
123
126
|
"Switches on at maximum temperature via": { "en": "Switches on at maximum temperature via", "de": "Einschalten bei maximaler Temperatur über", "ru": "Включается при максимальной температуре через", "pt": "Liga na temperatura máxima via", "nl": "Schakelt in op maximale temperatuur via", "fr": "S'allume à température maximale via", "it": "Si accende alla massima temperatura tramite", "es": "Se enciende a máxima temperatura mediante", "pl": "Włącza się przy maksymalnej temperaturze poprzez", "uk": "Вмикається при максимальній температурі через", "zh-cn": "通过在最高温度下打开"},
|
|
127
|
+
"Switching actuator manufacturer": { "en": "Switching actuator manufacturer", "de": "Hersteller von Schaltaktoren", "ru": "Производитель переключающих актуаторов", "pt": "Fabricante de atuador de comutação", "nl": "Fabrikant van schakelactoren", "fr": "Fabricant d'actionneurs de commutation", "it": "Produttore di attuatori di commutazione", "es": "Fabricante de actuadores de conmutación", "pl": "Producent aktora przełączającego", "uk": "Виробник приводу перемикання", "zh-cn": "开关执行器制造商"},
|
|
124
128
|
"Switching distance between the valves in ms": { "en": "Switching distance between the valves in ms", "de": "Schaltabstand zwischen den Ventilen in ms", "ru": "Расстояние переключения между клапанами в мс", "pt": "Distância de comutação entre as válvulas em ms", "nl": "Schakelafstand tussen de kleppen in ms", "fr": "Distance de commutation entre les vannes en ms", "it": "Distanza di commutazione tra le valvole in ms", "es": "Distancia de conmutación entre las válvulas en ms", "pl": "Odległość przełączania między zaworami w ms", "uk": "Відстань перемикання між клапанами в мс", "zh-cn": "气门之间的切换距离(毫秒)"},
|
|
125
129
|
"Telegram": { "en": "Telegram", "de": "Telegram", "ru": "Телеграмма", "pt": "Telegrama", "nl": "Telegram", "fr": "Télégramme", "it": "Telegramma", "es": "Telegrama", "pl": "Telegram", "uk": "Телеграма", "zh-cn": "电报"},
|
|
126
130
|
"Telegram Receiver": { "en": "Telegram Receiver", "de": "Telegramempfänger", "ru": "Получатель Telegram", "pt": "Receptor de telegrama", "nl": "Telegram-ontvanger", "fr": "Récepteur de télégramme", "it": "Ricevitore di Telegram", "es": "Receptor de telegramas", "pl": "Odbiornik telegramu", "uk": "Приймач телеграм", "zh-cn": "电报接收器"},
|
|
@@ -135,6 +139,7 @@ systemDictionary = {
|
|
|
135
139
|
"Time-based irrigation restriction": { "en": "", "de": "Zeitliche Bewässerungsbeschränkung", "ru": "Ограничение полива по времени", "pt": "Restrição de irrigação baseada no tempo", "nl": "Tijdgebaseerde irrigatiebeperking", "fr": "Restriction d'irrigation basée sur le temps", "it": "Restrizione dell'irrigazione basata sul tempo", "es": "Restricción de riego basada en el tiempo", "pl": "Ograniczenie nawadniania oparte na czasie", "uk": "Часове обмеження поливу", "zh-cn": "基于时间的灌溉限制"},
|
|
136
140
|
"Time-based irrigation restriction (Irrigation ban)": {"en": "Time-based irrigation restriction (Irrigation ban)", "de": "Zeitliche Bewässerungsbeschränkung (Bewässerungsverbot)", "ru": "Ограничение орошения по времени (запрет на орошение)", "pt": "Restrição de irrigação baseada no tempo (proibição de irrigação)", "nl": "Tijdgebaseerde irrigatiebeperking (irrigatieverbod)", "fr": "Restriction d'irrigation basée sur le temps (interdiction d'irrigation)", "it": "Restrizione dell'irrigazione basata sul tempo (divieto di irrigazione)", "es": "Restricción de riego basada en el tiempo (Prohibición de riego)", "pl": "Ograniczenia nawadniania oparte na czasie (zakaz nawadniania)", "uk": "Часове обмеження поливу (заборона поливу)", "zh-cn": "基于时间的灌溉限制(灌溉禁令)"},
|
|
137
141
|
"Tuesday": { "en": "Tuesday", "de": "Dienstag", "ru": "вторник", "pt": "terça", "nl": "dinsdag", "fr": "Mardi", "it": "martedì", "es": "martes", "pl": "wtorek", "uk": "вівторок", "zh-cn": "周二"},
|
|
142
|
+
"Unit of wind speed": { "en": "Unit of wind speed", "de": "Einheit der Windgeschwindigkeit", "ru": "Единица скорости ветра", "pt": "Unidade de velocidade do vento", "nl": "Eenheid van windsnelheid", "fr": "Unité de vitesse du vent", "it": "Unità di velocità del vento", "es": "Unidad de velocidad del viento", "pl": "Jednostka prędkości wiatru", "uk": "Одиниця швидкості вітру", "zh-cn": "风速单位"},
|
|
138
143
|
"Use weather forecast": { "en": "Use weather forecast", "de": "Wettervorhersage verwenden", "ru": "Использовать прогноз погоды", "pt": "Use a previsão do tempo", "nl": "Gebruik weersvoorspelling", "fr": "Utiliser les prévisions météorologiques", "it": "Usa le previsioni del tempo", "es": "Usar pronóstico del tiempo", "pl": "Użyj prognozy pogody", "uk": "Використовуйте прогноз погоди", "zh-cn": "使用天气预报"},
|
|
139
144
|
"Waiting for the send (seconds)": { "en": "Waiting for the send (seconds)", "de": "Warten auf den Versand (Sekunden)", "ru": "Ожидание отправки (секунды)", "pt": "Esperando pelo envio (segundos)", "nl": "Wachten op verzending (seconden)", "fr": "En attente de l'envoi (secondes)", "it": "Aspettando l'invio (secondi)", "es": "Esperando el envío (segundos)", "pl": "Oczekiwanie na wysłanie (sekundy)", "uk": "Очікування надсилання (секунд)", "zh-cn": "等待发送(秒)"},
|
|
140
145
|
"Watering interval in min": { "en": "Watering interval in min", "de": "Bewässerungsintervall in min", "ru": "Интервал полива в мин.", "pt": "Intervalo de rega em min", "nl": "Bewateringsinterval in min", "fr": "Intervalle d'arrosage en min", "it": "Intervallo di irrigazione in min", "es": "Intervalo de riego en min", "pl": "Odstęp podlewania w min", "uk": "Інтервал поливу в хв", "zh-cn": "浇水间隔(分钟)"},
|
|
@@ -158,8 +163,10 @@ systemDictionary = {
|
|
|
158
163
|
"email instance": { "en": "email instance", "de": "E-Mail-Instanz", "ru": "экземпляр электронной почты", "pt": "instância de email", "nl": "e-mailinstantie", "fr": "instance de messagerie", "it": "istanza di posta elettronica", "es": "instancia de correo electrónico", "pl": "wystąpienie poczty e-mail", "uk": "екземпляр електронної пошти", "zh-cn": "电子邮件实例"},
|
|
159
164
|
"email receiver": { "en": "email receiver", "de": "E-Mail-Empfänger", "ru": "получатель электронной почты", "pt": "receptor de email", "nl": "e-mailontvanger", "fr": "récepteur de courrier électronique", "it": "destinatario di posta elettronica", "es": "receptor de correo electrónico", "pl": "odbiorca poczty elektronicznej", "uk": "отримувач електронної пошти", "zh-cn": "电子邮件接收者"},
|
|
160
165
|
"email sender": { "en": "email sender", "de": "E-Mail-Absender", "ru": "отправитель электронной почты", "pt": "remetente de email", "nl": "e-mail afzender", "fr": "expéditeur de l'e-mail", "it": "mittente di posta elettronica", "es": "remitente de correo electrónico", "pl": "nadawca wiadomości e-mail", "uk": "відправник електронної пошти", "zh-cn": "电子邮件发件人"},
|
|
161
|
-
"
|
|
166
|
+
"km/h": { "en": "km/h", "de": "km/h", "ru": "км/ч", "pt": "km/h", "nl": "km/u", "fr": "km/h", "it": "km/ora", "es": "kilómetros por hora", "pl": "kilometrów na godzinę", "uk": "км/год", "zh-cn": "公里/小时"},
|
|
167
|
+
"latitude": { "en": "latitude", "de": "Breitengrad", "ru": "широта", "pt": "latitude", "nl": "breedtegraad", "fr": "latitude", "it": "latitudine", "es": "latitud", "pl": "szerokość", "uk": "широта", "zh-cn": "纬度"},
|
|
162
168
|
"longitude": { "en": "longitude", "de": "Längengrad", "ru": "долгота", "pt": "longitude", "nl": "Lengtegraad", "fr": "longitude", "it": "longitudine", "es": "longitud", "pl": "długość geograficzna", "uk": "довгота", "zh-cn": "经度"},
|
|
169
|
+
"m/s": { "en": "m/s", "de": "m/s", "ru": "РС", "pt": "EM", "nl": "mevrouw", "fr": "MS", "it": "SM", "es": "EM", "pl": "SM", "uk": "РС", "zh-cn": "多发性硬化症"},
|
|
163
170
|
"main settings": { "en": "main settings", "de": "Haupteinstellungen", "ru": "Основные настройки", "pt": "configurações principais", "nl": "belangrijkste instellingen", "fr": "Réglages principaux", "it": "impostazioni principali", "es": "ajustes principales", "pl": "Ustawienia główne", "uk": "основні налаштування", "zh-cn": "主要设定"},
|
|
164
171
|
"maximum irrigation extension": { "en": "maximum irrigation extension in %", "de": "maximale Bewässerungsverlängerung in %", "ru": "максимальное увеличение орошения в %", "pt": "extensão máxima de irrigação em %", "nl": "maximale verlenging van de irrigatie in %", "fr": "extension maximale de l'irrigation en %", "it": "massima estensione di irrigazione in %", "es": "extensión máxima de riego en %", "pl": "maksymalne rozszerzenie nawadniania w %", "uk": "максимальне подовження поливу в %", "zh-cn": "最大灌溉延伸率(%)"},
|
|
165
172
|
"maximum pump capacity of the cistern in l/h": { "en": "maximum pump capacity of the cistern in l/h", "de": "maximale Pumpenleistung der Zisterne in l/h", "ru": "максимальная производительность насоса в цистерне в л/ч", "pt": "capacidade máxima da bomba da cisterna em l/h", "nl": "maximale pompcapaciteit van de stortbak in l/h", "fr": "capacité maximale de pompage du réservoir en l/h", "it": "portata massima della pompa della cisterna in l/h", "es": "Capacidad máxima de bombeo de la cisterna en l/h", "pl": "maksymalna wydajność pompy cysterny w l/h", "uk": "максимальна продуктивність насоса цистерни в л/год", "zh-cn": "水箱的最大泵容量,以升/小时为单位"},
|
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "sprinklecontrol",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.7",
|
|
5
5
|
"titleLang": {
|
|
6
6
|
"en": "Sprinkler Control",
|
|
7
7
|
"de": "Sprinklersteuerung",
|
|
@@ -19,6 +19,19 @@
|
|
|
19
19
|
"Dirk Peter <dirk.peter@freenet.de>"
|
|
20
20
|
],
|
|
21
21
|
"news": {
|
|
22
|
+
"1.0.7": {
|
|
23
|
+
"en": "Added pressure monitoring.",
|
|
24
|
+
"de": "Drucküberwachung hinzugefügt.",
|
|
25
|
+
"ru": "Добавлен мониторинг давления.",
|
|
26
|
+
"pt": "Aumentou a monitorização da pressão.",
|
|
27
|
+
"nl": "Toegevoegde drukbewaking.",
|
|
28
|
+
"fr": "Ajout de la surveillance de la pression.",
|
|
29
|
+
"it": "Aggiunto monitoraggio della pressione.",
|
|
30
|
+
"es": "Añadido control de presión.",
|
|
31
|
+
"pl": "Dodano monitorowanie ciśnienia.",
|
|
32
|
+
"uk": "Додано контроль тиску.",
|
|
33
|
+
"zh-cn": "增加了压力监测."
|
|
34
|
+
},
|
|
22
35
|
"1.0.6": {
|
|
23
36
|
"en": "Cistern Control Optimized\nTranslation revised",
|
|
24
37
|
"de": "Zisternensteuerung optimiert\nÜbersetzung überarbeitet",
|
|
@@ -96,19 +109,6 @@
|
|
|
96
109
|
"pl": "Dodaj homematic on _ time\nZmieniona konfiguracja adaptera\njoBroker- Bot [E4041], [E4043] ukończone",
|
|
97
110
|
"uk": "Додати Homematic ON TIME\nПереглянуто налаштування адаптера\nioBroker-Bot [E4041], [E4043] завершено",
|
|
98
111
|
"zh-cn": "添加自定义 ON TIME\n修改适应器配置\nioBroker-Bot [E4041], [E4043] 完成"
|
|
99
|
-
},
|
|
100
|
-
"1.0.0": {
|
|
101
|
-
"en": "Adapter redesign => Be sure to check your configuration\nAdaptation to “dasWeather” >= 4.0\nFix npm publish\ndependencies updated\nupdate dependabot",
|
|
102
|
-
"de": "Adapter redesign => Überprüfen Sie Ihre Konfiguration\nAnpassung an „dasWeather“ >= 4.0\nNpm veröffentlichen\naktualisierte abhängigkeiten\nupdate abhängigabot",
|
|
103
|
-
"ru": "Адаптивный редизайн = Обязательно проверьте свою конфигурацию\nАдаптация к «dasWeather» 4.0\nИздательство Fix npm\nобновленные зависимости\nобновление dependabot",
|
|
104
|
-
"pt": "Redesenho do adaptador => Certifique-se de verificar sua configuração\nAdaptação ao “dasWeather” >= 4.0\nCorrigir a publicação do npm\ndependências atualizadas\nupdate dependebot",
|
|
105
|
-
"nl": "Herontwerp van de adapter => Controleer zeker uw configuratie\nAanpassing aan het weer 4.0\nFix npm publiceren\nafhankelijkheden bijgewerkt\nupdate dependabot",
|
|
106
|
-
"fr": "Remaniement de l'adaptateur => Vérifiez votre configuration\nAdaptation à la température de l'air >= 4,0\nCorrection de npm publier\ndépendances mises à jour\nmise à jour de dermabot",
|
|
107
|
-
"it": "Redesign adattatore = > Assicurati di controllare la configurazione\nAdattamento a “dasWeather” >= 4.0\nFisso npm pubblicazione\ndipendenze aggiornate\naggiornamento dipendeabot",
|
|
108
|
-
"es": "Adaptador de rediseño = confianza Asegúrese de comprobar su configuración\nAdaptación a “dasWeather” 4.0\nCorrección npm publicar\ndependencias actualizadas\nactualización dependabot",
|
|
109
|
-
"pl": "Przeprojektowanie adaptera = > Sprawdź konfigurację\nAdaptacja do \"dasWeather\" > = 4. 0\nNapraw publikację npm\nzaktualizowane zależności\naktualizacja zależna",
|
|
110
|
-
"uk": "Редизайн адаптера => Обов'язково перевірте налаштування\nАдаптація до \"dasWeather\" >= 4.8 км\nВиправлення npm опублікування\nоновлені залежності\nоновлення залежності",
|
|
111
|
-
"zh-cn": "适应器的重新设计 请检查您的配置\n适应“DasWeather”_________________________ 4.0 (单位:百万美元)\n修复 npm 发布\n更新依赖关系\n更新依赖保护"
|
|
112
112
|
}
|
|
113
113
|
},
|
|
114
114
|
"desc": {
|
|
@@ -171,8 +171,8 @@
|
|
|
171
171
|
"maximumParallelValves": "5",
|
|
172
172
|
"switchingDistance": "0.5",
|
|
173
173
|
"pressureRelief": false,
|
|
174
|
-
"pumpSelection": "
|
|
175
|
-
"triggerMainPump": "
|
|
174
|
+
"pumpSelection": "noPump",
|
|
175
|
+
"triggerMainPump": "",
|
|
176
176
|
"triggerMainPumpPower": "2000",
|
|
177
177
|
"mainPumpLeadTime": "1",
|
|
178
178
|
"triggerCisternPump": "",
|
|
@@ -198,9 +198,12 @@
|
|
|
198
198
|
"publicHolInstance": "",
|
|
199
199
|
"latitude": "",
|
|
200
200
|
"longitude": "",
|
|
201
|
+
"sensorPressure": "",
|
|
202
|
+
"minimumPressure": "2.0",
|
|
201
203
|
"sensorOutsideTemperature": "",
|
|
202
204
|
"sensorOutsideHumidity": "",
|
|
203
205
|
"sensorWindSpeed": "",
|
|
206
|
+
"unitOfWindSpeed": "km/h",
|
|
204
207
|
"sensorBrightness": "",
|
|
205
208
|
"sensorRainfall": "",
|
|
206
209
|
"switchingBehavior": "noResponse",
|
package/lib/evaporation.js
CHANGED
|
@@ -384,7 +384,7 @@ const evaporation = {
|
|
|
384
384
|
* akt. LuftFeuchtigkeit in %
|
|
385
385
|
*
|
|
386
386
|
* @param {number} value
|
|
387
|
-
* @param {
|
|
387
|
+
* @param {number} lc
|
|
388
388
|
*/
|
|
389
389
|
setCurHumidity (value, lc) {
|
|
390
390
|
curHumidity.val = value;
|
|
@@ -394,7 +394,7 @@ const evaporation = {
|
|
|
394
394
|
* akt. Helligkeit wird auf 0 bis 7000 begrenzt
|
|
395
395
|
*
|
|
396
396
|
* @param {number} value
|
|
397
|
-
* @param {
|
|
397
|
+
* @param {number} lc
|
|
398
398
|
*/
|
|
399
399
|
setCurIllumination (value, lc) {
|
|
400
400
|
curIllumination.val = value;
|
|
@@ -404,7 +404,7 @@ const evaporation = {
|
|
|
404
404
|
* akt. Windgeschwindigkeit
|
|
405
405
|
*
|
|
406
406
|
* @param {number} value Windgeschwindigkeit in km/h
|
|
407
|
-
* @param {
|
|
407
|
+
* @param {number} lc
|
|
408
408
|
*/
|
|
409
409
|
setCurWindSpeed (value, lc) {
|
|
410
410
|
curWindSpeed.val = value;
|
package/lib/tools.js
CHANGED
|
@@ -59,7 +59,7 @@ const tools = {
|
|
|
59
59
|
*
|
|
60
60
|
* @template T
|
|
61
61
|
* @param {T[]} elements
|
|
62
|
-
* @param {
|
|
62
|
+
* @param {(element: T, index: number, elements: T[]) => Promise<boolean>} cb
|
|
63
63
|
* @returns {Promise<T | undefined>}
|
|
64
64
|
*/
|
|
65
65
|
findAsync: async function ( elements, cb) {
|
|
@@ -149,7 +149,14 @@ const tools = {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
default: {
|
|
152
|
-
adapter.log.error(
|
|
152
|
+
adapter.log.error(`„Zusätzliche Einstellungen“ => „Schaltverhalten anpassen“ enthielt keine Eingabe! Es wurde daher auf „Befehl ohne Rückmeldung“ gesetzt.`);
|
|
153
|
+
adapter.config.switchingBehavior = "noResponse";
|
|
154
|
+
return {
|
|
155
|
+
idState: id,
|
|
156
|
+
idON_TIME: null,
|
|
157
|
+
idACK: null,
|
|
158
|
+
maker: "default"
|
|
159
|
+
};
|
|
153
160
|
}
|
|
154
161
|
}
|
|
155
162
|
},
|
package/lib/valveControl.js
CHANGED
|
@@ -23,7 +23,19 @@ const threadList = [];
|
|
|
23
23
|
* Ventil mit dem größten Durchfluss (pipeFlow) für die Steuerung des Druckentlastungsventils
|
|
24
24
|
* - wird in der Funktion updateList() ermittelt
|
|
25
25
|
*/
|
|
26
|
-
const pressureReliefValve = {
|
|
26
|
+
const pressureReliefValve = {
|
|
27
|
+
enable: false,
|
|
28
|
+
name: '',
|
|
29
|
+
wateringTime: 10,
|
|
30
|
+
ac: {},
|
|
31
|
+
controller: {},
|
|
32
|
+
control: {
|
|
33
|
+
idState: undefined,
|
|
34
|
+
idON_TIME: undefined,
|
|
35
|
+
idACK: undefined,
|
|
36
|
+
maker: undefined
|
|
37
|
+
}
|
|
38
|
+
};
|
|
27
39
|
|
|
28
40
|
/**
|
|
29
41
|
* - bereit zum Boost (true: kein Boostventil aktive; false: BoostVentil aktive)
|
|
@@ -46,7 +58,12 @@ let boostReady = true,
|
|
|
46
58
|
*/
|
|
47
59
|
timeBasedRestrictionEn = false;
|
|
48
60
|
|
|
49
|
-
const updateListMarker = {
|
|
61
|
+
const updateListMarker = {
|
|
62
|
+
funcActive: false,
|
|
63
|
+
newStart: false,
|
|
64
|
+
switchingDistance: 5000,
|
|
65
|
+
cancelSwitchingDistance: {}
|
|
66
|
+
};
|
|
50
67
|
|
|
51
68
|
/**
|
|
52
69
|
* aktive Pumpendaten
|
|
@@ -64,9 +81,38 @@ const updateListMarker = {funcActive: false, newStart: false, switchingDistance:
|
|
|
64
81
|
* - ac: AbortController
|
|
65
82
|
*/
|
|
66
83
|
|
|
67
|
-
const currentPumpUse = {
|
|
68
|
-
|
|
69
|
-
|
|
84
|
+
const currentPumpUse = {
|
|
85
|
+
enable: false,
|
|
86
|
+
name: '',
|
|
87
|
+
wateringTime: 0,
|
|
88
|
+
id: '',
|
|
89
|
+
pumpCistern: false,
|
|
90
|
+
intBreak: false,
|
|
91
|
+
leadTime: 0,
|
|
92
|
+
cancelLeadTime: {},
|
|
93
|
+
pumpPower: 0,
|
|
94
|
+
restFlow: 0,
|
|
95
|
+
ac: {},
|
|
96
|
+
controller: {},
|
|
97
|
+
control: {
|
|
98
|
+
idState: undefined,
|
|
99
|
+
idON_TIME: undefined,
|
|
100
|
+
idACK: undefined,
|
|
101
|
+
maker: undefined
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
let mainPumpControl = {
|
|
105
|
+
idState: undefined,
|
|
106
|
+
idON_TIME: undefined,
|
|
107
|
+
idACK: undefined,
|
|
108
|
+
maker: undefined
|
|
109
|
+
};
|
|
110
|
+
let cisternPumpControl = {
|
|
111
|
+
idState: undefined,
|
|
112
|
+
idON_TIME: undefined,
|
|
113
|
+
idACK: undefined,
|
|
114
|
+
maker: undefined
|
|
115
|
+
};
|
|
70
116
|
|
|
71
117
|
/**
|
|
72
118
|
* Steuerspannung 24V
|
|
@@ -75,7 +121,27 @@ let cisternPumpControl = {idState: undefined, idON_TIME: undefined, idACK: undef
|
|
|
75
121
|
* - idState: Aktorerkennung "hm-rpc.0.MEQ1810129.1.STATE"
|
|
76
122
|
* - controller: controlle von Zeiten und Abbruchsignalen
|
|
77
123
|
*/
|
|
78
|
-
const controlVoltage = {
|
|
124
|
+
const controlVoltage = {
|
|
125
|
+
enable: false,
|
|
126
|
+
name: '24V',
|
|
127
|
+
wateringTime: 0,
|
|
128
|
+
ac: {},
|
|
129
|
+
controller: {},
|
|
130
|
+
control: {
|
|
131
|
+
idState: undefined,
|
|
132
|
+
idON_TIME: undefined,
|
|
133
|
+
idACK: undefined,
|
|
134
|
+
maker: undefined
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const sensorPressure = {
|
|
139
|
+
inadequatePressure: false, // true = Nicht ausreichender Druck, false = ausreichender Druck
|
|
140
|
+
name: 'Sensor Pressure',
|
|
141
|
+
value: 0,
|
|
142
|
+
state: 0,
|
|
143
|
+
ac: null
|
|
144
|
+
};
|
|
79
145
|
|
|
80
146
|
/**
|
|
81
147
|
* Schaltabstand in ms
|
|
@@ -154,7 +220,7 @@ const setValve = async (thread, val) => {
|
|
|
154
220
|
|
|
155
221
|
//adapter.log.info(`Set Valve (async () => {...}`);
|
|
156
222
|
try {
|
|
157
|
-
// Ventil
|
|
223
|
+
// ON_Time setzen wenn angegeben, damit das Ventil nach der angegebenen Zeit automatisch ausgeschaltet wird (z.B. wenn der Ausschaltbefehl nicht ausgeführt werden kann, z.B Funkstörung)
|
|
158
224
|
if (thread.control.idON_TIME !== null) {
|
|
159
225
|
await adapter.setForeignStateAsync(thread.control.idON_TIME, {
|
|
160
226
|
val: val ? Math.ceil(thread.wateringTime + 5) : 0,
|
|
@@ -162,7 +228,7 @@ const setValve = async (thread, val) => {
|
|
|
162
228
|
});
|
|
163
229
|
await asyncTime.setTimeout(200, undefined, undefined);
|
|
164
230
|
}
|
|
165
|
-
|
|
231
|
+
// Ventil ansteuern
|
|
166
232
|
const _setValve = await adapter.setForeignStateAsync(thread.control.idState, {
|
|
167
233
|
val: val,
|
|
168
234
|
ack: false
|
|
@@ -263,6 +329,9 @@ const delList = async (killList) => {
|
|
|
263
329
|
|
|
264
330
|
/**
|
|
265
331
|
* currentConsumption aktueller Verbrauch ermitteln
|
|
332
|
+
* - curFlow: aktuelle Restfördertleistung der Pumpe
|
|
333
|
+
* - parallel: aktuelle Anzahl der eingeschalteten Ventile
|
|
334
|
+
* - pumpRequired: Pumpe erforderlich (true/false)
|
|
266
335
|
*
|
|
267
336
|
* @param {boolean} write
|
|
268
337
|
* @returns {Promise<{curFlow:number, parallel:number, pumpRequired:boolean}>}
|
|
@@ -274,13 +343,15 @@ const currentConsumption = async (write) => {
|
|
|
274
343
|
parallel = 0,
|
|
275
344
|
pumpRequired = false;
|
|
276
345
|
adapter.log.debug(`currentConsumption curFlow: ${curFlow}, ${currentPumpUse.intBreak} => ${currentPumpUse.intBreak ? 0 : currentPumpUse.pumpPower}`);
|
|
277
|
-
if (!currentPumpUse.intBreak
|
|
346
|
+
if (!currentPumpUse.intBreak
|
|
347
|
+
&& !sensorPressure.inadequatePressure
|
|
348
|
+
) {
|
|
278
349
|
// ermitteln von curPipe und der Anzahl der parallelen Stränge
|
|
279
350
|
for (const entry of threadList){
|
|
280
351
|
if (entry.state === 'wait') pumpRequired = true; // state => wait
|
|
281
|
-
if (entry.enable === true
|
|
282
|
-
&& entry.extBreak === false
|
|
283
|
-
&& timeBasedRestrictionEn === false
|
|
352
|
+
if (entry.enable === true // Ventil eingeschaltet
|
|
353
|
+
&& entry.extBreak === false // && nicht in der externen Pause (extBreak)
|
|
354
|
+
&& timeBasedRestrictionEn === false // && nicht in der zeitlichen Bewässerungspause
|
|
284
355
|
) {
|
|
285
356
|
curFlow -= entry.pipeFlow; // // ermitteln der RestFörderkapazität
|
|
286
357
|
parallel ++; // Anzahl der Bewässerungsstellen um 1 erhöhen
|
|
@@ -456,7 +527,7 @@ const countSprinkleTime = async (entry) => {
|
|
|
456
527
|
/**
|
|
457
528
|
* Timer zum ausschalten des Boost
|
|
458
529
|
*
|
|
459
|
-
* @param {
|
|
530
|
+
* @param {object} entry
|
|
460
531
|
*/
|
|
461
532
|
const boostOnTimer = async (entry) => {
|
|
462
533
|
entry.ac.acBoostOnTimer = new AbortController;
|
|
@@ -538,7 +609,7 @@ const updateList = async () => {
|
|
|
538
609
|
: false;
|
|
539
610
|
|
|
540
611
|
/**
|
|
541
|
-
*
|
|
612
|
+
* Find das Ventil mit dem größten Durchfluss (pipeFlow) für die Steuerung des Druckentlastungsventils
|
|
542
613
|
* - Wenn die Bewässerung beendet wird, soll der Druck in den Leitungen durch kurzes Öffnen eines Druckentlastungsventils abgebaut werden,
|
|
543
614
|
* um die Lebensdauer des Systems zu erhöhen. Hierzu wird das Ventil mit dem Größten Durchfluss (pipeFlow) für 10 Sekunden angesteuert.
|
|
544
615
|
*/
|
|
@@ -574,7 +645,7 @@ const updateList = async () => {
|
|
|
574
645
|
try {
|
|
575
646
|
if (adapter.config.triggerControlVoltage
|
|
576
647
|
&& controlVoltage.enable === false
|
|
577
|
-
|| adjustment === true
|
|
648
|
+
|| adjustment === true // Anpassung ON_Time wenn Laufzeit zu kurz, damit die 24V Versorgung während der Laufzeit nicht ausgeschaltet wird
|
|
578
649
|
) {
|
|
579
650
|
controlVoltage.wateringTime = sumOfWateringTime > controlVoltage.wateringTime ? sumOfWateringTime + 5 : controlVoltage.wateringTime; // Schaltzeit der 24V Versorgung entsprechend der maximalen Laufzeit aller Ventile in der threadList anpassen
|
|
580
651
|
const _controlVoltage = await setValve(controlVoltage, true);
|
|
@@ -594,7 +665,7 @@ const updateList = async () => {
|
|
|
594
665
|
try {
|
|
595
666
|
if (adapter.config.pumpSelection !== 'noPump'
|
|
596
667
|
&& currentPumpUse.enable === false
|
|
597
|
-
|| adjustment === true
|
|
668
|
+
|| adjustment === true // Anpassung ON_Time wenn Laufzeit zu kurz, damit die Pumpe während der Laufzeit nicht ausgeschaltet wird
|
|
598
669
|
) {
|
|
599
670
|
currentPumpUse.wateringTime = sumOfWateringTime > currentPumpUse.wateringTime ? sumOfWateringTime : currentPumpUse.wateringTime; // Schaltzeit der Pumpe entsprechend der maximalen Laufzeit aller Ventile in der threadList anpassen
|
|
600
671
|
const _currentPumpUse = await setValve(currentPumpUse, true);
|
|
@@ -744,7 +815,6 @@ const updateList = async () => {
|
|
|
744
815
|
try {
|
|
745
816
|
const empty = await findPressureReliefValve();
|
|
746
817
|
const _pressureReliefIO = await pressureReliefIO();
|
|
747
|
-
adapter.log.info(`pressureReliefIO: ${ _pressureReliefIO }, Data: ${ JSON.stringify(_pressureReliefIO) }`);
|
|
748
818
|
if (empty && _pressureReliefIO === 0) { // Ventil gefunden und alle Ventile haben ihre Laufzeit beendet
|
|
749
819
|
pressureReliefValve.name = empty.objectName;
|
|
750
820
|
pressureReliefValve.wateringTime = 10;
|
|
@@ -817,7 +887,7 @@ const setActualPump = async () => {
|
|
|
817
887
|
/* Pumpe AUS => Zisternen-Bewässerung nicht aktiviert */
|
|
818
888
|
if (adapter.config.triggerCisternPump) {
|
|
819
889
|
await adapter.setStateAsync('info.cisternState', {
|
|
820
|
-
val: `Cistern settings are not active! ${(fillLevelCistern > 0) ? (`
|
|
890
|
+
val: `Cistern settings are not active! ${(fillLevelCistern > 0) ? (` ${fillLevelCistern}% ${(adapter.config.triggerMinCisternLevel !== '') ? (` ${adapter.config.triggerMinCisternLevel}%`) : ('')}`):('')}`,
|
|
821
891
|
ack: true
|
|
822
892
|
});
|
|
823
893
|
}
|
|
@@ -853,7 +923,7 @@ const setActualPump = async () => {
|
|
|
853
923
|
}
|
|
854
924
|
/* Info aktualisieren */
|
|
855
925
|
await adapter.setStateAsync('info.cisternState', {
|
|
856
|
-
val: `${ (currentPumpUse.intBreak === true) ? 'Cistern empty: ' : 'Cistern filled: ' }
|
|
926
|
+
val: `${ (currentPumpUse.intBreak === true) ? 'Cistern empty: ' : 'Cistern filled: ' } ${ fillLevelCistern } % (${ adapter.config.triggerMinCisternLevel } %)`,
|
|
857
927
|
ack: true
|
|
858
928
|
});
|
|
859
929
|
break;
|
|
@@ -926,7 +996,7 @@ const setActualPump = async () => {
|
|
|
926
996
|
}
|
|
927
997
|
/* Info aktualisieren */
|
|
928
998
|
await adapter.setStateAsync('info.cisternState', {
|
|
929
|
-
val: `${ (currentPumpUse.pumpCistern === false) ? 'Cistern empty: ' : 'Cistern filled: ' }
|
|
999
|
+
val: `${ (currentPumpUse.pumpCistern === false) ? 'Cistern empty: ' : 'Cistern filled: ' } ${ fillLevelCistern } % (${ adapter.config.triggerMinCisternLevel } %)`,
|
|
930
1000
|
ack: true
|
|
931
1001
|
});
|
|
932
1002
|
break;
|
|
@@ -1325,6 +1395,63 @@ const valveControl = {
|
|
|
1325
1395
|
}
|
|
1326
1396
|
}
|
|
1327
1397
|
}
|
|
1398
|
+
|
|
1399
|
+
/**
|
|
1400
|
+
* Objekt sensorPressure anlegen und abonnieren, wenn benötigt
|
|
1401
|
+
*/
|
|
1402
|
+
|
|
1403
|
+
if (typeof adapter.config.sensorPressure === 'string'
|
|
1404
|
+
&& adapter.config.sensorPressure.length > 5
|
|
1405
|
+
&& adapter.config.pumpSelection !== 'noPump'
|
|
1406
|
+
) {
|
|
1407
|
+
const _sensorPressure = await adapter.getForeignStateAsync(adapter.config.sensorPressure);
|
|
1408
|
+
if (_sensorPressure) {
|
|
1409
|
+
adapter.subscribeForeignStates(adapter.config.sensorPressure);
|
|
1410
|
+
const _waterPressure = await adapter.getObjectAsync(`info.waterPressure`);
|
|
1411
|
+
if (_waterPressure) {
|
|
1412
|
+
await adapter.setStateAsync(`info.waterPressure`, {
|
|
1413
|
+
val: `${ _sensorPressure.val }`,
|
|
1414
|
+
ack: true
|
|
1415
|
+
});
|
|
1416
|
+
} else {
|
|
1417
|
+
await adapter.setObjectNotExistsAsync(`info.waterPressure`, {
|
|
1418
|
+
type: 'state',
|
|
1419
|
+
common: {
|
|
1420
|
+
role: 'state',
|
|
1421
|
+
name: 'Water pressure',
|
|
1422
|
+
desc: {
|
|
1423
|
+
en: 'Water pressure',
|
|
1424
|
+
de: 'Wasserdruck',
|
|
1425
|
+
ru: 'Давление воды',
|
|
1426
|
+
pt: 'Pressão da água',
|
|
1427
|
+
nl: 'Waterdruk',
|
|
1428
|
+
fr: "Pression de l'eau",
|
|
1429
|
+
it: "Pressione dell'acqua",
|
|
1430
|
+
es: 'Presión del agua',
|
|
1431
|
+
pl: 'Ciśnienie wody',
|
|
1432
|
+
uk: 'Тиск води',
|
|
1433
|
+
'zh-cn': '水压'
|
|
1434
|
+
},
|
|
1435
|
+
type: 'string',
|
|
1436
|
+
read: true,
|
|
1437
|
+
write: false,
|
|
1438
|
+
def: ' --- ',
|
|
1439
|
+
unit: 'bar'
|
|
1440
|
+
},
|
|
1441
|
+
native: {},
|
|
1442
|
+
});
|
|
1443
|
+
await adapter.setStateAsync(`info.waterPressure`, {
|
|
1444
|
+
val: `${ _sensorPressure.val }`,
|
|
1445
|
+
ack: true
|
|
1446
|
+
});
|
|
1447
|
+
}
|
|
1448
|
+
} else {
|
|
1449
|
+
adapter.log.warn(`The configured pressure sensor "${ adapter.config.sensorPressure }" could not be found. Please check the configuration of the pressure sensor!`);
|
|
1450
|
+
}
|
|
1451
|
+
} else {
|
|
1452
|
+
const _waterPressure = await adapter.getObjectAsync(`info.waterPressure`);
|
|
1453
|
+
if (_waterPressure) await adapter.delObjectAsync(`info.waterPressure`);
|
|
1454
|
+
}
|
|
1328
1455
|
} catch (error) {
|
|
1329
1456
|
adapter.log.error(`initValveControl ERROR: ${error}`);
|
|
1330
1457
|
}
|
|
@@ -1342,6 +1469,7 @@ const valveControl = {
|
|
|
1342
1469
|
*/
|
|
1343
1470
|
addList: async function (sprinkleList) {
|
|
1344
1471
|
try {
|
|
1472
|
+
sensorPressure.inadequatePressure = false; // Kontrolle Drucksensorwert zurücksetzen, damit die Bewässerungsbeschränkung korrekt funktioniert, wenn der Drucksensorwert während der Bewässerungsbeschränkung unter dem Minimum lag
|
|
1345
1473
|
// kontrolle bei ausgeschalteter Pumpe, ob die Zisterne zur Bewässerung genutzt werden kann
|
|
1346
1474
|
if (adapter.config.pumpSelection === 'pumpAndCistern'
|
|
1347
1475
|
&& currentPumpUse.enable === false
|
|
@@ -1444,7 +1572,8 @@ const valveControl = {
|
|
|
1444
1572
|
}, // End addList
|
|
1445
1573
|
|
|
1446
1574
|
timeBasedRestriction: async function (enable) { //Irrigation ban => zeitliche Bewässerungsbeschränkung noch zu bearbeiten ! ! !
|
|
1447
|
-
try {
|
|
1575
|
+
try {
|
|
1576
|
+
sensorPressure.inadequatePressure = false; // Kontrolle Drucksensorwert zurücksetzen, damit die Bewässerungsbeschränkung korrekt funktioniert, wenn der Drucksensorwert während der Bewässerungsbeschränkung unter dem Minimum lag
|
|
1448
1577
|
timeBasedRestrictionEn = enable;
|
|
1449
1578
|
if (threadList) {
|
|
1450
1579
|
if (timeBasedRestrictionEn === true) { // zeitliche Bewässerungsbeschränkung aktiv
|
|
@@ -1654,8 +1783,72 @@ const valveControl = {
|
|
|
1654
1783
|
*/
|
|
1655
1784
|
getIntBreakCisternPump: function () {
|
|
1656
1785
|
return (adapter.config.pumpSelection === 'cistern') ? currentPumpUse.intBreak : false;
|
|
1657
|
-
}
|
|
1786
|
+
},
|
|
1658
1787
|
|
|
1788
|
+
/**
|
|
1789
|
+
* Setzt den Drucksensorwert
|
|
1790
|
+
* https://blog.logrocket.com/complete-guide-abortcontroller/
|
|
1791
|
+
*
|
|
1792
|
+
* @param {number} pressure
|
|
1793
|
+
*/
|
|
1794
|
+
setSensorPressure: async function (pressure) {
|
|
1795
|
+
let alteredPressure = false; // Veränderter Druck => updateList starten um Verbrauch anzupassen / Ventile ausschalten
|
|
1796
|
+
let reviews = '';
|
|
1797
|
+
try {
|
|
1798
|
+
sensorPressure.value = parseFloat(pressure).toFixed(1);
|
|
1799
|
+
if (currentPumpUse.enable === true && adapter.config.minimumPressure > pressure) {
|
|
1800
|
+
if (sensorPressure.ac === null) {
|
|
1801
|
+
sensorPressure.ac = new AbortController();
|
|
1802
|
+
await asyncTime.setTimeout(60000, undefined, { signal: sensorPressure.ac.signal }); // max. 60s warten und Drucksensorwert erneut prüfen, bevor die Pumpe ausgeschaltet wird
|
|
1803
|
+
const _currentPressure = await adapter.getForeignStateAsync(adapter.config.sensorPressure);
|
|
1804
|
+
if (_currentPressure?.val
|
|
1805
|
+
&& currentPumpUse.enable === true
|
|
1806
|
+
&& adapter.config.minimumPressure > parseFloat(_currentPressure.val)
|
|
1807
|
+
) {
|
|
1808
|
+
reviews = 'Not Okay'
|
|
1809
|
+
if (sensorPressure.inadequatePressure === false) {
|
|
1810
|
+
alteredPressure = true;
|
|
1811
|
+
sensorPressure.inadequatePressure = true;
|
|
1812
|
+
}
|
|
1813
|
+
sensorPressure.value = parseFloat(_currentPressure.val).toFixed(1);
|
|
1814
|
+
adapter.log.warn(`Pressure sensor value ${ pressure } bar is below the minimum pressure ${ adapter.config.minimumPressure } bar. The pump will be turned off to prevent damage. Please check the pressure sensor and the configuration of the minimum pressure!`);
|
|
1815
|
+
if (adapter.config.notificationEnabled) {
|
|
1816
|
+
sendMessageText.sendMessage(`Pressure sensor value ${ pressure } bar is below the minimum pressure ${ adapter.config.minimumPressure } bar. The pump will be turned off to prevent damage. Please check the pressure sensor and the configuration of the minimum pressure!`);
|
|
1817
|
+
}
|
|
1818
|
+
sensorPressure.ac.abort(); // setTimeout abbrechen, da die Pumpe bereits ausgeschaltet wird
|
|
1819
|
+
sensorPressure.ac = null; // AbortController zurücksetzen
|
|
1820
|
+
} else if (_currentPressure?.val) {
|
|
1821
|
+
reviews = 'Okay';
|
|
1822
|
+
}
|
|
1823
|
+
sensorPressure.ac = null; // AbortController zurücksetzen
|
|
1824
|
+
} else {
|
|
1825
|
+
reviews = 'I don\'t know';
|
|
1826
|
+
}
|
|
1827
|
+
} else if (currentPumpUse.enable === false || adapter.config.minimumPressure <= pressure) {
|
|
1828
|
+
reviews = 'Okay'
|
|
1829
|
+
if (sensorPressure?.ac !== null) {
|
|
1830
|
+
await sensorPressure.ac.abort(); // AbortController zurücksetzen
|
|
1831
|
+
sensorPressure.ac = null;
|
|
1832
|
+
}
|
|
1833
|
+
} else {
|
|
1834
|
+
reviews = 'Okay'
|
|
1835
|
+
}
|
|
1836
|
+
} catch (error) {
|
|
1837
|
+
if (error.name === 'AbortError') {
|
|
1838
|
+
adapter.log.debug(`setSensorPressure(${pressure}): The shutdown process was aborted because the operating pressure was restored.`);
|
|
1839
|
+
if (sensorPressure?.ac !== null) {
|
|
1840
|
+
sensorPressure.ac.abort(); // AbortController zurücksetzen
|
|
1841
|
+
sensorPressure.ac = null;
|
|
1842
|
+
}
|
|
1843
|
+
}
|
|
1844
|
+
} finally {
|
|
1845
|
+
await adapter.setStateAsync(`info.waterPressure`, {
|
|
1846
|
+
val: `${ reviews } ( ${ sensorPressure.value } bar )`,
|
|
1847
|
+
ack: true
|
|
1848
|
+
});
|
|
1849
|
+
if (alteredPressure) updateList();
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1659
1852
|
}; // End valveControl
|
|
1660
1853
|
|
|
1661
1854
|
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
|