id arry trenner val anlegen_in anzahl_fenster_gekippt alexa2_adapter_history_instanz_0 alexa2_adapter_history_instanz_1 anzahl_fenster_offen speicherort anzahl_fenster_geschlossen nachricht_ausgabe anzahl_fenster_gesamt angesprochener_echo_instanz_0 objekt_id_fensteransage_eDP angesprochener_echo_instanz_1 liste_fenster_offen_gekippt speak_volume_instanz_0 speak_volume_instanz_1 liste_fenster_gesamt objekt_id_02_anzahl_fenster_offen_eDP objekt_id_01_anzahl_fenster_gekippt_eDP ansagelautstaerke datenpruefung fenstervariante liste_fenster_html ansage html_text selektor fenster_offen ansage_einleitungssatz objekt_id_01alexa_eDP blockly_start_geraete_zaehlen_einlesen fenster_gekippt fenster_geschlossen objekt_id_05_offene_gekippte_fenster_liste_eDP objekt_id_05alexa_ssml_eDP objekt_id_09ende_ssml_eDP objekt_id_02hans_eDP wert telegram_benutzer objekt_id_06hans_ssml_eDP objekt_id_03vicki_eDP objekt_id_03_anzahl_fenster_geschlossen_eDP objekt_id_07vicki_ssml_eDP objekt_id_04conchita_eDP objekt_id_04_anzahl_fenster_gesamt_eDP objekt_id_08conchita_ssml_eDP objekt_id_04_1_anzahl_fenster_geoeffnet_gekippt_gesamt_eDP objekt_id_06_gesamte_fenster_liste_eDP objekt_id_07_html_fenster_liste_eDP 01_Anzahl_Fenster_gekippt_pfad 02_Anzahl_Fenster_offen_pfad 03_Anzahl_Fenster_geschlossen_pfad 04_Anzahl_Fenster_gesamt_pfad 04_1_anzahl_fenster_geoeffnet_und_gekippt_gesamt_pfad 05_offene_gekippte_Fenster_Liste_pfad 06_gesamt_Fenster_Liste_pfad 07_html_Fenster_Liste_pfad pfad_ansage_starten pfad_01alexa pfad_02hans pfad_03vicki pfad_04conchita pfad_05Alexa_ssml pfad_06Hans_ssml pfad_07Vicki_ssml pfad_08Conchita_ssml pfad_09_ssml_ende pfad_telegram_nachrichtenversand objekt_id_01_telegram_nachrichtenversand_fenster_zaehlen_eDP pfad_telegram_senden objekt_id_telegram_versenden existiert_DP cmV0dXJuIGV4aXN0c1N0YXRlKGlkKTs= Beschreibe diese Funktion … zaehlen Beschreibe diese Funktion … anzahl_fenster_gekippt 0 anzahl_fenster_offen 0 anzahl_fenster_geschlossen 0 anzahl_fenster_gesamt 0 liste_fenster_offen_gekippt liste_fenster_gesamt liste_fenster_html html_text <!DOCTYPE html><html lang="de"><head><title>Fenster</title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold">Fensterstatus</p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Änderung: custom TT.MM.JJJJ SS:mm:ss </p> <table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);"> <tr style="color:#0000FF"; font-weight: bold"><td>Fenster-Türen&ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> EQ fenstervariante TRUE fenster_offen selektor anzahl_fenster_gesamt 1 wert val fenster_offen EQ fenster_offen wert OPEN anzahl_fenster_offen 1 INSERT LAST liste_fenster_offen_gekippt fenster_offen geöffnet INSERT LAST liste_fenster_gesamt fenster_offen :geöffnet INSERT LAST liste_fenster_html fenster_offen <td><span style="color:#FF0000"> geöffnet </span> fenster_gekippt selektor wert val fenster_gekippt EQ fenster_gekippt wert TILTED anzahl_fenster_gekippt 1 INSERT LAST liste_fenster_offen_gekippt fenster_gekippt gekippt INSERT LAST liste_fenster_gesamt fenster_gekippt :gekippt INSERT LAST liste_fenster_html fenster_gekippt <td><span style="color:#0000FF"> gekippt </span> fenster_geschlossen selektor wert val fenster_geschlossen EQ fenster_geschlossen wert CLOSED anzahl_fenster_geschlossen 1 INSERT LAST liste_fenster_gesamt fenster_geschlossen :geschlossen INSERT LAST liste_fenster_html fenster_geschlossen <td>geschlossen EQ fenstervariante FALSE fenster_offen selektor anzahl_fenster_gesamt 1 EQ val fenster_offen TRUE anzahl_fenster_offen 1 INSERT LAST liste_fenster_offen_gekippt fenster_offen geöffnet INSERT LAST liste_fenster_gesamt fenster_offen :geöffnet INSERT LAST liste_fenster_html fenster_offen <td><span style="color:#FF0000"> geöffnet </span> fenster_geschlossen selektor EQ val fenster_geschlossen FALSE anzahl_fenster_geschlossen 1 INSERT LAST liste_fenster_gesamt fenster_geschlossen :geschlossen INSERT LAST liste_fenster_html fenster_geschlossen <td>geschlossen true FALSE Object ID objekt_id_01_anzahl_fenster_gekippt_eDP TRUE anzahl_fenster_gekippt 0 true FALSE Object ID objekt_id_02_anzahl_fenster_offen_eDP TRUE anzahl_fenster_offen 0 true FALSE Object ID objekt_id_03_anzahl_fenster_geschlossen_eDP TRUE anzahl_fenster_geschlossen 0 true FALSE Object ID objekt_id_04_anzahl_fenster_gesamt_eDP TRUE anzahl_fenster_gesamt 0 true FALSE Object ID objekt_id_04_1_anzahl_fenster_geoeffnet_gekippt_gesamt_eDP TRUE ADD 1 anzahl_fenster_gekippt 1 anzahl_fenster_offen 0 true FALSE Object ID objekt_id_05_offene_gekippte_fenster_liste_eDP TRUE TEXT 1 liste_fenster_offen_gekippt , 0 EQ liste_fenster_offen_gekippt true FALSE Object ID objekt_id_05_offene_gekippte_fenster_liste_eDP TRUE Alle Fenster oder Türen sind geschlossen. 0 true FALSE Object ID objekt_id_06_gesamte_fenster_liste_eDP TRUE liste_fenster_gesamt , 0 true FALSE Object ID objekt_id_07_html_fenster_liste_eDP TRUE html_text liste_fenster_html <tr><td> </table></body> 0 getParentName aWYoZ2V0T2JqZWN0KGlkLnN1YnN0cmluZygwLCBpZC5sYXN0SW5kZXhPZignLicpKSkpIHJldHVybiBnZXRPYmplY3QoaWQuc3Vic3RyaW5nKDAsIGlkLmxhc3RJbmRleE9mKCcuJykpKS5jb21tb24ubmFtZTsNCmVsc2UgcmV0dXJuIG51bGw7 Beschreibe diese Funktion … telegram_senden Beschreibe diese Funktion … ab hier Ausgabe AND EQ val objekt_id_02_anzahl_fenster_offen_eDP 1 EQ val objekt_id_01_anzahl_fenster_gekippt_eDP 0 nachricht_ausgabe Es ist ein Fenster geöffnet ☝️ \n \n TEXT 1 liste_fenster_offen_gekippt \n AND EQ val objekt_id_02_anzahl_fenster_offen_eDP 0 EQ val objekt_id_01_anzahl_fenster_gekippt_eDP 1 nachricht_ausgabe Es ist ein Fenster gekippt 👈 \n \n TEXT 1 liste_fenster_offen_gekippt \n AND EQ val objekt_id_02_anzahl_fenster_offen_eDP 1 EQ val objekt_id_01_anzahl_fenster_gekippt_eDP 1 nachricht_ausgabe Es ist ein Fenster gekippt 👈 \n Es ist ein Fenster geöffnet ☝️ \n \n TEXT 1 liste_fenster_offen_gekippt \n AND EQ val objekt_id_02_anzahl_fenster_offen_eDP 0 GT val objekt_id_01_anzahl_fenster_gekippt_eDP 1 nachricht_ausgabe Es sind val objekt_id_01_anzahl_fenster_gekippt_eDP Fenster gekippt 👈 \n \n TEXT 1 liste_fenster_offen_gekippt \n AND GT val objekt_id_02_anzahl_fenster_offen_eDP 1 EQ val objekt_id_01_anzahl_fenster_gekippt_eDP 0 nachricht_ausgabe Es sind val objekt_id_02_anzahl_fenster_offen_eDP Fenster geöffnet ☝️ \n \n TEXT 1 liste_fenster_offen_gekippt \n AND GT val objekt_id_02_anzahl_fenster_offen_eDP 1 EQ val objekt_id_01_anzahl_fenster_gekippt_eDP 1 nachricht_ausgabe Es ist ein Fenster gekippt 👈 \n Es sind val objekt_id_02_anzahl_fenster_offen_eDP Fenster geöffnet ☝️ \n \n TEXT 1 liste_fenster_offen_gekippt \n AND EQ val objekt_id_02_anzahl_fenster_offen_eDP 1 GT val objekt_id_01_anzahl_fenster_gekippt_eDP 1 nachricht_ausgabe Es sind val objekt_id_01_anzahl_fenster_gekippt_eDP Fenster gekippt 👈 \n Es ist ein Fenster geöffnet ☝️ \n \n TEXT 1 liste_fenster_offen_gekippt \n AND GT val objekt_id_02_anzahl_fenster_offen_eDP 1 GT val objekt_id_01_anzahl_fenster_gekippt_eDP 1 nachricht_ausgabe Es sind val objekt_id_01_anzahl_fenster_gekippt_eDP Fenster gekippt 👈 \n Es sind val objekt_id_02_anzahl_fenster_offen_eDP Fenster geöffnet ☝️ \n \n TEXT 1 liste_fenster_offen_gekippt \n AND EQ val objekt_id_02_anzahl_fenster_offen_eDP 0 EQ val objekt_id_01_anzahl_fenster_gekippt_eDP 0 nachricht_ausgabe ✅ Alle Fenster und Türen sind zu ✅ FALSE default text nachricht_ausgabe telegram_benutzer arry, trenner cmV0dXJuIGFycnkuam9pbih0cmVubmVyKTs= Beschreibe diese Funktion … alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa2_adapter_history_instanz_0 alexa2.0.History.serialNumber any default alexa2_adapter_history_instanz_0 AND EQ FIRST FROM_START alexa2_adapter_history_instanz_0 8 alexa2.0 OR FIRST FROM_START alexa2_adapter_history_instanz_0 8 .Echo-Devices. val alexa2_adapter_history_instanz_0 .Commands.ssml FIRST FROM_START alexa2_adapter_history_instanz_0 8 .Echo-Devices. val alexa2_adapter_history_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0 FIRST FROM_START alexa2_adapter_history_instanz_0 8 .Echo-Devices. val alexa2_adapter_history_instanz_0 .Commands.ssml speak_volume_instanz_0 FIRST FROM_START alexa2_adapter_history_instanz_0 8 .Echo-Devices. val alexa2_adapter_history_instanz_0 .Commands.speak-volume log ❗️Das angesprochene Gerät unterstützt kein ssml oder speak-volume❗️ log ❗️oder, die Instanz Alexa2.0 existiert nicht❗️ any default objekt_id_fensteransage_eDP EQ FIRST FROM_START alexa2_adapter_history_instanz_0 8 alexa2.0 false FALSE Object ID speak_volume_instanz_0 TRUE ansagelautstaerke 0 datenpruefung EQ val objekt_id_01_anzahl_fenster_gekippt_eDP 0 ansage_einleitungssatz val objekt_id_05_offene_gekippte_fenster_liste_eDP NEQ val objekt_id_01_anzahl_fenster_gekippt_eDP 0 ansage_einleitungssatz val objekt_id_05_offene_gekippte_fenster_liste_eDP ansage val objekt_id_01alexa_eDP val objekt_id_05alexa_ssml_eDP datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_02hans_eDP val objekt_id_06hans_ssml_eDP datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_03vicki_eDP val objekt_id_07vicki_ssml_eDP datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_04conchita_eDP val objekt_id_08conchita_ssml_eDP datenpruefung val objekt_id_09ende_ssml_eDP Sprachausgabe am ECHO false FALSE Object ID angesprochener_echo_instanz_0 TRUE ansage 0 stateText aWYoZ2V0T2JqZWN0KGlkKS5jb21tb24uc3RhdGVzKSByZXR1cm4gZ2V0T2JqZWN0KGlkKS5jb21tb24uc3RhdGVzW3ZhbF07CnJldHVybiBpZCArICcgaGF0IGtlaW5lbiBadXN0YW5kc3RleHQgISc7 Beschreibe diese Funktion … alexa2_adapter_instanz_1 wenn es eine zweite Instanz gibt, dann mit rechter Maustaste aktivieren.. alexa2_adapter_history_instanz_1 alexa2.1.History.serialNumber any default alexa2_adapter_history_instanz_1 AND EQ FIRST FROM_START alexa2_adapter_history_instanz_1 8 alexa2.1 OR FIRST FROM_START alexa2_adapter_history_instanz_1 8 .Echo-Devices. val alexa2_adapter_history_instanz_1 .Commands.ssml FIRST FROM_START alexa2_adapter_history_instanz_1 8 .Echo-Devices. val alexa2_adapter_history_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1 FIRST FROM_START alexa2_adapter_history_instanz_1 8 .Echo-Devices. val alexa2_adapter_history_instanz_1 .Commands.ssml speak_volume_instanz_1 FIRST FROM_START alexa2_adapter_history_instanz_1 8 .Echo-Devices. val alexa2_adapter_history_instanz_1 .Commands.speak-volume log ❗️Das angesprochene Gerät unterstützt kein ssml oder speak-volume❗️ log ❗️oder, die Instanz Alexa2.1 existiert nicht❗️ any default objekt_id_fensteransage_eDP EQ FIRST FROM_START alexa2_adapter_history_instanz_1 8 alexa2.1 false FALSE Object ID speak_volume_instanz_1 TRUE ansagelautstaerke 0 datenpruefung EQ val objekt_id_01_anzahl_fenster_gekippt_eDP 0 ansage_einleitungssatz val objekt_id_05_offene_gekippte_fenster_liste_eDP NEQ val objekt_id_01_anzahl_fenster_gekippt_eDP 0 ansage_einleitungssatz val objekt_id_05_offene_gekippte_fenster_liste_eDP ansage val objekt_id_01alexa_eDP val objekt_id_05alexa_ssml_eDP datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_02hans_eDP val objekt_id_06hans_ssml_eDP datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_03vicki_eDP val objekt_id_07vicki_ssml_eDP datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_04conchita_eDP val objekt_id_08conchita_ssml_eDP datenpruefung val objekt_id_09ende_ssml_eDP Sprachausgabe am ECHO false FALSE Object ID angesprochener_echo_instanz_1 TRUE ansage 0 Datenpunkte_anlegen LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKZnVuY3Rpb24gY3JlYXRlVXNlclN0YXRlcyh3aGVyZSwgZm9yY2UsIHN0YXRlc1RvQ3JlYXRlLCBjYWxsYmFjayA9IHVuZGVmaW5lZCkgewogCiAgICBjb25zdCBXQVJOID0gZmFsc2U7IC8vIE9ubHkgZm9yIDBfdXNlcmRhdGEuMDogVGhyb3dzIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBpcyBhbHJlYWR5IGV4aXN0aW5nIGFuZCBmb3JjZT1mYWxzZS4gRGVmYXVsdCBpcyBmYWxzZSwgc28gbm8gd2FybmluZyBpbiBsb2csIGlmIHN0YXRlIGV4aXN0cy4KICAgIGNvbnN0IExPR19ERUJVRyA9IGZhbHNlOyAvLyBUbyBkZWJ1ZyB0aGlzIGZ1bmN0aW9uLCBzZXQgdG8gdHJ1ZQogICAgLy8gUGVyIGlzc3VlICM0NzQgKGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzQpLCB0aGUgdXNlZCBmdW5jdGlvbiBzZXRPYmplY3QoKSBleGVjdXRlcyB0aGUgY2FsbGJhY2sgCiAgICAvLyBiZWZvcmUgdGhlIHN0YXRlIGlzIGFjdHVhbCBjcmVhdGVkLiBUaGVyZWZvcmUsIHdlIHVzZSBhIHNldFRpbWVvdXQgYW5kIGNvdW50ZXIgYXMgYSB3b3JrYXJvdW5kLgogICAgY29uc3QgREVMQVkgPSA1MDsgLy8gRGVsYXkgaW4gbWlsbGlzZWNvbmRzIChtcykuIEluY3JlYXNlIHRoaXMgdG8gMTAwLCBpZiBpdCBpcyBub3Qgd29ya2luZy4KCiAgICAvLyBWYWxpZGF0ZSAid2hlcmUiCiAgICBpZiAod2hlcmUuZW5kc1dpdGgoJy4nKSkgd2hlcmUgPSB3aGVyZS5zbGljZSgwLCAtMSk7IC8vIFJlbW92ZSB0cmFpbGluZyBkb3QKICAgIGlmICggKHdoZXJlLm1hdGNoKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSkpJHwwX3VzZXJkYXRhXC4wJCkvKSA9PSBudWxsKSApIHsKICAgICAgICBsb2coJ1RoaXMgc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgdG8gY3JlYXRlIHN0YXRlcyB1bmRlciBbJyArIHdoZXJlICsgJ10nLCAnZXJyb3InKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gUHJlcGFyZSAic3RhdGVzVG9DcmVhdGUiIHNpbmNlIHdlIGFsc28gYWxsb3cgYSBzaW5nbGUgc3RhdGUgdG8gY3JlYXRlCiAgICBpZighQXJyYXkuaXNBcnJheShzdGF0ZXNUb0NyZWF0ZVswXSkpIHN0YXRlc1RvQ3JlYXRlID0gW3N0YXRlc1RvQ3JlYXRlXTsgLy8gd3JhcCBpbnRvIGFycmF5LCBpZiBqdXN0IG9uZSBhcnJheSBhbmQgbm90IGluc2lkZSBhbiBhcnJheQoKICAgIC8vIEFkZCAid2hlcmUiIHRvIFNUQVRFU19UT19DUkVBVEUKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGVzVG9DcmVhdGUubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZXQgbHBQYXRoID0gc3RhdGVzVG9DcmVhdGVbaV1bMF0ucmVwbGFjZSgvXC4qXC4vZywgJy4nKTsgLy8gcmVwbGFjZSBhbGwgbXVsdGlwbGUgZG90cyBsaWtlICcuLicsICcuLi4nIHdpdGggYSBzaW5nbGUgJy4nCiAgICAgICAgbHBQYXRoID0gbHBQYXRoLnJlcGxhY2UoL14oKGphdmFzY3JpcHRcLihbMS05XVswLTldfFswLTldKVwuKXwwX3VzZXJkYXRhXC4wXC4pLywnJykgLy8gcmVtb3ZlIGFueSBqYXZhc2NyaXB0LnguIC8gMF91c2VyZGF0YS4wLiBmcm9tIGJlZ2lubmluZwogICAgICAgIGxwUGF0aCA9IHdoZXJlICsgJy4nICsgbHBQYXRoOyAvLyBhZGQgd2hlcmUgdG8gYmVnaW5uaW5nIG9mIHN0cmluZwogICAgICAgIHN0YXRlc1RvQ3JlYXRlW2ldWzBdID0gbHBQYXRoOwogICAgfQoKICAgIGlmICh3aGVyZSAhPSAnMF91c2VyZGF0YS4wJykgewogICAgICAgIC8vIENyZWF0ZSBTdGF0ZXMgdW5kZXIgamF2YXNjcmlwdC54CiAgICAgICAgbGV0IG51bVN0YXRlcyA9IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsKICAgICAgICBzdGF0ZXNUb0NyZWF0ZS5mb3JFYWNoKGZ1bmN0aW9uKGxvb3BQYXJhbSkgewogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gTm93IHdlIGFyZSBjcmVhdGluZyBuZXcgc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOwogICAgICAgICAgICBsZXQgbG9vcEluaXQgPSAobG9vcFBhcmFtWzFdWydkZWYnXSA9PSB1bmRlZmluZWQpID8gbnVsbCA6IGxvb3BQYXJhbVsxXVsnZGVmJ107IC8vIG1pbWljIHNhbWUgYmVoYXZpb3IgYXMgY3JlYXRlU3RhdGUgaWYgbm8gaW5pdCB2YWx1ZSBpcyBwcm92aWRlZAogICAgICAgICAgICBjcmVhdGVTdGF0ZShsb29wUGFyYW1bMF0sIGxvb3BJbml0LCBmb3JjZSwgbG9vcFBhcmFtWzFdLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIDBfdXNlcmRhdGEuMAogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7CiAgICAgICAgbGV0IGNvdW50ZXIgPSAtMTsKICAgICAgICBzdGF0ZXNUb0NyZWF0ZS5mb3JFYWNoKGZ1bmN0aW9uKGxvb3BQYXJhbSkgewogICAgICAgICAgICBjb3VudGVyICs9IDE7CiAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZyAoJ1tEZWJ1Z10gQ3VycmVudGx5IHByb2Nlc3NpbmcgZm9sbG93aW5nIHN0YXRlOiBbJyArIGxvb3BQYXJhbVswXSArICddJyk7CiAgICAgICAgICAgIGlmKCAoJChsb29wUGFyYW1bMF0pLmxlbmd0aCA+IDApICYmIChleGlzdHNTdGF0ZShsb29wUGFyYW1bMF0pKSApIHsgLy8gV29ya2Fyb3VuZCBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3OAogICAgICAgICAgICAgICAgLy8gU3RhdGUgaXMgZXhpc3RpbmcuCiAgICAgICAgICAgICAgICBpZiAoV0FSTiAmJiAhZm9yY2UpIGxvZygnU3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXSBpcyBhbHJlYWR5IGV4aXN0aW5nIGFuZCB3aWxsIG5vIGxvbmdlciBiZSBjcmVhdGVkLicsICd3YXJuJyk7CiAgICAgICAgICAgICAgICBpZiAoIVdBUk4gJiYgTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gU3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXSBpcyBhbHJlYWR5IGV4aXN0aW5nLiBPcHRpb24gZm9yY2UgKD1vdmVyd3JpdGUpIGlzIHNldCB0byBbJyArIGZvcmNlICsgJ10uJyk7CiAgICAgICAgICAgICAgICBpZighZm9yY2UpIHsKICAgICAgICAgICAgICAgICAgICAvLyBTdGF0ZSBleGlzdHMgYW5kIHNoYWxsIG5vdCBiZSBvdmVyd3JpdHRlbiBzaW5jZSBmb3JjZT1mYWxzZQogICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBkbyBub3QgcHJvY2VlZC4KICAgICAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQhJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB3YXMgcHJvdmlkZWQsIHdoaWNoIHdlIGFyZSBnb2luZyB0byBleGVjdXRlIG5vdy4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBvdXQgYW5kIGNvbnRpbnVlIHdpdGggbmV4dCBlbGVtZW50IGluIGxvb3AuCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTg0NTI5MjAvY29udGludWUtaW4tY3Vyc29yLWZvcmVhY2gKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IC8vIGlmKCFmb3JjZSkKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU3RhdGUgaXMgbm90IGV4aXN0aW5nIG9yIGZvcmNlID0gdHJ1ZSwgc28gd2UgYXJlIGNvbnRpbnVpbmcgdG8gY3JlYXRlIHRoZSBzdGF0ZSB0aHJvdWdoIHNldE9iamVjdCgpLgogICAgICAgICAgICBsZXQgb2JqID0ge307CiAgICAgICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgICAgICBvYmouY29tbW9uID0gbG9vcFBhcmFtWzFdOwogICAgICAgICAgICBzZXRPYmplY3QobG9vcFBhcmFtWzBdLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3QgZm9yIHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ106ICcgKyBlcnIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gTm93IHdlIGFyZSBjcmVhdGluZyBuZXcgc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXScpCiAgICAgICAgICAgICAgICAgICAgbGV0IGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICcnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBsb29wUGFyYW1bMV0uZGVmOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShsb29wUGFyYW1bMF0sIGluaXQsIHRydWUsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIHNldFN0YXRlIGR1cmNoZ2Vmw7xocnQ6ICcgKyBsb29wUGFyYW1bMF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgcHJvY2Vzc2VkLicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEZ1bmN0aW9uIHRvIGNhbGxiYWNrIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9LCBERUxBWSArICgyMCAqIGNvdW50ZXIpICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfQp9CgpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICAvL0FsZXhhIFN0aW1tZW4KICAgIFsnQWxleGFfQW5zYWdlbi5TdGltbWVuLjAxQWxleGEnLCB7J25hbWUnOicwMUFsZXhhJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICJBbGV4YSIsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwKICAgIFsnQWxleGFfQW5zYWdlbi5TdGltbWVuLjAySGFucycsIHsnbmFtZSc6JzAySGFucycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkhhbnMiLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sCiAgICBbJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4wM1ZpY2tpJywgeyduYW1lJzonMDNWaWNraScsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIlZpY2tpIiwic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLAogICAgWydBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDRDb25jaGl0YScsIHsnbmFtZSc6JzA0Q29uY2hpdGEnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJDb25jaGl0YSIsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwKICAgIFsnQWxleGFfQW5zYWdlbi5TdGltbWVuLjA1QWxleGFfc3NtbCcgLHsnbmFtZSc6JzA1QWxleGFfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iQWxleGEiPicgfV0sCiAgICBbJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4wNkhhbnNfc3NtbCcgLHsnbmFtZSc6JzA2SGFuc19zc21sJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonPHNwZWFrPjx2b2ljZSBuYW1lPSJIYW5zIj4nIH1dLAogICAgWydBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDdWaWNraV9zc21sJyAseyduYW1lJzonMDdWaWNraV9zc21sJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonPHNwZWFrPjx2b2ljZSBuYW1lPSJWaWNraSI+JyB9XSwKICAgIFsnQWxleGFfQW5zYWdlbi5TdGltbWVuLjA4Q29uY2hpdGFfc3NtbCcgLHsnbmFtZSc6JzA4Q29uY2hpdGFfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iQ29uY2hpdGEiPicgfV0sCiAgICBbJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4wOXNzbWxfZW5kZScsIHsnbmFtZSc6JzA5c3NtbF9lbmRlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonPC92b2ljZT48L3NwZWFrPicgfV0sCiAgICBbJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4xMEFsZXhhX1N0aW1tZW53ZWNoc2VsX3NzbWwnICx7J25hbWUnOicxMEFsZXhhX1N0aW1tZW53ZWNoc2VsX3NzbWwnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOic8L3ZvaWNlPjx2b2ljZSBuYW1lPSJBbGV4YSI+JyB9XSwKICAgIFsnQWxleGFfQW5zYWdlbi5TdGltbWVuLjExSGFuc19TdGltbWVud2VjaHNlbF9zc21sJywgeyduYW1lJzonMTFIYW5zX1N0aW1tZW53ZWNoc2VsX3NzbWwnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOic8L3ZvaWNlPjx2b2ljZSBuYW1lPSJIYW5zIj4nIH1dLAogICAgWydBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMTJWaWNraV9TdGltbWVud2VjaHNlbF9zc21sJywgeyduYW1lJzonMTJWaWNraV9TdGltbWVud2VjaHNlbF9zc21sJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonPC92b2ljZT48dm9pY2UgbmFtZT0iVmlja2kiPicgfV0sCiAgICBbJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4xM0NvbmNoaXRhX1N0aW1tZW53ZWNoc2VsX3NzbWwnLCB7J25hbWUnOicxM0NvbmNoaXRhX1N0aW1tZW53ZWNoc2VsX3NzbWwnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOic8L3ZvaWNlPjx2b2ljZSBuYW1lPSJDb25jaGl0YSI+JyB9XSwKICAgIFsnQWxleGFfQW5zYWdlbi5TdGltbWVuLjE0Zmx1ZXN0ZXJuX2FuZmFuZycsIHsnbmFtZSc6JzE0Zmx1ZXN0ZXJuX2FuZmFuZycsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48YW1hem9uOmVmZmVjdCBuYW1lPSJ3aGlzcGVyZWQiPicgfV0sCiAgICBbJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4xNWZsdWVzdGVybl9lbmRlJywgeyduYW1lJzonMTVmbHVlc3Rlcm5fZW5kZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzwvYW1hem9uOmVmZmVjdD48L3NwZWFrPicgfV0sCiAgICAvL0Fuc2FnZQogICAgWydBbGV4YV9BbnNhZ2VuLkFuc2FnZW4uMDlGZW5zdGVyYW5zYWdlJywgeyduYW1lJzogJzA5RmVuc3RlcmFuc2FnZScsJ3R5cGUnOiAnYm9vbGVhbicsICdyZWFkJzogdHJ1ZSwgJ3dyaXRlJzogdHJ1ZSwgJ3JvbGUnOiAnYnV0dG9uJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICIwOUZlbnN0ZXJhbnNhZ2UiLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIAogICAgLy9HZXJhZXRlIHphZWhsZW4KICAgIFsnR2VyYWV0ZV96YWVobGVuLkZlbnN0ZXJfemFlaGxlbi4wMV9BbnphaGxfRmVuc3Rlcl9nZWtpcHB0JywgeyduYW1lJzonMDFfQW56YWhsX0ZlbnN0ZXJfZ2VraXBwdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6J0ZlbnN0ZXInLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW4uRmVuc3Rlcl96YWVobGVuLjAyX0FuemFobF9GZW5zdGVyX29mZmVuJywgeyduYW1lJzonMDJfQW56YWhsX0ZlbnN0ZXJfb2ZmZW4nLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOidGZW5zdGVyJywgJ2RlZic6MCB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuLkZlbnN0ZXJfemFlaGxlbi4wM19BbnphaGxfRmVuc3Rlcl9nZXNjaGxvc3NlbicsIHsnbmFtZSc6JzAzX0FuemFobF9GZW5zdGVyX2dlc2NobG9zc2VuJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonRmVuc3RlcicsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbi5GZW5zdGVyX3phZWhsZW4uMDRfQW56YWhsX0ZlbnN0ZXJfZ2VzYW10JywgeyduYW1lJzonMDRfQW56YWhsX0ZlbnN0ZXJfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonRmVuc3RlcicsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbi5GZW5zdGVyX3phZWhsZW4uMDRfMV9BbnphaGxfRmVuc3Rlcl9nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgeyduYW1lJzonMDRfMV9BbnphaGxfRmVuc3Rlcl9nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonRmVuc3RlcicsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbi5GZW5zdGVyX3phZWhsZW4uMDVfb2ZmZW5lX2dla2lwcHRlX0ZlbnN0ZXJfTGlzdGUnLCB7J25hbWUnOicwNV9vZmZlbmVfZ2VraXBwdGVfRmVuc3Rlcl9MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbi5GZW5zdGVyX3phZWhsZW4uMDZfZ2VzYW10ZV9GZW5zdGVyX0xpc3RlJywgeyduYW1lJzonMDZfZ2VzYW10ZV9GZW5zdGVyX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuLkZlbnN0ZXJfemFlaGxlbi4wN19odG1sX0ZlbnN0ZXJfTGlzdGUnLCB7J25hbWUnOicwN19odG1sX0ZlbnN0ZXJfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgLy9UZWxlZ3JhbSBOYWNocmljaHRlbnZlcnNhbmQKICAgIFsnTmFjaHJpY2h0ZW52ZXJzYW5kLlRlbGVncmFtLjAxVGVsZWdyYW1fTmFjaHJpY2h0ZW52ZXJzYW5kX0ZlbnN0ZXJfemFlaGxlbicsIHsnbmFtZSc6JzAxVGVsZWdyYW1fTmFjaHJpY2h0ZW52ZXJzYW5kX0ZlbnN0ZXJfemFlaGxlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sCiAgICBbJ05hY2hyaWNodGVudmVyc2FuZC5UZWxlZ3JhbS4wMVRlbGVncmFtX0ZlbnN0ZXJzdGF0dXNfc2VuZGVuJywgeyduYW1lJzonMDFUZWxlZ3JhbV9GZW5zdGVyc3RhdHVzX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIjAxVGVsZWdyYW1fRmVuc3RlcnN0YXR1cyIsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCiAgICAKXTsKCmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbiwgdHJ1ZSwgc3RhdGVzVG9DcmVhdGUsIGZ1bmN0aW9uKCl7OwogICAgbWFpbigpOwp9KTsKCgo= Datenpunkte erstellen Forum Link Geraete zaehlen: https://forum.iobroker.net/post/346230 Forum Link Ansagen: https://forum.iobroker.net/post/273896 Hier 0_userdata.0 oder javascript.x eintagen .x steht fuer die Instanznummer 0_userdata.0 main Hier alle geöffneten Bausteine an die eigene Installation und Wünsche anpassen, Speicherort eintragen speicherort 0_userdata.0 fenstervariante geschlossen,gekippt,geöffnet = wahr fenstervariante geschlossen,geöffnet = false bitte wahr oder falsch einstellen fenstervariante TRUE Selektor an die eigene Aufzählung anpassen selektor [state.id=STATE](functions='Fenster') Blockly Start Geraete zaehlen einlesen blockly_start_geraete_zaehlen_einlesen 5 sec Variablen Geraete zaehlen ne default selektor anzahl_fenster_gekippt 0 anzahl_fenster_offen 0 anzahl_fenster_geschlossen 0 anzahl_fenster_gesamt 0 liste_fenster_offen_gekippt liste_fenster_gesamt liste_fenster_html 01_Anzahl_Fenster_gekippt_pfad .Geraete_zaehlen.Fenster_zaehlen.01_Anzahl_Fenster_gekippt objekt_id_01_anzahl_fenster_gekippt_eDP speicherort 01_Anzahl_Fenster_gekippt_pfad 02_Anzahl_Fenster_offen_pfad .Geraete_zaehlen.Fenster_zaehlen.02_Anzahl_Fenster_offen objekt_id_02_anzahl_fenster_offen_eDP speicherort 02_Anzahl_Fenster_offen_pfad 03_Anzahl_Fenster_geschlossen_pfad .Geraete_zaehlen.Fenster_zaehlen.03_Anzahl_Fenster_geschlossen objekt_id_03_anzahl_fenster_geschlossen_eDP speicherort 03_Anzahl_Fenster_geschlossen_pfad 04_Anzahl_Fenster_gesamt_pfad .Geraete_zaehlen.Fenster_zaehlen.04_Anzahl_Fenster_gesamt objekt_id_04_anzahl_fenster_gesamt_eDP speicherort 04_Anzahl_Fenster_gesamt_pfad 04_1_anzahl_fenster_geoeffnet_und_gekippt_gesamt_pfad .Geraete_zaehlen.Fenster_zaehlen.04_1_Anzahl_Fenster_geoeffnet_und_gekippt_gesamt objekt_id_04_1_anzahl_fenster_geoeffnet_gekippt_gesamt_eDP speicherort 04_1_anzahl_fenster_geoeffnet_und_gekippt_gesamt_pfad 05_offene_gekippte_Fenster_Liste_pfad .Geraete_zaehlen.Fenster_zaehlen.05_offene_gekippte_Fenster_Liste objekt_id_05_offene_gekippte_fenster_liste_eDP speicherort 05_offene_gekippte_Fenster_Liste_pfad 06_gesamt_Fenster_Liste_pfad .Geraete_zaehlen.Fenster_zaehlen.06_gesamte_Fenster_Liste objekt_id_06_gesamte_fenster_liste_eDP speicherort 06_gesamt_Fenster_Liste_pfad 07_html_Fenster_Liste_pfad .Geraete_zaehlen.Fenster_zaehlen.07_html_Fenster_Liste objekt_id_07_html_fenster_liste_eDP speicherort 07_html_Fenster_Liste_pfad Variablen fuer Ansage Ansagelautstaerke bis 100 auswaehlen ansagelautstaerke 60 pfad_ansage_starten .Alexa_Ansagen.Ansagen.09Fensteransage objekt_id_fensteransage_eDP speicherort pfad_ansage_starten pfad_01alexa .Alexa_Ansagen.Stimmen.01Alexa objekt_id_01alexa_eDP speicherort pfad_01alexa pfad_02hans .Alexa_Ansagen.Stimmen.02Hans objekt_id_02hans_eDP speicherort pfad_02hans pfad_03vicki .Alexa_Ansagen.Stimmen.03Vicki objekt_id_03vicki_eDP speicherort pfad_03vicki pfad_04conchita .Alexa_Ansagen.Stimmen.04Conchita objekt_id_04conchita_eDP speicherort pfad_04conchita pfad_05Alexa_ssml .Alexa_Ansagen.Stimmen.05Alexa_ssml objekt_id_05alexa_ssml_eDP speicherort pfad_05Alexa_ssml pfad_06Hans_ssml .Alexa_Ansagen.Stimmen.06Hans_ssml objekt_id_06hans_ssml_eDP speicherort pfad_06Hans_ssml pfad_07Vicki_ssml .Alexa_Ansagen.Stimmen.07Vicki_ssml objekt_id_07vicki_ssml_eDP speicherort pfad_07Vicki_ssml pfad_08Conchita_ssml .Alexa_Ansagen.Stimmen.08Conchita_ssml objekt_id_08conchita_ssml_eDP speicherort pfad_08Conchita_ssml pfad_09_ssml_ende .Alexa_Ansagen.Stimmen.09ssml_ende objekt_id_09ende_ssml_eDP speicherort pfad_09_ssml_ende ansage_einleitungssatz Hier der Fensterstatus für Dich, true default objekt_id_01alexa_eDP true FALSE Object ID objekt_id_02hans_eDP FALSE 0 true FALSE Object ID objekt_id_03vicki_eDP FALSE 0 true FALSE Object ID objekt_id_04conchita_eDP FALSE 0 true default objekt_id_02hans_eDP true FALSE Object ID objekt_id_01alexa_eDP FALSE 0 true FALSE Object ID objekt_id_03vicki_eDP FALSE 0 true FALSE Object ID objekt_id_04conchita_eDP FALSE 0 true default objekt_id_03vicki_eDP true FALSE Object ID objekt_id_01alexa_eDP FALSE 0 true FALSE Object ID objekt_id_02hans_eDP FALSE 0 true FALSE Object ID objekt_id_04conchita_eDP FALSE 0 true default objekt_id_04conchita_eDP true FALSE Object ID objekt_id_01alexa_eDP FALSE 0 true FALSE Object ID objekt_id_02hans_eDP FALSE 0 true FALSE Object ID objekt_id_03vicki_eDP FALSE 0 ne default objekt_id_01alexa_eDP default objekt_id_02hans_eDP default objekt_id_03vicki_eDP default objekt_id_04conchita_eDP AND AND val objekt_id_01alexa_eDP val objekt_id_02hans_eDP AND val objekt_id_03vicki_eDP val objekt_id_04conchita_eDP true FALSE Object ID objekt_id_01alexa_eDP TRUE 0 Variablen Telegram Telegram Nutzer aus Adapter eintragen telegram_benutzer Heiko pfad_telegram_nachrichtenversand .Nachrichtenversand.Telegram.01Telegram_Nachrichtenversand_Fenster_zaehlen objekt_id_01_telegram_nachrichtenversand_fenster_zaehlen_eDP speicherort pfad_telegram_nachrichtenversand pfad_telegram_senden .Nachrichtenversand.Telegram.01Telegram_Fensterstatus_senden objekt_id_telegram_versenden speicherort pfad_telegram_senden ne default objekt_id_05_offene_gekippte_fenster_liste_eDP EQ val objekt_id_01_telegram_nachrichtenversand_fenster_zaehlen_eDP TRUE ne default objekt_id_01_telegram_nachrichtenversand_fenster_zaehlen_eDP EQ val objekt_id_01_telegram_nachrichtenversand_fenster_zaehlen_eDP TRUE FALSE Markdown text Der Versand der Telegram Liste *Fensterstatus* wurde *eingeschaltet* . ✅ telegram_benutzer FALSE Markdown text Der Versand der Telegram Liste *Fensterstatus* wurde *ausgeschaltet* . ❌ telegram_benutzer any default objekt_id_telegram_versenden