Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. Vis Button Long Press

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    140

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.4k

Vis Button Long Press

Geplant Angeheftet Gesperrt Verschoben Visualisierung
vis
12 Beiträge 3 Kommentatoren 2.1k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Mr_Sans

    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

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #3

    @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

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    M 1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @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 Offline
      M Offline
      Mr_Sans
      schrieb am zuletzt editiert von
      #4

      @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

      CrunkFXC 1 Antwort Letzte Antwort
      0
      • M Mr_Sans

        @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

        CrunkFXC Offline
        CrunkFXC Offline
        CrunkFX
        Forum Testing
        schrieb am zuletzt editiert von
        #5

        @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

        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        M 1 Antwort Letzte Antwort
        0
        • CrunkFXC CrunkFX

          @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 Offline
          M Offline
          Mr_Sans
          schrieb am zuletzt editiert von
          #6

          @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)

          CrunkFXC paul53P 2 Antworten Letzte Antwort
          0
          • M Mr_Sans

            @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)

            CrunkFXC Offline
            CrunkFXC Offline
            CrunkFX
            Forum Testing
            schrieb am zuletzt editiert von
            #7

            @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.

            Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            M 1 Antwort Letzte Antwort
            0
            • CrunkFXC CrunkFX

              @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 Offline
              M Offline
              Mr_Sans
              schrieb am zuletzt editiert von
              #8

              @CrunkFX
              :-) genau. Das versuche ich ja mit meinm Script oben. klappt nur leider nicht :-(

              CrunkFXC 1 Antwort Letzte Antwort
              0
              • M Mr_Sans

                @CrunkFX
                :-) genau. Das versuche ich ja mit meinm Script oben. klappt nur leider nicht :-(

                CrunkFXC Offline
                CrunkFXC Offline
                CrunkFX
                Forum Testing
                schrieb am zuletzt editiert von
                #9

                @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.

                Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                M 1 Antwort Letzte Antwort
                0
                • CrunkFXC CrunkFX

                  @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 Offline
                  M Offline
                  Mr_Sans
                  schrieb am zuletzt editiert von
                  #10

                  @CrunkFX

                  Klasse Danke.

                  1 Antwort Letzte Antwort
                  0
                  • M Mr_Sans

                    @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)

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #11

                    @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>
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    M 1 Antwort Letzte Antwort
                    1
                    • paul53P paul53

                      @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 Offline
                      M Offline
                      Mr_Sans
                      schrieb am zuletzt editiert von Mr_Sans
                      #12

                      @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 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      850

                      Online

                      32.5k

                      Benutzer

                      81.7k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe