vars_pfad
vars_aktor_typ
vars_aktor_name
vars_sonnenaufgang
vars_sonoff_ip
vars_sonnenuntergang
vars_morgens_verzoegerung_sonnenaufgang
vars_abends_verzoegerung_sonnenuntergang
startzeit_sonnenaufgang
startzeit_sonnenaufgang_stunde
vars_feste_startzeit_uhrzeit_start_stunde
vars_feste_startzeit_urhzeit_start_minute
timeout
vars_bewaesserung_aktiv
startzeit_sonnenaufgang_minute
vars_bewaesserung_automatik
morgens
vars_laufzeit_gesamt_in_sek
vars_morgens_uhrzeit_start_stunde
vars_ventil_1
vars_ventil_2
vars_ventil_3
vars_ventil_4
vars_ventil_1_dauer
vars_ventil_2_dauer
vars_ventil_3_dauer
vars_ventil_4_dauer
vars_lautzeit_ende_uhrzeit
vars_morgens_urhzeit_start_minute
info_enduhrzeit_raw
vars_restlautzeit
abends
info_endzeit_stunde
vars_restlautzeit_in_sek
info_endzeit_minute
vars_ventil_1_ende
vars_abends_uhrzeit_start_stunde
vars_abends_uhrzeit_start_minute
info_endzeit_sekunde
ventil_enduhrzeit_raw
vars_ventil_2_ende
ventil_1_dauer
vars_ventil_1_aktor
vars_ventil_2_aktor
vars_ventil_3_aktor
vars_ventil_4_aktor
vars_morgens_uhrzeit_start
vars_morgens_aktiv
startzeit_fix_stunde
ventil_enduhrzeit_std
vars_ventil_3_ende
vars_ventil_1_restzeit
waitmail2
startzeit_sonnenuntergang
vars_automatik_top_temp
vars_automatik_regen
startzeit_fix_minute
ventil_enduhrzeit_min
vars_ventil_4_ende
vars_ventil_1_restzeit_in_sek
vars_ventil_1_aktor_ontime
vars_aktives_ventil
startzeit_sonnenuntergang_stunde
vars_feste_startzeit_uhrzeit_start
ventil_enduhrzeit_sek
ventil_enduhrzeit_verzoegerung
vars_anzahl_aktive_ventile
startzeit_sonnenuntergang_minute
vars_abends_aktiv
fix
ventil_2_dauer
restlaufzeit_vis_min
info_endzeit_aktive_ventile
vars_ventil_2_aktor_ontime
vars_ventil_2_restzeit
ventil_3_dauer
ventil_4_dauer
restlaufzeit_vis_sek
vars_ventil_2_restzeit_in_sek
vars_ventil_3_aktor_ontime
vars_ventil_1_name
info_text
restzeit
vars_ventil_2_name
info_betreff
vars_ventil_4_aktor_ontime
vars_ventil_3_restzeit
vars_ventil_3_name
restzeit_gesamt_min
vars_feste_startzeit_aktiv
vars_ventil_3_restzeit_in_sek
vars_ventil_4_name
restzeit_gesamt_sek
vars_abends_uhrzeit_start
ventil_1_rest
vars_ventil_4_restzeit
vars_ventil_4_restzeit_in_sek
ventil_2_rest
restzeit_ventil_min
ventil_3_rest
restzeit_ventil_sek
ventil_4_rest
Datenpunkte_erstellen
LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKLyoqCiogSGllciBiaXR0ZSBkZW4gU3BlaWNoZXJvcnQsZGVuIFBmYWQgZWludHJhZ2VuIHVuZCBkZW4gTmFtZW4gZGVyIEtyZWlzZSBlaW5nZWJlbgoqIEJlaXNwaWVsZTogCgoJc3BlaWNoZXJvcnQgPSAnMF91c2VyZGF0YS4wLicKCXNwZWljaGVyb3J0ID0gJ2phdmFzY3JpcHQuMCcKCQoJcGZhZCA9ICdiZXdhc3NlcnVuZy4nCglwZmFkID0gJ0dhcmRlbmEuQmV3YWVzc2VydW5nLicKICAgIAogICAga3JlaXMxID0gJ0hlY2tlJwogICAga3JlaXMyID0gJ1Jhc2VuJwoKKi8Kc3BlaWNoZXJvcnQgPSAnamF2YXNjcmlwdC4wJwpwZmFkID0gJ2Jld2Flc3NlcnVuZy4nCmtyZWlzMSA9ICdIZWNrZScKa3JlaXMyID0gJ1Jhc2VuJwprcmVpczMgPSAnQmVldCcKa3JlaXM0ID0gJ2tsLiBSYXNlbicKCgpmdW5jdGlvbiBjcmVhdGVVc2VyU3RhdGVzKHdoZXJlLCBmb3JjZSwgc3RhdGVzVG9DcmVhdGUsIGNhbGxiYWNrID0gdW5kZWZpbmVkKSB7CiAgICAKICAgIGNvbnN0IFdBUk4gPSBmYWxzZTsgLy8gT25seSBmb3IgMF91c2VyZGF0YS4wOiBUaHJvd3Mgd2FybmluZyBpbiBsb2csIGlmIHN0YXRlIGlzIGFscmVhZHkgZXhpc3RpbmcgYW5kIGZvcmNlPWZhbHNlLiBEZWZhdWx0IGlzIGZhbHNlLCBzbyBubyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgZXhpc3RzLgogICAgY29uc3QgTE9HX0RFQlVHID0gZmFsc2U7IC8vIFRvIGRlYnVnIHRoaXMgZnVuY3Rpb24sIHNldCB0byB0cnVlCiAgICAvLyBQZXIgaXNzdWUgIzQ3NCAoaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCksIHRoZSB1c2VkIGZ1bmN0aW9uIHNldE9iamVjdCgpIGV4ZWN1dGVzIHRoZSBjYWxsYmFjayAKICAgIC8vIGJlZm9yZSB0aGUgc3RhdGUgaXMgYWN0dWFsIGNyZWF0ZWQuIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlciBhcyBhIHdvcmthcm91bmQuCiAgICBjb25zdCBERUxBWSA9IDUwOyAvLyBEZWxheSBpbiBtaWxsaXNlY29uZHMgKG1zKS4gSW5jcmVhc2UgdGhpcyB0byAxMDAsIGlmIGl0IGlzIG5vdCB3b3JraW5nLgoKICAgIC8vIFZhbGlkYXRlICJ3aGVyZSIKICAgIGlmICh3aGVyZS5lbmRzV2l0aCgnLicpKSB3aGVyZSA9IHdoZXJlLnNsaWNlKDAsIC0xKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRvdAogICAgaWYgKCAod2hlcmUubWF0Y2goL14oKGphdmFzY3JpcHRcLihbMS05XVswLTldfFswLTldKSkkfDBfdXNlcmRhdGFcLjAkKS8pID09IG51bGwpICkgewogICAgICAgIGxvZygnVGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCB0byBjcmVhdGUgc3RhdGVzIHVuZGVyIFsnICsgd2hlcmUgKyAnXScsICdlcnJvcicpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBQcmVwYXJlICJzdGF0ZXNUb0NyZWF0ZSIgc2luY2Ugd2UgYWxzbyBhbGxvdyBhIHNpbmdsZSBzdGF0ZSB0byBjcmVhdGUKICAgIGlmKCFBcnJheS5pc0FycmF5KHN0YXRlc1RvQ3JlYXRlWzBdKSkgc3RhdGVzVG9DcmVhdGUgPSBbc3RhdGVzVG9DcmVhdGVdOyAvLyB3cmFwIGludG8gYXJyYXksIGlmIGp1c3Qgb25lIGFycmF5IGFuZCBub3QgaW5zaWRlIGFuIGFycmF5CgogICAgLy8gQWRkICJ3aGVyZSIgdG8gU1RBVEVTX1RPX0NSRUFURQogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7IGkrKykgewogICAgICAgIGxldCBscFBhdGggPSBzdGF0ZXNUb0NyZWF0ZVtpXVswXS5yZXBsYWNlKC9cLipcLi9nLCAnLicpOyAvLyByZXBsYWNlIGFsbCBtdWx0aXBsZSBkb3RzIGxpa2UgJy4uJywgJy4uLicgd2l0aCBhIHNpbmdsZSAnLicKICAgICAgICBscFBhdGggPSBscFBhdGgucmVwbGFjZSgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pXC4pfDBfdXNlcmRhdGFcLjBcLikvLCcnKSAvLyByZW1vdmUgYW55IGphdmFzY3JpcHQueC4gLyAwX3VzZXJkYXRhLjAuIGZyb20gYmVnaW5uaW5nCiAgICAgICAgbHBQYXRoID0gd2hlcmUgKyAnLicgKyBscFBhdGg7IC8vIGFkZCB3aGVyZSB0byBiZWdpbm5pbmcgb2Ygc3RyaW5nCiAgICAgICAgc3RhdGVzVG9DcmVhdGVbaV1bMF0gPSBscFBhdGg7CiAgICB9CgogICAgaWYgKHdoZXJlICE9ICcwX3VzZXJkYXRhLjAnKSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciBqYXZhc2NyaXB0LngKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIHN0YXRlc1RvQ3JlYXRlLmZvckVhY2goZnVuY3Rpb24obG9vcFBhcmFtKSB7CiAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJyk7CiAgICAgICAgICAgIGxldCBsb29wSW5pdCA9IChsb29wUGFyYW1bMV1bJ2RlZiddID09IHVuZGVmaW5lZCkgPyBudWxsIDogbG9vcFBhcmFtWzFdWydkZWYnXTsgLy8gbWltaWMgc2FtZSBiZWhhdmlvciBhcyBjcmVhdGVTdGF0ZSBpZiBubyBpbml0IHZhbHVlIGlzIHByb3ZpZGVkCiAgICAgICAgICAgIGNyZWF0ZVN0YXRlKGxvb3BQYXJhbVswXSwgbG9vcEluaXQsIGZvcmNlLCBsb29wUGFyYW1bMV0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgcHJvY2Vzc2VkLicpOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEZ1bmN0aW9uIHRvIGNhbGxiYWNrIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIENyZWF0ZSBTdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wCiAgICAgICAgbGV0IG51bVN0YXRlcyA9IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsKICAgICAgICBsZXQgY291bnRlciA9IC0xOwogICAgICAgIHN0YXRlc1RvQ3JlYXRlLmZvckVhY2goZnVuY3Rpb24obG9vcFBhcmFtKSB7CiAgICAgICAgICAgIGNvdW50ZXIgKz0gMTsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nICgnW0RlYnVnXSBDdXJyZW50bHkgcHJvY2Vzc2luZyBmb2xsb3dpbmcgc3RhdGU6IFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgaWYoICgkKGxvb3BQYXJhbVswXSkubGVuZ3RoID4gMCkgJiYgKGV4aXN0c1N0YXRlKGxvb3BQYXJhbVswXSkpICkgeyAvLyBXb3JrYXJvdW5kIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc4CiAgICAgICAgICAgICAgICAvLyBTdGF0ZSBpcyBleGlzdGluZy4KICAgICAgICAgICAgICAgIGlmIChXQVJOICYmICFmb3JjZSkgbG9nKCdTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcgYW5kIHdpbGwgbm8gbG9uZ2VyIGJlIGNyZWF0ZWQuJywgJ3dhcm4nKTsKICAgICAgICAgICAgICAgIGlmICghV0FSTiAmJiBMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcuIE9wdGlvbiBmb3JjZSAoPW92ZXJ3cml0ZSkgaXMgc2V0IHRvIFsnICsgZm9yY2UgKyAnXS4nKTsKICAgICAgICAgICAgICAgIGlmKCFmb3JjZSkgewogICAgICAgICAgICAgICAgICAgIC8vIFN0YXRlIGV4aXN0cyBhbmQgc2hhbGwgbm90IGJlIG92ZXJ3cml0dGVuIHNpbmNlIGZvcmNlPWZhbHNlCiAgICAgICAgICAgICAgICAgICAgLy8gU28sIHdlIGRvIG5vdCBwcm9jZWVkLgogICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgd2hpY2ggd2UgYXJlIGdvaW5nIHRvIGV4ZWN1dGUgbm93LicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdvIG91dCBhbmQgY29udGludWUgd2l0aCBuZXh0IGVsZW1lbnQgaW4gbG9vcC4KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODQ1MjkyMC9jb250aW51ZS1pbi1jdXJzb3ItZm9yZWFjaAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gLy8gaWYoIWZvcmNlKQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTdGF0ZSBpcyBub3QgZXhpc3Rpbmcgb3IgZm9yY2UgPSB0cnVlLCBzbyB3ZSBhcmUgY29udGludWluZyB0byBjcmVhdGUgdGhlIHN0YXRlIHRocm91Z2ggc2V0T2JqZWN0KCkuCiAgICAgICAgICAgIGxldCBvYmogPSB7fTsKICAgICAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgICAgICBvYmoubmF0aXZlID0ge307CiAgICAgICAgICAgIG9iai5jb21tb24gPSBsb29wUGFyYW1bMV07CiAgICAgICAgICAgIHNldE9iamVjdChsb29wUGFyYW1bMF0sIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICAgICAgICAgIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdCBmb3Igc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXTogJyArIGVycik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJykKICAgICAgICAgICAgICAgICAgICBsZXQgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGxvb3BQYXJhbVsxXS5kZWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKGxvb3BQYXJhbVswXSwgaW5pdCwgdHJ1ZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gc2V0U3RhdGUgZHVyY2hnZWbDvGhydDogJyArIGxvb3BQYXJhbVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0sIERFTEFZICsgKDIwICogY291bnRlcikgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9Cn0KCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKCiAgIC8vQmV3w6Rzc2VydW5nCiAgIFtwZmFkKydiZXdhZXNzZXJ1bmdfYWt0aXYnLCB7J25hbWUnOidiZXdhZXNzZXJ1bmdfYWt0aXYnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAogICBbcGZhZCsnYmV3YWVzc2VydW5nX2F1dG9tYXRpaycsIHsnbmFtZSc6J2Jld2Flc3NlcnVuZ19hdXRvbWF0aWsnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoKICAgLy9UaW1lcgogICBbcGZhZCsnbGF1dHplaXRfZ2VzYW10X2luX3NlaycsIHsnbmFtZSc6J2xhdXR6ZWl0X2dlc2FtdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKICAgW3BmYWQrJ2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsIHsnbmFtZSc6J2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6ICcwMDowMCcsJ3VuaXQnOiAnVWhyJ31dLAogICBbcGZhZCsncmVzdGxhdXR6ZWl0JywgeyduYW1lJzoncmVzdGxhdXR6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MCwndW5pdCc6J01pbnV0ZW4nfV0sCiAgIFtwZmFkKydyZXN0bGF1dHplaXRfaW5fc2VrJywgeyduYW1lJzoncmVzdGxhdXR6ZWl0X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAoKICAgLy9WZW50aWxlCiAgIFtwZmFkKyd2ZW50aWxlLmFrdGl2ZXNfdmVudGlsJywgeyduYW1lJzogJ2FrdGl2ZXNfdmVudGlsJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonYXVzJ31dLAogICBbcGZhZCsndmVudGlsZS5hbnphaGxfYWt0aXZlX3ZlbnRpbGUnLCB7J25hbWUnOidhbnphaGxfYWt0aXZlX3ZlbnRpbGUnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ21pbic6MCwgJ21heCc6NH0gXSwKCiAgIC8vVmVudGlsIDEKICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzEudmVudGlsXzEnLCB7J25hbWUnOid2ZW50aWxfMScsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8xX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2VuZGUnLCB7J25hbWUnOid2ZW50aWxfMV9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9uYW1lJywgeyduYW1lJzondmVudGlsXzFfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6a3JlaXMxfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzFfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDowMCcsJ3VuaXQnOidNaW51dGVuJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCiAgIC8vVmVudGlsIDIKICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzInLCB7J25hbWUnOid2ZW50aWxfMicsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8yX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX2VuZGUnLCB7J25hbWUnOid2ZW50aWxfMl9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9uYW1lJywgeyduYW1lJzondmVudGlsXzJfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6a3JlaXMyfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzJfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDowMCcsJ3VuaXQnOidNaW51dGVuJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfMl9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCiAgIC8vVmVudGlsIDMKICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzMnLCB7J25hbWUnOid2ZW50aWxfMycsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8zX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX2VuZGUnLCB7J25hbWUnOid2ZW50aWxfM19lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19uYW1lJywgeyduYW1lJzondmVudGlsXzNfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6a3JlaXMzfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzNfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDowMCcsJ3VuaXQnOidNaW51dGVuJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfM19yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCiAgIC8vVmVudGlsIDQKICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzQnLCB7J25hbWUnOid2ZW50aWxfNCcsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF80X2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X2VuZGUnLCB7J25hbWUnOid2ZW50aWxfNF9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9uYW1lJywgeyduYW1lJzondmVudGlsXzRfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6a3JlaXM0fV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzRfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDowMCcsJ3VuaXQnOidNaW51dGVuJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCiAgIC8vWmVpdHBsYW4KICAgW3BmYWQrJ3plaXRwbGFuLnNvbm5lbmF1ZmdhbmcnLCB7J25hbWUnOidzb25uZW5hdWZnYW5nJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsnemVpdHBsYW4uc29ubmVudW50ZXJnYW5nJywgeyduYW1lJzonc29ubmVudW50ZXJnYW5nJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICAvL01vcmdlbnMKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfYWt0aXYnLCB7J25hbWUnOidtb3JnZW5zX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdWhyemVpdF9zdGFydCcsIHsnbmFtZSc6J21vcmdlbnNfdWhyemVpdF9zdGFydCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAwOjAwJywndW5pdCc6J1Vocid9XSwKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J25hbWUnOidtb3JnZW5zX3VocnplaXRfc3RhcnRfc3R1bmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMCd9XSwKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdWhyemVpdF9zdGFydF9taW51dGUnLCB7J25hbWUnOidtb3JnZW5zX3VocnplaXRfc3RhcnRfbWludXRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMCd9XSwKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdmVyem9lZ2VydW5nX3Nvbm5lbmF1ZmdhbmcnLCB7J25hbWUnOidtb3JnZW5zX3ZlcnpvZWdlcnVuZ19zb25uZW5hdWZnYW5nJywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MCwndW5pdCc6J01pbnV0ZW4nfV0sCgogICAvL0FiZW5kcwogICBbcGZhZCsnemVpdHBsYW4uYWJlbmRzX2FrdGl2JywgeyduYW1lJzonYWJlbmRzX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKICAgW3BmYWQrJ3plaXRwbGFuLmFiZW5kc191aHJ6ZWl0X3N0YXJ0JywgeyduYW1lJzonYWJlbmRzX3VocnplaXRfc3RhcnQnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwMDowMCcsJ3VuaXQnOidVaHInfV0sCiAgIFtwZmFkKyd6ZWl0cGxhbi5hYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J25hbWUnOidhYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwJ31dLAogICBbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3VocnplaXRfc3RhcnRfbWludXRlJywgeyduYW1lJzonYWJlbmRzX3VocnplaXRfc3RhcnRfbWludXRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMCd9XSwKICAgW3BmYWQrJ3plaXRwbGFuLmFiZW5kc192ZXJ6b2VnZXJ1bmdfc29ubmVudW50ZXJnYW5nJywgeyduYW1lJzonYWJlbmRzX3ZlcnpvZWdlcnVuZ19zb25uZW51bnRlcmdhbmcnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzowLCd1bml0JzonTWludXRlbid9XSwKCiAgIC8vRmVzdGUgU3RhcnR6ZWl0CiAgIFtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfYWt0aXYnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfYWt0aXYnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnQnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfdWhyemVpdF9zdGFydCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAwOjAwJywndW5pdCc6J1Vocid9XSwKICAgW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsnbmFtZSc6J2Zlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MH1dLAogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfbWludXRlJywgeyduYW1lJzonZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfbWludXRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzowfV0sCQpdOyAgIAogICAgY3JlYXRlVXNlclN0YXRlcyhzcGVpY2hlcm9ydCwgZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKTs=
Datenpunkte erstellen.
Einmalig ausführen!
Variablen_definieren
Beschreibe diese Funktion …
--- Die folgenden Variablen bitte anpassen ---
vars_pfad
Bitte hier den Speicheroprt angeben.
z.B.
javascript.0.bewasserung
0_userdata.0.Garten.Bewasserung
javascript.0.bewaesserung.
vars_aktor_typ
hm = Homematic Aktor
sonoff = Sonoff Aktor
sonoff
vars_aktor_name
Hier bitte dem Namen des Aktor eintragen.
hm-rpc.0.QEQ12345678
sonoff.0.Bewaesserung
hm-rpc.0.QEQ0661312
vars_aktor_name
Hier bitte dem Namen des Aktor eintragen.
hm-rpc.0.QEQ12345678
sonoff.0.Bewaesserung
sonoff.0.Bewaesserung
vars_sonoff_ip
Nur notendig wenn ein Sonoff Aktor verwendet wird.
Bitte die IP vom aktor eintragen
192.168.4.110
--- Ab hier nichts mehr änder ---
Bewässerung
vars_bewaesserung_aktiv
vars_pfad
bewaesserung_aktiv
vars_bewaesserung_automatik
vars_pfad
bewaesserung_automatik
Laufzeit
vars_laufzeit_gesamt_in_sek
vars_pfad
lautzeit_gesamt_in_sek
vars_lautzeit_ende_uhrzeit
vars_pfad
lautzeit_ende_uhrzeit
vars_restlautzeit
vars_pfad
restlautzeit
vars_restlautzeit_in_sek
vars_pfad
restlautzeit_in_sek
Ventile
EQ
vars_aktor_typ
hm
vars_ventil_1_aktor
vars_aktor_name
.1.STATE
vars_ventil_1_aktor_ontime
vars_aktor_name
.1.ON_TIME
vars_ventil_2_aktor
vars_aktor_name
.2.STATE
vars_ventil_2_aktor_ontime
vars_aktor_name
.2.ON_TIME
vars_ventil_3_aktor
vars_aktor_name
.3.STATE
vars_ventil_3_aktor_ontime
vars_aktor_name
.3.ON_TIME
vars_ventil_4_aktor
vars_aktor_name
.4.STATE
vars_ventil_4_aktor_ontime
vars_aktor_name
.4.ON_TIME
EQ
vars_aktor_typ
sonoff
vars_ventil_1_aktor
vars_aktor_name
.POWER1
vars_ventil_2_aktor
vars_aktor_name
.POWER2
vars_ventil_3_aktor
vars_aktor_name
.POWER3
vars_ventil_4_aktor
vars_aktor_name
.POWER4
vars_aktives_ventil
vars_pfad
ventile.aktives_ventil
vars_anzahl_aktive_ventile
vars_pfad
ventile.anzahl_aktive_ventile
Ventil 1
vars_ventil_1
vars_pfad
ventile.ventil_1.ventil_1
vars_ventil_1_dauer
vars_pfad
ventile.ventil_1.ventil_1_dauer
vars_ventil_1_ende
vars_pfad
ventile.ventil_1.ventil_1_ende
vars_ventil_1_name
vars_pfad
ventile.ventil_1.ventil_1_name
vars_ventil_1_restzeit
vars_pfad
ventile.ventil_1.ventil_1_restzeit
vars_ventil_1_restzeit_in_sek
vars_pfad
ventile.ventil_1.ventil_1_restzeit_in_sek
Ventil 2
vars_ventil_2
vars_pfad
ventile.ventil_2.ventil_2
vars_ventil_2_dauer
vars_pfad
ventile.ventil_2.ventil_2_dauer
vars_ventil_2_ende
vars_pfad
ventile.ventil_2.ventil_2_ende
vars_ventil_2_name
vars_pfad
ventile.ventil_2.ventil_2_name
vars_ventil_2_restzeit
vars_pfad
ventile.ventil_2.ventil_2_restzeit
vars_ventil_2_restzeit_in_sek
vars_pfad
ventile.ventil_2.ventil_2_restzeit_in_sek
Ventil 3
vars_ventil_3
vars_pfad
ventile.ventil_3.ventil_3
vars_ventil_3_dauer
vars_pfad
ventile.ventil_3.ventil_3_dauer
vars_ventil_3_ende
vars_pfad
ventile.ventil_3.ventil_3_ende
vars_ventil_3_name
vars_pfad
ventile.ventil_3.ventil_3_name
vars_ventil_3_restzeit
vars_pfad
ventile.ventil_3.ventil_3_restzeit
vars_ventil_3_restzeit_in_sek
vars_pfad
ventile.ventil_3.ventil_3_restzeit_in_sek
Ventil 4
vars_ventil_4
vars_pfad
ventile.ventil_4.ventil_4
vars_ventil_4_dauer
vars_pfad
ventile.ventil_4.ventil_4_dauer
vars_ventil_4_ende
vars_pfad
ventile.ventil_4.ventil_4_ende
vars_ventil_4_name
vars_pfad
ventile.ventil_4.ventil_4_name
vars_ventil_4_restzeit
vars_pfad
ventile.ventil_4.ventil_4_restzeit
vars_ventil_4_restzeit_in_sek
vars_pfad
ventile.ventil_3.ventil_3_restzeit_in_sek
Zeitplan
vars_sonnenaufgang
vars_pfad
zeitplan.sonnenaufgang
vars_sonnenuntergang
vars_pfad
zeitplan.sonnenuntergang
Morgens
vars_morgens_aktiv
vars_pfad
zeitplan.morgens_aktiv
vars_morgens_uhrzeit_start
vars_pfad
zeitplan.morgens_uhrzeit_start
vars_morgens_uhrzeit_start_stunde
vars_pfad
zeitplan.morgens_uhrzeit_start_stunde
vars_morgens_urhzeit_start_minute
vars_pfad
zeitplan.morgens_uhrzeit_start_minute
vars_morgens_verzoegerung_sonnenaufgang
vars_pfad
zeitplan.morgens_verzoegerung_sonnenaufgang
Abends
vars_abends_aktiv
vars_pfad
zeitplan.abends_aktiv
vars_abends_uhrzeit_start
vars_pfad
zeitplan.abends_uhrzeit_start
vars_abends_uhrzeit_start_stunde
vars_pfad
zeitplan.abends_uhrzeit_start_stunde
vars_abends_uhrzeit_start_minute
vars_pfad
zeitplan.abends_uhrzeit_start_minute
vars_abends_verzoegerung_sonnenuntergang
vars_pfad
zeitplan.abends_verzoegerung_sonnenuntergang
Feste Startzeit
vars_feste_startzeit_aktiv
vars_pfad
zeitplan.feste_startzeit_aktiv
vars_feste_startzeit_uhrzeit_start
vars_pfad
zeitplan.feste_startzeit_uhrzeit_start
vars_feste_startzeit_uhrzeit_start_stunde
vars_pfad
zeitplan.feste_startzeit_uhrzeit_start_stunde
vars_feste_startzeit_urhzeit_start_minute
vars_pfad
zeitplan.feste_startzeit_uhrzeit_start_minute
Sonstige
vars_automatik_top_temp
javascript.0.temperaturen.heute_max
vars_automatik_regen
daswetter.0.NextDaysDetailed.Location_1.Day_1.rain_value
Datenpunkte erstellen.
Einmalig ausführen!
Sonnenauf- und Sonnenuntergang
10 0,12 * * *
false
FALSE
Object ID
vars_sonnenaufgang
TRUE
hh:mm
sunrise
0
0
false
FALSE
Object ID
vars_sonnenuntergang
TRUE
hh:mm
sunset
0
0
Startzeit berechnen
ne
default
vars_morgens_verzoegerung_sonnenaufgang
default
vars_abends_verzoegerung_sonnenuntergang
default
vars_sonnenaufgang
default
vars_sonnenuntergang
Morgens
startzeit_sonnenaufgang
ADD
1
mid
sunrise
0
1
val
vars_morgens_verzoegerung_sonnenaufgang
startzeit_sonnenaufgang_stunde
ROUNDDOWN
3.1
DIVIDE
1
startzeit_sonnenaufgang
60
startzeit_sonnenaufgang_minute
MINUS
1
startzeit_sonnenaufgang
1
MULTIPLY
1
startzeit_sonnenaufgang_stunde
60
Stunde und Minute in Objekt für cron
false
FALSE
Object ID
vars_morgens_uhrzeit_start_stunde
TRUE
startzeit_sonnenaufgang_stunde
0
false
FALSE
Object ID
vars_morgens_urhzeit_start_minute
TRUE
startzeit_sonnenaufgang_minute
0
Uhrzeit für VIS
LT
startzeit_sonnenaufgang_stunde
10
startzeit_sonnenaufgang_stunde
0
startzeit_sonnenaufgang_stunde
LT
startzeit_sonnenaufgang_minute
10
startzeit_sonnenaufgang_minute
0
startzeit_sonnenaufgang_minute
false
FALSE
Object ID
vars_morgens_uhrzeit_start
TRUE
startzeit_sonnenaufgang_stunde
:
startzeit_sonnenaufgang_minute
0
Abends
startzeit_sonnenuntergang
ADD
1
mid
sunset
0
1
val
vars_abends_verzoegerung_sonnenuntergang
startzeit_sonnenuntergang_stunde
ROUNDDOWN
3.1
DIVIDE
1
startzeit_sonnenuntergang
60
startzeit_sonnenuntergang_minute
MINUS
1
startzeit_sonnenuntergang
1
MULTIPLY
1
startzeit_sonnenuntergang_stunde
60
Stunde und Minute in Objekt für cron
false
FALSE
Object ID
vars_abends_uhrzeit_start_stunde
TRUE
startzeit_sonnenuntergang_stunde
0
false
FALSE
Object ID
vars_abends_uhrzeit_start_minute
TRUE
startzeit_sonnenuntergang_minute
0
Uhrzeit für VIS
LT
startzeit_sonnenuntergang_stunde
10
startzeit_sonnenuntergang_stunde
0
startzeit_sonnenuntergang_stunde
LT
startzeit_sonnenuntergang_minute
10
startzeit_sonnenuntergang_minute
0
startzeit_sonnenuntergang_minute
false
FALSE
Object ID
vars_abends_uhrzeit_start
TRUE
startzeit_sonnenuntergang_stunde
:
startzeit_sonnenuntergang_minute
0
Bewässerung autom. starten
ne
default
vars_morgens_verzoegerung_sonnenaufgang
default
vars_abends_verzoegerung_sonnenuntergang
default
vars_feste_startzeit_uhrzeit_start_stunde
default
vars_feste_startzeit_urhzeit_start_minute
default
vars_sonnenaufgang
timeout
1
sec
Morgens
morgens
morgens
* * * * *
FALSE
FALSE
*
*
*
*
vars_morgens_uhrzeit_start_stunde
*
vars_morgens_urhzeit_start_minute
AND
AND
EQ
val
vars_morgens_aktiv
TRUE
AND
EQ
val
vars_bewaesserung_automatik
TRUE
EQ
val
vars_bewaesserung_aktiv
TRUE
AND
AND
GTE
M
4
LTE
M
10
AND
GTE
val
vars_automatik_top_temp
24
LT
val
vars_automatik_regen
0.5
false
FALSE
Object ID
vars_bewaesserung_aktiv
TRUE
0
Abends
abends
abends
* * * * *
FALSE
FALSE
*
*
*
*
vars_abends_uhrzeit_start_stunde
*
vars_abends_uhrzeit_start_minute
AND
AND
EQ
val
vars_abends_aktiv
TRUE
AND
EQ
val
vars_bewaesserung_automatik
TRUE
EQ
val
vars_bewaesserung_aktiv
TRUE
AND
AND
GTE
M
4
LTE
M
10
AND
GTE
val
vars_automatik_top_temp
24
LT
val
vars_automatik_regen
0.5
false
FALSE
Object ID
vars_bewaesserung_aktiv
TRUE
0
Feste Uhrzeit
LT
val
vars_feste_startzeit_uhrzeit_start_stunde
10
startzeit_fix_stunde
0
val
vars_feste_startzeit_uhrzeit_start_stunde
startzeit_fix_stunde
val
vars_feste_startzeit_uhrzeit_start_stunde
LT
val
vars_feste_startzeit_urhzeit_start_minute
10
startzeit_fix_minute
0
val
vars_feste_startzeit_urhzeit_start_minute
startzeit_fix_minute
val
vars_feste_startzeit_urhzeit_start_minute
false
FALSE
Object ID
vars_feste_startzeit_uhrzeit_start
TRUE
startzeit_fix_stunde
:
startzeit_fix_minute
0
fix
fix
* * * * *
FALSE
FALSE
*
*
*
*
val
vars_feste_startzeit_uhrzeit_start_stunde
*
val
vars_feste_startzeit_urhzeit_start_minute
AND
AND
EQ
val
vars_feste_startzeit_aktiv
TRUE
AND
EQ
val
vars_bewaesserung_automatik
TRUE
EQ
val
vars_bewaesserung_aktiv
FALSE
AND
AND
GTE
M
4
LTE
M
10
AND
GTE
val
vars_automatik_top_temp
24
LT
val
vars_automatik_regen
0.5
false
FALSE
Object ID
vars_bewaesserung_aktiv
TRUE
0
Enduhrzeiten berechnen
ne
default
vars_bewaesserung_aktiv
Gesamt
EQ
val
vars_bewaesserung_aktiv
TRUE
Enduhrzeit berechnen
info_enduhrzeit_raw
Jedes Ventil startet mit einer Verzögerung von 1 Sekunde. Daher wird pro Ventil 1 Sekunde auf die Gesamtlaufzeit drauf gerechnetGesamtlaufzeit = Jetzt + Laufzeit + Umschaltsekunden
ADD
1
sid
1
val
vars_laufzeit_gesamt_in_sek
info_endzeit_stunde
ROUNDDOWN
3.1
DIVIDE
1
info_enduhrzeit_raw
3600
info_endzeit_minute
ROUNDDOWN
3.1
DIVIDE
1
MINUS
1
info_enduhrzeit_raw
1
MULTIPLY
1
info_endzeit_stunde
3600
60
info_endzeit_sekunde
MINUS
1
info_enduhrzeit_raw
1
MULTIPLY
1
info_endzeit_stunde
3600
info_endzeit_sekunde
MINUS
1
info_endzeit_sekunde
1
MULTIPLY
1
info_endzeit_minute
60
Mail Stunden formatieren bei kleiner 10
LT
info_endzeit_stunde
10
info_endzeit_stunde
0
info_endzeit_stunde
Mail Minuten formatieren bei kleiner 10
LT
info_endzeit_minute
10
info_endzeit_minute
0
info_endzeit_minute
Mail Sekunden formatieren bei kleiner 10
LT
info_endzeit_sekunde
10
info_endzeit_sekunde
0
s
false
FALSE
Object ID
vars_lautzeit_ende_uhrzeit
TRUE
info_endzeit_stunde
:
info_endzeit_minute
:
info_endzeit_sekunde
Uhr
0
pro Ventil
EQ
val
vars_bewaesserung_aktiv
TRUE
Ventil 1 End-Uhrzeit
EQ
val
vars_ventil_1
TRUE
ventil_enduhrzeit_raw
ADD
Plus 1 Sekuden fpr das setzen des wertes ON_TIME des HM Aktors
1
ADD
1
sid
1
val
javascript.0.bewaesserung.ventile.ventil_1.ventil_1_dauer
1
ventil_enduhrzeit_std
ROUNDDOWN
3.1
DIVIDE
1
ventil_enduhrzeit_raw
3600
ventil_enduhrzeit_min
ROUNDDOWN
3.1
DIVIDE
1
MINUS
1
ventil_enduhrzeit_raw
1
MULTIPLY
1
ventil_enduhrzeit_std
3600
60
ventil_enduhrzeit_sek
MINUS
1
ventil_enduhrzeit_raw
1
MULTIPLY
1
ventil_enduhrzeit_std
3600
ventil_enduhrzeit_sek
MINUS
1
ventil_enduhrzeit_sek
1
MULTIPLY
1
ventil_enduhrzeit_min
60
LT
ventil_enduhrzeit_std
10
ventil_enduhrzeit_std
0
ventil_enduhrzeit_std
LT
ventil_enduhrzeit_min
10
ventil_enduhrzeit_min
0
ventil_enduhrzeit_min
LT
ventil_enduhrzeit_sek
10
ventil_enduhrzeit_sek
0
ventil_enduhrzeit_sek
false
FALSE
Object ID
vars_ventil_1_ende
TRUE
ventil_enduhrzeit_std
:
ventil_enduhrzeit_min
:
ventil_enduhrzeit_sek
0
false
FALSE
Object ID
vars_ventil_1_ende
TRUE
deaktiviert
0
Ventil 2 End-Uhrzeit
EQ
val
vars_ventil_2
TRUE
Pro aktivem Ventil kommt 1 Sekunde Verzögerung für das setzen von ON_TIME hinzu
EQ
val
vars_ventil_1
FALSE
ventil_enduhrzeit_verzoegerung
1
EQ
val
vars_ventil_1
TRUE
ventil_enduhrzeit_verzoegerung
2
ventil_enduhrzeit_raw
ADD
1
ADD
1
sid
1
val
vars_ventil_1_dauer
1
ADD
1
val
vars_ventil_2_dauer
1
ventil_enduhrzeit_verzoegerung
ventil_enduhrzeit_std
ROUNDDOWN
3.1
DIVIDE
1
ventil_enduhrzeit_raw
3600
ventil_enduhrzeit_min
ROUNDDOWN
3.1
DIVIDE
1
MINUS
1
ventil_enduhrzeit_raw
1
MULTIPLY
1
ventil_enduhrzeit_std
3600
60
ventil_enduhrzeit_sek
MINUS
1
ventil_enduhrzeit_raw
1
MULTIPLY
1
ventil_enduhrzeit_std
3600
ventil_enduhrzeit_sek
MINUS
1
ventil_enduhrzeit_sek
1
MULTIPLY
1
ventil_enduhrzeit_min
60
LT
ventil_enduhrzeit_std
10
ventil_enduhrzeit_std
0
ventil_enduhrzeit_std
LT
ventil_enduhrzeit_min
10
ventil_enduhrzeit_min
0
ventil_enduhrzeit_min
LT
ventil_enduhrzeit_sek
10
ventil_enduhrzeit_sek
0
ventil_enduhrzeit_sek
false
FALSE
Object ID
vars_ventil_2_ende
TRUE
ventil_enduhrzeit_std
:
ventil_enduhrzeit_min
:
ventil_enduhrzeit_sek
0
false
FALSE
Object ID
vars_ventil_2_ende
TRUE
deaktiviert
0
Ventil 3 End-Uhrzeit
EQ
val
vars_ventil_3
TRUE
Pro aktivem Ventil kommt 1 Sekunde Verzögerung für das setzen von ON_TIME hinzu
EQ
val
vars_ventil_3
TRUE
AND
EQ
val
vars_ventil_1
FALSE
EQ
val
vars_ventil_2
FALSE
ventil_enduhrzeit_verzoegerung
1
OR
EQ
val
vars_ventil_1
TRUE
EQ
val
vars_ventil_2
TRUE
ventil_enduhrzeit_verzoegerung
2
AND
EQ
val
vars_ventil_1
TRUE
EQ
val
vars_ventil_2
TRUE
ventil_enduhrzeit_verzoegerung
3
ventil_enduhrzeit_raw
ADD
1
ADD
1
sid
1
val
vars_ventil_1_dauer
1
ADD
1
ADD
1
val
vars_ventil_2_dauer
1
val
vars_ventil_3_dauer
1
ventil_enduhrzeit_verzoegerung
ventil_enduhrzeit_std
ROUNDDOWN
3.1
DIVIDE
1
ventil_enduhrzeit_raw
3600
ventil_enduhrzeit_min
ROUNDDOWN
3.1
DIVIDE
1
MINUS
1
ventil_enduhrzeit_raw
1
MULTIPLY
1
ventil_enduhrzeit_std
3600
60
ventil_enduhrzeit_sek
MINUS
1
MINUS
1
ventil_enduhrzeit_raw
1
MULTIPLY
1
ventil_enduhrzeit_std
3600
1
MULTIPLY
1
ventil_enduhrzeit_min
60
LT
ventil_enduhrzeit_std
10
ventil_enduhrzeit_std
0
ventil_enduhrzeit_std
LT
ventil_enduhrzeit_min
10
ventil_enduhrzeit_min
0
ventil_enduhrzeit_min
LT
ventil_enduhrzeit_sek
10
ventil_enduhrzeit_sek
0
ventil_enduhrzeit_sek
false
FALSE
Object ID
vars_ventil_3_ende
TRUE
ventil_enduhrzeit_std
:
ventil_enduhrzeit_min
:
ventil_enduhrzeit_sek
0
false
FALSE
Object ID
vars_ventil_3_ende
TRUE
deaktiviert
0
Ventil 4 End-Uhrzeit
EQ
val
vars_ventil_4
TRUE
Pro aktivem Ventil kommt 1 Sekunde Verzögerung für das setzen von ON_TIME hinzu
EQ
val
vars_ventil_4
TRUE
AND
AND
EQ
val
vars_ventil_1
FALSE
EQ
val
vars_ventil_2
FALSE
EQ
val
vars_ventil_3
FALSE
ventil_enduhrzeit_verzoegerung
1
OR
OR
EQ
val
vars_ventil_1
TRUE
EQ
val
vars_ventil_2
TRUE
EQ
val
vars_ventil_3
TRUE
ventil_enduhrzeit_verzoegerung
2
AND
AND
EQ
val
vars_ventil_1
TRUE
EQ
val
vars_ventil_2
TRUE
EQ
val
vars_ventil_3
FALSE
ventil_enduhrzeit_verzoegerung
3
AND
AND
EQ
val
vars_ventil_1
FALSE
EQ
val
vars_ventil_2
TRUE
EQ
val
vars_ventil_3
TRUE
ventil_enduhrzeit_verzoegerung
3
AND
AND
EQ
val
vars_ventil_1
TRUE
EQ
val
vars_ventil_2
FALSE
EQ
val
vars_ventil_3
TRUE
ventil_enduhrzeit_verzoegerung
3
AND
AND
EQ
val
vars_ventil_1
TRUE
EQ
val
vars_ventil_2
TRUE
EQ
val
vars_ventil_3
TRUE
ventil_enduhrzeit_verzoegerung
4
ventil_enduhrzeit_raw
ADD
1
ADD
1
sid
1
ADD
1
val
vars_ventil_1_dauer
1
val
vars_ventil_2_dauer
1
ADD
1
ADD
1
val
vars_ventil_3_dauer
1
val
vars_ventil_4_dauer
1
ventil_enduhrzeit_verzoegerung
ventil_enduhrzeit_std
ROUNDDOWN
3.1
DIVIDE
1
ventil_enduhrzeit_raw
3600
ventil_enduhrzeit_min
ROUNDDOWN
3.1
DIVIDE
1
MINUS
1
ventil_enduhrzeit_raw
1
MULTIPLY
1
ventil_enduhrzeit_std
3600
60
ventil_enduhrzeit_sek
MINUS
1
MINUS
1
ventil_enduhrzeit_raw
1
MULTIPLY
1
ventil_enduhrzeit_std
3600
1
MULTIPLY
1
ventil_enduhrzeit_min
60
LT
ventil_enduhrzeit_std
10
ventil_enduhrzeit_std
0
ventil_enduhrzeit_std
LT
ventil_enduhrzeit_min
10
ventil_enduhrzeit_min
0
ventil_enduhrzeit_min
LT
ventil_enduhrzeit_sek
10
ventil_enduhrzeit_sek
0
ventil_enduhrzeit_sek
false
FALSE
Object ID
vars_ventil_4_ende
TRUE
ventil_enduhrzeit_std
:
ventil_enduhrzeit_min
:
ventil_enduhrzeit_sek
0
false
FALSE
Object ID
vars_ventil_4_ende
TRUE
deaktiviert
0
EQ
val
vars_bewaesserung_aktiv
FALSE
false
FALSE
Object ID
vars_ventil_1_ende
TRUE
0
false
FALSE
Object ID
vars_ventil_2_ende
TRUE
0
false
FALSE
Object ID
vars_ventil_3_ende
TRUE
0
false
FALSE
Object ID
vars_ventil_4_ende
TRUE
0
Laufzeiten setzen
ne
default
vars_ventil_1
default
vars_ventil_2
default
vars_ventil_3
default
vars_ventil_4
default
vars_ventil_1_dauer
default
vars_ventil_2_dauer
default
vars_ventil_3_dauer
default
vars_ventil_4_dauer
default
vars_bewaesserung_aktiv
Laufzeit Ventile
EQ
val
vars_bewaesserung_aktiv
FALSE
Ventil 1 - Laufzeit
EQ
val
vars_ventil_1
TRUE
ventil_1_dauer
val
vars_ventil_1_dauer
ventil_1_dauer
0
false
FALSE
Object ID
vars_ventil_1_restzeit
TRUE
DIVIDE
60
ventil_1_dauer
60
:00
0
false
FALSE
Object ID
vars_ventil_1_restzeit_in_sek
TRUE
ventil_1_dauer
0
Ventil 2 - Laufzeit
EQ
val
vars_ventil_2
TRUE
ventil_2_dauer
val
vars_ventil_2_dauer
ventil_2_dauer
0
false
FALSE
Object ID
vars_ventil_2_restzeit
TRUE
DIVIDE
1
ventil_2_dauer
60
:00
0
false
FALSE
Object ID
vars_ventil_2_restzeit_in_sek
TRUE
ventil_2_dauer
0
Ventil 3 - Laufzeit
EQ
val
vars_ventil_3
TRUE
ventil_3_dauer
val
vars_ventil_3_dauer
ventil_3_dauer
0
false
FALSE
Object ID
vars_ventil_3_restzeit
TRUE
DIVIDE
1
ventil_3_dauer
60
:00
0
false
FALSE
Object ID
vars_ventil_3_restzeit_in_sek
TRUE
ventil_3_dauer
0
Ventil 4 - Laufzeit
EQ
val
vars_ventil_4
TRUE
ventil_4_dauer
val
vars_ventil_4_dauer
ventil_4_dauer
0
false
FALSE
Object ID
vars_ventil_4_restzeit
TRUE
DIVIDE
1
ventil_4_dauer
60
:00
0
false
FALSE
Object ID
vars_ventil_4_restzeit_in_sek
TRUE
ventil_4_dauer
0
Gesamtlaufzeit
EQ
val
vars_bewaesserung_aktiv
FALSE
Gesamtlaufzeit in Sek
false
FALSE
Pro aktives Ventil wird auf die Gesamtlaufzeit eine Sekunden drauf gerechnet für das setzen der ON_TIME
Object ID
vars_laufzeit_gesamt_in_sek
TRUE
ADD
1
ADD
1
ADD
1
ventil_1_dauer
1
ventil_2_dauer
1
ADD
1
ventil_3_dauer
1
ventil_4_dauer
1
ADD
1
ADD
1
val
vars_ventil_1
1
val
vars_ventil_2
1
ADD
1
val
vars_ventil_3
1
val
vars_ventil_4
0
false
FALSE
Object ID
vars_restlautzeit_in_sek
TRUE
ADD
1
ADD
1
ADD
1
ventil_1_dauer
1
ventil_2_dauer
1
ADD
1
ventil_3_dauer
1
ventil_4_dauer
1
ADD
1
ADD
1
val
vars_ventil_1
1
val
vars_ventil_2
1
ADD
1
val
vars_ventil_3
1
val
vars_ventil_4
0
Gesamtlaufzeit für die VIS
restlaufzeit_vis_min
ROUNDDOWN
3.1
DIVIDE
1
val
vars_laufzeit_gesamt_in_sek
60
restlaufzeit_vis_sek
MINUS
1
val
vars_laufzeit_gesamt_in_sek
1
MULTIPLY
1
restlaufzeit_vis_min
60
LT
restlaufzeit_vis_sek
10
restlaufzeit_vis_sek
0
restlaufzeit_vis_sek
false
FALSE
Object ID
vars_restlautzeit
TRUE
restlaufzeit_vis_min
:
restlaufzeit_vis_sek
0
Info-Mail / Ansage Bewässerung
ne
default
vars_bewaesserung_aktiv
Start
EQ
val
vars_bewaesserung_aktiv
TRUE
Mail Text und Betreff
waitmail2
1
sec
Aktive Ventile
EQ
val
vars_ventil_1
TRUE
info_endzeit_aktive_ventile
Ventil 1 (
val
vars_ventil_1_name
):
val
vars_ventil_1_ende
Uhr
EQ
val
vars_ventil_2
TRUE
info_endzeit_aktive_ventile
info_endzeit_aktive_ventile
\n
Ventil 2 (
val
vars_ventil_2_name
):
val
vars_ventil_2_ende
Uhr
EQ
val
vars_ventil_3
TRUE
info_endzeit_aktive_ventile
info_endzeit_aktive_ventile
\n
Ventil 3 (
val
vars_ventil_3_name
):
val
vars_ventil_3_ende
Uhr
EQ
val
vars_ventil_4
TRUE
info_endzeit_aktive_ventile
info_endzeit_aktive_ventile
\n
Ventil 4 (
val
vars_ventil_4_name
):
val
vars_ventil_4_ende
Uhr
info_text
Die Gartenbewässerung wurde akiviert.
\n
\n
Bewässerungsdauer:
ROUNDDOWN
3.1
DIVIDE
1
val
vars_laufzeit_gesamt_in_sek
60
Minuten
\n
Start:
hh:mm:ss
Uhr
\n
Ende:
val
vars_lautzeit_ende_uhrzeit
\n
\n
Aktive Ventile:
\n
info_endzeit_aktive_ventile
info_betreff
+++
hh:mm
Uhr - Gartenbewässerung aktiviert +++
EQ
val
javascript.0.Anwesenheit.Daniel
FALSE
FALSE
val
javascript.0.mailadressen.mailadresse_daniel
info_text
info_betreff
.0
0
text
info_text
info_betreff
Sprachausgabe
EQ
val
javascript.0.Anwesenheit.Anwesenheit
TRUE
NEQ
info_endzeit_minute
00
javascript.0.echo.sprachausgabe_alle_geraete
FALSE
Gartenbewässerung gestartet. ende um
info_endzeit_stunde
Uhr
info_endzeit_minute
und
info_endzeit_stunde
Sekunden
javascript.0.echo.sprachausgabe_alle_geraete
FALSE
Gartenbewässerung gestartet. ende um
info_endzeit_stunde
Uhr
und
info_endzeit_stunde
Sekunden
Stop
EQ
val
vars_bewaesserung_aktiv
FALSE
EQ
val
javascript.0.Anwesenheit.Daniel
FALSE
FALSE
val
javascript.0.mailadressen.mailadresse_daniel
Gartenbewässerung beendet
+++
hh:mm
Uhr - Gartenbewässerung beendet +++
.0
0
+++
hh:mm
Uhr - Gartenbewässerung beendet +++
EQ
val
javascript.0.Anwesenheit.Anwesenheit
TRUE
javascript.0.echo.sprachausgabe_alle_geraete
FALSE
Gartenbewässerung beendet.
Log Einträge
ne
default
vars_bewaesserung_aktiv
default
vars_ventil_1_aktor
default
vars_ventil_2_aktor
default
vars_ventil_3_aktor
default
vars_ventil_4_aktor
+++ Bewässerung gestartet +++
Log Eintrag wird nur ausgegeben, wenn alle Ventile aus sind, und die Variable sich vor 1 Sek geändert hat.
AND
AND
EQ
val
vars_bewaesserung_aktiv
TRUE
AND
EQ
DD.MM.YYYY
DD.MM.YYYY
lc
vars_bewaesserung_aktiv
LTE
MINUS
1
sid
1
sid
lc
vars_bewaesserung_aktiv
1
AND
AND
EQ
lc
vars_ventil_1_aktor
FALSE
EQ
lc
vars_ventil_2_aktor
FALSE
AND
EQ
lc
vars_ventil_3_aktor
FALSE
EQ
lc
vars_ventil_4_aktor
FALSE
log
+++ Bewässerung gestartet +++
EQ
val
vars_bewaesserung_aktiv
FALSE
log
+++ Bewässerung beendet +++
Ventil 1
AND
EQ
DD.MM.YYYY
DD.MM.YYYY
lc
vars_ventil_1_aktor
LTE
MINUS
1
sid
1
sid
lc
vars_ventil_1_aktor
5
EQ
val
vars_ventil_1_aktor
TRUE
log
+++ Bewässerung: Ventil 1 -
val
vars_ventil_1_name
aktiv +++
Ventil 2
AND
EQ
DD.MM.YYYY
DD.MM.YYYY
lc
vars_ventil_2_aktor
LTE
MINUS
1
sid
1
sid
lc
vars_ventil_2_aktor
5
EQ
val
vars_ventil_2_aktor
TRUE
log
+++ Bewässerung: Ventil 2 -
val
vars_ventil_2_name
aktiv +++
Ventil 3
AND
EQ
DD.MM.YYYY
DD.MM.YYYY
lc
vars_ventil_3_aktor
LTE
MINUS
1
sid
1
sid
lc
vars_ventil_3_aktor
5
EQ
val
vars_ventil_3_aktor
TRUE
log
+++ Bewässerung: Ventil 3 -
val
vars_ventil_3_name
aktiv +++
Ventil 4
AND
EQ
DD.MM.YYYY
DD.MM.YYYY
lc
vars_ventil_4_aktor
LTE
MINUS
1
sid
1
sid
lc
vars_ventil_4_aktor
5
EQ
val
vars_ventil_4_aktor
TRUE
log
+++ Bewässerung: Ventil 4 -
val
vars_ventil_4_name
aktiv +++
Aktive Ventile zählen
ne
default
vars_restlautzeit_in_sek
default
vars_bewaesserung_aktiv
false
FALSE
Object ID
vars_anzahl_aktive_ventile
TRUE
ADD
1
ADD
1
val
vars_ventil_1_aktor
1
val
vars_ventil_2_aktor
1
ADD
1
val
vars_ventil_3_aktor
1
val
vars_ventil_4_aktor
0
Ventil Steuerung
ne
default
vars_bewaesserung_aktiv
default
vars_restlautzeit_in_sek
EQ
val
vars_bewaesserung_aktiv
TRUE
Ventil 1
AND
EQ
val
vars_ventil_1
TRUE
NEQ
val
vars_ventil_1_restzeit_in_sek
0
AND
EQ
val
vars_ventil_1_aktor
FALSE
LT
val
vars_anzahl_aktive_ventile
3
ON_TIME für Homematic
EQ
vars_aktor_typ
hm
false
FALSE
Object ID
vars_ventil_1_aktor_ontime
TRUE
val
vars_ventil_1_dauer
0
PulseTime für Sonoff
EQ
vars_aktor_typ
sonoff
FALSE
text
http://
vars_sonoff_ip
/cm?cmnd=PulseTime1%20
ADD
100
1
vars_ventil_1_dauer
false
FALSE
Object ID
vars_ventil_1_aktor
TRUE
1000
false
FALSE
Object ID
vars_aktives_ventil
TRUE
ventil_1
1000
Ventil 2
AND
OR
EQ
val
vars_ventil_1
FALSE
EQ
val
vars_ventil_1_restzeit_in_sek
0
AND
EQ
val
vars_ventil_2
TRUE
NEQ
val
vars_ventil_2_restzeit_in_sek
0
AND
EQ
val
vars_ventil_2_aktor
FALSE
LT
val
vars_anzahl_aktive_ventile
3
ON_TIME für Homematic
EQ
vars_aktor_typ
hm
false
FALSE
Object ID
vars_ventil_2_aktor_ontime
TRUE
val
vars_ventil_2_dauer
0
PulseTime für Sonoff
EQ
vars_aktor_typ
sonoff
FALSE
text
http://
vars_sonoff_ip
/cm?cmnd=PulseTime2%20
ADD
100
1
vars_ventil_2_dauer
false
FALSE
Object ID
vars_ventil_2_aktor
TRUE
1000
false
FALSE
Object ID
vars_aktives_ventil
TRUE
ventil_2
1000
Ventil 3
AND
OR
EQ
val
vars_ventil_1
FALSE
EQ
val
vars_ventil_1_restzeit_in_sek
0
AND
OR
EQ
val
vars_ventil_2
FALSE
EQ
val
vars_ventil_2_restzeit_in_sek
0
AND
EQ
val
vars_ventil_3
TRUE
NEQ
val
vars_ventil_3_restzeit_in_sek
0
AND
EQ
val
vars_ventil_3_aktor
FALSE
LT
val
vars_anzahl_aktive_ventile
3
ON_TIME für Homematic
EQ
vars_aktor_typ
hm
false
FALSE
Object ID
vars_ventil_3_aktor_ontime
TRUE
val
vars_ventil_3_dauer
0
PulseTime für Sonoff
EQ
vars_aktor_typ
sonoff
FALSE
text
http://
vars_sonoff_ip
/cm?cmnd=PulseTime3%20
ADD
100
1
vars_ventil_3_dauer
false
FALSE
Object ID
vars_ventil_3_aktor
TRUE
1000
false
FALSE
Object ID
vars_aktives_ventil
TRUE
ventil_3
1000
Ventil 4
AND
AND
OR
EQ
val
vars_ventil_1
FALSE
EQ
val
vars_ventil_1_restzeit_in_sek
0
OR
EQ
val
vars_ventil_2
FALSE
EQ
val
vars_ventil_2_restzeit_in_sek
0
AND
OR
EQ
val
vars_ventil_3
FALSE
EQ
val
vars_ventil_3_restzeit_in_sek
0
AND
EQ
val
vars_ventil_4
TRUE
NEQ
val
vars_ventil_4_restzeit_in_sek
0
AND
EQ
val
vars_ventil_4_aktor
FALSE
LT
val
vars_anzahl_aktive_ventile
3
ON_TIME für Homematic
EQ
vars_aktor_typ
hm
false
FALSE
Object ID
vars_ventil_3_aktor_ontime
TRUE
val
vars_ventil_4_dauer
0
PulseTime für Sonoff
EQ
vars_aktor_typ
sonoff
FALSE
text
http://
vars_sonoff_ip
/cm?cmnd=PulseTime4%20
ADD
100
1
vars_ventil_4_dauer
false
FALSE
Object ID
vars_ventil_4_aktor_ontime
TRUE
val
vars_ventil_4_dauer
0
false
FALSE
Object ID
vars_ventil_4_aktor
TRUE
1000
false
FALSE
Object ID
vars_aktives_ventil
TRUE
ventil_4
1000
EQ
val
vars_bewaesserung_aktiv
FALSE
false
FALSE
Object ID
vars_aktives_ventil
TRUE
aus
0
Restzeit gesamt berechnen
ne
default
vars_bewaesserung_aktiv
EQ
val
vars_bewaesserung_aktiv
TRUE
restzeit
1000
ms
false
FALSE
Object ID
vars_restlautzeit_in_sek
TRUE
MINUS
1
val
vars_restlautzeit_in_sek
1
0
restzeit_gesamt_min
ROUNDDOWN
3.1
DIVIDE
0
val
vars_restlautzeit_in_sek
60
restzeit_gesamt_sek
MINUS
1
val
vars_restlautzeit_in_sek
1
MULTIPLY
1
restzeit_gesamt_min
60
0 hinzufügen wenn Minuten < 10
LT
restzeit_gesamt_min
10
restzeit_gesamt_min
0
restzeit_gesamt_min
0 hinzufügen wenn Sekunden < 10
LT
restzeit_gesamt_sek
10
restzeit_gesamt_sek
0
restzeit_gesamt_sek
javascript.0.bewaesserung.restlautzeit
FALSE
restzeit_gesamt_min
:
restzeit_gesamt_sek
EQ
val
vars_restlautzeit_in_sek
0
false
FALSE
Object ID
vars_bewaesserung_aktiv
FALSE
0
restzeit
EQ
val
vars_bewaesserung_aktiv
FALSE
restzeit
Restzeit Ventile berechnen
ne
default
vars_bewaesserung_aktiv
EQ
val
vars_bewaesserung_aktiv
TRUE
Ventil 1
EQ
val
vars_ventil_1
TRUE
false
FALSE
Umschaltverzögerung für ON_TIME
Object ID
vars_ventil_1_restzeit_in_sek
TRUE
ADD
1
val
vars_ventil_1_restzeit_in_sek
1
0
ventil_1_rest
1000
ms
AND
EQ
val
vars_ventil_1
TRUE
NEQ
val
vars_ventil_1_restzeit_in_sek
0
false
FALSE
Object ID
vars_ventil_1_restzeit_in_sek
TRUE
MINUS
1
val
vars_ventil_1_restzeit_in_sek
1
0
VIS Anzeige setzen
restzeit_ventil_min
ROUNDDOWN
3.1
DIVIDE
1
val
vars_ventil_1_restzeit_in_sek
60
restzeit_ventil_sek
MINUS
1
val
vars_ventil_1_restzeit_in_sek
1
MULTIPLY
1
restzeit_ventil_min
60
LT
restzeit_ventil_sek
10
false
FALSE
Object ID
vars_ventil_1_restzeit
TRUE
restzeit_ventil_min
:0
restzeit_ventil_sek
0
false
FALSE
Object ID
vars_ventil_1_restzeit
TRUE
restzeit_ventil_min
:
restzeit_ventil_sek
0
EQ
val
vars_ventil_1_restzeit_in_sek
0
ventil_1_rest
Ventil 2
EQ
val
vars_ventil_2
TRUE
false
FALSE
Umschaltverzögerung für ON_TIME
Object ID
vars_ventil_2_restzeit_in_sek
TRUE
ADD
1
val
vars_ventil_2_restzeit_in_sek
1
0
ventil_2_rest
1000
ms
AND
OR
EQ
val
vars_ventil_1
FALSE
EQ
val
vars_ventil_1_restzeit_in_sek
0
AND
EQ
val
vars_ventil_2
TRUE
NEQ
val
vars_ventil_2_restzeit_in_sek
0
false
FALSE
Object ID
vars_ventil_2_restzeit_in_sek
TRUE
MINUS
1
val
vars_ventil_2_restzeit_in_sek
1
0
VIS Anzeige setzen
restzeit_ventil_min
ROUNDDOWN
3.1
DIVIDE
1
val
vars_ventil_2_restzeit_in_sek
60
restzeit_ventil_sek
MINUS
1
val
vars_ventil_2_restzeit_in_sek
1
MULTIPLY
1
restzeit_ventil_min
60
LT
restzeit_ventil_sek
10
false
FALSE
Object ID
vars_ventil_2_restzeit
TRUE
restzeit_ventil_min
:0
restzeit_ventil_sek
0
false
FALSE
Object ID
vars_ventil_2_restzeit
TRUE
restzeit_ventil_min
:
restzeit_ventil_sek
0
EQ
val
vars_ventil_2_restzeit_in_sek
0
ventil_2_rest
Ventil 3
EQ
val
vars_ventil_3
TRUE
false
FALSE
Umschaltverzögerung für ON_TIME
Object ID
vars_ventil_3_restzeit_in_sek
TRUE
ADD
1
val
vars_ventil_3_restzeit_in_sek
1
0
ventil_3_rest
1000
ms
AND
AND
OR
EQ
val
vars_ventil_1
FALSE
EQ
val
vars_ventil_1_restzeit_in_sek
0
OR
EQ
val
vars_ventil_2
FALSE
EQ
val
vars_ventil_2_restzeit_in_sek
0
AND
EQ
val
vars_ventil_3
TRUE
NEQ
val
vars_ventil_3_restzeit_in_sek
0
false
FALSE
Object ID
vars_ventil_3_restzeit_in_sek
TRUE
MINUS
1
val
vars_ventil_3_restzeit_in_sek
1
0
VIS Anzeige setzen
restzeit_ventil_min
ROUNDDOWN
3.1
DIVIDE
1
val
vars_ventil_3_restzeit_in_sek
60
restzeit_ventil_sek
MINUS
1
val
vars_ventil_3_restzeit_in_sek
1
MULTIPLY
1
restzeit_ventil_min
60
LT
restzeit_ventil_sek
10
false
FALSE
Object ID
vars_ventil_3_restzeit
TRUE
restzeit_ventil_min
:0
restzeit_ventil_sek
0
false
FALSE
Object ID
vars_ventil_3_restzeit
TRUE
restzeit_ventil_min
:
restzeit_ventil_sek
0
EQ
val
vars_ventil_3_restzeit_in_sek
0
ventil_3_rest
Ventil 4
EQ
val
vars_ventil_4
TRUE
false
FALSE
Umschaltverzögerung für ON_TIME
Object ID
vars_ventil_4_restzeit_in_sek
TRUE
ADD
1
val
vars_ventil_4_restzeit_in_sek
1
0
ventil_4_rest
1000
ms
AND
AND
AND
OR
EQ
val
vars_ventil_1
FALSE
EQ
val
vars_ventil_1_restzeit_in_sek
0
OR
EQ
val
vars_ventil_2
FALSE
EQ
val
vars_ventil_2_restzeit_in_sek
0
OR
EQ
val
vars_ventil_3
FALSE
EQ
val
vars_ventil_3_restzeit_in_sek
0
AND
EQ
val
vars_ventil_4
TRUE
NEQ
val
vars_ventil_4_restzeit_in_sek
0
false
FALSE
Object ID
vars_ventil_4_restzeit_in_sek
TRUE
MINUS
1
val
vars_ventil_4_restzeit_in_sek
1
0
VIS Anzeige setzen
restzeit_ventil_min
ROUNDDOWN
3.1
DIVIDE
1
val
vars_ventil_4_restzeit_in_sek
60
restzeit_ventil_sek
MINUS
1
val
vars_ventil_4_restzeit_in_sek
1
MULTIPLY
1
restzeit_ventil_min
60
LT
restzeit_ventil_sek
10
false
FALSE
Object ID
vars_ventil_4_restzeit
TRUE
restzeit_ventil_min
:0
restzeit_ventil_sek
0
false
FALSE
Object ID
vars_ventil_4_restzeit
TRUE
restzeit_ventil_min
:
restzeit_ventil_sek
0
EQ
val
vars_ventil_4_restzeit_in_sek
0
ventil_4_rest
ventil_1_rest
ventil_2_rest
ventil_3_rest
ventil_4_rest
Manuelles abschalten -> alle Ventile abschalten
ne
default
vars_bewaesserung_aktiv
EQ
val
vars_bewaesserung_aktiv
FALSE
Ventil 1
EQ
val
vars_ventil_1_aktor
TRUE
false
FALSE
Object ID
vars_ventil_1_aktor
FALSE
0
Ventil 2
EQ
val
vars_ventil_2_aktor
TRUE
false
FALSE
Object ID
vars_ventil_2_aktor
FALSE
0
Ventil 3
EQ
val
vars_ventil_3_aktor
TRUE
false
FALSE
Object ID
vars_ventil_3_aktor
FALSE
0
Ventil 4
EQ
val
vars_ventil_4_aktor
TRUE
false
FALSE
Object ID
vars_ventil_4_aktor
FALSE
0