Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Vis Button Long Press

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Vis Button Long Press

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Mr_Sans last edited by

      Hallo Zusammen

      Ich habe folgendes "Problem" und im Forum noch keine Lösung gefunden.
      Ich würde gerne einen Button in der Vis so benutzen, dass wenn ich kurz drücke, er ein false auf Objekt ID 1 sendet
      wenn ich lange drücke (>1s) soll er ebenfalls ein false aber auf Objet ID 2 senden.

      Ich habe Scripts gefunden, welche Taster Auslesen (Hardware) diese funktionieren aber anscheiden mit Virtuellen Buttons aus der Vis nicht.
      Hat jemand eine Tipp für mich?

      Besten Dank

      CrunkFX paul53 2 Replies Last reply Reply Quote 0
      • CrunkFX
        CrunkFX Forum Testing @Mr_Sans last edited by

        @Mr_Sans Schau Mal hier:
        https://forum.iobroker.net/topic/12684/gelöst-dimmen-mit-long-press/31

        Das sollte sich auf deine Wünsche abändern lassen.

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Mr_Sans last edited by

          @Mr_Sans sagte:

          Hat jemand eine Tipp für mich?

          Buttons in Vis ändern meines Wissens den Wert nicht und reagieren nicht auf "Loslassen", sondern nur auf "Drücken". Was möglich wäre, einen einfachen Klick von einem Doppelklick zu unterscheiden, wobei zwischen zwei Aktualisierungen immer 1 s vergeht - egal wie schnell man den 2. Klick ausführt. Mit einem Blockly könnte man unterscheiden:

          Blockly_temp.JPG

          M 1 Reply Last reply Reply Quote 0
          • M
            Mr_Sans @paul53 last edited by

            @paul53

            Hey Paul. Danke für dein Feedback.
            Ich tüftle gerade an einem JS.
            Ich nehme einen Button Toggle, welcher nach 1 Sekunde wider auf false geht. wenn ich diesen aber gedrückt halte, bleibt er auf true.
            Jetzt muss ich nur noch prüfen ob er durchgängig 2-3 Sekunden auf true steht.
            Da funktioniert es leider noch nicht ganz.
            Problematik ist, das wenn ich mehrmals hintereinander "short" drücke, er auch mal das Gefühl haben kann, es sei "long" wenn beide Bedingungen per Zufall erfüllt sind.
            Mach wohl einen Denkfehler.

            Irgend ein Denkanstoss?

            // -----------------------------------------------
            // Variable
            // -----------------------------------------------
             
            createState('javascript.0.Status.Shutter.Button',false);
            createState('javascript.0.Status.Shutter.Button-long',false);
            createState('javascript.0.Status.Shutter.Button-short',false);
            var idTrigger = "javascript.0.Status.Shutter.Button";
            var buttonlong = "javascript.0.Status.Shutter.Button-long";
            var buttonshort = "javascript.0.Status.Shutter.Button-short";
            var timer = null;
            // -----------------------------------------------
            // Trigger
            // -----------------------------------------------
            on(
                {
                id: idTrigger,
                val: false
                }, 
             
            // -----------------------------------------------
            // Aktion
            // -----------------------------------------------    
                function (obj) 
                {
                    log('reset');
            	    setState('javascript.0.Status.Shutter.countdown', 4);
                }
            );
            
            on(
                {
                id: idTrigger,
                val: true
                }, 
             
            // -----------------------------------------------
            // Aktion
            // -----------------------------------------------    
                function (obj) 
                {
                    count();
                    log('Starte Countdonw');
            
            
                        log('short');
                        setState(buttonlong, false);
                        setState(buttonshort, true);
            
                    
                    if(getState(idTrigger).val == true && getState('javascript.0.Status.Shutter.countdown').val < 2 ) {
                        log('long');
                        setState(buttonlong, true);
                        setState(buttonshort, false);
                    }
                }
            );
             
            // Reset-Funktion
            function long(){
                if(getState(idTrigger).val == true) {
                    log('long');
                    setState(buttonlong, true);
                    setState(buttonshort, false);
                }   
                log('reset');
            	timer = null;
            }
            function count() {
                setTimeout(function () {
                    var timer = getState('javascript.0.Status.Shutter.countdown').val || 4;
                    if (timer > 1) {
                        setState('javascript.0.Status.Shutter.countdown', timer - 1);
                        count();
                    } else {
                        setState('javascript.0.Status.Shutter.countdown', 4);
                    }
                }, 1000);
            }
            

            Danke dir

            @CrunkFX
            Das hab ich schon gesehn, hat aber leider nicht geholfen! Danke Trotzdem

            CrunkFX 1 Reply Last reply Reply Quote 0
            • CrunkFX
              CrunkFX Forum Testing @Mr_Sans last edited by

              @Mr_Sans Das kannst du via HQWidget´s machen. Nimm dazu einen HQWidget´s Button und konfiguriere diesen als Taster. Trage dann bei max die Aktion ein die bei mousedown passieren soll und bei min mouseup.

              MFG
              CrunkFX

              M 1 Reply Last reply Reply Quote 0
              • M
                Mr_Sans @CrunkFX last edited by

                @CrunkFX

                Danke für den Tipp. Aber auch das löst mein Problem nicht!
                Wenn ich den Taster drücke gibts ein True, wenn ich ihn loslasse ein false. Das habe ich schon mit einem anderen Taster.
                Mein Problem besteht darin, das wenn ich kurz drück (0.5-1s) der Taster DP 1 ansprechen soll. (Wert des Tasters geht auf True beim druck und beim loslassen auf false). Wenn ich nun den selben Taster aber lang drücke (2-3s) der Taster nun DP 2 ansprechen soll. (Auch hier geht der Wert des Tasters True beim druck und beim loslassen auf false). Der einzige Unterschied besteht in der dauer zwischen true und zurück auf false.
                Zusätzliches Problem ist noch, das die Widgets bei der Taster-Funktion schon eine Verzögerung von true to false haben (ca 0.5-1s)

                CrunkFX paul53 2 Replies Last reply Reply Quote 0
                • CrunkFX
                  CrunkFX Forum Testing @Mr_Sans last edited by

                  @Mr_Sans Du musst dein timeout mit true starten und mit false abbrechen, jenachdem wie du das einstellst kannst du dann sagen wenn der Taster 2sekunden auf true ist tue etwas, geht er vorher auf false brich den timer ab.

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    Mr_Sans @CrunkFX last edited by

                    @CrunkFX
                    🙂 genau. Das versuche ich ja mit meinm Script oben. klappt nur leider nicht 😞

                    CrunkFX 1 Reply Last reply Reply Quote 0
                    • CrunkFX
                      CrunkFX Forum Testing @Mr_Sans last edited by

                      @Mr_Sans Ich schau gleich Mal ob ich was bauen kann, ich mach das aus Mangel an wissen immer mit nem Zähler den ich hochzählen lassen und dann wieder resette. Vielleicht hat ja @paul53 vorher ne Lösung, sonst Schau ich später, bin noch auf der Arbeit.

                      M 1 Reply Last reply Reply Quote 0
                      • M
                        Mr_Sans @CrunkFX last edited by

                        @CrunkFX

                        Klasse Danke.

                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @Mr_Sans last edited by

                          @Mr_Sans sagte:

                          die Widgets bei der Taster-Funktion schon eine Verzögerung von true to false haben (ca 0.5-1s)

                          Ich habe ca. 1 s festgestellt, deshalb Timeout mit 1,1 s.

                          Blockly_temp.JPG

                          <xml xmlns="https://developers.google.com/blockly/xml">
                           <variables>
                             <variable type="timeout" id="timeout">timeout</variable>
                           </variables>
                           <block type="comment" id="`H+EHE5(mX*J,~jzat[Y" x="88" y="37">
                             <field name="COMMENT">Vis-Taster</field>
                             <next>
                               <block type="on_ext" id="QnP6N}CZn$kjr9LouPz]">
                                 <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                                 <field name="CONDITION">ne</field>
                                 <field name="ACK_CONDITION"></field>
                                 <value name="OID0">
                                   <shadow type="field_oid" id="j=?$H=l`b#_V$G!~#8Rs">
                                     <field name="oid">0_userdata.0.Test.Taster</field>
                                   </shadow>
                                 </value>
                                 <statement name="STATEMENT">
                                   <block type="controls_if" id="pQ=Zm@FVA)n;(lQeqmOA">
                                     <mutation elseif="1" else="1"></mutation>
                                     <value name="IF0">
                                       <block type="on_source" id="^`:J!`HBvil=,Ls@Ei,e">
                                         <field name="ATTR">state.val</field>
                                       </block>
                                     </value>
                                     <statement name="DO0">
                                       <block type="timeouts_settimeout" id="meNtgBr|;rA..^dob[`D">
                                         <field name="NAME">timeout</field>
                                         <field name="DELAY">1100</field>
                                         <field name="UNIT">ms</field>
                                         <statement name="STATEMENT">
                                           <block type="timeouts_cleartimeout" id="mym/;j[_,?Q2^znXWKY}">
                                             <field name="NAME">timeout</field>
                                             <next>
                                               <block type="debug" id="02oW2IVBv]Ju@)C{$!):">
                                                 <field name="Severity">log</field>
                                                 <value name="TEXT">
                                                   <shadow type="text" id="rBFXdHx}vBmC#gtCt.AC">
                                                     <field name="TEXT">Taste lang</field>
                                                   </shadow>
                                                 </value>
                                               </block>
                                             </next>
                                           </block>
                                         </statement>
                                       </block>
                                     </statement>
                                     <value name="IF1">
                                       <block type="variables_get" id="oXNU=#T;Ssaq/R|:DOG3">
                                         <field name="VAR" id="timeout" variabletype="timeout">timeout</field>
                                       </block>
                                     </value>
                                     <statement name="DO1">
                                       <block type="timeouts_cleartimeout" id="Ieb*osZ0^S?6Pai5$y*i">
                                         <field name="NAME">timeout</field>
                                         <next>
                                           <block type="debug" id="N@v4NSgO``W[!wjc;O^E">
                                             <field name="Severity">log</field>
                                             <value name="TEXT">
                                               <shadow type="text" id="D0g`Sv!ErzygC{/`Burs">
                                                 <field name="TEXT">Taste kurz</field>
                                               </shadow>
                                             </value>
                                           </block>
                                         </next>
                                       </block>
                                     </statement>
                                     <statement name="ELSE">
                                       <block type="debug" id="YHn5cLd0^~JXfoIByXUv">
                                         <field name="Severity">log</field>
                                         <value name="TEXT">
                                           <shadow type="text" id="c~?i/WoZbZ|G(Vx-P{s/">
                                             <field name="TEXT">Taste losgelassen</field>
                                           </shadow>
                                         </value>
                                       </block>
                                     </statement>
                                   </block>
                                 </statement>
                               </block>
                             </next>
                           </block>
                          </xml>
                          

                          M 1 Reply Last reply Reply Quote 1
                          • M
                            Mr_Sans @paul53 last edited by Mr_Sans

                            @paul53
                            Wow --- klasse das funktioniert gemäss Log schon mal bestens!
                            Jetzt setzte ich dies am Wochenende zuhause mal um. muss das Skript nun 16 mal 2 (rauf und Runter der Rolladen) also 32mal einsetzten.

                            Herzlichen Dank für dein Engagement!

                            EDIT:
                            Schon Umgesetzt bei 2 Rolladen....Funktioniert auch in echt wunder bar!

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            659
                            Online

                            31.9k
                            Users

                            80.2k
                            Topics

                            1.3m
                            Posts

                            vis
                            3
                            12
                            1720
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo