- Home
- Deutsch
- Skripten / Logik
- Dynamisch Textausgabe über Alexa
Dynamisch Textausgabe über Alexa
-
Hallo!
Ich habe bisher beim verlassen des Hauses über unterschiedliche Programme in meiner Homematic CCU Systemvariablen abgefragt und je nach Zustand via Home24 eine TTS Ausgabe auf einem Android Gerät realisiert.
Es konnte dabei vorkommen, dass mehrere Programme eine TTS-Ausgabe gesendet haben. Diese wurden dann von Home24 nacheinander abgearbeitet und angesagt.Bei der TTS-Ausgabe via IoBroker auf einem Echo Dot funktioniert das nicht mehr. Es wird immer nur noch der Zustand der zuletzt aktualisierten Systemvariable ausgegeben.
Also nur eine Ansage. Der Rest geht unter.Was gibt es hier für Lösungsansätze?
him96
-
Moin,
zu dem Thema mache ich mir aktuell auch Gedanken, habe aber noch nichts in Skripte gegossen. Aktuell sieht mein Favorit so aus, dass ich einen "TTS" Datenpunkt unter 0_userdata.0 anlegen würde auf welchen ich den zu sprechenden Text schreibe. Optional kann ein Name gefolgt von einem Doppelpunkt vorgehängt werden.
Ein Skript überwacht den Datenpunkt auf Änderung und überträgt den Wert auf Alias-Datenpunkte für die Ausgabegeräte.
Wenn kein Name vor dem Text steht soll der Text ausgegeben werden wenn mindestens eine Person zu Hause ist. Wenn ein Name davor steht soll der Text ausgegeben werden, wenn derjenige zu Hause ist.
Wenn eine Nachricht nicht direkt wiedergegeben werden soll, weil die entsprechende Anwesenheit nicht gegeben ist, dann wird der Text inklusive Zeit in ein JSON geschrieben, was alle nicht wiedergegebenen Texte in einem weiteren Datenpunkt (z.B. TTS-Queue) bereithält. Wenn sich an der Anwesenheit einer Person etwas ändert, so soll geprüft werden, ob aus der Queue Nachrichten abgespielt werden sollen.
Weitere mögliche Erweiterungen wären Prioritäten (anstatt chronologischer Wiedergabe) sowie eine "Lebensdauer" für eine Nachricht und unterschiedliches Verhalten bei Duplikaten (Briefe im Briefkasten brauche ich nicht zweimal hören).In kleinen Tests hatte ich das Problem, dass ich nicht weiß wie lange eine Ansage dauert und ich somit nicht weiß wann ich die zweite Ansage an die Ausgabe übergeben kann (TTS Adapter), da die vorige Ansage sonst abgebrochen wurde. Vielleicht findet sich hier jemand mit einer Idee für das Problem. Wenn das gelöst ist erstelle ich gerne das/die Skripte und stelle sie im Forum bereit.
-
Ist sowas machbar?:
Ein Skript frägt, getriggert durch einen Abwesenheitsschalter, unterschiedliche Systemvariablen ab und schreibt dann je nach deren Zustände für jede Variable einen vorher definierten Text in eine Datei.
Ein zweites Skript gibt diese(n) Text(e) dann via Alexa TTS am Stück aus.
Nach erfolgter Ansage wird der Text dann aus der Text-Datei gelöscht.
him96
-
@him96 Die Texte in eine Ansage zusammenzufassen ist eine gute Idee. Ich mach mich über die Feiertage mal dran und erstelle da die passenden Skripte für.
-
Hi!
Konntest du dein Vorhaben umsetzten?
him96
-
@him96 zu Teilen ja, fertig/fehlerfrei ist es noch nicht. Wenn du kein Problem damit hast, dass es noch Probleme gibt kann ich dir den aktuellen Stand heute Abend posten. Ich denke, dass ich am kommenden Wochenende die letzten Kinderkrankheiten ausgemerzt bekomme.
Aktuell basiert es auf einem Anwesenheitszähler für alles was an "irgendwen" geht und die persönlichen Ansagen richten sich nach einzelnen Datenpunkten für jede Person. Während der Entwicklung ist mir noch aufgefallen, dass ein "Triggerdatenpunkt" für allgemeine Ansagen hilfreich sein könnte (z.B. Haustür offen) da die Anwesenheitserkennung doch mal zwei Minuten dauern kann und wenn ich dann gesagt bekomme, dass ich die Mülltonne rausstellen soll muss ich ja doch wieder runter gehen und mir Schuhe anziehen. -
Jetzt bin ich bei einem Stand angekommen mit dem ich erstmal zufrieden bin. Fertig ist es aber noch nicht. Offene Punkte sind unten aufgelistet.
Damit das Skript funktioniert benötigt es folgende Datenpunkte:
Diese drei sind Zeichenketten:
Der Counter ist eine Zahl, die anderen beiden sind Booleans:
Wie verwendet man das Skript:
In den Datenpunkt 0_userdata.0.TTS.Queue muss zu Beginn einmal eine leere Liste [] geschrieben werden. In diesem Datenpunkt wird die Queue der noch nicht ausgesprochenen Texte vorgehalten. Der Inhalt des Datenpunktes ist ein JSON String.
Der Datenpunkt 0_userdata.0.TTS.AlleGeraete dient als Ausgabe für das Skript. Mit der Ausgabe kann dann auf einem beliebigen Gerät TTS gemacht werden. Ein Blockly zur Ausgabe via Sayit mit allen Instanzen ist unten als Export in einem Spoiler.
Der Datenpunkt 0_userdata.0.TTS.Enqueue dient als Eingabe in das Skript.
Um eine Ausgabe an eine bestimme Person zu adressieren schreibt man folgendes JSON in den Datenpunkt:{"name":"$NAME$","text":"sage diesen Text"} $NAME$ ist definiert durch den Datenpunkt, der die Anwesenheit der Person repräsentiert (alias.0.Anwesenheit.$NAME$) z.B.: alias.0.Anwesenheit.Jonathan => {"name":"Jonathan","text":"Diesen Text hört Jonathan"})
Ist ein Text für eine beliebige Person des Haushalts (mindestens eine Person muss anwesend sein) so kann entweder das Feld name im JSON leer gelassen werden oder noch einfacher nur der zu sprechende Text in den Enqueue-Datenpunkt geschrieben werden.
TODO:- Triggerdatenpunkt für späteres Auslösen von Anwesenheit
- Automagisches Selbstsetup (scheitert noch daran, dass via Blockly keine Datenpunkte unter 0_userdata erstellt werden können)
- Datenpunkte für jede Person zum einfacheren Ansprechen einzelner Personen
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable id="AkYU}7*X5NX/z#^FM)Xy" type="">array</variable> <variable id="h]DkyBP2{E-q*Pl7nt`c" type="">elementToAdd</variable> <variable id="]C@/yy];0C6P$+$-^*C(" type="">elementToRemove</variable> <variable id="HFsl-ic:cMLV;-Y05i1Z" type="">jsonString</variable> <variable id="Ys,h8KBm$.J$uF(7/#Ix" type="">Queue</variable> <variable id="9bZ+SVj%$FZ4-|02x~-b" type="">ttsContent</variable> <variable id="cp[4,JQ-c8t]DwDv4Yx$" type="">ttsContentQueueObjects</variable> <variable id="JAlj;p0CDqTg1$JpT;-;" type="">i</variable> <variable id="+oRzt@R~n1bEB_=ghKO)" type="">j</variable> </variables> <block id="%:NEU_^~k/b))v{Hvwk$" type="procedures_defcustomreturn" y="-287" x="38"> <mutation statements="false"> <arg name="array" varid="AkYU}7*X5NX/z#^FM)Xy"></arg> <arg name="elementToAdd" varid="h]DkyBP2{E-q*Pl7nt`c"></arg> </mutation> <field name="NAME">push</field> <field name="SCRIPT">YXJyYXkucHVzaChlbGVtZW50VG9BZGQpOw0KcmV0dXJuIGFycmF5Ow==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block id="gC!%[R;Rta^J)2-o/FnG" type="procedures_defcustomreturn" y="-262" x="37"> <mutation statements="false"> <arg name="array" varid="AkYU}7*X5NX/z#^FM)Xy"></arg> <arg name="elementToRemove" varid="]C@/yy];0C6P$+$-^*C("></arg> </mutation> <field name="NAME">splice</field> <field name="SCRIPT">dmFyIGluZGV4ID0gYXJyYXkuaW5kZXhPZihlbGVtZW50VG9SZW1vdmUpOw0KaWYgKGluZGV4ID4gLTEpIHsNCiAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTsNCn0NCg0KcmV0dXJuIGFycmF5Ow==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block id="yV,p)rpYDl6%)v|~hP_N" type="procedures_defnoreturn" y="-237" x="38"> <mutation> <arg name="jsonString" varid="HFsl-ic:cMLV;-Y05i1Z"></arg> </mutation> <field name="NAME">AppendToQueue</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block id="4OLI^HO8Jy=jXE#Cy2Y/" type="variables_set"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> <value name="VALUE"> <block id="qzzB6}cnfT|J56`5b2?M" type="convert_json2object"> <value name="VALUE"> <block id="C{7V4*/o;!1~mC+FVifq" type="get_value"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.TTS.Queue</field> </block> </value> </block> </value> <next> <block id="c)^?{[}$K1NJx)aN~8bS" type="variables_set"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> <value name="VALUE"> <block id="1QA60KE0xndh4WptkU(2" type="logic_ternary"> <value name="IF"> <block id="0]U7$$=/(p.KkF?~x^jm" type="logic_compare"> <field name="OP">EQ</field> <value name="A"> <block id="f:r8,OtXQ:HO.4PlATQ^" type="math_number"> <field name="NUM">0</field> </block> </value> <value name="B"> <block id=".TC7?}S+i]1N_b-tDMzU" type="lists_length"> <value name="VALUE"> <block id="`Mz=hh{*3NpddD2D5]:?" type="variables_get"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> </block> </value> </block> </value> </block> </value> <value name="THEN"> <block id="w{yehoi1l#X4Oz/^wf=k" type="lists_create_with"> <mutation items="1"></mutation> <value name="ADD0"> <block id="ylCYZtPA8{stkKH7*iwu" type="convert_json2object"> <value name="VALUE"> <block id="s}^*H4-ICt5mK#z3O,_0" type="variables_get"> <field id="HFsl-ic:cMLV;-Y05i1Z" name="VAR" variabletype="">jsonString</field> </block> </value> </block> </value> </block> </value> <value name="ELSE"> <block id="PWV0=Y98MJ^i6xi|;CPT" type="procedures_callcustomreturn"> <mutation name="push"> <arg name="array"></arg> <arg name="elementToAdd"></arg> </mutation> <value name="ARG0"> <block id="E5to#*qN:@}t{2V;%%*G" type="variables_get"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> </block> </value> <value name="ARG1"> <block id="F6{x9l|`[1;q2)*u8k#k" type="convert_json2object"> <value name="VALUE"> <block id="c(jy04.KXZVs`Gtx=aaG" type="variables_get"> <field id="HFsl-ic:cMLV;-Y05i1Z" name="VAR" variabletype="">jsonString</field> </block> </value> </block> </value> </block> </value> </block> </value> <next> <block id="9scApgE7BjVmY@bF8=P-" type="control"> <mutation delay_input="false"></mutation> <field name="OID">0_userdata.0.TTS.Queue</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block id="^TBledj=T2Vt@k_z[0Mu" type="convert_object2json"> <field name="PRETTIFY">FALSE</field> <value name="VALUE"> <block id="pS]vB$Y+m|n$ml)fcDRX" type="variables_get"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </statement> </block> <block id="8{g[]3?@,dD5M#z2L`RE" type="on_ext" y="-91" x="174"> <mutation items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow id="v9n*i][1l%T+r+Y*/,@[" type="field_oid"> <field name="oid">0_userdata.0.TTS.Enqueue</field> </shadow> </value> <statement name="STATEMENT"> <block id="o{)R4x6OHB]cH@qkSckB" type="controls_if"> <mutation else="1"></mutation> <value name="IF0"> <block id="0qi]*ZooU-uxgjPQn1|u" type="logic_compare"> <field name="OP">EQ</field> <value name="A"> <block id="4Izoa,SZ9plA+h6)b]C-" type="math_number"> <field name="NUM">1</field> </block> </value> <value name="B"> <block id="ypcg!BTqJ*#Ly1O:vOQ%" type="text_indexOf"> <field name="END">FIRST</field> <value name="VALUE"> <block id="2yV[:HByU,_M}V351#$8" type="on_source"> <field name="ATTR">state.val</field> </block> </value> <value name="FIND"> <shadow id="#sPA[HYIk{bE.Y.KO#MP" type="text"> <field name="TEXT">{</field> </shadow> </value> </block> </value> </block> </value> <statement name="DO0"> <block id="8QVv~YA@4JiBC+;s5eR!" type="comment"> <field name="COMMENT">JSON => Personalisiert</field> <next> <block id="m/lp/p;#49/,WBmvob-N" type="procedures_callnoreturn"> <mutation name="AppendToQueue"> <arg name="jsonString"></arg> </mutation> <value name="ARG0"> <block id="(rWp@KCpgh)QB^r.v=;E" type="on_source"> <field name="ATTR">state.val</field> </block> </value> </block> </next> </block> </statement> <statement name="ELSE"> <block id="Y~=NCX}zocQ)8#ZOVsIp" type="comment"> <field name="COMMENT">Für alle</field> <next> <block id="8V!;MF+swjN@ehx/LrWw" type="controls_if"> <mutation else="1"></mutation> <value name="IF0"> <block id="^Gzu}-9neIjut4SXJwkj" type="logic_compare"> <field name="OP">LT</field> <value name="A"> <block id="YIkMrj1R53DhUDZ5BkzL" type="math_number"> <field name="NUM">0</field> </block> </value> <value name="B"> <block id="~{#%7bX[09MA*73[]zfo" type="get_value"> <field name="ATTR">val</field> <field name="OID">alias.0.Anwesenheit.Counter</field> </block> </value> </block> </value> <statement name="DO0"> <block id="{wEq/uA.TsNij0:+VFq3" type="control"> <mutation delay_input="false"></mutation> <field name="OID">0_userdata.0.TTS.AlleGeraete</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block id="{C5{ZCq$8S~JV-yzx3El" type="on_source"> <field name="ATTR">state.val</field> </block> </value> </block> </statement> <statement name="ELSE"> <block id="a:Idj`xR!!Ef4%JWytGS" type="procedures_callnoreturn"> <mutation name="AppendToQueue"> <arg name="jsonString"></arg> </mutation> <value name="ARG0"> <block id="U~4y#M=!A/:]CzND,nE_" type="text_join"> <mutation items="3"></mutation> <value name="ADD0"> <block id="z$Aj9M?*!T}uE27[RNkM" type="text"> <field name="TEXT">{"name":"","text":"</field> </block> </value> <value name="ADD1"> <block id="PC9X/zW$oC8k|b~W6RE6" type="on_source"> <field name="ATTR">state.val</field> </block> </value> <value name="ADD2"> <block id="Uw=3@$0oFQOK$Ap[:lQi" type="text"> <field name="TEXT">"}</field> </block> </value> </block> </value> </block> </statement> </block> </next> </block> </statement> </block> </statement> <next> <block id="L,%plz|Sm(2Vg4Bf]/3H" type="on_ext"> <mutation items="2"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow id="x/IGdWLwh:aG|-2S`tg^" type="field_oid"> <field name="oid">alias.0.Anwesenheit.Counter</field> </shadow> </value> <value name="OID1"> <shadow id="VNdrK=}3;+q{0,}W;:,5" type="field_oid"> <field name="oid">0_userdata.0.TTS.Queue</field> </shadow> </value> <statement name="STATEMENT"> <block id="CDf%z0vhe9#/9^k-KdL." type="variables_set"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> <value name="VALUE"> <block id="vsqk1=Er*s[!!0WN+U2#" type="convert_json2object"> <value name="VALUE"> <block id="[F2;irz9-)xu7AIIUSe@" type="get_value"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.TTS.Queue</field> </block> </value> </block> </value> <next> <block id="@tTq4TP`OfqEX#VerkJq" type="variables_set"> <field id="9bZ+SVj%$FZ4-|02x~-b" name="VAR" variabletype="">ttsContent</field> <value name="VALUE"> <block id="(7vh]9Q_?16{[[psI~kr" type="text"> <field name="TEXT"></field> </block> </value> <next> <block id="?A4J?r5U%y*fV,rhA9PK" type="variables_set"> <field id="cp[4,JQ-c8t]DwDv4Yx$" name="VAR" variabletype="">ttsContentQueueObjects</field> <value name="VALUE"> <block id="8R~3nx+i#X~anNRBVT+!" type="lists_create_with"> <mutation items="0"></mutation> </block> </value> <next> <block id="B$3eHU^/~gq|gyAvYisD" type="controls_if"> <value name="IF0"> <block id="vSnIuAr)cIIRG7GI(=vV" type="logic_compare"> <field name="OP">LT</field> <value name="A"> <block id="1lb=ychDESKt~Hj%0f{|" type="math_number"> <field name="NUM">0</field> </block> </value> <value name="B"> <block id="L5Nzhr|E0O];Z-pGEs{d" type="get_value"> <field name="ATTR">val</field> <field name="OID">alias.0.Anwesenheit.Counter</field> </block> </value> </block> </value> <statement name="DO0"> <block id="0?UA{3@y+ih+sT*H^g6q" type="controls_forEach"> <field id="JAlj;p0CDqTg1$JpT;-;" name="VAR" variabletype="">i</field> <value name="LIST"> <block id="c80X;TP$h-U+)[yH#:ab" type="variables_get"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> </block> </value> <statement name="DO"> <block id="]V%pU6Q[Z;).jw7zIq=;" type="debug"> <field name="Severity">log</field> <value name="TEXT"> <shadow id="HZp=3Py*XU{k{OUKHn,?" type="text"> <field name="TEXT">test</field> </shadow> <block id=")a#=a[pOT=^q*MP*.oH4" type="convert_object2json"> <field name="PRETTIFY">FALSE</field> <value name="VALUE"> <block id="n8v:Q4|@$E/k+Rsi6}{9" type="variables_get"> <field id="JAlj;p0CDqTg1$JpT;-;" name="VAR" variabletype="">i</field> </block> </value> </block> </value> <next> <block id="(RJe4#RkD*!/;G,rM8i:" type="controls_if"> <mutation else="1"></mutation> <value name="IF0"> <block id="ts41r3Vx786!CnW;nt69" type="logic_compare"> <field name="OP">EQ</field> <value name="A"> <block id="2u*3!X`_Td1V?4g,*(.Q" type="text"> <field name="TEXT"></field> </block> </value> <value name="B"> <block id="$[:!OZ1y-/$|IG,Cj0!*" type="get_attr"> <value name="PATH"> <shadow id="z;;pm6_r%bjRi1pskTG#" type="text"> <field name="TEXT">name</field> </shadow> </value> <value name="OBJECT"> <block id="sFmrB1)NSC]S@4J{pYdS" type="variables_get"> <field id="JAlj;p0CDqTg1$JpT;-;" name="VAR" variabletype="">i</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block id="sBB5jVf6t]}_hO!9/pg?" type="variables_set"> <field id="9bZ+SVj%$FZ4-|02x~-b" name="VAR" variabletype="">ttsContent</field> <value name="VALUE"> <block id="!W3#cdNWL#qD@-X#|z;z" type="text_join"> <mutation items="3"></mutation> <value name="ADD0"> <block id="8oME*Pej5uEm=vN2f5:j" type="variables_get"> <field id="9bZ+SVj%$FZ4-|02x~-b" name="VAR" variabletype="">ttsContent</field> </block> </value> <value name="ADD1"> <block id="qD9xEFI*:H3n5$-;ZhBg" type="get_attr"> <value name="PATH"> <shadow id="zqX+xg;aT=0TOS`ydV~T" type="text"> <field name="TEXT">text</field> </shadow> </value> <value name="OBJECT"> <block id="pTR/Rf.iMBsf*#AZ:R68" type="variables_get"> <field id="JAlj;p0CDqTg1$JpT;-;" name="VAR" variabletype="">i</field> </block> </value> </block> </value> <value name="ADD2"> <block id="`F,4ipT~xSoy`}kpXv+`" type="text"> <field name="TEXT">. </field> </block> </value> </block> </value> <next> <block id="]Rbr3aDjACUIxsF;JUlc" type="variables_set"> <field id="cp[4,JQ-c8t]DwDv4Yx$" name="VAR" variabletype="">ttsContentQueueObjects</field> <value name="VALUE"> <block id="Rbiwwq[!F0fMDW@j00AE" type="procedures_callcustomreturn"> <mutation name="push"> <arg name="array"></arg> <arg name="elementToAdd"></arg> </mutation> <value name="ARG0"> <block id="3S_6e~JcEpFs8!S1xIp." type="variables_get"> <field id="cp[4,JQ-c8t]DwDv4Yx$" name="VAR" variabletype="">ttsContentQueueObjects</field> </block> </value> <value name="ARG1"> <block id="x.-nQA3+kj]#P:SFiv.|" type="variables_get"> <field id="JAlj;p0CDqTg1$JpT;-;" name="VAR" variabletype="">i</field> </block> </value> </block> </value> </block> </next> </block> </statement> <statement name="ELSE"> <block id="c)Zw/)!^K0=NKtD$s/yF" type="controls_if"> <value name="IF0"> <block id="_HJb}ED[wTj5[|sE#m6~" type="get_value_var"> <field name="ATTR">val</field> <value name="OID"> <shadow id="uMW;Kd+?[f+;^wtzySV=" type="text"> <field name="TEXT"></field> </shadow> <block id="IH]9wgISJZte*!MS1{SG" type="text_join"> <mutation items="2"></mutation> <value name="ADD0"> <block id="Enwq/afo^8g$}Yxq.lGu" type="text"> <field name="TEXT">alias.0.Anwesenheit.</field> </block> </value> <value name="ADD1"> <block id="l?d0s%=/5$iUd=BsIX#-" type="get_attr"> <value name="PATH"> <shadow id="?Q/I~KogXNhB,m8`aux|" type="text"> <field name="TEXT">name</field> </shadow> </value> <value name="OBJECT"> <block id="Ly!Hz]Ty;U-*JCAn,kUy" type="variables_get"> <field id="JAlj;p0CDqTg1$JpT;-;" name="VAR" variabletype="">i</field> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block id="/d*=~a`I118/1ht^9*iT" type="variables_set"> <field id="9bZ+SVj%$FZ4-|02x~-b" name="VAR" variabletype="">ttsContent</field> <value name="VALUE"> <block id="q7!qLIIz93^M~};sA2dz" type="text_join"> <mutation items="3"></mutation> <value name="ADD0"> <block id="cU~-/GG@UvxEv7dmq9(W" type="variables_get"> <field id="9bZ+SVj%$FZ4-|02x~-b" name="VAR" variabletype="">ttsContent</field> </block> </value> <value name="ADD1"> <block id="$u3G#?=GT1}/x/(p$i{m" type="get_attr"> <value name="PATH"> <shadow id="Q$Ut:Zrsk$(X@1_{Xnj^" type="text"> <field name="TEXT">text</field> </shadow> </value> <value name="OBJECT"> <block id="-V{z)e2S;*)lotYJiwi," type="variables_get"> <field id="JAlj;p0CDqTg1$JpT;-;" name="VAR" variabletype="">i</field> </block> </value> </block> </value> <value name="ADD2"> <block id="}}BrPl[$RRX7BRyN,yS:" type="text"> <field name="TEXT">. </field> </block> </value> </block> </value> <next> <block id="sl;4#$9ecMS~FwnLf8/9" type="variables_set"> <field id="cp[4,JQ-c8t]DwDv4Yx$" name="VAR" variabletype="">ttsContentQueueObjects</field> <value name="VALUE"> <block id="~;pGb/Bs)=V5xIJ3upe]" type="procedures_callcustomreturn"> <mutation name="push"> <arg name="array"></arg> <arg name="elementToAdd"></arg> </mutation> <value name="ARG0"> <block id="RV]LE{1lyD.u2v8TKsX=" type="variables_get"> <field id="cp[4,JQ-c8t]DwDv4Yx$" name="VAR" variabletype="">ttsContentQueueObjects</field> </block> </value> <value name="ARG1"> <block id="#(bc2Oq=!)|n:n@tICrt" type="variables_get"> <field id="JAlj;p0CDqTg1$JpT;-;" name="VAR" variabletype="">i</field> </block> </value> </block> </value> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </statement> <next> <block id="Y0cHVAMq[E{WAKFar9pR" type="controls_forEach"> <field id="+oRzt@R~n1bEB_=ghKO)" name="VAR" variabletype="">j</field> <value name="LIST"> <block id="5~_w3$#k?^oDIMQSE@qq" type="variables_get"> <field id="cp[4,JQ-c8t]DwDv4Yx$" name="VAR" variabletype="">ttsContentQueueObjects</field> </block> </value> <statement name="DO"> <block id="bp|;1iR|ReitzSsu|(-$" type="variables_set"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> <value name="VALUE"> <block id="-PP{t9XP?X-GV$R|;)_b" type="procedures_callcustomreturn"> <mutation name="splice"> <arg name="array"></arg> <arg name="elementToRemove"></arg> </mutation> <value name="ARG0"> <block id="uK:LX$S|J4@S3lt/s3?N" type="variables_get"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> </block> </value> <value name="ARG1"> <block id="?X|yjafX/W(8y@ip]TX3" type="variables_get"> <field id="+oRzt@R~n1bEB_=ghKO)" name="VAR" variabletype="">j</field> </block> </value> </block> </value> </block> </statement> <next> <block id="?aEy|-%QbW6:ZJu!y]b-" type="debug"> <field name="Severity">log</field> <value name="TEXT"> <shadow id="HZp=3Py*XU{k{OUKHn,?" type="text"> <field name="TEXT">test</field> </shadow> <block id=".iQ1^h#!zg2!}.1-eVY:" type="variables_get"> <field id="9bZ+SVj%$FZ4-|02x~-b" name="VAR" variabletype="">ttsContent</field> </block> </value> <next> <block id="2=%i!cze{ZG7{+p}JS^}" type="debug"> <field name="Severity">log</field> <value name="TEXT"> <shadow id="HZp=3Py*XU{k{OUKHn,?" type="text"> <field name="TEXT">test</field> </shadow> <block id="d=hT=uom5~.dLtU)t5=$" type="convert_object2json"> <field name="PRETTIFY">FALSE</field> <value name="VALUE"> <block id="ir/N:vPiv)oA{PdIF7L:" type="variables_get"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> </block> </value> </block> </value> <next> <block id="*XX4O?F|rgK$qj1i}S(T" type="controls_if"> <value name="IF0"> <block id="D@EH*_eHNWb~-/A(WH%s" type="logic_compare"> <field name="OP">NEQ</field> <value name="A"> <block id=";KvPi;{:t3c/b.AtB0*j" type="text"> <field name="TEXT"></field> </block> </value> <value name="B"> <block id="Ci|[%4CA-,ruBNk-qcrb" type="variables_get"> <field id="9bZ+SVj%$FZ4-|02x~-b" name="VAR" variabletype="">ttsContent</field> </block> </value> </block> </value> <statement name="DO0"> <block id="5UR.G|2u48?w)U{Z#BRb" type="control"> <mutation delay_input="false"></mutation> <field name="OID">0_userdata.0.TTS.AlleGeraete</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block id="gFO4!P8I6L$X^EO*JdTV" type="variables_get"> <field id="9bZ+SVj%$FZ4-|02x~-b" name="VAR" variabletype="">ttsContent</field> </block> </value> <next> <block id="y}~N]:Tu78Vn![3`6Sod" type="control"> <mutation delay_input="false"></mutation> <field name="OID">0_userdata.0.TTS.Queue</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block id="S?EhR`:raN#R28cSACXh" type="convert_object2json"> <field name="PRETTIFY">FALSE</field> <value name="VALUE"> <block id="uHk:s5/w-`ret$P8lwH^" type="variables_get"> <field id="Ys,h8KBm$.J$uF(7/#Ix" name="VAR" variabletype="">Queue</field> </block> </value> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </xml>
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable id="fQg0@`zMDgIn-poTW2%H" type="">AnzahlAnwesender</variable> <variable id=",YkGP6y^HQ4cv)6PN`sm" type="">i</variable> </variables> <block id=":+]]pb78P{uGI^ddKBO*" type="on_ext" y="-12" x="63"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow id="|rEJ$?8FPeZi$0PzLT2J" type="field_oid"> <field name="oid">default</field> </shadow> <block id="--GKQ_=@pYzAlEBH3S^1" type="selector"> <field name="TEXT">channel[state.id=alias.0.Anwesenheit.*]</field> </block> </value> <statement name="STATEMENT"> <block id="m4doZo86d7C$QUo0$1q|" type="variables_set"> <field id="fQg0@`zMDgIn-poTW2%H" name="VAR" variabletype="">AnzahlAnwesender</field> <value name="VALUE"> <block id="Vuk|Rt8tA7,IJj!Bk6GR" type="math_number"> <field name="NUM">0</field> </block> </value> <next> <block id="(oTGb9zH]5s7kG?1tNs3" type="controls_forEach"> <field id=",YkGP6y^HQ4cv)6PN`sm" name="VAR" variabletype="">i</field> <value name="LIST"> <block id="tWdCCo/cNFD.Z$:wP9lj" type="selector"> <field name="TEXT">channel[state.id=alias.0.Anwesenheit.*]</field> </block> </value> <statement name="DO"> <block id="^`9XQa$]xU8?@qB%~V{b" type="controls_if"> <value name="IF0"> <block id="X1{?y;5Cy]ou*h~_1~+?" type="logic_operation"> <field name="OP">AND</field> <value name="A"> <block id="BoX/,~ARsu7o3XHU7JsB" type="logic_compare"> <field name="OP">EQ</field> <value name="A"> <block id="c)bO[N8H3t5~32nS/SyB" type="math_number"> <field name="NUM">0</field> </block> </value> <value name="B"> <block id="eECw=2s=Qyrz?SrN|#TO" type="text_indexOf"> <field name="END">FIRST</field> <value name="VALUE"> <block id="g5^?sJev]i-Mj8LMZ$I6" type="variables_get"> <field id=",YkGP6y^HQ4cv)6PN`sm" name="VAR" variabletype="">i</field> </block> </value> <value name="FIND"> <shadow id="*R:cdG/Kee7{HSV+gJT:" type="text"> <field name="TEXT">.Handy.</field> </shadow> </value> </block> </value> </block> </value> <value name="B"> <block id="[R7`l@M-DKmf8@2c7X}2" type="logic_compare"> <field name="OP">EQ</field> <value name="A"> <block id="oMyvlf4pqtl~lszJ.2SK" type="math_number"> <field name="NUM">0</field> </block> </value> <value name="B"> <block id="dz@#96KZar/Qhb4[+~KO" type="text_indexOf"> <field name="END">FIRST</field> <value name="VALUE"> <block id="hJIxlp-DkGTn24*djYd$" type="variables_get"> <field id=",YkGP6y^HQ4cv)6PN`sm" name="VAR" variabletype="">i</field> </block> </value> <value name="FIND"> <shadow id="KFPBIa^zTHrL5%S7x7Qe" type="text"> <field name="TEXT">.Counter</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block id="EXvYX?UNSJ:^d68W$U(2" type="controls_if"> <value name="IF0"> <block id="-94XG+%*M0AtKi3Ku(@n" type="get_value_var"> <field name="ATTR">val</field> <value name="OID"> <shadow id="oS(|;g9[0okmj(!wewTp" type="text"> <field name="TEXT"></field> </shadow> <block id="MoTx^qRi]75=mf87A#{S" type="variables_get"> <field id=",YkGP6y^HQ4cv)6PN`sm" name="VAR" variabletype="">i</field> </block> </value> </block> </value> <statement name="DO0"> <block id="87XsrMzOguhL_C}Jt$n2" type="math_change"> <field id="fQg0@`zMDgIn-poTW2%H" name="VAR" variabletype="">AnzahlAnwesender</field> <value name="DELTA"> <shadow id="I7ywefSt,!5%%JguN={)" type="math_number"> <field name="NUM">1</field> </shadow> </value> </block> </statement> </block> </statement> </block> </statement> <next> <block id="n|F}!$-RKG8e+aC=wIZD" type="update"> <mutation delay_input="false"></mutation> <field name="OID">0_userdata.0.Anwesenheit.Counter</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block id="0o3BSp%A5oC5M:gK[rZQ" type="variables_get"> <field id="fQg0@`zMDgIn-poTW2%H" name="VAR" variabletype="">AnzahlAnwesender</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </xml>
<xml xmlns="http://www.w3.org/1999/xhtml"> <block id="u_ourBfWonu[Zb+;+Z~T" type="on_ext" y="148" x="13"> <mutation items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow id="bPtCyvQb;E{-t`_5)iIx" type="field_oid"> <field name="oid">0_userdata.0.TTS.AlleGeraete</field> </shadow> </value> <statement name="STATEMENT"> <block id="H8o7T/G=ljg*Bt8p*=Jc" type="sayit"> <field name="INSTANCE">all</field> <field name="LANGUAGE"></field> <field name="LOG"></field> <value name="MESSAGE"> <shadow id="|YpO.:iVUzd|4r8yLK=[" type="text"> <field name="TEXT">text</field> </shadow> <block id="M`xnPuSf7zI2298mZugZ" type="on_source"> <field name="ATTR">state.val</field> </block> </value> </block> </statement> </block> </xml>