id
arry
trenner
val
anlegen_in
anzahl_fenster_gekippt
alexa2_adapter_history_instanz_0
anzahl_fenster_offen
speicherort
anzahl_fenster_geschlossen
nachricht_ausgabe
alexa2_adapter_history_instanz_1
anzahl_fenster_gesamt
angesprochener_echo_instanz_0
objekt_id_fensteransage_eDP
liste_fenster_offen_gekippt
speak_volume_instanz_0
liste_fenster_gesamt
objekt_id_02_anzahl_fenster_offen_eDP
objekt_id_01_anzahl_fenster_gekippt_eDP
ansagelautstaerke
datenpruefung
angesprochener_echo_instanz_1
fenstervariante
liste_fenster_html
ansage
speak_volume_instanz_1
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   </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
9
.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
9
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
zur Auswahl in Objekt ID serialNumber klicken
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