Navigation

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

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage] Gartenbewässerung mit 6 Ventilen

    This topic has been deleted. Only users with topic management privileges can see it.
    • dslraser
      dslraser Forum Testing Most Active @Kuddel last edited by

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

      Die Namen wollte ich noch den Block integrieren, aber ich glaube nicht, dass das so funzt

      ich schau mal und melde mich.

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

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

        ich habe deine Anpassung für die Ventil-Anzahl übernommen

        //Diese DPs sollen bei jedem Speichern überschrieben werden
        let vars_writable = [
            [basic_vars_pfad+'.ventile.anzahl_ventile', {'name':'anzahl_ventile','type':'number','read':true,'write':true,'role':'number','def':basic_vars_anzahl_ventile,'min':0, 'max':6} ],
        ]
        createUserStates(basic_vars_speicherort, true, vars_writable);
        

        Soll/muss der wirklich in den Objekten/VIS bedienbar sein, oder ist es "nur" eine Anzeige ?

        sonst mach

        'write':false

        und dafür 'max':6könntest Du auch Deine Variable basic_vars_anzahl_ventile anstelle der 6 nehmen, dann wird die max Anzahl im DP übernommen. (also auch im RAW)

        sonst Vorschlag

        //Diese DPs sollen bei jedem Speichern überschrieben werden
        let vars_writable = [
            [basic_vars_pfad+'.ventile.anzahl_ventile', {'name':'anzahl_ventile','type':'number','read':true,'write':false,'role':'number','def':basic_vars_anzahl_ventile,'min':0, 'max':basic_vars_anzahl_ventile} ],
        ]
        createUserStates(basic_vars_speicherort, true, vars_writable);
        
        

        Der RAW sieht dann bei z.B. 4 Ventilen so aus

        {
          "from": "system.adapter.javascript.0",
          "user": "system.user.admin",
          "ts": 1595411381243,
          "common": {
            "name": "anzahl_ventile",
            "type": "number",
            "role": "number",
            "def": 4,
            "min": 0,
            "max": 4,
            "read": true,
            "false": true
          },
          "native": {},
          "acl": {
            "object": 1636,
            "owner": "system.user.admin",
            "ownerGroup": "system.group.administrator",
            "state": 1636
          },
          "_id": "0_userdata.0.Bewaesserung.ventile.anzahl_ventile",
          "type": "state"
        }
        
        1 Reply Last reply Reply Quote 0
        • Andreas K
          Andreas K last edited by

          Hallo liebe Community,

          ich lese diesen Thread seit einiger Zeit mit. Nun ist meine Frage, kann ich denn das Skript ohne "größeren" Aufwand umbauen. Ich steuere zur Zeit
          meine Bewässerung mit einen Wemos d1(ESPeasy) und dort ist eine 4 Ch. Relais angeschlossen, angesteuert habe ich es immer mit einem HTTP Request.
          Ihr steuert da ganze mit einem Pulse an? Dann müsste ich in der Config fuer den Esp einen Switch als Push-Button-Device anlegen? Hat jemand zufällig das selbe gemacht? Was müsste ich denn noch ändern?

          Gruß Andi

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

            @Andreas-K hallo Andi, wenn du deine einzelnen Kanäle mit einem State schaltest, dann kannst du das Skript jetzt auch schon verwenden, da das laufende Ventil vorm aktivieren des nächsten Ventils ausgeschaltet wird.

            Die Pulsetime ist nur als Backup gedacht, falls während der Bewässerung der ioBroker abstürzt.

            1 Reply Last reply Reply Quote 0
            • Andreas K
              Andreas K last edited by

              Hallo @Kuddel, achso dann kann ich also den Pulse Befehl auch weglassen?
              Und einfach mit cmd gpio,12,0 usw... steuern?
              Dann werde ich das gleich mal testen. Das einzige was mich noch irritiert ist,
              dass mit dem HM im Skript? Was müsste ich denn alles Konkret ändern?
              Außer die HTTP-Request Sachen.

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

                @Andreas-K am einfachsten ist es, wenn du pro Kanal einen neuen DPsvom Typ Boolean (true / false) in einer extra Struktur anlegegst.
                Diese DPs hintelrgest du dann in meinem Skript und baust dir einen extra Block mit den neuen DPs als Trigger.

                Beispiel:

                Neuer-DP-1 = javascript.0.MeineDPs.Bewaesserung_Ventil_1

                Neues Skript

                WENN javascript.0.MeineDPs.Bewaesserung_Ventil_1 = TRUE

                DANN führe deinen gewohnten http request aus.

                1 Reply Last reply Reply Quote 0
                • Andreas K
                  Andreas K last edited by

                  @Kuddel
                  Ich habe jetzt die States der Ventile in einem Ordner angelegt. Leider ist es mir nicht möglich diesen ale true oder false angezeigt zu bekommen. Sondern nur 0 und 1. Wie schaut denn zb. so ein Block aus wo ich sagen kann:
                  Beispiel:

                  Neuer-DP-1 = javascript.0.MeineDPs.Bewaesserung_Ventil_1

                  muss ich an deinem Skript sonst nichts ändern und wo füge ich am besten den Block ein:
                  Neues Skript

                  WENN javascript.0.MeineDPs.Bewaesserung_Ventil_1 = TRUE

                  DANN führe deinen gewohnten http request aus.

                  Tut mir leid, ich bin momentan noch am Anfang mit IoBroker und Java..

                  Gruß Andi

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

                    @Andreas-K du kannst das neue Skript irgendwo in meinem einfügen.

                    Es ist aber sinnvoller, dass in einem eigenen Skript zu machen, da bei jeder neuen Version von mir, deine Erweiterung fehlt.

                    Kannst du mal einen Screenshot posten ? Ich verstehe nicht genau was du mit 0 und 1 meinst

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

                      @Kuddel
                      Hallo Kuddel,
                      erstmal danke für deine Hilfbereitsschaft! Ich bin leider ein absoluter Anfänger
                      was das "programmieren" betrifft. Ich habe jetzt ein Skript erstellt, wenn
                      meine Datenpunkte von true/falls geändert werden, schalten diese meine
                      Ventile per Http request. Nun sollte ich dies in deinem Skript einbinden.
                      Welcher Datenpunkt muss dort getriggert werden? Da steige ich noch nicht so ganz durch,... falls ich mein externe Skript anders oder einfacher gestalten kann, dann bin ich froh um jeden Tipp.
                      Bildschirmfoto 2020-07-23 um 2.54.28 PM.png
                      Gruss Andi

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

                        @Andreas-K ich würde dein Skript etwas anders bauen:

                        71b2da07-826f-4b07-84c6-09878909acb2-grafik.png

                        Export vom Blockly

                        <xml xmlns="https://developers.google.com/blockly/xml">
                         <block type="on_ext" id="Q5P+Zic4T@]CO+Ab$w_G" x="138" y="-462">
                           <mutation xmlns="http://www.w3.org/1999/xhtml" items="4"></mutation>
                           <field name="CONDITION">ne</field>
                           <field name="ACK_CONDITION"></field>
                           <value name="OID0">
                             <shadow type="field_oid" id="e/j=.M`c53,xyJNN)[hr">
                               <field name="oid">default</field>
                             </shadow>
                           </value>
                           <value name="OID1">
                             <shadow type="field_oid" id="7#,G|1,f8TEMV4k*/WU~">
                               <field name="oid">default</field>
                             </shadow>
                           </value>
                           <value name="OID2">
                             <shadow type="field_oid" id="w.+|0|vz])=,U[{qo9Ai">
                               <field name="oid">default</field>
                             </shadow>
                           </value>
                           <value name="OID3">
                             <shadow type="field_oid" id="(HccMWUrH?`Z;N?7:a3`">
                               <field name="oid">default</field>
                             </shadow>
                           </value>
                           <statement name="STATEMENT">
                             <block type="comment" id="a=hZ/?U]NTl$fs/9fkeG">
                               <field name="COMMENT">Rasenflaeche klein</field>
                               <next>
                                 <block type="controls_if" id="v)rN6GYitPVL[7GvXm@r">
                                   <mutation elseif="1"></mutation>
                                   <value name="IF0">
                                     <block type="logic_compare" id="K{B,[1]_v|=3O`4Kt=2.">
                                       <field name="OP">EQ</field>
                                       <value name="A">
                                         <block type="get_value" id="s|jjx]:;SQIeAj;gBO`]">
                                           <field name="ATTR">val</field>
                                           <field name="OID">ID auswählen</field>
                                         </block>
                                       </value>
                                       <value name="B">
                                         <block type="logic_boolean" id="+?i}.g[F:aRY|4bLw+Vo">
                                           <field name="BOOL">TRUE</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <statement name="DO0">
                                     <block type="request" id="+T,Aza[)udu)uPl$U+=V">
                                       <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                                       <field name="WITH_STATEMENT">FALSE</field>
                                       <field name="LOG"></field>
                                       <value name="URL">
                                         <shadow type="text" id="=lV)]]o^Apb0(,1MlQj~">
                                           <field name="TEXT">text</field>
                                         </shadow>
                                       </value>
                                     </block>
                                   </statement>
                                   <value name="IF1">
                                     <block type="logic_compare" id="m$E8nA5)T[p4MI:sPgJX">
                                       <field name="OP">EQ</field>
                                       <value name="A">
                                         <block type="get_value" id="Bq+(y0@sY5OzZ,jnfYxs">
                                           <field name="ATTR">val</field>
                                           <field name="OID">ID auswählen</field>
                                         </block>
                                       </value>
                                       <value name="B">
                                         <block type="logic_boolean" id="@gtgZQ`e#E6nuvl.0[jQ">
                                           <field name="BOOL">FALSE</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <statement name="DO1">
                                     <block type="request" id="1i;iHNe8$e?Ev,jS2.0P">
                                       <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                                       <field name="WITH_STATEMENT">FALSE</field>
                                       <field name="LOG"></field>
                                       <value name="URL">
                                         <shadow type="text" id="63-elMK(~OtMQL7biM/m">
                                           <field name="TEXT">text</field>
                                         </shadow>
                                       </value>
                                     </block>
                                   </statement>
                                   <next>
                                     <block type="comment" id="7|Hx}1z,,lSp:+SGy,[a">
                                       <field name="COMMENT">Rasenflaeche rechts</field>
                                       <next>
                                         <block type="controls_if" id="WyJD2tjnlUR|-^L#[;j(">
                                           <mutation elseif="1"></mutation>
                                           <value name="IF0">
                                             <block type="logic_compare" id="[[-I,4zz@,%1fE|Ic9Wl">
                                               <field name="OP">EQ</field>
                                               <value name="A">
                                                 <block type="get_value" id="hVNp_UPm}mJg]e:^Saj6">
                                                   <field name="ATTR">val</field>
                                                   <field name="OID">ID auswählen</field>
                                                 </block>
                                               </value>
                                               <value name="B">
                                                 <block type="logic_boolean" id="=}rT_|YszaV#S)w2{WA/">
                                                   <field name="BOOL">TRUE</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </value>
                                           <statement name="DO0">
                                             <block type="request" id="Gp9*oY/K-/(XYB9HLO$6">
                                               <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                                               <field name="WITH_STATEMENT">FALSE</field>
                                               <field name="LOG"></field>
                                               <value name="URL">
                                                 <shadow type="text" id="rfaTWG-o`L`dVa^U6QR1">
                                                   <field name="TEXT">text</field>
                                                 </shadow>
                                               </value>
                                             </block>
                                           </statement>
                                           <value name="IF1">
                                             <block type="logic_compare" id="(y!k_iBxk.Rk1#OQ]f!H">
                                               <field name="OP">EQ</field>
                                               <value name="A">
                                                 <block type="get_value" id="lXIXrU9iG9vTK^IL%H.8">
                                                   <field name="ATTR">val</field>
                                                   <field name="OID">ID auswählen</field>
                                                 </block>
                                               </value>
                                               <value name="B">
                                                 <block type="logic_boolean" id="zB*A1l[TLSm/YEmtO$Sh">
                                                   <field name="BOOL">FALSE</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </value>
                                           <statement name="DO1">
                                             <block type="request" id="%)s1+[qD2VWf4ZV!/UBL">
                                               <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                                               <field name="WITH_STATEMENT">FALSE</field>
                                               <field name="LOG"></field>
                                               <value name="URL">
                                                 <shadow type="text" id="4=6Q#JpQ.@hwqCUT:dT-">
                                                   <field name="TEXT">text</field>
                                                 </shadow>
                                               </value>
                                             </block>
                                           </statement>
                                           <next>
                                             <block type="comment" id="q9hYCLF[|d5AK_=yJ=Z0">
                                               <field name="COMMENT">Tropfschlauch</field>
                                               <next>
                                                 <block type="controls_if" id="A?9-M9Ei5G_~KB}$Tu6(">
                                                   <mutation elseif="1"></mutation>
                                                   <value name="IF0">
                                                     <block type="logic_compare" id="oe,_rBq$`B1BDlpM42G@">
                                                       <field name="OP">EQ</field>
                                                       <value name="A">
                                                         <block type="get_value" id="+,K-|(|lD[0Tlxf^dKu|">
                                                           <field name="ATTR">val</field>
                                                           <field name="OID">ID auswählen</field>
                                                         </block>
                                                       </value>
                                                       <value name="B">
                                                         <block type="logic_boolean" id="iC-ZxAuT(m|StUD#sCAl">
                                                           <field name="BOOL">TRUE</field>
                                                         </block>
                                                       </value>
                                                     </block>
                                                   </value>
                                                   <statement name="DO0">
                                                     <block type="request" id="6oB?7=]]5XoMg:k@uz@,">
                                                       <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                                                       <field name="WITH_STATEMENT">FALSE</field>
                                                       <field name="LOG"></field>
                                                       <value name="URL">
                                                         <shadow type="text" id="xsnndQV?vyI$c*2G}s$k">
                                                           <field name="TEXT">text</field>
                                                         </shadow>
                                                       </value>
                                                     </block>
                                                   </statement>
                                                   <value name="IF1">
                                                     <block type="logic_compare" id="4UKEBC1y7l6SfwtPstF,">
                                                       <field name="OP">EQ</field>
                                                       <value name="A">
                                                         <block type="get_value" id="91hMxyJ~ObWVj(|g6u}R">
                                                           <field name="ATTR">val</field>
                                                           <field name="OID">ID auswählen</field>
                                                         </block>
                                                       </value>
                                                       <value name="B">
                                                         <block type="logic_boolean" id="An3$@r$fG@X9+4YBJ|u1">
                                                           <field name="BOOL">FALSE</field>
                                                         </block>
                                                       </value>
                                                     </block>
                                                   </value>
                                                   <statement name="DO1">
                                                     <block type="request" id="d[_/}g$9|f5lK1%3cgGr">
                                                       <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                                                       <field name="WITH_STATEMENT">FALSE</field>
                                                       <field name="LOG"></field>
                                                       <value name="URL">
                                                         <shadow type="text" id="iUn:}o_$D3ZKYOVuJ2x1">
                                                           <field name="TEXT">text</field>
                                                         </shadow>
                                                       </value>
                                                     </block>
                                                   </statement>
                                                   <next>
                                                     <block type="comment" id="p{;X_ts(t#z9BYn}tmJI">
                                                       <field name="COMMENT">Rasenflaeche links</field>
                                                       <next>
                                                         <block type="controls_if" id="tFS-4KxkL37]H}f~^:qC">
                                                           <mutation elseif="1"></mutation>
                                                           <value name="IF0">
                                                             <block type="logic_compare" id="o7pUruV%bASDOdP!|)Oa">
                                                               <field name="OP">EQ</field>
                                                               <value name="A">
                                                                 <block type="get_value" id="yt4r}`5oJh7;JGxr`nWW">
                                                                   <field name="ATTR">val</field>
                                                                   <field name="OID">ID auswählen</field>
                                                                 </block>
                                                               </value>
                                                               <value name="B">
                                                                 <block type="logic_boolean" id="bd:7Qer|WqwmkLZSk;Ph">
                                                                   <field name="BOOL">TRUE</field>
                                                                 </block>
                                                               </value>
                                                             </block>
                                                           </value>
                                                           <statement name="DO0">
                                                             <block type="request" id="cu?`XX]r_2=2F`m]IxsY">
                                                               <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                                                               <field name="WITH_STATEMENT">FALSE</field>
                                                               <field name="LOG"></field>
                                                               <value name="URL">
                                                                 <shadow type="text" id="(Sc#?u^~7X4@McUiam8H">
                                                                   <field name="TEXT">text</field>
                                                                 </shadow>
                                                               </value>
                                                             </block>
                                                           </statement>
                                                           <value name="IF1">
                                                             <block type="logic_compare" id="{]V=l$m3dS=#.$4o+(g?">
                                                               <field name="OP">EQ</field>
                                                               <value name="A">
                                                                 <block type="get_value" id="t0*J3^N;*py|)[]B+f$.">
                                                                   <field name="ATTR">val</field>
                                                                   <field name="OID">ID auswählen</field>
                                                                 </block>
                                                               </value>
                                                               <value name="B">
                                                                 <block type="logic_boolean" id="xNQjD`X@RhXwKE~96|6~">
                                                                   <field name="BOOL">FALSE</field>
                                                                 </block>
                                                               </value>
                                                             </block>
                                                           </value>
                                                           <statement name="DO1">
                                                             <block type="request" id="6DsAfT[`x-oOTb],-m-G">
                                                               <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                                                               <field name="WITH_STATEMENT">FALSE</field>
                                                               <field name="LOG"></field>
                                                               <value name="URL">
                                                                 <shadow type="text" id="g%Pg[{F|uRET8aE:^}61">
                                                                   <field name="TEXT">text</field>
                                                                 </shadow>
                                                               </value>
                                                             </block>
                                                           </statement>
                                                         </block>
                                                       </next>
                                                     </block>
                                                   </next>
                                                 </block>
                                               </next>
                                             </block>
                                           </next>
                                         </block>
                                       </next>
                                     </block>
                                   </next>
                                 </block>
                               </next>
                             </block>
                           </statement>
                         </block>
                        </xml>
                        

                        Oben im roten Trigger musst du jetzt deine vier selbst erstellten Datenpunkte eintragen

                        Bei "ID auswählen" müssen ebenfalls die DPs rein.

                        Die DPs musst du in meinem Skript an folgender Stelle eintragen:

                        3644b99f-ddcd-4524-8f16-636c49088fee-grafik.png

                        Bitte den kompletten Pfad verwenden

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

                          @Kuddel

                          Hallo, geht Ventil 6 schon?

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

                            @sigi234 ich meine ja. aber würde ich auf jeden fall morgen noch einmal testen

                            meine aktuelle v2.6.8

                            bewaesserung_v2.6.8.zip

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

                              @Kuddel

                              meine aktuelle v2.6.8

                              ich habe Dir mal in Deine letzte 2.6.8 die Änderungen in der Datenpunkte_erstellen Funktion eingebaut (also auch den Teil mit dem löschen der nicht mehr benötigten Ventile und ändern der Namen)
                              Hier der Inhalt der Funktion (also nicht das ganze Blockly)
                              Schau es Dir einfach in Ruhe an wenn Du Zeit hast.

                              /**
                              * 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.
                              */
                              
                              
                              
                              
                              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) );
                                             }
                                         });
                                     });
                                 }
                              }
                              
                              //log('--- Datenobjekte fuer die Bewaesserung werden angelegt ---')
                              
                              let vars = [
                                 //Bewässerung
                                 [basic_vars_pfad+'.bewaesserung_aktiv', {'name':'bewaesserung_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.bewaesserung_automatik', {'name':'bewaesserung_automatik','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.bewaesserung_pause', {'name':'bewaesserung_pause','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                
                                 //Timer
                                 [basic_vars_pfad+'.lautzeit_gesamt_in_sek', {'name':'lautzeit_gesamt_in_sek','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.lautzeit_ende_uhrzeit', {'name':'lautzeit_ende_uhrzeit','type':'string','read':true,'write':false,'role':'string','def': ''}],
                                 [basic_vars_pfad+'.restlautzeit', {'name':'restlautzeit','type': 'mixed','read':true,'write':false,'role':'mixed','def':0}],
                                 [basic_vars_pfad+'.restlautzeit_in_sek', {'name':'restlautzeit_in_sek','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.gesamtfortschritt', {'name':'gesamtfortschritt','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'%','min':0,'max':100}],
                                 [basic_vars_pfad+'.gesamtrest', {'name':'gesamtrest','type':'mixed','read':true,'write':false,'role':'mixed','def':100,'unit':'%','min':0,'max':100}],
                                 [basic_vars_pfad+'.letzter_durchgang', {'name':'letzter_durchgang','type':'string','read':true,'write':false,'role':'string','def': '00:00'}],
                                   
                                 //Schwellwerte
                                 [basic_vars_pfad+'.schwellwerte.schwellwert_check_aktiv', {'name':'schwellwert_check_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':true}],
                                 [basic_vars_pfad+'.schwellwerte.schwellwert_regen', {'name':'schwellwert_regen','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'mm'}],
                                 [basic_vars_pfad+'.schwellwerte.schwellwert_temperatur', {'name':'schwellwert_temperatur','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'°C'}],
                                 [basic_vars_pfad+'.schwellwerte.schwellwerte_ok', {'name':'schwellwerte_ok','type':'boolean','read':true,'write':false,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.schwellwerte.schwellwerte_info_senden', {'name':'schwellwerte_info_senden','type':'boolean','read':true,'write':true,'role':'switch','def':false, 'descr':'Dieser DP wird ausgeloest, wenn die Automatik startet, die Schwellwerte aber ueberschritten wurden'}],
                                 [basic_vars_pfad+'.schwellwerte.gestern_regen', {'name':'gestern_regen','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'mm'}],
                                 [basic_vars_pfad+'.schwellwerte.gestern_temp', {'name':'gestern_temp','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'°C'}],
                                
                                 //Ventile
                                 [basic_vars_pfad+'.ventile.anzahl_aktive_ventile', {'name':'anzahl_aktive_ventile','type':'number','read':true,'write':false,'role':'number','def':0,'min':0, 'max':6} ],
                                   
                                 //Zeitplan
                                 [basic_vars_pfad+'.zeitplan.cron_restart', {'name':'cron_restart','type': 'mixed','read':true,'write':false,'role':'mixed','def':0,'unit':'Uhr'}],
                                 [basic_vars_pfad+'.zeitplan.sonnenaufgang', {'name':'sonnenaufgang','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.zeitplan.sonnenuntergang', {'name':'sonnenuntergang','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                
                                 //Morgens
                                 [basic_vars_pfad+'.zeitplan.morgens_aktiv', {'name':'morgens_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.zeitplan.morgens_uhrzeit_start', {'name':'morgens_uhrzeit_start','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.zeitplan.morgens_uhrzeit_ende', {'name':'morgens_uhrzeit_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.zeitplan.morgens_verzoegerung_sonnenaufgang', {'name':'morgens_verzoegerung_sonnenaufgang','type': 'number','read':true,'write':true,'role':'number','def':0,'unit':'Minuten'}],
                              
                                 //Abends
                                 [basic_vars_pfad+'.zeitplan.abends_aktiv', {'name':'abends_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.zeitplan.abends_uhrzeit_start', {'name':'abends_uhrzeit_start','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.zeitplan.abends_uhrzeit_ende', {'name':'abends_uhrzeit_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.zeitplan.abends_verzoegerung_sonnenuntergang', {'name':'abends_verzoegerung_sonnenuntergang','type': 'number','read':true,'write':true,'role':'number','def':0,'unit':'Minuten'}],
                              
                                 //Feste Startzeit 1
                                 [basic_vars_pfad+'.zeitplan.feste_startzeit_1_aktiv', {'name':'feste_startzeit_1_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_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'}],
                                 [basic_vars_pfad+'.zeitplan.feste_startzeit_1_uhrzeit_ende', {'name':'feste_startzeit_1_uhrzeit_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                   
                                 //Feste Startzeit 2
                                 [basic_vars_pfad+'.zeitplan.feste_startzeit_2_aktiv', {'name':'feste_startzeit_2_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_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'}],
                                 [basic_vars_pfad+'.zeitplan.feste_startzeit_2_uhrzeit_ende', {'name':'feste_startzeit_2_uhrzeit_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                
                                
                                 //Feste Startzeit 3
                                 [basic_vars_pfad+'.zeitplan.feste_startzeit_3_aktiv', {'name':'feste_startzeit_3_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_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'}],
                                 [basic_vars_pfad+'.zeitplan.feste_startzeit_3_uhrzeit_ende', {'name':'feste_startzeit_3_uhrzeit_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                              ]
                              createUserStates(basic_vars_speicherort, false, vars);
                              
                                 //Diese DPs sollen bei jedem Speichern überschrieben werden
                                 let vars_writable = [
                                 [basic_vars_pfad+'.ventile.anzahl_ventile', {'name':'anzahl_ventile','type':'number','read':true,'write':false,'role':'number','def':basic_vars_anzahl_ventile,'min':0, 'max':basic_vars_anzahl_ventile} ],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_name', {'name':'ventil_1_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis1_name}],
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2_name', {'name':'ventil_2_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis2_name}],
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3_name', {'name':'ventil_3_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis3_name}],
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4_name', {'name':'ventil_4_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis4_name}],
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5_name', {'name':'ventil_5_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis5_name}],
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6_name', {'name':'ventil_6_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis6_name}],
                              ]
                              createUserStates(basic_vars_speicherort, true, vars_writable);
                              
                              if(basic_vars_anzahl_ventile > 0) {
                                 let vars_ventil_1 = [
                                 //Ventil 1
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1', {'name':'ventil_1','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_dauer', {'name': 'ventil_1_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_dauer_in_min', {'name': 'ventil_1_dauer_in_min','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_ende', {'name':'ventil_1_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_fortschritt', {'name':'ventil_1_fortschritt','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'%','min':0,'max':100}],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_rest', {'name':'ventil_1_rest','type':'number','read':true,'write':false,'role':'number','def':100,'unit':'%','min':0,'max':100}],
                                 //[basic_vars_pfad+'.ventile.ventil_1.ventil_1_name', {'name':'ventil_1_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis1_name}],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_restzeit', {'name':'ventil_1_restzeit','type': 'string','read':true,'write':false,'role':'string','def':'0:00','unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_restzeit_in_sek', {'name':'ventil_1_restzeit_in_sek','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_status', {'name':'ventil_1_status','type':'boolean','read':true,'write':false,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.ventile.ventil_1.ventil_1_parallel', {'name':'ventil_1_parallel','type':'boolean','read':true,'write':true,'role':'switch','def':false,'descr':'Wenn dieser DP aktiviert wird, dann werden Ventil 2 bis X parallel zu Ventil 1 gestartet. Usecase: an Ventil 1 ist ein Tropfschlauch angeschlossen.'}],
                              ]
                              createUserStates(basic_vars_speicherort, false, vars_ventil_1);}
                              
                              if(basic_vars_anzahl_ventile > 1) {
                                 let vars_ventil_2 = [
                                 //Ventil 2
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2', {'name':'ventil_2','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2_dauer', {'name': 'ventil_2_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2_dauer_in_min', {'name': 'ventil_2_dauer_in_min','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2_ende', {'name':'ventil_2_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2_fortschritt', {'name':'ventil_2_fortschritt','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'%','min':0,'max':100}],
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2_rest', {'name':'ventil_2_rest','type':'number','read':true,'write':false,'role':'number','def':100,'unit':'%','min':0,'max':100}],
                                 //[basic_vars_pfad+'.ventile.ventil_2.ventil_2_name', {'name':'ventil_2_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis2_name}],
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2_restzeit', {'name':'ventil_2_restzeit','type': 'string','read':true,'write':false,'role':'string','def':'0:00','unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2_restzeit_in_sek', {'name':'ventil_2_restzeit_in_sek','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_2.ventil_2_status', {'name':'ventil_2_status','type':'boolean','read':true,'write':false,'role':'switch','def':false}],
                              ]
                              createUserStates(basic_vars_speicherort, false, vars_ventil_2);}
                              
                              if(basic_vars_anzahl_ventile > 2) {
                              let vars_ventil_3 = [
                                 //Ventil 3
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3', {'name':'ventil_3','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3_dauer', {'name': 'ventil_3_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3_dauer_in_min', {'name': 'ventil_3_dauer_in_min','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3_ende', {'name':'ventil_3_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3_fortschritt', {'name':'ventil_3_fortschritt','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'%','min':0,'max':100}],
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3_rest', {'name':'ventil_3_rest','type':'number','read':true,'write':false,'role':'number','def':100,'unit':'%','min':0,'max':100}],
                                 //[basic_vars_pfad+'.ventile.ventil_3.ventil_3_name', {'name':'ventil_3_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis3_name}],
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3_restzeit', {'name':'ventil_3_restzeit','type': 'string','read':true,'write':false,'role':'string','def':'0:00','unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3_restzeit_in_sek', {'name':'ventil_3_restzeit_in_sek','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_3.ventil_3_status', {'name':'ventil_3_status','type':'boolean','read':true,'write':false,'role':'switch','def':false}],	
                              ]
                              createUserStates(basic_vars_speicherort, false, vars_ventil_3);}
                              
                              if(basic_vars_anzahl_ventile > 3) {
                                 let vars_ventil_4 = [
                                 //Ventil 4
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4', {'name':'ventil_4','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4_dauer', {'name': 'ventil_4_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4_dauer_in_min', {'name': 'ventil_4_dauer_in_min','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4_ende', {'name':'ventil_4_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4_fortschritt', {'name':'ventil_4_fortschritt','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'%','min':0,'max':100}],
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4_rest', {'name':'ventil_4_rest','type':'number','read':true,'write':false,'role':'number','def':100,'unit':'%','min':0,'max':100}],
                                 //[basic_vars_pfad+'.ventile.ventil_4.ventil_4_name', {'name':'ventil_4_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis4_name}],
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4_restzeit', {'name':'ventil_4_restzeit','type': 'string','read':true,'write':false,'role':'string','def':'0:00','unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4_restzeit_in_sek', {'name':'ventil_4_restzeit_in_sek','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_4.ventil_4_status', {'name':'ventil_4_status','type':'boolean','read':true,'write':false,'role':'switch','def':false}],
                              ]
                              createUserStates(basic_vars_speicherort, false, vars_ventil_4);}
                              
                              if(basic_vars_anzahl_ventile > 4) {
                                 let vars_ventil_5 = [
                                 //Ventil 5
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5', {'name':'ventil_5','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5_dauer', {'name': 'ventil_5_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5_dauer_in_min', {'name': 'ventil_5_dauer_in_min','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5_ende', {'name':'ventil_5_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5_fortschritt', {'name':'ventil_5_fortschritt','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'%','min':0,'max':100}],
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5_rest', {'name':'ventil_5_rest','type':'number','read':true,'write':false,'role':'number','def':100,'unit':'%','min':0,'max':100}],
                                 //[basic_vars_pfad+'.ventile.ventil_5.ventil_5_name', {'name':'ventil_5_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis5_name}],
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5_restzeit', {'name':'ventil_5_restzeit','type': 'string','read':true,'write':false,'role':'string','def':'0:00','unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5_restzeit_in_sek', {'name':'ventil_5_restzeit_in_sek','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_5.ventil_5_status', {'name':'ventil_5_status','type':'boolean','read':true,'write':false,'role':'switch','def':false}],
                              ]
                              createUserStates(basic_vars_speicherort, false, vars_ventil_5);}
                              
                              if(basic_vars_anzahl_ventile > 5) {
                                 let vars_ventil_6 = [
                                 //Ventil 6
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6', {'name':'ventil_6','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6_dauer', {'name': 'ventil_6_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6_dauer_in_min', {'name': 'ventil_6_dauer_in_min','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6_ende', {'name':'ventil_6_ende','type':'string','read':true,'write':false,'role':'string','def':'00:00','unit':'Uhr'}],
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6_fortschritt', {'name':'ventil_6_fortschritt','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'%','min':0,'max':100}],
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6_rest', {'name':'ventil_6_rest','type':'number','read':true,'write':false,'role':'number','def':100,'unit':'%','min':0,'max':100}],
                                 //[basic_vars_pfad+'.ventile.ventil_6.ventil_6_name', {'name':'ventil_6_name','type':'string','read':true,'write':false,'role':'string','def':basic_vars_kreis6_name}],
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6_restzeit', {'name':'ventil_6_restzeit','type': 'string','read':true,'write':false,'role':'string','def':'0:00','unit':'Minuten'}],
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6_restzeit_in_sek', {'name':'ventil_6_restzeit_in_sek','type':'number','read':true,'write':false,'role':'number','def':0,'unit':'Sekunden'}],
                                 [basic_vars_pfad+'.ventile.ventil_6.ventil_6_status', {'name':'ventil_6_status','type':'boolean','read':true,'write':false,'role':'switch','def':false}],
                              ]
                              createUserStates(basic_vars_speicherort, false, vars_ventil_6);}
                              
                              //Ab hier nicht benötigte Datenpunkte löschen
                              //###############################################################################
                              //Ventil 1 wieder löschen
                              timeout = setTimeout(function () {
                              
                              if(basic_vars_anzahl_ventile < 1 && basic_vars_speicherort.slice(0, 10) == 'javascript') {
                              const idsjs = $('javascript.*.'+[basic_vars_pfad]+'.ventile.ventil_1.*');
                              idsjs.each(function(id, i) {
                              if(existsState(id)) deleteState(id.substring(13));})};
                              
                              if(basic_vars_anzahl_ventile < 1 && basic_vars_speicherort.slice(0, 10) == '0_userdata') {
                              const idsud = $('0_userdata.0.'+[basic_vars_pfad]+'.ventile.ventil_1.*');
                              idsud.each(function(id, i) {
                              if(existsState(id)) deleteState(id);})};
                              
                              //Ventil 2 wieder löschen
                              if(basic_vars_anzahl_ventile < 2 && basic_vars_speicherort.slice(0, 10) == 'javascript') {
                              const idsjs = $('javascript.*.'+[basic_vars_pfad]+'.ventile.ventil_2.*');
                              idsjs.each(function(id, i) {
                              if(existsState(id)) deleteState(id.substring(13));})};
                              
                              if(basic_vars_anzahl_ventile < 2 && basic_vars_speicherort.slice(0, 10) == '0_userdata') {
                              const idsud = $('0_userdata.0.'+[basic_vars_pfad]+'.ventile.ventil_2.*');
                              idsud.each(function(id, i) {
                              if(existsState(id)) deleteState(id);})};
                              
                              //Ventil 3 wieder löschen
                              if(basic_vars_anzahl_ventile < 3 && basic_vars_speicherort.slice(0, 10) == 'javascript') {
                              const idsjs = $('javascript.*.'+[basic_vars_pfad]+'.ventile.ventil_3.*');
                              idsjs.each(function(id, i) {
                              if(existsState(id)) deleteState(id.substring(13));})};
                              
                              if(basic_vars_anzahl_ventile < 3 && basic_vars_speicherort.slice(0, 10) == '0_userdata') {
                              const idsud = $('0_userdata.0.'+[basic_vars_pfad]+'.ventile.ventil_3.*');
                              idsud.each(function(id, i) {
                              if(existsState(id)) deleteState(id);})};
                              
                              //Ventil 4 wieder löschen
                              if(basic_vars_anzahl_ventile < 4 && basic_vars_speicherort.slice(0, 10) == 'javascript') {
                              const idsjs = $('javascript.*.'+[basic_vars_pfad]+'.ventile.ventil_4.*');
                              idsjs.each(function(id, i) {
                              if(existsState(id)) deleteState(id.substring(13));})};
                              
                              if(basic_vars_anzahl_ventile < 4 && basic_vars_speicherort.slice(0, 10) == '0_userdata') {
                              const idsud = $('0_userdata.0.'+[basic_vars_pfad]+'.ventile.ventil_4.*');
                              idsud.each(function(id, i) {
                              if(existsState(id)) deleteState(id);})};
                              
                              //Ventil 5 wieder löschen
                              if(basic_vars_anzahl_ventile < 5 && basic_vars_speicherort.slice(0, 10) == 'javascript') {
                              const idsjs = $('javascript.*.'+[basic_vars_pfad]+'.ventile.ventil_5.*');
                              idsjs.each(function(id, i) {
                              if(existsState(id)) deleteState(id.substring(13));})};
                              
                              if(basic_vars_anzahl_ventile < 5 && basic_vars_speicherort.slice(0, 10) == '0_userdata') {
                              const idsud = $('0_userdata.0.'+[basic_vars_pfad]+'.ventile.ventil_5.*');
                              idsud.each(function(id, i) {
                              if(existsState(id)) deleteState(id);})};
                              
                              //Ventil 6 wieder löschen
                              if(basic_vars_anzahl_ventile < 6 && basic_vars_speicherort.slice(0, 10) == 'javascript') {
                              const idsjs = $('javascript.*.'+[basic_vars_pfad]+'.ventile.ventil_6.*');
                              idsjs.each(function(id, i) {
                              if(existsState(id)) deleteState(id.substring(13));})};
                              
                              if(basic_vars_anzahl_ventile < 6 && basic_vars_speicherort.slice(0, 10) == '0_userdata') {
                              const idsud = $('0_userdata.0.'+[basic_vars_pfad]+'.ventile.ventil_6.*');
                              idsud.each(function(id, i) {
                              if(existsState(id)) deleteState(id);})};
                              }, 5000);
                              //###############################################################################
                              
                              //Funktion main mit Verzögerung aufrufen
                              timeout = setTimeout(function () {
                                 Variablen_definieren();
                              }, 5000);
                              

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

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

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

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

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

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

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

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

                                @sigi234 ich meine ja. aber würde ich auf jeden fall morgen noch einmal testen

                                meine aktuelle v2.6.8

                                Test:

                                javascript.0	2020-07-23 21:36:15.275	warn	(25464) You are assigning a object to the state "javascript.0.bewaesserung.ventile.ventil_6.ventil_6_restzeit_in_sek" which expects a number. Please fix your code to use a number or change the state
                                

                                RAW:

                                {
                                  "from": "system.adapter.javascript.0",
                                  "user": "system.user.admin",
                                  "ts": 1595360262144,
                                  "common": {
                                    "name": "ventil_6_restzeit_in_sek",
                                    "type": "number",
                                    "role": "number",
                                    "unit": "Sekunden",
                                    "def": 0,
                                    "read": true,
                                    "write": true
                                  },
                                  "native": {},
                                  "acl": {
                                    "object": 1636,
                                    "owner": "system.user.admin",
                                    "ownerGroup": "system.group.administrator",
                                    "state": 1636
                                  },
                                  "_id": "javascript.0.bewaesserung.ventile.ventil_6.ventil_6_restzeit_in_sek",
                                  "type": "state"
                                }
                                

                                Ventil 6 geht statt 1 Minute auf 1 Sekunde

                                Screenshot (271)_LI.jpg

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

                                  @sigi234 danke für die Rückmeldung. Versuche ich heute vormittag nochmal zu testen

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

                                    @sigi234

                                    Bei mir funktioniert Ventil 6 (Shelly) fehlerfrei

                                    8ba721aa-1c12-4dd6-a5db-19c4251084b0-grafik.png

                                    Hast du es merhfach versucht ?

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

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

                                      Hast du es merhfach versucht ?

                                      Ja

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

                                        @sigi234 habe gerade die erweiterung von @dslraser zum löschen der nicht mehr benötigten DPs eingebaut.

                                        • Anzahl Ventile auf 5 geändert
                                        • Alle DPs für Ventil 6 wurden gelöscht
                                        • Anzahl Ventile auf 6 geändert
                                        • Alle DPs für Ventil 6 wurden erstellt
                                        • Dauer Ventil 6 auf 5 Minuten gestellt
                                        • Bewässerung manuell gestartet

                                        424fdb2e-a476-4cfe-a482-15326efbf7c5-grafik.png

                                        378d6737-783c-46ba-bece-930ca65dab6b-grafik.png

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

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

                                          abe gerade die erweiterung von @dslraser zum löschen der nicht mehr benötigten DPs eingebaut.

                                          Schon aktuell in bewaesserung_v2.6.8.zip ?

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

                                            @sigi234 bewaesserung_v2.6.9.zip

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            771
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

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