Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [Vorlage] Gartenbewässerung mit 4 Ventilen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Vorlage] Gartenbewässerung mit 4 Ventilen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Hitzi 69
      Hitzi 69 last edited by

      Ok. Danke
      Versuche ich mal

      1 Reply Last reply Reply Quote 0
      • F
        Fuga last edited by Fuga

        Also ich habe es gestern laufen lassen ohne Probleme. Heute habe ich die Dauer angepasst und dann ist das passiert:
        a87cc32a-d220-46fc-a206-51e2c86b099d-grafik.png

        Es funktioniert soweit aber alles wird halt nur falsch angezeigt.

        1 Reply Last reply Reply Quote 0
        • F
          Fuga last edited by Fuga

          gerade gesehen Problem ist wohl Ventil 3
          5865a2b9-66eb-4f16-bd8c-01c23b161355-grafik.png

          Kann es sein das es hier Problem gibt? Bei 20 Minuten macht er 12001 Sekunden. Da stimmt doch etwas nicht oder?

          1 Reply Last reply Reply Quote 0
          • F
            Fuga last edited by Fuga

            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

            1 Reply Last reply Reply Quote 0
            • F
              fravell34gmail.com @darkiop last edited by

              @darkiop Die Version von gestern konnte ich noch inportieren. Die aktuelle Version macht Probleme. Die adapter habe ich installiert.

              1 Reply Last reply Reply Quote 0
              • F
                fravell34gmail.com last edited by

                2020_04_09_19_55_18_javascript_ioBroker.jpg

                das ist der Fehler der beim Inport kommt.

                K 1 Reply Last reply Reply Quote 0
                • K
                  Kuddel @fravell34gmail.com last edited by

                  hat noch jemand Probleme beim importieren der aktuellsten Version ?
                  vllt. hat mein Export auch ne Macke

                  1 Reply Last reply Reply Quote 0
                  • T
                    tombox last edited by tombox

                    @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?

                    D K dslraser 3 Replies Last reply Reply Quote 0
                    • D
                      darkiop Most Active @tombox last edited by

                      @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.

                      Kuddel071089 created this issue in ioBroker/AdapterRequests

                      closed Adapter für Gartenbewässerung #361

                      1 Reply Last reply Reply Quote 0
                      • K
                        Kuddel @tombox last edited by

                        @tombox ein Adapter wäre natürlich wesentlich besser.

                        davon habe ich aber überhaupt keine Ahnung.

                        @darkiop hat ja schon den Link von meinem github Issue gepostet

                        D 1 Reply Last reply Reply Quote 1
                        • D
                          darkiop Most Active @Kuddel last edited by

                          @Kuddel Hab heut Abend nochmal die 2.1.0 laufen gelassen zum Bewässern, absolut stabil bisher.

                          1 Reply Last reply Reply Quote 0
                          • dslraser
                            dslraser Forum Testing Most Active @tombox last edited by dslraser

                            @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);
                               }
                             }
                            });
                            
                            

                            Mic-M created this issue in ioBroker/ioBroker.javascript

                            closed setObject() function: callback not working as intended. #474

                            Mic-M created this issue in ioBroker/ioBroker.javascript

                            closed setObject() function: callback not working as intended. #474

                            Mic-M created this issue in ioBroker/ioBroker.javascript

                            closed 0_userdata.0: existsState() vs. $-Selector $().length after state deletion #478

                            T 1 Reply Last reply Reply Quote 0
                            • Hitzi 69
                              Hitzi 69 last edited by

                              Habe es jetzt mit dem neuen Script laufen lassen und die DPs neu angelegt. Hat jetzt funktioniert aber es Screenshot_20200409-211427_Fully Kiosk Browser.jpg kommen Fehler im Log

                              1 Reply Last reply Reply Quote 0
                              • T
                                tombox @dslraser last edited by tombox

                                @dslraser Danke für den Hinweis wußte nicht das es so einfach ist.

                                @Kuddel hast du ein Wunsch wie der Adapter heißen soll? "Gartenbewaesserung" ?
                                Planst du in nächster Zeit noch Verbesserungen?

                                K 1 Reply Last reply Reply Quote 0
                                • K
                                  Kuddel @tombox last edited by

                                  @tombox wie wäre es mit Sprinkler-Control ?

                                  T 1 Reply Last reply Reply Quote 0
                                  • T
                                    tombox @Kuddel last edited by

                                    @Kuddel die ioBroker community ist eher deutschsprachig ich glaube die meisten werden bei google eher nach gartenbewässerung suchen als sprinkler control

                                    K 1 Reply Last reply Reply Quote 0
                                    • K
                                      Kuddel @tombox last edited by

                                      @tombox ja das hast du natürlich recht.

                                      dann gern "Gartenbewässerung"

                                      dslraser 1 Reply Last reply Reply Quote 0
                                      • dslraser
                                        dslraser Forum Testing Most Active @Kuddel last edited by dslraser

                                        @Kuddel sagte in [Vorlage] Gartenbewässerung mit 4 Ventilen:

                                        @tombox ja das hast du natürlich recht.

                                        dann gern "Gartenbewässerung"

                                        Falls es mal einen Adapter geben sollte, könnte man da auch andere Systeme berücksichtigen ?
                                        Weil, ich fummele hier ja auch aktuell an einem Blockly, in Verbindung mit dem neuen Gardena Adapter.
                                        Leider müßte ich Dein @Kuddel Blockly für den Gardena Adapter auch komplett umstricken.

                                        T 1 Reply Last reply Reply Quote 0
                                        • T
                                          tombox @dslraser last edited by

                                          @dslraser könntest du kurz skizzieren welche Sachen dynamisch konfigurierbar sein müssen damit sie auch mit dem gardena adapter funktionieren würden

                                          dslraser 1 Reply Last reply Reply Quote 0
                                          • dslraser
                                            dslraser Forum Testing Most Active @tombox last edited by dslraser

                                            @tombox sagte in [Vorlage] Gartenbewässerung mit 4 Ventilen:

                                            @dslraser könntest du kurz skizzieren welche Sachen dynamisch konfigurierbar sein müssen damit sie auch mit dem gardena adapter funktionieren würden

                                            Die Gardena Geräte haben ein eigenes Gateway, ähnlich wie z.B. der HUE Adapter. Die Geräte lassen sich über eine App oder auch im Browser über deren Cloud bedienen. Ich habe es bisher in meinem Blockly so erstellt, das sowohl die Bedienung über die App in den eigenen Datenpunkten angezeigt wird und umgekehrt auch die eigenen Datenpunkte die Bewässerung schaltet. Die Laufzeit der Ventile wird mit dem Wert 60 (oder ein vielfaches davon, aber maximal 3540 = 59 Minuten als Text eingegeben, aber es dürfen nur max. 2 Ventile gleichzeitig geöffnet werden, ist in der App auch nicht anders möglich) Es können an das Irrigation Control max 6 Ventile und eine Pumpe angeschlossen werden, wobei es auch andere "intelligente" Bewässerungssteuerungen von Gardena gibt, nicht nur das Irrigation Control. Es können auch mehrere davon betrieben werden. Ebenso sind Sensoren (Temperatur/Helligkeit sowie Bodenfeuchte integrierbar, auch die kann der Adapter schon. Genauso gehen über den Adapter auch die Gardena Mäher.
                                            Der Rest steht eigentlich in der Adapterbeschreibung, schau da am Besten mal rein.

                                            Gardena smarte Gartengeräte

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            684
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            22
                                            415
                                            57845
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo