NEWS
Blockly für zigbeeschalter welcher nur read hat
-
@robbi12 sagte: Ganz kurz wird geschaltet.
Dann triggere auf "ist größer als letztes".
-
@paul53 Danke.
Ist es möglich aus den langdrücken Werten was zu basteln damit die Markise so lange fährt wie ich drücke und dann beim loslassen stopt?
Das wären die Datenpunkte
-
@robbi12 sagte: Das wären die Datenpunkte
Wie verhalten sich die DP? Wodurch unterscheiden sich "move_down_right" und "move_up_right" bzw. wie werden sie aktiviert? "stop_right" wird beim Loslassen aktiviert?
-
@paul53 Also durch die rechte Taste des Schalters wird beim langend Drücken der Taste move_down_right geschaltet. Geht wie oben auf true und dann selbständig auf false. Wenn diese Taste erneut gedrückt wird dann geht der Datenpunkt move_up_right kurzfristig auf true und wieder zurück. Dies immer im Wechsel bei erneutem Tastendruck.
stop_right wird beim loslassen aktiviert.
-
@robbi12 sagte: Dies immer im Wechsel bei erneutem Tastendruck.
stop_right wird beim loslassen aktiviert.Versuche es mal so mit Taste rechts = "ausfahren" (close) und Taste links = "einfahren" (open).
-
@paul53 Hallo Paul.. Funktioniert schon fast.
Noch kleine Fehler. Es wird nicht immer geschalten. Ich muss zweimal auf den jeweiligen Schalter drücken.
Beim longpress funktionier es.
-
@paul53 Hallo Paul. Ich hole den Eintrag nochmal hervor.
Wie gesagt es funktioniert, so dass man letztlich damit leben kann.
Perfekt wäre es wenn man die "Kleinigkeit" noch ausbügeln könnte.
Also die Schaltpunkte wechseln folgendermaßen:
rechte Taste: off_right/on_right
linke Taste: off_left/on_left
rechte Taste lang: brightness_move_down_right/brightness_move_up_right
linke Taste lang: brightness_move_down_left/brightness_move_up_left
Beim Landdruck nach dem loslassen immer: brightness_stop_right/brightness_stop_left
Ach ja, dies ist mir auch aufgefallen:
Wenn ich z.B. links drücke und er die Markise ausfährt, beim Drücken auf rechts, stopt sie nicht, sondern fährt dann gleich in die entgegengesetzte Richtung.
Wenn ich nochmal auf links drücke, dann klappt es mit dem Stop
-
@robbi12 sagte: die Markise ausfährt, beim Drücken auf rechts, stopt sie nicht, sondern fährt dann gleich in die entgegengesetzte Richtung.
Wenn ich nochmal auf links drücke, dann klappt es mit dem StopJa, so ist es programmiert.
Soll jeder Tastendruck während des Aus-/Einfahrens stoppen, braucht man die Information, dass die Markise fährt. Gibt es dafür einen Aktor-Datenpunkt? Falls nicht, gibt es einen Datenpunkt, der die Position anzeigt?
EDIT: Blockly-Version mit Auswertung der Position.
-
Die Markise wird über einen Shelly gesteuert.
Der Datenpunkt Power ändert sich bei der Bewegung, da hier ja die Leistung abgerufen wird.
Ebenfalls der Punkt State und Position.
-
@robbi12 sagte: State und Position.
Mein Vorschlag oben wertet die "Position" aus.
-
@paul53 Hallo, habe es nachgebaut. Fährt aber nicht ein. Evtl. habe ich noch einen Fehler drin.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="?.([A*WCW5[)/gYOuEN[">position</variable> <variable id="_n6m^Nl-K?eJ}-WKj,~e">move</variable> </variables> <block type="procedures_defnoreturn" id="^+yr!wz-zf{64_}rT22Z" x="-287" y="-137"> <field name="NAME">stoppen</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="control" id="?`IT!yD3MjN/;@Zif5?s"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.shellyplus2pm#a0dd6c28a394#1.Cover0.Stop</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="B$L{x|aFIT^(jSM4~UVe"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="variables_set" id="~*?ZI6sM/I3r=N/*K/UA"> <field name="VAR" id="_n6m^Nl-K?eJ}-WKj,~e">move</field> <value name="VALUE"> <block type="logic_boolean" id="}~+B]#UV~x)Htu@^{HaH"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> </block> <block type="variables_set" id="h6AXh}TW/n`S)+]KWK~Q" x="-287" y="-12"> <field name="VAR" id="?.([A*WCW5[)/gYOuEN[">position</field> <value name="VALUE"> <block type="get_value" id="AFXj42IWQCIdXK[{*lt~"> <field name="ATTR">val</field> <field name="OID">shelly.0.shellyplus2pm#a0dd6c28a394#1.Cover0.Position</field> </block> </value> <next> <block type="on" id="`e}GZ0B~!f`Oayf$gaGo"> <field name="OID">shelly.0.shellyplus2pm#a0dd6c28a394#1.Cover0.Position</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="X|h!}P}=sHN?J9JkK_!2"> <field name="VAR" id="?.([A*WCW5[)/gYOuEN[">position</field> <value name="VALUE"> <block type="on_source" id="Z~5awLRP)#Y`t]?_7jXT"> <field name="ATTR">state.val</field> </block> </value> <next> <block type="controls_if" id="AOr!6tDE,=nMM^7.};IL"> <value name="IF0"> <block type="logic_operation" id="^1;M7QpeOwYkVCzLZo)s" inline="false"> <field name="OP">OR</field> <value name="A"> <block type="logic_compare" id=")h4pHPs#`9$er}C:@,ne"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id=",N%rf=W}+)WGl.7bnM|d"> <field name="VAR" id="?.([A*WCW5[)/gYOuEN[">position</field> </block> </value> <value name="B"> <block type="math_number" id="h[ek]O~5:)v5amG1s(+j"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="byf1BpPawsF%l=Fh}LYn"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="`adu5i~qKoRzVNgln!`9"> <field name="VAR" id="?.([A*WCW5[)/gYOuEN[">position</field> </block> </value> <value name="B"> <block type="math_number" id="E7pa=Tpv{]wV@qICi!R3"> <field name="NUM">100</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="4d06k4_3v;4_TA*?Dvm:"> <field name="VAR" id="_n6m^Nl-K?eJ}-WKj,~e">move</field> <value name="VALUE"> <block type="logic_boolean" id="39;z00RZI(G#HUXG5^=v"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </next> </block> </statement> <next> <block type="on_ext" id="S$^cKUM9f4-40*0Ux!GX"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="2LVzfr`.YXuX{wBjMxqR"> <field name="oid">zigbee.0.003c84fffe8bec61.brightness_stop_right</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="7:-Z?Lz@DzU;iMZ?-j/r"> <field name="oid">zigbee.0.003c84fffe8bec61.brightness_stop_left</field> </shadow> </value> <statement name="STATEMENT"> <block type="procedures_callnoreturn" id="|~HfV7cldj:lVFlMn6ml"> <mutation name="stoppen"></mutation> </block> </statement> <next> <block type="on_ext" id="El2yiUX6:^87,b0oBm`#"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="4"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="1v[;{L*u(qX7tm9fiMfJ"> <field name="oid">zigbee.0.003c84fffe8bec61.on_right</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id=".*y9_k$5nSU{#4QnB2^#"> <field name="oid">zigbee.0.003c84fffe8bec61.off_right</field> </shadow> </value> <value name="OID2"> <shadow type="field_oid" id="Nk5O,wQm4(YEgn1-dw~W"> <field name="oid">zigbee.0.003c84fffe8bec61.brightness_move_down_right</field> </shadow> </value> <value name="OID3"> <shadow type="field_oid" id="]m{w#7yLUbD@#_N7zd01"> <field name="oid">zigbee.0.003c84fffe8bec61.brightness_move_up_right</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="rZ,O^!YQEKb$Ku~3idOD"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="variables_get" id="Z?MF(9mmt|~=gWa~nh$h"> <field name="VAR" id="_n6m^Nl-K?eJ}-WKj,~e">move</field> </block> </value> <statement name="DO0"> <block type="procedures_callnoreturn" id="NqER3cP5Q9={U-{~lGqj"> <mutation name="stoppen"></mutation> </block> </statement> <value name="IF1"> <block type="logic_compare" id="lhK:0;^NBldqbE0ypr2|"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="O9G#WdI:L^Y3t%~I@25["> <field name="VAR" id="?.([A*WCW5[)/gYOuEN[">position</field> </block> </value> <value name="B"> <block type="math_number" id="0-a7ZscWarix@2i}oPs_"> <field name="NUM">100</field> </block> </value> </block> </value> <statement name="DO1"> <block type="control" id=".,pg/bl#(:K$C`]]|qN3"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.shellyplus2pm#a0dd6c28a394#1.Cover0.Close</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="U^$zr-S-D~sH:rYK{=YR"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="variables_set" id="0Seh6rq=Yf%OF:4jp0={"> <field name="VAR" id="_n6m^Nl-K?eJ}-WKj,~e">move</field> <value name="VALUE"> <block type="logic_boolean" id="tf*^X2Q3pv[xV*ADK7Ej"> <field name="BOOL">TRUE</field> </block> </value> </block> </next> </block> </statement> </block> </statement> <next> <block type="on_ext" id="Jz2}){fRERquPQ5yrkG`"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="4"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="e3A5.bx](fQ0/sag=s(}"> <field name="oid">zigbee.0.003c84fffe8bec61.on_left</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="oH^6vm2r@`Tz4ca|xQg7"> <field name="oid">zigbee.0.003c84fffe8bec61.off_left</field> </shadow> </value> <value name="OID2"> <shadow type="field_oid" id="r}z)%UU@Ryd`gD6U{D=l"> <field name="oid">zigbee.0.003c84fffe8bec61.brightness_move_up_left</field> </shadow> </value> <value name="OID3"> <shadow type="field_oid" id="k7{zQikaV4t7CMafyY@("> <field name="oid">zigbee.0.003c84fffe8bec61.brightness_move_down_left</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="jFs!{Sp7q42eV(Xig0FJ"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="variables_get" id=":dfkL6uL?`]LumIgSWq2"> <field name="VAR" id="_n6m^Nl-K?eJ}-WKj,~e">move</field> </block> </value> <statement name="DO0"> <block type="procedures_callnoreturn" id="%KP5wZkq8i2@HdCgtcvB"> <mutation name="stoppen"></mutation> </block> </statement> <value name="IF1"> <block type="logic_compare" id="FVmxA197upN=1oRlxhoS"> <field name="OP">GT</field> <value name="A"> <block type="variables_get" id=":YpltyZ7MXRPi6q4tG;^"> <field name="VAR" id="?.([A*WCW5[)/gYOuEN[">position</field> </block> </value> <value name="B"> <block type="math_number" id="Z7*gG`mdQ8Y!qN:}=$e/"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO1"> <block type="control" id="6Pk.f4=t$GsBpqw+5aj2"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.shellyplus2pm#a0dd6c28a394#1.Cover0.Open</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="*MDo^}r+n1TT$`=F:J0z"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="variables_set" id="Vc/#r?SplyVdE*Q@HqiS"> <field name="VAR" id="_n6m^Nl-K?eJ}-WKj,~e">move</field> <value name="VALUE"> <block type="logic_boolean" id="A(Jc.rwO7?VxC_?xxo[1"> <field name="BOOL">TRUE</field> </block> </value> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@paul53 Gerade noch getestet.
Es funktioniert, wenn die Markise nicht ganz auf 0 oder 100 steht. Steht sie ganz drin 0 oder ganz draußen dann funktioniert es nicht.
-
@paul53 Habs gerade selber gefunden. Ich habe die Werte auf kleiner gleich 100 und auf größer gleich 0 gesetzt.
Bei mir ist es leider im ein rumprobieren. Ich kann nicht mal nachverfolgen was dies mit den Werten ist.
Du bist ein Profi. Danke dafür
-
@robbi12 sagte: Evtl. habe ich noch einen Fehler drin.
Die Richtungen stimmen?
- Close (rechte Tasten) fährt Richtung 100 %
- Open (linke Tasten) fährt Richtung 0 %
-
@robbi12 sagte: Ich habe die Werte auf kleiner gleich 100 und auf größer gleich 0 gesetzt.
Das ist nicht zielführend. Vermutlich sind die Vergleiche falsch herum?
EDIT: Funktioniert es so?
Ziel der Vergleiche ist, dass nicht noch mal gesteuert wird, wenn die betreffende Endlage erreicht sind. Außerdem soll
move
dann auf false bleiben, damit der nächste Tastendruck keinen Stopp auslöst. -
@paul53 Du hattest recht. So funktioniert es.
Vielen, Vielen Dank