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

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

Community Forum

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

NEWS

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

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

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

[Vorlage] Gartenbewässerung mit 4 Ventilen

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

    @dslraser wenn ich dein skript richtig verstehe, dann hast du das ertellen der DPs in Javascript ins Blockly integriert ?

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

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

    @dslraser wenn ich dein skript richtig verstehe, dann hast du das ertellen der DPs in Javascript ins Blockly integriert ?

    genau

    K 1 Antwort Letzte Antwort
    0
    • dslraserD dslraser

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

      @dslraser wenn ich dein skript richtig verstehe, dann hast du das ertellen der DPs in Javascript ins Blockly integriert ?

      genau

      K Online
      K Online
      Kuddel
      schrieb am zuletzt editiert von
      #174

      @dslraser puuuh das muss ich mir morgen mal in ruhe anschauen, ob ich das hinbekomme.

      schade, dass es noch keine adapter gibt

      dslraserD 2 Antworten Letzte Antwort
      0
      • K Kuddel

        @dslraser puuuh das muss ich mir morgen mal in ruhe anschauen, ob ich das hinbekomme.

        schade, dass es noch keine adapter gibt

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

        @Kuddel
        Das mit den DP erstellen ist im Grunde ganz einfach. Ich stelle Dir das hier gleich mal einzeln rein.

        K 1 Antwort Letzte Antwort
        0
        • dslraserD dslraser

          @Kuddel
          Das mit den DP erstellen ist im Grunde ganz einfach. Ich stelle Dir das hier gleich mal einzeln rein.

          K Online
          K Online
          Kuddel
          schrieb am zuletzt editiert von
          #176

          @dslraser könnte man das Skript nicht auch vereinfachen?

          1. pfad für den Speicherort angeben (_userdata / javascript.0)

          und dann checken ob der DP schon existiert, wenn nicht wird er erstellt

          dslraserD 1 Antwort Letzte Antwort
          0
          • K Kuddel

            @dslraser puuuh das muss ich mir morgen mal in ruhe anschauen, ob ich das hinbekomme.

            schade, dass es noch keine adapter gibt

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

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

            @dslraser puuuh das muss ich mir morgen mal in ruhe anschauen, ob ich das hinbekomme.

            schade, dass es noch keine adapter gibt

            Da ist die Funktion. Den eigentlichen Baustein habe ich deaktiviert.

            Bildschirmfoto 2020-03-31 um 19.25.41.png

            Du klickst da rein/auf

            Bildschirmfoto 2020-03-31 um 19.25.51.png

            Dann bist Du im Funktionseditor. Ganz runter scrollen, da werden die DP definiert.

            Bildschirmfoto 2020-03-31 um 19.26.02.png

            Wenn Du Fragen dazu hast, dann frage einfach

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

            EDIT:
            Das sind die erstellten DP von dem Beispiel:

            Bildschirmfoto 2020-03-31 um 19.36.26.png

            1 Antwort Letzte Antwort
            0
            • K Kuddel

              @dslraser könnte man das Skript nicht auch vereinfachen?

              1. pfad für den Speicherort angeben (_userdata / javascript.0)

              und dann checken ob der DP schon existiert, wenn nicht wird er erstellt

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

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

              pfad für den Speicherort angeben (_userdata / javascript.0)

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

              Wenn Du nicht wills, das der schon vorhandene DP überschrieben wird, dann musst Du die ganz letzte Zeile auf false stellen.
              Genau dort wird auch der Speicherpfad eingestellt.

              Bildschirmfoto 2020-03-31 um 19.29.58.png

              K D 2 Antworten Letzte Antwort
              0
              • dslraserD dslraser

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

                pfad für den Speicherort angeben (_userdata / javascript.0)

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

                Wenn Du nicht wills, das der schon vorhandene DP überschrieben wird, dann musst Du die ganz letzte Zeile auf false stellen.
                Genau dort wird auch der Speicherpfad eingestellt.

                Bildschirmfoto 2020-03-31 um 19.29.58.png

                K Online
                K Online
                Kuddel
                schrieb am zuletzt editiert von
                #179

                @dslraser alles klar.

                werde es morgen mal testen.

                wäre auf jeden fall schonmal ein großer schritt, wenn man nur noch ein blockly-export inkl. aller DPs hat

                1 Antwort Letzte Antwort
                0
                • dslraserD dslraser

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

                  pfad für den Speicherort angeben (_userdata / javascript.0)

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

                  Wenn Du nicht wills, das der schon vorhandene DP überschrieben wird, dann musst Du die ganz letzte Zeile auf false stellen.
                  Genau dort wird auch der Speicherpfad eingestellt.

                  Bildschirmfoto 2020-03-31 um 19.29.58.png

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

                  @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

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

                  K 1 Antwort Letzte Antwort
                  0
                  • D Offline
                    D Offline
                    darkiop
                    Most Active
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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 Online
                      K Online
                      Kuddel
                      schrieb am zuletzt editiert von
                      #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 Antworten Letzte Antwort
                      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
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        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
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          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
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            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
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              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 Online
                                K Online
                                Kuddel
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                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
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  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 Online
                                    K Online
                                    Kuddel
                                    schrieb am zuletzt editiert von
                                    #189

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

                                    D 1 Antwort Letzte Antwort
                                    0
                                    • K Kuddel

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

                                      D Offline
                                      D Offline
                                      darkiop
                                      Most Active
                                      schrieb am zuletzt editiert von
                                      #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 Antworten Letzte Antwort
                                      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 Online
                                        K Online
                                        Kuddel
                                        schrieb am zuletzt editiert von
                                        #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 Antwort Letzte Antwort
                                        0
                                        • K Online
                                          K Online
                                          Kuddel
                                          schrieb am zuletzt editiert von
                                          #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 Antwort Letzte Antwort
                                          1
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          735

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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