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

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

[Vorlage] Gartenbewässerung mit 4 Ventilen

Scheduled Pinned Locked Moved Blockly
415 Posts 22 Posters 82.9k 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.
  • D Offline
    D Offline
    darkiop
    Most Active
    wrote on last edited by
    #181

    @Kuddel Ich habe gerade noch etwas mit der Steuerung experimentriert und musste feststellen, das nicht immer alle Ventile ausgeschaltet werden wenn sie in der Automatik/Halbautomatik in Reihe geschaltet sind.
    Hast du da schon Erfahrungen gemacht? Aktiviere und Starte ich sie einzeln, wird sauber abgeschaltet nach der vorgegebenen Zeit.

    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 Ich habe gerade noch etwas mit der Steuerung experimentriert und musste feststellen, das nicht immer alle Ventile ausgeschaltet werden wenn sie in der Automatik/Halbautomatik in Reihe geschaltet sind.
      Hast du da schon Erfahrungen gemacht? Aktiviere und Starte ich sie einzeln, wird sauber abgeschaltet nach der vorgegebenen Zeit.

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

      @darkiop bei mir hat immer alles sauber funktioniert.
      alle ventile wurden nacheinander eingeschaltet und wieder ausgeschaltet.

      das ausschalten der soll ja der Aktor eigenständig machen.

      vllt. funktioniert das bei dir nicht richtig

      D dslraserD 2 Replies Last reply
      0
      • K Kuddel

        @darkiop bei mir hat immer alles sauber funktioniert.
        alle ventile wurden nacheinander eingeschaltet und wieder ausgeschaltet.

        das ausschalten der soll ja der Aktor eigenständig machen.

        vllt. funktioniert das bei dir nicht richtig

        D Offline
        D Offline
        darkiop
        Most Active
        wrote on last edited by
        #183

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

        das ausschalten der soll ja der Aktor eigenständig machen

        Ja, das läuft ja über ON_TIME ... seltsam, muss ich mir morgen nochmal genauer anschauen.

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

        AtomicIXA 1 Reply Last reply
        0
        • K Kuddel

          @darkiop bei mir hat immer alles sauber funktioniert.
          alle ventile wurden nacheinander eingeschaltet und wieder ausgeschaltet.

          das ausschalten der soll ja der Aktor eigenständig machen.

          vllt. funktioniert das bei dir nicht richtig

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

          @Kuddel
          falls Du von dem Blockly noch was brauchst, ich habe noch etwas angepasst und es hier abgeändert. Ich habe die Namen der DP "verallgemeinert"

          1 Reply Last reply
          0
          • D darkiop

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

            das ausschalten der soll ja der Aktor eigenständig machen

            Ja, das läuft ja über ON_TIME ... seltsam, muss ich mir morgen nochmal genauer anschauen.

            AtomicIXA Offline
            AtomicIXA Offline
            AtomicIX
            wrote on last edited by
            #185

            @darkiop zum Thema abschalten ist mir vorhin aufgefallen, das die Steuerung der VIS unterschiedlich auf unterschiedlichen Endgeräten läuft. Auf dem PC und Fire 10 HD Tablet mit Chrome Beta läuft alles normal. Auf dem Nexus 7 2012 UMTS mit Chrome Beta kommt es mal vor, daß sich Ventile mal nicht an, dann mal nicht aus schalten lassen. Mal als Hinweis. Keine Ahnung wie das zusammen hängt. Vielleicht ist das Nexus 7 einfach nur zu langsam.

            D 1 Reply Last reply
            0
            • AtomicIXA AtomicIX

              @darkiop zum Thema abschalten ist mir vorhin aufgefallen, das die Steuerung der VIS unterschiedlich auf unterschiedlichen Endgeräten läuft. Auf dem PC und Fire 10 HD Tablet mit Chrome Beta läuft alles normal. Auf dem Nexus 7 2012 UMTS mit Chrome Beta kommt es mal vor, daß sich Ventile mal nicht an, dann mal nicht aus schalten lassen. Mal als Hinweis. Keine Ahnung wie das zusammen hängt. Vielleicht ist das Nexus 7 einfach nur zu langsam.

              D Offline
              D Offline
              darkiop
              Most Active
              wrote on last edited by
              #186

              @AtomicIX hatte das am PC getestet, Leistung satt. Aber ich teste auch mal die Browser durch. Ich werd morgen mal ein ausführliches Loging auf die States des Aktors legen und schauen was da passiert.

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

              1 Reply Last reply
              0
              • D darkiop

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

                Das Script prüft b es den DP schon gibt.

                Das sieht nach ner Fleisarbeit für Morgen aus - aktuell habe ich viele createStates in einem Skript - das hier ist natürlich eleganter.

                Ich hab vorhin mal damit begonnen das ganze für meine View mit den Material Design Widgets umzusetzen, wenn Interesse besteht stelle ich das gerne hier ein:

                material.gif

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

                @darkiop aus deiner VIS sehe ich, dass du Regenmenge und Max-Temp auch angeben kannst.

                Soll ich diese Werte mit als DP angeben, so dass sie nicht fest im Skript eingetragen sind ?

                D 1 Reply Last reply
                0
                • K Kuddel

                  @darkiop aus deiner VIS sehe ich, dass du Regenmenge und Max-Temp auch angeben kannst.

                  Soll ich diese Werte mit als DP angeben, so dass sie nicht fest im Skript eingetragen sind ?

                  D Offline
                  D Offline
                  darkiop
                  Most Active
                  wrote on last edited by
                  #188

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

                  aus deiner VIS sehe ich, dass du Regenmenge und Max-Temp auch angeben kannst.
                  Soll ich diese Werte mit als DP angeben, so dass sie nicht fest im Skript eingetragen sind ?

                  Hi und guten Morgen,
                  ich hatte vor das ebenfalls als DP abzubilden und auch aktiv/inaktiv Schaltbar zu machen. Wenn du möchtest kannst das gerne in dein Ursprungsskript packen - das macht es mir dann leichter die beiden Versionen (deine Originale und meine für mich angepasste) anzupassen :)

                  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:

                    aus deiner VIS sehe ich, dass du Regenmenge und Max-Temp auch angeben kannst.
                    Soll ich diese Werte mit als DP angeben, so dass sie nicht fest im Skript eingetragen sind ?

                    Hi und guten Morgen,
                    ich hatte vor das ebenfalls als DP abzubilden und auch aktiv/inaktiv Schaltbar zu machen. Wenn du möchtest kannst das gerne in dein Ursprungsskript packen - das macht es mir dann leichter die beiden Versionen (deine Originale und meine für mich angepasste) anzupassen :)

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

                    @darkiop alles klar, nehme ich mit auf die to-do liste

                    D 1 Reply Last reply
                    0
                    • K Kuddel

                      @darkiop alles klar, nehme ich mit auf die to-do liste

                      D Offline
                      D Offline
                      darkiop
                      Most Active
                      wrote on last edited by
                      #190

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

                      alles klar, nehme ich mit auf die to-do liste

                      Perfekt. Ich werde mir heute nochmal die Automatik anschauen müssen.

                      Was mir gestern noch in den Kopf kam - evtl. wäre eine Notfall-Funktion die sicherstellt das die Aktoren auch abgeschaltet haben noch Sinnvoll. Es könnte ja sein, das ein Funkbefehlt mal nicht den Aktor erreicht - dann wäre ein zweiter Hilfreich :D

                      Hast du bereits einen Bodenfeuchte-Sensor im Einsatz? Ich überlegen gerade in Richtung dem mit HM modifizierten von Gardena.

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

                      K E 2 Replies Last reply
                      0
                      • D darkiop

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

                        alles klar, nehme ich mit auf die to-do liste

                        Perfekt. Ich werde mir heute nochmal die Automatik anschauen müssen.

                        Was mir gestern noch in den Kopf kam - evtl. wäre eine Notfall-Funktion die sicherstellt das die Aktoren auch abgeschaltet haben noch Sinnvoll. Es könnte ja sein, das ein Funkbefehlt mal nicht den Aktor erreicht - dann wäre ein zweiter Hilfreich :D

                        Hast du bereits einen Bodenfeuchte-Sensor im Einsatz? Ich überlegen gerade in Richtung dem mit HM modifizierten von Gardena.

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

                        @darkiop das mit der Notallfunktion könnte man am Ende der Ventillaufzeit einbauen.

                        Einen Feuchtigkeitssensor habe ich nocht nicht, soll aber auch Teil für die Automatik werden.

                        Hab den gleiche wie dun ins Auge gefasst.

                        https://homematic-guru.de/homematic-bodenfeuchtesensor-mit-gardena

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

                          @dslraser vielen dank für dein Skript.

                          Scheint zu klappen. Ich habe alle meine DPs eingebaut und noch zwei Variablen definiert.

                          Man kann sowohl den Ort, als auch den Pfad im Skript eingeben:

                          /**
                          * Hier bitte den Speicherort und denPfad eintragen
                          * Beispiele: 
                          
                          	speicherort = '0_userdata.0.'
                          	speicherort = 'javascript.0'
                          	
                          	pfad = 'bewasserung.'
                          	pfad = 'Gardena.Bewaesserung.'
                          
                          */
                          speicherort = 'javascript.0'
                          pfad = 'bewaesserung.
                          

                          Hier Einmal der Blockly Export, falls jemand testen möchte:

                          <block xmlns="http://www.w3.org/1999/xhtml" type="procedures_defcustomnoreturn" id="D:0E=~0D8*EFnn8f|sd." x="88" y="-1613">
                           <mutation statements="false"></mutation>
                           <field name="NAME">Datenpunkte_erstellen</field>
                           <field name="SCRIPT">LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKLyoqCiogSGllciBiaXR0ZSBkZW4gU3BlaWNoZXJvcnQgdW5kIGRlblBmYWQgZWludHJhZ2VuCiogQmVpc3BpZWxlOiAKCglzcGVpY2hlcm9ydCA9ICcwX3VzZXJkYXRhLjAuJwoJc3BlaWNoZXJvcnQgPSAnamF2YXNjcmlwdC4wJwoJCglwZmFkID0gJ2Jld2Fzc2VydW5nLicKCXBmYWQgPSAnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuJwoKKi8Kc3BlaWNoZXJvcnQgPSAnamF2YXNjcmlwdC4wJwpwZmFkID0gJ2Jld2Flc3NlcnVuZy4nCgoKZnVuY3Rpb24gY3JlYXRlVXNlclN0YXRlcyh3aGVyZSwgZm9yY2UsIHN0YXRlc1RvQ3JlYXRlLCBjYWxsYmFjayA9IHVuZGVmaW5lZCkgewogICAgCiAgICBjb25zdCBXQVJOID0gZmFsc2U7IC8vIE9ubHkgZm9yIDBfdXNlcmRhdGEuMDogVGhyb3dzIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBpcyBhbHJlYWR5IGV4aXN0aW5nIGFuZCBmb3JjZT1mYWxzZS4gRGVmYXVsdCBpcyBmYWxzZSwgc28gbm8gd2FybmluZyBpbiBsb2csIGlmIHN0YXRlIGV4aXN0cy4KICAgIGNvbnN0IExPR19ERUJVRyA9IGZhbHNlOyAvLyBUbyBkZWJ1ZyB0aGlzIGZ1bmN0aW9uLCBzZXQgdG8gdHJ1ZQogICAgLy8gUGVyIGlzc3VlICM0NzQgKGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzQpLCB0aGUgdXNlZCBmdW5jdGlvbiBzZXRPYmplY3QoKSBleGVjdXRlcyB0aGUgY2FsbGJhY2sgCiAgICAvLyBiZWZvcmUgdGhlIHN0YXRlIGlzIGFjdHVhbCBjcmVhdGVkLiBUaGVyZWZvcmUsIHdlIHVzZSBhIHNldFRpbWVvdXQgYW5kIGNvdW50ZXIgYXMgYSB3b3JrYXJvdW5kLgogICAgY29uc3QgREVMQVkgPSA1MDsgLy8gRGVsYXkgaW4gbWlsbGlzZWNvbmRzIChtcykuIEluY3JlYXNlIHRoaXMgdG8gMTAwLCBpZiBpdCBpcyBub3Qgd29ya2luZy4KCiAgICAvLyBWYWxpZGF0ZSAid2hlcmUiCiAgICBpZiAod2hlcmUuZW5kc1dpdGgoJy4nKSkgd2hlcmUgPSB3aGVyZS5zbGljZSgwLCAtMSk7IC8vIFJlbW92ZSB0cmFpbGluZyBkb3QKICAgIGlmICggKHdoZXJlLm1hdGNoKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSkpJHwwX3VzZXJkYXRhXC4wJCkvKSA9PSBudWxsKSApIHsKICAgICAgICBsb2coJ1RoaXMgc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgdG8gY3JlYXRlIHN0YXRlcyB1bmRlciBbJyArIHdoZXJlICsgJ10nLCAnZXJyb3InKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gUHJlcGFyZSAic3RhdGVzVG9DcmVhdGUiIHNpbmNlIHdlIGFsc28gYWxsb3cgYSBzaW5nbGUgc3RhdGUgdG8gY3JlYXRlCiAgICBpZighQXJyYXkuaXNBcnJheShzdGF0ZXNUb0NyZWF0ZVswXSkpIHN0YXRlc1RvQ3JlYXRlID0gW3N0YXRlc1RvQ3JlYXRlXTsgLy8gd3JhcCBpbnRvIGFycmF5LCBpZiBqdXN0IG9uZSBhcnJheSBhbmQgbm90IGluc2lkZSBhbiBhcnJheQoKICAgIC8vIEFkZCAid2hlcmUiIHRvIFNUQVRFU19UT19DUkVBVEUKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGVzVG9DcmVhdGUubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZXQgbHBQYXRoID0gc3RhdGVzVG9DcmVhdGVbaV1bMF0ucmVwbGFjZSgvXC4qXC4vZywgJy4nKTsgLy8gcmVwbGFjZSBhbGwgbXVsdGlwbGUgZG90cyBsaWtlICcuLicsICcuLi4nIHdpdGggYSBzaW5nbGUgJy4nCiAgICAgICAgbHBQYXRoID0gbHBQYXRoLnJlcGxhY2UoL14oKGphdmFzY3JpcHRcLihbMS05XVswLTldfFswLTldKVwuKXwwX3VzZXJkYXRhXC4wXC4pLywnJykgLy8gcmVtb3ZlIGFueSBqYXZhc2NyaXB0LnguIC8gMF91c2VyZGF0YS4wLiBmcm9tIGJlZ2lubmluZwogICAgICAgIGxwUGF0aCA9IHdoZXJlICsgJy4nICsgbHBQYXRoOyAvLyBhZGQgd2hlcmUgdG8gYmVnaW5uaW5nIG9mIHN0cmluZwogICAgICAgIHN0YXRlc1RvQ3JlYXRlW2ldWzBdID0gbHBQYXRoOwogICAgfQoKICAgIGlmICh3aGVyZSAhPSAnMF91c2VyZGF0YS4wJykgewogICAgICAgIC8vIENyZWF0ZSBTdGF0ZXMgdW5kZXIgamF2YXNjcmlwdC54CiAgICAgICAgbGV0IG51bVN0YXRlcyA9IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsKICAgICAgICBzdGF0ZXNUb0NyZWF0ZS5mb3JFYWNoKGZ1bmN0aW9uKGxvb3BQYXJhbSkgewogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gTm93IHdlIGFyZSBjcmVhdGluZyBuZXcgc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOwogICAgICAgICAgICBsZXQgbG9vcEluaXQgPSAobG9vcFBhcmFtWzFdWydkZWYnXSA9PSB1bmRlZmluZWQpID8gbnVsbCA6IGxvb3BQYXJhbVsxXVsnZGVmJ107IC8vIG1pbWljIHNhbWUgYmVoYXZpb3IgYXMgY3JlYXRlU3RhdGUgaWYgbm8gaW5pdCB2YWx1ZSBpcyBwcm92aWRlZAogICAgICAgICAgICBjcmVhdGVTdGF0ZShsb29wUGFyYW1bMF0sIGxvb3BJbml0LCBmb3JjZSwgbG9vcFBhcmFtWzFdLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIDBfdXNlcmRhdGEuMAogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7CiAgICAgICAgbGV0IGNvdW50ZXIgPSAtMTsKICAgICAgICBzdGF0ZXNUb0NyZWF0ZS5mb3JFYWNoKGZ1bmN0aW9uKGxvb3BQYXJhbSkgewogICAgICAgICAgICBjb3VudGVyICs9IDE7CiAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZyAoJ1tEZWJ1Z10gQ3VycmVudGx5IHByb2Nlc3NpbmcgZm9sbG93aW5nIHN0YXRlOiBbJyArIGxvb3BQYXJhbVswXSArICddJyk7CiAgICAgICAgICAgIGlmKCAoJChsb29wUGFyYW1bMF0pLmxlbmd0aCA+IDApICYmIChleGlzdHNTdGF0ZShsb29wUGFyYW1bMF0pKSApIHsgLy8gV29ya2Fyb3VuZCBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3OAogICAgICAgICAgICAgICAgLy8gU3RhdGUgaXMgZXhpc3RpbmcuCiAgICAgICAgICAgICAgICBpZiAoV0FSTiAmJiAhZm9yY2UpIGxvZygnU3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXSBpcyBhbHJlYWR5IGV4aXN0aW5nIGFuZCB3aWxsIG5vIGxvbmdlciBiZSBjcmVhdGVkLicsICd3YXJuJyk7CiAgICAgICAgICAgICAgICBpZiAoIVdBUk4gJiYgTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gU3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXSBpcyBhbHJlYWR5IGV4aXN0aW5nLiBPcHRpb24gZm9yY2UgKD1vdmVyd3JpdGUpIGlzIHNldCB0byBbJyArIGZvcmNlICsgJ10uJyk7CiAgICAgICAgICAgICAgICBpZighZm9yY2UpIHsKICAgICAgICAgICAgICAgICAgICAvLyBTdGF0ZSBleGlzdHMgYW5kIHNoYWxsIG5vdCBiZSBvdmVyd3JpdHRlbiBzaW5jZSBmb3JjZT1mYWxzZQogICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBkbyBub3QgcHJvY2VlZC4KICAgICAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQhJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB3YXMgcHJvdmlkZWQsIHdoaWNoIHdlIGFyZSBnb2luZyB0byBleGVjdXRlIG5vdy4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBvdXQgYW5kIGNvbnRpbnVlIHdpdGggbmV4dCBlbGVtZW50IGluIGxvb3AuCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTg0NTI5MjAvY29udGludWUtaW4tY3Vyc29yLWZvcmVhY2gKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IC8vIGlmKCFmb3JjZSkKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU3RhdGUgaXMgbm90IGV4aXN0aW5nIG9yIGZvcmNlID0gdHJ1ZSwgc28gd2UgYXJlIGNvbnRpbnVpbmcgdG8gY3JlYXRlIHRoZSBzdGF0ZSB0aHJvdWdoIHNldE9iamVjdCgpLgogICAgICAgICAgICBsZXQgb2JqID0ge307CiAgICAgICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgICAgICBvYmouY29tbW9uID0gbG9vcFBhcmFtWzFdOwogICAgICAgICAgICBzZXRPYmplY3QobG9vcFBhcmFtWzBdLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3QgZm9yIHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ106ICcgKyBlcnIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gTm93IHdlIGFyZSBjcmVhdGluZyBuZXcgc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXScpCiAgICAgICAgICAgICAgICAgICAgbGV0IGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICcnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBsb29wUGFyYW1bMV0uZGVmOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShsb29wUGFyYW1bMF0sIGluaXQsIHRydWUsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIHNldFN0YXRlIGR1cmNoZ2Vmw7xocnQ6ICcgKyBsb29wUGFyYW1bMF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgcHJvY2Vzc2VkLicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEZ1bmN0aW9uIHRvIGNhbGxiYWNrIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9LCBERUxBWSArICgyMCAqIGNvdW50ZXIpICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfQp9CgpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCgkvL0Jld8Okc3NlcnVuZwoJW3BmYWQrJ2Jld2Flc3NlcnVuZ19ha3RpdicsIHsnbmFtZSc6J2Jld2Flc3NlcnVuZ19ha3RpdicsICd0eXBlJzonYm9vbGVhbid9IF0sCglbcGZhZCsnYmV3YWVzc2VydW5nX2F1dG9tYXRpaycsIHsndHlwZSc6ICdib29sZWFuJywnbmFtZSc6ICdiZXdhZXNzZXJ1bmdfYXV0b21hdGlrJ30gXSwKCS8vICBUaW1lcgoJW3BmYWQrJ2xhdXR6ZWl0X2dlc2FtdF9pbl9zZWsnLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICdsYXV0emVpdF9nZXNhbXRfaW5fc2VrJywgJ3VuaXQnOiAnU2VrdW5kZW4nfSBdLAoJW3BmYWQrJ2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsICd1bml0JzogJ1Vocid9IF0sCglbcGZhZCsncmVzdGxhdXR6ZWl0Jywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAncmVzdGxhdXR6ZWl0JywgJ3VuaXQnOiAiTWludXRlbiJ9IF0sCglbcGZhZCsncmVzdGxhdXR6ZWl0X2luX3NlaycsIHsndHlwZSc6ICdudW1iZXInLCduYW1lJzogJ3Jlc3RsYXV0emVpdF9pbl9zZWsnLCAndW5pdCc6ICdTZWt1bmRlbid9IF0sCgkvLyAgVmVudGlsZQoJW3BmYWQrJ3ZlbnRpbGUuYWt0aXZlc192ZW50aWwnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdha3RpdmVzX3ZlbnRpbCd9IF0sCglbcGZhZCsndmVudGlsZS5hbnphaGxfYWt0aXZlX3ZlbnRpbGUnLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICdhbnphaGxfYWt0aXZlX3ZlbnRpbGUnfSBdLAoJLy8gICAgVmVudGlsIDEKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xJywgeyd0eXBlJzogJ2Jvb2xlYW4nLCduYW1lJzogJ3ZlbnRpbF8xJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2RhdWVyJywgeyd0eXBlJzogJ251bWJlcicsJ25hbWUnOiAndmVudGlsXzFfZGF1ZXInLCd1bml0JzogJ1Nla3VuZGVuJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2VuZGUnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfMV9lbmRlJywndW5pdCc6ICdVaHInfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzEudmVudGlsXzFfbmFtZScsICdIZWNrZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ3ZlbnRpbF8xX25hbWUnfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzEudmVudGlsXzFfcmVzdHplaXQnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfMV9yZXN0emVpdCcsJ3VuaXQnOiAnTWludXRlbid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICd2ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCd1bml0JzogJ1Nla3VuZGVuJ30gXSwKCS8vICAgIFZlbnRpbCAyCglbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMicsIHsndHlwZSc6ICdib29sZWFuJywnbmFtZSc6ICd2ZW50aWxfMid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9kYXVlcicsIHsndHlwZSc6ICdudW1iZXInLCduYW1lJzogJ3ZlbnRpbF8yX2RhdWVyJywndW5pdCc6ICdTZWt1bmRlbid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9lbmRlJywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAndmVudGlsXzJfZW5kZScsJ3VuaXQnOiAnVWhyJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX25hbWUnLCAnUmFzZW4nLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfMl9uYW1lJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX3Jlc3R6ZWl0Jywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAndmVudGlsXzJfcmVzdHplaXQnLCd1bml0JzogJ01pbnV0ZW4nfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzJfcmVzdHplaXRfaW5fc2VrJywgeyd0eXBlJzogJ251bWJlcicsJ25hbWUnOiAndmVudGlsXzJfcmVzdHplaXRfaW5fc2VrJywndW5pdCc6ICdTZWt1bmRlbid9IF0sCgkvLyAgICBWZW50aWwgMwoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzMnLCB7J3R5cGUnOiAnYm9vbGVhbicsJ25hbWUnOiAndmVudGlsXzMnfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfZGF1ZXInLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICd2ZW50aWxfM19kYXVlcicsJ3VuaXQnOiAnU2VrdW5kZW4nfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfZW5kZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ3ZlbnRpbF8zX2VuZGUnLCd1bml0JzogJ1Vocid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19uYW1lJywgJ0JlZXQnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfNF9uYW1lJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX3Jlc3R6ZWl0Jywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAndmVudGlsXzNfcmVzdHplaXQnLCd1bml0JzogJ01pbnV0ZW4nfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfcmVzdHplaXRfaW5fc2VrJywgeyd0eXBlJzogJ251bWJlcicsJ25hbWUnOiAndmVudGlsXzNfcmVzdHplaXRfaW5fc2VrJywndW5pdCc6ICdTZWt1bmRlbid9IF0sCgkvLyAgICBWZW50aWwgNAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzQnLCB7J3R5cGUnOiAnYm9vbGVhbicsJ25hbWUnOiAndmVudGlsXzQnfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfZGF1ZXInLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICd2ZW50aWxfNF9kYXVlcicsJ3VuaXQnOiAnU2VrdW5kZW4nfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfZW5kZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ3ZlbnRpbF80X2VuZGUnLCd1bml0JzogJ1Vocid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9uYW1lJywgJ2tsLiBSYXNlbicsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ3ZlbnRpbF80X25hbWUnfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfcmVzdHplaXQnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfNF9yZXN0emVpdCcsJ3VuaXQnOiAnTWludXRlbid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICd2ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCd1bml0JzogJ1Nla3VuZGVuJ30gXSwKCS8vICBaZWl0cGxhbgoJLy8gICAgTW9yZ2VucwoJW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfYWt0aXYnLCB7J3R5cGUnOiAnYm9vbGVhbicsJ25hbWUnOiAnbW9yZ2Vuc19ha3Rpdid9IF0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0Jywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAnbW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0JywndW5pdCc6ICdVaHInfSBdLAoJW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdtb3JnZW5zX3VocnplaXRfc3RhcnRfc3R1bmRlJ30gXSwKCVtwZmFkKyd6ZWl0cGxhbi5tb3JnZW5zX3VocnplaXRfc3RhcnRfbWludXRlJywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAnbW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZSd9IF0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc192ZXJ6b2VnZXJ1bmdfc29ubmVuYXVmZ2FuZycsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ21vcmdlbnNfdmVyem9lZ2VydW5nX3Nvbm5lbmF1ZmdhbmcnLCd1bml0JzogJ01pbnV0ZW4nfSBdLAoJLy8gICAgQWJlbmRzCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX2FrdGl2Jywgeyd0eXBlJzogJ2Jvb2xlYW4nLCduYW1lJzogJ2FiZW5kc19ha3Rpdid9IF0sCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3VocnplaXRfc3RhcnQnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdhYmVuZHNfdWhyemVpdF9zdGFydCcsJ3VuaXQnOiAnVWhyJ30gXSwKCVtwZmFkKyd6ZWl0cGxhbi5hYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdhYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnfSBdLAoJW3BmYWQrJ3plaXRwbGFuLmFiZW5kc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ2FiZW5kc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZSd9IF0sCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3ZlcnpvZWdlcnVuZ19zb25uZW51bnRlcmdhbmcnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdhYmVuZHNfdmVyem9lZ2VydW5nX3Nvbm5lbnVudGVyZ2FuZycsJ3VuaXQnOiAnTWludXRlbid9IF0sCgkvLyAgICBGZXN0ZSBTdGFydHplaXQKCVtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfYWt0aXYnLCB7J3R5cGUnOiAnYm9vbGVhbicsJ25hbWUnOiAnZmVzdGVfc3RhcnR6ZWl0X2FrdGl2J30gXSwKCVtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfdWhyemVpdF9zdGFydCcsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ2Zlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0JywndW5pdCc6ICdVaHInfSBdLAoJW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ2Zlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X3N0dW5kZSd9IF0sCglbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfbWludXRlJywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAnZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfbWludXRlJ30gXSwJCQpdOyAgICAKICAgIGNyZWF0ZVVzZXJTdGF0ZXMoc3BlaWNoZXJvcnQsIGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSk7</field>
                           <comment pinned="false" h="80" w="160">Datenpunkte erstellen</comment>
                          </block>
                          

                          Und hier einmal das Javascript:

                          /**
                          * 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 denPfad 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'} ],
                             [pfad+'bewaesserung_automatik', {'type': 'boolean','name': 'bewaesserung_automatik'} ],
                             //  Timer
                             [pfad+'lautzeit_gesamt_in_sek', {'type': 'number','name': 'lautzeit_gesamt_in_sek', 'unit': 'Sekunden'} ],
                             [pfad+'lautzeit_ende_uhrzeit', {'type': 'string','name': 'lautzeit_ende_uhrzeit', 'unit': 'Uhr'} ],
                             [pfad+'restlautzeit', {'type': 'string','name': 'restlautzeit', 'unit': "Minuten"} ],
                             [pfad+'restlautzeit_in_sek', {'type': 'number','name': 'restlautzeit_in_sek', 'unit': 'Sekunden'} ],
                             //  Ventile
                             [pfad+'ventile.aktives_ventil', {'type': 'string','name': 'aktives_ventil'} ],
                             [pfad+'ventile.anzahl_aktive_ventile', {'type': 'number','name': 'anzahl_aktive_ventile'} ],
                             //    Ventil 1
                             [pfad+'ventile.ventil_1.ventil_1', {'type': 'boolean','name': 'ventil_1'} ],
                             [pfad+'ventile.ventil_1.ventil_1_dauer', {'type': 'number','name': 'ventil_1_dauer','unit': 'Sekunden'} ],
                             [pfad+'ventile.ventil_1.ventil_1_ende', {'type': 'string','name': 'ventil_1_ende','unit': 'Uhr'} ],
                             [pfad+'ventile.ventil_1.ventil_1_name', 'Hecke', {'type': 'string','name': 'ventil_1_name'} ],
                             [pfad+'ventile.ventil_1.ventil_1_restzeit', {'type': 'string','name': 'ventil_1_restzeit','unit': 'Minuten'} ],
                             [pfad+'ventile.ventil_1.ventil_1_restzeit_in_sek', {'type': 'number','name': 'ventil_1_restzeit_in_sek','unit': 'Sekunden'} ],
                             //    Ventil 2
                             [pfad+'ventile.ventil_2.ventil_2', {'type': 'boolean','name': 'ventil_2'} ],
                             [pfad+'ventile.ventil_2.ventil_2_dauer', {'type': 'number','name': 'ventil_2_dauer','unit': 'Sekunden'} ],
                             [pfad+'ventile.ventil_2.ventil_2_ende', {'type': 'string','name': 'ventil_2_ende','unit': 'Uhr'} ],
                             [pfad+'ventile.ventil_2.ventil_2_name', 'Rasen', {'type': 'string','name': 'ventil_2_name'} ],
                             [pfad+'ventile.ventil_2.ventil_2_restzeit', {'type': 'string','name': 'ventil_2_restzeit','unit': 'Minuten'} ],
                             [pfad+'ventile.ventil_2.ventil_2_restzeit_in_sek', {'type': 'number','name': 'ventil_2_restzeit_in_sek','unit': 'Sekunden'} ],
                             //    Ventil 3
                             [pfad+'ventile.ventil_3.ventil_3', {'type': 'boolean','name': 'ventil_3'} ],
                             [pfad+'ventile.ventil_3.ventil_3_dauer', {'type': 'number','name': 'ventil_3_dauer','unit': 'Sekunden'} ],
                             [pfad+'ventile.ventil_3.ventil_3_ende', {'type': 'string','name': 'ventil_3_ende','unit': 'Uhr'} ],
                             [pfad+'ventile.ventil_3.ventil_3_name', 'Beet', {'type': 'string','name': 'ventil_4_name'} ],
                             [pfad+'ventile.ventil_3.ventil_3_restzeit', {'type': 'string','name': 'ventil_3_restzeit','unit': 'Minuten'} ],
                             [pfad+'ventile.ventil_3.ventil_3_restzeit_in_sek', {'type': 'number','name': 'ventil_3_restzeit_in_sek','unit': 'Sekunden'} ],
                             //    Ventil 4
                             [pfad+'ventile.ventil_4.ventil_4', {'type': 'boolean','name': 'ventil_4'} ],
                             [pfad+'ventile.ventil_4.ventil_4_dauer', {'type': 'number','name': 'ventil_4_dauer','unit': 'Sekunden'} ],
                             [pfad+'ventile.ventil_4.ventil_4_ende', {'type': 'string','name': 'ventil_4_ende','unit': 'Uhr'} ],
                             [pfad+'ventile.ventil_4.ventil_4_name', 'kl. Rasen', {'type': 'string','name': 'ventil_4_name'} ],
                             [pfad+'ventile.ventil_4.ventil_4_restzeit', {'type': 'string','name': 'ventil_4_restzeit','unit': 'Minuten'} ],
                             [pfad+'ventile.ventil_4.ventil_4_restzeit_in_sek', {'type': 'number','name': 'ventil_4_restzeit_in_sek','unit': 'Sekunden'} ],
                             //  Zeitplan
                             //    Morgens
                             [pfad+'zeitplan.morgens_aktiv', {'type': 'boolean','name': 'morgens_aktiv'} ],
                             [pfad+'zeitplan.morgens_uhrzeit_start', {'type': 'string','name': 'morgens_uhrzeit_start','unit': 'Uhr'} ],
                             [pfad+'zeitplan.morgens_uhrzeit_start_stunde', {'type': 'string','name': 'morgens_uhrzeit_start_stunde'} ],
                             [pfad+'zeitplan.morgens_uhrzeit_start_minute', {'type': 'string','name': 'morgens_uhrzeit_start_minute'} ],
                             [pfad+'zeitplan.morgens_verzoegerung_sonnenaufgang', {'type': 'string','name': 'morgens_verzoegerung_sonnenaufgang','unit': 'Minuten'} ],
                             //    Abends
                             [pfad+'zeitplan.abends_aktiv', {'type': 'boolean','name': 'abends_aktiv'} ],
                             [pfad+'zeitplan.abends_uhrzeit_start', {'type': 'string','name': 'abends_uhrzeit_start','unit': 'Uhr'} ],
                             [pfad+'zeitplan.abends_uhrzeit_start_stunde', {'type': 'string','name': 'abends_uhrzeit_start_stunde'} ],
                             [pfad+'zeitplan.abends_uhrzeit_start_minute', {'type': 'string','name': 'abends_uhrzeit_start_minute'} ],
                             [pfad+'zeitplan.abends_verzoegerung_sonnenuntergang', {'type': 'string','name': 'abends_verzoegerung_sonnenuntergang','unit': 'Minuten'} ],
                             //    Feste Startzeit
                             [pfad+'zeitplan.feste_startzeit_aktiv', {'type': 'boolean','name': 'feste_startzeit_aktiv'} ],
                             [pfad+'zeitplan.feste_startzeit_uhrzeit_start', {'type': 'string','name': 'feste_startzeit_uhrzeit_start','unit': 'Uhr'} ],
                             [pfad+'zeitplan.feste_startzeit_uhrzeit_start_stunde', {'type': 'string','name': 'feste_startzeit_uhrzeit_start_stunde'} ],
                             [pfad+'zeitplan.feste_startzeit_uhrzeit_start_minute', {'type': 'string','name': 'feste_startzeit_uhrzeit_start_minute'} ],		
                          ];    
                             createUserStates(speicherort, false, statesToCreate);
                          

                          dslraserD 1 Reply Last reply
                          1
                          • K Kuddel

                            @dslraser vielen dank für dein Skript.

                            Scheint zu klappen. Ich habe alle meine DPs eingebaut und noch zwei Variablen definiert.

                            Man kann sowohl den Ort, als auch den Pfad im Skript eingeben:

                            /**
                            * Hier bitte den Speicherort und denPfad eintragen
                            * Beispiele: 
                            
                            	speicherort = '0_userdata.0.'
                            	speicherort = 'javascript.0'
                            	
                            	pfad = 'bewasserung.'
                            	pfad = 'Gardena.Bewaesserung.'
                            
                            */
                            speicherort = 'javascript.0'
                            pfad = 'bewaesserung.
                            

                            Hier Einmal der Blockly Export, falls jemand testen möchte:

                            <block xmlns="http://www.w3.org/1999/xhtml" type="procedures_defcustomnoreturn" id="D:0E=~0D8*EFnn8f|sd." x="88" y="-1613">
                             <mutation statements="false"></mutation>
                             <field name="NAME">Datenpunkte_erstellen</field>
                             <field name="SCRIPT">LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKLyoqCiogSGllciBiaXR0ZSBkZW4gU3BlaWNoZXJvcnQgdW5kIGRlblBmYWQgZWludHJhZ2VuCiogQmVpc3BpZWxlOiAKCglzcGVpY2hlcm9ydCA9ICcwX3VzZXJkYXRhLjAuJwoJc3BlaWNoZXJvcnQgPSAnamF2YXNjcmlwdC4wJwoJCglwZmFkID0gJ2Jld2Fzc2VydW5nLicKCXBmYWQgPSAnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuJwoKKi8Kc3BlaWNoZXJvcnQgPSAnamF2YXNjcmlwdC4wJwpwZmFkID0gJ2Jld2Flc3NlcnVuZy4nCgoKZnVuY3Rpb24gY3JlYXRlVXNlclN0YXRlcyh3aGVyZSwgZm9yY2UsIHN0YXRlc1RvQ3JlYXRlLCBjYWxsYmFjayA9IHVuZGVmaW5lZCkgewogICAgCiAgICBjb25zdCBXQVJOID0gZmFsc2U7IC8vIE9ubHkgZm9yIDBfdXNlcmRhdGEuMDogVGhyb3dzIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBpcyBhbHJlYWR5IGV4aXN0aW5nIGFuZCBmb3JjZT1mYWxzZS4gRGVmYXVsdCBpcyBmYWxzZSwgc28gbm8gd2FybmluZyBpbiBsb2csIGlmIHN0YXRlIGV4aXN0cy4KICAgIGNvbnN0IExPR19ERUJVRyA9IGZhbHNlOyAvLyBUbyBkZWJ1ZyB0aGlzIGZ1bmN0aW9uLCBzZXQgdG8gdHJ1ZQogICAgLy8gUGVyIGlzc3VlICM0NzQgKGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzQpLCB0aGUgdXNlZCBmdW5jdGlvbiBzZXRPYmplY3QoKSBleGVjdXRlcyB0aGUgY2FsbGJhY2sgCiAgICAvLyBiZWZvcmUgdGhlIHN0YXRlIGlzIGFjdHVhbCBjcmVhdGVkLiBUaGVyZWZvcmUsIHdlIHVzZSBhIHNldFRpbWVvdXQgYW5kIGNvdW50ZXIgYXMgYSB3b3JrYXJvdW5kLgogICAgY29uc3QgREVMQVkgPSA1MDsgLy8gRGVsYXkgaW4gbWlsbGlzZWNvbmRzIChtcykuIEluY3JlYXNlIHRoaXMgdG8gMTAwLCBpZiBpdCBpcyBub3Qgd29ya2luZy4KCiAgICAvLyBWYWxpZGF0ZSAid2hlcmUiCiAgICBpZiAod2hlcmUuZW5kc1dpdGgoJy4nKSkgd2hlcmUgPSB3aGVyZS5zbGljZSgwLCAtMSk7IC8vIFJlbW92ZSB0cmFpbGluZyBkb3QKICAgIGlmICggKHdoZXJlLm1hdGNoKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSkpJHwwX3VzZXJkYXRhXC4wJCkvKSA9PSBudWxsKSApIHsKICAgICAgICBsb2coJ1RoaXMgc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgdG8gY3JlYXRlIHN0YXRlcyB1bmRlciBbJyArIHdoZXJlICsgJ10nLCAnZXJyb3InKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gUHJlcGFyZSAic3RhdGVzVG9DcmVhdGUiIHNpbmNlIHdlIGFsc28gYWxsb3cgYSBzaW5nbGUgc3RhdGUgdG8gY3JlYXRlCiAgICBpZighQXJyYXkuaXNBcnJheShzdGF0ZXNUb0NyZWF0ZVswXSkpIHN0YXRlc1RvQ3JlYXRlID0gW3N0YXRlc1RvQ3JlYXRlXTsgLy8gd3JhcCBpbnRvIGFycmF5LCBpZiBqdXN0IG9uZSBhcnJheSBhbmQgbm90IGluc2lkZSBhbiBhcnJheQoKICAgIC8vIEFkZCAid2hlcmUiIHRvIFNUQVRFU19UT19DUkVBVEUKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGVzVG9DcmVhdGUubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZXQgbHBQYXRoID0gc3RhdGVzVG9DcmVhdGVbaV1bMF0ucmVwbGFjZSgvXC4qXC4vZywgJy4nKTsgLy8gcmVwbGFjZSBhbGwgbXVsdGlwbGUgZG90cyBsaWtlICcuLicsICcuLi4nIHdpdGggYSBzaW5nbGUgJy4nCiAgICAgICAgbHBQYXRoID0gbHBQYXRoLnJlcGxhY2UoL14oKGphdmFzY3JpcHRcLihbMS05XVswLTldfFswLTldKVwuKXwwX3VzZXJkYXRhXC4wXC4pLywnJykgLy8gcmVtb3ZlIGFueSBqYXZhc2NyaXB0LnguIC8gMF91c2VyZGF0YS4wLiBmcm9tIGJlZ2lubmluZwogICAgICAgIGxwUGF0aCA9IHdoZXJlICsgJy4nICsgbHBQYXRoOyAvLyBhZGQgd2hlcmUgdG8gYmVnaW5uaW5nIG9mIHN0cmluZwogICAgICAgIHN0YXRlc1RvQ3JlYXRlW2ldWzBdID0gbHBQYXRoOwogICAgfQoKICAgIGlmICh3aGVyZSAhPSAnMF91c2VyZGF0YS4wJykgewogICAgICAgIC8vIENyZWF0ZSBTdGF0ZXMgdW5kZXIgamF2YXNjcmlwdC54CiAgICAgICAgbGV0IG51bVN0YXRlcyA9IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsKICAgICAgICBzdGF0ZXNUb0NyZWF0ZS5mb3JFYWNoKGZ1bmN0aW9uKGxvb3BQYXJhbSkgewogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gTm93IHdlIGFyZSBjcmVhdGluZyBuZXcgc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOwogICAgICAgICAgICBsZXQgbG9vcEluaXQgPSAobG9vcFBhcmFtWzFdWydkZWYnXSA9PSB1bmRlZmluZWQpID8gbnVsbCA6IGxvb3BQYXJhbVsxXVsnZGVmJ107IC8vIG1pbWljIHNhbWUgYmVoYXZpb3IgYXMgY3JlYXRlU3RhdGUgaWYgbm8gaW5pdCB2YWx1ZSBpcyBwcm92aWRlZAogICAgICAgICAgICBjcmVhdGVTdGF0ZShsb29wUGFyYW1bMF0sIGxvb3BJbml0LCBmb3JjZSwgbG9vcFBhcmFtWzFdLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIDBfdXNlcmRhdGEuMAogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7CiAgICAgICAgbGV0IGNvdW50ZXIgPSAtMTsKICAgICAgICBzdGF0ZXNUb0NyZWF0ZS5mb3JFYWNoKGZ1bmN0aW9uKGxvb3BQYXJhbSkgewogICAgICAgICAgICBjb3VudGVyICs9IDE7CiAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZyAoJ1tEZWJ1Z10gQ3VycmVudGx5IHByb2Nlc3NpbmcgZm9sbG93aW5nIHN0YXRlOiBbJyArIGxvb3BQYXJhbVswXSArICddJyk7CiAgICAgICAgICAgIGlmKCAoJChsb29wUGFyYW1bMF0pLmxlbmd0aCA+IDApICYmIChleGlzdHNTdGF0ZShsb29wUGFyYW1bMF0pKSApIHsgLy8gV29ya2Fyb3VuZCBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3OAogICAgICAgICAgICAgICAgLy8gU3RhdGUgaXMgZXhpc3RpbmcuCiAgICAgICAgICAgICAgICBpZiAoV0FSTiAmJiAhZm9yY2UpIGxvZygnU3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXSBpcyBhbHJlYWR5IGV4aXN0aW5nIGFuZCB3aWxsIG5vIGxvbmdlciBiZSBjcmVhdGVkLicsICd3YXJuJyk7CiAgICAgICAgICAgICAgICBpZiAoIVdBUk4gJiYgTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gU3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXSBpcyBhbHJlYWR5IGV4aXN0aW5nLiBPcHRpb24gZm9yY2UgKD1vdmVyd3JpdGUpIGlzIHNldCB0byBbJyArIGZvcmNlICsgJ10uJyk7CiAgICAgICAgICAgICAgICBpZighZm9yY2UpIHsKICAgICAgICAgICAgICAgICAgICAvLyBTdGF0ZSBleGlzdHMgYW5kIHNoYWxsIG5vdCBiZSBvdmVyd3JpdHRlbiBzaW5jZSBmb3JjZT1mYWxzZQogICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBkbyBub3QgcHJvY2VlZC4KICAgICAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQhJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB3YXMgcHJvdmlkZWQsIHdoaWNoIHdlIGFyZSBnb2luZyB0byBleGVjdXRlIG5vdy4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBvdXQgYW5kIGNvbnRpbnVlIHdpdGggbmV4dCBlbGVtZW50IGluIGxvb3AuCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTg0NTI5MjAvY29udGludWUtaW4tY3Vyc29yLWZvcmVhY2gKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IC8vIGlmKCFmb3JjZSkKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU3RhdGUgaXMgbm90IGV4aXN0aW5nIG9yIGZvcmNlID0gdHJ1ZSwgc28gd2UgYXJlIGNvbnRpbnVpbmcgdG8gY3JlYXRlIHRoZSBzdGF0ZSB0aHJvdWdoIHNldE9iamVjdCgpLgogICAgICAgICAgICBsZXQgb2JqID0ge307CiAgICAgICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgICAgICBvYmouY29tbW9uID0gbG9vcFBhcmFtWzFdOwogICAgICAgICAgICBzZXRPYmplY3QobG9vcFBhcmFtWzBdLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3QgZm9yIHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ106ICcgKyBlcnIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gTm93IHdlIGFyZSBjcmVhdGluZyBuZXcgc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXScpCiAgICAgICAgICAgICAgICAgICAgbGV0IGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICcnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBsb29wUGFyYW1bMV0uZGVmOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShsb29wUGFyYW1bMF0sIGluaXQsIHRydWUsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIHNldFN0YXRlIGR1cmNoZ2Vmw7xocnQ6ICcgKyBsb29wUGFyYW1bMF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgcHJvY2Vzc2VkLicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEZ1bmN0aW9uIHRvIGNhbGxiYWNrIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9LCBERUxBWSArICgyMCAqIGNvdW50ZXIpICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfQp9CgpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCgkvL0Jld8Okc3NlcnVuZwoJW3BmYWQrJ2Jld2Flc3NlcnVuZ19ha3RpdicsIHsnbmFtZSc6J2Jld2Flc3NlcnVuZ19ha3RpdicsICd0eXBlJzonYm9vbGVhbid9IF0sCglbcGZhZCsnYmV3YWVzc2VydW5nX2F1dG9tYXRpaycsIHsndHlwZSc6ICdib29sZWFuJywnbmFtZSc6ICdiZXdhZXNzZXJ1bmdfYXV0b21hdGlrJ30gXSwKCS8vICBUaW1lcgoJW3BmYWQrJ2xhdXR6ZWl0X2dlc2FtdF9pbl9zZWsnLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICdsYXV0emVpdF9nZXNhbXRfaW5fc2VrJywgJ3VuaXQnOiAnU2VrdW5kZW4nfSBdLAoJW3BmYWQrJ2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsICd1bml0JzogJ1Vocid9IF0sCglbcGZhZCsncmVzdGxhdXR6ZWl0Jywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAncmVzdGxhdXR6ZWl0JywgJ3VuaXQnOiAiTWludXRlbiJ9IF0sCglbcGZhZCsncmVzdGxhdXR6ZWl0X2luX3NlaycsIHsndHlwZSc6ICdudW1iZXInLCduYW1lJzogJ3Jlc3RsYXV0emVpdF9pbl9zZWsnLCAndW5pdCc6ICdTZWt1bmRlbid9IF0sCgkvLyAgVmVudGlsZQoJW3BmYWQrJ3ZlbnRpbGUuYWt0aXZlc192ZW50aWwnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdha3RpdmVzX3ZlbnRpbCd9IF0sCglbcGZhZCsndmVudGlsZS5hbnphaGxfYWt0aXZlX3ZlbnRpbGUnLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICdhbnphaGxfYWt0aXZlX3ZlbnRpbGUnfSBdLAoJLy8gICAgVmVudGlsIDEKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xJywgeyd0eXBlJzogJ2Jvb2xlYW4nLCduYW1lJzogJ3ZlbnRpbF8xJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2RhdWVyJywgeyd0eXBlJzogJ251bWJlcicsJ25hbWUnOiAndmVudGlsXzFfZGF1ZXInLCd1bml0JzogJ1Nla3VuZGVuJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2VuZGUnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfMV9lbmRlJywndW5pdCc6ICdVaHInfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzEudmVudGlsXzFfbmFtZScsICdIZWNrZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ3ZlbnRpbF8xX25hbWUnfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzEudmVudGlsXzFfcmVzdHplaXQnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfMV9yZXN0emVpdCcsJ3VuaXQnOiAnTWludXRlbid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICd2ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCd1bml0JzogJ1Nla3VuZGVuJ30gXSwKCS8vICAgIFZlbnRpbCAyCglbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMicsIHsndHlwZSc6ICdib29sZWFuJywnbmFtZSc6ICd2ZW50aWxfMid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9kYXVlcicsIHsndHlwZSc6ICdudW1iZXInLCduYW1lJzogJ3ZlbnRpbF8yX2RhdWVyJywndW5pdCc6ICdTZWt1bmRlbid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9lbmRlJywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAndmVudGlsXzJfZW5kZScsJ3VuaXQnOiAnVWhyJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX25hbWUnLCAnUmFzZW4nLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfMl9uYW1lJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX3Jlc3R6ZWl0Jywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAndmVudGlsXzJfcmVzdHplaXQnLCd1bml0JzogJ01pbnV0ZW4nfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzJfcmVzdHplaXRfaW5fc2VrJywgeyd0eXBlJzogJ251bWJlcicsJ25hbWUnOiAndmVudGlsXzJfcmVzdHplaXRfaW5fc2VrJywndW5pdCc6ICdTZWt1bmRlbid9IF0sCgkvLyAgICBWZW50aWwgMwoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzMnLCB7J3R5cGUnOiAnYm9vbGVhbicsJ25hbWUnOiAndmVudGlsXzMnfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfZGF1ZXInLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICd2ZW50aWxfM19kYXVlcicsJ3VuaXQnOiAnU2VrdW5kZW4nfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfZW5kZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ3ZlbnRpbF8zX2VuZGUnLCd1bml0JzogJ1Vocid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19uYW1lJywgJ0JlZXQnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfNF9uYW1lJ30gXSwKCVtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX3Jlc3R6ZWl0Jywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAndmVudGlsXzNfcmVzdHplaXQnLCd1bml0JzogJ01pbnV0ZW4nfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfcmVzdHplaXRfaW5fc2VrJywgeyd0eXBlJzogJ251bWJlcicsJ25hbWUnOiAndmVudGlsXzNfcmVzdHplaXRfaW5fc2VrJywndW5pdCc6ICdTZWt1bmRlbid9IF0sCgkvLyAgICBWZW50aWwgNAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzQnLCB7J3R5cGUnOiAnYm9vbGVhbicsJ25hbWUnOiAndmVudGlsXzQnfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfZGF1ZXInLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICd2ZW50aWxfNF9kYXVlcicsJ3VuaXQnOiAnU2VrdW5kZW4nfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfZW5kZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ3ZlbnRpbF80X2VuZGUnLCd1bml0JzogJ1Vocid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9uYW1lJywgJ2tsLiBSYXNlbicsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ3ZlbnRpbF80X25hbWUnfSBdLAoJW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfcmVzdHplaXQnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICd2ZW50aWxfNF9yZXN0emVpdCcsJ3VuaXQnOiAnTWludXRlbid9IF0sCglbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCB7J3R5cGUnOiAnbnVtYmVyJywnbmFtZSc6ICd2ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCd1bml0JzogJ1Nla3VuZGVuJ30gXSwKCS8vICBaZWl0cGxhbgoJLy8gICAgTW9yZ2VucwoJW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfYWt0aXYnLCB7J3R5cGUnOiAnYm9vbGVhbicsJ25hbWUnOiAnbW9yZ2Vuc19ha3Rpdid9IF0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0Jywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAnbW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0JywndW5pdCc6ICdVaHInfSBdLAoJW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdtb3JnZW5zX3VocnplaXRfc3RhcnRfc3R1bmRlJ30gXSwKCVtwZmFkKyd6ZWl0cGxhbi5tb3JnZW5zX3VocnplaXRfc3RhcnRfbWludXRlJywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAnbW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZSd9IF0sCglbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc192ZXJ6b2VnZXJ1bmdfc29ubmVuYXVmZ2FuZycsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ21vcmdlbnNfdmVyem9lZ2VydW5nX3Nvbm5lbmF1ZmdhbmcnLCd1bml0JzogJ01pbnV0ZW4nfSBdLAoJLy8gICAgQWJlbmRzCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX2FrdGl2Jywgeyd0eXBlJzogJ2Jvb2xlYW4nLCduYW1lJzogJ2FiZW5kc19ha3Rpdid9IF0sCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3VocnplaXRfc3RhcnQnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdhYmVuZHNfdWhyemVpdF9zdGFydCcsJ3VuaXQnOiAnVWhyJ30gXSwKCVtwZmFkKyd6ZWl0cGxhbi5hYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdhYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnfSBdLAoJW3BmYWQrJ3plaXRwbGFuLmFiZW5kc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ2FiZW5kc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZSd9IF0sCglbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3ZlcnpvZWdlcnVuZ19zb25uZW51bnRlcmdhbmcnLCB7J3R5cGUnOiAnc3RyaW5nJywnbmFtZSc6ICdhYmVuZHNfdmVyem9lZ2VydW5nX3Nvbm5lbnVudGVyZ2FuZycsJ3VuaXQnOiAnTWludXRlbid9IF0sCgkvLyAgICBGZXN0ZSBTdGFydHplaXQKCVtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfYWt0aXYnLCB7J3R5cGUnOiAnYm9vbGVhbicsJ25hbWUnOiAnZmVzdGVfc3RhcnR6ZWl0X2FrdGl2J30gXSwKCVtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfdWhyemVpdF9zdGFydCcsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ2Zlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0JywndW5pdCc6ICdVaHInfSBdLAoJW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsndHlwZSc6ICdzdHJpbmcnLCduYW1lJzogJ2Zlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X3N0dW5kZSd9IF0sCglbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfbWludXRlJywgeyd0eXBlJzogJ3N0cmluZycsJ25hbWUnOiAnZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfbWludXRlJ30gXSwJCQpdOyAgICAKICAgIGNyZWF0ZVVzZXJTdGF0ZXMoc3BlaWNoZXJvcnQsIGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSk7</field>
                             <comment pinned="false" h="80" w="160">Datenpunkte erstellen</comment>
                            </block>
                            

                            Und hier einmal das Javascript:

                            /**
                            * 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 denPfad 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'} ],
                               [pfad+'bewaesserung_automatik', {'type': 'boolean','name': 'bewaesserung_automatik'} ],
                               //  Timer
                               [pfad+'lautzeit_gesamt_in_sek', {'type': 'number','name': 'lautzeit_gesamt_in_sek', 'unit': 'Sekunden'} ],
                               [pfad+'lautzeit_ende_uhrzeit', {'type': 'string','name': 'lautzeit_ende_uhrzeit', 'unit': 'Uhr'} ],
                               [pfad+'restlautzeit', {'type': 'string','name': 'restlautzeit', 'unit': "Minuten"} ],
                               [pfad+'restlautzeit_in_sek', {'type': 'number','name': 'restlautzeit_in_sek', 'unit': 'Sekunden'} ],
                               //  Ventile
                               [pfad+'ventile.aktives_ventil', {'type': 'string','name': 'aktives_ventil'} ],
                               [pfad+'ventile.anzahl_aktive_ventile', {'type': 'number','name': 'anzahl_aktive_ventile'} ],
                               //    Ventil 1
                               [pfad+'ventile.ventil_1.ventil_1', {'type': 'boolean','name': 'ventil_1'} ],
                               [pfad+'ventile.ventil_1.ventil_1_dauer', {'type': 'number','name': 'ventil_1_dauer','unit': 'Sekunden'} ],
                               [pfad+'ventile.ventil_1.ventil_1_ende', {'type': 'string','name': 'ventil_1_ende','unit': 'Uhr'} ],
                               [pfad+'ventile.ventil_1.ventil_1_name', 'Hecke', {'type': 'string','name': 'ventil_1_name'} ],
                               [pfad+'ventile.ventil_1.ventil_1_restzeit', {'type': 'string','name': 'ventil_1_restzeit','unit': 'Minuten'} ],
                               [pfad+'ventile.ventil_1.ventil_1_restzeit_in_sek', {'type': 'number','name': 'ventil_1_restzeit_in_sek','unit': 'Sekunden'} ],
                               //    Ventil 2
                               [pfad+'ventile.ventil_2.ventil_2', {'type': 'boolean','name': 'ventil_2'} ],
                               [pfad+'ventile.ventil_2.ventil_2_dauer', {'type': 'number','name': 'ventil_2_dauer','unit': 'Sekunden'} ],
                               [pfad+'ventile.ventil_2.ventil_2_ende', {'type': 'string','name': 'ventil_2_ende','unit': 'Uhr'} ],
                               [pfad+'ventile.ventil_2.ventil_2_name', 'Rasen', {'type': 'string','name': 'ventil_2_name'} ],
                               [pfad+'ventile.ventil_2.ventil_2_restzeit', {'type': 'string','name': 'ventil_2_restzeit','unit': 'Minuten'} ],
                               [pfad+'ventile.ventil_2.ventil_2_restzeit_in_sek', {'type': 'number','name': 'ventil_2_restzeit_in_sek','unit': 'Sekunden'} ],
                               //    Ventil 3
                               [pfad+'ventile.ventil_3.ventil_3', {'type': 'boolean','name': 'ventil_3'} ],
                               [pfad+'ventile.ventil_3.ventil_3_dauer', {'type': 'number','name': 'ventil_3_dauer','unit': 'Sekunden'} ],
                               [pfad+'ventile.ventil_3.ventil_3_ende', {'type': 'string','name': 'ventil_3_ende','unit': 'Uhr'} ],
                               [pfad+'ventile.ventil_3.ventil_3_name', 'Beet', {'type': 'string','name': 'ventil_4_name'} ],
                               [pfad+'ventile.ventil_3.ventil_3_restzeit', {'type': 'string','name': 'ventil_3_restzeit','unit': 'Minuten'} ],
                               [pfad+'ventile.ventil_3.ventil_3_restzeit_in_sek', {'type': 'number','name': 'ventil_3_restzeit_in_sek','unit': 'Sekunden'} ],
                               //    Ventil 4
                               [pfad+'ventile.ventil_4.ventil_4', {'type': 'boolean','name': 'ventil_4'} ],
                               [pfad+'ventile.ventil_4.ventil_4_dauer', {'type': 'number','name': 'ventil_4_dauer','unit': 'Sekunden'} ],
                               [pfad+'ventile.ventil_4.ventil_4_ende', {'type': 'string','name': 'ventil_4_ende','unit': 'Uhr'} ],
                               [pfad+'ventile.ventil_4.ventil_4_name', 'kl. Rasen', {'type': 'string','name': 'ventil_4_name'} ],
                               [pfad+'ventile.ventil_4.ventil_4_restzeit', {'type': 'string','name': 'ventil_4_restzeit','unit': 'Minuten'} ],
                               [pfad+'ventile.ventil_4.ventil_4_restzeit_in_sek', {'type': 'number','name': 'ventil_4_restzeit_in_sek','unit': 'Sekunden'} ],
                               //  Zeitplan
                               //    Morgens
                               [pfad+'zeitplan.morgens_aktiv', {'type': 'boolean','name': 'morgens_aktiv'} ],
                               [pfad+'zeitplan.morgens_uhrzeit_start', {'type': 'string','name': 'morgens_uhrzeit_start','unit': 'Uhr'} ],
                               [pfad+'zeitplan.morgens_uhrzeit_start_stunde', {'type': 'string','name': 'morgens_uhrzeit_start_stunde'} ],
                               [pfad+'zeitplan.morgens_uhrzeit_start_minute', {'type': 'string','name': 'morgens_uhrzeit_start_minute'} ],
                               [pfad+'zeitplan.morgens_verzoegerung_sonnenaufgang', {'type': 'string','name': 'morgens_verzoegerung_sonnenaufgang','unit': 'Minuten'} ],
                               //    Abends
                               [pfad+'zeitplan.abends_aktiv', {'type': 'boolean','name': 'abends_aktiv'} ],
                               [pfad+'zeitplan.abends_uhrzeit_start', {'type': 'string','name': 'abends_uhrzeit_start','unit': 'Uhr'} ],
                               [pfad+'zeitplan.abends_uhrzeit_start_stunde', {'type': 'string','name': 'abends_uhrzeit_start_stunde'} ],
                               [pfad+'zeitplan.abends_uhrzeit_start_minute', {'type': 'string','name': 'abends_uhrzeit_start_minute'} ],
                               [pfad+'zeitplan.abends_verzoegerung_sonnenuntergang', {'type': 'string','name': 'abends_verzoegerung_sonnenuntergang','unit': 'Minuten'} ],
                               //    Feste Startzeit
                               [pfad+'zeitplan.feste_startzeit_aktiv', {'type': 'boolean','name': 'feste_startzeit_aktiv'} ],
                               [pfad+'zeitplan.feste_startzeit_uhrzeit_start', {'type': 'string','name': 'feste_startzeit_uhrzeit_start','unit': 'Uhr'} ],
                               [pfad+'zeitplan.feste_startzeit_uhrzeit_start_stunde', {'type': 'string','name': 'feste_startzeit_uhrzeit_start_stunde'} ],
                               [pfad+'zeitplan.feste_startzeit_uhrzeit_start_minute', {'type': 'string','name': 'feste_startzeit_uhrzeit_start_minute'} ],		
                            ];    
                               createUserStates(speicherort, false, statesToCreate);
                            

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

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

                            Scheint zu klappen.

                            wirklich ?
                            Ich glaube das geht so nicht...

                            K 1 Reply Last reply
                            0
                            • dslraserD dslraser

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

                              Scheint zu klappen.

                              wirklich ?
                              Ich glaube das geht so nicht...

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

                              @dslraser habe es gerade nochmal gestetet und alle DPs korrekt unter 0_userdata angelegt.

                              Vllt. habe ich beim Export einen Fehler gemacht...

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

                                @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 dslraserD AtomicIXA 4 Replies 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 Offline
                                  D Offline
                                  darkiop
                                  Most Active
                                  wrote on last edited by
                                  #196

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

                                  Vllt. habt ihr Bock zu testen ?

                                  ja, schaus mir später an - bin gerade noch am debuggen der Automatik :)

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

                                  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.
                                    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 Offline
                                          D Offline
                                          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
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          562

                                          Online

                                          32.6k

                                          Users

                                          82.0k

                                          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