const actModel = require('../func/actModel.js').actModel; var din = (zone, interface, p) => { var o = { id: 'din', num: 0, numAct: 0, state: false, LastSwiTime: 0, MaxNum: 5, LastActTime: new Date().valueOf(), MaxSensitTime: 1000 * 60 * 2, func: { peopleIn: [], peopleOut: [], }, on: (event, handler)=>{ if(event == 'peopleIn'){ o.func.peopleIn.push(handler); } if(event == 'peopleOut'){ o.func.peopleOut.push(handler); } }, act: { rate: 0, maxDetectTime: 1000 * 60 * 10, actTimeArray: [] }, extTime: 0, isNight: false }; var pLimiter = ()=>{ if(o.num < 0) o.num = 0; if(o.num > o.MaxNum) o.num = o.MaxNum; o.LastActTime = new Date().valueOf(); } var pIn = ()=>{ o.num = 1; pLimiter(); console.log(new Date().toTimeString() + ' - din = ' + o.num + ' ++ ACT: '+o.act.rate); o.func.peopleIn.forEach((item)=>{ item(); }); } var pOut = ()=>{ o.num = 0; pLimiter(); console.log(new Date().toTimeString() + ' - din = ' + o.num + ' -- ACT: '+o.act.rate); o.func.peopleOut.forEach((item)=>{ item(); }); } interface.hd.on('forward', ()=>{ //pIn(); }); /* interface.dk.on('backward', ()=>{ pIn(); })*/ interface.dl.on('backward', ()=>{ //pIn(); }) interface.hd.on('backward', ()=>{ //if(!o.isNight || o.num != 1 ) pOut(); }) /* interface.dk.on('forward', ()=>{ pOut(); });*/ interface.dl.on('forward', ()=>{ //if(!o.isNight || o.num != 1 ) pOut(); }); /* 超时衰减 */ setInterval(()=>{ if( new Date().getHours() >= 18 && new Date().getHours() <= 20 ) o.isNight = true; else o.isNight = false; if( o.act.rate > .4){ if(!o.num) pIn(); } if(o.act.rate < .02){ // if((o.num || o.state) && o.LastSwiTime < new Date().valueOf() - 1000*60*20) pOut(); } o.extTime = ((o.num == 1) && o.isNight)*1000*60*1; if(o.num && o.LastActTime + o.MaxSensitTime * o.act.rate + o.extTime < new Date().valueOf() && zone.din[0].LastChangeTime + o.MaxSensitTime * o.act.rate < new Date().valueOf() && zone.din[1].LastChangeTime + o.MaxSensitTime * o.act.rate < new Date().valueOf()){ //pOut(); } }, 1000); /* 意外触发 */ p.din[2].on('peopleIn', ()=>{ if(o.isNight && !o.num){ if(o.LastActTime > new Date().valueOf() - o.MaxSensitTime * o.act.rate){ //pIn(); } } }); p.din[3].on('peopleIn', ()=>{ if(o.isNight && !o.num){ if(o.LastActTime > new Date().valueOf() - o.MaxSensitTime * o.act.rate){ //pIn(); } } }); /* 门进入人 */ /* 活跃度监测 */ setInterval(()=>{ if(zone.din[0].actNum || zone.din[1].actNum){ o.act.actTimeArray.push(new Date().valueOf()); o.numAct = 1; }else{ o.numAct = 0; } while(o.act.actTimeArray[0] < new Date().valueOf() - o.act.maxDetectTime){ o.act.actTimeArray.shift(); } o.act.rate = o.act.actTimeArray.length * 1000 / o.act.maxDetectTime; }, 1000); /*zone.din.forEach((item)=>{ item.on('toggle', ()=>{ o.act.actTimeArray.push(new Date().valueOf()); }); });*/ /* setInterval(()=>{ while(o.act.actTimeArray[0] < new Date().valueOf() - o.act.maxDetectTime){ o.act.actTimeArray.shift(); } o.act.rate = actModel(o.act.actTimeArray.length); }, 1000); */ return o; } exports.din = din;