Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

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

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    314

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

[Vorlage] Gartenbewässerung mit 4 Ventilen

Scheduled Pinned Locked Moved Blockly
415 Posts 22 Posters 87.5k Views 36 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Kuddel

    @darkiop und @AtomicIX
    ich habe Version 1.2.0 jetzt komplett auf Variablen umgebaut.

    Vllt. habt ihr Bock zu testen ?

    bewaesserung_v1.3.0_beta.txt

    Erste Testergebnisse:

    • Die ersten drei Ventile starten korrekt nacheinader.
    • Ventil 4 startet leider nicht.
    • Wer den Fehler findet, darf gern Bescheid geben.
    dslraserD Offline
    dslraserD Offline
    dslraser
    Forum Testing Most Active
    wrote on last edited by
    #197

    @Kuddel
    Was möchtest Du hier machen ? (das geht so nicht und wird angemeckert) Sollen das die Namen vom Ventil sein ? Also Hecke, Rasen, Beet usw...

    Bildschirmfoto 2020-04-01 um 13.38.02.png

    K 1 Reply Last reply
    0
    • dslraserD dslraser

      @Kuddel
      Was möchtest Du hier machen ? (das geht so nicht und wird angemeckert) Sollen das die Namen vom Ventil sein ? Also Hecke, Rasen, Beet usw...

      Bildschirmfoto 2020-04-01 um 13.38.02.png

      K Offline
      K Offline
      Kuddel
      wrote on last edited by Kuddel
      #198

      @dslraser ja genau, die Bezeichnugen der einzelnen Kreise.

      bei mir wird das komischerweise nicht angemeckert

      EDIT: okay, jetzt doch. habs in der Test-VM nochmal probiert

      1 Reply Last reply
      0
      • K Kuddel

        @darkiop und @AtomicIX
        ich habe Version 1.2.0 jetzt komplett auf Variablen umgebaut.

        Vllt. habt ihr Bock zu testen ?

        bewaesserung_v1.3.0_beta.txt

        Erste Testergebnisse:

        • Die ersten drei Ventile starten korrekt nacheinader.
        • Ventil 4 startet leider nicht.
        • Wer den Fehler findet, darf gern Bescheid geben.
        AtomicIXA Offline
        AtomicIXA Offline
        AtomicIX
        wrote on last edited by
        #199

        @Kuddel ich guck es mir heute abend mal an. Danke

        1 Reply Last reply
        0
        • K Kuddel

          @darkiop und @AtomicIX
          ich habe Version 1.2.0 jetzt komplett auf Variablen umgebaut.

          Vllt. habt ihr Bock zu testen ?

          bewaesserung_v1.3.0_beta.txt

          Erste Testergebnisse:

          • Die ersten drei Ventile starten korrekt nacheinader.
          • Ventil 4 startet leider nicht.
          • Wer den Fehler findet, darf gern Bescheid geben.
          D Online
          D Online
          darkiop
          Most Active
          wrote on last edited by
          #200

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

          Ventil 4 startet leider nicht.

          Schau mal ob du hiermit was erkennen kannst. Damit kannst die DPs subscripen und die einzelnen Werte vom DP beobachten. Hab ich heut Morgen für meine Tests mit der Automatik zusammengeklickt.

          a9c223c3-b6d3-4d2a-9ea3-ce3e0e6e4c4e-grafik.png

          <xml xmlns="http://www.w3.org/1999/xhtml">
            <variables>
              <variable type="" id="pIay;;)7~Cs@HxnMh[%B">objectID_1</variable>
              <variable type="" id="r?C3GwKf]$).t1P,PO`h">oid</variable>
              <variable type="" id="7tcJOjj[bGR_[Q5koxNA">objectID_2</variable>
              <variable type="" id="z24$A}L)IdGOWDHl|s@Y">objectID_val</variable>
              <variable type="" id="??/Z|X!WTK3pdtkMxRtN">objectID_3</variable>
              <variable type="" id="I9FS^5?Fc.mWsisn=z,n">objectID_5</variable>
              <variable type="" id="W;6~2.QFR;kxwI:Jni/2">objectID_ack</variable>
              <variable type="" id="Eatwppv0f11iBwd,uVGn">objectID_4</variable>
              <variable type="" id="(yhXEH$,_L37m,=PdKU[">objectID_6</variable>
              <variable type="" id="o`K]4Fft5bYb99@(#$r.">objectID_ts</variable>
              <variable type="" id="88~;^mCbyiOD.?s^jKi-">objectID_lc</variable>
              <variable type="" id="I}GFHXKg4T#[:)#Xgox6">objectID_quality</variable>
              <variable type="" id="7Mwo)h)O(Xj88r34@|%N">objectID_from</variable>
              <variable type="" id="!GFq`Fg/M-XdtwRhqyM`">debuggedObjectID</variable>
            </variables>
            <block type="variables_set" id="?3(0UaCYoI+a2N6vfX|[" x="13" y="188">
              <field name="VAR" id="pIay;;)7~Cs@HxnMh[%B" variabletype="">objectID_1</field>
              <value name="VALUE">
                <block type="text" id="`ICn.%BFnBX2,;.mQ9}h">
                  <field name="TEXT">hm-rpc.1.OEQ0044740.1.ON_TIME</field>
                </block>
              </value>
              <next>
                <block type="variables_set" id="X+X/_[Jn:x?IDt6K[]l^">
                  <field name="VAR" id="7tcJOjj[bGR_[Q5koxNA" variabletype="">objectID_2</field>
                  <value name="VALUE">
                    <block type="text" id="x=e0s2^AU=4=Erv!APzI">
                      <field name="TEXT">hm-rpc.1.OEQ0044740.1.STATE</field>
                    </block>
                  </value>
                  <next>
                    <block type="variables_set" id="K^~_{9^gYF}E/}wIF{?s">
                      <field name="VAR" id="??/Z|X!WTK3pdtkMxRtN" variabletype="">objectID_3</field>
                      <value name="VALUE">
                        <block type="text" id=";K=Ez_IVwAmY=;CWq%5(">
                          <field name="TEXT">hm-rpc.1.OEQ0044740.2.ON_TIME</field>
                        </block>
                      </value>
                      <next>
                        <block type="variables_set" id="/Cl1:a9(-z7X8xJ|}yd)">
                          <field name="VAR" id="Eatwppv0f11iBwd,uVGn" variabletype="">objectID_4</field>
                          <value name="VALUE">
                            <block type="text" id="ISS=8o=f/rT_8u!xCWU7">
                              <field name="TEXT">hm-rpc.1.OEQ0044740.2.STATE</field>
                            </block>
                          </value>
                          <next>
                            <block type="variables_set" id=":8~?Xm]-D6sMhCeXSCsX">
                              <field name="VAR" id="I9FS^5?Fc.mWsisn=z,n" variabletype="">objectID_5</field>
                              <value name="VALUE">
                                <block type="text" id="k#RBk@5U;mvQUp6@SF40">
                                  <field name="TEXT">hm-rpc.1.OEQ0044740.3.ON_TIME</field>
                                </block>
                              </value>
                              <next>
                                <block type="variables_set" id=",zY+4+t_#N-Y;LIWPh9-">
                                  <field name="VAR" id="(yhXEH$,_L37m,=PdKU[" variabletype="">objectID_6</field>
                                  <value name="VALUE">
                                    <block type="text" id="S,*wssU7lL=kQ`gAyT`l">
                                      <field name="TEXT">hm-rpc.1.OEQ0044740.3.STATE</field>
                                    </block>
                                  </value>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </next>
            </block>
            <block type="procedures_defnoreturn" id="PHk=-:*kr_}}aE@tBwkM" x="613" y="187">
              <mutation>
                <arg name="oid" varid="r?C3GwKf]$).t1P,PO`h"></arg>
              </mutation>
              <field name="NAME">debugObject</field>
              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
              <statement name="STACK">
                <block type="variables_set" id="8}RZidatnAws$00{%,8L">
                  <field name="VAR" id="z24$A}L)IdGOWDHl|s@Y" variabletype="">objectID_val</field>
                  <value name="VALUE">
                    <block type="get_value_var" id="}K`+UqB0Hh!;p/p8=vyX">
                      <field name="ATTR">val</field>
                      <value name="OID">
                        <shadow type="text" id="0C#A,};yov4)hJ%3b*a;">
                          <field name="TEXT"></field>
                        </shadow>
                        <block type="variables_get" id="fD=T2Y-+Qyb=qzX`?!z/">
                          <field name="VAR" id="r?C3GwKf]$).t1P,PO`h" variabletype="">oid</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <next>
                    <block type="variables_set" id="}^EEnhSJ]Es@PCj2XsqB">
                      <field name="VAR" id="W;6~2.QFR;kxwI:Jni/2" variabletype="">objectID_ack</field>
                      <value name="VALUE">
                        <block type="get_value_var" id="58oyy/#{nW)*RcGPG1j]">
                          <field name="ATTR">ack</field>
                          <value name="OID">
                            <shadow type="text" id="0C#A,};yov4)hJ%3b*a;">
                              <field name="TEXT"></field>
                            </shadow>
                            <block type="variables_get" id="kFZbnNajUd#[dTVm}%|k">
                              <field name="VAR" id="r?C3GwKf]$).t1P,PO`h" variabletype="">oid</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <next>
                        <block type="variables_set" id="X(U)ReIJ][Z4SGncZBB?">
                          <field name="VAR" id="o`K]4Fft5bYb99@(#$r." variabletype="">objectID_ts</field>
                          <value name="VALUE">
                            <block type="convert_from_date" id="}pbfxJ%WGK3tfs(UBVt}">
                              <mutation format="true" language="false"></mutation>
                              <field name="OPTION">custom</field>
                              <field name="FORMAT">JJJJ.MM.TT SS:mm:ss.sss</field>
                              <value name="VALUE">
                                <block type="get_value_var" id="oEbG{om_5V_LuYrt+m#y">
                                  <field name="ATTR">ts</field>
                                  <value name="OID">
                                    <shadow type="text" id="0C#A,};yov4)hJ%3b*a;">
                                      <field name="TEXT"></field>
                                    </shadow>
                                    <block type="variables_get" id="=jo6Y{:f7+rk!%yB.3g2">
                                      <field name="VAR" id="r?C3GwKf]$).t1P,PO`h" variabletype="">oid</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                            </block>
                          </value>
                          <next>
                            <block type="variables_set" id="]g,_pT+;;E$|Vkj|l83U">
                              <field name="VAR" id="88~;^mCbyiOD.?s^jKi-" variabletype="">objectID_lc</field>
                              <value name="VALUE">
                                <block type="convert_from_date" id="PgOu(x#nu}3ao^{sN@rH">
                                  <mutation format="true" language="false"></mutation>
                                  <field name="OPTION">custom</field>
                                  <field name="FORMAT">JJJJ.MM.TT SS:mm:ss.sss</field>
                                  <value name="VALUE">
                                    <block type="get_value_var" id="RiTlkJGnVWB=r_1e%4LN">
                                      <field name="ATTR">lc</field>
                                      <value name="OID">
                                        <shadow type="text" id=",C0Uu^N]anjX=]D=Qiq|">
                                          <field name="TEXT"></field>
                                        </shadow>
                                        <block type="variables_get" id="[IS:]J!Sg)M7A6G*:;~:">
                                          <field name="VAR" id="r?C3GwKf]$).t1P,PO`h" variabletype="">oid</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <next>
                                <block type="variables_set" id="Gfkry3O/w^,Z}Sh_nmso">
                                  <field name="VAR" id="I}GFHXKg4T#[:)#Xgox6" variabletype="">objectID_quality</field>
                                  <value name="VALUE">
                                    <block type="get_value_var" id="3Iz#aZ/oUZF5B%YYk*?z">
                                      <field name="ATTR">q</field>
                                      <value name="OID">
                                        <shadow type="text" id="0C#A,};yov4)hJ%3b*a;">
                                          <field name="TEXT"></field>
                                        </shadow>
                                        <block type="variables_get" id="^K{jA!67=JGG|})jR*np">
                                          <field name="VAR" id="r?C3GwKf]$).t1P,PO`h" variabletype="">oid</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="variables_set" id="E=(yL]k$NFy$|]F5*@:;">
                                      <field name="VAR" id="7Mwo)h)O(Xj88r34@|%N" variabletype="">objectID_from</field>
                                      <value name="VALUE">
                                        <block type="get_value_var" id="y,z~a]oh[@Fb/U(^183n">
                                          <field name="ATTR">from</field>
                                          <value name="OID">
                                            <shadow type="text" id="quF~P*ktXV:f=K=#a}g1">
                                              <field name="TEXT"></field>
                                            </shadow>
                                            <block type="variables_get" id="7OhGdI95j,Sq1n,qP!nI">
                                              <field name="VAR" id="r?C3GwKf]$).t1P,PO`h" variabletype="">oid</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="variables_set" id="1(0{pOnQ3R:;5VY!*hpF">
                                          <field name="VAR" id="!GFq`Fg/M-XdtwRhqyM`" variabletype="">debuggedObjectID</field>
                                          <value name="VALUE">
                                            <block type="text_join" id="%=b+5aYtPHq6q!wM`U#,">
                                              <mutation items="13"></mutation>
                                              <value name="ADD0">
                                                <block type="text_join" id="#ThSty_d0r_avD.X{6wz">
                                                  <mutation items="2"></mutation>
                                                  <value name="ADD0">
                                                    <block type="text" id="HHe+iY!|`Fj16W:iz]{k">
                                                      <field name="TEXT">oid: </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="variables_get" id="0G!LO?HK?RnCf-*R/S@9">
                                                      <field name="VAR" id="r?C3GwKf]$).t1P,PO`h" variabletype="">oid</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="ADD1">
                                                <block type="text" id="gUP?IQoyvO4[owxBAF,Z">
                                                  <field name="TEXT"> | </field>
                                                </block>
                                              </value>
                                              <value name="ADD2">
                                                <block type="text_join" id="f9D.;U=)O,AnUT}3f.P/">
                                                  <mutation items="2"></mutation>
                                                  <value name="ADD0">
                                                    <block type="text" id="[rfpH()|Zcz*_*X;@_Lh">
                                                      <field name="TEXT">val: </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="variables_get" id="vpj]@tlSC@p`0k-O]6qx">
                                                      <field name="VAR" id="z24$A}L)IdGOWDHl|s@Y" variabletype="">objectID_val</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="ADD3">
                                                <block type="text" id="oai#6hBZgSBtJ#|Kbipi">
                                                  <field name="TEXT"> | </field>
                                                </block>
                                              </value>
                                              <value name="ADD4">
                                                <block type="text_join" id="f~(`Yzv-/^qXwVP@3oH.">
                                                  <mutation items="2"></mutation>
                                                  <value name="ADD0">
                                                    <block type="text" id="!1oRXcRU(gLluh%BQpzg">
                                                      <field name="TEXT">ack: </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="variables_get" id="s3-9D.rHXGwYlMS,Avhe">
                                                      <field name="VAR" id="W;6~2.QFR;kxwI:Jni/2" variabletype="">objectID_ack</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="ADD5">
                                                <block type="text" id=".)I]jK7ine.)@Z40Lbbh">
                                                  <field name="TEXT"> | </field>
                                                </block>
                                              </value>
                                              <value name="ADD6">
                                                <block type="text_join" id=")r%D|?O,vHlK2hAv=?RT">
                                                  <mutation items="2"></mutation>
                                                  <value name="ADD0">
                                                    <block type="text" id="5i}@6h$Wi#!_x3l@yEf_">
                                                      <field name="TEXT">ts: </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="variables_get" id="H.ikYY_h_0ekLH%[J0?X">
                                                      <field name="VAR" id="o`K]4Fft5bYb99@(#$r." variabletype="">objectID_ts</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="ADD7">
                                                <block type="text" id="?uV!?yMZk4^*]wW,tDMt">
                                                  <field name="TEXT"> | </field>
                                                </block>
                                              </value>
                                              <value name="ADD8">
                                                <block type="text_join" id="$*h-bG-Px0{:xMMzS%w8">
                                                  <mutation items="2"></mutation>
                                                  <value name="ADD0">
                                                    <block type="text" id="j`jA@Uca6eLCCEbwsb@z">
                                                      <field name="TEXT">lc: </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="variables_get" id="s[,CnfTQ9V{S;}VUQ,HH">
                                                      <field name="VAR" id="88~;^mCbyiOD.?s^jKi-" variabletype="">objectID_lc</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="ADD9">
                                                <block type="text" id="`LYrSzptqEBj}MvUQXgk">
                                                  <field name="TEXT"> | </field>
                                                </block>
                                              </value>
                                              <value name="ADD10">
                                                <block type="text_join" id="TwE*+;~PKTr3Y-NZ,W6e">
                                                  <mutation items="2"></mutation>
                                                  <value name="ADD0">
                                                    <block type="text" id="[0=|=1QNg]wR34VE_64B">
                                                      <field name="TEXT">quality: </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="variables_get" id="KDZ!pSdC8$_5DsINApON">
                                                      <field name="VAR" id="I}GFHXKg4T#[:)#Xgox6" variabletype="">objectID_quality</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="ADD11">
                                                <block type="text" id="C6)F}h6Tqh%RKLda~tGt">
                                                  <field name="TEXT"> | </field>
                                                </block>
                                              </value>
                                              <value name="ADD12">
                                                <block type="text_join" id="^dR_LN^|-3yslENv=Wc1">
                                                  <mutation items="2"></mutation>
                                                  <value name="ADD0">
                                                    <block type="text" id="TT}Y.D5`VX~ArYud0-Lt">
                                                      <field name="TEXT">from: </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="variables_get" id="m}uOiCv,S/ZYz,Tu2@:$">
                                                      <field name="VAR" id="7Mwo)h)O(Xj88r34@|%N" variabletype="">objectID_from</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <next>
                                            <block type="debug" id="^5M-8`;hS^!@zT#w7TPp">
                                              <field name="Severity">log</field>
                                              <value name="TEXT">
                                                <shadow type="text" id="P0)38%YEoA-tS1,cn!L^">
                                                  <field name="TEXT">test</field>
                                                </shadow>
                                                <block type="variables_get" id=";kcjsB;IB~bf5%]5vi.R">
                                                  <field name="VAR" id="!GFq`Fg/M-XdtwRhqyM`" variabletype="">debuggedObjectID</field>
                                                </block>
                                              </value>
                                            </block>
                                          </next>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </statement>
            </block>
            <block type="on_ext" id="pjEBbboC7Hi@(yQ4T$dn" x="13" y="412">
              <mutation items="1"></mutation>
              <field name="CONDITION">any</field>
              <field name="ACK_CONDITION"></field>
              <value name="OID0">
                <shadow type="field_oid" id="t6!4Gn$C@W0Dfo1]T0nL">
                  <field name="oid">default</field>
                </shadow>
                <block type="variables_get" id="[-VvV(PZi0HOK5K`#]Sj">
                  <field name="VAR" id="pIay;;)7~Cs@HxnMh[%B" variabletype="">objectID_1</field>
                </block>
              </value>
              <statement name="STATEMENT">
                <block type="procedures_callnoreturn" id="6_Wv-j?5iBqx_._@ZVTz" inline="true">
                  <mutation name="debugObject">
                    <arg name="oid"></arg>
                  </mutation>
                  <value name="ARG0">
                    <block type="variables_get" id="zmB*)H`PhWSI*[gUPj;;">
                      <field name="VAR" id="pIay;;)7~Cs@HxnMh[%B" variabletype="">objectID_1</field>
                    </block>
                  </value>
                </block>
              </statement>
              <next>
                <block type="on_ext" id="q%G6_k5LHa^XKMivMw4a">
                  <mutation items="1"></mutation>
                  <field name="CONDITION">any</field>
                  <field name="ACK_CONDITION"></field>
                  <value name="OID0">
                    <shadow type="field_oid" id="t6!4Gn$C@W0Dfo1]T0nL">
                      <field name="oid">default</field>
                    </shadow>
                    <block type="variables_get" id="nPb|n%*Bde~mWvKq{F}T">
                      <field name="VAR" id="7tcJOjj[bGR_[Q5koxNA" variabletype="">objectID_2</field>
                    </block>
                  </value>
                  <statement name="STATEMENT">
                    <block type="procedures_callnoreturn" id="%/EgZ]9|1p2x=oPShKUP" inline="true">
                      <mutation name="debugObject">
                        <arg name="oid"></arg>
                      </mutation>
                      <value name="ARG0">
                        <block type="variables_get" id="Y*M9;FjqZ808mdyh8th7">
                          <field name="VAR" id="7tcJOjj[bGR_[Q5koxNA" variabletype="">objectID_2</field>
                        </block>
                      </value>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
            <block type="on_ext" id="$JXvjguh-VLZ5*wU4AkW" x="13" y="713">
              <mutation items="1"></mutation>
              <field name="CONDITION">any</field>
              <field name="ACK_CONDITION"></field>
              <value name="OID0">
                <shadow type="field_oid" id="t6!4Gn$C@W0Dfo1]T0nL">
                  <field name="oid">default</field>
                </shadow>
                <block type="variables_get" id="}BG71024BkA2Q$rtlZS|">
                  <field name="VAR" id="??/Z|X!WTK3pdtkMxRtN" variabletype="">objectID_3</field>
                </block>
              </value>
              <statement name="STATEMENT">
                <block type="procedures_callnoreturn" id="uu%.IJ~H}0f3|8-2vc~|" inline="true">
                  <mutation name="debugObject">
                    <arg name="oid"></arg>
                  </mutation>
                  <value name="ARG0">
                    <block type="variables_get" id="!Joh2~8P;U{D0~_5qztJ">
                      <field name="VAR" id="??/Z|X!WTK3pdtkMxRtN" variabletype="">objectID_3</field>
                    </block>
                  </value>
                </block>
              </statement>
              <next>
                <block type="on_ext" id="MNOU_{2~=kw:r*=XOFyl">
                  <mutation items="1"></mutation>
                  <field name="CONDITION">any</field>
                  <field name="ACK_CONDITION"></field>
                  <value name="OID0">
                    <shadow type="field_oid" id="t6!4Gn$C@W0Dfo1]T0nL">
                      <field name="oid">default</field>
                    </shadow>
                    <block type="variables_get" id="}-v1nXC6nN87vraOpcfL">
                      <field name="VAR" id="Eatwppv0f11iBwd,uVGn" variabletype="">objectID_4</field>
                    </block>
                  </value>
                  <statement name="STATEMENT">
                    <block type="procedures_callnoreturn" id=":/ZkVHkP-.Pz!THj-lA~" inline="true">
                      <mutation name="debugObject">
                        <arg name="oid"></arg>
                      </mutation>
                      <value name="ARG0">
                        <block type="variables_get" id="g3yCmxGPSO,LmR;.`2V#">
                          <field name="VAR" id="Eatwppv0f11iBwd,uVGn" variabletype="">objectID_4</field>
                        </block>
                      </value>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
            <block type="on_ext" id="8^@Ja7Ly[Q*qjwtlxRYQ" x="13" y="1013">
              <mutation items="1"></mutation>
              <field name="CONDITION">any</field>
              <field name="ACK_CONDITION"></field>
              <value name="OID0">
                <shadow type="field_oid" id="t6!4Gn$C@W0Dfo1]T0nL">
                  <field name="oid">default</field>
                </shadow>
                <block type="variables_get" id="2dZ|PeyZZl#+Q1H6PMyO">
                  <field name="VAR" id="I9FS^5?Fc.mWsisn=z,n" variabletype="">objectID_5</field>
                </block>
              </value>
              <statement name="STATEMENT">
                <block type="procedures_callnoreturn" id="rMG(zi(D@+a!|0cTz:P4" inline="true">
                  <mutation name="debugObject">
                    <arg name="oid"></arg>
                  </mutation>
                  <value name="ARG0">
                    <block type="variables_get" id="+E?EAwYE+hu(KH9z!~+d">
                      <field name="VAR" id="I9FS^5?Fc.mWsisn=z,n" variabletype="">objectID_5</field>
                    </block>
                  </value>
                </block>
              </statement>
              <next>
                <block type="on_ext" id="b-CfFQ02oeMw41Uv@OsA">
                  <mutation items="1"></mutation>
                  <field name="CONDITION">any</field>
                  <field name="ACK_CONDITION"></field>
                  <value name="OID0">
                    <shadow type="field_oid" id="t6!4Gn$C@W0Dfo1]T0nL">
                      <field name="oid">default</field>
                    </shadow>
                    <block type="variables_get" id="QF6i!c-U*6u2|R,h]oVF">
                      <field name="VAR" id="(yhXEH$,_L37m,=PdKU[" variabletype="">objectID_6</field>
                    </block>
                  </value>
                  <statement name="STATEMENT">
                    <block type="procedures_callnoreturn" id="wtr`Rh:x1_@r[:.q-7~2" inline="true">
                      <mutation name="debugObject">
                        <arg name="oid"></arg>
                      </mutation>
                      <value name="ARG0">
                        <block type="variables_get" id="CC6u?4|+Dne*LZo8@8h4">
                          <field name="VAR" id="(yhXEH$,_L37m,=PdKU[" variabletype="">objectID_6</field>
                        </block>
                      </value>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
          </xml>
          

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

          1 Reply Last reply
          0
          • D Online
            D Online
            darkiop
            Most Active
            wrote on last edited by darkiop
            #201

            Ein schneller Test zumindest in sofern erfolgreich das die Aktoren ausgelöst haben.

            Im Log gabs allerdings einen kleinen Fehler - schaus mit heut Abend nochmal an.

            2020-04-01 16:18:19.331  - error: hm-rpc.1 (479) Cannot call setValue: :Error: Missing element text
            

            Edit 1:

            Und hier ein kleiner Typo:

            99203ab9-4a30-488c-a5a4-c3611cac1e9b-grafik.png

            790be745-720a-4dae-b9c1-bbd95eca6d58-grafik.png

            Edit 2:

            Im Trigger/Cronjob für den fixen Zeitpunkt hast du noch keine Variablen:

            c0bf56a3-8106-426c-a059-f13ef5ee0fbf-grafik.png

            Edit 3:

            Hier auch:

            24a884a8-2651-4304-b5de-56123f50dd43-grafik.png

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

            K 1 Reply Last reply
            0
            • D darkiop

              Ein schneller Test zumindest in sofern erfolgreich das die Aktoren ausgelöst haben.

              Im Log gabs allerdings einen kleinen Fehler - schaus mit heut Abend nochmal an.

              2020-04-01 16:18:19.331  - error: hm-rpc.1 (479) Cannot call setValue: :Error: Missing element text
              

              Edit 1:

              Und hier ein kleiner Typo:

              99203ab9-4a30-488c-a5a4-c3611cac1e9b-grafik.png

              790be745-720a-4dae-b9c1-bbd95eca6d58-grafik.png

              Edit 2:

              Im Trigger/Cronjob für den fixen Zeitpunkt hast du noch keine Variablen:

              c0bf56a3-8106-426c-a059-f13ef5ee0fbf-grafik.png

              Edit 3:

              Hier auch:

              24a884a8-2651-4304-b5de-56123f50dd43-grafik.png

              K Offline
              K Offline
              Kuddel
              wrote on last edited by
              #202

              @darkiop danke für ddie Rückmeldung.

              Dein Fehler aus dem Log habe ich gefixt und aus den Scrrenshots auch.

              Ich hoffe ich habe jetzt alles erwischt

              bewaesserung_v1.3.1_beta.txt

              D 2 Replies Last reply
              1
              • K Kuddel

                @darkiop danke für ddie Rückmeldung.

                Dein Fehler aus dem Log habe ich gefixt und aus den Scrrenshots auch.

                Ich hoffe ich habe jetzt alles erwischt

                bewaesserung_v1.3.1_beta.txt

                D Online
                D Online
                darkiop
                Most Active
                wrote on last edited by
                #203

                @Kuddel Musst nochmal hochladen, der Export ist nicht vollständig :D

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

                K 1 Reply Last reply
                0
                • D darkiop

                  @Kuddel Musst nochmal hochladen, der Export ist nicht vollständig :D

                  K Offline
                  K Offline
                  Kuddel
                  wrote on last edited by
                  #204

                  @darkiop ach verdammt :-D

                  bewaesserung_v1.3.1_beta.txt

                  dslraserD 1 Reply Last reply
                  0
                  • K Kuddel

                    @darkiop ach verdammt :-D

                    bewaesserung_v1.3.1_beta.txt

                    dslraserD Offline
                    dslraserD Offline
                    dslraser
                    Forum Testing Most Active
                    wrote on last edited by
                    #205

                    @Kuddel
                    ich habe mal Deine DP bearbeitet, schau mal ob es so passt.

                    <xml xmlns="http://www.w3.org/1999/xhtml">
                     <block type="procedures_defcustomnoreturn" id="D:0E=~0D8*EFnn8f|sd." x="13" y="13">
                       <mutation statements="false"></mutation>
                       <field name="NAME">Datenpunkte_erstellen</field>
                       <field name="SCRIPT">LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKLyoqCiogSGllciBiaXR0ZSBkZW4gU3BlaWNoZXJvcnQgdW5kIGRlbiBQZmFkIGVpbnRyYWdlbgoqIEJlaXNwaWVsZTogCgoJc3BlaWNoZXJvcnQgPSAnMF91c2VyZGF0YS4wLicKCXNwZWljaGVyb3J0ID0gJ2phdmFzY3JpcHQuMCcKCQoJcGZhZCA9ICdiZXdhc3NlcnVuZy4nCglwZmFkID0gJ0dhcmRlbmEuQmV3YWVzc2VydW5nLicKCiovCnNwZWljaGVyb3J0ID0gJ2phdmFzY3JpcHQuMCcKcGZhZCA9ICdiZXdhZXNzZXJ1bmcuJwoKCmZ1bmN0aW9uIGNyZWF0ZVVzZXJTdGF0ZXMod2hlcmUsIGZvcmNlLCBzdGF0ZXNUb0NyZWF0ZSwgY2FsbGJhY2sgPSB1bmRlZmluZWQpIHsKICAgIAogICAgY29uc3QgV0FSTiA9IGZhbHNlOyAvLyBPbmx5IGZvciAwX3VzZXJkYXRhLjA6IFRocm93cyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgZm9yY2U9ZmFsc2UuIERlZmF1bHQgaXMgZmFsc2UsIHNvIG5vIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBleGlzdHMuCiAgICBjb25zdCBMT0dfREVCVUcgPSBmYWxzZTsgLy8gVG8gZGVidWcgdGhpcyBmdW5jdGlvbiwgc2V0IHRvIHRydWUKICAgIC8vIFBlciBpc3N1ZSAjNDc0IChodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc0KSwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgZXhlY3V0ZXMgdGhlIGNhbGxiYWNrIAogICAgLy8gYmVmb3JlIHRoZSBzdGF0ZSBpcyBhY3R1YWwgY3JlYXRlZC4gVGhlcmVmb3JlLCB3ZSB1c2UgYSBzZXRUaW1lb3V0IGFuZCBjb3VudGVyIGFzIGEgd29ya2Fyb3VuZC4KICAgIGNvbnN0IERFTEFZID0gNTA7IC8vIERlbGF5IGluIG1pbGxpc2Vjb25kcyAobXMpLiBJbmNyZWFzZSB0aGlzIHRvIDEwMCwgaWYgaXQgaXMgbm90IHdvcmtpbmcuCgogICAgLy8gVmFsaWRhdGUgIndoZXJlIgogICAgaWYgKHdoZXJlLmVuZHNXaXRoKCcuJykpIHdoZXJlID0gd2hlcmUuc2xpY2UoMCwgLTEpOyAvLyBSZW1vdmUgdHJhaWxpbmcgZG90CiAgICBpZiAoICh3aGVyZS5tYXRjaCgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pKSR8MF91c2VyZGF0YVwuMCQpLykgPT0gbnVsbCkgKSB7CiAgICAgICAgbG9nKCdUaGlzIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IHRvIGNyZWF0ZSBzdGF0ZXMgdW5kZXIgWycgKyB3aGVyZSArICddJywgJ2Vycm9yJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFByZXBhcmUgInN0YXRlc1RvQ3JlYXRlIiBzaW5jZSB3ZSBhbHNvIGFsbG93IGEgc2luZ2xlIHN0YXRlIHRvIGNyZWF0ZQogICAgaWYoIUFycmF5LmlzQXJyYXkoc3RhdGVzVG9DcmVhdGVbMF0pKSBzdGF0ZXNUb0NyZWF0ZSA9IFtzdGF0ZXNUb0NyZWF0ZV07IC8vIHdyYXAgaW50byBhcnJheSwgaWYganVzdCBvbmUgYXJyYXkgYW5kIG5vdCBpbnNpZGUgYW4gYXJyYXkKCiAgICAvLyBBZGQgIndoZXJlIiB0byBTVEFURVNfVE9fQ1JFQVRFCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGxwUGF0aCA9IHN0YXRlc1RvQ3JlYXRlW2ldWzBdLnJlcGxhY2UoL1wuKlwuL2csICcuJyk7IC8vIHJlcGxhY2UgYWxsIG11bHRpcGxlIGRvdHMgbGlrZSAnLi4nLCAnLi4uJyB3aXRoIGEgc2luZ2xlICcuJwogICAgICAgIGxwUGF0aCA9IGxwUGF0aC5yZXBsYWNlKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSlcLil8MF91c2VyZGF0YVwuMFwuKS8sJycpIC8vIHJlbW92ZSBhbnkgamF2YXNjcmlwdC54LiAvIDBfdXNlcmRhdGEuMC4gZnJvbSBiZWdpbm5pbmcKICAgICAgICBscFBhdGggPSB3aGVyZSArICcuJyArIGxwUGF0aDsgLy8gYWRkIHdoZXJlIHRvIGJlZ2lubmluZyBvZiBzdHJpbmcKICAgICAgICBzdGF0ZXNUb0NyZWF0ZVtpXVswXSA9IGxwUGF0aDsKICAgIH0KCiAgICBpZiAod2hlcmUgIT0gJzBfdXNlcmRhdGEuMCcpIHsKICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIGphdmFzY3JpcHQueAogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgbGV0IGxvb3BJbml0ID0gKGxvb3BQYXJhbVsxXVsnZGVmJ10gPT0gdW5kZWZpbmVkKSA/IG51bGwgOiBsb29wUGFyYW1bMV1bJ2RlZiddOyAvLyBtaW1pYyBzYW1lIGJlaGF2aW9yIGFzIGNyZWF0ZVN0YXRlIGlmIG5vIGluaXQgdmFsdWUgaXMgcHJvdmlkZWQKICAgICAgICAgICAgY3JlYXRlU3RhdGUobG9vcFBhcmFtWzBdLCBsb29wSW5pdCwgZm9yY2UsIGxvb3BQYXJhbVsxXSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciAwX3VzZXJkYXRhLjAKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIGxldCBjb3VudGVyID0gLTE7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgY291bnRlciArPSAxOwogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2cgKCdbRGVidWddIEN1cnJlbnRseSBwcm9jZXNzaW5nIGZvbGxvd2luZyBzdGF0ZTogWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOwogICAgICAgICAgICBpZiggKCQobG9vcFBhcmFtWzBdKS5sZW5ndGggPiAwKSAmJiAoZXhpc3RzU3RhdGUobG9vcFBhcmFtWzBdKSkgKSB7IC8vIFdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzgKICAgICAgICAgICAgICAgIC8vIFN0YXRlIGlzIGV4aXN0aW5nLgogICAgICAgICAgICAgICAgaWYgKFdBUk4gJiYgIWZvcmNlKSBsb2coJ1N0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgd2lsbCBubyBsb25nZXIgYmUgY3JlYXRlZC4nLCAnd2FybicpOwogICAgICAgICAgICAgICAgaWYgKCFXQVJOICYmIExPR19ERUJVRykgbG9nKCdbRGVidWddIFN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZy4gT3B0aW9uIGZvcmNlICg9b3ZlcndyaXRlKSBpcyBzZXQgdG8gWycgKyBmb3JjZSArICddLicpOwogICAgICAgICAgICAgICAgaWYoIWZvcmNlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgZXhpc3RzIGFuZCBzaGFsbCBub3QgYmUgb3ZlcndyaXR0ZW4gc2luY2UgZm9yY2U9ZmFsc2UKICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UgZG8gbm90IHByb2NlZWQuCiAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gZXhlY3V0ZSBub3cuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ28gb3V0IGFuZCBjb250aW51ZSB3aXRoIG5leHQgZWxlbWVudCBpbiBsb29wLgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4NDUyOTIwL2NvbnRpbnVlLWluLWN1cnNvci1mb3JlYWNoCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBpZighZm9yY2UpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFN0YXRlIGlzIG5vdCBleGlzdGluZyBvciBmb3JjZSA9IHRydWUsIHNvIHdlIGFyZSBjb250aW51aW5nIHRvIGNyZWF0ZSB0aGUgc3RhdGUgdGhyb3VnaCBzZXRPYmplY3QoKS4KICAgICAgICAgICAgbGV0IG9iaiA9IHt9OwogICAgICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICAgICAgb2JqLmNvbW1vbiA9IGxvb3BQYXJhbVsxXTsKICAgICAgICAgICAgc2V0T2JqZWN0KGxvb3BQYXJhbVswXSwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0IGZvciBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddOiAnICsgZXJyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKQogICAgICAgICAgICAgICAgICAgIGxldCBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbG9vcFBhcmFtWzFdLmRlZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUobG9vcFBhcmFtWzBdLCBpbml0LCB0cnVlLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBzZXRTdGF0ZSBkdXJjaGdlZsO8aHJ0OiAnICsgbG9vcFBhcmFtWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSwgREVMQVkgKyAoMjAgKiBjb3VudGVyKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KfQoKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwoJLy9CZXfDpHNzZXJ1bmcKCVtwZmFkKydiZXdhZXNzZXJ1bmdfYWt0aXYnLCB7J25hbWUnOidiZXdhZXNzZXJ1bmdfYWt0aXYnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoJW3BmYWQrJ2Jld2Flc3NlcnVuZ19hdXRvbWF0aWsnLCB7J25hbWUnOidiZXdhZXNzZXJ1bmdfYXV0b21hdGlrJywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKCS8vVGltZXIKCVtwZmFkKydsYXV0emVpdF9nZXNhbXRfaW5fc2VrJywgeyduYW1lJzonbGF1dHplaXRfZ2VzYW10X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAoJW3BmYWQrJ2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsIHsnbmFtZSc6J2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J1Vocid9XSwKCVtwZmFkKydyZXN0bGF1dHplaXQnLCB7J25hbWUnOidyZXN0bGF1dHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonTWludXRlbid9XSwKCVtwZmFkKydyZXN0bGF1dHplaXRfaW5fc2VrJywgeyduYW1lJzoncmVzdGxhdXR6ZWl0X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAoJLy9WZW50aWxlCglbcGZhZCsndmVudGlsZS5ha3RpdmVzX3ZlbnRpbCcsIHsnbmFtZSc6ICdha3RpdmVzX3ZlbnRpbCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6Jyd9XSwKCVtwZmFkKyd2ZW50aWxlLmFuemFobF9ha3RpdmVfdmVudGlsZScsIHsnbmFtZSc6J2FuemFobF9ha3RpdmVfdmVudGlsZScsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCx9IF0sCgkvL1ZlbnRpbCAxCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMScsIHsnbmFtZSc6J3ZlbnRpbF8xJywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8xX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9lbmRlJywgeyduYW1lJzondmVudGlsXzFfZW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J1Vocid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX25hbWUnLCB7J25hbWUnOid2ZW50aWxfMV9uYW1lJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonSGVja2UnfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9yZXN0emVpdCcsIHsnbmFtZSc6J3ZlbnRpbF8xX3Jlc3R6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J01pbnV0ZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCS8vVmVudGlsIDIKICAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yJywgeyduYW1lJzondmVudGlsXzInLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzJfZGF1ZXInLCB7J25hbWUnOiAndmVudGlsXzJfZGF1ZXInLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX2VuZGUnLCB7J25hbWUnOid2ZW50aWxfMl9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonVWhyJ31dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzJfbmFtZScsIHsnbmFtZSc6J3ZlbnRpbF8yX25hbWUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidSYXNlbid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzJfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonTWludXRlbid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX3Jlc3R6ZWl0X2luX3NlaycsIHsnbmFtZSc6J3ZlbnRpbF8yX3Jlc3R6ZWl0X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAogICAgLy9WZW50aWwgMwogICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzMnLCB7J25hbWUnOid2ZW50aWxfMycsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19kYXVlcicsIHsnbmFtZSc6ICd2ZW50aWxfM19kYXVlcicsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfZW5kZScsIHsnbmFtZSc6J3ZlbnRpbF8zX2VuZGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidVaHInfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19uYW1lJywgeyduYW1lJzondmVudGlsXzNfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J0JlZXQnfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19yZXN0emVpdCcsIHsnbmFtZSc6J3ZlbnRpbF8zX3Jlc3R6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J01pbnV0ZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfM19yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKICAgIC8vVmVudGlsIDQKICAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80JywgeyduYW1lJzondmVudGlsXzQnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfZGF1ZXInLCB7J25hbWUnOiAndmVudGlsXzRfZGF1ZXInLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X2VuZGUnLCB7J25hbWUnOid2ZW50aWxfNF9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonVWhyJ31dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfbmFtZScsIHsnbmFtZSc6J3ZlbnRpbF80X25hbWUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidrbC4gUmFzZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9yZXN0emVpdCcsIHsnbmFtZSc6J3ZlbnRpbF80X3Jlc3R6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J01pbnV0ZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCS8vWmVpdHBsYW4KCS8vTW9yZ2VucwoJW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfYWt0aXYnLCB7J25hbWUnOidtb3JnZW5zX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKCVtwZmFkKyd6ZWl0cGxhbi5tb3JnZW5zX3VocnplaXRfc3RhcnQnLCB7J25hbWUnOidtb3JnZW5zX3VocnplaXRfc3RhcnQnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidVaHInfV0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsnbmFtZSc6J21vcmdlbnNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicnfV0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsIHsnbmFtZSc6J21vcmdlbnNfdWhyemVpdF9zdGFydF9taW51dGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicnfV0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc192ZXJ6b2VnZXJ1bmdfc29ubmVuYXVmZ2FuZycsIHsnbmFtZSc6J21vcmdlbnNfdmVyem9lZ2VydW5nX3Nvbm5lbmF1ZmdhbmcnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonTWludXRlbid9XSwKCS8vQWJlbmRzCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX2FrdGl2JywgeyduYW1lJzonYWJlbmRzX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKCVtwZmFkKyd6ZWl0cGxhbi5hYmVuZHNfdWhyemVpdF9zdGFydCcsIHsnbmFtZSc6J2FiZW5kc191aHJ6ZWl0X3N0YXJ0JywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonVWhyJ31dLAoJW3BmYWQrJ3plaXRwbGFuLmFiZW5kc191aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsnbmFtZSc6J2FiZW5kc191aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6Jyd9XSwKCVtwZmFkKyd6ZWl0cGxhbi5hYmVuZHNfdWhyemVpdF9zdGFydF9taW51dGUnLCB7J25hbWUnOidhYmVuZHNfdWhyemVpdF9zdGFydF9taW51dGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicnfV0sCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3ZlcnpvZWdlcnVuZ19zb25uZW51bnRlcmdhbmcnLCB7J25hbWUnOidhYmVuZHNfdmVyem9lZ2VydW5nX3Nvbm5lbnVudGVyZ2FuZycsJ3R5cGUnOiAnc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidNaW51dGVuJ31dLAoJLy9GZXN0ZSBTdGFydHplaXQKCVtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfYWt0aXYnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfYWt0aXYnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoJW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0JywgeyduYW1lJzonZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnQnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidVaHInfV0sCglbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfc3R1bmRlJywgeyduYW1lJzonZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfc3R1bmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonJ31dLAoJW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsIHsnbmFtZSc6J2Zlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6Jyd9XSwJCiAgICAKXTsgICAgCiAgICBjcmVhdGVVc2VyU3RhdGVzKHNwZWljaGVyb3J0LCBmYWxzZSwgc3RhdGVzVG9DcmVhdGUpOw==</field>
                       <comment pinned="false" h="80" w="160">Datenpunkte erstellen</comment>
                     </block>
                     <block type="procedures_callcustomnoreturn" id="aFB$[5W:V-UBM8)LeXC!" x="13" y="63">
                       <mutation name="Datenpunkte_erstellen"></mutation>
                     </block>
                    </xml>
                    

                    /**
                    * Create states under 0_userdata.0 or javascript.x
                    * Current Version:     https://github.com/Mic-M/iobroker.createUserStates
                    * Support:             https://forum.iobroker.net/topic/26839/
                    * Autor:               Mic (ioBroker) | Mic-M (github)
                    * Version:             1.1 (26 January 2020)
                    * Example:             see https://github.com/Mic-M/iobroker.createUserStates#beispiel
                    * -----------------------------------------------
                    * PLEASE NOTE: Per https://github.com/ioBroker/ioBroker.javascript/issues/474, the used function setObject() 
                    *              executes the callback PRIOR to completing the state creation. Therefore, we use a setTimeout and counter. 
                    * -----------------------------------------------
                    * @param {string} where          Where to create the state: '0_userdata.0' or 'javascript.x'.
                    * @param {boolean} force         Force state creation (overwrite), if state is existing.
                    * @param {array} statesToCreate  State(s) to create. single array or array of arrays
                    * @param {object} [callback]     Optional: a callback function -- This provided function will be executed after all states are created.
                    */
                    
                    /**
                    * Hier bitte den Speicherort und den Pfad eintragen
                    * Beispiele: 
                    
                       speicherort = '0_userdata.0.'
                       speicherort = 'javascript.0'
                       
                       pfad = 'bewasserung.'
                       pfad = 'Gardena.Bewaesserung.'
                    
                    */
                    speicherort = 'javascript.0'
                    pfad = 'bewaesserung.'
                    
                    
                    function createUserStates(where, force, statesToCreate, callback = undefined) {
                       
                       const WARN = false; // Only for 0_userdata.0: Throws warning in log, if state is already existing and force=false. Default is false, so no warning in log, if state exists.
                       const LOG_DEBUG = false; // To debug this function, set to true
                       // Per issue #474 (https://github.com/ioBroker/ioBroker.javascript/issues/474), the used function setObject() executes the callback 
                       // before the state is actual created. Therefore, we use a setTimeout and counter as a workaround.
                       const DELAY = 50; // Delay in milliseconds (ms). Increase this to 100, if it is not working.
                    
                       // Validate "where"
                       if (where.endsWith('.')) where = where.slice(0, -1); // Remove trailing dot
                       if ( (where.match(/^((javascript\.([1-9][0-9]|[0-9]))$|0_userdata\.0$)/) == null) ) {
                           log('This script does not support to create states under [' + where + ']', 'error');
                           return;
                       }
                    
                       // Prepare "statesToCreate" since we also allow a single state to create
                       if(!Array.isArray(statesToCreate[0])) statesToCreate = [statesToCreate]; // wrap into array, if just one array and not inside an array
                    
                       // Add "where" to STATES_TO_CREATE
                       for (let i = 0; i < statesToCreate.length; i++) {
                           let lpPath = statesToCreate[i][0].replace(/\.*\./g, '.'); // replace all multiple dots like '..', '...' with a single '.'
                           lpPath = lpPath.replace(/^((javascript\.([1-9][0-9]|[0-9])\.)|0_userdata\.0\.)/,'') // remove any javascript.x. / 0_userdata.0. from beginning
                           lpPath = where + '.' + lpPath; // add where to beginning of string
                           statesToCreate[i][0] = lpPath;
                       }
                    
                       if (where != '0_userdata.0') {
                           // Create States under javascript.x
                           let numStates = statesToCreate.length;
                           statesToCreate.forEach(function(loopParam) {
                               if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']');
                               let loopInit = (loopParam[1]['def'] == undefined) ? null : loopParam[1]['def']; // mimic same behavior as createState if no init value is provided
                               createState(loopParam[0], loopInit, force, loopParam[1], function() {
                                   numStates--;
                                   if (numStates === 0) {
                                       if (LOG_DEBUG) log('[Debug] All states processed.');
                                       if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                           if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                                           return callback();
                                       } else {
                                           return;
                                       }
                                   }
                               });
                           });
                       } else {
                           // Create States under 0_userdata.0
                           let numStates = statesToCreate.length;
                           let counter = -1;
                           statesToCreate.forEach(function(loopParam) {
                               counter += 1;
                               if (LOG_DEBUG) log ('[Debug] Currently processing following state: [' + loopParam[0] + ']');
                               if( ($(loopParam[0]).length > 0) && (existsState(loopParam[0])) ) { // Workaround due to https://github.com/ioBroker/ioBroker.javascript/issues/478
                                   // State is existing.
                                   if (WARN && !force) log('State [' + loopParam[0] + '] is already existing and will no longer be created.', 'warn');
                                   if (!WARN && LOG_DEBUG) log('[Debug] State [' + loopParam[0] + '] is already existing. Option force (=overwrite) is set to [' + force + '].');
                                   if(!force) {
                                       // State exists and shall not be overwritten since force=false
                                       // So, we do not proceed.
                                       numStates--;
                                       if (numStates === 0) {
                                           if (LOG_DEBUG) log('[Debug] All states successfully processed!');
                                           if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                               if (LOG_DEBUG) log('[Debug] An optional callback function was provided, which we are going to execute now.');
                                               return callback();
                                           }
                                       } else {
                                           // We need to go out and continue with next element in loop.
                                           return; // https://stackoverflow.com/questions/18452920/continue-in-cursor-foreach
                                       }
                                   } // if(!force)
                               }
                    
                               // State is not existing or force = true, so we are continuing to create the state through setObject().
                               let obj = {};
                               obj.type = 'state';
                               obj.native = {};
                               obj.common = loopParam[1];
                               setObject(loopParam[0], obj, function (err) {
                                   if (err) {
                                       log('Cannot write object for state [' + loopParam[0] + ']: ' + err);
                                   } else {
                                       if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']')
                                       let init = null;
                                       if(loopParam[1].def === undefined) {
                                           if(loopParam[1].type === 'number') init = 0;
                                           if(loopParam[1].type === 'boolean') init = false;
                                           if(loopParam[1].type === 'string') init = '';
                                       } else {
                                           init = loopParam[1].def;
                                       }
                                       setTimeout(function() {
                                           setState(loopParam[0], init, true, function() {
                                               if (LOG_DEBUG) log('[Debug] setState durchgeführt: ' + loopParam[0]);
                                               numStates--;
                                               if (numStates === 0) {
                                                   if (LOG_DEBUG) log('[Debug] All states processed.');
                                                   if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                                       if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                                                       return callback();
                                                   }
                                               }
                                           });
                                       }, DELAY + (20 * counter) );
                                   }
                               });
                           });
                       }
                    }
                    
                    let statesToCreate = [
                       //Bewässerung
                       [pfad+'bewaesserung_aktiv', {'name':'bewaesserung_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                       [pfad+'bewaesserung_automatik', {'name':'bewaesserung_automatik','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                       //Timer
                       [pfad+'lautzeit_gesamt_in_sek', {'name':'lautzeit_gesamt_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       [pfad+'lautzeit_ende_uhrzeit', {'name':'lautzeit_ende_uhrzeit','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                       [pfad+'restlautzeit', {'name':'restlautzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                       [pfad+'restlautzeit_in_sek', {'name':'restlautzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       //Ventile
                       [pfad+'ventile.aktives_ventil', {'name': 'aktives_ventil','type':'string','read':true,'write':true,'role':'string','def':''}],
                       [pfad+'ventile.anzahl_aktive_ventile', {'name':'anzahl_aktive_ventile','type':'number','read':true,'write':true,'role':'number','def':0,} ],
                       //Ventil 1
                       [pfad+'ventile.ventil_1.ventil_1', {'name':'ventil_1','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                       [pfad+'ventile.ventil_1.ventil_1_dauer', {'name': 'ventil_1_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       [pfad+'ventile.ventil_1.ventil_1_ende', {'name':'ventil_1_ende','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                       [pfad+'ventile.ventil_1.ventil_1_name', {'name':'ventil_1_name','type':'string','read':true,'write':true,'role':'string','def':'Hecke'}],
                       [pfad+'ventile.ventil_1.ventil_1_restzeit', {'name':'ventil_1_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                       [pfad+'ventile.ventil_1.ventil_1_restzeit_in_sek', {'name':'ventil_1_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       //Ventil 2
                       [pfad+'ventile.ventil_2.ventil_2', {'name':'ventil_2','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                       [pfad+'ventile.ventil_2.ventil_2_dauer', {'name': 'ventil_2_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       [pfad+'ventile.ventil_2.ventil_2_ende', {'name':'ventil_2_ende','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                       [pfad+'ventile.ventil_2.ventil_2_name', {'name':'ventil_2_name','type':'string','read':true,'write':true,'role':'string','def':'Rasen'}],
                       [pfad+'ventile.ventil_2.ventil_2_restzeit', {'name':'ventil_2_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                       [pfad+'ventile.ventil_2.ventil_2_restzeit_in_sek', {'name':'ventil_2_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       //Ventil 3
                       [pfad+'ventile.ventil_3.ventil_3', {'name':'ventil_3','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                       [pfad+'ventile.ventil_3.ventil_3_dauer', {'name': 'ventil_3_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       [pfad+'ventile.ventil_3.ventil_3_ende', {'name':'ventil_3_ende','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                       [pfad+'ventile.ventil_3.ventil_3_name', {'name':'ventil_3_name','type':'string','read':true,'write':true,'role':'string','def':'Beet'}],
                       [pfad+'ventile.ventil_3.ventil_3_restzeit', {'name':'ventil_3_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                       [pfad+'ventile.ventil_3.ventil_3_restzeit_in_sek', {'name':'ventil_3_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       //Ventil 4
                       [pfad+'ventile.ventil_4.ventil_4', {'name':'ventil_4','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                       [pfad+'ventile.ventil_4.ventil_4_dauer', {'name': 'ventil_4_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       [pfad+'ventile.ventil_4.ventil_4_ende', {'name':'ventil_4_ende','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                       [pfad+'ventile.ventil_4.ventil_4_name', {'name':'ventil_4_name','type':'string','read':true,'write':true,'role':'string','def':'kl. Rasen'}],
                       [pfad+'ventile.ventil_4.ventil_4_restzeit', {'name':'ventil_4_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                       [pfad+'ventile.ventil_4.ventil_4_restzeit_in_sek', {'name':'ventil_4_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                       //Zeitplan
                       //Morgens
                       [pfad+'zeitplan.morgens_aktiv', {'name':'morgens_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                       [pfad+'zeitplan.morgens_uhrzeit_start', {'name':'morgens_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                       [pfad+'zeitplan.morgens_uhrzeit_start_stunde', {'name':'morgens_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':''}],
                       [pfad+'zeitplan.morgens_uhrzeit_start_minute', {'name':'morgens_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':''}],
                       [pfad+'zeitplan.morgens_verzoegerung_sonnenaufgang', {'name':'morgens_verzoegerung_sonnenaufgang','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                       //Abends
                       [pfad+'zeitplan.abends_aktiv', {'name':'abends_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                       [pfad+'zeitplan.abends_uhrzeit_start', {'name':'abends_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                       [pfad+'zeitplan.abends_uhrzeit_start_stunde', {'name':'abends_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':''}],
                       [pfad+'zeitplan.abends_uhrzeit_start_minute', {'name':'abends_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':''}],
                       [pfad+'zeitplan.abends_verzoegerung_sonnenuntergang', {'name':'abends_verzoegerung_sonnenuntergang','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                       //Feste Startzeit
                       [pfad+'zeitplan.feste_startzeit_aktiv', {'name':'feste_startzeit_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                       [pfad+'zeitplan.feste_startzeit_uhrzeit_start', {'name':'feste_startzeit_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                       [pfad+'zeitplan.feste_startzeit_uhrzeit_start_stunde', {'name':'feste_startzeit_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':''}],
                       [pfad+'zeitplan.feste_startzeit_uhrzeit_start_minute', {'name':'feste_startzeit_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':''}],	
                       
                    ];    
                       createUserStates(speicherort, false, statesToCreate);
                    

                    K 1 Reply Last reply
                    0
                    • dslraserD dslraser

                      @Kuddel
                      ich habe mal Deine DP bearbeitet, schau mal ob es so passt.

                      <xml xmlns="http://www.w3.org/1999/xhtml">
                       <block type="procedures_defcustomnoreturn" id="D:0E=~0D8*EFnn8f|sd." x="13" y="13">
                         <mutation statements="false"></mutation>
                         <field name="NAME">Datenpunkte_erstellen</field>
                         <field name="SCRIPT">LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKLyoqCiogSGllciBiaXR0ZSBkZW4gU3BlaWNoZXJvcnQgdW5kIGRlbiBQZmFkIGVpbnRyYWdlbgoqIEJlaXNwaWVsZTogCgoJc3BlaWNoZXJvcnQgPSAnMF91c2VyZGF0YS4wLicKCXNwZWljaGVyb3J0ID0gJ2phdmFzY3JpcHQuMCcKCQoJcGZhZCA9ICdiZXdhc3NlcnVuZy4nCglwZmFkID0gJ0dhcmRlbmEuQmV3YWVzc2VydW5nLicKCiovCnNwZWljaGVyb3J0ID0gJ2phdmFzY3JpcHQuMCcKcGZhZCA9ICdiZXdhZXNzZXJ1bmcuJwoKCmZ1bmN0aW9uIGNyZWF0ZVVzZXJTdGF0ZXMod2hlcmUsIGZvcmNlLCBzdGF0ZXNUb0NyZWF0ZSwgY2FsbGJhY2sgPSB1bmRlZmluZWQpIHsKICAgIAogICAgY29uc3QgV0FSTiA9IGZhbHNlOyAvLyBPbmx5IGZvciAwX3VzZXJkYXRhLjA6IFRocm93cyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgZm9yY2U9ZmFsc2UuIERlZmF1bHQgaXMgZmFsc2UsIHNvIG5vIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBleGlzdHMuCiAgICBjb25zdCBMT0dfREVCVUcgPSBmYWxzZTsgLy8gVG8gZGVidWcgdGhpcyBmdW5jdGlvbiwgc2V0IHRvIHRydWUKICAgIC8vIFBlciBpc3N1ZSAjNDc0IChodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc0KSwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgZXhlY3V0ZXMgdGhlIGNhbGxiYWNrIAogICAgLy8gYmVmb3JlIHRoZSBzdGF0ZSBpcyBhY3R1YWwgY3JlYXRlZC4gVGhlcmVmb3JlLCB3ZSB1c2UgYSBzZXRUaW1lb3V0IGFuZCBjb3VudGVyIGFzIGEgd29ya2Fyb3VuZC4KICAgIGNvbnN0IERFTEFZID0gNTA7IC8vIERlbGF5IGluIG1pbGxpc2Vjb25kcyAobXMpLiBJbmNyZWFzZSB0aGlzIHRvIDEwMCwgaWYgaXQgaXMgbm90IHdvcmtpbmcuCgogICAgLy8gVmFsaWRhdGUgIndoZXJlIgogICAgaWYgKHdoZXJlLmVuZHNXaXRoKCcuJykpIHdoZXJlID0gd2hlcmUuc2xpY2UoMCwgLTEpOyAvLyBSZW1vdmUgdHJhaWxpbmcgZG90CiAgICBpZiAoICh3aGVyZS5tYXRjaCgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pKSR8MF91c2VyZGF0YVwuMCQpLykgPT0gbnVsbCkgKSB7CiAgICAgICAgbG9nKCdUaGlzIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IHRvIGNyZWF0ZSBzdGF0ZXMgdW5kZXIgWycgKyB3aGVyZSArICddJywgJ2Vycm9yJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFByZXBhcmUgInN0YXRlc1RvQ3JlYXRlIiBzaW5jZSB3ZSBhbHNvIGFsbG93IGEgc2luZ2xlIHN0YXRlIHRvIGNyZWF0ZQogICAgaWYoIUFycmF5LmlzQXJyYXkoc3RhdGVzVG9DcmVhdGVbMF0pKSBzdGF0ZXNUb0NyZWF0ZSA9IFtzdGF0ZXNUb0NyZWF0ZV07IC8vIHdyYXAgaW50byBhcnJheSwgaWYganVzdCBvbmUgYXJyYXkgYW5kIG5vdCBpbnNpZGUgYW4gYXJyYXkKCiAgICAvLyBBZGQgIndoZXJlIiB0byBTVEFURVNfVE9fQ1JFQVRFCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGxwUGF0aCA9IHN0YXRlc1RvQ3JlYXRlW2ldWzBdLnJlcGxhY2UoL1wuKlwuL2csICcuJyk7IC8vIHJlcGxhY2UgYWxsIG11bHRpcGxlIGRvdHMgbGlrZSAnLi4nLCAnLi4uJyB3aXRoIGEgc2luZ2xlICcuJwogICAgICAgIGxwUGF0aCA9IGxwUGF0aC5yZXBsYWNlKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSlcLil8MF91c2VyZGF0YVwuMFwuKS8sJycpIC8vIHJlbW92ZSBhbnkgamF2YXNjcmlwdC54LiAvIDBfdXNlcmRhdGEuMC4gZnJvbSBiZWdpbm5pbmcKICAgICAgICBscFBhdGggPSB3aGVyZSArICcuJyArIGxwUGF0aDsgLy8gYWRkIHdoZXJlIHRvIGJlZ2lubmluZyBvZiBzdHJpbmcKICAgICAgICBzdGF0ZXNUb0NyZWF0ZVtpXVswXSA9IGxwUGF0aDsKICAgIH0KCiAgICBpZiAod2hlcmUgIT0gJzBfdXNlcmRhdGEuMCcpIHsKICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIGphdmFzY3JpcHQueAogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgbGV0IGxvb3BJbml0ID0gKGxvb3BQYXJhbVsxXVsnZGVmJ10gPT0gdW5kZWZpbmVkKSA/IG51bGwgOiBsb29wUGFyYW1bMV1bJ2RlZiddOyAvLyBtaW1pYyBzYW1lIGJlaGF2aW9yIGFzIGNyZWF0ZVN0YXRlIGlmIG5vIGluaXQgdmFsdWUgaXMgcHJvdmlkZWQKICAgICAgICAgICAgY3JlYXRlU3RhdGUobG9vcFBhcmFtWzBdLCBsb29wSW5pdCwgZm9yY2UsIGxvb3BQYXJhbVsxXSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciAwX3VzZXJkYXRhLjAKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIGxldCBjb3VudGVyID0gLTE7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgY291bnRlciArPSAxOwogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2cgKCdbRGVidWddIEN1cnJlbnRseSBwcm9jZXNzaW5nIGZvbGxvd2luZyBzdGF0ZTogWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOwogICAgICAgICAgICBpZiggKCQobG9vcFBhcmFtWzBdKS5sZW5ndGggPiAwKSAmJiAoZXhpc3RzU3RhdGUobG9vcFBhcmFtWzBdKSkgKSB7IC8vIFdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzgKICAgICAgICAgICAgICAgIC8vIFN0YXRlIGlzIGV4aXN0aW5nLgogICAgICAgICAgICAgICAgaWYgKFdBUk4gJiYgIWZvcmNlKSBsb2coJ1N0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgd2lsbCBubyBsb25nZXIgYmUgY3JlYXRlZC4nLCAnd2FybicpOwogICAgICAgICAgICAgICAgaWYgKCFXQVJOICYmIExPR19ERUJVRykgbG9nKCdbRGVidWddIFN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZy4gT3B0aW9uIGZvcmNlICg9b3ZlcndyaXRlKSBpcyBzZXQgdG8gWycgKyBmb3JjZSArICddLicpOwogICAgICAgICAgICAgICAgaWYoIWZvcmNlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgZXhpc3RzIGFuZCBzaGFsbCBub3QgYmUgb3ZlcndyaXR0ZW4gc2luY2UgZm9yY2U9ZmFsc2UKICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UgZG8gbm90IHByb2NlZWQuCiAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gZXhlY3V0ZSBub3cuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ28gb3V0IGFuZCBjb250aW51ZSB3aXRoIG5leHQgZWxlbWVudCBpbiBsb29wLgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4NDUyOTIwL2NvbnRpbnVlLWluLWN1cnNvci1mb3JlYWNoCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBpZighZm9yY2UpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFN0YXRlIGlzIG5vdCBleGlzdGluZyBvciBmb3JjZSA9IHRydWUsIHNvIHdlIGFyZSBjb250aW51aW5nIHRvIGNyZWF0ZSB0aGUgc3RhdGUgdGhyb3VnaCBzZXRPYmplY3QoKS4KICAgICAgICAgICAgbGV0IG9iaiA9IHt9OwogICAgICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICAgICAgb2JqLmNvbW1vbiA9IGxvb3BQYXJhbVsxXTsKICAgICAgICAgICAgc2V0T2JqZWN0KGxvb3BQYXJhbVswXSwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0IGZvciBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddOiAnICsgZXJyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKQogICAgICAgICAgICAgICAgICAgIGxldCBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbG9vcFBhcmFtWzFdLmRlZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUobG9vcFBhcmFtWzBdLCBpbml0LCB0cnVlLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBzZXRTdGF0ZSBkdXJjaGdlZsO8aHJ0OiAnICsgbG9vcFBhcmFtWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSwgREVMQVkgKyAoMjAgKiBjb3VudGVyKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KfQoKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwoJLy9CZXfDpHNzZXJ1bmcKCVtwZmFkKydiZXdhZXNzZXJ1bmdfYWt0aXYnLCB7J25hbWUnOidiZXdhZXNzZXJ1bmdfYWt0aXYnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoJW3BmYWQrJ2Jld2Flc3NlcnVuZ19hdXRvbWF0aWsnLCB7J25hbWUnOidiZXdhZXNzZXJ1bmdfYXV0b21hdGlrJywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKCS8vVGltZXIKCVtwZmFkKydsYXV0emVpdF9nZXNhbXRfaW5fc2VrJywgeyduYW1lJzonbGF1dHplaXRfZ2VzYW10X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAoJW3BmYWQrJ2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsIHsnbmFtZSc6J2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J1Vocid9XSwKCVtwZmFkKydyZXN0bGF1dHplaXQnLCB7J25hbWUnOidyZXN0bGF1dHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonTWludXRlbid9XSwKCVtwZmFkKydyZXN0bGF1dHplaXRfaW5fc2VrJywgeyduYW1lJzoncmVzdGxhdXR6ZWl0X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAoJLy9WZW50aWxlCglbcGZhZCsndmVudGlsZS5ha3RpdmVzX3ZlbnRpbCcsIHsnbmFtZSc6ICdha3RpdmVzX3ZlbnRpbCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6Jyd9XSwKCVtwZmFkKyd2ZW50aWxlLmFuemFobF9ha3RpdmVfdmVudGlsZScsIHsnbmFtZSc6J2FuemFobF9ha3RpdmVfdmVudGlsZScsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCx9IF0sCgkvL1ZlbnRpbCAxCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMScsIHsnbmFtZSc6J3ZlbnRpbF8xJywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8xX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9lbmRlJywgeyduYW1lJzondmVudGlsXzFfZW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J1Vocid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX25hbWUnLCB7J25hbWUnOid2ZW50aWxfMV9uYW1lJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonSGVja2UnfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9yZXN0emVpdCcsIHsnbmFtZSc6J3ZlbnRpbF8xX3Jlc3R6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J01pbnV0ZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCS8vVmVudGlsIDIKICAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yJywgeyduYW1lJzondmVudGlsXzInLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzJfZGF1ZXInLCB7J25hbWUnOiAndmVudGlsXzJfZGF1ZXInLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX2VuZGUnLCB7J25hbWUnOid2ZW50aWxfMl9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonVWhyJ31dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzJfbmFtZScsIHsnbmFtZSc6J3ZlbnRpbF8yX25hbWUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidSYXNlbid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzJfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonTWludXRlbid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX3Jlc3R6ZWl0X2luX3NlaycsIHsnbmFtZSc6J3ZlbnRpbF8yX3Jlc3R6ZWl0X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAogICAgLy9WZW50aWwgMwogICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzMnLCB7J25hbWUnOid2ZW50aWxfMycsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19kYXVlcicsIHsnbmFtZSc6ICd2ZW50aWxfM19kYXVlcicsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfZW5kZScsIHsnbmFtZSc6J3ZlbnRpbF8zX2VuZGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidVaHInfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19uYW1lJywgeyduYW1lJzondmVudGlsXzNfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J0JlZXQnfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19yZXN0emVpdCcsIHsnbmFtZSc6J3ZlbnRpbF8zX3Jlc3R6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J01pbnV0ZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfM19yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKICAgIC8vVmVudGlsIDQKICAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80JywgeyduYW1lJzondmVudGlsXzQnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfZGF1ZXInLCB7J25hbWUnOiAndmVudGlsXzRfZGF1ZXInLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X2VuZGUnLCB7J25hbWUnOid2ZW50aWxfNF9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonVWhyJ31dLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfbmFtZScsIHsnbmFtZSc6J3ZlbnRpbF80X25hbWUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidrbC4gUmFzZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9yZXN0emVpdCcsIHsnbmFtZSc6J3ZlbnRpbF80X3Jlc3R6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6J01pbnV0ZW4nfV0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCS8vWmVpdHBsYW4KCS8vTW9yZ2VucwoJW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfYWt0aXYnLCB7J25hbWUnOidtb3JnZW5zX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKCVtwZmFkKyd6ZWl0cGxhbi5tb3JnZW5zX3VocnplaXRfc3RhcnQnLCB7J25hbWUnOidtb3JnZW5zX3VocnplaXRfc3RhcnQnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidVaHInfV0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsnbmFtZSc6J21vcmdlbnNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicnfV0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsIHsnbmFtZSc6J21vcmdlbnNfdWhyemVpdF9zdGFydF9taW51dGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicnfV0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc192ZXJ6b2VnZXJ1bmdfc29ubmVuYXVmZ2FuZycsIHsnbmFtZSc6J21vcmdlbnNfdmVyem9lZ2VydW5nX3Nvbm5lbmF1ZmdhbmcnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonTWludXRlbid9XSwKCS8vQWJlbmRzCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX2FrdGl2JywgeyduYW1lJzonYWJlbmRzX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKCVtwZmFkKyd6ZWl0cGxhbi5hYmVuZHNfdWhyemVpdF9zdGFydCcsIHsnbmFtZSc6J2FiZW5kc191aHJ6ZWl0X3N0YXJ0JywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonVWhyJ31dLAoJW3BmYWQrJ3plaXRwbGFuLmFiZW5kc191aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsnbmFtZSc6J2FiZW5kc191aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6Jyd9XSwKCVtwZmFkKyd6ZWl0cGxhbi5hYmVuZHNfdWhyemVpdF9zdGFydF9taW51dGUnLCB7J25hbWUnOidhYmVuZHNfdWhyemVpdF9zdGFydF9taW51dGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicnfV0sCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3ZlcnpvZWdlcnVuZ19zb25uZW51bnRlcmdhbmcnLCB7J25hbWUnOidhYmVuZHNfdmVyem9lZ2VydW5nX3Nvbm5lbnVudGVyZ2FuZycsJ3R5cGUnOiAnc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidNaW51dGVuJ31dLAoJLy9GZXN0ZSBTdGFydHplaXQKCVtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfYWt0aXYnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfYWt0aXYnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoJW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0JywgeyduYW1lJzonZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnQnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOidVaHInfV0sCglbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfc3R1bmRlJywgeyduYW1lJzonZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfc3R1bmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonJ31dLAoJW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsIHsnbmFtZSc6J2Zlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6Jyd9XSwJCiAgICAKXTsgICAgCiAgICBjcmVhdGVVc2VyU3RhdGVzKHNwZWljaGVyb3J0LCBmYWxzZSwgc3RhdGVzVG9DcmVhdGUpOw==</field>
                         <comment pinned="false" h="80" w="160">Datenpunkte erstellen</comment>
                       </block>
                       <block type="procedures_callcustomnoreturn" id="aFB$[5W:V-UBM8)LeXC!" x="13" y="63">
                         <mutation name="Datenpunkte_erstellen"></mutation>
                       </block>
                      </xml>
                      

                      /**
                      * Create states under 0_userdata.0 or javascript.x
                      * Current Version:     https://github.com/Mic-M/iobroker.createUserStates
                      * Support:             https://forum.iobroker.net/topic/26839/
                      * Autor:               Mic (ioBroker) | Mic-M (github)
                      * Version:             1.1 (26 January 2020)
                      * Example:             see https://github.com/Mic-M/iobroker.createUserStates#beispiel
                      * -----------------------------------------------
                      * PLEASE NOTE: Per https://github.com/ioBroker/ioBroker.javascript/issues/474, the used function setObject() 
                      *              executes the callback PRIOR to completing the state creation. Therefore, we use a setTimeout and counter. 
                      * -----------------------------------------------
                      * @param {string} where          Where to create the state: '0_userdata.0' or 'javascript.x'.
                      * @param {boolean} force         Force state creation (overwrite), if state is existing.
                      * @param {array} statesToCreate  State(s) to create. single array or array of arrays
                      * @param {object} [callback]     Optional: a callback function -- This provided function will be executed after all states are created.
                      */
                      
                      /**
                      * Hier bitte den Speicherort und den Pfad eintragen
                      * Beispiele: 
                      
                         speicherort = '0_userdata.0.'
                         speicherort = 'javascript.0'
                         
                         pfad = 'bewasserung.'
                         pfad = 'Gardena.Bewaesserung.'
                      
                      */
                      speicherort = 'javascript.0'
                      pfad = 'bewaesserung.'
                      
                      
                      function createUserStates(where, force, statesToCreate, callback = undefined) {
                         
                         const WARN = false; // Only for 0_userdata.0: Throws warning in log, if state is already existing and force=false. Default is false, so no warning in log, if state exists.
                         const LOG_DEBUG = false; // To debug this function, set to true
                         // Per issue #474 (https://github.com/ioBroker/ioBroker.javascript/issues/474), the used function setObject() executes the callback 
                         // before the state is actual created. Therefore, we use a setTimeout and counter as a workaround.
                         const DELAY = 50; // Delay in milliseconds (ms). Increase this to 100, if it is not working.
                      
                         // Validate "where"
                         if (where.endsWith('.')) where = where.slice(0, -1); // Remove trailing dot
                         if ( (where.match(/^((javascript\.([1-9][0-9]|[0-9]))$|0_userdata\.0$)/) == null) ) {
                             log('This script does not support to create states under [' + where + ']', 'error');
                             return;
                         }
                      
                         // Prepare "statesToCreate" since we also allow a single state to create
                         if(!Array.isArray(statesToCreate[0])) statesToCreate = [statesToCreate]; // wrap into array, if just one array and not inside an array
                      
                         // Add "where" to STATES_TO_CREATE
                         for (let i = 0; i < statesToCreate.length; i++) {
                             let lpPath = statesToCreate[i][0].replace(/\.*\./g, '.'); // replace all multiple dots like '..', '...' with a single '.'
                             lpPath = lpPath.replace(/^((javascript\.([1-9][0-9]|[0-9])\.)|0_userdata\.0\.)/,'') // remove any javascript.x. / 0_userdata.0. from beginning
                             lpPath = where + '.' + lpPath; // add where to beginning of string
                             statesToCreate[i][0] = lpPath;
                         }
                      
                         if (where != '0_userdata.0') {
                             // Create States under javascript.x
                             let numStates = statesToCreate.length;
                             statesToCreate.forEach(function(loopParam) {
                                 if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']');
                                 let loopInit = (loopParam[1]['def'] == undefined) ? null : loopParam[1]['def']; // mimic same behavior as createState if no init value is provided
                                 createState(loopParam[0], loopInit, force, loopParam[1], function() {
                                     numStates--;
                                     if (numStates === 0) {
                                         if (LOG_DEBUG) log('[Debug] All states processed.');
                                         if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                             if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                                             return callback();
                                         } else {
                                             return;
                                         }
                                     }
                                 });
                             });
                         } else {
                             // Create States under 0_userdata.0
                             let numStates = statesToCreate.length;
                             let counter = -1;
                             statesToCreate.forEach(function(loopParam) {
                                 counter += 1;
                                 if (LOG_DEBUG) log ('[Debug] Currently processing following state: [' + loopParam[0] + ']');
                                 if( ($(loopParam[0]).length > 0) && (existsState(loopParam[0])) ) { // Workaround due to https://github.com/ioBroker/ioBroker.javascript/issues/478
                                     // State is existing.
                                     if (WARN && !force) log('State [' + loopParam[0] + '] is already existing and will no longer be created.', 'warn');
                                     if (!WARN && LOG_DEBUG) log('[Debug] State [' + loopParam[0] + '] is already existing. Option force (=overwrite) is set to [' + force + '].');
                                     if(!force) {
                                         // State exists and shall not be overwritten since force=false
                                         // So, we do not proceed.
                                         numStates--;
                                         if (numStates === 0) {
                                             if (LOG_DEBUG) log('[Debug] All states successfully processed!');
                                             if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                                 if (LOG_DEBUG) log('[Debug] An optional callback function was provided, which we are going to execute now.');
                                                 return callback();
                                             }
                                         } else {
                                             // We need to go out and continue with next element in loop.
                                             return; // https://stackoverflow.com/questions/18452920/continue-in-cursor-foreach
                                         }
                                     } // if(!force)
                                 }
                      
                                 // State is not existing or force = true, so we are continuing to create the state through setObject().
                                 let obj = {};
                                 obj.type = 'state';
                                 obj.native = {};
                                 obj.common = loopParam[1];
                                 setObject(loopParam[0], obj, function (err) {
                                     if (err) {
                                         log('Cannot write object for state [' + loopParam[0] + ']: ' + err);
                                     } else {
                                         if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']')
                                         let init = null;
                                         if(loopParam[1].def === undefined) {
                                             if(loopParam[1].type === 'number') init = 0;
                                             if(loopParam[1].type === 'boolean') init = false;
                                             if(loopParam[1].type === 'string') init = '';
                                         } else {
                                             init = loopParam[1].def;
                                         }
                                         setTimeout(function() {
                                             setState(loopParam[0], init, true, function() {
                                                 if (LOG_DEBUG) log('[Debug] setState durchgeführt: ' + loopParam[0]);
                                                 numStates--;
                                                 if (numStates === 0) {
                                                     if (LOG_DEBUG) log('[Debug] All states processed.');
                                                     if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                                         if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                                                         return callback();
                                                     }
                                                 }
                                             });
                                         }, DELAY + (20 * counter) );
                                     }
                                 });
                             });
                         }
                      }
                      
                      let statesToCreate = [
                         //Bewässerung
                         [pfad+'bewaesserung_aktiv', {'name':'bewaesserung_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                         [pfad+'bewaesserung_automatik', {'name':'bewaesserung_automatik','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                         //Timer
                         [pfad+'lautzeit_gesamt_in_sek', {'name':'lautzeit_gesamt_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         [pfad+'lautzeit_ende_uhrzeit', {'name':'lautzeit_ende_uhrzeit','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                         [pfad+'restlautzeit', {'name':'restlautzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                         [pfad+'restlautzeit_in_sek', {'name':'restlautzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         //Ventile
                         [pfad+'ventile.aktives_ventil', {'name': 'aktives_ventil','type':'string','read':true,'write':true,'role':'string','def':''}],
                         [pfad+'ventile.anzahl_aktive_ventile', {'name':'anzahl_aktive_ventile','type':'number','read':true,'write':true,'role':'number','def':0,} ],
                         //Ventil 1
                         [pfad+'ventile.ventil_1.ventil_1', {'name':'ventil_1','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                         [pfad+'ventile.ventil_1.ventil_1_dauer', {'name': 'ventil_1_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         [pfad+'ventile.ventil_1.ventil_1_ende', {'name':'ventil_1_ende','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                         [pfad+'ventile.ventil_1.ventil_1_name', {'name':'ventil_1_name','type':'string','read':true,'write':true,'role':'string','def':'Hecke'}],
                         [pfad+'ventile.ventil_1.ventil_1_restzeit', {'name':'ventil_1_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                         [pfad+'ventile.ventil_1.ventil_1_restzeit_in_sek', {'name':'ventil_1_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         //Ventil 2
                         [pfad+'ventile.ventil_2.ventil_2', {'name':'ventil_2','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                         [pfad+'ventile.ventil_2.ventil_2_dauer', {'name': 'ventil_2_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         [pfad+'ventile.ventil_2.ventil_2_ende', {'name':'ventil_2_ende','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                         [pfad+'ventile.ventil_2.ventil_2_name', {'name':'ventil_2_name','type':'string','read':true,'write':true,'role':'string','def':'Rasen'}],
                         [pfad+'ventile.ventil_2.ventil_2_restzeit', {'name':'ventil_2_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                         [pfad+'ventile.ventil_2.ventil_2_restzeit_in_sek', {'name':'ventil_2_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         //Ventil 3
                         [pfad+'ventile.ventil_3.ventil_3', {'name':'ventil_3','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                         [pfad+'ventile.ventil_3.ventil_3_dauer', {'name': 'ventil_3_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         [pfad+'ventile.ventil_3.ventil_3_ende', {'name':'ventil_3_ende','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                         [pfad+'ventile.ventil_3.ventil_3_name', {'name':'ventil_3_name','type':'string','read':true,'write':true,'role':'string','def':'Beet'}],
                         [pfad+'ventile.ventil_3.ventil_3_restzeit', {'name':'ventil_3_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                         [pfad+'ventile.ventil_3.ventil_3_restzeit_in_sek', {'name':'ventil_3_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         //Ventil 4
                         [pfad+'ventile.ventil_4.ventil_4', {'name':'ventil_4','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                         [pfad+'ventile.ventil_4.ventil_4_dauer', {'name': 'ventil_4_dauer','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         [pfad+'ventile.ventil_4.ventil_4_ende', {'name':'ventil_4_ende','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                         [pfad+'ventile.ventil_4.ventil_4_name', {'name':'ventil_4_name','type':'string','read':true,'write':true,'role':'string','def':'kl. Rasen'}],
                         [pfad+'ventile.ventil_4.ventil_4_restzeit', {'name':'ventil_4_restzeit','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                         [pfad+'ventile.ventil_4.ventil_4_restzeit_in_sek', {'name':'ventil_4_restzeit_in_sek','type':'number','read':true,'write':true,'role':'number','def':0,'unit':'Sekunden'}],
                         //Zeitplan
                         //Morgens
                         [pfad+'zeitplan.morgens_aktiv', {'name':'morgens_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                         [pfad+'zeitplan.morgens_uhrzeit_start', {'name':'morgens_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                         [pfad+'zeitplan.morgens_uhrzeit_start_stunde', {'name':'morgens_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':''}],
                         [pfad+'zeitplan.morgens_uhrzeit_start_minute', {'name':'morgens_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':''}],
                         [pfad+'zeitplan.morgens_verzoegerung_sonnenaufgang', {'name':'morgens_verzoegerung_sonnenaufgang','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                         //Abends
                         [pfad+'zeitplan.abends_aktiv', {'name':'abends_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                         [pfad+'zeitplan.abends_uhrzeit_start', {'name':'abends_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                         [pfad+'zeitplan.abends_uhrzeit_start_stunde', {'name':'abends_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':''}],
                         [pfad+'zeitplan.abends_uhrzeit_start_minute', {'name':'abends_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':''}],
                         [pfad+'zeitplan.abends_verzoegerung_sonnenuntergang', {'name':'abends_verzoegerung_sonnenuntergang','type': 'string','read':true,'write':true,'role':'string','def':'Minuten'}],
                         //Feste Startzeit
                         [pfad+'zeitplan.feste_startzeit_aktiv', {'name':'feste_startzeit_aktiv','type':'boolean','read':true,'write':true,'role':'switch','def':false}],
                         [pfad+'zeitplan.feste_startzeit_uhrzeit_start', {'name':'feste_startzeit_uhrzeit_start','type':'string','read':true,'write':true,'role':'string','def':'Uhr'}],
                         [pfad+'zeitplan.feste_startzeit_uhrzeit_start_stunde', {'name':'feste_startzeit_uhrzeit_start_stunde','type':'string','read':true,'write':true,'role':'string','def':''}],
                         [pfad+'zeitplan.feste_startzeit_uhrzeit_start_minute', {'name':'feste_startzeit_uhrzeit_start_minute','type':'string','read':true,'write':true,'role':'string','def':''}],	
                         
                      ];    
                         createUserStates(speicherort, false, statesToCreate);
                      

                      K Offline
                      K Offline
                      Kuddel
                      wrote on last edited by
                      #206

                      @dslraser cool, danke. schaue ich mir morgen mal an

                      dslraserD 1 Reply Last reply
                      0
                      • K Kuddel

                        @dslraser cool, danke. schaue ich mir morgen mal an

                        dslraserD Offline
                        dslraserD Offline
                        dslraser
                        Forum Testing Most Active
                        wrote on last edited by
                        #207

                        @Kuddel
                        wenn Du es in Dein Script mit einbaust, dann würde ich die Funktion zum erstellen der DP nur beim ersten starten des Blockly aktivieren, dann deaktivieren und wieder starten. Sonnst hast Du bei einem Neustart vom Script oder der JS Instanz wieder initiale Werte drinn, wenn die letzte Zeile auf true steht, oder eben die letzte Zeile auf false stellen.

                        1 Reply Last reply
                        0
                        • K Kuddel

                          @darkiop danke für ddie Rückmeldung.

                          Dein Fehler aus dem Log habe ich gefixt und aus den Scrrenshots auch.

                          Ich hoffe ich habe jetzt alles erwischt

                          bewaesserung_v1.3.1_beta.txt

                          D Online
                          D Online
                          darkiop
                          Most Active
                          wrote on last edited by
                          #208

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

                          Dein Fehler aus dem Log habe ich gefixt und aus den Scrrenshots auch.

                          Sieht auf den ersten Blick gut aus - keine Fehler.

                          Ich hab vorhin nur auf die schnelle nach dem hm-rpc Fehler gesucht - was war es denn?

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

                          K 1 Reply Last reply
                          0
                          • D darkiop

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

                            Dein Fehler aus dem Log habe ich gefixt und aus den Scrrenshots auch.

                            Sieht auf den ersten Blick gut aus - keine Fehler.

                            Ich hab vorhin nur auf die schnelle nach dem hm-rpc Fehler gesucht - was war es denn?

                            K Offline
                            K Offline
                            Kuddel
                            wrote on last edited by
                            #209

                            @darkiop die variable für den ontime wert wurde falsch benutzt

                            1 Reply Last reply
                            0
                            • K Offline
                              K Offline
                              Kuddel
                              wrote on last edited by
                              #210

                              hier nochmal zum testen inkl. erstellung aller DPs (vielen dank an @dslraser für die Hilfe)

                              bewaesserung_v1.3.2_beta.txt

                              D 1 Reply Last reply
                              0
                              • K Kuddel

                                hier nochmal zum testen inkl. erstellung aller DPs (vielen dank an @dslraser für die Hilfe)

                                bewaesserung_v1.3.2_beta.txt

                                D Online
                                D Online
                                darkiop
                                Most Active
                                wrote on last edited by
                                #211

                                @Kuddel Bei Ventil 3 wird keine Restlaufzeit berechnet

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

                                K 1 Reply Last reply
                                0
                                • D darkiop

                                  @Kuddel Bei Ventil 3 wird keine Restlaufzeit berechnet

                                  K Offline
                                  K Offline
                                  Kuddel
                                  wrote on last edited by
                                  #212

                                  @darkiop

                                  bei mir schon

                                  f70d13e3-ad4d-46ac-b132-d36e75b43a1e-grafik.png

                                  D 1 Reply Last reply
                                  0
                                  • K Kuddel

                                    @darkiop

                                    bei mir schon

                                    f70d13e3-ad4d-46ac-b132-d36e75b43a1e-grafik.png

                                    D Online
                                    D Online
                                    darkiop
                                    Most Active
                                    wrote on last edited by darkiop
                                    #213

                                    @Kuddel Guten Morgen. Ich muss mal schauen - ich hab hier leider den Effekt - Geht mal / Geht wieder nicht ...
                                    Funkprobleme kann ich ausschließen, in der Nähe des Außenaktors für die Ventile sitzt ein LAN-Gateway.
                                    Im Log ist mir aufgefallen, das manchmal das ON_TIME zweimal geschickt wird - das wird aber ein Javascript-Adapter/ioBroker-Controller Problem sein.

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

                                    1 Reply Last reply
                                    0
                                    • K Offline
                                      K Offline
                                      Kuddel
                                      wrote on last edited by
                                      #214

                                      hallo zusammen, ich hab das skript gerade erweitert, sodass es für Homematic UND Sonoff funktioniert.

                                      Dazu muss man in den Variablen nur den Aktornamen und den Aktortyp eintragen:

                                      92829c3e-5a8b-491c-9ba0-2893c92f3ed9-grafik.png

                                      In den Kommentaren zu den Variablen steht eine kurze Beschreibung.

                                      Ich habe es mit Sonoff und HM gestetet.

                                      Bis au der Übergang von Ventil 3 zu Ventil 4, läuft es.

                                      Des Weiteren habe ich den DP "Sonnenuntergang" neu definiert und in die DP-Struktur der Bewässerung mit eingebaut.

                                      Wer Lust und Zeit hat zu testen... gerne gerne :-) Fehler bitte melden ;-)

                                      bewaesserung_v2.0.0_beta.txt

                                      D 1 Reply Last reply
                                      0
                                      • B Offline
                                        B Offline
                                        benziman
                                        wrote on last edited by benziman
                                        #215

                                        @Kuddel
                                        Danke für deine Arbeit!
                                        Das sieht bei mir aktuell so aus, bin mir nicht sicher ob das so stimmt.

                                        4954bf8b-f37c-4410-80f3-1ed1eee3cd50-grafik.png

                                        vars_pfad -> müsste so bleiben, da ja durch dein Script importiert?

                                        bc78adb1-413b-4263-9b40-434fffe5aadc-grafik.png

                                        vars_aktor_typ = sonoff ?

                                        vars_aktor_name = sonoff.0.DVES_5A1757 ? (müssen power 1-4 nicht mehr definiert werden?

                                        b8071540-d055-4749-a7dc-d6e1d62ae5af-grafik.png

                                        K 1 Reply Last reply
                                        0
                                        • B benziman

                                          @Kuddel
                                          Danke für deine Arbeit!
                                          Das sieht bei mir aktuell so aus, bin mir nicht sicher ob das so stimmt.

                                          4954bf8b-f37c-4410-80f3-1ed1eee3cd50-grafik.png

                                          vars_pfad -> müsste so bleiben, da ja durch dein Script importiert?

                                          bc78adb1-413b-4263-9b40-434fffe5aadc-grafik.png

                                          vars_aktor_typ = sonoff ?

                                          vars_aktor_name = sonoff.0.DVES_5A1757 ? (müssen power 1-4 nicht mehr definiert werden?

                                          b8071540-d055-4749-a7dc-d6e1d62ae5af-grafik.png

                                          K Offline
                                          K Offline
                                          Kuddel
                                          wrote on last edited by
                                          #216

                                          @benziman

                                          vars_pfad -> müsste so bleiben, da ja durch dein Script importiert?

                                          Kann, muss aber nicht. Wenn du deine Struktur anders aufbauen möchtest, kannst du das gerne anpassen.
                                          Dann aber bitte in der Blockly-Variable UND im JavaSkript

                                          vars_aktor_typ = sonoff ?

                                          Ja, passt so

                                          vars_aktor_name = sonoff.0.DVES_5A1757 ? (müssen power 1-4 nicht mehr definiert werden?

                                          Name passt. Power1-4 wird automatisch vom Skript definiert

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          301

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe