master
iotcat 2 years ago
parent 05d8d05e15
commit f25a02d406
  1. 18
      index.js
  2. 7
      lightCtl/core.js
  3. 43
      lightCtl/isolat.js
  4. 15
      mqtt/light.js
  5. 9
      room/din.js
  6. 8
      room/hall.js
  7. 11
      room/kit.js
  8. 23
      room/liv.js

@ -105,24 +105,24 @@ var room = {
/* lightCtl reg */ /* lightCtl reg */
var lightCtl = { var lightCtl = {
hall: lightCtlObj(room.hall, light.hall), //hall: lightCtlObj(room.hall, light.hall),
din: lightCtlObj(room.din, light.din), //din: lightCtlObj(room.din, light.din),
liv: lightCtlObj(room.liv, light.liv), //liv: lightCtlObj(room.liv, light.liv),
kit: lightCtlObj(room.kit, light.kit) //kit: lightCtlObj(room.kit, light.kit)
} }
/* peo mqtt */ /* peo mqtt */
var peo_mqtt = { var peo_mqtt = {
hall: peo(client, room.hall), //hall: peo(client, room.hall),
din: peo(client, room.din), //din: peo(client, room.din),
liv: peo(client, room.liv), //liv: peo(client, room.liv),
kit: peo(client, room.kit) //kit: peo(client, room.kit)
} }
/* 走廊入口 */ /* 走廊入口 */
var isolat = { var isolat = {
hall: isolatObj(room.hall, light.hall, [p.hall[0], p.hall[1]], lightCtl.hall), hall: isolatObj(room.hall, light.hall, [p.hall[0], p.hall[1]], lightCtl.hall)
//door: isolatObj(room.din, light.din, [p.din[0], p.livb[0]], lightCtl.din), //door: isolatObj(room.din, light.din, [p.din[0], p.livb[0]], lightCtl.din),
} }

@ -5,6 +5,13 @@ var core = (room, light) => {
LastOffTime: 0, LastOffTime: 0,
}; };
setInterval(()=>{
if(room.state != light.state){
room.state = light.state;
}
room.LastSwiTime = light.LastSwiTime;
}, 50);
room.on('peopleIn', ()=>{ room.on('peopleIn', ()=>{
if(room.num == 1){ if(room.num == 1){
light.on(); light.on();

@ -1,6 +1,46 @@
var isolat = (room, light, pir, lightCtl) => { var isolat = (room, light, pir, lightCtl) => {
const endDur = 120 * 1000;
let pirStates = [false, false];
let endT = 0;
let getT = ()=>new Date().valueOf();
let LightSetter = function(ind, val){
pirStates[ind] = val;
console.log(pirStates);
if(pirStates.every((t)=>t)) {
light.on();
endT = getT();
return;
}
if(endDur + endT < getT()){
light.off();
return;
}
}
setInterval(()=>{
if(endDur + endT < getT()){
light.off();
}
}, 1000);
pir.forEach((item, ind)=>{
item.on('peopleIn', ()=>{
LightSetter(ind, true);
});
item.on('peopleOut', ()=>{
LightSetter(ind, false);
});
});
/* reg */ /* reg */
/*
pir.forEach((item)=>{ pir.forEach((item)=>{
item.on('peopleIn', ()=>{ item.on('peopleIn', ()=>{
if(!room.num){ if(!room.num){
@ -18,6 +58,7 @@ var isolat = (room, light, pir, lightCtl) => {
} }
}); });
}); });
*/
} }
exports.isolat = isolat; exports.isolat = isolat;

@ -4,6 +4,7 @@ var light = (client, clientId) => {
state: false, state: false,
LastOnTime: new Date().valueOf(), LastOnTime: new Date().valueOf(),
LastOffTime: new Date().valueOf(), LastOffTime: new Date().valueOf(),
LastSwiTime: 0,
on: ()=>{ on: ()=>{
client.publish('hass/autoLight/'+clientId, '1'); client.publish('hass/autoLight/'+clientId, '1');
}, },
@ -19,8 +20,22 @@ var light = (client, clientId) => {
if(msg == 1) o.state = true; if(msg == 1) o.state = true;
if(msg == 0) o.state = false; if(msg == 0) o.state = false;
} }
if(subject == 'hass/snsr/'+clientId+'/light'){
if(msg == 1) o.state = true;
if(msg == 0) o.state = false;
}
if(subject == 'hass/snsr/'+clientId+'/swi'){
o.LastSwiTime = new Date().valueOf();
}
if(subject == 'hass/ctl/'+clientId+'/light'){
o.LastSwiTime = new Date().valueOf();
if(msg == 1) o.state = true;
if(msg == 0) o.state = false;
}
}); });
return o; return o;
} }

