vars_pfad vars_aktor_typ vars_cron_restart vars_aktor_name vars_pumpe vars_sonnenaufgang vars_notify_mail vars_sonnenuntergang vars_morgens_verzoegerung_sonnenaufgang vars_abends_verzoegerung_sonnenuntergang vars_notify_alexa startzeit_sonnenaufgang vars_notify_alexa_device startzeit_sonnenaufgang_stunde vars_bewaesserung_aktiv vars_notify_pushover startzeit_sonnenaufgang_minute vars_notify_log vars_feste_startzeit_1_uhrzeit_start_stunde vars_feste_startzeit_1_uhrzeit_start_minute vars_feste_startzeit_2_uhrzeit_start_stunde vars_feste_startzeit_2_uhrzeit_start_minute vars_feste_startzeit_3_uhrzeit_start_stunde vars_feste_startzeit_3_uhrzeit_start_minute timeout vars_wetter_max_temp vars_wetter_regen vars_morgens_uhrzeit_start_stunde vars_bewaesserung_pause vars_morgens_urhzeit_start_minute morgens vars_ventil_1_restzeit_in_sek vars_ventil_2_restzeit_in_sek vars_ventil_3_restzeit_in_sek vars_ventil_4_restzeit_in_sek 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 info_enduhrzeit_raw vars_lautzeit_ende_uhrzeit vars_bewaesserung_automatik abends info_endzeit_stunde vars_morgens_uhrzeit_start info_endzeit_minute vars_ventil_1_ende startzeit_sonnenuntergang vars_restlautzeit_in_sek info_endzeit_sekunde ventil_enduhrzeit_raw vars_ventil_2_ende ventil_1_dauer vars_anzahl_aktive_ventile vars_laufzeit_gesamt_in_sek startzeit_sonnenuntergang_stunde vars_morgens_aktiv startzeit_fix_1_stunde ventil_enduhrzeit_std vars_ventil_3_ende vars_ventil_1_restzeit waitmail2 timeout3 startzeit_sonnenuntergang_minute vars_schwellwert_temperatur vars_schwellwert_regen vars_abends_uhrzeit_start_stunde vars_abends_uhrzeit_start_minute startzeit_fix_1_minunte ventil_enduhrzeit_min vars_ventil_4_ende vars_ventil_1_aktor vars_ventil_2_aktor vars_ventil_3_aktor vars_ventil_4_aktor vars_restlautzeit vars_feste_startzeit_1_uhrzeit_start ventil_enduhrzeit_sek restlaufzeit_vis_min vars_abends_aktiv fix_1 ventil_enduhrzeit_verzoegerung ventil_2_dauer vars_ventil_1_parallel restlaufzeit_vis_sek info_endzeit_aktive_ventile vars_gesamtfortschritt vars_ventil_2_restzeit ventil_3_dauer ventil_4_dauer startzeit_fix_2_stunde vars_ventil_1_name info_text startzeit_fix_2_minunte vars_ventil_2_name info_betreff vars_ventil_1_status vars_feste_startzeit_2_uhrzeit_start vars_ventil_3_restzeit vars_ventil_3_name restzeit vars_abends_uhrzeit_start vars_feste_startzeit_1_aktiv fix_2 vars_ventil_4_name vars_ventil_2_status vars_sonoff_ip vars_ventil_1_aktor_ontime vars_ventil_3_status restzeit_gesamt_min startzeit_fix_3_stunde vars_ventil_4_restzeit restzeit_gesamt_sek startzeit_fix_3_minute vars_ventil_4_status ventil_1_rest vars_feste_startzeit_3_uhrzeit_start vars_ventil_2_aktor_ontime vars_feste_startzeit_2_aktiv fix_3 ventil_2_rest fortschritt_zw vars_ventil_3_aktor_ontime restzeit_ventil_min ventil_3_rest vars_ventil_1_fortschritt vars_ventil_4_aktor_ontime restzeit_ventil_sek ventil_4_rest vars_ventil_2_fortschritt vars_feste_startzeit_3_aktiv vars_ventil_3_fortschritt vars_ventil_4_fortschritt Datenpunkte_erstellen LyoqDQogKiBDcmVhdGUgc3RhdGVzIHVuZGVyIDBfdXNlcmRhdGEuMCBvciBqYXZhc2NyaXB0LngNCiAqIEN1cnJlbnQgVmVyc2lvbjogICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzDQogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8NCiAqIEF1dG9yOiAgICAgICAgICAgICAgIE1pYyAoaW9Ccm9rZXIpIHwgTWljLU0gKGdpdGh1YikNCiAqIFZlcnNpb246ICAgICAgICAgICAgIDEuMSAoMjYgSmFudWFyeSAyMDIwKQ0KICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogUExFQVNFIE5PVEU6IFBlciBodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc0LCB0aGUgdXNlZCBmdW5jdGlvbiBzZXRPYmplY3QoKSANCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogQHBhcmFtIHtzdHJpbmd9IHdoZXJlICAgICAgICAgIFdoZXJlIHRvIGNyZWF0ZSB0aGUgc3RhdGU6ICcwX3VzZXJkYXRhLjAnIG9yICdqYXZhc2NyaXB0LngnLg0KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4NCiAqIEBwYXJhbSB7YXJyYXl9IHN0YXRlc1RvQ3JlYXRlICBTdGF0ZShzKSB0byBjcmVhdGUuIHNpbmdsZSBhcnJheSBvciBhcnJheSBvZiBhcnJheXMNCiAqIEBwYXJhbSB7b2JqZWN0fSBbY2FsbGJhY2tdICAgICBPcHRpb25hbDogYSBjYWxsYmFjayBmdW5jdGlvbiAtLSBUaGlzIHByb3ZpZGVkIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHN0YXRlcyBhcmUgY3JlYXRlZC4NCiAqLw0KDQovKioNCiogSGllciBiaXR0ZSBkZW4gU3BlaWNoZXJvcnQsZGVuIFBmYWQgZWludHJhZ2VuIHVuZCBkZW4gTmFtZW4gZGVyIEtyZWlzZSBlaW5nZWJlbg0KKiBCZWlzcGllbGU6IA0KDQoJc3BlaWNoZXJvcnQgPSAnMF91c2VyZGF0YS4wLicNCglzcGVpY2hlcm9ydCA9ICdqYXZhc2NyaXB0LjAnDQoJDQoJcGZhZCA9ICdiZXdhc3NlcnVuZy4nDQoJcGZhZCA9ICdHYXJkZW5hLkJld2Flc3NlcnVuZy4nDQogICAgDQogICAga3JlaXMxID0gJ0hlY2tlJw0KICAgIGtyZWlzMiA9ICdSYXNlbicNCg0KKi8NCnNwZWljaGVyb3J0ID0gJ2phdmFzY3JpcHQuMCcNCnBmYWQgPSAnYmV3YWVzc2VydW5nLicNCmtyZWlzMSA9ICdIZWNrZScNCmtyZWlzMiA9ICdSYXNlbicNCmtyZWlzMyA9ICdCZWV0Jw0Ka3JlaXM0ID0gJ2tsLiBSYXNlbicNCg0KDQpmdW5jdGlvbiBjcmVhdGVVc2VyU3RhdGVzKHdoZXJlLCBmb3JjZSwgc3RhdGVzVG9DcmVhdGUsIGNhbGxiYWNrID0gdW5kZWZpbmVkKSB7DQogICAgDQogICAgY29uc3QgV0FSTiA9IGZhbHNlOyAvLyBPbmx5IGZvciAwX3VzZXJkYXRhLjA6IFRocm93cyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgZm9yY2U9ZmFsc2UuIERlZmF1bHQgaXMgZmFsc2UsIHNvIG5vIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBleGlzdHMuDQogICAgY29uc3QgTE9HX0RFQlVHID0gZmFsc2U7IC8vIFRvIGRlYnVnIHRoaXMgZnVuY3Rpb24sIHNldCB0byB0cnVlDQogICAgLy8gUGVyIGlzc3VlICM0NzQgKGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzQpLCB0aGUgdXNlZCBmdW5jdGlvbiBzZXRPYmplY3QoKSBleGVjdXRlcyB0aGUgY2FsbGJhY2sgDQogICAgLy8gYmVmb3JlIHRoZSBzdGF0ZSBpcyBhY3R1YWwgY3JlYXRlZC4gVGhlcmVmb3JlLCB3ZSB1c2UgYSBzZXRUaW1lb3V0IGFuZCBjb3VudGVyIGFzIGEgd29ya2Fyb3VuZC4NCiAgICBjb25zdCBERUxBWSA9IDUwOyAvLyBEZWxheSBpbiBtaWxsaXNlY29uZHMgKG1zKS4gSW5jcmVhc2UgdGhpcyB0byAxMDAsIGlmIGl0IGlzIG5vdCB3b3JraW5nLg0KDQogICAgLy8gVmFsaWRhdGUgIndoZXJlIg0KICAgIGlmICh3aGVyZS5lbmRzV2l0aCgnLicpKSB3aGVyZSA9IHdoZXJlLnNsaWNlKDAsIC0xKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRvdA0KICAgIGlmICggKHdoZXJlLm1hdGNoKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSkpJHwwX3VzZXJkYXRhXC4wJCkvKSA9PSBudWxsKSApIHsNCiAgICAgICAgbG9nKCdUaGlzIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IHRvIGNyZWF0ZSBzdGF0ZXMgdW5kZXIgWycgKyB3aGVyZSArICddJywgJ2Vycm9yJyk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAvLyBQcmVwYXJlICJzdGF0ZXNUb0NyZWF0ZSIgc2luY2Ugd2UgYWxzbyBhbGxvdyBhIHNpbmdsZSBzdGF0ZSB0byBjcmVhdGUNCiAgICBpZighQXJyYXkuaXNBcnJheShzdGF0ZXNUb0NyZWF0ZVswXSkpIHN0YXRlc1RvQ3JlYXRlID0gW3N0YXRlc1RvQ3JlYXRlXTsgLy8gd3JhcCBpbnRvIGFycmF5LCBpZiBqdXN0IG9uZSBhcnJheSBhbmQgbm90IGluc2lkZSBhbiBhcnJheQ0KDQogICAgLy8gQWRkICJ3aGVyZSIgdG8gU1RBVEVTX1RPX0NSRUFURQ0KICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGVzVG9DcmVhdGUubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgbGV0IGxwUGF0aCA9IHN0YXRlc1RvQ3JlYXRlW2ldWzBdLnJlcGxhY2UoL1wuKlwuL2csICcuJyk7IC8vIHJlcGxhY2UgYWxsIG11bHRpcGxlIGRvdHMgbGlrZSAnLi4nLCAnLi4uJyB3aXRoIGEgc2luZ2xlICcuJw0KICAgICAgICBscFBhdGggPSBscFBhdGgucmVwbGFjZSgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pXC4pfDBfdXNlcmRhdGFcLjBcLikvLCcnKSAvLyByZW1vdmUgYW55IGphdmFzY3JpcHQueC4gLyAwX3VzZXJkYXRhLjAuIGZyb20gYmVnaW5uaW5nDQogICAgICAgIGxwUGF0aCA9IHdoZXJlICsgJy4nICsgbHBQYXRoOyAvLyBhZGQgd2hlcmUgdG8gYmVnaW5uaW5nIG9mIHN0cmluZw0KICAgICAgICBzdGF0ZXNUb0NyZWF0ZVtpXVswXSA9IGxwUGF0aDsNCiAgICB9DQoNCiAgICBpZiAod2hlcmUgIT0gJzBfdXNlcmRhdGEuMCcpIHsNCiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciBqYXZhc2NyaXB0LngNCiAgICAgICAgbGV0IG51bVN0YXRlcyA9IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsNCiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsNCiAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJyk7DQogICAgICAgICAgICBsZXQgbG9vcEluaXQgPSAobG9vcFBhcmFtWzFdWydkZWYnXSA9PSB1bmRlZmluZWQpID8gbnVsbCA6IGxvb3BQYXJhbVsxXVsnZGVmJ107IC8vIG1pbWljIHNhbWUgYmVoYXZpb3IgYXMgY3JlYXRlU3RhdGUgaWYgbm8gaW5pdCB2YWx1ZSBpcyBwcm92aWRlZA0KICAgICAgICAgICAgY3JlYXRlU3RhdGUobG9vcFBhcmFtWzBdLCBsb29wSW5pdCwgZm9yY2UsIGxvb3BQYXJhbVsxXSwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07DQogICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIDBfdXNlcmRhdGEuMA0KICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOw0KICAgICAgICBsZXQgY291bnRlciA9IC0xOw0KICAgICAgICBzdGF0ZXNUb0NyZWF0ZS5mb3JFYWNoKGZ1bmN0aW9uKGxvb3BQYXJhbSkgew0KICAgICAgICAgICAgY291bnRlciArPSAxOw0KICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nICgnW0RlYnVnXSBDdXJyZW50bHkgcHJvY2Vzc2luZyBmb2xsb3dpbmcgc3RhdGU6IFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsNCiAgICAgICAgICAgIGlmKCAoJChsb29wUGFyYW1bMF0pLmxlbmd0aCA+IDApICYmIChleGlzdHNTdGF0ZShsb29wUGFyYW1bMF0pKSApIHsgLy8gV29ya2Fyb3VuZCBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3OA0KICAgICAgICAgICAgICAgIC8vIFN0YXRlIGlzIGV4aXN0aW5nLg0KICAgICAgICAgICAgICAgIGlmIChXQVJOICYmICFmb3JjZSkgbG9nKCdTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcgYW5kIHdpbGwgbm8gbG9uZ2VyIGJlIGNyZWF0ZWQuJywgJ3dhcm4nKTsNCiAgICAgICAgICAgICAgICBpZiAoIVdBUk4gJiYgTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gU3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXSBpcyBhbHJlYWR5IGV4aXN0aW5nLiBPcHRpb24gZm9yY2UgKD1vdmVyd3JpdGUpIGlzIHNldCB0byBbJyArIGZvcmNlICsgJ10uJyk7DQogICAgICAgICAgICAgICAgaWYoIWZvcmNlKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIFN0YXRlIGV4aXN0cyBhbmQgc2hhbGwgbm90IGJlIG92ZXJ3cml0dGVuIHNpbmNlIGZvcmNlPWZhbHNlDQogICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBkbyBub3QgcHJvY2VlZC4NCiAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07DQogICAgICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQhJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgd2hpY2ggd2UgYXJlIGdvaW5nIHRvIGV4ZWN1dGUgbm93LicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBvdXQgYW5kIGNvbnRpbnVlIHdpdGggbmV4dCBlbGVtZW50IGluIGxvb3AuDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4NDUyOTIwL2NvbnRpbnVlLWluLWN1cnNvci1mb3JlYWNoDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IC8vIGlmKCFmb3JjZSkNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gU3RhdGUgaXMgbm90IGV4aXN0aW5nIG9yIGZvcmNlID0gdHJ1ZSwgc28gd2UgYXJlIGNvbnRpbnVpbmcgdG8gY3JlYXRlIHRoZSBzdGF0ZSB0aHJvdWdoIHNldE9iamVjdCgpLg0KICAgICAgICAgICAgbGV0IG9iaiA9IHt9Ow0KICAgICAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOw0KICAgICAgICAgICAgb2JqLm5hdGl2ZSA9IHt9Ow0KICAgICAgICAgICAgb2JqLmNvbW1vbiA9IGxvb3BQYXJhbVsxXTsNCiAgICAgICAgICAgIHNldE9iamVjdChsb29wUGFyYW1bMF0sIG9iaiwgZnVuY3Rpb24gKGVycikgew0KICAgICAgICAgICAgICAgIGlmIChlcnIpIHsNCiAgICAgICAgICAgICAgICAgICAgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0IGZvciBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddOiAnICsgZXJyKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gTm93IHdlIGFyZSBjcmVhdGluZyBuZXcgc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXScpDQogICAgICAgICAgICAgICAgICAgIGxldCBpbml0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLmRlZiA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJyc7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbG9vcFBhcmFtWzFdLmRlZjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUobG9vcFBhcmFtWzBdLCBpbml0LCB0cnVlLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gc2V0U3RhdGUgZHVyY2hnZWbDvGhydDogJyArIGxvb3BQYXJhbVswXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9LCBERUxBWSArICgyMCAqIGNvdW50ZXIpICk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgIH0NCn0NCg0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KDQogICAvL0Jld8Okc3NlcnVuZw0KICAgW3BmYWQrJ2Jld2Flc3NlcnVuZ19ha3RpdicsIHsnbmFtZSc6J2Jld2Flc3NlcnVuZ19ha3RpdicsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sDQogICBbcGZhZCsnYmV3YWVzc2VydW5nX2F1dG9tYXRpaycsIHsnbmFtZSc6J2Jld2Flc3NlcnVuZ19hdXRvbWF0aWsnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLA0KICAgW3BmYWQrJ2Jld2Flc3NlcnVuZ19wYXVzZScsIHsnbmFtZSc6J2Jld2Flc3NlcnVuZ19wYXVzZScsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sDQoNCiAgIC8vVGltZXINCiAgIFtwZmFkKydsYXV0emVpdF9nZXNhbXRfaW5fc2VrJywgeyduYW1lJzonbGF1dHplaXRfZ2VzYW10X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLA0KICAgW3BmYWQrJ2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsIHsnbmFtZSc6J2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6ICcwMDowMCcsJ3VuaXQnOiAnVWhyJ31dLA0KICAgW3BmYWQrJ3Jlc3RsYXV0emVpdCcsIHsnbmFtZSc6J3Jlc3RsYXV0emVpdCcsJ3R5cGUnOiAnc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOjB9XSwNCiAgIFtwZmFkKydyZXN0bGF1dHplaXRfaW5fc2VrJywgeyduYW1lJzoncmVzdGxhdXR6ZWl0X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLA0KICAgW3BmYWQrJ2dlc2FtdGZvcnRzY2hyaXR0JywgeyduYW1lJzonZ2VzYW10Zm9ydHNjaHJpdHQnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOiclJywnbWluJzowLCdtYXgnOjEwMH1dLA0KICAgICAgDQogICAvL1NjaHdlbGx3ZXJ0ZQ0KICAgW3BmYWQrJ3NjaHdlbGx3ZXJ0ZS5zY2h3ZWxsd2VydF9yZWdlbicsIHsnbmFtZSc6J3NjaHdlbGx3ZXJ0X3JlZ2VuJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonbW0nfV0sDQogICBbcGZhZCsnc2Nod2VsbHdlcnRlLnNjaHdlbGx3ZXJ0X3RlbXBlcmF0dXInLCB7J25hbWUnOidzY2h3ZWxsd2VydF90ZW1wZXJhdHVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonwrBDJ31dLA0KICAgDQogICAvL1ZlbnRpbGUNCiAgIFtwZmFkKyd2ZW50aWxlLmFuemFobF9ha3RpdmVfdmVudGlsZScsIHsnbmFtZSc6J2FuemFobF9ha3RpdmVfdmVudGlsZScsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwnbWluJzowLCAnbWF4Jzo0fSBdLA0KDQogICAvL1ZlbnRpbCAxDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMScsIHsnbmFtZSc6J3ZlbnRpbF8xJywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8xX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9lbmRlJywgeyduYW1lJzondmVudGlsXzFfZW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAwOjAwJywndW5pdCc6J1Vocid9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2ZvcnRzY2hyaXR0JywgeyduYW1lJzondmVudGlsXzFfZm9ydHNjaHJpdHQnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOiclJywnbWluJzowLCdtYXgnOjEwMH1dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzEudmVudGlsXzFfbmFtZScsIHsnbmFtZSc6J3ZlbnRpbF8xX25hbWUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOmtyZWlzMX1dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzEudmVudGlsXzFfcGFyYWxsZWwnLCB7J25hbWUnOid2ZW50aWxfMV9wYXJhbGxlbCcsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9yZXN0emVpdCcsIHsnbmFtZSc6J3ZlbnRpbF8xX3Jlc3R6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzA6MDAnLCd1bml0JzonTWludXRlbid9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX3Jlc3R6ZWl0X2luX3NlaycsIHsnbmFtZSc6J3ZlbnRpbF8xX3Jlc3R6ZWl0X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzEudmVudGlsXzFfc3RhdHVzJywgeyduYW1lJzondmVudGlsXzFfc3RhdHVzJywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwNCiAgIA0KDQogICAvL1ZlbnRpbCAyDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMicsIHsnbmFtZSc6J3ZlbnRpbF8yJywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8yX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9lbmRlJywgeyduYW1lJzondmVudGlsXzJfZW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAwOjAwJywndW5pdCc6J1Vocid9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX2ZvcnRzY2hyaXR0JywgeyduYW1lJzondmVudGlsXzJfZm9ydHNjaHJpdHQnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOiclJywnbWluJzowLCdtYXgnOjEwMH1dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzJfbmFtZScsIHsnbmFtZSc6J3ZlbnRpbF8yX25hbWUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOmtyZWlzMn1dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzJfcmVzdHplaXQnLCB7J25hbWUnOid2ZW50aWxfMl9yZXN0emVpdCcsJ3R5cGUnOiAnc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwOjAwJywndW5pdCc6J01pbnV0ZW4nfV0sDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfMl9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX3N0YXR1cycsIHsnbmFtZSc6J3ZlbnRpbF8yX3N0YXR1cycsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sDQogICANCg0KICAgLy9WZW50aWwgMw0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzMnLCB7J25hbWUnOid2ZW50aWxfMycsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19kYXVlcicsIHsnbmFtZSc6ICd2ZW50aWxfM19kYXVlcicsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfZW5kZScsIHsnbmFtZSc6J3ZlbnRpbF8zX2VuZGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwMDowMCcsJ3VuaXQnOidVaHInfV0sDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19mb3J0c2Nocml0dCcsIHsnbmFtZSc6J3ZlbnRpbF8zX2ZvcnRzY2hyaXR0JywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonJScsJ21pbic6MCwnbWF4JzoxMDB9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX25hbWUnLCB7J25hbWUnOid2ZW50aWxfM19uYW1lJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzprcmVpczN9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzNfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDowMCcsJ3VuaXQnOidNaW51dGVuJ31dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzNfcmVzdHplaXRfaW5fc2VrJywgeyduYW1lJzondmVudGlsXzNfcmVzdHplaXRfaW5fc2VrJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19zdGF0dXMnLCB7J25hbWUnOid2ZW50aWxfMl9zdGF0dXMnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLA0KICAgDQoNCiAgIC8vVmVudGlsIDQNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80JywgeyduYW1lJzondmVudGlsXzQnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfZGF1ZXInLCB7J25hbWUnOiAndmVudGlsXzRfZGF1ZXInLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X2VuZGUnLCB7J25hbWUnOid2ZW50aWxfNF9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfZm9ydHNjaHJpdHQnLCB7J25hbWUnOid2ZW50aWxfNF9mb3J0c2Nocml0dCcsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6JyUnLCdtaW4nOjAsJ21heCc6MTAwfV0sDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9uYW1lJywgeyduYW1lJzondmVudGlsXzRfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6a3JlaXM0fV0sDQogICBbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9yZXN0emVpdCcsIHsnbmFtZSc6J3ZlbnRpbF80X3Jlc3R6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzA6MDAnLCd1bml0JzonTWludXRlbid9XSwNCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X3Jlc3R6ZWl0X2luX3NlaycsIHsnbmFtZSc6J3ZlbnRpbF80X3Jlc3R6ZWl0X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLA0KICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzRfc3RhdHVzJywgeyduYW1lJzondmVudGlsXzJfc3RhdHVzJywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwNCiAgIA0KDQogICAvL1plaXRwbGFuDQogICBbcGZhZCsnemVpdHBsYW4uY3Jvbl9yZXN0YXJ0JywgeyduYW1lJzonY3Jvbl9yZXN0YXJ0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MCwndW5pdCc6J1Vocid9XSwNCiAgIFtwZmFkKyd6ZWl0cGxhbi5zb25uZW5hdWZnYW5nJywgeyduYW1lJzonc29ubmVuYXVmZ2FuZycsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAwOjAwJywndW5pdCc6J1Vocid9XSwNCiAgIFtwZmFkKyd6ZWl0cGxhbi5zb25uZW51bnRlcmdhbmcnLCB7J25hbWUnOidzb25uZW51bnRlcmdhbmcnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwMDowMCcsJ3VuaXQnOidVaHInfV0sDQogICANCiAgIC8vTW9yZ2Vucw0KICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfYWt0aXYnLCB7J25hbWUnOidtb3JnZW5zX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwNCiAgIFtwZmFkKyd6ZWl0cGxhbi5tb3JnZW5zX3VocnplaXRfc3RhcnQnLCB7J25hbWUnOidtb3JnZW5zX3VocnplaXRfc3RhcnQnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwMDowMCcsJ3VuaXQnOidVaHInfV0sDQogICBbcGZhZCsnemVpdHBsYW4ubW9yZ2Vuc191aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsnbmFtZSc6J21vcmdlbnNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwJ31dLA0KICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdWhyemVpdF9zdGFydF9taW51dGUnLCB7J25hbWUnOidtb3JnZW5zX3VocnplaXRfc3RhcnRfbWludXRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMCd9XSwNCiAgIFtwZmFkKyd6ZWl0cGxhbi5tb3JnZW5zX3ZlcnpvZWdlcnVuZ19zb25uZW5hdWZnYW5nJywgeyduYW1lJzonbW9yZ2Vuc192ZXJ6b2VnZXJ1bmdfc29ubmVuYXVmZ2FuZycsJ3R5cGUnOiAnc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOjAsJ3VuaXQnOidNaW51dGVuJ31dLA0KDQogICAvL0FiZW5kcw0KICAgW3BmYWQrJ3plaXRwbGFuLmFiZW5kc19ha3RpdicsIHsnbmFtZSc6J2FiZW5kc19ha3RpdicsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sDQogICBbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3VocnplaXRfc3RhcnQnLCB7J25hbWUnOidhYmVuZHNfdWhyemVpdF9zdGFydCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAwOjAwJywndW5pdCc6J1Vocid9XSwNCiAgIFtwZmFkKyd6ZWl0cGxhbi5hYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J25hbWUnOidhYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwJ31dLA0KICAgW3BmYWQrJ3plaXRwbGFuLmFiZW5kc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsIHsnbmFtZSc6J2FiZW5kc191aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAnfV0sDQogICBbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3ZlcnpvZWdlcnVuZ19zb25uZW51bnRlcmdhbmcnLCB7J25hbWUnOidhYmVuZHNfdmVyem9lZ2VydW5nX3Nvbm5lbnVudGVyZ2FuZycsJ3R5cGUnOiAnc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOjAsJ3VuaXQnOidNaW51dGVuJ31dLA0KDQogICAvL0Zlc3RlIFN0YXJ0emVpdCAxDQogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0XzFfYWt0aXYnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfMV9ha3RpdicsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sDQogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0XzFfdWhyemVpdF9zdGFydCcsIHsnbmFtZSc6J2Zlc3RlX3N0YXJ0emVpdF8xX3VocnplaXRfc3RhcnQnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwMDowMCcsJ3VuaXQnOidVaHInfV0sDQogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0XzFfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfMV91aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MH1dLA0KICAgW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF8xX3VocnplaXRfc3RhcnRfbWludXRlJywgeyduYW1lJzonZmVzdGVfc3RhcnR6ZWl0XzFfdWhyemVpdF9zdGFydF9taW51dGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOjB9XSwJDQogICANCiAgIC8vRmVzdGUgU3RhcnR6ZWl0IDINCiAgIFtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfMl9ha3RpdicsIHsnbmFtZSc6J2Zlc3RlX3N0YXJ0emVpdF8yX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwNCiAgIFtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfMl91aHJ6ZWl0X3N0YXJ0JywgeyduYW1lJzonZmVzdGVfc3RhcnR6ZWl0XzJfdWhyemVpdF9zdGFydCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAwOjAwJywndW5pdCc6J1Vocid9XSwNCiAgIFtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfMl91aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsnbmFtZSc6J2Zlc3RlX3N0YXJ0emVpdF8yX3VocnplaXRfc3RhcnRfc3R1bmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzowfV0sDQogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0XzJfdWhyemVpdF9zdGFydF9taW51dGUnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfMl91aHJ6ZWl0X3N0YXJ0X21pbnV0ZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MH1dLA0KICAgDQogICAvL0Zlc3RlIFN0YXJ0emVpdCAzDQogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0XzNfYWt0aXYnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfM19ha3RpdicsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sDQogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0XzNfdWhyemVpdF9zdGFydCcsIHsnbmFtZSc6J2Zlc3RlX3N0YXJ0emVpdF8zX3VocnplaXRfc3RhcnQnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwMDowMCcsJ3VuaXQnOidVaHInfV0sDQogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0XzNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfM191aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MH1dLA0KICAgW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF8zX3VocnplaXRfc3RhcnRfbWludXRlJywgeyduYW1lJzonZmVzdGVfc3RhcnR6ZWl0XzNfdWhyemVpdF9zdGFydF9taW51dGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOjB9XSwNCl07ICAgDQogICAgY3JlYXRlVXNlclN0YXRlcyhzcGVpY2hlcm9ydCwgZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKTs= Datenpunkte erstellen.Einmalig ausführen! Datenpunkte erstellen.Einmalig ausführen! Cron Restart true FALSE Object ID vars_cron_restart TRUE custom TT.MM.JJJJ SS:mm:ss 5000 Sonnenauf- und Sonnenuntergang 10 0,12 * * * true FALSE Object ID vars_sonnenaufgang TRUE hh:mm sunrise 0 0 true FALSE Object ID vars_sonnenuntergang TRUE hh:mm sunset 0 0 Startzeit fuer Automatik berechnen any default vars_morgens_verzoegerung_sonnenaufgang default vars_abends_verzoegerung_sonnenuntergang default vars_sonnenaufgang default vars_sonnenuntergang Morgens startzeit_sonnenaufgang MINUS 1 mid sunrise 0 1 ADD 1 MULTIPLY 1 val vars_morgens_verzoegerung_sonnenaufgang -1 1 ADD 1 ADD 1 DIVIDE 0 val vars_ventil_1_restzeit_in_sek 60 1 DIVIDE 1 val vars_ventil_2_restzeit_in_sek 60 1 ADD 1 DIVIDE 1 val vars_ventil_3_restzeit_in_sek 60 1 DIVIDE 1 val vars_ventil_4_restzeit_in_sek 60 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 fuer cron true FALSE Object ID vars_morgens_uhrzeit_start_stunde TRUE startzeit_sonnenaufgang_stunde 0 true FALSE Object ID vars_morgens_urhzeit_start_minute TRUE startzeit_sonnenaufgang_minute 0 Uhrzeit fuer 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 true 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 fuer cron true FALSE Object ID vars_abends_uhrzeit_start_stunde TRUE startzeit_sonnenuntergang_stunde 0 true FALSE Object ID vars_abends_uhrzeit_start_minute TRUE startzeit_sonnenuntergang_minute 0 Uhrzeit fuer 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 true FALSE Object ID vars_abends_uhrzeit_start TRUE startzeit_sonnenuntergang_stunde : startzeit_sonnenuntergang_minute 0 Pumpe einschalten ne default vars_bewaesserung_aktiv AND EQ val vars_bewaesserung_aktiv TRUE NEQ vars_pumpe EQ val vars_pumpe FALSE false FALSE Object ID vars_pumpe TRUE 0 AND EQ val vars_bewaesserung_aktiv FALSE NEQ vars_pumpe EQ val vars_pumpe TRUE false FALSE Object ID vars_pumpe FALSE 0 Bewaesserung autom. starten ne default vars_morgens_verzoegerung_sonnenaufgang default vars_abends_verzoegerung_sonnenuntergang default vars_feste_startzeit_1_uhrzeit_start_stunde default vars_feste_startzeit_1_uhrzeit_start_minute default vars_feste_startzeit_2_uhrzeit_start_stunde default vars_feste_startzeit_2_uhrzeit_start_minute default vars_feste_startzeit_3_uhrzeit_start_stunde default vars_feste_startzeit_3_uhrzeit_start_minute default vars_sonnenaufgang default vars_sonnenuntergang default vars_cron_restart timeout 1 sec Morgens morgens morgens * * * * * FALSE FALSE * 4-10 * * val vars_morgens_uhrzeit_start_stunde * val 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 FALSE AND OR GTE val vars_wetter_max_temp val vars_schwellwert_temperatur EQ vars_wetter_max_temp false OR LTE val vars_wetter_regen val vars_schwellwert_regen EQ vars_wetter_regen false true FALSE Object ID vars_bewaesserung_aktiv TRUE 0 Abends abends abends * * * * * FALSE FALSE * 4-10 * * val vars_abends_uhrzeit_start_stunde * val 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 FALSE AND OR GTE val vars_wetter_max_temp val vars_schwellwert_temperatur EQ vars_wetter_max_temp false OR LTE val vars_wetter_regen val vars_schwellwert_regen EQ vars_wetter_regen false true FALSE Object ID vars_bewaesserung_aktiv TRUE 0 Feste Uhrzeit 1 LT val vars_feste_startzeit_1_uhrzeit_start_stunde 10 startzeit_fix_1_stunde 0 val vars_feste_startzeit_1_uhrzeit_start_stunde startzeit_fix_1_stunde val vars_feste_startzeit_1_uhrzeit_start_stunde LT val vars_feste_startzeit_1_uhrzeit_start_minute 10 startzeit_fix_1_minunte 0 val vars_feste_startzeit_1_uhrzeit_start_minute startzeit_fix_1_minunte val vars_feste_startzeit_1_uhrzeit_start_minute true FALSE Object ID vars_feste_startzeit_1_uhrzeit_start TRUE startzeit_fix_1_stunde : startzeit_fix_1_minunte 0 fix_1 fix_1 * * * * * FALSE FALSE * 4-10 * * val vars_feste_startzeit_1_uhrzeit_start_stunde * val vars_feste_startzeit_1_uhrzeit_start_minute AND AND EQ val vars_feste_startzeit_1_aktiv TRUE AND EQ val vars_bewaesserung_automatik TRUE EQ val vars_bewaesserung_aktiv FALSE AND OR GTE val vars_wetter_max_temp val vars_schwellwert_temperatur EQ vars_wetter_max_temp false OR LTE val vars_wetter_regen val vars_schwellwert_regen EQ vars_wetter_regen false true FALSE Object ID vars_bewaesserung_aktiv TRUE 0 Feste Uhrzeit 2 LT val vars_feste_startzeit_2_uhrzeit_start_stunde 10 startzeit_fix_2_stunde 0 val vars_feste_startzeit_2_uhrzeit_start_stunde startzeit_fix_2_stunde val vars_feste_startzeit_2_uhrzeit_start_stunde LT val vars_feste_startzeit_2_uhrzeit_start_minute 10 startzeit_fix_2_minunte 0 val vars_feste_startzeit_2_uhrzeit_start_minute startzeit_fix_2_minunte val vars_feste_startzeit_2_uhrzeit_start_minute true FALSE Object ID vars_feste_startzeit_2_uhrzeit_start TRUE startzeit_fix_2_stunde : startzeit_fix_2_minunte 0 fix_2 fix_2 * * * * * FALSE FALSE * 4-10 * * val vars_feste_startzeit_2_uhrzeit_start_stunde * val vars_feste_startzeit_2_uhrzeit_start_minute AND AND EQ val vars_feste_startzeit_2_aktiv TRUE AND EQ val vars_bewaesserung_automatik TRUE EQ val vars_bewaesserung_aktiv FALSE AND OR GTE val vars_wetter_max_temp val vars_schwellwert_temperatur EQ vars_wetter_max_temp false OR LTE val vars_wetter_regen val vars_schwellwert_regen EQ vars_wetter_regen false true FALSE Object ID vars_bewaesserung_aktiv TRUE 0 Feste Uhrzeit 3 LT val vars_feste_startzeit_3_uhrzeit_start_stunde 10 startzeit_fix_3_stunde 0 val vars_feste_startzeit_3_uhrzeit_start_stunde startzeit_fix_3_stunde val vars_feste_startzeit_3_uhrzeit_start_stunde LT val vars_feste_startzeit_3_uhrzeit_start_minute 10 startzeit_fix_3_minute 0 val vars_feste_startzeit_3_uhrzeit_start_minute startzeit_fix_3_minute val vars_feste_startzeit_3_uhrzeit_start_minute true FALSE Object ID vars_feste_startzeit_3_uhrzeit_start TRUE startzeit_fix_3_stunde : startzeit_fix_3_minute 0 fix_3 fix_3 * * * * * FALSE FALSE * 4-10 * * val vars_feste_startzeit_3_uhrzeit_start_stunde * val vars_feste_startzeit_3_uhrzeit_start_minute AND AND EQ val vars_feste_startzeit_3_aktiv TRUE AND EQ val vars_bewaesserung_automatik TRUE EQ val vars_bewaesserung_aktiv FALSE AND OR GTE val vars_wetter_max_temp val vars_schwellwert_temperatur EQ vars_wetter_max_temp false OR LTE val vars_wetter_regen val vars_schwellwert_regen EQ vars_wetter_regen false true FALSE Object ID vars_bewaesserung_aktiv TRUE 0 Enduhrzeiten berechnen ne default vars_bewaesserung_aktiv default vars_bewaesserung_pause 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_restlautzeit_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 true FALSE Object ID vars_lautzeit_ende_uhrzeit TRUE info_endzeit_stunde : info_endzeit_minute : info_endzeit_sekunde Uhr 0 EQ val vars_bewaesserung_aktiv FALSE true FALSE Object ID vars_lautzeit_ende_uhrzeit TRUE 0 pro Ventil AND EQ val vars_bewaesserung_aktiv TRUE EQ val vars_bewaesserung_pause FALSE 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 vars_ventil_1_restzeit_in_sek 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 true FALSE Object ID vars_ventil_1_ende TRUE ventil_enduhrzeit_std : ventil_enduhrzeit_min : ventil_enduhrzeit_sek 0 true FALSE Object ID vars_ventil_1_ende TRUE deaktiviert 0 Ventil 2 End-Uhrzeit EQ val vars_ventil_2 TRUE Umschaltdauer berechnen EQ val vars_ventil_1_parallel FALSE 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_verzoegerung 1 EQ val vars_ventil_1_parallel FALSE ventil_enduhrzeit_raw ADD 1 ADD 1 sid 1 val vars_ventil_1_restzeit_in_sek 1 ADD 1 val vars_ventil_2_restzeit_in_sek 1 ventil_enduhrzeit_verzoegerung EQ val vars_ventil_1_parallel TRUE ventil_enduhrzeit_raw ADD 1 sid 1 ADD 1 val vars_ventil_2_restzeit_in_sek 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 true FALSE Object ID vars_ventil_2_ende TRUE ventil_enduhrzeit_std : ventil_enduhrzeit_min : ventil_enduhrzeit_sek 0 true 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 Umschaltdauer berechnen EQ val vars_ventil_1_parallel FALSE 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_verzoegerung 1 EQ val vars_ventil_1_parallel FALSE ventil_enduhrzeit_raw ADD 1 ADD 1 sid 1 val vars_ventil_1_restzeit_in_sek 1 ADD 1 ADD 1 val vars_ventil_2_restzeit_in_sek 1 val vars_ventil_3_restzeit_in_sek 1 ventil_enduhrzeit_verzoegerung EQ val vars_ventil_1_parallel TRUE ventil_enduhrzeit_raw ADD 1 ADD 1 sid 1 val vars_ventil_2_restzeit_in_sek 1 ADD 1 val vars_ventil_3_restzeit_in_sek 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 true FALSE Object ID vars_ventil_3_ende TRUE ventil_enduhrzeit_std : ventil_enduhrzeit_min : ventil_enduhrzeit_sek 0 true 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 Umschaltdauer berechnen EQ val vars_ventil_1_parallel FALSE 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_verzoegerung 1 EQ val vars_ventil_1_parallel FALSE ventil_enduhrzeit_raw ADD 1 ADD 1 sid 1 ADD 1 val vars_ventil_1_restzeit_in_sek 1 val vars_ventil_2_restzeit_in_sek 1 ADD 1 ADD 1 val vars_ventil_3_restzeit_in_sek 1 val vars_ventil_4_restzeit_in_sek 1 ventil_enduhrzeit_verzoegerung EQ val vars_ventil_1_parallel TRUE ventil_enduhrzeit_raw ADD 1 ADD 1 sid 1 val vars_ventil_2_restzeit_in_sek 1 ADD 1 ADD 1 val vars_ventil_3_restzeit_in_sek 1 val vars_ventil_4_restzeit_in_sek 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 true FALSE Object ID vars_ventil_4_ende TRUE ventil_enduhrzeit_std : ventil_enduhrzeit_min : ventil_enduhrzeit_sek 0 true FALSE Object ID vars_ventil_4_ende TRUE deaktiviert 0 EQ val vars_bewaesserung_aktiv FALSE true FALSE Object ID vars_ventil_1_ende TRUE 0 true FALSE Object ID vars_ventil_2_ende TRUE 0 true FALSE