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.
    • D
      Dado last edited by Dado

      Moin zusammen,

      ich habe ein kleines Skript (gekürzt), dass von Xiaomi Bewegungsmeldern grundsätzlich zweimal getriggert wird. Das kann ich aber nicht nachvollziehen, da es nur ein Auslöser sein dürfte. Ich habe mich hier im Forum umgesehen und hatte noch was gefunden bezüglich einmal ack true und einmal false. Das scheint es aber nicht zu sein. Den einzigen Unterschied in den Logs sehe ich darin, dass einmal der alte Wert (Bewegung erkannt) false und dann true ist.

      Hat da eventuell noch jemand eine Idee? Wenn ich noch was vergessen habe oder der Code nicht der Schönste ist 😉 bin ich offen für...

      DANKE!

      // Zuordnung, welcher Sensor was triggert
      var global_SourceTarget = [
        {
           role:      "onoff",
           sourceID:  "deconz.0.Sensors.24.presence", // Bewegung Küche
           targetID:  "deconz.0.Lights.4", // Lichtleiste Hängeschrank
           lux:       "deconz.0.Sensors.25.lux",
           onoffID:   "on",
           brightnessID:  "level",
           timeout:   0.75, //Min
           onlywhendark:  true 
        }
      ]
      
      // Skript zieht sich aus dem globalen Trigger Array alle relevanten Sensoren und subcribed diese
      // Alle passenden Quellen ermitteln, auf die bei Bewegungssensoren mit ein/aus reagiert werden soll und unique machen, da ein Sensor auch mehrere Target triggern kann
      var sourceIDs = [];
      global_SourceTarget.forEach(function(item) {
          if (item["role"] == "onoff" && sourceIDs.find(element => element == item["sourceID"])== undefined) {sourceIDs.push(item["sourceID"]);};
      });
      
      log("Subcribe folgende source IDs: "  + JSON.stringify(sourceIDs), "info");
      
      on({id: sourceIDs , change: "any"}, function (obj) {
         log("Old State: "  + JSON.stringify(obj.oldState.val), "warn");
         log("ack: "  + JSON.stringify(obj.newState.ack), "warn");
          light_control(obj.id);
      });
      
      

      Da kommt dann dabei raus (die Einträge nach den Warnings sind dann die eigentliche Payload, was aber erst mal egal sein müsste):

      4.5.2020, 14:50:25.809	[info ]: javascript.0 (689) Stop script script.js.common.Light.motion-light1
      4.5.2020, 14:50:26.027	[info ]: javascript.0 (689) Start javascript script.js.common.Light.motion-light1
      4.5.2020, 14:50:26.031	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: Subcribe folgende source IDs: ["deconz.0.Sensors.24.presence","deconz.0.Sensors.3.open"]
      4.5.2020, 14:50:26.031	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: subscribe: {"pattern":{"id":"deconz.0.Sensors.24.presence","change":"any","q":0},"name":"script.js.common.Light.motion-light1"}
      4.5.2020, 14:50:26.032	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: subscribe: {"pattern":{"id":"deconz.0.Sensors.3.open","change":"any","q":0},"name":"script.js.common.Light.motion-light1"}
      4.5.2020, 14:50:26.032	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: registered 2 subscriptions and 0 schedules
      4.5.2020, 14:50:36.237	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: Old State: true
      4.5.2020, 14:50:36.238	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: ack: true
      4.5.2020, 14:50:36.239	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getState(id=deconz.0.Sensors.24.presence, timerId=undefined) => {"val":true,"ack":true,"ts":1588596636230,"q":0,"from":"system.adapter.deconz.0","user":"system.user.admin","lc":1588596571962}
      4.5.2020, 14:50:36.239	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getAstroDate(pattern=sunrise, date=Mon May 04 2020 14:50:36 GMT+0200 (GMT+02:00)) => Mon May 04 2020 05:59:36 GMT+0200 (GMT+02:00)
      4.5.2020, 14:50:36.239	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getAstroDate(pattern=sunset, date=Mon May 04 2020 14:50:36 GMT+0200 (GMT+02:00)) => Mon May 04 2020 20:48:36 GMT+0200 (GMT+02:00)
      4.5.2020, 14:50:36.240	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: aktuelle Targets: [{"role":"onoff","sourceID":"deconz.0.Sensors.24.presence","targetID":"deconz.0.Lights.4","lux":"deconz.0.Sensors.25.lux","onoffID":"on","brightnessID":"level","timeout":0.75,"onlywhendark":true}]
      4.5.2020, 14:50:36.240	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getAstroDate(pattern=sunsetStart, date=Mon May 04 2020 14:50:36 GMT+0200 (GMT+02:00)) => Mon May 04 2020 20:44:57 GMT+0200 (GMT+02:00)
      4.5.2020, 14:50:36.241	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: aktuelles Target: {"role":"onoff","sourceID":"deconz.0.Sensors.24.presence","targetID":"deconz.0.Lights.4","lux":"deconz.0.Sensors.25.lux","onoffID":"on","brightnessID":"level","timeout":0.75,"onlywhendark":true}
      4.5.2020, 14:50:36.242	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getObject(id=deconz.0.Sensors.24.presence, enumName=undefined) => {"type":"state","common":{"name":"Motion Küche presence","type":"boolean","role":"sensor.motion","read":true,"write":false},"native":{},"from":"system.adapter.deconz.0","user":"system.user.admin","ts":1587485369685,"_id":"deconz.0.Sensors.24.presence","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
      4.5.2020, 14:50:36.242	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getObject(id=deconz.0.Lights.4, enumName=undefined) => {"type":"device","common":{"name":"Licht 1 weiß","role":"light"},"native":{"etag":"790cb5a37f535a245ce380c27265edaa","hascolor":false,"id":"4","manufacturername":"GLEDOPTO","modelid":"GL-C-009","swversion":"1.0.6","type":"Dimmable light","uniqueid":"00:12:4b:00:1b:34:52:19-0f"},"from":"system.adapter.deconz.0","user":"system.user.admin","ts":1588594907402,"_id":"deconz.0.Lights.4","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
      4.5.2020, 14:50:36.243	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getState(id=deconz.0.Sensors.25.lux, timerId=undefined) => {"val":124,"ack":true,"ts":1588596636226,"q":0,"from":"system.adapter.deconz.0","user":"system.user.admin","lc":1588596636226}
      4.5.2020, 14:50:36.243	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: Stage 1: Umgebungshelligkeit standarisiert von Motion Küche presence: 62; Tag: true; onlywhendark: true; lightIt: true
      4.5.2020, 14:50:36.243	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getState(id=deconz.0.Lights.4.on, timerId=undefined) => {"val":false,"ack":true,"ts":1588596617018,"q":0,"from":"system.adapter.deconz.0","user":"system.user.admin","lc":1588594907354}
      4.5.2020, 14:50:36.244	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getState(id=deconz.0.Sensors.25.lux, timerId=undefined) => {"val":124,"ack":true,"ts":1588596636226,"q":0,"from":"system.adapter.deconz.0","user":"system.user.admin","lc":1588596636226}
      4.5.2020, 14:50:36.244	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: Motion Küche presence -> Licht 1 weiß: Versuche bei Umgebungshelligkeit von 62% (Raw: 124)setState auf deconz.0.Lights.4.level mit 5 zu schreiben ...
      4.5.2020, 14:50:36.244	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: setForeignState(id=deconz.0.Lights.4.level, state=5)
      4.5.2020, 14:50:36.244	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: setStateDelayed(id=deconz.0.Lights.4.on, state=false, isAck=false, delay=45011, clearRunning=true)
      4.5.2020, 14:50:36.245	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: setStateDelayed: no running timers
      4.5.2020, 14:50:36.248	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: Old State: true
      4.5.2020, 14:50:36.248	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: ack: true
      4.5.2020, 14:50:36.249	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getState(id=deconz.0.Sensors.24.presence, timerId=undefined) => {"val":true,"ack":true,"ts":1588596636241,"q":0,"from":"system.adapter.deconz.0","user":"system.user.admin","lc":1588596571962}
      4.5.2020, 14:50:36.249	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getAstroDate(pattern=sunrise, date=Mon May 04 2020 14:50:36 GMT+0200 (GMT+02:00)) => Mon May 04 2020 05:59:36 GMT+0200 (GMT+02:00)
      4.5.2020, 14:50:36.249	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getAstroDate(pattern=sunset, date=Mon May 04 2020 14:50:36 GMT+0200 (GMT+02:00)) => Mon May 04 2020 20:48:36 GMT+0200 (GMT+02:00)
      4.5.2020, 14:50:36.250	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: aktuelle Targets: [{"role":"onoff","sourceID":"deconz.0.Sensors.24.presence","targetID":"deconz.0.Lights.4","lux":"deconz.0.Sensors.25.lux","onoffID":"on","brightnessID":"level","timeout":0.75,"onlywhendark":true}]
      4.5.2020, 14:50:36.250	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getAstroDate(pattern=sunsetStart, date=Mon May 04 2020 14:50:36 GMT+0200 (GMT+02:00)) => Mon May 04 2020 20:44:57 GMT+0200 (GMT+02:00)
      4.5.2020, 14:50:36.251	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: aktuelles Target: {"role":"onoff","sourceID":"deconz.0.Sensors.24.presence","targetID":"deconz.0.Lights.4","lux":"deconz.0.Sensors.25.lux","onoffID":"on","brightnessID":"level","timeout":0.75,"onlywhendark":true}
      4.5.2020, 14:50:36.251	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getObject(id=deconz.0.Sensors.24.presence, enumName=undefined) => {"type":"state","common":{"name":"Motion Küche presence","type":"boolean","role":"sensor.motion","read":true,"write":false},"native":{},"from":"system.adapter.deconz.0","user":"system.user.admin","ts":1587485369685,"_id":"deconz.0.Sensors.24.presence","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
      4.5.2020, 14:50:36.252	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getObject(id=deconz.0.Lights.4, enumName=undefined) => {"type":"device","common":{"name":"Licht 1 weiß","role":"light"},"native":{"etag":"790cb5a37f535a245ce380c27265edaa","hascolor":false,"id":"4","manufacturername":"GLEDOPTO","modelid":"GL-C-009","swversion":"1.0.6","type":"Dimmable light","uniqueid":"00:12:4b:00:1b:34:52:19-0f"},"from":"system.adapter.deconz.0","user":"system.user.admin","ts":1588594907402,"_id":"deconz.0.Lights.4","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
      4.5.2020, 14:50:36.252	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getState(id=deconz.0.Sensors.25.lux, timerId=undefined) => {"val":124,"ack":true,"ts":1588596636226,"q":0,"from":"system.adapter.deconz.0","user":"system.user.admin","lc":1588596636226}
      4.5.2020, 14:50:36.252	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: Stage 1: Umgebungshelligkeit standarisiert von Motion Küche presence: 62; Tag: true; onlywhendark: true; lightIt: true
      4.5.2020, 14:50:36.253	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getState(id=deconz.0.Lights.4.on, timerId=[object Object]) => {"val":false,"ack":true,"ts":1588596617018,"q":0,"from":"system.adapter.deconz.0","user":"system.user.admin","lc":1588594907354}
      4.5.2020, 14:50:36.253	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: getState(id=deconz.0.Sensors.25.lux, timerId=undefined) => {"val":124,"ack":true,"ts":1588596636226,"q":0,"from":"system.adapter.deconz.0","user":"system.user.admin","lc":1588596636226}
      4.5.2020, 14:50:36.253	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: Motion Küche presence -> Licht 1 weiß: Versuche bei Umgebungshelligkeit von 62% (Raw: 124)setState auf deconz.0.Lights.4.level mit 5 zu schreiben ...
      4.5.2020, 14:50:36.254	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: setForeignState(id=deconz.0.Lights.4.level, state=5)
      4.5.2020, 14:50:36.255	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: setStateDelayed(id=deconz.0.Lights.4.on, state=false, isAck=false, delay=45011, clearRunning=true)
      4.5.2020, 14:50:36.255	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: setStateDelayed: clear 1 running timers
      
      1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active last edited by

        Doch meines Erachtens ist das genau so - ich habe das mit Node-Red nachvollzogen.
        Bau einfach "Bestätigt" = Yes ein.

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

          Habe das mal geändert, aber das scheint immer noch dasselbe zu sein...

          on({id: sourceIDs , change: "any", ack: true}, function (obj) {
             log("Old State: "  + JSON.stringify(obj.oldState.val), "warn");
             log("ack: "  + JSON.stringify(obj.newState.ack), "warn");
          //    light_control(obj.id);
          });
          
          4.5.2020, 15:10:54.444	[info ]: javascript.0 (689) Stop script script.js.common.Light.motion-light1
          4.5.2020, 15:10:54.572	[info ]: javascript.0 (689) Start javascript script.js.common.Light.motion-light1
          4.5.2020, 15:10:54.587	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: Subcribe folgende source IDs: ["deconz.0.Sensors.24.presence","deconz.0.Sensors.3.open"]
          4.5.2020, 15:10:54.588	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: subscribe: {"pattern":{"id":"deconz.0.Sensors.24.presence","change":"any","ack":true,"q":0},"name":"script.js.common.Light.motion-light1"}
          4.5.2020, 15:10:54.588	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: subscribe: {"pattern":{"id":"deconz.0.Sensors.3.open","change":"any","ack":true,"q":0},"name":"script.js.common.Light.motion-light1"}
          4.5.2020, 15:10:54.588	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: registered 2 subscriptions and 0 schedules
          4.5.2020, 15:11:12.577	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: Old State: false
          4.5.2020, 15:11:12.577	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: ack: true
          4.5.2020, 15:11:12.593	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: Old State: true
          4.5.2020, 15:11:12.593	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: ack: true
          
          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @Dado last edited by

            @Dado finde ich nicht. Ist zwar beides Mal ack=true - aber einmal ist doch der Value FALSE und einmal TRUE

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

              @mickym sagte:

              aber einmal ist doch der Value FALSE und einmal TRUE

              Nein, das ist der oldState.val. Interessant wäre gleichzeitig der state.val.

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

                Da kann ich helfen 😉
                Das hier ...

                on({id: sourceIDs , change: "any", ack: true}, function (obj) {
                   log("oldState.val: "  + JSON.stringify(obj.oldState.val), "warn");
                   log("newState.ack: "  + JSON.stringify(obj.newState.ack), "warn");
                   log("state.val: "  + JSON.stringify(obj.state.val), "warn");
                //    light_control(obj.id);
                });
                

                ...ergibt bei einmal durch den Sensor laufen

                4.5.2020, 15:23:23.868	[info ]: javascript.0 (689) Stop script script.js.common.Light.motion-light1
                4.5.2020, 15:23:23.958	[info ]: javascript.0 (689) Start javascript script.js.common.Light.motion-light1
                4.5.2020, 15:23:23.962	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: Subcribe folgende source IDs: ["deconz.0.Sensors.24.presence","deconz.0.Sensors.3.open"]
                4.5.2020, 15:23:23.962	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: subscribe: {"pattern":{"id":"deconz.0.Sensors.24.presence","change":"any","ack":true,"q":0},"name":"script.js.common.Light.motion-light1"}
                4.5.2020, 15:23:23.962	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: subscribe: {"pattern":{"id":"deconz.0.Sensors.3.open","change":"any","ack":true,"q":0},"name":"script.js.common.Light.motion-light1"}
                4.5.2020, 15:23:23.963	[info ]: javascript.0 (689) script.js.common.Light.motion-light1: registered 2 subscriptions and 0 schedules
                4.5.2020, 15:23:34.165	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: oldState.val: false
                4.5.2020, 15:23:34.165	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: newState.ack: true
                4.5.2020, 15:23:34.166	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: state.val: true
                4.5.2020, 15:23:34.168	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: oldState.val: true
                4.5.2020, 15:23:34.171	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: newState.ack: true
                4.5.2020, 15:23:34.172	[warn ]: javascript.0 (689) script.js.common.Light.motion-light1: state.val: true
                
                J.A.R.V.I.S. paul53 2 Replies Last reply Reply Quote 0
                • J.A.R.V.I.S.
                  J.A.R.V.I.S. Developer @Dado last edited by

                  @Dado du könntest 'change' in 'ne' ändern, dann wird er nur getriggert, wenn der Wert ungleich des alten Wertes ist.

                  Bleibt der Wert eine gewisse Zeit auf true oder geht er danach wieder auf false?

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

                    @Dado
                    Offenbar ist es eine Eigenheit des Deconz-Adapters, dass unmittelbar nach einer Wertänderung nochmal aktualisiert wird. Triggern auf change: "ne" sollte das Problem beheben.

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

                      @J-A-R-V-I-S
                      Der Wert bleibt auf true stehen und geht nach 90 Sekunden wieder auf false...
                      Was etwas seltsam ist, da ist das Teil so modifiziert habe, dass er nur noch eine Totzeit von 5 Sekunden hat (Standard sind 2 Min)

                      mickym J.A.R.V.I.S. 2 Replies Last reply Reply Quote 0
                      • 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

                                          891
                                          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