@ -5,6 +5,8 @@ var din = (zone, interface, p) => {
id: 'din', id: 'din',
num: 0, num: 0,
numAct: 0, numAct: 0,
state: false,
LastSwiTime: 0,
MaxNum: 5, MaxNum: 5,
LastActTime: new Date().valueOf(), LastActTime: new Date().valueOf(),
MaxSensitTime: 1000 * 60 * 2, MaxSensitTime: 1000 * 60 * 2,
@ -91,10 +93,11 @@ var din = (zone, interface, p) => {
if( new Date().getHours() >= 18 && new Date().getHours() <= 20 ) o.isNight = true; if( new Date().getHours() >= 18 && new Date().getHours() <= 20 ) o.isNight = true;
else o.isNight = false; else o.isNight = false;
if((o.numAct && o.act.rate > .2) || o.act.rate > .4){ if( o.act.rate > .4){
if(!o.num) pIn(); if(!o.num) pIn();
}else{ }
if(o.num) pOut(); 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; o.extTime = ((o.num == 1) && o.isNight)*1000*60*1;

@ -5,7 +5,9 @@ var hall = (zone, interface) => {
num: 0, num: 0,
MaxNum: 2, MaxNum: 2,
LastActTime: new Date().valueOf(), LastActTime: new Date().valueOf(),
MaxSensitTime: 1000 * 60 * 1, state: false,
LastSwiTime: 0,
MaxSensitTime: 1000 * 60 * 3,
func: { func: {
peopleIn: [], peopleIn: [],
peopleOut: [], peopleOut: [],
@ -61,11 +63,11 @@ var hall = (zone, interface) => {
}) })
interface.h.on('backward', ()=>{ interface.h.on('backward', ()=>{
pOut(); //pOut();
}) })
interface.hd.on('forward', ()=>{ interface.hd.on('forward', ()=>{
pOut(); //pOut();
}); });
/* 超时衰减 */ /* 超时衰减 */

@ -7,6 +7,8 @@ var kit = (zone, interface) => {
num: 0, num: 0,
numAct: 0, numAct: 0,
MaxNum: 3, MaxNum: 3,
state: false,
LastSwiTime: 0,
LastActTime: new Date().valueOf(), LastActTime: new Date().valueOf(),
MaxSensitTime: 1000 * 60 * 2, MaxSensitTime: 1000 * 60 * 2,
func: { func: {
@ -70,10 +72,11 @@ var kit = (zone, interface) => {
/* 超时衰减 */ /* 超时衰减 */
setInterval(()=>{ setInterval(()=>{
if((o.numAct && o.act.rate > .2) || o.act.rate > .3){ if(o.act.rate > .6){
if(!o.num) pIn(); //if(!o.num) pIn();
}else{ }
if(o.num) pOut(); if(o.act.rate < .02){
//if((o.num || o.state) && o.LastSwiTime < new Date().valueOf() - 1000*60*15) pOut();
} }
/*if(o.num /*if(o.num
&& o.LastActTime + o.MaxSensitTime * o.act.rate < new Date().valueOf() && o.LastActTime + o.MaxSensitTime * o.act.rate < new Date().valueOf()

@ -7,6 +7,8 @@ var liv = (zone, interface) => {
num: 0, num: 0,
numAct: 0, numAct: 0,
MaxNum: 5, MaxNum: 5,
state: false,
LastSwiTime: 0,
LastActTime: new Date().valueOf(), LastActTime: new Date().valueOf(),
MaxSensitTime: 1000 * 60 * 2, MaxSensitTime: 1000 * 60 * 2,
extTime: 0, extTime: 0,
@ -25,7 +27,7 @@ var liv = (zone, interface) => {
}, },
act: { act: {
rate: 0, rate: 0,
maxDetectTime: 1000 * 60 * 30, maxDetectTime: 1000 * 60 * 25,
actTimeArray: [] actTimeArray: []
} }
}; };
@ -76,27 +78,28 @@ var liv = (zone, interface) => {
if( new Date().getHours() >= 19 && new Date().getHours() <= 21 ) o.isNight = true; if( new Date().getHours() >= 19 && new Date().getHours() <= 21 ) o.isNight = true;
else o.isNight = false; else o.isNight = false;
/*
let r = 0.3; let r = 0.3;
if(new Date().getHours() == 19) { if(new Date().getHours() == 19) {
r = 0.1; r = 0.1;
o.act.maxDetectTime = 1000 * 60 * 15; o.act.maxDetectTime = 1000 * 60 * 20;
}else if(new Date().getHours() == 20) { }else if(new Date().getHours() == 20) {
r = 0.05; r = 0.05;
o.act.maxDetectTime = 1000 * 60 * 30; o.act.maxDetectTime = 1000 * 60 * 30;
}else if(new Date().getHours() == 21) { }else if(new Date().getHours() == 21) {
r = 0.05; r = 0.05;
o.act.maxDetectTime = 1000 * 60 * 15; o.act.maxDetectTime = 1000 * 60 * 20;
}else{ }else{
r = 0.3; r = 0.3;
o.act.maxDetectTime = 1000 * 60 * 10; o.act.maxDetectTime = 1000 * 60 * 20;
} }
*/
if(o.numAct || o.act.rate > r){ if(o.act.rate > .35){
if(!o.num) pIn(); //if(!o.num) pIn();
}else{ }
if(o.num) pOut(); if(o.act.rate < .001){
//if((o.num || o.state) && o.LastSwiTime < new Date().valueOf() - 1000*60*40) pOut();
} }

Loading…
Cancel
Save