NEWS
Script Optimierung
-
Hallo Forum
Mein Ziel ist es 4 Rollos über ein Script zu steuern. Ich muss für jeden Befehl + Rollo einen eigenen Datenpunkt haben.
Ich habe jetzt das Script soweit das es funktioniert. Ich frage mich aber ob man es noch eleganter/kleiner wie auch immer lösen kann. Hier mal im Screenshot ein Auszug.Und Im Codeblock komplett
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="57bEKpiSM@n-bDRZt:KV">ziel</variable> <variable id="[ai{bppvkC}q2b6P]4sR">befehl</variable> </variables> <block type="comment" id=")siyY2NZD_NF13@8zW1*" x="38" y="-462"> <field name="COMMENT">Falls einer der Rollo Datenpunkte wahr sind....</field> <next> <block type="on_ext" id="c-PcJ8R:5Labh~=O}nm}"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="6"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="aQ9d%![bAF.P3`u?Zug="> <field name="oid">0_userdata.0.Rollo_1_runter</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="%lzi(_bM`W^#8QDb[N|Z"> <field name="oid">0_userdata.0.Rollo_1_auf</field> </shadow> </value> <value name="OID2"> <shadow type="field_oid" id="JTDL^iW@V=yji`j/PM=6"> <field name="oid">0_userdata.0.Rollo_1_Schatten</field> </shadow> </value> <value name="OID3"> <shadow type="field_oid" id="NJjy6S-Oz*gi0@dJ3t{z"> <field name="oid">0_userdata.0.Rollo_2_Schatten</field> </shadow> </value> <value name="OID4"> <shadow type="field_oid" id="?pn}I*q[9jO*IMV,:/gi"> <field name="oid">0_userdata.0.Rollo_2_auf</field> </shadow> </value> <value name="OID5"> <shadow type="field_oid" id="`%G69hRu{Twh=bp}~6QT"> <field name="oid">0_userdata.0.Rollo_2_zu</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="zx:=$0DazbB3u,17tyle"> <mutation elseif="5"></mutation> <value name="IF0"> <block type="logic_compare" id="tunV7P?ZvW#0iX@G{NjJ"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="1rY4bn6Q?n[p!pUn*5lr"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Rollo_1_runter</field> </block> </value> <value name="B"> <block type="logic_boolean" id="}@@`J?$}8]b)~$$wR/HG"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="(fY!n!C]W:xJ14eEQ]Ec"> <field name="VAR" id="57bEKpiSM@n-bDRZt:KV">ziel</field> <value name="VALUE"> <block type="text" id="33$y]}78BBf/dDB;^O~c"> <field name="TEXT">cmd/jarolift/shutter/0</field> </block> </value> <next> <block type="variables_set" id="]PG(X%4H|@%EOMy,o@!g"> <field name="VAR" id="[ai{bppvkC}q2b6P]4sR">befehl</field> <value name="VALUE"> <block type="text" id=")16EJ3Px-f*GNV/$5oBR"> <field name="TEXT">DOWN</field> </block> </value> <next> <block type="procedures_callnoreturn" id="c|2ilR+h}]%d%rUw6M~Q"> <mutation name="Rolladensteuerung"></mutation> <next> <block type="control" id="4.d(,O|KXR{4/sU^Z$TY"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Rollo_1_runter</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="~k{HQv|_EUjXdh|FF`R%"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_compare" id="![_J^0$?DWc@eJ[%=(S)"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="uN:96!B`B$hIF;+tf??o"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Rollo_1_auf</field> </block> </value> <value name="B"> <block type="logic_boolean" id="cPDHr/6pO%Ksx|Pb1kO0"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO1"> <block type="variables_set" id="79fU$mw6RN/@7gAi%mHr"> <field name="VAR" id="57bEKpiSM@n-bDRZt:KV">ziel</field> <value name="VALUE"> <block type="text" id="#afJug-X(8GEg!r/qLCu"> <field name="TEXT">cmd/jarolift/shutter/0</field> </block> </value> <next> <block type="variables_set" id="p_#T)[SMfCktz%KMfxId"> <field name="VAR" id="[ai{bppvkC}q2b6P]4sR">befehl</field> <value name="VALUE"> <block type="text" id="p8]3n.^!WlR2x#j?]O^+"> <field name="TEXT">UP</field> </block> </value> <next> <block type="procedures_callnoreturn" id="!JJti8]?,s4^axE,};yA"> <mutation name="Rolladensteuerung"></mutation> <next> <block type="control" id="d(Em2HvA2l-/0?:q-Viq"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Rollo_1_auf</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="Yy`*hVUyLv0}VC#0=dn}"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF2"> <block type="logic_compare" id="^h;sgsNjM?1.g[f9zhGb"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="RCDBP99M26;GCa+;4BY5"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Rollo_1_Schatten</field> </block> </value> <value name="B"> <block type="logic_boolean" id="IRV6~Nj5q]f@G0_w2G?J"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO2"> <block type="variables_set" id="VxK!|z|V_~Wm+9s+phcI"> <field name="VAR" id="57bEKpiSM@n-bDRZt:KV">ziel</field> <value name="VALUE"> <block type="text" id="9KY;@8Yd*yi]F_0F0^uz"> <field name="TEXT">cmd/jarolift/shutter/0</field> </block> </value> <next> <block type="variables_set" id=";gS.O#dmd(eUvbpJ]=]^"> <field name="VAR" id="[ai{bppvkC}q2b6P]4sR">befehl</field> <value name="VALUE"> <block type="text" id="%lC(z]f)C+`Mu4VG8efh"> <field name="TEXT">SHADE</field> </block> </value> <next> <block type="procedures_callnoreturn" id="Ads]2M3*N+!K_:tNUEN;"> <mutation name="Rolladensteuerung"></mutation> <next> <block type="control" id="0}$rQ7ktHr1|Ayvo!d{K"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Rollo_1_Schatten</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="OV!]RctGA=u!_gwvt/:g"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF3"> <block type="logic_compare" id="%V.u2QF1R2|ed=3PB1?V"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="b{vUG9F2RN#EZQu,lOfq"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Rollo_2_Schatten</field> </block> </value> <value name="B"> <block type="logic_boolean" id=")VWz]axlz#cga+;xD;1z"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO3"> <block type="variables_set" id="?+,7_tQ8/V12R+c/AN0X"> <field name="VAR" id="57bEKpiSM@n-bDRZt:KV">ziel</field> <value name="VALUE"> <block type="text" id="Q1b-o;lIasBlF$-;+2sX"> <field name="TEXT">cmd/jarolift/shutter/1</field> </block> </value> <next> <block type="variables_set" id="ytLO,TdB1iOjN]-e/A]!"> <field name="VAR" id="[ai{bppvkC}q2b6P]4sR">befehl</field> <value name="VALUE"> <block type="text" id="[m;c9%e*!Q$*[@](A`j0"> <field name="TEXT">SHADE</field> </block> </value> <next> <block type="procedures_callnoreturn" id="f|.HGTW($2e23}T+yj(T"> <mutation name="Rolladensteuerung"></mutation> <next> <block type="control" id="N@h#n-ho1PvRh=-5ei:p"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Rollo_1_Schatten</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="B^kU`MB[l:GS/HLv|0|_"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF4"> <block type="logic_compare" id="SGj1^Kw-;HUIo%ZUUN2d"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="~H0xWwl1B{0@[h1Af;b#"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Rollo_2_auf</field> </block> </value> <value name="B"> <block type="logic_boolean" id="$S^IIG:3TB%FsyuB-w;w"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO4"> <block type="variables_set" id="AXn%V8nTVdzNp5]ll*r~"> <field name="VAR" id="57bEKpiSM@n-bDRZt:KV">ziel</field> <value name="VALUE"> <block type="text" id="-1zz_leTAN:9{5`xj1=I"> <field name="TEXT">cmd/jarolift/shutter/1</field> </block> </value> <next> <block type="variables_set" id="|dP9R?8:snEtxqgnDI+M"> <field name="VAR" id="[ai{bppvkC}q2b6P]4sR">befehl</field> <value name="VALUE"> <block type="text" id="0ax!WI,S*S1}?t)Oj,}q"> <field name="TEXT">UP</field> </block> </value> <next> <block type="procedures_callnoreturn" id="seOyPWH=-lQBo*H:om*N"> <mutation name="Rolladensteuerung"></mutation> <next> <block type="control" id="nOu,=n,9}fKQ,-,2Pu7K"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Rollo_2_auf</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="/t,p*@lJO%lFPl;!{s*K"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF5"> <block type="logic_compare" id="cW0C7/e)t3eFi.UEPbUi"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="c/kHu,!?/kN=W0bQC,gs"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Rollo_2_zu</field> </block> </value> <value name="B"> <block type="logic_boolean" id="*8?0LrMg-QQFS=iOPa#v"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO5"> <block type="variables_set" id="NlD0U,8nq@(i^cR[R{7?"> <field name="VAR" id="57bEKpiSM@n-bDRZt:KV">ziel</field> <value name="VALUE"> <block type="text" id="@ki`K.!Qq1Bz6w`N$,3@"> <field name="TEXT">cmd/jarolift/shutter/1</field> </block> </value> <next> <block type="variables_set" id=".P3!N;EUDnL0OJv1~q#:"> <field name="VAR" id="[ai{bppvkC}q2b6P]4sR">befehl</field> <value name="VALUE"> <block type="text" id=".4@P$31v=WS4)hgQlTn9"> <field name="TEXT">DOWN</field> </block> </value> <next> <block type="procedures_callnoreturn" id="WuO/XApc0B(NNIU8Q+F@"> <mutation name="Rolladensteuerung"></mutation> <next> <block type="control" id="e=[R0}H9jqOa3{S3PSO_"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Rollo_2_zu</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="U#TnnZ1B%bHe{at8Ypc!"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> <block type="procedures_defnoreturn" id="SAPE[xPiiiIiJv~!%w``" x="788" y="-412"> <field name="NAME">Rolladensteuerung</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="sendto_custom" id="PHp}Je=L4E}b3/{.5F`:"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="topic,message" with_statement="false"></mutation> <field name="INSTANCE">mqtt.0</field> <field name="COMMAND">sendMessage2Client</field> <field name="LOG"></field> <field name="WITH_STATEMENT">FALSE</field> <value name="ARG0"> <shadow type="text" id="-Y^~7Ipx+-sO@cP.D#-^"> <field name="TEXT">cmd/jarolift/shutter/0</field> </shadow> <block type="variables_get" id="hTmoO[eh|}XuLrgR(Uw+"> <field name="VAR" id="57bEKpiSM@n-bDRZt:KV">ziel</field> </block> </value> <value name="ARG1"> <shadow type="text" id="We:LC_;wL8$`D[7t.39!"> <field name="TEXT">DOWN</field> </shadow> <block type="variables_get" id="b?xz`Gw]|=e[.(sgE!g*"> <field name="VAR" id="[ai{bppvkC}q2b6P]4sR">befehl</field> </block> </value> </block> </statement> </block> </xml>
Ich bin für jeden Tipp dankbar
-
@psyganja
Ich würde Arrays verwenden: -
@paul53
Ui versuche das gerade zu verstehen. Müssen die Befehle bei "setze Befehle erzeuge Liste mit" Alle wiederholt werden? Es kommen ja noch 2 Rollos dazu.
Könnte man nicht noch abfragen welcher Datenpunkt sich geändert hat und danach den Befehl definieren? Schatten=Shade auf=UP und zu=DOWNEDIT
Beim nachbauen bin ich noch über "prüfe idx > 3" dort kann ich dann natürlich nur 2 unterscheiden. -
@psyganja sagte: Es kommen ja noch 2 Rollos dazu.
Könnte man nicht noch abfragen welcher Datenpunkt sich geändert hat und danach den Befehl definieren? Schatten=Shade auf=UP und zu=DOWNKann man:
-
@paul53
Ja cool und das kann ich dann sogar für die anderen erweitern.
Vielen Dank!/Edit
Rein zum Verständnis. Warum wird mit "ist größer als letztes" getriggert und nicht mit " ist wahr"? Dieser Trigger "Pfeil Objekt ID" bezieht sich dann immer auf die Objekt ID die den Trigger ausgelöst hat? -
@psyganja sagte: Warum wird mit "ist größer als letztes" getriggert und nicht mit " ist wahr"?
Es kann auch auf "ist wahr" getriggert werden. Macht bei Datenpunkten, die nicht zyklisch aktualisiert werden, keinen Unterschied, wenn sich auch der Wert ändert. Wenn Trigger auf "ist wahr" verwendet wird, kann das Rücksetzen am Ende des Skripts entfallen - der Wert bleibt immer true und der Trigger reagiert auf Aktualisierung des Zeitstempels.
@psyganja sagte in Script Optimierung:
Dieser Trigger "Pfeil Objekt ID" bezieht sich dann immer auf die Objekt ID die den Trigger ausgelöst hat?
Ja.
-
@paul53
Ich kann das Script heute leider nicht live testen, nachgebaut habe ich es schon und verstanden auch, denke ich. Also kann es sein das da ein Fehler drin ist? Und zwar der Teil wo der string manipuliert wird, muss da nicht jeweils 21 rein? -
@psyganja sagte: muss da nicht jeweils 21 rein?
Die Ziffer befindet sich an Stelle 20 - habe ich getestet.
-
@paul53
Oben auch richtig? Es wird doch "0_userdata.0.Rollo_1_" abgeschnitten? Und das sind 21 Zeichen. Oder verstehe ich das falsch?/Edit
Ups mein Fehler, jetzt hab ich es gecheckt. Ist schon spät. -
@psyganja sagte: das sind 21 Zeichen.
Richtig, und der Rest beginnt ab 22. Zeichen.
-
@paul53
Mein Script hat ja schon funktioniert. Aber dein Script ist ja viel komfortabler und vor allem habe ich eine Menge dazu gelernt.
Jetzt habe ich dank deiner Hilfe mein Script zum Rollo Status umgebaut.
Vorher
Nachher
Schon ein Unterschied.Jetzt frage ich mich was passiert wenn alle Datenpunkte gleichzeitig geändert werden? Thema Gruppensteuerung der Rollos.
-
@psyganja sagte: was passiert wenn alle Datenpunkte gleichzeitig geändert werden?
Ein echtes "gleichzeitig" gibt es nicht. Es hängt vom Telegram-Adapter ab, was passiert, wenn er in kurzem Abstand mehrmals angesprochen wird.
-
@paul53
Das heißt, da ja die Datenpunkte nicht gleichzeitig geändert werden, wäre das Script "schnell genug" um die Variablen richtig zu setzen. Nur der Telegram Adapter könnte die schnellen Aufrufe nicht ausführen./Edit
Also wäre es klug eine Liste zu erstellen welche Rollos geschlossen wurden und diese dann versenden. -
@psyganja sagte: Nur der Telegram Adapter könnte die schnellen Aufrufe nicht ausführen.
Das weiß ich nicht, denn ich verwende ihn nicht.
-
@paul53 said in Script Optimierung:
Das weiß ich nicht, denn ich verwende ihn nicht.
Das war ja auch keine Frage
Hättest du einen Tipp wie ich das mit der Liste anstellen kann? -
-
@paul53
Ich habe mal etwas versucht, aber leider funktioniert es nicht, ich weiß nicht warum.
Script
Log
-
@psyganja
Die Debug-Ausgabe der Liste mache direkt ohne "erstelle Text aus" und mit Level "info" oder "warning". -
@paul53
Und schon wieder geholfen. Aber ich verstehe nicht ganz warum mein Beispiel nicht geklappt hat. Warnung und Error nehme ich eigentlich nur weil es sich dann Farblich abhebt.Es hat sich auch heute gezeigt, das ich eine Liste brauche. Meine Frau hat per Gruppensteuerung alle Rollos runter gemacht und ich bekomme nur das 1. Rollo angezeigt.
-
@psyganja sagte: Warnung und Error nehme ich eigentlich nur weil es sich dann Farblich abhebt.
Dann nimm "info", denn "debug" wird unterm Skript nicht angezeigt