Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Dimmer: Auf Leveländerung erst triggern, wenn sich der Wert nicht mehr ändert?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Dimmer: Auf Leveländerung erst triggern, wenn sich der Wert nicht mehr ändert?

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

      Hallo,

      mir ist aufgefallen, dass ein Trigger, wie

       on({id: "hmxxx.LEVEL", change: "ne"}, function(obj) { ... });
      ````meistens zweimal triggert, wenn z.B. ein Dimmer hoch oder runter fährt.
      
      Jedenfalls suche ich eine Lösung mit dem on-Trigger, der erst auslöst, wenn der Dimmer sich nicht mehr über die Zeit ändert (seinen Einstellwert erreicht hat).
      
      Dabei ist auch zu beachten, dass ein Dimmer per Hand gesteuert werden kann.
      
      Das gleiche wäre für den Selektor interessant:
      

      var cacheSelectorDimmer = $('channelstate.id=*.LEVEL');
      cacheSelectorDimmer.on(function(obj) { ..... });

      
      Gibt es da ideen?
      1 Reply Last reply Reply Quote 0
      • T
        tapir last edited by

        Also, die Variante mit dem on-Trigger habe ich gelöst:

        on({id: "hmxxx.DIRECTION", change: "any", val: 0, logic: "and"}, function(obj) 
        {
            console.log("Dimmen beendet: " + obj.newState.val);
        });
        
        

        Aber wie baue ich die Parameter change: "any", val: 0, logic: "and" in den Selector ein. :?:

        var cacheSelectorDimmer = $('channel[state.id=*.DIRECTION](functions=xxxx)');
        cacheSelectorDimmer.on(function(obj) { ..... }); 
        ````Der benutzt doch auch die on-Funktion. Ich habe aber bisher kein Beispiel gesehen, bei dem die Triggerbedingung geändert wurde.
        
        Geht das irgendwie?
        1 Reply Last reply Reply Quote 0
        • apollon77
          apollon77 last edited by

          Am Ende ist die einzige Lösung in meinen Augen die Folgende:

          Man muss mit nem "Delay" arbeiten.

          Also das "on" setzt einen Timeout (setTimeout) z.B. in 1 Sekunde oder welches Delay auch immer sinnvoll ist. Dann wird die eigentliche Aktion ausgeführt.

          Falls ein zweiter Trigger vor ablauf des Timeouts kommt dann wird der bestehende Timeout gelöscht (clearTimeout) und wieder neu gesetzt. dann läuft es wieder los …

          1 Reply Last reply Reply Quote 0
          • Bluefox
            Bluefox last edited by

            @tapir:

            Also, die Variante mit dem on-Trigger habe ich gelöst:

            on({id: "hmxxx.DIRECTION", change: "any", val: 0, logic: "and"}, function(obj) 
            {
                console.log("Dimmen beendet: " + obj.newState.val);
            });
            
            

            Aber wie baue ich die Parameter change: "any", val: 0, logic: "and" in den Selector ein. :?:

            var cacheSelectorDimmer = $('channel[state.id=*.DIRECTION](functions=xxxx)');
            cacheSelectorDimmer.on(function(obj) { ..... }); 
            ````Der benutzt doch auch die on-Funktion. Ich habe aber bisher kein Beispiel gesehen, bei dem die Triggerbedingung geändert wurde.
            
            Geht das irgendwie? `  
            

            Mit RegExp geht es:

            on({id: /^hm-rpc\.[.:\w\d-]+\.DIRECTION$/, change: "any", val: 0, logic: "and"}, function(obj) 
            {
                console.log("Dimmen beendet: " + obj.newState.val);
            });
            
            1 Reply Last reply Reply Quote 0
            • T
              tapir last edited by

              Danke für die Antworten.

              Die Lösung von bluefox habe ich getestet und sie ist fast perfekt.

              Beim Selector ist die Abfrage noch auf eine bestimmte Aufzählung in den Gewerken begrenzt:

              var cacheSelectorDimmer = $('channelstate.id=*.DIRECTION');

              Ist das auch in RegExp umsetzbar?

              1 Reply Last reply Reply Quote 0
              • T
                tapir last edited by

                Habs rausgefunden :idea:

                Der on-Trigger wird mit dem Parameter für das Gewerk erweitert:

                on({id: /^hm-rpc\.[.:\w\d-]+\.DIRECTION$/, change: "any", val: 0, enumName: "triggerDim", logic: "and"}, function(obj) 
                {
                    console.log("Dimmen beendet: " + obj.newState.val);
                });
                
                

                Meine nächste Baustelle lautet RegExp :!:

                Nochmals danke !!!

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

                Support us

                ioBroker
                Community Adapters
                Donate

                838
                Online

                31.7k
                Users

                79.8k
                Topics

                1.3m
                Posts

                3
                6
                902
                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