Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. [Vorlage] Gartenbewässerung mit 4 Ventilen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

[Vorlage] Gartenbewässerung mit 4 Ventilen

Geplant Angeheftet Gesperrt Verschoben Blockly
415 Beiträge 22 Kommentatoren 80.0k Aufrufe 36 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • F fravell34gmail.com

    Hallo Kuddel,
    versuche seit einiger Zeit auch eine Bewässerung hin zu bekommen und bin total beeindruckt von deinem Programm, zumindest theoretisch. das Skript ist ja wirklich beeindruckend. eine vorhergehende Version hatte ich schon soweit das, dass Programm lief aber nicht die Zeitsteuerung. das neuste kann ich nicht importieren. haben sich die Voraussetzungen geändert?

    D Offline
    D Offline
    darkiop
    Most Active
    schrieb am zuletzt editiert von
    #330

    @fravell34gmail-com du brauchst email.x und pushover.x - dann sollte der import klappen.

    Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

    F 1 Antwort Letzte Antwort
    0
    • Hitzi 69H Hitzi 69

      Habe es heute mit der automatischen Bewässerung probiert. Läuft leider nicht richtig. Zumindest bei mir.
      Was könnte der Fehler sein. Liegt es an mir oder am Script?![alt text]20200409_181627.jpg 20200409_181606.jpg

      D Offline
      D Offline
      darkiop
      Most Active
      schrieb am zuletzt editiert von
      #331

      @Hitzi-69 sagte in [Vorlage] Gartenbewässerung mit 4 Ventilen:

      Was könnte der Fehler sein. Liegt es an mir oder am Script?

      Erstelle mal die DPs neu - mit der aktuellesten Version von Kuddels Skript.

      Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

      1 Antwort Letzte Antwort
      0
      • Hitzi 69H Offline
        Hitzi 69H Offline
        Hitzi 69
        schrieb am zuletzt editiert von
        #332

        Ok. Danke
        Versuche ich mal

        1 Antwort Letzte Antwort
        0
        • F Offline
          F Offline
          Fuga
          schrieb am zuletzt editiert von Fuga
          #333

          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 Antwort Letzte Antwort
          0
          • F Offline
            F Offline
            Fuga
            schrieb am zuletzt editiert von Fuga
            #334

            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 Antwort Letzte Antwort
            0
            • F Offline
              F Offline
              Fuga
              schrieb am zuletzt editiert von Fuga
              #335

              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 Antwort Letzte Antwort
              0
              • D darkiop

                @fravell34gmail-com du brauchst email.x und pushover.x - dann sollte der import klappen.

                F Offline
                F Offline
                fravell34gmail.com
                schrieb am zuletzt editiert von
                #336

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

                1 Antwort Letzte Antwort
                0
                • F Offline
                  F Offline
                  fravell34gmail.com
                  schrieb am zuletzt editiert von
                  #337

                  2020_04_09_19_55_18_javascript_ioBroker.jpg

                  das ist der Fehler der beim Inport kommt.

                  K 1 Antwort Letzte Antwort
                  0
                  • F fravell34gmail.com

                    2020_04_09_19_55_18_javascript_ioBroker.jpg

                    das ist der Fehler der beim Inport kommt.

                    K Offline
                    K Offline
                    Kuddel
                    schrieb am zuletzt editiert von
                    #338

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

                    1 Antwort Letzte Antwort
                    0
                    • T Offline
                      T Offline
                      tombox
                      schrieb am zuletzt editiert von tombox
                      #339

                      @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 dslraserD 3 Antworten Letzte Antwort
                      0
                      • T 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 Offline
                        D Offline
                        darkiop
                        Most Active
                        schrieb am zuletzt editiert von
                        #340

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

                        Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

                        1 Antwort Letzte Antwort
                        0
                        • T 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?

                          K Offline
                          K Offline
                          Kuddel
                          schrieb am zuletzt editiert von
                          #341

                          @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 Antwort Letzte Antwort
                          1
                          • K Kuddel

                            @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 Offline
                            D Offline
                            darkiop
                            Most Active
                            schrieb am zuletzt editiert von
                            #342

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

                            Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

                            1 Antwort Letzte Antwort
                            0
                            • T 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?

                              dslraserD Offline
                              dslraserD Offline
                              dslraser
                              Forum Testing Most Active
                              schrieb am zuletzt editiert von dslraser
                              #343

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

                              T 1 Antwort Letzte Antwort
                              0
                              • Hitzi 69H Offline
                                Hitzi 69H Offline
                                Hitzi 69
                                schrieb am zuletzt editiert von
                                #344

                                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 Antwort Letzte Antwort
                                0
                                • dslraserD 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);
                                     }
                                   }
                                  });
                                  
                                  

                                  T Offline
                                  T Offline
                                  tombox
                                  schrieb am zuletzt editiert von tombox
                                  #345

                                  @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 Antwort Letzte Antwort
                                  0
                                  • T 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 Offline
                                    K Offline
                                    Kuddel
                                    schrieb am zuletzt editiert von
                                    #346

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

                                    T 1 Antwort Letzte Antwort
                                    0
                                    • K Kuddel

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

                                      T Offline
                                      T Offline
                                      tombox
                                      schrieb am zuletzt editiert von
                                      #347

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

                                      K 1 Antwort Letzte Antwort
                                      0
                                      • T tombox

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

                                        K Offline
                                        K Offline
                                        Kuddel
                                        schrieb am zuletzt editiert von
                                        #348

                                        @tombox ja das hast du natürlich recht.

                                        dann gern "Gartenbewässerung"

                                        dslraserD 1 Antwort Letzte Antwort
                                        0
                                        • K Kuddel

                                          @tombox ja das hast du natürlich recht.

                                          dann gern "Gartenbewässerung"

                                          dslraserD Offline
                                          dslraserD Offline
                                          dslraser
                                          Forum Testing Most Active
                                          schrieb am zuletzt editiert von dslraser
                                          #349

                                          @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 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          466

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe