Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Langer Tastendruck möglich?

    NEWS

    • Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    Langer Tastendruck möglich?

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

      Weiss jemand ob man in VIS irgendwie einen langen Tastendruck von einem kurzen unterscheiden kann?
      Ich würde gerne für die Lautstärke Regelung des AV Receivers eine Ülus und Minus Taste vorsehen und würde mir wünschen dass man zum Lauter machen einfach draufbleiben kann.
      Auch zum schnellen Vor-/Rücklauf bei Videos wäre das praktisch. Geht das technisch überhaupt?
      Wenn ja mit welchem Widget?

      Gruss Ralf

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @derrapf last edited by

        @derrapf Du musst das halt im Zusammenhang mit Deiner Logikmaschine machen. Ich habe es mit Node-Red gemacht.

        https://forum.iobroker.net/topic/40948/shelly-dimmer-datenpunkte-über-vis-steuern/3?_=1635800698767

        Über das Taster Widget kann man dann über gedrückt=true und nicht gedrückt=false das steuern.

        tasterimplementierung-dimmer-vis-nodered.mp4

        Ich habe hier mal einen Teil des Flows gepostet:

        https://forum.iobroker.net/topic/48500/hardware-such-hilfe-taster-adapter-wie-shelly-i3/14?_=1635800698770

        Wichtig ist, was ich unten geschrieben habe. Wenn der Taster gedrückt ist werden alle 250ms Nachrichten verschickt. Sobald 5 Nachrichten geschickt sind, wird ein langer Tastendruck (also 1,25s) erkannt. Kann man konfigurieren wie man will.

        Der Zähler wird zurückgesetzt sobald der Taster losgelassen wird.

        mickym paul53 2 Replies Last reply Reply Quote 0
        • mickym
          mickym Most Active @mickym last edited by mickym

          Zusammenfassend kann man sagen unter VIS kenne ich nur das hqwidget(On/Off) , dass Du als Taster konfigurieren kannst.

          d0ee21f0-6f32-443d-843d-8d3fb6bd08e8-image.png

          Du siehst man kann auch eine anderes Bild für den Lautstärkeregler als die Lampe nehmen.

          Somit könnte man statt Dimmen, natürlich auch Mute ON/OFF und lauter leiser machen.

          D 1 Reply Last reply Reply Quote 0
          • D
            derrapf @mickym last edited by

            @mickym Oh!, Das klingt spanned. Da hab ich ja direkt Bettlektüre.
            Danke Dir.
            Gruss Ralf

            D 1 Reply Last reply Reply Quote 0
            • D
              derrapf @derrapf last edited by

              @derrapf
              Geht nicht so einfach.
              Zum Steuern der Lautstärke sende ich per HTTP einen Befehl an das Mediola Gateway, dass dann den IR Code für "lauter" sendet.
              Ich müsste also durch längeren Druck auf die Taste alle x ms einen IR Code, sprich einen HTTP Request senden.
              Das HQWidget will aber einen Datenpunkt.

              Ich muss mir noch mal Deine verlinkten Threads durchlesen ob es da eine Möglichkeit gibt. Aber rein mit dem HQWidget glaub ich gehts nicht. Oder hab ich was übersehen?

              Gruss Ralf

              mickym 1 Reply Last reply Reply Quote 0
              • mickym
                mickym Most Active @derrapf last edited by mickym

                @derrapf Nochmal Du brauchst noch eine Logikmaschine. Ich mache das mit NodeRed.

                Für das Widget brauchst Du nur einen Datenpunkt.

                1. Wird das Widget gedrückt ist der Datenpunkt true - ist er false - wird er losgelassen.
                2. In der Zeit, in der der Datenpunkt true ist werden über die Logikmaschine alle 250ms eine Nachricht erzeugt und damit kannst Du auch alle 250ms einen HTTP Request senden.
                3. Das hört auf wenn der Datenpunkt auf false geht - sprich Du den Taster loslässt.

                Schau Dir doch mal kurz das Video an - das ich gepostet habe. (tasterimplementierung-dimmer-vis-nodered.mp4)

                Wenn ich den Taster mit der Maus gedrückt halte siehst Du dass die Helligkeit jeweils um 1% erhöht wird (alle 250ms) 😉

                Auch mit der reinen NodeRed Logik habe ich etwas dahin gearbeitet- aber ich habs halt wie in dem Video bis dahin geschafft.
                Der Flow ist nicht banal:

                bba5fdb0-142f-4004-9a17-e3b3f8b41751-image.png

                Aber wenn Du Dich darauf einlassen willst, kann ich Dir sicher helfen.

                D 1 Reply Last reply Reply Quote 0
                • D
                  derrapf @mickym last edited by

                  @mickym
                  Du meinst mit "Logikmaschine" eine Java-Script Implementierung? Node Red und Blockly kenn (kann) ich nicht.
                  D.h. ich müsste erstmal schauen wie man in Java Script herausfindet ob eine Taste "noch" gedrückt wird.
                  Wie ich feststellen kann ob sich ein Datenpunkt ändert, weiss ich. Aber wenn die Taste gedrüclt bleibt ändert sich der Datenpunkt ja nicht mehr, d.h. das Script würde nicht (mehr) getriggert. Das muss ich mal noch forschen wie das geht.
                  Gruss Ralf

                  D mickym 2 Replies Last reply Reply Quote 0
                  • D
                    derrapf @derrapf last edited by

                    @derrapf Hmm. Kann man das Node-Red Gemälde irgendwie in eine Programmiersprache übersetzen? Dann haette ich es ev. leichter. Gibts da einen Java Script Export?
                    Gruss Ralf

                    1 Reply Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @derrapf last edited by mickym

                      @derrapf Wie gesagt - wenn Du NodeRed nutzt da kann ich helfen, weil ich es damit implementiert habe. Ansonsten musst Du da mit eigenständigen Timern arbeiten.

                      Nein - da müsstest Du Dich darauf einlassen.

                      bb9d7ebb-57da-4205-a5cc-6f0f015a3a5d-image.png

                      Oben wird getriggert - wenn der Datenpunkt true ist.
                      Unten wird getriggert - wenn der Datenpunkt false ist. Wie Du siehst erzeugt der Flow solange der Datenpunkt true ist von sich aus alle 250ms eine Nachricht.

                      In der anschließenden function Node (ist JS) - wird dann gezählt ab wann ein Longpress erkannt wird.

                      var count = context.get('count') || 0;
                      var longpress = context.get('longpress') || false;
                      if (msg.payload){
                          count += 1;
                          context.set('count',count);
                          if (count > 5) { // Wert erhöhen wenn Longpress zu früh erkannt wird
                              longpress = true;
                              context.set('longpress',longpress);
                              return [null,msg];
                          }
                      } else {
                          msg.payload=true;
                          count = 0;
                          context.set('count',count);    
                          if (!longpress) return [msg,null];
                          longpress = false;
                          context.set('longpress',longpress);
                      }
                      
                      
                      D 1 Reply Last reply Reply Quote 0
                      • D
                        derrapf @mickym last edited by

                        @mickym Danke für das Angebot
                        Aber Node Red fange ich jetzt nicht auch noch an. Ich hab alles in Java-Script und das kann ich einfach besser "lesen".
                        Aber Ok. Ich versuch mal rauszufinden wie es in Java geht.
                        Wenn ich es weiss, dann poste ich es hier.
                        Gruss Ralf

                        mickym 1 Reply Last reply Reply Quote 0
                        • D
                          derrapf last edited by

                          @derrapf
                          Wie in Java getriggert wird wäre spannend. Also spannender wie der Code der beim Triggern ausgeführt wird. Aber danke trotzdem für den Export. Kann ich sicher verwenden. Ich forsche mal..
                          Gruss Ralf

                          1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @derrapf last edited by mickym

                            @derrapf sagte in Langer Tastendruck möglich?:

                            @mickym Danke für das Angebot
                            Aber Node Red fange ich jetzt nicht auch noch an. Ich hab alles in Java-Script und das kann ich einfach besser "lesen".
                            Aber Ok. Ich versuch mal rauszufinden wie es in Java geht.
                            Wenn ich es weiss, dann poste ich es hier.
                            Gruss Ralf

                            Du verpasst da einiges - aber wie Du willst. Es ist ein tolles Tool, da Du Dich um die Logik kümmern kannst und auch auf JS basiert. Aber die Nodes sind halt schon fertige Funktionen, die Dir das Leben erleichtern.

                            Na das Triggern ist nicht das Problem:

                            on(pattern, callbackOrId, value)
                            
                            

                            https://www.iobroker.net/docu/index-81.htm?page_id=5809

                            Aber dann die Timer etc. zu implementieren wird kompliziert - da ist mir dann doch lieber ich greif auf fertige Programmbausteine zurück.

                            D 1 Reply Last reply Reply Quote 0
                            • D
                              derrapf @mickym last edited by

                              @mickym
                              Naja.. wenn ich wieder mal mehr Zeit habe, dann kann ich das mal anschauen. Ich bin aber irgendwie mit Programmiersprachen aufgewachsen; mir ist das irgendwie lieber. Aktuell hab ich tatsächlich keinen Nerv dafür; hab grad zuviel Baustellen. Da brauch ich nicht noch eine weitere 😉 Aber vielleicht wenn es wieder etwas ruhiger zu geht.
                              Gruss Ralf

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

                                @mickym sagte: Über das Taster Widget kann man dann über gedrückt=true und nicht gedrückt=false das steuern.

                                Dann kann man per Script z.B. alle 250 ms die Lautstärke bis zum Loslassen erhöhen.

                                var zyklus = null;
                                on(idTaste, function(dp) {
                                   if(dp.state.val) {
                                      zyklus = setInterval(function() {
                                         // Laustärke erhöhen
                                      }, 250);
                                   } else clearInterval(zyklus);
                                });   
                                
                                mickym 1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @derrapf last edited by

                                  @derrapf Ich bin auch noch mit C, C++, Cobol und Basic aufgewachsen. Deswegen traue ich mir Programmierung durchaus zu - aber ich bin von NodeRed so begeistert, weil Du damit halt nicht Programmieren für Dummies machst, sondern gleichzeitig die Logike visualisiest, aber @paul53 hat Dir ja den Code schon geschickt.

                                  1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @paul53 last edited by

                                    @paul53 sagte in Langer Tastendruck möglich?:

                                    @mickym sagte: Über das Taster Widget kann man dann über gedrückt=true und nicht gedrückt=false das steuern.

                                    Dann kann man per Script z.B. alle 250 ms die Lautstärke bis zum Loslassen erhöhen.

                                    var zyklus = null;
                                    on(idTaste, function(dp) {
                                       if(dp.state.val) {
                                          zyklus = setInterval(function() {
                                             // Laustärke erhöhen
                                          }, 250);
                                       } else clearInterval(zyklus);
                                    });   
                                    

                                    Nach meinen Flow müsstest Du jetzt halt zum Beispiel zählen wieviel Zyklen vergangen sind - also einen Zähler in die Schleife bauen um einen Longpress zu erkennen.

                                    Also ab 5 zyklen erkennst Du einen Longpress und Du machst bei jedem Zyklus Deinen HTTP Request. Ansonsten wird bei unter 5 wird das als Shortpress interpretiert und machst Deinen Toggle oder sonstige Schaltung.

                                    1 Reply Last reply Reply Quote 0
                                    • D
                                      derrapf last edited by

                                      @mickym
                                      Vielen Dank auch an Paul
                                      Aber dann muss ich mal blöd fragen. (Vielleicht hab ich den Befehl bisher falsch verstanden)

                                      on(idTaste, function(dp) {
                                      }
                                      

                                      wird doch getriggert wenn ich einen Taster drücke bzw. wenn sich ein Datenpunkt ändert (z.B. von true auf false, oder von 20 auf 21 oder von "dings" auf "bums")

                                      Ein Taster kann auch ein VIS Widget sein.
                                      Bisher dachte ich dass "Taster" bedeutet dass beim Drücken des physischen-, als auch des VIS-Tasters ein Wert in einen Datenpunkt geschrieben, dieser also geändert wird. Das ist im Grunde eine Variablen-Zuweisung.
                                      Der Schalter wird also kurz gedrückt und dann wieder losgelassen.

                                      Wenn das oben funktionieren soll, dann müsste es zwei Trigger-Events für den "on-Befehl" geben: Einmal beim Drücken (Wert wird gesetzt, bzw. Timer läuft los) und dann nochmal beim Loslassen (Wert wird wieder geändert, Timer wird angehalten)

                                      Mir wäre jetzt aber nicht bekannt, dass beim Loslassen einer Taste dieses über einen on-Befehl in JS abgefangen werden könnte.
                                      Bin ich jetzt total auf dem Holzweg? Wo ist mein Denkfehler?
                                      Gruss Ralf

                                      mickym paul53 2 Replies Last reply Reply Quote 0
                                      • mickym
                                        mickym Most Active @derrapf last edited by

                                        @derrapf Genau das Skript wird nur beim Wechsel getriggert von true auf false oder umgekehrt.

                                        Nun frägt er ab:

                                        if(dp.state.val)
                                        

                                        wenn der Datenpunkt true ist, dann wird über

                                        zyklus = setInterval(function() {
                                                 // Laustärke erhöhen
                                              }, 250);
                                        

                                        übder das Zyklus Objekt alle 250 ms ein Trigger /Timer gestartet und ausgeführt. Also kommen da die HTTP Befehle rein

                                        ist

                                        if(dp.state.val)
                                        

                                        der Datenpunkt falsch wird der Timer gelöscht, der alle 250 ms einen Trigger erzeugt.

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

                                          @derrapf sagte: Wenn das oben funktionieren soll, dann müsste es zwei Trigger-Events

                                          Es wird bei Änderung in beiden Richtungen (Drücken: false --> true / Loslassen: true --> false) getriggert.

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

                                            @paul53
                                            Ok!?
                                            Das ist mir dann irgendwie nie aufgefallen. D.h. meine ganzen on... Programmierungen laufen immer zweimal?
                                            Muss ich echt mal checken.
                                            Aber OK. Wenn das so ist müsste ich es hinbringen.
                                            Ich fang mal an zu basteln.

                                            Gruss Ralf

                                            mickym D 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.1k
                                            Online

                                            32.3k
                                            Users

                                            81.0k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            28
                                            1236
                                            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