- Home
- Deutsch
- Skripten / Logik
- Blockly
- Subfunktion in Blockly
Subfunktion in Blockly
-
Hallo zusammen und Frohes Neues Jahr,
ich bastele mir gerade eine Alarmanlage mit Xiaomi-Komponenten und Alexa zusammen.
Zwei Fragen dazu:
-
Ich möchte für die Sprachausgabe temporär die Alexa-Lautstärke verändern und danach wiederherstellen. Das an vielen verschiedenen Programmteilen zu machen finde ich suboptimal.
Mit "normalen" Programmiersprachen würde ich wohl eine Subfunktion mit Parameter für die gewünschten Lautstärke und einem Pointer auf den Text anlegen. Kann man das auch per Blockly machen? -
Das Blinken vom Xiaomi-Gateway (langsam in Blau für Aktiv, Schnell in Rot für Alarm) klappt nicht so wirklich. Manchmal geht es, aber irgendwie nicht stabil und nicht im gewünschten Zyklus/Farbe. Gibt es dazu Erfahrungswerte, was man dem Ding zumuten darf?
Danke
-
-
@Tottbeck sagte in Subfunktion in Blockly:
Ich möchte für die Sprachausgabe temporär die Alexa-Lautstärke verändern und danach wiederherstellen.
genau das macht dieser Datenpunkt. Volume to use for speak commands. Du musst den nur für diese Ansage setzen, danach geht der selbst wieder auf die sonst eingestellte Lautstärke zurück.
-
@Tottbeck sagte in Subfunktion in Blockly:
temporär die Alexa-Lautstärke verändern
Probiere mal das hier. Das nutze ich in ähnlicher Form in vielen Blocklys. Hier wird geschaut welcher ECHO angesprochen wurde und genau auf dem angesprochenen wieder geantwortet. (es sei denn es sind mehrere ECHOS in Hörweite und ein anderer fühlt sich angesprochen) In Räumen, wo mich nur ein ECHO hören kann funktioniert es zuverlässig bei mir.
Diesen Trigger habe ich nur zum Test da drinn.Importiere das mal und starte das Blockly. Anschließend sagst Du mal Testansage. (dann sollte die Antwort kommen)
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="]8CjUu1tTXk^pZvPD9pk">Lautstaerke</variable> <variable type="" id="tx`]izPXI!BeK19V`CX$">angesprochener_echo</variable> <variable type="" id="}tfHo!d;DNiy8lns,/nq">speak_volume</variable> <variable type="" id="xn1_(a%|e4G}G4FdbhX:">Ansage</variable> </variables> <block type="on" id="pPAe?D9#C-MzNdYWPK]r" x="38" y="63"> <field name="OID">alexa2.0.History.summary</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="fQlWBQZN^e.:DrM[^7{4"> <value name="IF0"> <block type="logic_compare" id="2pJO@[Vtpx6B{6|hU{AM"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="DyA~MCr`D%W17,P!,xZs"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.summary</field> </block> </value> <value name="B"> <block type="text" id="%4nBc3D)J=jtRdxt$XgL"> <field name="TEXT">testansage</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id=".}l{$)R}!so3?49}ZI29"> <field name="VAR" id="]8CjUu1tTXk^pZvPD9pk" variabletype="">Lautstaerke</field> <value name="VALUE"> <block type="math_number" id="w!aFM4SyFphGj^,/nlyu"> <field name="NUM">100</field> </block> </value> <next> <block type="variables_set" id="raHp)T;G6o1nDaQZ5Qrg"> <field name="VAR" id="tx`]izPXI!BeK19V`CX$" variabletype="">angesprochener_echo</field> <value name="VALUE"> <block type="text_join" id="q`1!?SO4KN9hG:/?YC1L"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="lG5cq|_e-SYygMARlNe%"> <field name="TEXT">alexa2.0.Echo-Devices.</field> </block> </value> <value name="ADD1"> <block type="get_value" id="M7plEDg{8pq2=J9a2fzQ"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.serialNumber</field> </block> </value> <value name="ADD2"> <block type="text" id="v.6VG(Lxwxo.[IIHs$U="> <field name="TEXT">.Commands.speak</field> </block> </value> </block> </value> <next> <block type="variables_set" id="N?jvkadzp3l@_Na$GSh3"> <field name="VAR" id="}tfHo!d;DNiy8lns,/nq" variabletype="">speak_volume</field> <value name="VALUE"> <block type="text_join" id="2;bG:Tv$~s+Itqhld@ML"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="U0%on0@O$stDed%wbZLS"> <field name="TEXT">alexa2.0.Echo-Devices.</field> </block> </value> <value name="ADD1"> <block type="get_value" id="F;9-S~mvqb0GUKsf@iKm"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.serialNumber</field> </block> </value> <value name="ADD2"> <block type="text" id=".(-6vYavAe:;F~Wr[qy!"> <field name="TEXT">.Commands.speak-volume</field> </block> </value> </block> </value> <next> <block type="variables_set" id="XQx[6n!+nUQ];R7;`1$a"> <field name="VAR" id="xn1_(a%|e4G}G4FdbhX:" variabletype="">Ansage</field> <value name="VALUE"> <block type="text" id="3go3)pi-E4Nt~0H{)8)^"> <field name="TEXT">Ich teste jetzt die Lautstärke mit dem Wert 100. Nach dieser Ansage stellt sich der Wert wieder zurück auf den vorher eingestellten Wert.</field> </block> </value> <next> <block type="control_ex" id="@.Ynq`]k]!w}k*GMj~[!" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hb?Q/-%_9A^!+jRfuTnL"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="(kZn44O^xPC@K:O/D*lO"> <field name="VAR" id="}tfHo!d;DNiy8lns,/nq" variabletype="">speak_volume</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="Uo[{s0o3{[`(35T92ci2"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="I=Z6pmb=)Mwn25%B:!cu"> <field name="VAR" id="]8CjUu1tTXk^pZvPD9pk" variabletype="">Lautstaerke</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="6ncG2Nes+=ucX9m]Q-LH"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="5$O:dbv;*Ncoc7n00s`w" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hb?Q/-%_9A^!+jRfuTnL"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="hMVRJeB$V+.jktBW.6DP"> <field name="VAR" id="tx`]izPXI!BeK19V`CX$" variabletype="">angesprochener_echo</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="Uo[{s0o3{[`(35T92ci2"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="_UExVH`$/=Sjy86Hb$%X"> <field name="VAR" id="xn1_(a%|e4G}G4FdbhX:" variabletype="">Ansage</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="cLl){TAE+8[,|ov4ALY+"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </xml>
-
@dslraser
und hier noch ein Beispiel was Du über ssml so anstellen kannst. (hier werden einige Datenpunkte erstellt)
Auch hier funktioniert das mit der Lautstärke.Auch hier sage mal Testansage zu Alexa.
(das erste Blockly von oben muß deaktiviert sein. Das habe ich in diesem Export als Beispiel deaktiviert drinn gelassen.)<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="]8CjUu1tTXk^pZvPD9pk">Lautstaerke</variable> <variable type="" id="tx`]izPXI!BeK19V`CX$">angesprochener_echo</variable> <variable type="" id="hsYte9@o`T2BDaS,~4hu">alexa_voice</variable> <variable type="" id="}tfHo!d;DNiy8lns,/nq">speak_volume</variable> <variable type="" id="^$:ikT~4TjYuk|1umMYe">hans_voice</variable> <variable type="" id="xn1_(a%|e4G}G4FdbhX:">Ansage</variable> <variable type="" id="H/)RG7L1z9=:IM[[N)s]">vicki_voice</variable> <variable type="" id=".Ef/-7s*/H3{8G|ut#TF">conchita_voice</variable> <variable type="" id="h$;}IKI;/5Nr%M?LEdX]">ssml_ende</variable> <variable type="" id=",8hPjyuv!|v-;xyG2[GM">stimmenwechsel_alexa</variable> <variable type="" id="1R[1|dIw2YY/SWSjV8vi">stimmenwechsel_hans</variable> <variable type="" id="hVUr^m=0SqBl!qr4l}8a">stimmenwechsel_vicki</variable> <variable type="" id="5LniT)a9cR_h6Mo!t*1N">stimmenwechsel_conchita</variable> <variable type="" id="eHmEd,;db!BBO)-s0Y{Z">fluestern_anfang</variable> <variable type="" id="XITSHPBx:4U5JEzlW6ov">fluestern_ende</variable> <variable type="" id="g)Ql[6CLA*U1}0AW@%59">Ansage2</variable> </variables> <block type="procedures_defcustomnoreturn" id="|YOBZy0(J_8~^4VAn@z%" x="37" y="-38"> <mutation statements="false"></mutation> <field name="NAME">Datenpunkte_anlegen</field> <field name="SCRIPT">Ly8jIyMjIyMjIyMjIyMjIyMtLS1hdXNrb21tZW50aWVydCBBbmZhbmctLS0jIyMjIyMjIyMjIyMjIyMKLyovLyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0tQWxleGEgRGF0ZW5wdW5rdGUgYW5sZWdlbi0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMTAgPSAnQWxleGFfQW5zYWdlbi5TdGltbWVuLjAxQWxleGEnOwpjb25zdCBkdHAwMTAgPSB7dHlwZTogJ2Jvb2xlYW4nLCByZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSwgbmFtZTogJzAxQWxleGEnLHJvbGU6ICdzd2l0Y2gnLCJzbWFydE5hbWUiOiB7ImRlIjogIkFsZXhhIiwic21hcnRUeXBlIjogIlNXSVRDSCJ9fTsKIApmdW5jdGlvbiBjcmVhdGVEcDAxMChpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxMCgnMF91c2VyZGF0YS4wLicgKyBkcDAxMCwgZHRwMDEwKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxMSA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDJIYW5zJzsKY29uc3QgZHRwMDExID0ge3R5cGU6ICdib29sZWFuJywgcmVhZDogdHJ1ZSwgd3JpdGU6IHRydWUsIG5hbWU6ICcwMkhhbnMnLHJvbGU6ICdzd2l0Y2gnLCJzbWFydE5hbWUiOiB7ImRlIjogIkhhbnMiLCJzbWFydFR5cGUiOiAiU1dJVENIIn19OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDExKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxMSgnMF91c2VyZGF0YS4wLicgKyBkcDAxMSwgZHRwMDExKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxMiA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDNWaWNraSc7CmNvbnN0IGR0cDAxMiA9IHt0eXBlOiAnYm9vbGVhbicsIHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlLCBuYW1lOiAnMDNWaWNraScscm9sZTogJ3N3aXRjaCcsInNtYXJ0TmFtZSI6IHsiZGUiOiAiVmlja2kiLCJzbWFydFR5cGUiOiAiU1dJVENIIn19OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDEyKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxMignMF91c2VyZGF0YS4wLicgKyBkcDAxMiwgZHRwMDEyKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxMyA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDRDb25jaGl0YSc7CmNvbnN0IGR0cDAxMyA9IHt0eXBlOiAnYm9vbGVhbicsIHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlLCBuYW1lOiAnMDRDb25jaGl0YScscm9sZTogJ3N3aXRjaCcsInNtYXJ0TmFtZSI6IHsiZGUiOiAiQ29uY2hpdGEiLCJzbWFydFR5cGUiOiAiU1dJVENIIn19OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDEzKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxMygnMF91c2VyZGF0YS4wLicgKyBkcDAxMywgZHRwMDEzKTsqLy8vIyMjIyMjIyMjIyMjIyMjLS0tYXVza29tbWVudGllcnQgRW5kZS0tLSMjIyMjIyMjIyMjIyMjIwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDE0ID0gJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4wNUFsZXhhX3NzbWwnOwpjb25zdCBkdHAwMTQgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA1QWxleGFfc3NtbCcscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDE0KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICc8c3BlYWs+PHZvaWNlIG5hbWU9IkFsZXhhIj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDE0KCcwX3VzZXJkYXRhLjAuJyArIGRwMDE0LCBkdHAwMTQpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDE1ID0gJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4wNkhhbnNfc3NtbCc7CmNvbnN0IGR0cDAxNSA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMDZIYW5zX3NzbWwnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDAxNShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnPHNwZWFrPjx2b2ljZSBuYW1lPSJIYW5zIj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDE1KCcwX3VzZXJkYXRhLjAuJyArIGRwMDE1LCBkdHAwMTUpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDE2ID0gJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4wN1ZpY2tpX3NzbWwnOwpjb25zdCBkdHAwMTYgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA3Vmlja2lfc3NtbCcscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDE2KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICc8c3BlYWs+PHZvaWNlIG5hbWU9IlZpY2tpIj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDE2KCcwX3VzZXJkYXRhLjAuJyArIGRwMDE2LCBkdHAwMTYpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDE3ID0gJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4wOENvbmNoaXRhX3NzbWwnOwpjb25zdCBkdHAwMTcgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA4Q29uY2hpdGFfc3NtbCcscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDE3KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICc8c3BlYWs+PHZvaWNlIG5hbWU9IkNvbmNoaXRhIj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDE3KCcwX3VzZXJkYXRhLjAuJyArIGRwMDE3LCBkdHAwMTcpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDE4ID0gJ0FsZXhhX0Fuc2FnZW4uU3RpbW1lbi4wOXNzbWxfZW5kZSc7CmNvbnN0IGR0cDAxOCA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMDlzc21sX2VuZGUnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDAxOChpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnPC92b2ljZT48L3NwZWFrPic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAwMTgoJzBfdXNlcmRhdGEuMC4nICsgZHAwMTgsIGR0cDAxOCk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMTkgPSAnQWxleGFfQW5zYWdlbi5TdGltbWVuLjEwQWxleGFfU3RpbW1lbndlY2hzZWxfc3NtbCc7CmNvbnN0IGR0cDAxOSA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTBBbGV4YV9TdGltbWVud2VjaHNlbF9zc21sJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAwMTkoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJzwvdm9pY2U+PHZvaWNlIG5hbWU9IkFsZXhhIj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDE5KCcwX3VzZXJkYXRhLjAuJyArIGRwMDE5LCBkdHAwMTkpOwoKY29uc3QgZHAwMjAgPSAnQWxleGFfQW5zYWdlbi5TdGltbWVuLjExSGFuc19TdGltbWVud2VjaHNlbF9zc21sJzsKY29uc3QgZHRwMDIwID0ge3R5cGU6ICdzdHJpbmcnLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICcxMUhhbnNfU3RpbW1lbndlY2hzZWxfc3NtbCcscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDIwKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICc8L3ZvaWNlPjx2b2ljZSBuYW1lPSJIYW5zIj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDIwKCcwX3VzZXJkYXRhLjAuJyArIGRwMDIwLCBkdHAwMjApOwoKY29uc3QgZHAwMjEgPSAnQWxleGFfQW5zYWdlbi5TdGltbWVuLjEyVmlja2lfU3RpbW1lbndlY2hzZWxfc3NtbCc7CmNvbnN0IGR0cDAyMSA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTJWaWNraV9TdGltbWVud2VjaHNlbF9zc21sJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAwMjEoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJzwvdm9pY2U+PHZvaWNlIG5hbWU9IlZpY2tpIj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDIxKCcwX3VzZXJkYXRhLjAuJyArIGRwMDIxLCBkdHAwMjEpOwoKY29uc3QgZHAwMjIgPSAnQWxleGFfQW5zYWdlbi5TdGltbWVuLjEzQ29uY2hpdGFfU3RpbW1lbndlY2hzZWxfc3NtbCc7CmNvbnN0IGR0cDAyMiA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTNDb25jaGl0YV9TdGltbWVud2VjaHNlbF9zc21sJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAwMjIoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJzwvdm9pY2U+PHZvaWNlIG5hbWU9IkNvbmNoaXRhIj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDIyKCcwX3VzZXJkYXRhLjAuJyArIGRwMDIyLCBkdHAwMjIpOwoKY29uc3QgZHAwMjMgPSAnQWxleGFfQW5zYWdlbi5TdGltbWVuLjE0Zmx1ZXN0ZXJuX2FuZmFuZyc7CmNvbnN0IGR0cDAyMyA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTRmbHVlc3Rlcm5fYW5mYW5nJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAwMjMoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJzxzcGVhaz48YW1hem9uOmVmZmVjdCBuYW1lPSJ3aGlzcGVyZWQiPic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAwMjMoJzBfdXNlcmRhdGEuMC4nICsgZHAwMjMsIGR0cDAyMyk7Cgpjb25zdCBkcDAyNCA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMTVmbHVlc3Rlcm5fZW5kZSc7CmNvbnN0IGR0cDAyNCA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTVmbHVlc3Rlcm5fZW5kZScscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDI0KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICc8L2FtYXpvbjplZmZlY3Q+PC9zcGVhaz4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDI0KCcwX3VzZXJkYXRhLjAuJyArIGRwMDI0LCBkdHAwMjQpOw==</field> <comment pinned="false" h="80" w="160">legt Datenpunkte für den die Anzahl gekippter/geöffneter/geschlossenen/gesamt Fenster an</comment> </block> <block type="procedures_callcustomnoreturn" id="WUz)!$4SU(=C^dK+WDIy" disabled="true" x="37" y="13"> <mutation name="Datenpunkte_anlegen"></mutation> <next> <block type="comment" id="TCbirY0yNy87D,/?|k1h"> <field name="COMMENT">speak</field> <next> <block type="on" id="pPAe?D9#C-MzNdYWPK]r" collapsed="true" disabled="true"> <field name="OID">alexa2.0.History.summary</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="fQlWBQZN^e.:DrM[^7{4"> <value name="IF0"> <block type="logic_compare" id="2pJO@[Vtpx6B{6|hU{AM"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="DyA~MCr`D%W17,P!,xZs"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.summary</field> </block> </value> <value name="B"> <block type="text" id="%4nBc3D)J=jtRdxt$XgL"> <field name="TEXT">testansage</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id=".}l{$)R}!so3?49}ZI29"> <field name="VAR" id="]8CjUu1tTXk^pZvPD9pk" variabletype="">Lautstaerke</field> <value name="VALUE"> <block type="math_number" id="w!aFM4SyFphGj^,/nlyu"> <field name="NUM">100</field> </block> </value> <next> <block type="variables_set" id="raHp)T;G6o1nDaQZ5Qrg"> <field name="VAR" id="tx`]izPXI!BeK19V`CX$" variabletype="">angesprochener_echo</field> <value name="VALUE"> <block type="text_join" id="q`1!?SO4KN9hG:/?YC1L"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="lG5cq|_e-SYygMARlNe%"> <field name="TEXT">alexa2.0.Echo-Devices.</field> </block> </value> <value name="ADD1"> <block type="get_value" id="M7plEDg{8pq2=J9a2fzQ"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.serialNumber</field> </block> </value> <value name="ADD2"> <block type="text" id="v.6VG(Lxwxo.[IIHs$U="> <field name="TEXT">.Commands.speak</field> </block> </value> </block> </value> <next> <block type="variables_set" id="N?jvkadzp3l@_Na$GSh3"> <field name="VAR" id="}tfHo!d;DNiy8lns,/nq" variabletype="">speak_volume</field> <value name="VALUE"> <block type="text_join" id="2;bG:Tv$~s+Itqhld@ML"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="U0%on0@O$stDed%wbZLS"> <field name="TEXT">alexa2.0.Echo-Devices.</field> </block> </value> <value name="ADD1"> <block type="get_value" id="F;9-S~mvqb0GUKsf@iKm"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.serialNumber</field> </block> </value> <value name="ADD2"> <block type="text" id=".(-6vYavAe:;F~Wr[qy!"> <field name="TEXT">.Commands.speak-volume</field> </block> </value> </block> </value> <next> <block type="variables_set" id="XQx[6n!+nUQ];R7;`1$a"> <field name="VAR" id="xn1_(a%|e4G}G4FdbhX:" variabletype="">Ansage</field> <value name="VALUE"> <block type="text" id="3go3)pi-E4Nt~0H{)8)^"> <field name="TEXT">Ich teste jetzt die Lautstärke mit dem Wert 100. Nach dieser Ansage stellt sich der Wert wieder zurück auf den vorher eingestellten Wert.</field> </block> </value> <next> <block type="control_ex" id="@.Ynq`]k]!w}k*GMj~[!" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hb?Q/-%_9A^!+jRfuTnL"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="(kZn44O^xPC@K:O/D*lO"> <field name="VAR" id="}tfHo!d;DNiy8lns,/nq" variabletype="">speak_volume</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="Uo[{s0o3{[`(35T92ci2"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="I=Z6pmb=)Mwn25%B:!cu"> <field name="VAR" id="]8CjUu1tTXk^pZvPD9pk" variabletype="">Lautstaerke</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="6ncG2Nes+=ucX9m]Q-LH"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="5$O:dbv;*Ncoc7n00s`w" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hb?Q/-%_9A^!+jRfuTnL"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="hMVRJeB$V+.jktBW.6DP"> <field name="VAR" id="tx`]izPXI!BeK19V`CX$" variabletype="">angesprochener_echo</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="Uo[{s0o3{[`(35T92ci2"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="_UExVH`$/=Sjy86Hb$%X"> <field name="VAR" id="xn1_(a%|e4G}G4FdbhX:" variabletype="">Ansage</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="cLl){TAE+8[,|ov4ALY+"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> <next> <block type="comment" id="=x.*TbJbsJR4!qztr5}("> <field name="COMMENT">ssml</field> <next> <block type="on" id="[~`aZbXg|MwH^/]r2eKq"> <field name="OID">alexa2.0.History.summary</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="|Y?dP^7^w/)!*0$3}/#Y"> <field name="VAR" id="hsYte9@o`T2BDaS,~4hu" variabletype="">alexa_voice</field> <value name="VALUE"> <block type="get_value" id="8#aiKcrm:u{sjs0cUfhr"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.05Alexa_ssml</field> </block> </value> <next> <block type="variables_set" id="#LjgD75rPUU:r.P%*]2^"> <field name="VAR" id="^$:ikT~4TjYuk|1umMYe" variabletype="">hans_voice</field> <value name="VALUE"> <block type="get_value" id="GP6WGh*S#uF^|L$Xf=^s"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.06Hans_ssml</field> </block> </value> <next> <block type="variables_set" id="MvSk+J3jhK;,;nnz.?5_"> <field name="VAR" id="H/)RG7L1z9=:IM[[N)s]" variabletype="">vicki_voice</field> <value name="VALUE"> <block type="get_value" id="Q73;gvzZe(OOtS;xBeVd"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.07Vicki_ssml</field> </block> </value> <next> <block type="variables_set" id="A8ixxD,Rb{NT`8ud;lY}"> <field name="VAR" id=".Ef/-7s*/H3{8G|ut#TF" variabletype="">conchita_voice</field> <value name="VALUE"> <block type="get_value" id="1{q_i]9;pVS]oY@S6uLq"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.08Conchita_ssml</field> </block> </value> <next> <block type="variables_set" id="D@jsvo])3JLj/v!fA(?-"> <field name="VAR" id="h$;}IKI;/5Nr%M?LEdX]" variabletype="">ssml_ende</field> <value name="VALUE"> <block type="get_value" id="5[3qWOD`xha3N;EJS8}7"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.09ssml_ende</field> </block> </value> <next> <block type="variables_set" id="JzY)};|[y:|a2B=~f{1p"> <field name="VAR" id=",8hPjyuv!|v-;xyG2[GM" variabletype="">stimmenwechsel_alexa</field> <value name="VALUE"> <block type="get_value" id="!dKZJ54A6h#?J~RSV%3~"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.10Alexa_Stimmenwechsel_ssml</field> </block> </value> <next> <block type="variables_set" id="W7id@jkpI:9O)zPL.DTU"> <field name="VAR" id="1R[1|dIw2YY/SWSjV8vi" variabletype="">stimmenwechsel_hans</field> <value name="VALUE"> <block type="get_value" id="4xY(7AjKi~^ljks.n841"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.11Hans_Stimmenwechsel_ssml</field> </block> </value> <next> <block type="variables_set" id="46SatHI]v=bv/%P:j+bp"> <field name="VAR" id="hVUr^m=0SqBl!qr4l}8a" variabletype="">stimmenwechsel_vicki</field> <value name="VALUE"> <block type="get_value" id="9=0xIG,Pc!5XUSS)U!_x"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.12Vicki_Stimmenwechsel_ssml</field> </block> </value> <next> <block type="variables_set" id="]oJ#b{fZ0P*!wSNoKZ9A"> <field name="VAR" id="5LniT)a9cR_h6Mo!t*1N" variabletype="">stimmenwechsel_conchita</field> <value name="VALUE"> <block type="get_value" id="WH]s$i*uV`:tg,XZy@I/"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.13Conchita_Stimmenwechsel_ssml</field> </block> </value> <next> <block type="variables_set" id="Z-IEV|C0/NEL0o95zRdg"> <field name="VAR" id="eHmEd,;db!BBO)-s0Y{Z" variabletype="">fluestern_anfang</field> <value name="VALUE"> <block type="get_value" id="(Gi;jkQ]RrIAIXz4`;d3"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.14fluestern_anfang</field> </block> </value> <next> <block type="variables_set" id="{t0fi5sc0=}!DE,jnlS8"> <field name="VAR" id="XITSHPBx:4U5JEzlW6ov" variabletype="">fluestern_ende</field> <value name="VALUE"> <block type="get_value" id="Glna:ISU*6zQ:HYj`6PC"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Alexa_Ansagen.Stimmen.15fluestern_ende</field> </block> </value> <next> <block type="controls_if" id="AmHCZmZQ?D_nGLF,U{=u"> <value name="IF0"> <block type="logic_compare" id="^dLRtgWT~Tt++cL($NKn"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="9IQ29otyT#F-Spsl%l1I"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.summary</field> </block> </value> <value name="B"> <block type="text" id="V#v}1F.Uu4q+Op8a+EQU"> <field name="TEXT">testansage</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="c0:5H;c}I61=O)k/{m}s"> <field name="VAR" id="]8CjUu1tTXk^pZvPD9pk" variabletype="">Lautstaerke</field> <value name="VALUE"> <block type="math_number" id="VP%:,w*{wn*j@Ro_~V.n"> <field name="NUM">100</field> </block> </value> <next> <block type="variables_set" id="zsVZKg0]4(L1ixvAR)/1"> <field name="VAR" id="tx`]izPXI!BeK19V`CX$" variabletype="">angesprochener_echo</field> <value name="VALUE"> <block type="text_join" id="Ro|ihCQ:AQOt.3`TUQwM"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="!3N6!z_sBxoud+?AYsuv"> <field name="TEXT">alexa2.0.Echo-Devices.</field> </block> </value> <value name="ADD1"> <block type="get_value" id="sIB7uOMmNbK:-t:a.QR;"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.serialNumber</field> </block> </value> <value name="ADD2"> <block type="text" id="(=O9cXWAffYNZ}Z0`DxZ"> <field name="TEXT">.Commands.ssml</field> </block> </value> </block> </value> <next> <block type="variables_set" id="i38T``MGhvb6dO^:S]M$"> <field name="VAR" id="}tfHo!d;DNiy8lns,/nq" variabletype="">speak_volume</field> <value name="VALUE"> <block type="text_join" id=".du,f^-[km~vy3f,^+!;"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="YRnYeZjQ^P?$m)miSuWv"> <field name="TEXT">alexa2.0.Echo-Devices.</field> </block> </value> <value name="ADD1"> <block type="get_value" id="A$L7:D{nF;z|(]R15M6s"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.serialNumber</field> </block> </value> <value name="ADD2"> <block type="text" id="nqD6Te,c(D?G{y#CCFql"> <field name="TEXT">.Commands.speak-volume</field> </block> </value> </block> </value> <next> <block type="control_ex" id="m*49S0.[D:6!M#Fv~sJz" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hb?Q/-%_9A^!+jRfuTnL"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="u![hpE!E%l3S_H~+~tia"> <field name="VAR" id="}tfHo!d;DNiy8lns,/nq" variabletype="">speak_volume</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="Uo[{s0o3{[`(35T92ci2"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="qh[g_2lfHC*P$tQD7lYL"> <field name="VAR" id="]8CjUu1tTXk^pZvPD9pk" variabletype="">Lautstaerke</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="s%4rnui3VS(SjQx|x-A+"> <field name="NUM">0</field> </shadow> </value> <next> <block type="variables_set" id="~mUtLASbz4,[^)Mr^r(@"> <field name="VAR" id="xn1_(a%|e4G}G4FdbhX:" variabletype="">Ansage</field> <value name="VALUE"> <block type="text_join" id="6(p)A1L$:_75Icld.$!`"> <mutation items="11"></mutation> <value name="ADD0"> <block type="variables_get" id="K?;FJpSD.DAu(4Vl6#/!"> <field name="VAR" id="hsYte9@o`T2BDaS,~4hu" variabletype="">alexa_voice</field> </block> </value> <value name="ADD1"> <block type="text" id="X9wB$RtDd9S!6Cv%E*/@"> <field name="TEXT">Ich teste jetzt die Lautstärke mit dem Wert 100.</field> </block> </value> <value name="ADD2"> <block type="variables_get" id="P1x3s}vBZPp0qmWW-jb#"> <field name="VAR" id="1R[1|dIw2YY/SWSjV8vi" variabletype="">stimmenwechsel_hans</field> </block> </value> <value name="ADD3"> <block type="text" id="4_8*(J~8e8HAn?z2i.*O"> <field name="TEXT"> Nach dieser Ansage stellt sich der Wert wieder zurück auf den vorher eingestellten Wert. </field> </block> </value> <value name="ADD4"> <block type="variables_get" id="Q(ihJ[=VY;+#zMcnppVy"> <field name="VAR" id="hVUr^m=0SqBl!qr4l}8a" variabletype="">stimmenwechsel_vicki</field> </block> </value> <value name="ADD5"> <block type="text" id="e4~5oJfNN%v)~4M+$4y,"> <field name="TEXT">Aber auch verschiedene Stimmen können ganz nett sein. </field> </block> </value> <value name="ADD6"> <block type="variables_get" id="uj27HwU#KD5Q?qY4Ff,v"> <field name="VAR" id="5LniT)a9cR_h6Mo!t*1N" variabletype="">stimmenwechsel_conchita</field> </block> </value> <value name="ADD7"> <block type="text" id=",~Q+|d^-|,KIP*l+y)cH"> <field name="TEXT">Ja, das stimmt. Ich bin verwirrt. </field> </block> </value> <value name="ADD8"> <block type="variables_get" id="qsElU5x=z,CqeU_okG#!"> <field name="VAR" id=",8hPjyuv!|v-;xyG2[GM" variabletype="">stimmenwechsel_alexa</field> </block> </value> <value name="ADD9"> <block type="text" id="jX_Gw7!]oE@2|CONlV5H"> <field name="TEXT">So, genug gequasselt. Ansage Ende.</field> </block> </value> <value name="ADD10"> <block type="variables_get" id="D[ka=jJA~5QL?wl$=msz"> <field name="VAR" id="h$;}IKI;/5Nr%M?LEdX]" variabletype="">ssml_ende</field> </block> </value> </block> </value> <next> <block type="variables_set" id="rd8Vm:g%lZIPouk@%0~["> <field name="VAR" id="g)Ql[6CLA*U1}0AW@%59" variabletype="">Ansage2</field> <value name="VALUE"> <block type="text_join" id="gxMytiI`nl3D)G!RxBN2"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="%$(wV^{e#TO1I$%E.F,5"> <field name="VAR" id="eHmEd,;db!BBO)-s0Y{Z" variabletype="">fluestern_anfang</field> </block> </value> <value name="ADD1"> <block type="text" id="`;^NfmSQ-{hBrChTk;eo"> <field name="TEXT">Ich kann sogar flüstern. Oh Oh. </field> </block> </value> <value name="ADD2"> <block type="variables_get" id="?gfiG/.F{kuYoBStkin5"> <field name="VAR" id="XITSHPBx:4U5JEzlW6ov" variabletype="">fluestern_ende</field> </block> </value> </block> </value> <next> <block type="control_ex" id="Z0SIQv`YwR}U3y-7.C[_" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hb?Q/-%_9A^!+jRfuTnL"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="7XIJ@IIk+|w*,LY8F10b"> <field name="VAR" id="tx`]izPXI!BeK19V`CX$" variabletype="">angesprochener_echo</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="Uo[{s0o3{[`(35T92ci2"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="c@cd-(g/KcOn2,^;@I[Q"> <field name="VAR" id="xn1_(a%|e4G}G4FdbhX:" variabletype="">Ansage</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="SJ?NXn_.A!Y[+SZv]WYK"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="///ti2V{encKANYTI6Ya" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hb?Q/-%_9A^!+jRfuTnL"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="$x%/Yh*`_p}|%n0+6X)."> <field name="VAR" id="tx`]izPXI!BeK19V`CX$" variabletype="">angesprochener_echo</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="Uo[{s0o3{[`(35T92ci2"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="}(OeQ:Wg,[eMtCwny-c/"> <field name="VAR" id="g)Ql[6CLA*U1}0AW@%59" variabletype="">Ansage2</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="MSay5)`ZstNNa$[ZaKfc"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@dslraser Danke für die Info.
D.h. ich muß das Volume überhaupt nicht zurückstellen.
Wenn man Sprachmeldungen mit unterschiedlicher Lautstärke (Priorität) benutzt, setzt man die halt vor jeder Sprachausgabe.
Zusatzfrage: Ich habe die Alarmanlage in verschiedene Scripte unterteilt. Gibt es da so etwas wie globale Defines für die gewünschte Lautstärke? -
@Tottbeck sagte in Subfunktion in Blockly:
Gibt es da so etwas wie globale Defines für die gewünschte Lautstärke?
Das weiß ich leider nicht.
-
@dslraser sagte in Subfunktion in Blockly:
Importiere das mal und starte das Blockly. Anschließend sagst Du mal Testansage. (dann sollte die Antwort kommen)
Funktioniert super
-
@Tottbeck
hast Du auch mal die ssml Variante probiert ? -
@dslraser sagte in Subfunktion in Blockly:
und hier noch ein Beispiel was Du über ssml so anstellen kannst. (hier werden einige Datenpunkte erstellt)
Auch hier funktioniert das mit der Lautstärke.Das läuft leider nicht.
Sollten die zugehörigen Datenpunkte automatisch angelegt werden ?
Unter "0_userdata.0" habe ich jedenfalls keine Objekte. "(nur "example_state") -
@Tottbeck
hast Du den aktiviert ? -
Ja, hatte ich testweise. Im Log nachgeschaut, dort steht:
(21604) script.js.Alarmanlage.Test2: Cannot write object: Function "setObject" is not allowed. Use adapter settings to allow it.
Habe im Javascript-Adapter die Option "Erlaube das Kommando "set Object" " aktiviert.
Jetzt wurden unter 0_userdata.0 Stimmen angelegt.
Funktioniert jetzt, ist ja erstaunlich, was das Ding so kann
"Datenpunkte anlegen" kann ich danach wieder deaktivieren.Ist das Alexa-Feature jetzt eigentlich begrenzt auf die 20 Aktivierungen pro Tag, oder ist das eine andere Geschichte ? Oder gilt das nur für den Cloud bzw IOT-Adapter?
-
@Tottbeck sagte in Subfunktion in Blockly:
Datenpunkte anlegen" kann ich danach wieder deaktivieren.
ja, kannst Du dann deaktivieren.
Ist das Alexa-Feature jetzt eigentlich begrenzt auf die 20 Aktivierungen pro Tag, oder ist das eine andere Geschichte ? Oder gilt das nur für den Cloud bzw IOT-Adapter?
Ich habe schein seit Jahren eine Lizenz, da ist es "unbegrenzt".
-
Habe gerade auch die Assistenz-Lizenz für ein Jahr gekauft.
Musste erst eine Schaltung per IOT machen, bevor ich bezahlen durfte.
Die Stimme von Marlene habe ich auch gerade getetest. -
@Tottbeck
die verschiedenen Stimmen könnte ich mir für Deinen Anwendungsfall "Alarmanlage" ganz gut vorstellen, deshalb hatte ich Dir die Richtung ssml gezeigt, weil da einfach mehr möglich ist als über speak. -
Ja, Danke. Ist wirklich hilfreich.
Dann kann man dem Einbrecher schon mal etwas vorflüstern oder einen lauten Familienstreit simulieren
"Du hast mich mit Conchita betrogen" usw -
@Tottbeck sagte in Subfunktion in Blockly:
"Du hast mich mit Conchita betrogen"
-
Die Sprachsteuerung per SSML funktioniert jetzt ganz gut, damit kann man die ganze umständliche Configuration im Cloud/IOT-Adapter umgehen.
Man muß nur aufpassen, dass Alexa alles in Kleinbuchstaben versteht, denn der Text-Vergleich ist case-sensitive.Zu dem zweiten Punkt, bekomme ich einfach kein stabiles Blinken hin.
@Tottbeck sagte in Subfunktion in Blockly:Das Blinken vom Xiaomi-Gateway (langsam in Blau für Aktiv, Schnell in Rot für Alarm) klappt nicht so wirklich. Manchmal geht es, aber irgendwie nicht stabil und nicht im gewünschten Zyklus/Farbe. Gibt es dazu Erfahrungswerte, was man dem Ding zumuten darf?
Alle 5s für 1s aktiv sollte ja möglich sein, aber selbst das klappt nicht stabil. Gibt es da evtl störende Nebeneinflüsse durch die Xiaomi-App?
-
Hallo @dslraser , nochmal eine Frage zu Sprachsteuerung.
Habe mir jetzt noch etwas eingebaut, damit mir Alexa sagt, wann die Haustür das letzte Mal geöffnet wurde.
Das macht sie auch brav (wenn man berücksichtigt das sie meist "haus tür statt "Haustür" versteht).
Ich frage für den Sprachbefehl die Alexa.history.summary in einem zentralen Modul ab. Die Alexa verarbeitet das aber parallel und will mir schon sagen, dass sie nicht weiß, was ich von ihr will, bis sie vom IoBroker-Ausgabe überstimmt wird. Kann man das verhindern ??Generell. Spricht eigentlich etwas dagegen alles direkt über die history.summary zu steuern, also ohne Konfiguration in Alexa-App und IOT-Adapter ??
-
@Tottbeck sagte in Subfunktion in Blockly:
Ich frage für den Sprachbefehl die Alexa.history.summary in einem zentralen Modul ab. Die Alexa verarbeitet das aber parallel und will mir schon sagen, dass sie nicht weiß, was ich von ihr will, bis sie vom IoBroker-Ausgabe überstimmt wird. Kann man das verhindern ??
Ich mache eigentlich gar nichts direkt über die History bzw. habe es noch nicht über ein "Modul" probiert. Wie muß ich mir dieses "Modul" vorstellen ? Alles in einem Script ?
Wie man das verhindern kann weiß ich nicht, da ich es nicht so mache. -
Danke. Ein zentrales Blocky-Script wäre wohl der genauere Begriff für das SW-Modul. Dort kann ich dann mit "falls"/"sonst falls" alle Sprachbefehle ablegen.
Dort könnte ich auch wenn ein Befehl erkannt wurde, die Alexa-Antwort abwürgen. Wäre natürlich trotzdem irgendwie hinten herum.Wenn meine Methode allerdings dieses Problem verursacht und Deine nicht, dass ist Deine Methode (welche ?) wohl die passendere.