Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] on{... , change: "any"} läuft immer 2x mal

    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

    [gelöst] on{... , change: "any"} läuft immer 2x mal

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @Dado last edited by

      @Dado Ich habe die Dinger auch. Meines Erachtens sind das 2 verschiedene Paar Stiefel - das Löten heißt nur, dass er den Status mit einem minimalen Zeitpunkt von 5 Sek. auflöst.
      Die 90s kommen, wenn Du in occupancy_timeout nichts eingetragen hast. Trag da einfach mal einen Wert ein, aber ich würde den nicht zu klein wählen

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

        @paul53
        Ja und nein...
        Ja, ich bekomme nur noch einmal getriggert
        Nein, jetzt triggert er nur noch bei Flankenwechsel (was bei != ja auch erwartbar ist)

        Das ist bei einem Bewegungsmelder aber ein "schwieriges" Verhalten oder anders ausgedrückt, der WAF ist dann gleich Null 😉

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

          @Dado sagte:

          Das ist bei einem Bewegungsmelder aber ein "schwieriges" Verhalten

          Dann verwende "entprellen".

          var timer;
          on({id: sourceIDs}, function(dp) {
              if(!timer) {
                  timer = setTimeout(function() {
                      timer = null;
                  }, 100);
                  // Aktionen
              }
          });
          
          D 1 Reply Last reply Reply Quote 0
          • J.A.R.V.I.S.
            J.A.R.V.I.S. Developer @Dado last edited by J.A.R.V.I.S.

            @Dado die Frage ist, möchtest du, wenn du in der Zeit noch einmal den Bewegungsmelder triggerst, das Skript nochmal ausführen? Das wäre mit "ne" dann nicht möglich. Dann müsstest du "any" und dann den Timestamp prüfen, ob z.B. größer eine Sekunde zum letzten mal.

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

              @paul53
              Stand da nicht gerade noch was mit Suche im Forum? 🙂
              Ja, sowas hatte ich gerade im Forum gefunden. Aber danke nochmal fürs Rein'paste'n!
              Das hilft mir weiter. Werde beizeiten noch mal Rückmeldung geben, ob das dann wie gewüscht funktioniert

              Danke!

              1 Reply Last reply Reply Quote 0
              • D
                Dado @J.A.R.V.I.S. last edited by

                @J-A-R-V-I-S
                Brauche zweiteres. Das Licht soll ja länger anbleiben, wenn man im Sensorbereich steht. Werde diese Idee mal mit dem Snippet von paul angehen.

                Danke!

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

                  Sieht gut aus! Eine (eventuell dumme) Frage hätte ich noch:
                  Das Skript soll ja auf verschiedene Sensoren reagieren. Wenn jetzt 2 verschiedene Sensoren innerhalb des Timeout Fensters triggern, dann würde der 2. nicht ausgeführt, oder?

                  Macht es Sinn, dass dann ggf. so zu modifizieren (und timer als array zu initialisieren)?

                      if(!timer[obj.id]) {
                          timer[obj.id] = setTimeout(function() {timer[obj.id] = null;}, 100);
                  //      light_control(obj.id);
                      }
                  
                  
                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Dado last edited by paul53

                    @Dado sagte:

                    Wenn jetzt 2 verschiedene Sensoren innerhalb des Timeout Fensters triggern, dann würde der 2. nicht ausgeführt, oder?

                    Richtig. Wie wahrscheinlich ist es ? Man kann sicherlich auch die Sperrzeit verringern (z.B. 20 ms) , um die Wahrscheinlichkeit weiter zu verringern.

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

                      @paul53
                      Vermutlich weit weniger wahrscheinlich, als ich denke... Ist ja jetzt nicht so, dass ich damit ein komplettes Hochhaus steuere. 😉
                      Danke für den Realitätscheck.
                      Werde ggf mal den Timeout zart reduzieren und stelle das hier mal auf "gelöst"

                      1 Reply Last reply Reply Quote 0
                      • T
                        ticaki Developer last edited by ticaki

                        Würde gerne noch etwas einbringen. Soweit ich sehe verwendest du obj.state.val nicht. Dann könntest du val:true benutzen.

                        Ob das mit dem timer[obj.id] Sinn macht. Ja ist doch kaum Arbeit. Ich würde es dann aber eher so lösen:

                        var devices = {};
                        on(...(obj)=> {
                         devices[obj.id] = true;
                         //hier entprellen
                         setTimeout(meineFunktion,100);
                        })
                        
                        function meineFunktion() {
                         for (let dev in devices){...}
                         devices = {};
                        }
                        

                        Kann Syntaxfehler enthalten. 🙂

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        821
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

                        javascript
                        5
                        19
                        933
                        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