vars_pfad vars_aktor_typ vars_aktor_name vars_sonnenaufgang vars_sonoff_ip vars_sonnenuntergang vars_morgens_verzoegerung_sonnenaufgang vars_abends_verzoegerung_sonnenuntergang vars_notify_mail startzeit_sonnenaufgang vars_notify_alexa startzeit_sonnenaufgang_stunde vars_feste_startzeit_uhrzeit_start_stunde vars_feste_startzeit_urhzeit_start_minute timeout vars_notify_alexa_device startzeit_sonnenaufgang_minute vars_notify_pushover vars_bewaesserung_aktiv vars_notify_log morgens vars_wetter_max_temp 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_wetter_regen vars_morgens_urhzeit_start_minute info_enduhrzeit_raw abends info_endzeit_stunde info_endzeit_minute vars_ventil_1_ende vars_laufzeit_gesamt_in_sek 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_bewaesserung_automatik 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_abends_uhrzeit_start_stunde vars_abends_uhrzeit_start_minute startzeit_fix_minute ventil_enduhrzeit_min vars_ventil_4_ende vars_ventil_1_restzeit_in_sek startzeit_sonnenuntergang_stunde vars_feste_startzeit_uhrzeit_start ventil_enduhrzeit_sek ventil_enduhrzeit_verzoegerung vars_restlautzeit_in_sek vars_anzahl_aktive_ventile vars_lautzeit_ende_uhrzeit startzeit_sonnenuntergang_minute vars_abends_aktiv fix ventil_2_dauer restlaufzeit_vis_min info_endzeit_aktive_ventile vars_restlautzeit vars_ventil_2_restzeit ventil_3_dauer ventil_4_dauer restlaufzeit_vis_sek vars_ventil_2_restzeit_in_sek vars_aktives_ventil vars_ventil_1_name info_text restzeit vars_ventil_2_name info_betreff vars_ventil_3_restzeit vars_ventil_3_name restzeit_gesamt_min vars_ventil_1_aktor_ontime vars_feste_startzeit_aktiv vars_ventil_3_restzeit_in_sek vars_ventil_4_name restzeit_gesamt_sek vars_ventil_2_aktor_ontime vars_abends_uhrzeit_start ventil_1_rest vars_ventil_4_restzeit vars_ventil_3_aktor_ontime vars_ventil_4_restzeit_in_sek ventil_2_rest vars_ventil_4_aktor_ontime restzeit_ventil_min ventil_3_rest restzeit_ventil_sek ventil_4_rest Variablen_definieren Beschreibe diese Funktion … --- Die folgenden Variablen bitte anpassen --- vars_pfad Bitte hier den Speicheroprt angeben.z.B.javascript.0.bewasserung0_userdata.0.Garten.Bewasserung javascript.0.bewaesserung. vars_aktor_typ Mögliche Werte:hm = Homematic Aktorsonoff = Sonoff Aktor hm vars_aktor_name Hier bitte dem Namen des Aktor eintragen.hm-rpc.0.QEQ12345678sonoff.0.Bewaesserung hm-rpc.0.QEQ0661312 vars_aktor_name Hier bitte dem Namen des Aktor eintragen.hm-rpc.0.QEQ12345678sonoff.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 vars_notify_mail Soll per Mail über Start und Stop informiert werden?Mögliche Werte:truefalse FALSE vars_notify_alexa Soll per Alexa über Start und Stop informiert werden?Mögliche Werte:truefalse FALSE vars_notify_alexa_device Hier bitte den State vom Alexa Device Eintragen:Beispiel:alexa2.0.Echo-Devices.ABCDEFGHIJK.Commands.announcement javascript.0.echo.sprachausgabe_alle_geraete vars_notify_pushover Soll per Pushover über Start und Stop informiert werden?Mögliche Werte:truefalse FALSE vars_notify_log Sollen bei Start und Stop Log-Einträge generiert werden ?Mögliche Werte:truefalse FALSE vars_wetter_max_temp Wettervorhersage: Tagehöchstwertz.B.: daswetter.0.NextDays.Location_1.Day_1.Maximale_Temperatur_valuefalse, wenn keine Werte verwendet werden können daswetter.0.NextDays.Location_1.Day_1.Maximale_Temperatur_value vars_wetter_regen Wettervorhersage: erwartete Regenmengez.B.: daswetter.0.NextDaysDetailed.Location_1.Day_1.rain_valuefalse, wenn keine Werte verwendet werden können daswetter.0.NextDaysDetailed.Location_1.Day_1.rain_value --- Ab hier nichts mehr aendern --- Bewaesserung 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_4.ventil_4_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 Datenpunkte_erstellen LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKLyoqCiogSGllciBiaXR0ZSBkZW4gU3BlaWNoZXJvcnQsZGVuIFBmYWQgZWludHJhZ2VuIHVuZCBkZW4gTmFtZW4gZGVyIEtyZWlzZSBlaW5nZWJlbgoqIEJlaXNwaWVsZTogCgoJc3BlaWNoZXJvcnQgPSAnMF91c2VyZGF0YS4wLicKCXNwZWljaGVyb3J0ID0gJ2phdmFzY3JpcHQuMCcKCQoJcGZhZCA9ICdiZXdhc3NlcnVuZy4nCglwZmFkID0gJ0dhcmRlbmEuQmV3YWVzc2VydW5nLicKICAgIAogICAga3JlaXMxID0gJ0hlY2tlJwogICAga3JlaXMyID0gJ1Jhc2VuJwoKKi8Kc3BlaWNoZXJvcnQgPSAnamF2YXNjcmlwdC4wJwpwZmFkID0gJ2Jld2Flc3NlcnVuZy4nCmtyZWlzMSA9ICdIZWNrZScKa3JlaXMyID0gJ1Jhc2VuJwprcmVpczMgPSAnQmVldCcKa3JlaXM0ID0gJ2tsLiBSYXNlbicKCgpmdW5jdGlvbiBjcmVhdGVVc2VyU3RhdGVzKHdoZXJlLCBmb3JjZSwgc3RhdGVzVG9DcmVhdGUsIGNhbGxiYWNrID0gdW5kZWZpbmVkKSB7CiAgICAKICAgIGNvbnN0IFdBUk4gPSBmYWxzZTsgLy8gT25seSBmb3IgMF91c2VyZGF0YS4wOiBUaHJvd3Mgd2FybmluZyBpbiBsb2csIGlmIHN0YXRlIGlzIGFscmVhZHkgZXhpc3RpbmcgYW5kIGZvcmNlPWZhbHNlLiBEZWZhdWx0IGlzIGZhbHNlLCBzbyBubyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgZXhpc3RzLgogICAgY29uc3QgTE9HX0RFQlVHID0gZmFsc2U7IC8vIFRvIGRlYnVnIHRoaXMgZnVuY3Rpb24sIHNldCB0byB0cnVlCiAgICAvLyBQZXIgaXNzdWUgIzQ3NCAoaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCksIHRoZSB1c2VkIGZ1bmN0aW9uIHNldE9iamVjdCgpIGV4ZWN1dGVzIHRoZSBjYWxsYmFjayAKICAgIC8vIGJlZm9yZSB0aGUgc3RhdGUgaXMgYWN0dWFsIGNyZWF0ZWQuIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlciBhcyBhIHdvcmthcm91bmQuCiAgICBjb25zdCBERUxBWSA9IDUwOyAvLyBEZWxheSBpbiBtaWxsaXNlY29uZHMgKG1zKS4gSW5jcmVhc2UgdGhpcyB0byAxMDAsIGlmIGl0IGlzIG5vdCB3b3JraW5nLgoKICAgIC8vIFZhbGlkYXRlICJ3aGVyZSIKICAgIGlmICh3aGVyZS5lbmRzV2l0aCgnLicpKSB3aGVyZSA9IHdoZXJlLnNsaWNlKDAsIC0xKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRvdAogICAgaWYgKCAod2hlcmUubWF0Y2goL14oKGphdmFzY3JpcHRcLihbMS05XVswLTldfFswLTldKSkkfDBfdXNlcmRhdGFcLjAkKS8pID09IG51bGwpICkgewogICAgICAgIGxvZygnVGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCB0byBjcmVhdGUgc3RhdGVzIHVuZGVyIFsnICsgd2hlcmUgKyAnXScsICdlcnJvcicpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBQcmVwYXJlICJzdGF0ZXNUb0NyZWF0ZSIgc2luY2Ugd2UgYWxzbyBhbGxvdyBhIHNpbmdsZSBzdGF0ZSB0byBjcmVhdGUKICAgIGlmKCFBcnJheS5pc0FycmF5KHN0YXRlc1RvQ3JlYXRlWzBdKSkgc3RhdGVzVG9DcmVhdGUgPSBbc3RhdGVzVG9DcmVhdGVdOyAvLyB3cmFwIGludG8gYXJyYXksIGlmIGp1c3Qgb25lIGFycmF5IGFuZCBub3QgaW5zaWRlIGFuIGFycmF5CgogICAgLy8gQWRkICJ3aGVyZSIgdG8gU1RBVEVTX1RPX0NSRUFURQogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7IGkrKykgewogICAgICAgIGxldCBscFBhdGggPSBzdGF0ZXNUb0NyZWF0ZVtpXVswXS5yZXBsYWNlKC9cLipcLi9nLCAnLicpOyAvLyByZXBsYWNlIGFsbCBtdWx0aXBsZSBkb3RzIGxpa2UgJy4uJywgJy4uLicgd2l0aCBhIHNpbmdsZSAnLicKICAgICAgICBscFBhdGggPSBscFBhdGgucmVwbGFjZSgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pXC4pfDBfdXNlcmRhdGFcLjBcLikvLCcnKSAvLyByZW1vdmUgYW55IGphdmFzY3JpcHQueC4gLyAwX3VzZXJkYXRhLjAuIGZyb20gYmVnaW5uaW5nCiAgICAgICAgbHBQYXRoID0gd2hlcmUgKyAnLicgKyBscFBhdGg7IC8vIGFkZCB3aGVyZSB0byBiZWdpbm5pbmcgb2Ygc3RyaW5nCiAgICAgICAgc3RhdGVzVG9DcmVhdGVbaV1bMF0gPSBscFBhdGg7CiAgICB9CgogICAgaWYgKHdoZXJlICE9ICcwX3VzZXJkYXRhLjAnKSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciBqYXZhc2NyaXB0LngKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIHN0YXRlc1RvQ3JlYXRlLmZvckVhY2goZnVuY3Rpb24obG9vcFBhcmFtKSB7CiAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJyk7CiAgICAgICAgICAgIGxldCBsb29wSW5pdCA9IChsb29wUGFyYW1bMV1bJ2RlZiddID09IHVuZGVmaW5lZCkgPyBudWxsIDogbG9vcFBhcmFtWzFdWydkZWYnXTsgLy8gbWltaWMgc2FtZSBiZWhhdmlvciBhcyBjcmVhdGVTdGF0ZSBpZiBubyBpbml0IHZhbHVlIGlzIHByb3ZpZGVkCiAgICAgICAgICAgIGNyZWF0ZVN0YXRlKGxvb3BQYXJhbVswXSwgbG9vcEluaXQsIGZvcmNlLCBsb29wUGFyYW1bMV0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgcHJvY2Vzc2VkLicpOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEZ1bmN0aW9uIHRvIGNhbGxiYWNrIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIENyZWF0ZSBTdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wCiAgICAgICAgbGV0IG51bVN0YXRlcyA9IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsKICAgICAgICBsZXQgY291bnRlciA9IC0xOwogICAgICAgIHN0YXRlc1RvQ3JlYXRlLmZvckVhY2goZnVuY3Rpb24obG9vcFBhcmFtKSB7CiAgICAgICAgICAgIGNvdW50ZXIgKz0gMTsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nICgnW0RlYnVnXSBDdXJyZW50bHkgcHJvY2Vzc2luZyBmb2xsb3dpbmcgc3RhdGU6IFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgaWYoICgkKGxvb3BQYXJhbVswXSkubGVuZ3RoID4gMCkgJiYgKGV4aXN0c1N0YXRlKGxvb3BQYXJhbVswXSkpICkgeyAvLyBXb3JrYXJvdW5kIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc4CiAgICAgICAgICAgICAgICAvLyBTdGF0ZSBpcyBleGlzdGluZy4KICAgICAgICAgICAgICAgIGlmIChXQVJOICYmICFmb3JjZSkgbG9nKCdTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcgYW5kIHdpbGwgbm8gbG9uZ2VyIGJlIGNyZWF0ZWQuJywgJ3dhcm4nKTsKICAgICAgICAgICAgICAgIGlmICghV0FSTiAmJiBMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcuIE9wdGlvbiBmb3JjZSAoPW92ZXJ3cml0ZSkgaXMgc2V0IHRvIFsnICsgZm9yY2UgKyAnXS4nKTsKICAgICAgICAgICAgICAgIGlmKCFmb3JjZSkgewogICAgICAgICAgICAgICAgICAgIC8vIFN0YXRlIGV4aXN0cyBhbmQgc2hhbGwgbm90IGJlIG92ZXJ3cml0dGVuIHNpbmNlIGZvcmNlPWZhbHNlCiAgICAgICAgICAgICAgICAgICAgLy8gU28sIHdlIGRvIG5vdCBwcm9jZWVkLgogICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgd2hpY2ggd2UgYXJlIGdvaW5nIHRvIGV4ZWN1dGUgbm93LicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdvIG91dCBhbmQgY29udGludWUgd2l0aCBuZXh0IGVsZW1lbnQgaW4gbG9vcC4KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODQ1MjkyMC9jb250aW51ZS1pbi1jdXJzb3ItZm9yZWFjaAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gLy8gaWYoIWZvcmNlKQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTdGF0ZSBpcyBub3QgZXhpc3Rpbmcgb3IgZm9yY2UgPSB0cnVlLCBzbyB3ZSBhcmUgY29udGludWluZyB0byBjcmVhdGUgdGhlIHN0YXRlIHRocm91Z2ggc2V0T2JqZWN0KCkuCiAgICAgICAgICAgIGxldCBvYmogPSB7fTsKICAgICAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgICAgICBvYmoubmF0aXZlID0ge307CiAgICAgICAgICAgIG9iai5jb21tb24gPSBsb29wUGFyYW1bMV07CiAgICAgICAgICAgIHNldE9iamVjdChsb29wUGFyYW1bMF0sIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICAgICAgICAgIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdCBmb3Igc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXTogJyArIGVycik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJykKICAgICAgICAgICAgICAgICAgICBsZXQgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGxvb3BQYXJhbVsxXS5kZWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKGxvb3BQYXJhbVswXSwgaW5pdCwgdHJ1ZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gc2V0U3RhdGUgZHVyY2hnZWbDvGhydDogJyArIGxvb3BQYXJhbVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0sIERFTEFZICsgKDIwICogY291bnRlcikgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9Cn0KCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKCiAgIC8vQmV3w6Rzc2VydW5nCiAgIFtwZmFkKydiZXdhZXNzZXJ1bmdfYWt0aXYnLCB7J25hbWUnOidiZXdhZXNzZXJ1bmdfYWt0aXYnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAogICBbcGZhZCsnYmV3YWVzc2VydW5nX2F1dG9tYXRpaycsIHsnbmFtZSc6J2Jld2Flc3NlcnVuZ19hdXRvbWF0aWsnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAoKICAgLy9UaW1lcgogICBbcGZhZCsnbGF1dHplaXRfZ2VzYW10X2luX3NlaycsIHsnbmFtZSc6J2xhdXR6ZWl0X2dlc2FtdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKICAgW3BmYWQrJ2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsIHsnbmFtZSc6J2xhdXR6ZWl0X2VuZGVfdWhyemVpdCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6ICcwMDowMCcsJ3VuaXQnOiAnVWhyJ31dLAogICBbcGZhZCsncmVzdGxhdXR6ZWl0JywgeyduYW1lJzoncmVzdGxhdXR6ZWl0JywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MCwndW5pdCc6J01pbnV0ZW4nfV0sCiAgIFtwZmFkKydyZXN0bGF1dHplaXRfaW5fc2VrJywgeyduYW1lJzoncmVzdGxhdXR6ZWl0X2luX3NlaycsJ3R5cGUnOidudW1iZXInLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J251bWJlcicsJ2RlZic6MCwndW5pdCc6J1Nla3VuZGVuJ31dLAoKICAgLy9WZW50aWxlCiAgIFtwZmFkKyd2ZW50aWxlLmFrdGl2ZXNfdmVudGlsJywgeyduYW1lJzogJ2FrdGl2ZXNfdmVudGlsJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonYXVzJ31dLAogICBbcGZhZCsndmVudGlsZS5hbnphaGxfYWt0aXZlX3ZlbnRpbGUnLCB7J25hbWUnOidhbnphaGxfYWt0aXZlX3ZlbnRpbGUnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ21pbic6MCwgJ21heCc6NH0gXSwKCiAgIC8vVmVudGlsIDEKICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzEudmVudGlsXzEnLCB7J25hbWUnOid2ZW50aWxfMScsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8xX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX2VuZGUnLCB7J25hbWUnOid2ZW50aWxfMV9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9uYW1lJywgeyduYW1lJzondmVudGlsXzFfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6a3JlaXMxfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8xLnZlbnRpbF8xX3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzFfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDowMCcsJ3VuaXQnOidNaW51dGVuJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMS52ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfMV9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCiAgIC8vVmVudGlsIDIKICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzIudmVudGlsXzInLCB7J25hbWUnOid2ZW50aWxfMicsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8yX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX2VuZGUnLCB7J25hbWUnOid2ZW50aWxfMl9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9uYW1lJywgeyduYW1lJzondmVudGlsXzJfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6a3JlaXMyfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8yLnZlbnRpbF8yX3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzJfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDowMCcsJ3VuaXQnOidNaW51dGVuJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMi52ZW50aWxfMl9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfMl9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCiAgIC8vVmVudGlsIDMKICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzMudmVudGlsXzMnLCB7J25hbWUnOid2ZW50aWxfMycsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF8zX2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX2VuZGUnLCB7J25hbWUnOid2ZW50aWxfM19lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19uYW1lJywgeyduYW1lJzondmVudGlsXzNfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6a3JlaXMzfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF8zLnZlbnRpbF8zX3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzNfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDowMCcsJ3VuaXQnOidNaW51dGVuJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfMy52ZW50aWxfM19yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfM19yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCiAgIC8vVmVudGlsIDQKICAgW3BmYWQrJ3ZlbnRpbGUudmVudGlsXzQudmVudGlsXzQnLCB7J25hbWUnOid2ZW50aWxfNCcsJ3R5cGUnOidib29sZWFuJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOmZhbHNlfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X2RhdWVyJywgeyduYW1lJzogJ3ZlbnRpbF80X2RhdWVyJywndHlwZSc6J251bWJlcicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonbnVtYmVyJywnZGVmJzowLCd1bml0JzonU2VrdW5kZW4nfV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X2VuZGUnLCB7J25hbWUnOid2ZW50aWxfNF9lbmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9uYW1lJywgeyduYW1lJzondmVudGlsXzRfbmFtZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6a3JlaXM0fV0sCiAgIFtwZmFkKyd2ZW50aWxlLnZlbnRpbF80LnZlbnRpbF80X3Jlc3R6ZWl0JywgeyduYW1lJzondmVudGlsXzRfcmVzdHplaXQnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDowMCcsJ3VuaXQnOidNaW51dGVuJ31dLAogICBbcGZhZCsndmVudGlsZS52ZW50aWxfNC52ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCB7J25hbWUnOid2ZW50aWxfNF9yZXN0emVpdF9pbl9zZWsnLCd0eXBlJzonbnVtYmVyJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidudW1iZXInLCdkZWYnOjAsJ3VuaXQnOidTZWt1bmRlbid9XSwKCiAgIC8vWmVpdHBsYW4KICAgW3BmYWQrJ3plaXRwbGFuLnNvbm5lbmF1ZmdhbmcnLCB7J25hbWUnOidzb25uZW5hdWZnYW5nJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICBbcGZhZCsnemVpdHBsYW4uc29ubmVudW50ZXJnYW5nJywgeyduYW1lJzonc29ubmVudW50ZXJnYW5nJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMDA6MDAnLCd1bml0JzonVWhyJ31dLAogICAvL01vcmdlbnMKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfYWt0aXYnLCB7J25hbWUnOidtb3JnZW5zX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdWhyemVpdF9zdGFydCcsIHsnbmFtZSc6J21vcmdlbnNfdWhyemVpdF9zdGFydCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAwOjAwJywndW5pdCc6J1Vocid9XSwKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J25hbWUnOidtb3JnZW5zX3VocnplaXRfc3RhcnRfc3R1bmRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMCd9XSwKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdWhyemVpdF9zdGFydF9taW51dGUnLCB7J25hbWUnOidtb3JnZW5zX3VocnplaXRfc3RhcnRfbWludXRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMCd9XSwKICAgW3BmYWQrJ3plaXRwbGFuLm1vcmdlbnNfdmVyem9lZ2VydW5nX3Nvbm5lbmF1ZmdhbmcnLCB7J25hbWUnOidtb3JnZW5zX3ZlcnpvZWdlcnVuZ19zb25uZW5hdWZnYW5nJywndHlwZSc6ICdzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MCwndW5pdCc6J01pbnV0ZW4nfV0sCgogICAvL0FiZW5kcwogICBbcGZhZCsnemVpdHBsYW4uYWJlbmRzX2FrdGl2JywgeyduYW1lJzonYWJlbmRzX2FrdGl2JywndHlwZSc6J2Jvb2xlYW4nLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N3aXRjaCcsJ2RlZic6ZmFsc2V9XSwKICAgW3BmYWQrJ3plaXRwbGFuLmFiZW5kc191aHJ6ZWl0X3N0YXJ0JywgeyduYW1lJzonYWJlbmRzX3VocnplaXRfc3RhcnQnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwMDowMCcsJ3VuaXQnOidVaHInfV0sCiAgIFtwZmFkKyd6ZWl0cGxhbi5hYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCB7J25hbWUnOidhYmVuZHNfdWhyemVpdF9zdGFydF9zdHVuZGUnLCd0eXBlJzonc3RyaW5nJywncmVhZCc6dHJ1ZSwnd3JpdGUnOnRydWUsJ3JvbGUnOidzdHJpbmcnLCdkZWYnOicwJ31dLAogICBbcGZhZCsnemVpdHBsYW4uYWJlbmRzX3VocnplaXRfc3RhcnRfbWludXRlJywgeyduYW1lJzonYWJlbmRzX3VocnplaXRfc3RhcnRfbWludXRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzonMCd9XSwKICAgW3BmYWQrJ3plaXRwbGFuLmFiZW5kc192ZXJ6b2VnZXJ1bmdfc29ubmVudW50ZXJnYW5nJywgeyduYW1lJzonYWJlbmRzX3ZlcnpvZWdlcnVuZ19zb25uZW51bnRlcmdhbmcnLCd0eXBlJzogJ3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzowLCd1bml0JzonTWludXRlbid9XSwKCiAgIC8vRmVzdGUgU3RhcnR6ZWl0CiAgIFtwZmFkKyd6ZWl0cGxhbi5mZXN0ZV9zdGFydHplaXRfYWt0aXYnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfYWt0aXYnLCd0eXBlJzonYm9vbGVhbicsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3dpdGNoJywnZGVmJzpmYWxzZX1dLAogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnQnLCB7J25hbWUnOidmZXN0ZV9zdGFydHplaXRfdWhyemVpdF9zdGFydCcsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6JzAwOjAwJywndW5pdCc6J1Vocid9XSwKICAgW3BmYWQrJ3plaXRwbGFuLmZlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsIHsnbmFtZSc6J2Zlc3RlX3N0YXJ0emVpdF91aHJ6ZWl0X3N0YXJ0X3N0dW5kZScsJ3R5cGUnOidzdHJpbmcnLCdyZWFkJzp0cnVlLCd3cml0ZSc6dHJ1ZSwncm9sZSc6J3N0cmluZycsJ2RlZic6MH1dLAogICBbcGZhZCsnemVpdHBsYW4uZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfbWludXRlJywgeyduYW1lJzonZmVzdGVfc3RhcnR6ZWl0X3VocnplaXRfc3RhcnRfbWludXRlJywndHlwZSc6J3N0cmluZycsJ3JlYWQnOnRydWUsJ3dyaXRlJzp0cnVlLCdyb2xlJzonc3RyaW5nJywnZGVmJzowfV0sCQpdOyAgIAogICAgY3JlYXRlVXNlclN0YXRlcyhzcGVpY2hlcm9ydCwgZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKTs= Datenpunkte erstellen.Einmalig ausführen! Datenpunkte erstellen.Einmalig ausführen! 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 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 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 Bewaesserung 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 * 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 TRUE AND OR GTE val vars_wetter_max_temp 24 EQ vars_wetter_max_temp false AND LT val vars_wetter_regen 0.5 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 TRUE AND OR GTE val vars_wetter_max_temp 24 EQ vars_wetter_max_temp false AND LT val vars_wetter_regen 0.5 EQ vars_wetter_regen false true 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 true FALSE Object ID vars_feste_startzeit_uhrzeit_start TRUE startzeit_fix_stunde : startzeit_fix_minute 0 fix fix * * * * * FALSE FALSE * 4-10 * * 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 OR GTE val vars_wetter_max_temp 24 EQ vars_wetter_max_temp false AND LT val vars_wetter_regen 0.5 EQ vars_wetter_regen false true 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 true 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 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 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 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 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 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 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 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 Object ID vars_ventil_3_ende TRUE 0 true 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 true FALSE Object ID vars_ventil_1_restzeit TRUE DIVIDE 60 ventil_1_dauer 60 :00 0 true 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 true FALSE Object ID vars_ventil_2_restzeit TRUE DIVIDE 1 ventil_2_dauer 60 :00 0 true 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 true FALSE Object ID vars_ventil_3_restzeit TRUE DIVIDE 1 ventil_3_dauer 60 :00 0 true 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 true FALSE Object ID vars_ventil_4_restzeit TRUE DIVIDE 1 ventil_4_dauer 60 :00 0 true FALSE Object ID vars_ventil_4_restzeit_in_sek TRUE ventil_4_dauer 0 Gesamtlaufzeit EQ val vars_bewaesserung_aktiv FALSE Gesamtlaufzeit in Sek true 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 true 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 fuer 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 true FALSE Object ID vars_restlautzeit TRUE restlaufzeit_vis_min : restlaufzeit_vis_sek 0 Mail / Pushover / Alexa 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 vars_notify_mail TRUE FALSE val javascript.0.mailadressen.mailadresse_daniel info_text info_betreff EQ vars_notify_pushover TRUE .0 0 text info_text info_betreff Sprachausgabe EQ vars_notify_alexa TRUE NEQ info_endzeit_minute 00 true FALSE Object ID vars_notify_alexa_device TRUE Gartenbewässerung gestartet. ende um info_endzeit_stunde Uhr info_endzeit_minute und info_endzeit_stunde Sekunden 0 true FALSE Object ID vars_notify_alexa_device TRUE Gartenbewässerung gestartet. ende um info_endzeit_stunde Uhr und info_endzeit_stunde Sekunden 0 Stop EQ val vars_bewaesserung_aktiv FALSE EQ vars_notify_mail TRUE FALSE val javascript.0.mailadressen.mailadresse_daniel Gartenbewässerung beendet +++ hh:mm Uhr - Gartenbewässerung beendet +++ EQ vars_notify_pushover TRUE .0 0 +++ hh:mm Uhr - Gartenbewässerung beendet +++ EQ vars_notify_alexa TRUE true FALSE Object ID vars_notify_alexa_device TRUE Gartenbewässerung beendet. 0 Log Eintraege 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 EQ vars_notify_log TRUE +++ 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 zaehlen ne default vars_ventil_1_aktor default vars_ventil_2_aktor default vars_ventil_3_aktor default vars_ventil_4_aktor true FALSE Object ID vars_anzahl_aktive_ventile TRUE 0 0 true 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 Einshaltdauer setzen EQ vars_aktor_typ hm ON_TIME für Homematic false FALSE Object ID vars_ventil_1_aktor_ontime TRUE val vars_ventil_1_dauer 0 EQ vars_aktor_typ sonoff PulseTime für Sonoff FALSE text http:// vars_sonoff_ip /cm?cmnd=PulseTime1%20 ADD 100 1 val vars_ventil_1_dauer false FALSE Object ID vars_ventil_1_aktor TRUE 1000 true 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 Einshaltdauer setzen EQ vars_aktor_typ hm ON_TIME für Homematic false FALSE Object ID vars_ventil_2_aktor_ontime TRUE val vars_ventil_2_dauer 0 EQ vars_aktor_typ sonoff PulseTime für Sonoff FALSE text http:// vars_sonoff_ip /cm?cmnd=PulseTime2%20 ADD 100 1 val vars_ventil_2_dauer false FALSE Object ID vars_ventil_2_aktor TRUE 1000 true 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 Einshaltdauer setzen EQ vars_aktor_typ hm ON_TIME für Homematic false FALSE Object ID vars_ventil_3_aktor_ontime TRUE val vars_ventil_3_dauer 0 EQ vars_aktor_typ sonoff PulseTime für Sonoff FALSE text http:// vars_sonoff_ip /cm?cmnd=PulseTime3%20 ADD 100 1 val vars_ventil_3_dauer false FALSE Object ID vars_ventil_3_aktor TRUE 1000 true 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 Einshaltdauer setzen EQ vars_aktor_typ hm ON_TIME für Homematic false FALSE Object ID vars_ventil_4_aktor_ontime TRUE val vars_ventil_4_dauer 0 EQ vars_aktor_typ sonoff PulseTime für Sonoff FALSE text http:// vars_sonoff_ip /cm?cmnd=PulseTime4%20 ADD 100 1 val 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 true FALSE Object ID vars_aktives_ventil TRUE ventil_4 1000 EQ val vars_bewaesserung_aktiv FALSE true 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 true 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 true FALSE Object ID vars_restlautzeit TRUE restzeit_gesamt_min : restzeit_gesamt_sek 0 EQ val vars_restlautzeit_in_sek 0 true 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 true 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 true 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 true FALSE Object ID vars_ventil_1_restzeit TRUE restzeit_ventil_min :0 restzeit_ventil_sek 0 true 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 true 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 true 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 true FALSE Object ID vars_ventil_2_restzeit TRUE restzeit_ventil_min :0 restzeit_ventil_sek 0 true 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 true 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 true 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 true FALSE Object ID vars_ventil_3_restzeit TRUE restzeit_ventil_min :0 restzeit_ventil_sek 0 true 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 true 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 true 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 true FALSE Object ID vars_ventil_4_restzeit TRUE restzeit_ventil_min :0 restzeit_ventil_sek 0 true 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