- Home
- Deutsch
- Skripten / Logik
- Blockly
- [Vorlage] Gartenbewässerung mit 4 Ventilen
[Vorlage] Gartenbewässerung mit 4 Ventilen
-
@Kuddel sagte in [Vorlage] Gartenbewässerung mit 4 Ventilen:
Zum Thema Pause:
Das Pausieren der Ventile und anhalten der Laufzeiten habe ich fertig bekommen.
-
Hallo Kuddel,
versuche seit einiger Zeit auch eine Bewässerung hin zu bekommen und bin total beeindruckt von deinem Programm, zumindest theoretisch. das Skript ist ja wirklich beeindruckend. eine vorhergehende Version hatte ich schon soweit das, dass Programm lief aber nicht die Zeitsteuerung. das neuste kann ich nicht importieren. haben sich die Voraussetzungen geändert? -
Habe es heute mit der automatischen Bewässerung probiert. Läuft leider nicht richtig. Zumindest bei mir.
Was könnte der Fehler sein. Liegt es an mir oder am Script?![alt text] -
@fravell34gmail-com du brauchst email.x und pushover.x - dann sollte der import klappen.
-
@Hitzi-69 sagte in [Vorlage] Gartenbewässerung mit 4 Ventilen:
Was könnte der Fehler sein. Liegt es an mir oder am Script?
Erstelle mal die DPs neu - mit der aktuellesten Version von Kuddels Skript.
-
Ok. Danke
Versuche ich mal -
Also ich habe es gestern laufen lassen ohne Probleme. Heute habe ich die Dauer angepasst und dann ist das passiert:
Es funktioniert soweit aber alles wird halt nur falsch angezeigt.
-
gerade gesehen Problem ist wohl Ventil 3
Kann es sein das es hier Problem gibt? Bei 20 Minuten macht er 12001 Sekunden. Da stimmt doch etwas nicht oder?
-
Okay ich denke es war ein Zeilenumbruch der falsch war im VIS.
Update: Leider doch nicht ich schaue mir das beim nächste mal an
-
@darkiop Die Version von gestern konnte ich noch inportieren. Die aktuelle Version macht Probleme. Die adapter habe ich installiert.
-
das ist der Fehler der beim Inport kommt.
-
hat noch jemand Probleme beim importieren der aktuellsten Version ?
vllt. hat mein Export auch ne Macke -
@Kuddel Sieht gut aus. Könnte man auch in ein Adapter umwandeln? Hast du vor das selber zu machen oder kann man dir dabei helfen?
Leider ist ein Blockly, gibt es eine gute Lösung das Blockly in javascript umzuwandeln? -
@tombox Schau mal hier: https://github.com/ioBroker/AdapterRequests/issues/361
Am flexibelsten für die Zukunft wäre sicher ein Adapter.
Dazu könnte man ggf. mal ne Mindmap mit Ideen dafür erstellen.
-
-
@Kuddel Hab heut Abend nochmal die 2.1.0 laufen gelassen zum Bewässern, absolut stabil bisher.
-
@tombox sagte in [Vorlage] Gartenbewässerung mit 4 Ventilen:
Leider ist ein Blockly, gibt es eine gute Lösung das Blockly in javascript umzuwandeln?
umwandeln kannst Du es doch selbst im Javascript Adapter.
var vars_pfad, vars_aktor_typ, vars_aktor_name, vars_sonnenaufgang, vars_sonoff_ip, vars_sonnenuntergang, vars_morgens_verzoegerung_sonnenaufgang, vars_abends_verzoegerung_sonnenuntergang, vars_pumpe, startzeit_sonnenaufgang, vars_notify_mail, startzeit_sonnenaufgang_stunde, vars_bewaesserung_aktiv, vars_notify_alexa, startzeit_sonnenaufgang_minute, vars_notify_alexa_device, vars_feste_startzeit_1_uhrzeit_start_stunde, vars_feste_startzeit_1_uhrzeit_start_minute, vars_feste_startzeit_2_uhrzeit_start_stunde, vars_feste_startzeit_2_uhrzeit_start_minute, vars_feste_startzeit_3_uhrzeit_start_stunde, vars_feste_startzeit_3_uhrzeit_start_minute, timeout, vars_notify_pushover, vars_notify_log, vars_morgens_uhrzeit_start_stunde, vars_bewaesserung_pause, vars_wetter_max_temp, vars_morgens_urhzeit_start_minute, morgens, vars_schwellwert_temperatur, vars_ventil_1, vars_ventil_2, vars_ventil_3, vars_ventil_4, vars_ventil_1_dauer, vars_ventil_2_dauer, vars_ventil_3_dauer, vars_ventil_4_dauer, vars_wetter_regen, info_enduhrzeit_raw, vars_schwellwert_regen, abends, info_endzeit_stunde, vars_morgens_uhrzeit_start, info_endzeit_minute, vars_ventil_1_ende, startzeit_sonnenuntergang, vars_restlautzeit_in_sek, info_endzeit_sekunde, ventil_enduhrzeit_raw, vars_ventil_2_ende, ventil_1_dauer, vars_ventil_1_aktor, vars_ventil_2_aktor, vars_ventil_3_aktor, vars_ventil_4_aktor, startzeit_sonnenuntergang_stunde, vars_morgens_aktiv, startzeit_fix_stunde, ventil_enduhrzeit_std, vars_ventil_3_ende, vars_ventil_1_restzeit, waitmail2, vars_bewaesserung_automatik, startzeit_sonnenuntergang_minute, vars_abends_uhrzeit_start_stunde, vars_abends_uhrzeit_start_minute, startzeit_fix_minute, ventil_enduhrzeit_min, vars_ventil_4_ende, vars_ventil_1_restzeit_in_sek, vars_laufzeit_gesamt_in_sek, vars_feste_startzeit_1_uhrzeit_start, ventil_enduhrzeit_sek, ventil_enduhrzeit_verzoegerung, vars_anzahl_aktive_ventile, vars_abends_aktiv, fix_1, ventil_2_dauer, restlaufzeit_vis_min, info_endzeit_aktive_ventile, vars_ventil_2_restzeit, ventil_3_dauer, ventil_4_dauer, restlaufzeit_vis_sek, vars_lautzeit_ende_uhrzeit, vars_ventil_2_restzeit_in_sek, vars_aktives_ventil, vars_restlautzeit, startzeit_fix_2_stunde, vars_ventil_1_name, info_text, restzeit, startzeit_fix_2_minunte, vars_ventil_2_name, info_betreff, vars_feste_startzeit_2_uhrzeit_start, vars_ventil_3_restzeit, vars_ventil_3_name, vars_abends_uhrzeit_start, vars_feste_startzeit_1_aktiv, fix_2, vars_ventil_3_restzeit_in_sek, vars_ventil_4_name, restzeit_gesamt_min, restzeit_gesamt_sek, vars_ventil_1_aktor_ontime, vars_ventil_4_restzeit_in_sek, ventil_1_rest, startzeit_fix_3_stunde, vars_ventil_4_restzeit, vars_ventil_2_aktor_ontime, startzeit_fix_3_minute, ventil_2_rest, vars_feste_startzeit_3_uhrzeit_start, vars_ventil_3_aktor_ontime, vars_feste_startzeit_2_aktiv, fix_3, restzeit_ventil_min, ventil_3_rest, restzeit_ventil_sek, vars_ventil_4_aktor_ontime, ventil_4_rest, vars_feste_startzeit_3_aktiv; /** * Datenpunkte erstellen.Einmalig ausführen! */ function Datenpunkte_erstellen() { /** * Create states under 0_userdata.0 or javascript.x * Current Version: https://github.com/Mic-M/iobroker.createUserStates * Support: https://forum.iobroker.net/topic/26839/ * Autor: Mic (ioBroker) | Mic-M (github) * Version: 1.1 (26 January 2020) * Example: see https://github.com/Mic-M/iobroker.createUserStates#beispiel * ----------------------------------------------- * PLEASE NOTE: Per https://github.com/ioBroker/ioBroker.javascript/issues/474, the used function setObject() * executes the callback PRIOR to completing the state creation. Therefore, we use a setTimeout and counter. * ----------------------------------------------- * @param {string} where Where to create the state: '0_userdata.0' or 'javascript.x'. * @param {boolean} force Force state creation (overwrite), if state is existing. * @param {array} statesToCreate State(s) to create. single array or array of arrays * @param {object} [callback] Optional: a callback function -- This provided function will be executed after all states are created. */ /** * Hier bitte den Speicherort,den Pfad eintragen und den Namen der Kreise eingeben * Beispiele: speicherort = '0_userdata.0.' speicherort = 'javascript.0' pfad = 'bewasserung.' pfad = 'Gardena.Bewaesserung.' kreis1 = 'Hecke' kreis2 = 'Rasen' */ speicherort = 'javascript.0' pfad = 'bewaesserung.' kreis1 = 'Hecke' kreis2 = 'Rasen' kreis3 = 'Beet' kreis4 = 'kl. Rasen' function createUserStates(where, force, statesToCreate, callback = undefined) { const WARN = false; // Only for 0_userdata.0: Throws warning in log, if state is already existing and force=false. Default is false, so no warning in log, if state exists. const LOG_DEBUG = false; // To debug this function, set to true // Per issue #474 (https://github.com/ioBroker/ioBroker.javascript/issues/474), the used function setObject() executes the callback // before the state is actual created. Therefore, we use a setTimeout and counter as a workaround. const DELAY = 50; // Delay in milliseconds (ms). Increase this to 100, if it is not working. // Validate "where" if (where.endsWith('.')) where = where.slice(0, -1); // Remove trailing dot if ( (where.match(/^((javascript\.([1-9][0-9]|[0-9]))$|0_userdata\.0$)/) == null) ) { log('This script does not support to create states under [' + where + ']', 'error'); return; } // Prepare "statesToCreate" since we also allow a single state to create if(!Array.isArray(statesToCreate[0])) statesToCreate = [statesToCreate]; // wrap into array, if just one array and not inside an array // Add "where" to STATES_TO_CREATE for (let i = 0; i < statesToCreate.length; i++) { let lpPath = statesToCreate[i][0].replace(/\.*\./g, '.'); // replace all multiple dots like '..', '...' with a single '.' lpPath = lpPath.replace(/^((javascript\.([1-9][0-9]|[0-9])\.)|0_userdata\.0\.)/,'') // remove any javascript.x. / 0_userdata.0. from beginning lpPath = where + '.' + lpPath; // add where to beginning of string statesToCreate[i][0] = lpPath; } if (where != '0_userdata.0') { // Create States under javascript.x let numStates = statesToCreate.length; statesToCreate.forEach(function(loopParam) { if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']'); let loopInit = (loopParam[1]['def'] == undefined) ? null : loopParam[1]['def']; // mimic same behavior as createState if no init value is provided createState(loopParam[0], loopInit, force, loopParam[1], function() { numStates--; if (numStates === 0) { if (LOG_DEBUG) log('[Debug] All states processed.'); if (typeof callback === 'function') { // execute if a function was provided to parameter callback if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided'); return callback(); } else { return; } } }); }); } else { // Create States under 0_userdata.0 let numStates = statesToCreate.length; let counter = -1; statesToCreate.forEach(function(loopParam) { counter += 1; if (LOG_DEBUG) log ('[Debug] Currently processing following state: [' + loopParam[0] + ']'); if( ($(loopParam[0]).length > 0) && (existsState(loopParam[0])) ) { // Workaround due to https://github.com/ioBroker/ioBroker.javascript/issues/478 // State is existing. if (WARN && !force) log('State [' + loopParam[0] + '] is already existing and will no longer be created.', 'warn'); if (!WARN && LOG_DEBUG) log('[Debug] State [' + loopParam[0] + '] is already existing. Option force (=overwrite) is set to [' + force + '].'); if(!force) { // State exists and shall not be overwritten since force=false // So, we do not proceed. numStates--; if (numStates === 0) { if (LOG_DEBUG) log('[Debug] All states successfully processed!'); if (typeof callback === 'function') { // execute if a function was provided to parameter callback if (LOG_DEBUG) log('[Debug] An optional callback function was provided, which we are going to execute now.'); return callback(); } } else { // We need to go out and continue with next element in loop. return; // https://stackoverflow.com/questions/18452920/continue-in-cursor-foreach } } // if(!force) } // State is not existing or force = true, so we are continuing to create the state through setObject(). let obj = {}; obj.type = 'state'; obj.native = {}; obj.common = loopParam[1]; setObject(loopParam[0], obj, function (err) { if (err) { log('Cannot write object for state [' + loopParam[0] + ']: ' + err); } else { if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']') let init = null; if(loopParam[1].def === undefined) { if(loopParam[1].type === 'number') init = 0; if(loopParam[1].type === 'boolean') init = false; if(loopParam[1].type === 'string') init = ''; } else { init = loopParam[1].def; } setTimeout(function() { setState(loopParam[0], init, true, function() { if (LOG_DEBUG) log('[Debug] setState durchgeführt: ' + loopParam[0]); numStates--; if (numStates === 0) { if (LOG_DEBUG) log('[Debug] All states processed.'); if (typeof callback === 'function') { // execute if a function was provided to parameter callback if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided'); return callback(); } } }); }, DELAY + (20 * counter) ); } }); }); } } let statesToCreate = [ //Bewässerung [pfad+'bewaesserung_aktiv', {'name':'bewaesserung_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'bewaesserung_automatik', {'name':'bewaesserung_automatik','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'bewaesserung_pause', {'name':'bewaesserung_pause','type':'boolean','read':true,'write':true,'role':'switch','def':false}], //Timer [pfad+'lautzeit_gesamt_in_sek', {'name':'lautzeit_gesamt_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], [pfad+'lautzeit_ende_uhrzeit', {'name':'lautzeit_ende_uhrzeit','type':'string','read':true,'write':true,'role':'string','def': '00:00','unit': 'Uhr'}], [pfad+'restlautzeit', {'name':'restlautzeit','type': 'string','read':true,'write':true,'role':'string','def':0,'unit':'Minuten'}], [pfad+'restlautzeit_in_sek', {'name':'restlautzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], //Ventile [pfad+'ventile.aktives_ventil', {'name': 'aktives_ventil','type':'string','read':true,'write':true,'role':'string','def':'aus'}], [pfad+'ventile.anzahl_aktive_ventile', {'name':'anzahl_aktive_ventile','type':'number','read':true,'write':true,'role':'number','def':0,'min':0, 'max':4} ], //Ventil 1 [pfad+'ventile.ventil_1.ventil_1', {'name':'ventil_1','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'ventile.ventil_1.ventil_1_dauer', {'name': 'ventil_1_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], [pfad+'ventile.ventil_1.ventil_1_ende', {'name':'ventil_1_ende','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'ventile.ventil_1.ventil_1_name', {'name':'ventil_1_name','type':'string','read':true,'write':true,'role':'string','def':kreis1}], [pfad+'ventile.ventil_1.ventil_1_restzeit', {'name':'ventil_1_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'0:00','unit':'Minuten'}], [pfad+'ventile.ventil_1.ventil_1_restzeit_in_sek', {'name':'ventil_1_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], //Ventil 2 [pfad+'ventile.ventil_2.ventil_2', {'name':'ventil_2','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'ventile.ventil_2.ventil_2_dauer', {'name': 'ventil_2_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], [pfad+'ventile.ventil_2.ventil_2_ende', {'name':'ventil_2_ende','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'ventile.ventil_2.ventil_2_name', {'name':'ventil_2_name','type':'string','read':true,'write':true,'role':'string','def':kreis2}], [pfad+'ventile.ventil_2.ventil_2_restzeit', {'name':'ventil_2_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'0:00','unit':'Minuten'}], [pfad+'ventile.ventil_2.ventil_2_restzeit_in_sek', {'name':'ventil_2_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], //Ventil 3 [pfad+'ventile.ventil_3.ventil_3', {'name':'ventil_3','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'ventile.ventil_3.ventil_3_dauer', {'name': 'ventil_3_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], [pfad+'ventile.ventil_3.ventil_3_ende', {'name':'ventil_3_ende','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'ventile.ventil_3.ventil_3_name', {'name':'ventil_3_name','type':'string','read':true,'write':true,'role':'string','def':kreis3}], [pfad+'ventile.ventil_3.ventil_3_restzeit', {'name':'ventil_3_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'0:00','unit':'Minuten'}], [pfad+'ventile.ventil_3.ventil_3_restzeit_in_sek', {'name':'ventil_3_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], //Ventil 4 [pfad+'ventile.ventil_4.ventil_4', {'name':'ventil_4','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'ventile.ventil_4.ventil_4_dauer', {'name': 'ventil_4_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], [pfad+'ventile.ventil_4.ventil_4_ende', {'name':'ventil_4_ende','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'ventile.ventil_4.ventil_4_name', {'name':'ventil_4_name','type':'string','read':true,'write':true,'role':'string','def':kreis4}], [pfad+'ventile.ventil_4.ventil_4_restzeit', {'name':'ventil_4_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'0:00','unit':'Minuten'}], [pfad+'ventile.ventil_4.ventil_4_restzeit_in_sek', {'name':'ventil_4_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}], //Zeitplan [pfad+'zeitplan.sonnenaufgang', {'name':'sonnenaufgang','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'zeitplan.sonnenuntergang', {'name':'sonnenuntergang','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], //Morgens [pfad+'zeitplan.morgens_aktiv', {'name':'morgens_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'zeitplan.morgens_uhrzeit_start', {'name':'morgens_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'zeitplan.morgens_uhrzeit_start_stunde', {'name':'morgens_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':'0'}], [pfad+'zeitplan.morgens_uhrzeit_start_minute', {'name':'morgens_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':'0'}], [pfad+'zeitplan.morgens_verzoegerung_sonnenaufgang', {'name':'morgens_verzoegerung_sonnenaufgang','type': 'string','read':true,'write':true,'role':'string','def':0,'unit':'Minuten'}], //Abends [pfad+'zeitplan.abends_aktiv', {'name':'abends_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'zeitplan.abends_uhrzeit_start', {'name':'abends_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'zeitplan.abends_uhrzeit_start_stunde', {'name':'abends_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':'0'}], [pfad+'zeitplan.abends_uhrzeit_start_minute', {'name':'abends_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':'0'}], [pfad+'zeitplan.abends_verzoegerung_sonnenuntergang', {'name':'abends_verzoegerung_sonnenuntergang','type': 'string','read':true,'write':true,'role':'string','def':0,'unit':'Minuten'}], //Feste Startzeit 1 [pfad+'zeitplan.feste_startzeit_1_aktiv', {'name':'feste_startzeit_1_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'zeitplan.feste_startzeit_1_uhrzeit_start', {'name':'feste_startzeit_1_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'zeitplan.feste_startzeit_1_uhrzeit_start_stunde', {'name':'feste_startzeit_1_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':0}], [pfad+'zeitplan.feste_startzeit_1_uhrzeit_start_minute', {'name':'feste_startzeit_1_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':0}], //Feste Startzeit 2 [pfad+'zeitplan.feste_startzeit_2_aktiv', {'name':'feste_startzeit_2_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'zeitplan.feste_startzeit_2_uhrzeit_start', {'name':'feste_startzeit_2_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'zeitplan.feste_startzeit_2_uhrzeit_start_stunde', {'name':'feste_startzeit_2_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':0}], [pfad+'zeitplan.feste_startzeit_2_uhrzeit_start_minute', {'name':'feste_startzeit_2_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':0}], //Feste Startzeit 3 [pfad+'zeitplan.feste_startzeit_3_aktiv', {'name':'feste_startzeit_3_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}], [pfad+'zeitplan.feste_startzeit_3_uhrzeit_start', {'name':'feste_startzeit_3_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'00:00','unit':'Uhr'}], [pfad+'zeitplan.feste_startzeit_3_uhrzeit_start_stunde', {'name':'feste_startzeit_3_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':0}], [pfad+'zeitplan.feste_startzeit_3_uhrzeit_start_minute', {'name':'feste_startzeit_3_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':0}], ]; createUserStates(speicherort, false, statesToCreate); } /** * Beschreibe diese Funktion … */ function Variablen_definieren() { // --- Die folgenden Variablen bitte anpassen --- // Bitte hier den Speicheroprt angeben.z.B.javascript.0.bewasserung0_userdata.0.Garten.Bewasserung vars_pfad = 'javascript.0.bewaesserung.'; // Mögliche Werte:hm = Homematic Aktorsonoff = Sonoff Aktor vars_aktor_typ = 'hm'; // Hier bitte dem Namen des Aktor eintragen.hm-rpc.0.QEQ12345678sonoff.0.Bewaesserung vars_aktor_name = 'hm-rpc.0.QEQ0661312'; // Nur notendig wenn ein Sonoff Aktor verwendet wird.Bitte die IP vom aktor eintragen vars_sonoff_ip = '192.168.4.110'; // Pfad zum STATE um die Pumpe zu aktivieren.Falls // nicht notwensig, einfach das Feld leer lassen. vars_pumpe = ''; // Soll per Mail über Start und Stop informiert werden?Mögliche Werte:truefalse vars_notify_mail = true; // Soll per Alexa über Start und Stop informiert werden?Mögliche Werte:truefalse vars_notify_alexa = false; // Hier bitte den State vom Alexa Device Eintragen:Beispiel:alexa2.0.Echo-Devices.ABCDEFGHIJK.Commands.announcement vars_notify_alexa_device = 'javascript.0.echo.sprachausgabe_alle_geraete'; // Soll per Pushover über Start und Stop informiert werden?Mögliche Werte:truefalse vars_notify_pushover = false; // Sollen bei Start und Stop Log-Einträge generiert werden ?Mögliche Werte:truefalse vars_notify_log = false; // Wettervorhersage: Tagehöchstwertz.B.: // daswetter.0.NextDays.Location_1.Day_1.Maximale_Temperatur_valuefalse, // wenn keine Werte verwendet werden können vars_wetter_max_temp = 'daswetter.0.NextDays.Location_1.Day_1.Maximale_Temperatur_value'; // Hier bitte den Schwellwerte der Temepratur eingeben, ab wann in der // Automatik beregnet werden soll.z.B.: 24 fuer groesser/gleich 24°C vars_schwellwert_temperatur = 0; // Wettervorhersage: erwartete Regenmengez.B.:daswetter.0.NextDaysDetailed.Location_1.Day_1.rain_valuefalse, wenn keine Werte verwendet werden koennen vars_wetter_regen = 'daswetter.0.NextDaysDetailed.Location_1.Day_1.rain_value'; // Hier bitte den Schwellwerte der maximalen Regenmenge eingeben, // bis wann die Automatik beregnen soll.z.B.: 0.5 fuer 0.5mm vars_schwellwert_regen = 0; // --- Ab hier nichts mehr aendern --- // Bewaesserung vars_bewaesserung_aktiv = String(vars_pfad) + 'bewaesserung_aktiv'; vars_bewaesserung_automatik = String(vars_pfad) + 'bewaesserung_automatik'; vars_bewaesserung_pause = String(vars_pfad) + 'bewaesserung_pause'; // Laufzeit vars_laufzeit_gesamt_in_sek = String(vars_pfad) + 'lautzeit_gesamt_in_sek'; vars_lautzeit_ende_uhrzeit = String(vars_pfad) + 'lautzeit_ende_uhrzeit'; vars_restlautzeit = String(vars_pfad) + 'restlautzeit'; vars_restlautzeit_in_sek = String(vars_pfad) + 'restlautzeit_in_sek'; // Ventile if (vars_aktor_typ == 'hm') { vars_ventil_1_aktor = String(vars_aktor_name) + '.1.STATE'; vars_ventil_1_aktor_ontime = String(vars_aktor_name) + '.1.ON_TIME'; vars_ventil_2_aktor = String(vars_aktor_name) + '.2.STATE'; vars_ventil_2_aktor_ontime = String(vars_aktor_name) + '.2.ON_TIME'; vars_ventil_3_aktor = String(vars_aktor_name) + '.3.STATE'; vars_ventil_3_aktor_ontime = String(vars_aktor_name) + '.3.ON_TIME'; vars_ventil_4_aktor = String(vars_aktor_name) + '.4.STATE'; vars_ventil_4_aktor_ontime = String(vars_aktor_name) + '.4.ON_TIME'; } if (vars_aktor_typ == 'sonoff') { vars_ventil_1_aktor = String(vars_aktor_name) + '.POWER1'; vars_ventil_2_aktor = String(vars_aktor_name) + '.POWER2'; vars_ventil_3_aktor = String(vars_aktor_name) + '.POWER3'; vars_ventil_4_aktor = String(vars_aktor_name) + '.POWER4'; } vars_aktives_ventil = String(vars_pfad) + 'ventile.aktives_ventil'; vars_anzahl_aktive_ventile = String(vars_pfad) + 'ventile.anzahl_aktive_ventile'; // Ventil 1 vars_ventil_1 = String(vars_pfad) + 'ventile.ventil_1.ventil_1'; vars_ventil_1_dauer = String(vars_pfad) + 'ventile.ventil_1.ventil_1_dauer'; vars_ventil_1_ende = String(vars_pfad) + 'ventile.ventil_1.ventil_1_ende'; vars_ventil_1_name = String(vars_pfad) + 'ventile.ventil_1.ventil_1_name'; vars_ventil_1_restzeit = String(vars_pfad) + 'ventile.ventil_1.ventil_1_restzeit'; vars_ventil_1_restzeit_in_sek = String(vars_pfad) + 'ventile.ventil_1.ventil_1_restzeit_in_sek'; // Ventil 2 vars_ventil_2 = String(vars_pfad) + 'ventile.ventil_2.ventil_2'; vars_ventil_2_dauer = String(vars_pfad) + 'ventile.ventil_2.ventil_2_dauer'; vars_ventil_2_ende = String(vars_pfad) + 'ventile.ventil_2.ventil_2_ende'; vars_ventil_2_name = String(vars_pfad) + 'ventile.ventil_2.ventil_2_name'; vars_ventil_2_restzeit = String(vars_pfad) + 'ventile.ventil_2.ventil_2_restzeit'; vars_ventil_2_restzeit_in_sek = String(vars_pfad) + 'ventile.ventil_2.ventil_2_restzeit_in_sek'; // Ventil 3 vars_ventil_3 = String(vars_pfad) + 'ventile.ventil_3.ventil_3'; vars_ventil_3_dauer = String(vars_pfad) + 'ventile.ventil_3.ventil_3_dauer'; vars_ventil_3_ende = String(vars_pfad) + 'ventile.ventil_3.ventil_3_ende'; vars_ventil_3_name = String(vars_pfad) + 'ventile.ventil_3.ventil_3_name'; vars_ventil_3_restzeit = String(vars_pfad) + 'ventile.ventil_3.ventil_3_restzeit'; vars_ventil_3_restzeit_in_sek = String(vars_pfad) + 'ventile.ventil_3.ventil_3_restzeit_in_sek'; // Ventil 4 vars_ventil_4 = String(vars_pfad) + 'ventile.ventil_4.ventil_4'; vars_ventil_4_dauer = String(vars_pfad) + 'ventile.ventil_4.ventil_4_dauer'; vars_ventil_4_ende = String(vars_pfad) + 'ventile.ventil_4.ventil_4_ende'; vars_ventil_4_name = String(vars_pfad) + 'ventile.ventil_4.ventil_4_name'; vars_ventil_4_restzeit = String(vars_pfad) + 'ventile.ventil_4.ventil_4_restzeit'; vars_ventil_4_restzeit_in_sek = String(vars_pfad) + 'ventile.ventil_4.ventil_4_restzeit_in_sek'; // Zeitplan vars_sonnenaufgang = String(vars_pfad) + 'zeitplan.sonnenaufgang'; vars_sonnenuntergang = String(vars_pfad) + 'zeitplan.sonnenuntergang'; // Morgens vars_morgens_aktiv = String(vars_pfad) + 'zeitplan.morgens_aktiv'; vars_morgens_uhrzeit_start = String(vars_pfad) + 'zeitplan.morgens_uhrzeit_start'; vars_morgens_uhrzeit_start_stunde = String(vars_pfad) + 'zeitplan.morgens_uhrzeit_start_stunde'; vars_morgens_urhzeit_start_minute = String(vars_pfad) + 'zeitplan.morgens_uhrzeit_start_minute'; vars_morgens_verzoegerung_sonnenaufgang = String(vars_pfad) + 'zeitplan.morgens_verzoegerung_sonnenaufgang'; // Abends vars_abends_aktiv = String(vars_pfad) + 'zeitplan.abends_aktiv'; vars_abends_uhrzeit_start = String(vars_pfad) + 'zeitplan.abends_uhrzeit_start'; vars_abends_uhrzeit_start_stunde = String(vars_pfad) + 'zeitplan.abends_uhrzeit_start_stunde'; vars_abends_uhrzeit_start_minute = String(vars_pfad) + 'zeitplan.abends_uhrzeit_start_minute'; vars_abends_verzoegerung_sonnenuntergang = String(vars_pfad) + 'zeitplan.abends_verzoegerung_sonnenuntergang'; // Feste Startzeit 1 vars_feste_startzeit_1_aktiv = String(vars_pfad) + 'zeitplan.feste_startzeit_1_aktiv'; vars_feste_startzeit_1_uhrzeit_start = String(vars_pfad) + 'zeitplan.feste_startzeit_1_uhrzeit_start'; vars_feste_startzeit_1_uhrzeit_start_stunde = String(vars_pfad) + 'zeitplan.feste_startzeit_1_uhrzeit_start_stunde'; vars_feste_startzeit_1_uhrzeit_start_minute = String(vars_pfad) + 'zeitplan.feste_startzeit_1_uhrzeit_start_minute'; // Feste Startzeit 2 vars_feste_startzeit_2_aktiv = String(vars_pfad) + 'zeitplan.feste_startzeit_2_aktiv'; vars_feste_startzeit_2_uhrzeit_start = String(vars_pfad) + 'zeitplan.feste_startzeit_2_uhrzeit_start'; vars_feste_startzeit_2_uhrzeit_start_stunde = String(vars_pfad) + 'zeitplan.feste_startzeit_2_uhrzeit_start_stunde'; vars_feste_startzeit_2_uhrzeit_start_minute = String(vars_pfad) + 'zeitplan.feste_startzeit_2_uhrzeit_start_minute'; // Feste Startzeit 3 vars_feste_startzeit_3_aktiv = String(vars_pfad) + 'zeitplan.feste_startzeit_3_aktiv'; vars_feste_startzeit_3_uhrzeit_start = String(vars_pfad) + 'zeitplan.feste_startzeit_3_uhrzeit_start'; vars_feste_startzeit_3_uhrzeit_start_stunde = String(vars_pfad) + 'zeitplan.feste_startzeit_3_uhrzeit_start_stunde'; vars_feste_startzeit_3_uhrzeit_start_minute = String(vars_pfad) + 'zeitplan.feste_startzeit_3_uhrzeit_start_minute'; } Variablen_definieren(); // Sonnenauf- und Sonnenuntergang schedule("10 0,12 * * *", function () { setStateDelayed(vars_sonnenaufgang, ('' + formatDate(getDateObject(getAstroDate("sunrise", undefined, 0)), "hh:mm")), true, parseInt(0, 10), false); setStateDelayed(vars_sonnenuntergang, ('' + formatDate(getDateObject(getAstroDate("sunset", undefined, 0)), "hh:mm")), true, parseInt(0, 10), false); }); // Startzeit fuer Automatik berechnen on({id: new RegExp(vars_morgens_verzoegerung_sonnenaufgang + "|" + vars_abends_verzoegerung_sonnenuntergang + "|" + vars_sonnenaufgang + "|" + vars_sonnenuntergang), change: "ne"}, function (obj) { // Morgens startzeit_sonnenaufgang = (function () {var v = getDateObject(getAstroDate("sunrise", undefined, 0)); return v.getHours() * 60 + v.getMinutes();})() + parseFloat(getState(vars_morgens_verzoegerung_sonnenaufgang).val); startzeit_sonnenaufgang_stunde = Math.floor(startzeit_sonnenaufgang / 60); startzeit_sonnenaufgang_minute = startzeit_sonnenaufgang - startzeit_sonnenaufgang_stunde * 60; // Stunde und Minute in Objekt fuer cron setStateDelayed(vars_morgens_uhrzeit_start_stunde, ('' + startzeit_sonnenaufgang_stunde), true, parseInt(0, 10), false); setStateDelayed(vars_morgens_urhzeit_start_minute, ('' + startzeit_sonnenaufgang_minute), true, parseInt(0, 10), false); // Uhrzeit fuer VIS if (startzeit_sonnenaufgang_stunde < 10) { startzeit_sonnenaufgang_stunde = '0' + String(startzeit_sonnenaufgang_stunde); } if (startzeit_sonnenaufgang_minute < 10) { startzeit_sonnenaufgang_minute = '0' + String(startzeit_sonnenaufgang_minute); } setStateDelayed(vars_morgens_uhrzeit_start, ([startzeit_sonnenaufgang_stunde,':',startzeit_sonnenaufgang_minute].join('')), true, parseInt(0, 10), false); // Abends startzeit_sonnenuntergang = (function () {var v = getDateObject(getAstroDate("sunset", undefined, 0)); return v.getHours() * 60 + v.getMinutes();})() + parseFloat(getState(vars_abends_verzoegerung_sonnenuntergang).val); startzeit_sonnenuntergang_stunde = Math.floor(startzeit_sonnenuntergang / 60); startzeit_sonnenuntergang_minute = startzeit_sonnenuntergang - startzeit_sonnenuntergang_stunde * 60; // Stunde und Minute in Objekt fuer cron setStateDelayed(vars_abends_uhrzeit_start_stunde, ('' + startzeit_sonnenuntergang_stunde), true, parseInt(0, 10), false); setStateDelayed(vars_abends_uhrzeit_start_minute, ('' + startzeit_sonnenuntergang_minute), true, parseInt(0, 10), false); // Uhrzeit fuer VIS if (startzeit_sonnenuntergang_stunde < 10) { startzeit_sonnenuntergang_stunde = '0' + String(startzeit_sonnenuntergang_stunde); } if (startzeit_sonnenuntergang_minute < 10) { startzeit_sonnenuntergang_minute = '0' + String(startzeit_sonnenuntergang_minute); } setStateDelayed(vars_abends_uhrzeit_start, ([startzeit_sonnenuntergang_stunde,':',startzeit_sonnenuntergang_minute].join('')), true, parseInt(0, 10), false); }); // Pumpe einschalten on({id: vars_bewaesserung_aktiv, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState(vars_bewaesserung_aktiv).val == true && vars_pumpe != '') { if (getState(vars_pumpe).val == false) { setStateDelayed(vars_pumpe, true, false, parseInt(0, 10), false); } } else if (getState(vars_bewaesserung_aktiv).val == false && vars_pumpe != '') { if (getState(vars_pumpe).val == true) { setStateDelayed(vars_pumpe, false, false, parseInt(0, 10), false); } } }); // Bewaesserung autom. starten on({id: new RegExp(vars_morgens_verzoegerung_sonnenaufgang + "|" + vars_abends_verzoegerung_sonnenuntergang + "|" + vars_feste_startzeit_1_uhrzeit_start_stunde + "|" + vars_feste_startzeit_1_uhrzeit_start_minute + "|" + vars_feste_startzeit_2_uhrzeit_start_stunde + "|" + vars_feste_startzeit_2_uhrzeit_start_minute + "|" + vars_feste_startzeit_3_uhrzeit_start_stunde + "|" + vars_feste_startzeit_3_uhrzeit_start_minute + "|" + vars_sonnenaufgang), change: "ne"}, function (obj) { timeout = setTimeout(function () { // Morgens (function () {if (morgens) {clearSchedule(morgens); morgens = null;}})(); morgens = schedule(('' + getState(vars_morgens_urhzeit_start_minute).val).trim() + ' ' + ('' + getState(vars_morgens_uhrzeit_start_stunde).val).trim() + ' ' + '*'.trim() + ' ' + '4-10'.trim() + ' ' + '*'.trim(), function () { if (getState(vars_morgens_aktiv).val == true && getState(vars_bewaesserung_automatik).val == true && getState(vars_bewaesserung_aktiv).val == true && (getState(vars_wetter_max_temp).val >= vars_schwellwert_temperatur || vars_wetter_max_temp == 'false') && (getState(vars_wetter_regen).val <= vars_schwellwert_regen || vars_wetter_regen == 'false')) { setStateDelayed(vars_bewaesserung_aktiv, true, true, parseInt(0, 10), false); } }); // Abends (function () {if (abends) {clearSchedule(abends); abends = null;}})(); abends = schedule(('' + getState(vars_abends_uhrzeit_start_minute).val).trim() + ' ' + ('' + getState(vars_abends_uhrzeit_start_stunde).val).trim() + ' ' + '*'.trim() + ' ' + '4-10'.trim() + ' ' + '*'.trim(), function () { if (getState(vars_abends_aktiv).val == true && getState(vars_bewaesserung_automatik).val == true && getState(vars_bewaesserung_aktiv).val == true && (getState(vars_wetter_max_temp).val >= vars_schwellwert_temperatur || vars_wetter_max_temp == 'false') && (getState(vars_wetter_regen).val <= vars_schwellwert_regen || vars_wetter_regen == 'false')) { setStateDelayed(vars_bewaesserung_aktiv, true, true, parseInt(0, 10), false); } }); // Feste Uhrzeit 1 if (getState(vars_feste_startzeit_1_uhrzeit_start_stunde).val < '10') { startzeit_fix_stunde = '0' + String(getState(vars_feste_startzeit_1_uhrzeit_start_stunde).val); } else { startzeit_fix_stunde = getState(vars_feste_startzeit_1_uhrzeit_start_stunde).val; } if (getState(vars_feste_startzeit_1_uhrzeit_start_minute).val < '10') { startzeit_fix_minute = '0' + String(getState(vars_feste_startzeit_1_uhrzeit_start_minute).val); } else { startzeit_fix_minute = getState(vars_feste_startzeit_1_uhrzeit_start_minute).val; } setStateDelayed(vars_feste_startzeit_1_uhrzeit_start, ([startzeit_fix_stunde,':',startzeit_fix_minute].join('')), true, parseInt(0, 10), false); (function () {if (fix_1) {clearSchedule(fix_1); fix_1 = null;}})(); fix_1 = schedule(('' + getState(vars_feste_startzeit_1_uhrzeit_start_minute).val).trim() + ' ' + ('' + getState(vars_feste_startzeit_1_uhrzeit_start_stunde).val).trim() + ' ' + '*'.trim() + ' ' + '4-10'.trim() + ' ' + '*'.trim(), function () { if (getState(vars_feste_startzeit_1_aktiv).val == true && getState(vars_bewaesserung_automatik).val == true && getState(vars_bewaesserung_aktiv).val == false && (getState(vars_wetter_max_temp).val >= vars_schwellwert_temperatur || vars_wetter_max_temp == 'false') && (getState(vars_wetter_regen).val <= vars_schwellwert_regen || vars_wetter_regen == 'false')) { setStateDelayed(vars_bewaesserung_aktiv, true, true, parseInt(0, 10), false); } }); // Feste Uhrzeit 2 if (getState(vars_feste_startzeit_2_uhrzeit_start_stunde).val < '10') { startzeit_fix_2_stunde = '0' + String(getState(vars_feste_startzeit_2_uhrzeit_start_stunde).val); } else { startzeit_fix_2_stunde = getState(vars_feste_startzeit_2_uhrzeit_start_stunde).val; } if (getState(vars_feste_startzeit_2_uhrzeit_start_minute).val < '10') { startzeit_fix_2_minunte = '0' + String(getState(vars_feste_startzeit_2_uhrzeit_start_minute).val); } else { startzeit_fix_2_minunte = getState(vars_feste_startzeit_2_uhrzeit_start_minute).val; } setStateDelayed(vars_feste_startzeit_2_uhrzeit_start, ([startzeit_fix_2_stunde,':',startzeit_fix_2_minunte].join('')), true, parseInt(0, 10), false); (function () {if (fix_2) {clearSchedule(fix_2); fix_2 = null;}})(); fix_2 = schedule(('' + getState(vars_feste_startzeit_2_uhrzeit_start_minute).val).trim() + ' ' + ('' + getState(vars_feste_startzeit_2_uhrzeit_start_stunde).val).trim() + ' ' + '*'.trim() + ' ' + '4-10'.trim() + ' ' + '*'.trim(), function () { if (getState(vars_feste_startzeit_2_aktiv).val == true && getState(vars_bewaesserung_automatik).val == true && getState(vars_bewaesserung_aktiv).val == false && (getState(vars_wetter_max_temp).val >= vars_schwellwert_temperatur || vars_wetter_max_temp == 'false') && (getState(vars_wetter_regen).val <= vars_schwellwert_regen || vars_wetter_regen == 'false')) { setStateDelayed(vars_bewaesserung_aktiv, true, true, parseInt(0, 10), false); } }); // Feste Uhrzeit 3 if (getState(vars_feste_startzeit_3_uhrzeit_start_stunde).val < '10') { startzeit_fix_3_stunde = '0' + String(getState(vars_feste_startzeit_3_uhrzeit_start_stunde).val); } else { startzeit_fix_3_stunde = getState(vars_feste_startzeit_3_uhrzeit_start_stunde).val; } if (getState(vars_feste_startzeit_3_uhrzeit_start_minute).val < '10') { startzeit_fix_3_minute = '0' + String(getState(vars_feste_startzeit_3_uhrzeit_start_minute).val); } else { startzeit_fix_3_minute = getState(vars_feste_startzeit_3_uhrzeit_start_minute).val; } setStateDelayed(vars_feste_startzeit_3_uhrzeit_start, ([startzeit_fix_3_stunde,':',startzeit_fix_3_minute].join('')), true, parseInt(0, 10), false); (function () {if (fix_3) {clearSchedule(fix_3); fix_3 = null;}})(); fix_3 = schedule(('' + getState(vars_feste_startzeit_3_uhrzeit_start_minute).val).trim() + ' ' + ('' + getState(vars_feste_startzeit_3_uhrzeit_start_stunde).val).trim() + ' ' + '*'.trim() + ' ' + '4-10'.trim() + ' ' + '*'.trim(), function () { if (getState(vars_feste_startzeit_3_aktiv).val == true && getState(vars_bewaesserung_automatik).val == true && getState(vars_bewaesserung_aktiv).val == false && (getState(vars_wetter_max_temp).val >= vars_schwellwert_temperatur || vars_wetter_max_temp == 'false') && (getState(vars_wetter_regen).val <= vars_schwellwert_regen || vars_wetter_regen == 'false')) { setStateDelayed(vars_bewaesserung_aktiv, true, true, parseInt(0, 10), false); } }); }, 1000); }); // Enduhrzeiten berechnen on({id: new RegExp(vars_bewaesserung_aktiv + "|" + vars_bewaesserung_pause), change: "ne"}, function (obj) { // Gesamt if (getState(vars_bewaesserung_aktiv).val == true) { // Enduhrzeit berechnen // Jedes Ventil startet mit einer Verzögerung von 1 Sekunde. // Daher wird pro Ventil 1 Sekunde auf die Gesamtlaufzeit drauf // gerechnetGesamtlaufzeit = Jetzt + Laufzeit + Umschaltsekunden info_enduhrzeit_raw = (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) + getState(vars_restlautzeit_in_sek).val; info_endzeit_stunde = Math.floor(info_enduhrzeit_raw / 3600); info_endzeit_minute = Math.floor((info_enduhrzeit_raw - info_endzeit_stunde * 3600) / 60); info_endzeit_sekunde = info_enduhrzeit_raw - info_endzeit_stunde * 3600; info_endzeit_sekunde = info_endzeit_sekunde - info_endzeit_minute * 60; // Mail Stunden formatieren bei kleiner 10 if (info_endzeit_stunde < 10) { info_endzeit_stunde = '0' + String(info_endzeit_stunde); } // Mail Minuten formatieren bei kleiner 10 if (info_endzeit_minute < 10) { info_endzeit_minute = '0' + String(info_endzeit_minute); } // Mail Sekunden formatieren bei kleiner 10 if (info_endzeit_sekunde < '10') { info_endzeit_sekunde = '0' + String((new Date().getSeconds())); } setStateDelayed(vars_lautzeit_ende_uhrzeit, ([info_endzeit_stunde,':',info_endzeit_minute,':',info_endzeit_sekunde,' Uhr'].join('')), true, parseInt(0, 10), false); } // pro Ventil if (getState(vars_bewaesserung_aktiv).val == true && getState(vars_bewaesserung_pause).val == false) { // Ventil 1 End-Uhrzeit if (getState(vars_ventil_1).val == true) { // Plus 1 Sekuden fpr das setzen des wertes ON_TIME des HM Aktors ventil_enduhrzeit_raw = (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) + getState(vars_ventil_1_restzeit_in_sek).val + 1; ventil_enduhrzeit_std = Math.floor(ventil_enduhrzeit_raw / 3600); ventil_enduhrzeit_min = Math.floor((ventil_enduhrzeit_raw - ventil_enduhrzeit_std * 3600) / 60); ventil_enduhrzeit_sek = ventil_enduhrzeit_raw - ventil_enduhrzeit_std * 3600; ventil_enduhrzeit_sek = ventil_enduhrzeit_sek - ventil_enduhrzeit_min * 60; if (ventil_enduhrzeit_std < 10) { ventil_enduhrzeit_std = '0' + String(ventil_enduhrzeit_std); } if (ventil_enduhrzeit_min < 10) { ventil_enduhrzeit_min = '0' + String(ventil_enduhrzeit_min); } if (ventil_enduhrzeit_sek < 10) { ventil_enduhrzeit_sek = '0' + String(ventil_enduhrzeit_sek); } setStateDelayed(vars_ventil_1_ende, ([ventil_enduhrzeit_std,':',ventil_enduhrzeit_min,':',ventil_enduhrzeit_sek].join('')), true, parseInt(0, 10), false); } else { setStateDelayed(vars_ventil_1_ende, 'deaktiviert', true, parseInt(0, 10), false); } // Ventil 2 End-Uhrzeit if (getState(vars_ventil_2).val == true) { // Pro aktivem Ventil kommt 1 Sekunde Verzögerung für das setzen von ON_TIME hinzu if (getState(vars_ventil_1).val == false) { ventil_enduhrzeit_verzoegerung = 1; } else if (getState(vars_ventil_1).val == true) { ventil_enduhrzeit_verzoegerung = 2; } ventil_enduhrzeit_raw = (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) + getState(vars_ventil_1_restzeit_in_sek).val + getState(vars_ventil_2_restzeit_in_sek).val + ventil_enduhrzeit_verzoegerung; ventil_enduhrzeit_std = Math.floor(ventil_enduhrzeit_raw / 3600); ventil_enduhrzeit_min = Math.floor((ventil_enduhrzeit_raw - ventil_enduhrzeit_std * 3600) / 60); ventil_enduhrzeit_sek = ventil_enduhrzeit_raw - ventil_enduhrzeit_std * 3600; ventil_enduhrzeit_sek = ventil_enduhrzeit_sek - ventil_enduhrzeit_min * 60; if (ventil_enduhrzeit_std < 10) { ventil_enduhrzeit_std = '0' + String(ventil_enduhrzeit_std); } if (ventil_enduhrzeit_min < 10) { ventil_enduhrzeit_min = '0' + String(ventil_enduhrzeit_min); } if (ventil_enduhrzeit_sek < 10) { ventil_enduhrzeit_sek = '0' + String(ventil_enduhrzeit_sek); } setStateDelayed(vars_ventil_2_ende, ([ventil_enduhrzeit_std,':',ventil_enduhrzeit_min,':',ventil_enduhrzeit_sek].join('')), true, parseInt(0, 10), false); } else { setStateDelayed(vars_ventil_2_ende, 'deaktiviert', true, parseInt(0, 10), false); } // Ventil 3 End-Uhrzeit if (getState(vars_ventil_3).val == true) { // Pro aktivem Ventil kommt 1 Sekunde Verzögerung für das setzen von ON_TIME hinzu if (getState(vars_ventil_3).val == true) { if (getState(vars_ventil_1).val == false && getState(vars_ventil_2).val == false) { ventil_enduhrzeit_verzoegerung = 1; } if (getState(vars_ventil_1).val == true || getState(vars_ventil_2).val == true) { ventil_enduhrzeit_verzoegerung = 2; } if (getState(vars_ventil_1).val == true && getState(vars_ventil_2).val == true) { ventil_enduhrzeit_verzoegerung = 3; } } ventil_enduhrzeit_raw = (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) + getState(vars_ventil_1_restzeit_in_sek).val + getState(vars_ventil_2_restzeit_in_sek).val + getState(vars_ventil_3_restzeit_in_sek).val + ventil_enduhrzeit_verzoegerung; ventil_enduhrzeit_std = Math.floor(ventil_enduhrzeit_raw / 3600); ventil_enduhrzeit_min = Math.floor((ventil_enduhrzeit_raw - ventil_enduhrzeit_std * 3600) / 60); ventil_enduhrzeit_sek = (ventil_enduhrzeit_raw - ventil_enduhrzeit_std * 3600) - ventil_enduhrzeit_min * 60; if (ventil_enduhrzeit_std < 10) { ventil_enduhrzeit_std = '0' + String(ventil_enduhrzeit_std); } if (ventil_enduhrzeit_min < 10) { ventil_enduhrzeit_min = '0' + String(ventil_enduhrzeit_min); } if (ventil_enduhrzeit_sek < 10) { ventil_enduhrzeit_sek = '0' + String(ventil_enduhrzeit_sek); } setStateDelayed(vars_ventil_3_ende, ([ventil_enduhrzeit_std,':',ventil_enduhrzeit_min,':',ventil_enduhrzeit_sek].join('')), true, parseInt(0, 10), false); } else { setStateDelayed(vars_ventil_3_ende, 'deaktiviert', true, parseInt(0, 10), false); } // Ventil 4 End-Uhrzeit if (getState(vars_ventil_4).val == true) { // Pro aktivem Ventil kommt 1 Sekunde Verzögerung für das setzen von ON_TIME hinzu if (getState(vars_ventil_4).val == true) { if (getState(vars_ventil_1).val == false && getState(vars_ventil_2).val == false && getState(vars_ventil_3).val == false) { ventil_enduhrzeit_verzoegerung = 1; } if (getState(vars_ventil_1).val == true || getState(vars_ventil_2).val == true || getState(vars_ventil_3).val == true) { ventil_enduhrzeit_verzoegerung = 2; } if (getState(vars_ventil_1).val == true && getState(vars_ventil_2).val == true && getState(vars_ventil_3).val == false) { ventil_enduhrzeit_verzoegerung = 3; } if (getState(vars_ventil_1).val == false && getState(vars_ventil_2).val == true && getState(vars_ventil_3).val == true) { ventil_enduhrzeit_verzoegerung = 3; } if (getState(vars_ventil_1).val == true && getState(vars_ventil_2).val == false && getState(vars_ventil_3).val == true) { ventil_enduhrzeit_verzoegerung = 3; } if (getState(vars_ventil_1).val == true && getState(vars_ventil_2).val == true && getState(vars_ventil_3).val == true) { ventil_enduhrzeit_verzoegerung = 4; } } ventil_enduhrzeit_raw = (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) + getState(vars_ventil_1_restzeit_in_sek).val + getState(vars_ventil_2_restzeit_in_sek).val + getState(vars_ventil_3_restzeit_in_sek).val + getState(vars_ventil_4_restzeit_in_sek).val + ventil_enduhrzeit_verzoegerung; ventil_enduhrzeit_std = Math.floor(ventil_enduhrzeit_raw / 3600); ventil_enduhrzeit_min = Math.floor((ventil_enduhrzeit_raw - ventil_enduhrzeit_std * 3600) / 60); ventil_enduhrzeit_sek = (ventil_enduhrzeit_raw - ventil_enduhrzeit_std * 3600) - ventil_enduhrzeit_min * 60; if (ventil_enduhrzeit_std < 10) { ventil_enduhrzeit_std = '0' + String(ventil_enduhrzeit_std); } if (ventil_enduhrzeit_min < 10) { ventil_enduhrzeit_min = '0' + String(ventil_enduhrzeit_min); } if (ventil_enduhrzeit_sek < 10) { ventil_enduhrzeit_sek = '0' + String(ventil_enduhrzeit_sek); } setStateDelayed(vars_ventil_4_ende, ([ventil_enduhrzeit_std,':',ventil_enduhrzeit_min,':',ventil_enduhrzeit_sek].join('')), true, parseInt(0, 10), false); } else { setStateDelayed(vars_ventil_4_ende, 'deaktiviert', true, parseInt(0, 10), false); } } else if (getState(vars_bewaesserung_aktiv).val == false) { setStateDelayed(vars_ventil_1_ende, '', true, parseInt(0, 10), false); setStateDelayed(vars_ventil_2_ende, '', true, parseInt(0, 10), false); setStateDelayed(vars_ventil_3_ende, '', true, parseInt(0, 10), false); setStateDelayed(vars_ventil_4_ende, '', true, parseInt(0, 10), false); } }); // Laufzeiten setzen on({id: new RegExp(vars_ventil_1 + "|" + vars_ventil_2 + "|" + vars_ventil_3 + "|" + vars_ventil_4 + "|" + vars_ventil_1_dauer + "|" + vars_ventil_2_dauer + "|" + vars_ventil_3_dauer + "|" + vars_ventil_4_dauer + "|" + vars_bewaesserung_aktiv), change: "ne"}, function (obj) { // Laufzeit Ventile if (getState(vars_bewaesserung_aktiv).val == false) { // Ventil 1 - Laufzeit if (getState(vars_ventil_1).val == true) { ventil_1_dauer = getState(vars_ventil_1_dauer).val; } else { ventil_1_dauer = 0; } setStateDelayed(vars_ventil_1_restzeit, (String(ventil_1_dauer / 60) + ':00'), true, parseInt(0, 10), false); setStateDelayed(vars_ventil_1_restzeit_in_sek, ventil_1_dauer, true, parseInt(0, 10), false); // Ventil 2 - Laufzeit if (getState(vars_ventil_2).val == true) { ventil_2_dauer = getState(vars_ventil_2_dauer).val; } else { ventil_2_dauer = 0; } setStateDelayed(vars_ventil_2_restzeit, (String(ventil_2_dauer / 60) + ':00'), true, parseInt(0, 10), false); setStateDelayed(vars_ventil_2_restzeit_in_sek, ventil_2_dauer, true, parseInt(0, 10), false); // Ventil 3 - Laufzeit if (getState(vars_ventil_3).val == true) { ventil_3_dauer = getState(vars_ventil_3_dauer).val; } else { ventil_3_dauer = 0; } setStateDelayed(vars_ventil_3_restzeit, (String(ventil_3_dauer / 60) + ':00'), true, parseInt(0, 10), false); setStateDelayed(vars_ventil_3_restzeit_in_sek, ventil_3_dauer, true, parseInt(0, 10), false); // Ventil 4 - Laufzeit if (getState(vars_ventil_4).val == true) { ventil_4_dauer = getState(vars_ventil_4_dauer).val; } else { ventil_4_dauer = 0; } setStateDelayed(vars_ventil_4_restzeit, (String(ventil_4_dauer / 60) + ':00'), true, parseInt(0, 10), false); setStateDelayed(vars_ventil_4_restzeit_in_sek, ventil_4_dauer, true, parseInt(0, 10), false); } // Gesamtlaufzeit if (getState(vars_bewaesserung_aktiv).val == false) { // Gesamtlaufzeit in Sek // Pro aktives Ventil wird auf die Gesamtlaufzeit eine // Sekunden drauf gerechnet für das setzen der ON_TIME setStateDelayed(vars_laufzeit_gesamt_in_sek, (ventil_1_dauer + ventil_2_dauer + ventil_3_dauer + ventil_4_dauer + getState(vars_ventil_1).val + getState(vars_ventil_2).val + getState(vars_ventil_3).val + getState(vars_ventil_4).val), true, parseInt(0, 10), false); setStateDelayed(vars_restlautzeit_in_sek, (ventil_1_dauer + ventil_2_dauer + ventil_3_dauer + ventil_4_dauer + getState(vars_ventil_1).val + getState(vars_ventil_2).val + getState(vars_ventil_3).val + getState(vars_ventil_4).val), true, parseInt(0, 10), false); // Gesamtlaufzeit fuer die VIS restlaufzeit_vis_min = Math.floor(getState(vars_laufzeit_gesamt_in_sek).val / 60); restlaufzeit_vis_sek = getState(vars_laufzeit_gesamt_in_sek).val - restlaufzeit_vis_min * 60; if (restlaufzeit_vis_sek < 10) { restlaufzeit_vis_sek = '0' + String(restlaufzeit_vis_sek); } setStateDelayed(vars_restlautzeit, ([restlaufzeit_vis_min,':',restlaufzeit_vis_sek].join('')), true, parseInt(0, 10), false); } }); // Mail / Pushover / Alexa on({id: new RegExp(vars_bewaesserung_aktiv + "|" + vars_bewaesserung_pause), change: "ne"}, function (obj) { // Start if (getState(vars_bewaesserung_aktiv).val == true && getState(vars_bewaesserung_pause).val == false) { // Mail Text und Betreff waitmail2 = setTimeout(function () { // Aktive Ventile if (getState(vars_ventil_1).val == true) { info_endzeit_aktive_ventile = ['Ventil 1 (',getState(vars_ventil_1_name).val,'): ',getState(vars_ventil_1_ende).val,' Uhr'].join(''); } if (getState(vars_ventil_2).val == true) { info_endzeit_aktive_ventile = [info_endzeit_aktive_ventile,'\n','Ventil 2 (',getState(vars_ventil_2_name).val,'): ',getState(vars_ventil_2_ende).val,' Uhr'].join(''); } if (getState(vars_ventil_3).val == true) { info_endzeit_aktive_ventile = [info_endzeit_aktive_ventile,'\n','Ventil 3 (',getState(vars_ventil_3_name).val,'): ',getState(vars_ventil_3_ende).val,' Uhr'].join(''); } if (getState(vars_ventil_4).val == true) { info_endzeit_aktive_ventile = [info_endzeit_aktive_ventile,'\n','Ventil 4 (',getState(vars_ventil_4_name).val,'): ',getState(vars_ventil_4_ende).val,' Uhr'].join(''); } info_text = ['Die Gartenbewässerung wurde akiviert.','\n','\n','Bewässerungsdauer: ' + String(getState(vars_restlautzeit).val),'\n',['Start: ',formatDate(new Date(), "hh:mm:ss"),' Uhr'].join(''),'\n','Ende: ',getState(vars_lautzeit_ende_uhrzeit).val,'\n','\n','Aktive Ventile:','\n',info_endzeit_aktive_ventile].join(''); info_betreff = ['+++ ',formatDate(new Date(), "hh:mm"),' Uhr - Gartenbewässerung aktiviert +++'].join(''); if (vars_notify_mail == true) { sendTo("email", "send", { text: info_text, to: getState("javascript.0.mailadressen.mailadresse_daniel").val, subject: info_betreff }); } if (vars_notify_pushover == true) { sendTo("pushover.0", "send", { message: info_text, sound: "", title: info_betreff }); } }, 1000); // Sprachausgabe if (vars_notify_alexa == true) { if (info_endzeit_minute != '00') { setStateDelayed(vars_notify_alexa_device, (['Gartenbewässerung gestartet. ende um ',info_endzeit_stunde,' Uhr ',info_endzeit_minute,' und ',info_endzeit_stunde,' Sekunden'].join('')), true, parseInt(0, 10), false); } else { setStateDelayed(vars_notify_alexa_device, (['Gartenbewässerung gestartet. ende um ',info_endzeit_stunde,'Uhr ',' und ',info_endzeit_stunde,'Sekunden'].join('')), true, parseInt(0, 10), false); } } } // Stop if (getState(vars_bewaesserung_aktiv).val == false) { if (vars_notify_mail == true) { sendTo("email", "send", { text: 'Gartenbewässerung beendet', to: getState("javascript.0.mailadressen.mailadresse_daniel").val, subject: (['+++ ',formatDate(new Date(), "hh:mm"),' Uhr - Gartenbewässerung beendet +++'].join('')) }); } if (vars_notify_pushover == true) { sendTo("pushover.0", "send", { message: '', sound: "", title: (['+++ ',formatDate(new Date(), "hh:mm"),' Uhr - Gartenbewässerung beendet +++'].join('')) }); } if (vars_notify_alexa == true) { setStateDelayed(vars_notify_alexa_device, 'Gartenbewässerung beendet.', true, parseInt(0, 10), false); } } }); // Log Eintraege on({id: new RegExp(vars_bewaesserung_aktiv + "|" + vars_ventil_1_aktor + "|" + vars_ventil_2_aktor + "|" + vars_ventil_3_aktor + "|" + vars_ventil_4_aktor), change: "ne"}, function (obj) { if (vars_notify_log == true) { // +++ Bewässerung gestartet +++ // Log Eintrag wird nur ausgegeben, wenn alle Ventile aus // sind, und die Variable sich vor 1 Sek geändert hat. if (getState(vars_bewaesserung_aktiv).val == true && formatDate(new Date(), "DD.MM.YYYY") == formatDate(getDateObject(getState(vars_bewaesserung_aktiv).lc), "DD.MM.YYYY") && (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) - (function () {var v = getDateObject(getState(vars_bewaesserung_aktiv).lc); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds();})() <= 1 && getState(vars_ventil_1_aktor).lc == false && getState(vars_ventil_2_aktor).lc == false && getState(vars_ventil_3_aktor).lc == false && getState(vars_ventil_4_aktor).lc == false) { console.log('+++ Bewässerung gestartet +++'); } else if (getState(vars_bewaesserung_aktiv).val == false) { console.log('+++ Bewässerung beendet +++'); } // Ventil 1 if (formatDate(new Date(), "DD.MM.YYYY") == formatDate(getDateObject(getState(vars_ventil_1_aktor).lc), "DD.MM.YYYY") && (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) - (function () {var v = getDateObject(getState(vars_ventil_1_aktor).lc); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds();})() <= 5) { if (getState(vars_ventil_1_aktor).val == true) { console.log((['+++ Bewässerung: Ventil 1 - ',getState(vars_ventil_1_name).val,' aktiv +++'].join(''))); } } // Ventil 2 if (formatDate(new Date(), "DD.MM.YYYY") == formatDate(getDateObject(getState(vars_ventil_2_aktor).lc), "DD.MM.YYYY") && (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) - (function () {var v = getDateObject(getState(vars_ventil_2_aktor).lc); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds();})() <= 5) { if (getState(vars_ventil_2_aktor).val == true) { console.log((['+++ Bewässerung: Ventil 2 - ',getState(vars_ventil_2_name).val,' aktiv +++'].join(''))); } } // Ventil 3 if (formatDate(new Date(), "DD.MM.YYYY") == formatDate(getDateObject(getState(vars_ventil_3_aktor).lc), "DD.MM.YYYY") && (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) - (function () {var v = getDateObject(getState(vars_ventil_3_aktor).lc); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds();})() <= 5) { if (getState(vars_ventil_3_aktor).val == true) { console.log((['+++ Bewässerung: Ventil 3 - ',getState(vars_ventil_3_name).val,' aktiv +++'].join(''))); } } // Ventil 4 if (formatDate(new Date(), "DD.MM.YYYY") == formatDate(getDateObject(getState(vars_ventil_4_aktor).lc), "DD.MM.YYYY") && (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()) - (function () {var v = getDateObject(getState(vars_ventil_4_aktor).lc); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds();})() <= 5) { if (getState(vars_ventil_4_aktor).val == true) { console.log((['+++ Bewässerung: Ventil 4 - ',getState(vars_ventil_4_name).val,' aktiv +++'].join(''))); } } } }); // Aktive Ventile zaehlen on({id: new RegExp(vars_ventil_1_aktor + "|" + vars_ventil_2_aktor + "|" + vars_ventil_3_aktor + "|" + vars_ventil_4_aktor), change: "ne"}, function (obj) { setStateDelayed(vars_anzahl_aktive_ventile, 0, true, parseInt(0, 10), false); setStateDelayed(vars_anzahl_aktive_ventile, (getState(vars_ventil_1_aktor).val + getState(vars_ventil_2_aktor).val + getState(vars_ventil_3_aktor).val + getState(vars_ventil_4_aktor).val), true, parseInt(0, 10), false); }); // Ventil Steuerung on({id: new RegExp(vars_bewaesserung_aktiv + "|" + vars_bewaesserung_pause + "|" + vars_restlautzeit_in_sek), change: "ne"}, function (obj) { if (getState(vars_bewaesserung_aktiv).val == true && getState(vars_bewaesserung_pause).val == false) { // Ventil 1 if (getState(vars_ventil_1).val == true && getState(vars_ventil_1_restzeit_in_sek).val != 0) { if (getState(vars_ventil_1_aktor).val == false && getState(vars_anzahl_aktive_ventile).val < 3) { // Einshaltdauer setzen if (vars_aktor_typ == 'hm') { // ON_TIME fuer Homematic setStateDelayed(vars_ventil_1_aktor_ontime, parseFloat(getState(vars_ventil_1_restzeit_in_sek).val), false, parseInt(0, 10), false); } else if (vars_aktor_typ == 'sonoff') { // PulseTime fuer Sonoff try { require("request")((['http://',vars_sonoff_ip,'/cm?cmnd=PulseTime1%20 ',100 + getState(vars_ventil_1_restzeit_in_sek).val].join(''))).on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); } } setStateDelayed(vars_ventil_1_aktor, true, false, parseInt(1000, 10), false); setStateDelayed(vars_aktives_ventil, 'ventil_1', true, parseInt(1000, 10), false); } } // Ventil 2 if ((getState(vars_ventil_1).val == false || getState(vars_ventil_1_restzeit_in_sek).val == 0) && getState(vars_ventil_2).val == true && getState(vars_ventil_2_restzeit_in_sek).val != 0) { if (getState(vars_ventil_2_aktor).val == false && getState(vars_anzahl_aktive_ventile).val < 3) { // Ventil 1 ausschalten if (getState(vars_ventil_1_aktor).val == true) { setStateDelayed(vars_ventil_1_aktor, false, false, parseInt(0, 10), false); } // Einshaltdauer setzen if (vars_aktor_typ == 'hm') { // ON_TIME fuer Homematic setStateDelayed(vars_ventil_2_aktor_ontime, parseFloat(getState(vars_ventil_2_restzeit_in_sek).val), false, parseInt(0, 10), false); } else if (vars_aktor_typ == 'sonoff') { // PulseTime fuer Sonoff try { require("request")((['http://',vars_sonoff_ip,'/cm?cmnd=PulseTime2%20 ',100 + getState(vars_ventil_2_restzeit_in_sek).val].join(''))).on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); } } setStateDelayed(vars_ventil_2_aktor, true, false, parseInt(1000, 10), false); setStateDelayed(vars_aktives_ventil, 'ventil_2', true, parseInt(1000, 10), false); } } // Ventil 3 if ((getState(vars_ventil_1).val == false || getState(vars_ventil_1_restzeit_in_sek).val == 0) && (getState(vars_ventil_2).val == false || getState(vars_ventil_2_restzeit_in_sek).val == 0) && getState(vars_ventil_3).val == true && getState(vars_ventil_3_restzeit_in_sek).val != 0) { if (getState(vars_ventil_3_aktor).val == false && getState(vars_anzahl_aktive_ventile).val < 3) { // Ventil 2 ausschalten if (getState(vars_ventil_2_aktor).val == true) { setStateDelayed(vars_ventil_2_aktor, false, false, parseInt(0, 10), false); } // Einshaltdauer setzen if (vars_aktor_typ == 'hm') { // ON_TIME fuer Homematic setStateDelayed(vars_ventil_3_aktor_ontime, parseFloat(getState(vars_ventil_3_restzeit_in_sek).val), false, parseInt(0, 10), false); } else if (vars_aktor_typ == 'sonoff') { // PulseTime fuer Sonoff try { require("request")((['http://',vars_sonoff_ip,'/cm?cmnd=PulseTime3%20 ',100 + getState(vars_ventil_3_restzeit_in_sek).val].join(''))).on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); } } setStateDelayed(vars_ventil_3_aktor, true, false, parseInt(1000, 10), false); setStateDelayed(vars_aktives_ventil, 'ventil_3', true, parseInt(1000, 10), false); } } // Ventil 4 if ((getState(vars_ventil_1).val == false || getState(vars_ventil_1_restzeit_in_sek).val == 0) && (getState(vars_ventil_2).val == false || getState(vars_ventil_2_restzeit_in_sek).val == 0) && (getState(vars_ventil_3).val == false || getState(vars_ventil_3_restzeit_in_sek).val == 0) && getState(vars_ventil_4).val == true && getState(vars_ventil_4_restzeit_in_sek).val != 0) { if (getState(vars_ventil_4_aktor).val == false && getState(vars_anzahl_aktive_ventile).val < 3) { // Ventil 3 ausschalten if (getState(vars_ventil_3_aktor).val == true) { setStateDelayed(vars_ventil_3_aktor, false, false, parseInt(0, 10), false); } // Einshaltdauer setzen if (vars_aktor_typ == 'hm') { // ON_TIME fuer Homematic setStateDelayed(vars_ventil_4_aktor_ontime, parseFloat(getState(vars_ventil_4_restzeit_in_sek).val), false, parseInt(0, 10), false); } else if (vars_aktor_typ == 'sonoff') { // PulseTime fuer Sonoff try { require("request")((['http://',vars_sonoff_ip,'/cm?cmnd=PulseTime4%20 ',100 + getState(vars_ventil_4_restzeit_in_sek).val].join(''))).on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); } } setStateDelayed(vars_ventil_4_aktor, true, false, parseInt(1000, 10), false); setStateDelayed(vars_aktives_ventil, 'ventil_4', true, parseInt(1000, 10), false); } } } else if (getState(vars_bewaesserung_aktiv).val == true && getState(vars_bewaesserung_pause).val == true) { // Ventil 1 pausieren if (getState(vars_ventil_1_aktor).val == true) { setStateDelayed(vars_ventil_1_aktor, false, false, parseInt(0, 10), false); } // Ventil 2 pausieren if (getState(vars_ventil_2_aktor).val == true) { setStateDelayed(vars_ventil_2_aktor, false, false, parseInt(0, 10), false); } // Ventil 3 pausieren if (getState(vars_ventil_3_aktor).val == true) { setStateDelayed(vars_ventil_3_aktor, false, false, parseInt(0, 10), false); } // Ventil 4 pausieren if (getState(vars_ventil_4_aktor).val == true) { setStateDelayed(vars_ventil_4_aktor, false, false, parseInt(0, 10), false); } } else if (getState(vars_bewaesserung_aktiv).val == false && getState(vars_bewaesserung_pause).val == false) { setStateDelayed(vars_aktives_ventil, 'aus', true, parseInt(0, 10), false); } }); // Restzeit gesamt berechnen on({id: vars_bewaesserung_aktiv, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState(vars_bewaesserung_aktiv).val == true) { restzeit = setInterval(function () { if (getState(vars_bewaesserung_pause).val == false) { setStateDelayed(vars_restlautzeit_in_sek, (getState(vars_restlautzeit_in_sek).val - 1), true, parseInt(0, 10), false); restzeit_gesamt_min = Math.floor(getState(vars_restlautzeit_in_sek).val / 60); restzeit_gesamt_sek = getState(vars_restlautzeit_in_sek).val - restzeit_gesamt_min * 60; // 0 hinzufuegen wenn Minuten < 10 if (restzeit_gesamt_min < 10) { restzeit_gesamt_min = '0' + String(restzeit_gesamt_min); } // 0 hinzufuegen wenn Sekunden < 10 if (restzeit_gesamt_sek < 10) { restzeit_gesamt_sek = '0' + String(restzeit_gesamt_sek); } setStateDelayed(vars_restlautzeit, ([restzeit_gesamt_min,':',restzeit_gesamt_sek].join('')), true, parseInt(0, 10), false); if (getState(vars_restlautzeit_in_sek).val == 0) { setStateDelayed(vars_bewaesserung_aktiv, false, true, parseInt(0, 10), false); (function () {if (restzeit) {clearInterval(restzeit); restzeit = null;}})(); } } }, 1000); } else if (getState(vars_bewaesserung_aktiv).val == false) { (function () {if (restzeit) {clearInterval(restzeit); restzeit = null;}})(); } }); // Restzeit Ventile berechnen on({id: vars_bewaesserung_aktiv, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState(vars_bewaesserung_aktiv).val == true) { // Ventil 1 if (getState(vars_ventil_1).val == true) { // Umschaltverzögerung für ON_TIME setStateDelayed(vars_ventil_1_restzeit_in_sek, (getState(vars_ventil_1_restzeit_in_sek).val + 1), true, parseInt(0, 10), false); ventil_1_rest = setInterval(function () { if (getState(vars_bewaesserung_pause).val == false && getState(vars_ventil_1).val == true && getState(vars_ventil_1_restzeit_in_sek).val != 0) { setStateDelayed(vars_ventil_1_restzeit_in_sek, (getState(vars_ventil_1_restzeit_in_sek).val - 1), true, parseInt(0, 10), false); // VIS Anzeige setzen restzeit_ventil_min = Math.floor(getState(vars_ventil_1_restzeit_in_sek).val / 60); restzeit_ventil_sek = getState(vars_ventil_1_restzeit_in_sek).val - restzeit_ventil_min * 60; if (restzeit_ventil_sek < 10) { setStateDelayed(vars_ventil_1_restzeit, ([restzeit_ventil_min,':0',restzeit_ventil_sek].join('')), true, parseInt(0, 10), false); } else { setStateDelayed(vars_ventil_1_restzeit, ([restzeit_ventil_min,':',restzeit_ventil_sek].join('')), true, parseInt(0, 10), false); } } if (getState(vars_ventil_1_restzeit_in_sek).val == 0) { (function () {if (ventil_1_rest) {clearInterval(ventil_1_rest); ventil_1_rest = null;}})(); } }, 1000); } // Ventil 2 if (getState(vars_ventil_2).val == true) { // Umschaltverzögerung für ON_TIME setStateDelayed(vars_ventil_2_restzeit_in_sek, (getState(vars_ventil_2_restzeit_in_sek).val + 1), true, parseInt(0, 10), false); ventil_2_rest = setInterval(function () { if (getState(vars_bewaesserung_pause).val == false && (getState(vars_ventil_1).val == false || getState(vars_ventil_1_restzeit_in_sek).val == 0) && getState(vars_ventil_2).val == true && getState(vars_ventil_2_restzeit_in_sek).val != 0) { setStateDelayed(vars_ventil_2_restzeit_in_sek, (getState(vars_ventil_2_restzeit_in_sek).val - 1), true, parseInt(0, 10), false); // VIS Anzeige setzen restzeit_ventil_min = Math.floor(getState(vars_ventil_2_restzeit_in_sek).val / 60); restzeit_ventil_sek = getState(vars_ventil_2_restzeit_in_sek).val - restzeit_ventil_min * 60; if (restzeit_ventil_sek < 10) { setStateDelayed(vars_ventil_2_restzeit, ([restzeit_ventil_min,':0',restzeit_ventil_sek].join('')), true, parseInt(0, 10), false); } else { setStateDelayed(vars_ventil_2_restzeit, ([restzeit_ventil_min,':',restzeit_ventil_sek].join('')), true, parseInt(0, 10), false); } } if (getState(vars_ventil_2_restzeit_in_sek).val == 0) { (function () {if (ventil_2_rest) {clearInterval(ventil_2_rest); ventil_2_rest = null;}})(); } }, 1000); } // Ventil 3 if (getState(vars_ventil_3).val == true) { // Umschaltverzögerung für ON_TIME setStateDelayed(vars_ventil_3_restzeit_in_sek, (getState(vars_ventil_3_restzeit_in_sek).val + 1), true, parseInt(0, 10), false); ventil_3_rest = setInterval(function () { if (getState(vars_bewaesserung_pause).val == false && (getState(vars_ventil_1).val == false || getState(vars_ventil_1_restzeit_in_sek).val == 0) && (getState(vars_ventil_2).val == false || getState(vars_ventil_2_restzeit_in_sek).val == 0) && getState(vars_ventil_3).val == true && getState(vars_ventil_3_restzeit_in_sek).val != 0) { setStateDelayed(vars_ventil_3_restzeit_in_sek, (getState(vars_ventil_3_restzeit_in_sek).val - 1), true, parseInt(0, 10), false); // VIS Anzeige setzen restzeit_ventil_min = Math.floor(getState(vars_ventil_3_restzeit_in_sek).val / 60); restzeit_ventil_sek = getState(vars_ventil_3_restzeit_in_sek).val - restzeit_ventil_min * 60; if (restzeit_ventil_sek < 10) { setStateDelayed(vars_ventil_3_restzeit, ([restzeit_ventil_min,':0',restzeit_ventil_sek].join('')), true, parseInt(0, 10), false); } else { setStateDelayed(vars_ventil_3_restzeit, ([restzeit_ventil_min,':',restzeit_ventil_sek].join('')), true, parseInt(0, 10), false); } } if (getState(vars_ventil_3_restzeit_in_sek).val == 0) { (function () {if (ventil_3_rest) {clearInterval(ventil_3_rest); ventil_3_rest = null;}})(); } }, 1000); } // Ventil 4 if (getState(vars_ventil_4).val == true) { // Umschaltverzögerung für ON_TIME setStateDelayed(vars_ventil_4_restzeit_in_sek, (getState(vars_ventil_4_restzeit_in_sek).val + 1), true, parseInt(0, 10), false); ventil_4_rest = setInterval(function () { if (getState(vars_bewaesserung_pause).val == false && (getState(vars_ventil_1).val == false || getState(vars_ventil_1_restzeit_in_sek).val == 0) && (getState(vars_ventil_2).val == false || getState(vars_ventil_2_restzeit_in_sek).val == 0) && (getState(vars_ventil_3).val == false || getState(vars_ventil_3_restzeit_in_sek).val == 0) && getState(vars_ventil_4).val == true && getState(vars_ventil_4_restzeit_in_sek).val != 0) { setStateDelayed(vars_ventil_4_restzeit_in_sek, (getState(vars_ventil_4_restzeit_in_sek).val - 1), true, parseInt(0, 10), false); // VIS Anzeige setzen restzeit_ventil_min = Math.floor(getState(vars_ventil_4_restzeit_in_sek).val / 60); restzeit_ventil_sek = getState(vars_ventil_4_restzeit_in_sek).val - restzeit_ventil_min * 60; if (restzeit_ventil_sek < 10) { setStateDelayed(vars_ventil_4_restzeit, ([restzeit_ventil_min,':0',restzeit_ventil_sek].join('')), true, parseInt(0, 10), false); } else { setStateDelayed(vars_ventil_4_restzeit, ([restzeit_ventil_min,':',restzeit_ventil_sek].join('')), true, parseInt(0, 10), false); } } if (getState(vars_ventil_4_restzeit_in_sek).val == 0) { (function () {if (ventil_4_rest) {clearInterval(ventil_4_rest); ventil_4_rest = null;}})(); } }, 1000); } } else { (function () {if (ventil_1_rest) {clearInterval(ventil_1_rest); ventil_1_rest = null;}})(); (function () {if (ventil_2_rest) {clearInterval(ventil_2_rest); ventil_2_rest = null;}})(); (function () {if (ventil_3_rest) {clearInterval(ventil_3_rest); ventil_3_rest = null;}})(); (function () {if (ventil_4_rest) {clearInterval(ventil_4_rest); ventil_4_rest = null;}})(); } }); // Manuelles abschalten -> alle Ventile abschalten on({id: new RegExp(vars_bewaesserung_aktiv + "|" + vars_restlautzeit_in_sek), change: "ne"}, function (obj) { if (getState(vars_bewaesserung_aktiv).val == false || getState(vars_restlautzeit_in_sek).val == 0) { // Ventil 1 if (getState(vars_ventil_1_aktor).val == true) { setStateDelayed(vars_ventil_1_aktor, false, false, parseInt(0, 10), false); } // Ventil 2 if (getState(vars_ventil_2_aktor).val == true) { setStateDelayed(vars_ventil_2_aktor, false, false, parseInt(0, 10), false); } // Ventil 3 if (getState(vars_ventil_3_aktor).val == true) { setStateDelayed(vars_ventil_3_aktor, false, false, parseInt(0, 10), false); } // Ventil 4 if (getState(vars_ventil_4_aktor).val == true) { setStateDelayed(vars_ventil_4_aktor, false, false, parseInt(0, 10), false); } // Pause if (getState(vars_bewaesserung_pause).val == true) { setStateDelayed(vars_bewaesserung_pause, false, true, parseInt(0, 10), false); } } });
-
Habe es jetzt mit dem neuen Script laufen lassen und die DPs neu angelegt. Hat jetzt funktioniert aber es kommen Fehler im Log
-
-
@tombox wie wäre es mit Sprinkler-Control ?