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. Skripten / Logik
  4. JavaScript
  5. [gelöst] on{... , change: "any"} läuft immer 2x mal

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    548

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    622

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
19 Beiträge 5 Kommentatoren 1.5k 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.
  • D Offline
    D Offline
    Dado
    schrieb am zuletzt editiert von Dado
    #1

    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 Antwort Letzte Antwort
    0
    • mickymM Online
      mickymM Online
      mickym
      Most Active
      schrieb am zuletzt editiert von
      #2

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

      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

      1 Antwort Letzte Antwort
      0
      • D Offline
        D Offline
        Dado
        schrieb am zuletzt editiert von
        #3

        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
        
        mickymM 1 Antwort Letzte Antwort
        0
        • D Dado

          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
          
          mickymM Online
          mickymM Online
          mickym
          Most Active
          schrieb am zuletzt editiert von
          #4

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

          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

          paul53P 1 Antwort Letzte Antwort
          0
          • mickymM mickym

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

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

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

            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

            1 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              Dado
              schrieb am zuletzt editiert von
              #6

              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.J paul53P 2 Antworten Letzte Antwort
              0
              • D Dado

                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.J Offline
                J.A.R.V.I.S.J Offline
                J.A.R.V.I.S.
                Developer
                schrieb am zuletzt editiert von
                #7

                @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 Antwort Letzte Antwort
                0
                • D Dado

                  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
                  
                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von paul53
                  #8

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

                  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

                  D 1 Antwort Letzte Antwort
                  0
                  • J.A.R.V.I.S.J J.A.R.V.I.S.

                    @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 Offline
                    D Offline
                    Dado
                    schrieb am zuletzt editiert von
                    #9

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

                    mickymM J.A.R.V.I.S.J 2 Antworten Letzte Antwort
                    0
                    • D Dado

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

                      mickymM Online
                      mickymM Online
                      mickym
                      Most Active
                      schrieb am zuletzt editiert von
                      #10

                      @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

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      1 Antwort Letzte Antwort
                      0
                      • paul53P 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 Offline
                        D Offline
                        Dado
                        schrieb am zuletzt editiert von
                        #11

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

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • D Dado

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

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

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

                          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

                          D 1 Antwort Letzte Antwort
                          0
                          • D Dado

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

                            J.A.R.V.I.S.J Offline
                            J.A.R.V.I.S.J Offline
                            J.A.R.V.I.S.
                            Developer
                            schrieb am zuletzt editiert von J.A.R.V.I.S.
                            #13

                            @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 Antwort Letzte Antwort
                            0
                            • paul53P 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 Offline
                              D Offline
                              Dado
                              schrieb am zuletzt editiert von
                              #14

                              @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 Antwort Letzte Antwort
                              0
                              • J.A.R.V.I.S.J 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 Offline
                                D Offline
                                Dado
                                schrieb am zuletzt editiert von
                                #15

                                @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 Antwort Letzte Antwort
                                0
                                • D Offline
                                  D Offline
                                  Dado
                                  schrieb am zuletzt editiert von
                                  #16

                                  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);
                                      }
                                  
                                  
                                  paul53P 1 Antwort Letzte Antwort
                                  0
                                  • D Dado

                                    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);
                                        }
                                    
                                    
                                    paul53P Offline
                                    paul53P Offline
                                    paul53
                                    schrieb am zuletzt editiert von paul53
                                    #17

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

                                    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

                                    D 1 Antwort Letzte Antwort
                                    0
                                    • paul53P 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 Offline
                                      D Offline
                                      Dado
                                      schrieb am zuletzt editiert von
                                      #18

                                      @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 Antwort Letzte Antwort
                                      0
                                      • T Nicht stören
                                        T Nicht stören
                                        ticaki
                                        schrieb am zuletzt editiert von ticaki
                                        #19

                                        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. :)

                                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                        Spenden

                                        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

                                        493

                                        Online

                                        32.6k

                                        Benutzer

                                        81.9k

                                        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