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

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

Community Forum

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

NEWS

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

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

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

[Vorlage] Gartenbewässerung mit 4 Ventilen

Geplant Angeheftet Gesperrt Verschoben Blockly
415 Beiträge 22 Kommentatoren 79.8k 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 Offline
    K Offline
    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
    • 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
      schrieb am zuletzt editiert von
      #193

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

      Scheint zu klappen.

      wirklich ?
      Ich glaube das geht so nicht...

      K 1 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #194

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

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

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

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

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

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

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

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

                      Edit 1:

                      Und hier ein kleiner Typo:

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

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

                      Edit 2:

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

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

                      Edit 3:

                      Hier auch:

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

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

                      K 1 Antwort Letzte Antwort
                      0
                      • D darkiop

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

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

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

                        Edit 1:

                        Und hier ein kleiner Typo:

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

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

                        Edit 2:

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

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

                        Edit 3:

                        Hier auch:

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

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

                        @darkiop danke für ddie Rückmeldung.

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

                        Ich hoffe ich habe jetzt alles erwischt

                        bewaesserung_v1.3.1_beta.txt

                        D 2 Antworten Letzte Antwort
                        1
                        • K Kuddel

                          @darkiop danke für ddie Rückmeldung.

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

                          Ich hoffe ich habe jetzt alles erwischt

                          bewaesserung_v1.3.1_beta.txt

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

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

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

                          K 1 Antwort Letzte Antwort
                          0
                          • D darkiop

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

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

                            @darkiop ach verdammt :-D

                            bewaesserung_v1.3.1_beta.txt

                            dslraserD 1 Antwort Letzte Antwort
                            0
                            • K Kuddel

                              @darkiop ach verdammt :-D

                              bewaesserung_v1.3.1_beta.txt

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

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

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

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

                              K 1 Antwort Letzte Antwort
                              0
                              • dslraserD dslraser

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

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

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

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

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

                                dslraserD 1 Antwort Letzte Antwort
                                0
                                • K Kuddel

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

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

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

                                  1 Antwort Letzte Antwort
                                  0
                                  • K Kuddel

                                    @darkiop danke für ddie Rückmeldung.

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

                                    Ich hoffe ich habe jetzt alles erwischt

                                    bewaesserung_v1.3.1_beta.txt

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

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

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

                                    Sieht auf den ersten Blick gut aus - keine Fehler.

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

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

                                    K 1 Antwort Letzte Antwort
                                    0
                                    • D darkiop

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

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

                                      Sieht auf den ersten Blick gut aus - keine Fehler.

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

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

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

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

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

                                        bewaesserung_v1.3.2_beta.txt

                                        D 1 Antwort Letzte Antwort
                                        0
                                        • K Kuddel

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

                                          bewaesserung_v1.3.2_beta.txt

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

                                          @Kuddel Bei Ventil 3 wird keine Restlaufzeit berechnet

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

                                          K 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          833

                                          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