NEWS
[gelöst] Frage zum entprellen von Schaltern
-
Hallo,
da mich mein Hersteller der Multimediasteuerung durch Konkurs im Stich gelassen hat, bin ich nun dabei die Steuerung selbst zu erstellen.
Die Hardware ist ein WIFI to IR Interface, bei welchem ich einzelne Befehle mittels URL ansteuern kann.
Habe mal folgende Steuerungsoberfläche gebastelt.
Die einzelnen Tasten bestehen aus dem Bulb on/off Widget, welche beim Druck einem Datenpunkt einen Wert zuweist. (Taste 1 –> 1, Taste 2 --> 2...)
Im Script sende ich dann den jeweiligen Befehle.
Leider passiert es regelmäßig, dass ein Befehl mehrmals gesendet wird. Wenn ich wirklich nur ganz kurz antippe dann passt es. Bei einem normalen Druck kommt der Befehl mehrmals..
Hat nun jemand eine Idee, wie ich diese Tasten "entprellen" kann?. Also das er wenn einmal einen Druck registriert hat die nächsten paar Millisekunden nichts mehr annimmt?
Lg
Günther
PS: VIS = 0.12.4
-
Hallo Jeeper.at
Bau doch im Blockly einen "Stopper" ein.
Blockly Import
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="on" id="@t_e}|]DG/O07f-(v-5k" x="-412" y="13"><field name="OID">Object ID</field>
<field name="CONDITION">ne</field><statement name="STATEMENT"><block type="controls_if" id="-e%9|p7+YNm0%uCfc;1c"><value name="IF0"><block type="logic_compare" id="0(pbF/wL;)wA^adaD}5N"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id=")+dV=k:UX|*M*G*6J7xy"><field name="VAR">Stopper</field></block></value> <value name="B"><block type="logic_boolean" id="nDHW`OiN~!.jTXS9`!vn"><field name="BOOL">FALSE</field></block></value></block></value> <statement name="DO0"><block type="variables_set" id=",#s5,-:Y-8np@n}R%1-9"><field name="VAR">Stopper</field> <value name="VALUE"><block type="logic_boolean" id="M=}8M~Ph[@d..E8^:#jV"><field name="BOOL">TRUE</field></block></value> <next><block type="controls_if" id=".[7:8o*AKo~IhEP?q*d!"><mutation elseif="3"></mutation> <value name="IF0"><block type="get_value" id="^C`J/-voGg?9|ocLE((w"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <statement name="DO0"><block type="procedures_callnoreturn" id="An)MH:k)u6M](gspJ|Is"><mutation name="Ausgabe"><arg name="x"></arg></mutation> <value name="ARG0"><block type="text" id="s3~#v8VWFJwcNzP,_yFw"><field name="TEXT">http://...........</field></block></value></block></statement> <value name="IF1"><block type="get_value" id="DM@P=DU~2S5EaGxbreJJ"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <statement name="DO1"><block type="procedures_callnoreturn" id="!uHgp}q~IkJaT,WytRO/"><mutation name="Ausgabe"><arg name="x"></arg></mutation> <value name="ARG0"><block type="text" id="TGNW_CliFue-Y1:2F-])"><field name="TEXT">http://...........</field></block></value></block></statement> <value name="IF2"><block type="get_value" id="bHX1*l`q[t)lLHS!%{oj"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <statement name="DO2"><block type="procedures_callnoreturn" id="T1xel!oRR8`2+f!a,UTW"><mutation name="Ausgabe"><arg name="x"></arg></mutation> <value name="ARG0"><block type="text" id="WIg5NU^u:pT+h_8k`3jX"><field name="TEXT">http://...........</field></block></value></block></statement> <value name="IF3"><block type="get_value" id="Mp?A*/:X6Gx2i{PYa4{T"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <statement name="DO3"><block type="procedures_callnoreturn" id="U(,X/EsEx?|T:kWL)~jS"><mutation name="Ausgabe"><arg name="x"></arg></mutation> <value name="ARG0"><block type="text" id="Magg|;a[TjL`8_C;bq`G"><field name="TEXT">http://...........</field></block></value></block></statement></block></next></block></statement></block></statement></block>
<block type="procedures_defnoreturn" id="d6=F=/SszHt#PIQ%Ix?:" x="113" y="163"><mutation><arg name="x"></arg></mutation>
<field name="NAME">Ausgabe</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
<statement name="STACK"><block type="request" id="bJ+WLjndL@uq-N@Q{W?5"><mutation with_statement="false"></mutation>
<field name="WITH_STATEMENT">FALSE</field><value name="URL"><shadow type="text" id="[TUMszpJT#pk{Lt`m#;C"><field name="TEXT">text</field></shadow> <block type="variables_get" id="^*)XmRGq1nm_4]3vz{0o"><field name="VAR">x</field></block></value> <next><block type="variables_set" id="YEe7dE-T!fu#WP0=naU="><field name="VAR">Stopper</field> <value name="VALUE"><block type="logic_boolean" id="H:W}n[Qu1aTE2lRObL6J"><field name="BOOL">FALSE</field></block></value></block></next></block></statement></block></xml>
! ````
So könnte es funktionieren.
Grüße
-
Hallo,
in Blockly kann ich das leider nicht. Aber zum Entprellen kannst du setTimeout verwenden:
var idTaste = "......"; var tastendruck; on(idTaste}, function (obj) { if (!tastendruck) { tastendruck = true; setTimeout(function () { tastendruck = undefined; }, 500); // Aktion mit URL } });
Gruß
Pix
-
Danke erstmal für die Tipps.
Da ich die Multimedianlage gerade an Games of Thrones und meine Frau verloren habe kann ich erst morgen testen.
rofl
Lg
Günther
-
So, die Tests sind leider nicht erfolgreich abgeschlossen.
Allerdings können die Lösungsvorschläge nichts dafür. Ich habe sie umgesetzt, ändert allerdings nichts am Ergebnis. Nach dem einschalten des Loggings kam das Drama zum Vorschein. Der URL Befehl wird eh nur einmal gesendet. Das bedeutet, das ich ein Problem mit meiner Hardware habe warum die manchmal mehrmals sendet.
IOBroker kann da nichts dafür.
Aber immerhin habe ich etwas in Blockly gelernt, nämlich wie man diese Anforderung mit Ausgabe und einer Variable deutlich besser gestaltet als ich das getan habe.
Also war es nicht ganz umsonst.
Vielen dank für die Infos.
lg
Günther
-
Immer wieder gerne.
Danke für die Rückmeldung.
Grüße
-
Vielleicht ist das IR Kommando schon ^zu lang^ eingelernt…