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 6 Ventilen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    324

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

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

[Vorlage] Gartenbewässerung mit 6 Ventilen

Geplant Angeheftet Gesperrt Verschoben Blockly
1.2k Beiträge 76 Kommentatoren 378.4k Aufrufe 88 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.
  • K Kuddel

    @sigi234 klaro

    bewaesserung_v2.6.8.zip

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

    @Kuddel

    zum Test von @sigi234

    Test:

    Anzahl Ventile habe ich auf 6 erhöht, Im DP steht noch immer 5

    Dazu müßte man in der Funktion Datenpunkte_erstellen was verändern.

    Ich habe Dir hier mal ein Beispiel eingebaut. Schau Dir einfach mal die Funktion Datenpunkte_erstellen an.
    Dort habe ich die Anzahl der Ventile "ausgegliedert" und auf true gestellt, so wird der DP beim Neustart vom Blockly neu geschrieben. Das könntest Du auch mit den DP machen, die die Namen für die Kreise beinhalten. (ich weiß nur nicht ob der DP auch in den Objekten beschreibbar sein soll, oder nur zur Anzeige dient ? Wenn der auch von dort aus die Einstellungen verändern soll, dann muß das noch etwas anders gemacht werden. Wenn es nur eine "Anzeige" ist, wieviele Ventile da sind, dann würde ich den read only machen)
    Unten in der Funktion habe ich Dir mal ein Beispiel (für die 6 Ventile) eingebaut, wie Du nicht benötigte DP wieder löschen kannst. Wird also im Blockly in den Haupteinstellungen die Anzahl der Ventile z.B. auf 4 eingestellt, dann werden Ventil 5 und 6 in den Objekten wieder gelöscht. Ich weiß nur nicht, ob Du noch einen anderen Bezug auf die Ventile im Blockly hast ?

    Datei ist nur für @Kuddel , da vieles deaktiviert ist.
    bewaesserung_v2.6.8-test.txt.zip

    EDIT: übrigens....

    (3984) You are assigning a number to the state "0_userdata.0.Bewaesserung.zeitplan.abends_verzoegerung_sonnenuntergang" which expects a string. Please fix your code to use a string or change the stat
    (3984) You are assigning a number to the state "0_userdata.0.Bewaesserung.zeitplan.morgens_verzoegerung_sonnenaufgang" which expects a string. Please fix your code to use a string or change the state
    
    1 Antwort Letzte Antwort
    0
    • K Offline
      K Offline
      Kuddel
      schrieb am zuletzt editiert von
      #280

      @sigi234 vielen Dank für den Test. Bei mir startet Ventil 2 ohne Problem.

      @dslraser die beiden von dir angemerkte DPs habe ich korrigiert

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

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

      //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} ],
      if(basic_vars_anzahl_ventile > 1) {[basic_vars_pfad+'.ventile.ventil_1.ventil_1_name', {'name':'ventil_1_name','type':'string','read':true,'write':true,'role':'string','def':basic_vars_kreis1_name}],}
      ]
      createUserStates(basic_vars_speicherort, true, vars_writable);
      
      dslraserD 2 Antworten Letzte Antwort
      0
      • K Kuddel

        @sigi234 vielen Dank für den Test. Bei mir startet Ventil 2 ohne Problem.

        @dslraser die beiden von dir angemerkte DPs habe ich korrigiert

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

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

        //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} ],
        if(basic_vars_anzahl_ventile > 1) {[basic_vars_pfad+'.ventile.ventil_1.ventil_1_name', {'name':'ventil_1_name','type':'string','read':true,'write':true,'role':'string','def':basic_vars_kreis1_name}],}
        ]
        createUserStates(basic_vars_speicherort, true, vars_writable);
        
        dslraserD Offline
        dslraserD Offline
        dslraser
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #281

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

          @sigi234 vielen Dank für den Test. Bei mir startet Ventil 2 ohne Problem.

          @dslraser die beiden von dir angemerkte DPs habe ich korrigiert

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

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

          //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} ],
          if(basic_vars_anzahl_ventile > 1) {[basic_vars_pfad+'.ventile.ventil_1.ventil_1_name', {'name':'ventil_1_name','type':'string','read':true,'write':true,'role':'string','def':basic_vars_kreis1_name}],}
          ]
          createUserStates(basic_vars_speicherort, true, vars_writable);
          
          dslraserD Offline
          dslraserD Offline
          dslraser
          Forum Testing Most Active
          schrieb am zuletzt editiert von dslraser
          #282

          @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 Antwort Letzte Antwort
          0
          • Andreas KA Offline
            Andreas KA Offline
            Andreas K
            schrieb am zuletzt editiert von
            #283

            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 Antwort Letzte Antwort
            0
            • Andreas KA Andreas K

              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 Offline
              K Offline
              Kuddel
              schrieb am zuletzt editiert von
              #284

              @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 Antwort Letzte Antwort
              0
              • Andreas KA Offline
                Andreas KA Offline
                Andreas K
                schrieb am zuletzt editiert von
                #285

                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 Antwort Letzte Antwort
                0
                • Andreas KA Andreas K

                  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 Offline
                  K Offline
                  Kuddel
                  schrieb am zuletzt editiert von
                  #286

                  @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 Antwort Letzte Antwort
                  0
                  • Andreas KA Offline
                    Andreas KA Offline
                    Andreas K
                    schrieb am zuletzt editiert von
                    #287

                    @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 Antwort Letzte Antwort
                    0
                    • Andreas KA Andreas K

                      @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 Offline
                      K Offline
                      Kuddel
                      schrieb am zuletzt editiert von
                      #288

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

                        @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 KA Offline
                        Andreas KA Offline
                        Andreas K
                        schrieb am zuletzt editiert von
                        #289

                        @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 Antwort Letzte Antwort
                        0
                        • Andreas KA Andreas K

                          @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 Offline
                          K Offline
                          Kuddel
                          schrieb am zuletzt editiert von
                          #290

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

                            Hallo zusammen,

                            da ich beim Bearbeiten des eigentlichen Threads die Seite 1 gechrottet habe, geht es ab sofort hier weiter.

                            Funktionen:

                            - Automatische Bewässerung mit bis zu 6 Ventilen
                            - Entwickelt für HomeMatic (Adapter: hm-rpc), Sonoff (Adapter: sonoff) und Shelly (Adapter: shelly)
                            - Im Skript wird eine Anschaltzeit pro Aktorkanal gesetzt, damit die Aktoren automatisch ausschalten
                            - Die Ventile starten nacheinander
                            - Einzelne Ventile können deaktiviert werden
                            - Anzeige Gesamtlaufzeit, Restlaufzeit
                            - Anzeige Restlaufzeit gesamt / Restlaufzeit pro Ventil
                            - Anzeige Fortschritt gesamt in Prozent
                            - Anzeige Fortschritt pro Ventil in Prozent
                            - Benachrichtigung per Mail und/oder Pushover und/oder Telegram
                            - Benachrichtigung per Alexa Sprachausgabe
                            - Automatischer Start: Morgens, Abends (in Abhängigkeit vom Sonnenauf- und Untergang) oder 3 feste Startzeiten
                            - Intervall-Modus möglich (Anzahl Intervalle, Länge der Pausen dazwischen)
                            - Automatische Erstellung von Statistiken (Laufzeit / Wassermenge pro Woche, Monat, Jahr)
                            - Unterbrechung / Pausen-Funkton integriert

                            Hinweis zur Verwendung mit Tasmota
                            Mit Version 9.4.0 haben sich die Namen einiger Datenobjekte geändert. Daher funktioniert dieses Skript nur mit Tasmota Aktoren mit der Firmware 9.4.0 und neuer

                            Unter diesem Link findet ihr meine Komplette VIS inkl. der Bewässerungssteuerung: komplette VIS
                            oder nur die Bewässerungssteuerung Bewaesserungs VIS

                            7f9f903d-960d-42af-ab12-fa9dbc36d0de-grafik.png

                            Mail-Info beim Start


                            Bewaesserungsdauer: 40:02 Min
                            Start: 04:35:02 Uhr
                            Ende: 05:15:04 Uhr

                            Ventil 1 (Hecke): Dauer: 40:00 Min / Ende: 05:05:00 Uhr
                            Ventil 2 (Rasen): Dauer: 10:00 Min / Ende: 04:45:00 Uhr
                            Ventil 3 (Rasen-Ecke): Dauer: 10:00 Min / Ende: 04:55:02 Uhr
                            Ventil 4 (Beet): Dauer: 10:00 Min / Ende: 05:05:03 Uhr
                            Ventil 4 (kl. Rasen): Dauer: 10:00 Min / Ende: 05:15:04 Uhr

                            Skript-Version: 4.3.5

                            Aktuelle Skript Version zum herunterladen (Blockly Export)
                            bewaesserung_v442.zip

                            Anleitung für die Inbetriebnahme des Skriptes:


                            Blockly Skript anpassen:

                            Die Variablen für euch entsprechend anpassen
                            489dffe1-3ae6-4285-aa9c-46eed75b2383-grafik.png

                            5540df54-47d8-4d3d-b17f-83bce4c16c49-grafik.png

                            Sofern Tasmota mit Zugangsadaten im Einsatz ist:
                            3058586b-5183-4b8e-85dd-c7afbcf2bd6f-grafik.png

                            ad5c05b3-1f8f-48df-9168-1ab89e2c1c6d-grafik.png

                            8ec89f53-a87e-4372-9124-7f144329f779-grafik.png

                            Skript starten

                            Folgendes DPs müssen mindestens angepasst werden

                            0_userdata.0.bewaesserung.ventile.ventil_1.ventil_1
                            

                            auf true: Damit wird Ventil 1 für die Bewäserung berücksichtig

                            0_userdata.0.bewaesserung.ventile.ventil_1.ventil_1_dauer
                            

                            in Seek
                            oder

                            0_userdata.0.bewaesserung.ventile.ventil_1.ventil_1_dauer_in_min
                            

                            in Minuten

                            Jetzt kann das Skript schon eimal manuell gestartet werden:

                            0_userdata.0.bewaesserung.bewaesserung_aktiv
                            

                            auf true

                            Anleitung für den Log Parser


                            Jeder Log Eintrag vom Bewässerungsskript beginnt mit "Bewaesserung". Daher ist dieser Begriff entscheidend für den Log Parser

                            Name: Bewaesserung
                            Whitelist UND: Bewaesserung:
                            Whitelist ODER:
                            Blacklist:
                            Bereinigen: Bewaesserung:
                            Datumsformat: #DD.MM.# hh:mm

                            17b90c58-e2bd-471c-b834-c497f858a556-grafik.png

                            Offene Punkte / To do

                            • autom. Integration in IoT @dslraser
                            • Integration von KNX Aktoren @ice77 @leachim200
                            • Erweiterung Statistik: Laufzeit pro Ventil, Wasserverbrauch pro Ventil

                            CHANGELOG


                            4.4.2 (2023-04-06) bewaesserung_v442.zip
                            Bugfix Statistik bzgl. "is calling setState more than 1000 times per minute! Stopping Script now! Please check your script!"

                            4.4.1 (2022-08-16) bewaesserung_v441.zip
                            Bugfixes

                            4.4.0 (2022-08-11) bewaesserung_v440.zip
                            Aktoren-Namen der Ventile in DP schreiben für direkte Aktivierung per VIS

                            4.3.5 (2022-08-04) bewaesserung_V435.zip
                            Bugfix Name Ventil 6
                            Bugfix Berechnung Anzahl der Ventile

                            4.3.4 (2022-07-19) bewaessserung_v434.zip
                            Bugfix Start Ventil 1

                            4.3.3 (2022-06-20) bewaesserung_v433.zip
                            Bugfix beim Stop (Reset Intervall-Counter)
                            Bugfix Alexa-Ansage (Stop / Schwellwerte Fehler)

                            4.3.2 (2022-06-13) bewaesserung_v432.zip
                            Berechnung Gesamt-Enduhrzeit bei Intervall-Schaltung
                            Anpassung Mail / Log Betreff bei Intervall-Schaltung
                            Bugfix Alexa Ansagen

                            4.3.1 (2022-06-08) bewaesserung_v431.zip
                            Bugfixes (Stop Intervall-Schaltung, DPs für OnTime Pumpe und Netzteil, DPs für Einschaltung Netzteil, Reset Intervall Counter, Telegram Benachrichtigung)
                            Ventile / Kreis können nachträglich umbenannt werden

                            4.3.0 (2022-05-04) bewaesserung_v4.3.0.zip
                            Redesign Intervall-Schaltung
                            Bugfixes

                            4.2.0 (2022-04-23) bewaesserung_v4.2.0.zip
                            Skript Version in Start-Mail hinterlegt
                            Shelly Plus (andere DPs) Unterstützung integriert

                            4.1.0 (2022-04-20) bewaesserung_v4.1.0.zip
                            Buxfix Intervall-Steuerung
                            Check, ob Aktor korrekt aktiviert wurde

                            4.0.2 (2022-04-11) bewaesserung_v4.0.2.zip
                            Buxfixes bzgl. Alexa-Sprachausgabe und LogParser

                            4.0.1 (2022-03-25) bewaesserung_v4.0.1.zip
                            Bugfix bzgl. der Enduhrzeit der einzelnen Ventile

                            4.0.0 (2021-09-06)
                            Redesign Erstellung aller DPs (keine Überschreiben mehr, nur noch bei Ausgewählten DPs)
                            Mail-Versand auf Javascript umgestellt
                            Instanz für Telegramm und Mail ergänzt

                            3.2.2 (2021-09-03)
                            Pushover Instanz Angabe ergänzt

                            3.2.1 (2021-08-31)
                            Status DP für VIS hinzugefügt

                            3.2.0 (2021-08-09)
                            Buxfixes für JS-Controller 3.3.15 und Javascript 5.2.8
                            "... has been written without ack-flag ..."

                            3.1.1 (2021-08-04)
                            Bugfix Gesamtdauer bei Bewässerungsstart

                            3.1.0 (2021-07-06)
                            Tasmota Anmeldedaten können verwendet werden
                            Tasmota PulseTime erhöht auf 8
                            Unterscheidung ziwschen HM und HM-Wired ergänzt (Vermeidung Fehler mit der OnTime)

                            3.0.0 (2021-07-05)
                            Anpassung der DPs für Tasmota ab FW Version 9.4.0

                            2.10.7 (2021-06-28)
                            Buxfix Anzahl Ventile
                            Skript-Version wird in DP für VIS geschrieben

                            2.10.6 (2021-06-24)
                            Buxfix Laufzeit-Brechnung
                            Buxfix Tipfehler in DPs

                            2.10.5 (2021-06-16)
                            Pausenschaltung für Pumpen-Aktor ergänzt

                            2.10.4 (2021-06-10
                            Bugfix (aktuellen Wochentag beim DP erstellen setzen)
                            Beschreibung für Wassermengen-Statistik ergänzt (Liter pro Stunde)

                            2.10.3 (2021-05-25)
                            Buxfix bei der Berechnung der Bewässerungsdauer

                            2.10.2 (2021-03-20)
                            Bugfix beim setzen der Timer (Cron)
                            Verbauch runden auf 3 Nachkommastellen

                            2.10.1 (2020-09-23)
                            Berechnung der Endzeit für die VIS bei Festen Startzeiten ergänzt

                            2.10.0 (2020-09-16)
                            Erweiterung Statistik um verbrauchte Wassermenge

                            2.9.2 (2020-08-13)
                            Erweiterung Statistik um Woche

                            2.9.1 (2020-08-12)
                            Steuerung eines Netzeil für Ventile analog zur Pumpensteeuerung hinzugefügt

                            2.9.0 (2020-08-11)
                            Statistiken hinzugefügt

                            2.8.0 (2020-08-06)
                            Intervall Bewässerung hinzugefügt
                            Zeitplan DP Struktur aufgeräumt

                            2.7.5 (2020-08-05)
                            Vereinheitlichung Log-Einträge (Jeder Eintrag beginnt mit "Bewaesserung: ")

                            2.7.4 (2020-08-04)
                            Diverse Bugfixes
                            Erstellung von Logeinträgen komplett überarbeitet

                            2.7.3 (2020-08-03)
                            Buxfixes für Benachrichtigungen
                            Verwenung der Wingeschwindigkeit bem Wetter-Check
                            Neuer Status-DP, ob Bewässerung gestartet wird

                            2.7.2 (2020-07-31)
                            Bugfix Ventil 6

                            2.7.1 (2020-07-31)
                            Aktivierung / Deaktiverung der Verwendung von Wetterdaten hinzugefügt

                            2.7.0 (2020-07-31)
                            Alexa Befehle von aktualisiere auf steuere geändert
                            Wochentage für Cron auswählbar

                            2.6.8 (2020-07-24)
                            Nicht mehr benötigte DPs werden gelöscht
                            Bugfixes

                            2.6.8 (2020-07-23)
                            Erstellung der DPs überarbeitet
                            Alle nciht VIS-relevanten VIS können nur noch durch das Skript geändert werden
                            Anpassung jetzt nur noch im Blocky und nicht mehr im Javascript notwendig
                            Telegram Nachrichten hinzugefügt

                            2.6.7 (2020-07-18)
                            Bugfixes bzgl. Logging, Pushover und Alexa
                            Unterscheidung bei Benachrichtigung zwischen Start, Stop, Pause und Fortsetzen
                            Neuer DP für die VIS: letzte Laufzeit

                            2.6.6 (2020-07-14)
                            Automatik ausschalten, wenn keine Zeiten aktiviert sind
                            Schwellwerte-Check per VIS aktivieren / deaktivieren

                            2.6.5 (2020-07-13)
                            Bugfix Ventil 6
                            Schwellwerte Regen / Temp gestern hinzugefügt

                            2.6.4 (2020-07-10)
                            Pushover ID kann hinterlegt werden
                            Mail-Adresse-Variable hinzugefügt
                            Dauer pro Ventil kann über die VIS in Min. gesetzt werden
                            Fortschritt pro Ventil und Gesamt Rest hinzugefügt

                            2.6.3 (2020-06-28)
                            Parallel-Modus für Ventil 1 wieder hinzugefügt
                            Enduhrzeiten für morgens und Abends werden errechnet

                            2.6.2 (2020-06-20)
                            Bugfix Berechnung der Startzeit morgens
                            Anschaltdauer für Pumpe hinzugefügt
                            Benachrichtigung (Mail / Log) wenn Bewässerung startet, aber Schwellwerte nicht passen
                            Vorhandene DPs werde nicht mehr überschrieben

                            2.6.1 (2020-06-13)
                            Bugfix für HM ON_TIME

                            2.6.0 (2020-06-12)
                            Erweitert auf 6 Ventile
                            Shelly Aktoren werden supportet

                            2.5.1 (2020-06-04)
                            Bugfixes im Bereich Logeinträge

                            2.5.0 (2020-05-26)
                            Ventil 5 hinzugefügt

                            2.4.0 (2020-05-20)
                            Bugfixes im Log-Bereich

                            sigi234S Online
                            sigi234S Online
                            sigi234
                            Forum Testing Most Active
                            schrieb am zuletzt editiert von sigi234
                            #291

                            @Kuddel

                            Hallo, geht Ventil 6 schon?

                            Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                            Immer Daten sichern!

                            K 1 Antwort Letzte Antwort
                            0
                            • sigi234S sigi234

                              @Kuddel

                              Hallo, geht Ventil 6 schon?

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

                              @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

                              dslraserD sigi234S 2 Antworten Letzte Antwort
                              0
                              • K Kuddel

                                @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

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

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

                                1 Antwort Letzte Antwort
                                1
                                • K Kuddel

                                  @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

                                  sigi234S Online
                                  sigi234S Online
                                  sigi234
                                  Forum Testing Most Active
                                  schrieb am zuletzt editiert von sigi234
                                  #294

                                  @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

                                  Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                  Immer Daten sichern!

                                  K 1 Antwort Letzte Antwort
                                  0
                                  • sigi234S 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 Offline
                                    K Offline
                                    Kuddel
                                    schrieb am zuletzt editiert von
                                    #295

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

                                    1 Antwort Letzte Antwort
                                    0
                                    • K Offline
                                      K Offline
                                      Kuddel
                                      schrieb am zuletzt editiert von
                                      #296

                                      @sigi234

                                      Bei mir funktioniert Ventil 6 (Shelly) fehlerfrei

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

                                      Hast du es merhfach versucht ?

                                      sigi234S 1 Antwort Letzte Antwort
                                      0
                                      • K Kuddel

                                        @sigi234

                                        Bei mir funktioniert Ventil 6 (Shelly) fehlerfrei

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

                                        Hast du es merhfach versucht ?

                                        sigi234S Online
                                        sigi234S Online
                                        sigi234
                                        Forum Testing Most Active
                                        schrieb am zuletzt editiert von
                                        #297

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

                                        Hast du es merhfach versucht ?

                                        Ja

                                        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                        Immer Daten sichern!

                                        K 1 Antwort Letzte Antwort
                                        0
                                        • sigi234S sigi234

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

                                          Hast du es merhfach versucht ?

                                          Ja

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

                                          @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

                                          sigi234S 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

                                          541

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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