NEWS
Kamera Motion (onvif) triggert script zu schnell
-
Hallo, ich hoffe mir kann hier geholfen werden.
Ich benutze den Onvif Adapter für meine 2 Kameras und möchte bei Motion
snapshots abspeichern was auch super funktioniert.
Doch sendet die Kamera bei einem Motion event gut 6 Ereignisse je 3 Sekunden an den Onvif Adapter,
da mein Script nun darauf wartet das der Datenpunkt geändert wird läuft es natürlich auch 6x in 3 Sekunden was zu unnötig vielen Bilder führt, gibt es eine Möglichkeit im Script selbst zu überprüfen ob das Script bereits läuft ? Das zb er nur max alle 2 Sekunden trigger darf/kann ?Mein Aktueller versuch nur scheinen die trigger so schnell zu sein das setState zu langsam ist un es nicht wirklich funktioniert :
const fs = require('fs'); on({id: "onvif.0.192_168_178_69_80.message.ruleengine.cellmotiondetector.motion.value", change: "any"}, function (obj) { var counter = getState("onvif.0.192_168_178_69_80.counter").val; setState("onvif.0.192_168_178_69_80.counter",1,true); if(counter == 1) { console.log("Pic not Ready yet ..."); return false; } var currenttime = new Date().getTime(); var lastsnap = getState("onvif.0.192_168_178_69_80.lastsnap").val; var math = currenttime-lastsnap; setState("onvif.0.192_168_178_69_80.lastsnap",new Date().getTime(),true); if(math < 2000) { console.log("To Fast wait ..."); return false; } sendTo('onvif.0', 'saveFileSnapshot', {"id":"192_168_178_69_80", "file":"/opt/cameras/snapshot-" + currenttime + ".jpg"}, function (result) { if (true) { console.log("Pic has been made"); setState("onvif.0.192_168_178_69_80.counter",0,true); } }); });
-
@ToxiN sagte:
da mein Script nun darauf wartet das der Datenpunkt geändert wird läuft
Nein, es wird nicht nur bei Wertänderung getriggert.
-
@paul53
change: "any" deswegen da der Wert immer true ist und bei Motion nur aktualisiert und nicht geändert wird. -
@ToxiN sagte:
er nur max alle 2 Sekunden trigger darf/kann ?
const fs = require('fs'); var timer = null; on({id: "onvif.0.192_168_178_69_80.message.ruleengine.cellmotiondetector.motion.value", change: "any"}, function (obj) { if(!timer) { timer = setTimeout(function() { timer = null; }, 2000); // 2 s // Hier der Rest } });