diff --git a/DomoEsp_v02/DomoEspManager.cpp b/DomoEsp_v02/DomoEspManager.cpp index 109098b..92cf1af 100644 --- a/DomoEsp_v02/DomoEspManager.cpp +++ b/DomoEsp_v02/DomoEspManager.cpp @@ -25,8 +25,10 @@ void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiC #endif //pasar funcion de configuracion de aƱadir sensores - des.inicia(&vars); + conf->ConfigGen(&sens, &vars, &lcdm, &des); + + #ifdef DEBUG_PS Serial.println("Inicia variables"); #endif @@ -36,9 +38,10 @@ void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiC Serial.println("Inicia Sensores"); #endif sens.inicia(); - #ifdef DEBUG_PS - Serial.println("Iniciado esp"); + #ifdef DEBUG_PS + Serial.println("Iniciado Desencadenadores"); #endif + des.inicia(&vars); #if CON_LCD lcdm.inicia(&vars, lcd, conf->lcd.colum, conf->lcd.lines); diff --git a/DomoEsp_v02/MqttDesencadenadorManager.cpp b/DomoEsp_v02/MqttDesencadenadorManager.cpp index dc80e1e..5724c27 100644 --- a/DomoEsp_v02/MqttDesencadenadorManager.cpp +++ b/DomoEsp_v02/MqttDesencadenadorManager.cpp @@ -55,7 +55,7 @@ void MqttDesencadenador::ExeEfecto(MqttVarManager *vars, char *oper, char*x, ch { MqttVar* v=GetVar(x, vars); MQTTvalor val=GetVarValue(x, vars); - if(v->flags | MqttVar::FLOAT_VAR) + if(v->flags & MqttVar::FLOAT_VAR) val.f=atof(y); else val.i=atoi(y); @@ -125,10 +125,10 @@ void MqttDesencadenador::procesaOper(MqttExeParam *p) p->estado=0; p->toper=true; p->oper[p->noper]=0; - #ifdef DEBUG_PS + /* #ifdef DEBUG_PS Serial.print("encontrado oper: "); Serial.println( p->oper); - #endif + #endif*/ } else { @@ -165,19 +165,19 @@ void MqttDesencadenador::procesaVar(MqttExeParam *p) { p->var2[p->nvar2]=0; p->tvar2=true; - #ifdef DEBUG_PS + /* #ifdef DEBUG_PS Serial.print("encontrado var2: "); Serial.println( p->var2); - #endif + #endif*/ } else { p->var1[p->nvar1]=0; p->tvar1=true; - #ifdef DEBUG_PS + /* #ifdef DEBUG_PS Serial.print("encontrado var1: "); Serial.println( p->var1); - #endif + #endif*/ } } } @@ -220,27 +220,28 @@ void MqttDesencadenador::Exe(MqttVarManager *vars) if(!p.res || !activo) { activo=!p.res; - #ifdef DEBUG_PS + /* #ifdef DEBUG_PS Serial.println("Fin causa sale "); - #endif + #endif*/ p.sigue=false; break; } else { - #ifdef DEBUG_PS + activo=false; + /*#ifdef DEBUG_PS activo=false; Serial.println("Fin causa sigue "); - #endif + #endif*/ } } else if(p.oper[0]=='&') { - #ifdef DEBUG_PS + /* #ifdef DEBUG_PS Serial.println("operador and "); - #endif + #endif*/ p.tcausa=true; p.toper=false; p.noper=0; @@ -249,10 +250,10 @@ void MqttDesencadenador::Exe(MqttVarManager *vars) } else if(p.oper[0]=='|') { - #ifdef DEBUG_PS + /*#ifdef DEBUG_PS Serial.println("operador or "); - #endif + #endif*/ p.tcausa=true; p.toper=false; p.noper=0; @@ -271,12 +272,12 @@ void MqttDesencadenador::Exe(MqttVarManager *vars) else p.res=p.res || Eval(vars, p.oper, p.var1, p.var2 ); - #ifdef DEBUG_PS + /* #ifdef DEBUG_PS Serial.print("validaCausa res: "); Serial.print(p.res); Serial.print(" esAnd: "); Serial.println(p.esAnd); - #endif + #endif*/ } else @@ -284,10 +285,10 @@ void MqttDesencadenador::Exe(MqttVarManager *vars) //ejecuta efecto ExeEfecto( vars,p.oper, p.var1, p.var2 ); } - #ifdef DEBUG_PS + /*#ifdef DEBUG_PS Serial.println("Fin oper "); - #endif + #endif*/ p.tvar1=p.tvar2=p.toper=false; p.nvar1=p.nvar2=p.noper=0; p.var1[0]=0; @@ -333,7 +334,11 @@ void MqttDesencadenador::Exe(MqttVarManager *vars) break; } } - Serial.println("MqttDesencadenador::Exe fin"); + #ifdef DEBUG_PS + + Serial.println("MqttDesencadenador::Exe fin"); + #endif + } //******************************************************************* MqttDesencadenadorArray::MqttDesencadenadorArray() @@ -349,6 +354,7 @@ MqttDesencadenador* MqttDesencadenadorArray::Get(int i) int MqttDesencadenadorArray::Add(MqttDesencadenador* var) { data[n]=*var; + strcpy( data[n].expresion,var->expresion); n++; return n-1; } @@ -368,7 +374,13 @@ void MqttDesencadenadorManager::inicia( MqttVarManager *v) { vars=v; if(des.n>0) + { + #ifdef DEBUG_PS + + Serial.println("MqttDesencadenador::inicia como listenner"); + #endif vars->AddListenner(this); + } } void MqttDesencadenadorManager::Suscribe() diff --git a/DomoEsp_v02/MqttDesencadenadorManager.h b/DomoEsp_v02/MqttDesencadenadorManager.h index 682aed3..5a5d55c 100644 --- a/DomoEsp_v02/MqttDesencadenadorManager.h +++ b/DomoEsp_v02/MqttDesencadenadorManager.h @@ -45,7 +45,7 @@ struct MqttExeParam class MqttDesencadenador { public: - char expresion[24];//{1}=1->!{2} + char expresion[64];//{1}=1->!{2} bool activo;//se desactivan automaticamente cuando se cumple la condicion y se vuelve activar cuando deja de cumplirse MqttDesencadenador(); @@ -85,7 +85,7 @@ class MqttDesencadenadorManager: public MqttOnVarChangeListenner { public: MqttVarManager *vars; - byte ivars[24]; + //byte ivars[24]; int nv; MqttDesencadenadorArray des; bool revisa; diff --git a/DomoEsp_v02/MqttSensManager.cpp b/DomoEsp_v02/MqttSensManager.cpp index 31c8648..d5c0c9a 100644 --- a/DomoEsp_v02/MqttSensManager.cpp +++ b/DomoEsp_v02/MqttSensManager.cpp @@ -243,7 +243,7 @@ void MqttSensManager::procesaSensor(int i) } case((int)MqttSensor::SENS_ANALOG_IN)://pilla temperatura y humedad { - if(s->flags | MqttSensor::FLAG_NEG) + if(s->flags & MqttSensor::FLAG_NEG) v->val.f=100.*((float)(1024- analogRead(s->pin)))/1024; else v->val.f=100.*((float)(analogRead(s->pin)))/1024; @@ -260,7 +260,7 @@ void MqttSensManager::procesaSensor(int i) } case((int)MqttSensor::SENS_DIGI_IN)://pilla temperatura y humedad { - if(s->flags | MqttSensor::FLAG_NEG) + if(s->flags & MqttSensor::FLAG_NEG) v->val.i=(byte)(1- digitalRead(s->pin)); else v->val.i=(byte)digitalRead(s->pin); diff --git a/DomoEsp_v02/MqttVarManager.cpp b/DomoEsp_v02/MqttVarManager.cpp index 11097a7..f6890fd 100644 --- a/DomoEsp_v02/MqttVarManager.cpp +++ b/DomoEsp_v02/MqttVarManager.cpp @@ -354,7 +354,21 @@ void MqttVarManager::InvierteVar(int ivar) } void MqttVarManager::SetVal(int ivar,MQTTvalor val) { + #ifdef DEBUG_PS + + Serial.print("MqttVarManager::SetVal int i: "); + Serial.print( val.i); + Serial.print(" f: "); + Serial.println( val.f); + #endif MqttVar* v=vars->Get(ivar); v->val=val; + #ifdef DEBUG_PS + + Serial.print("MqttVarManager::SetVal out i: "); + Serial.print( v->val.i); + Serial.print(" f: "); + Serial.println( v->val.f); + #endif OnChange(ivar); } diff --git a/DomoEsp_v02/config_rf.h b/DomoEsp_v02/config_rf.h index 05319c7..edd0249 100644 --- a/DomoEsp_v02/config_rf.h +++ b/DomoEsp_v02/config_rf.h @@ -56,7 +56,11 @@ class ActualDomoConfig: public DomoConfig */ int lamb= vars->AddInternalVarInt( "casa/Salon/LAmb"); int lchim= vars->AddInternalVarInt( "casa/Salon/LChime"); + int lent= vars->AddInternalVarInt( "casa/Salon/LEnt"); int pul1= vars->AddInternalVarInt( "casa/Salon/pul1"); + int pul2= vars->AddInternalVarInt( "casa/Salon/pul2"); + int pul3= vars->AddInternalVarInt( "casa/Salon/pul3"); + int pul4= vars->AddInternalVarInt( "casa/Salon/pul4"); //lcd--------------------------------------------------------- //lcd->add(0,"T des: %s",0,0); @@ -72,11 +76,17 @@ class ActualDomoConfig: public DomoConfig lcd->add(-1,"Mi ritmo",0,1); lcd->add(-1,"bueno pa goza",1,1);*/ //desencadenaores---------- - char st[32]; - sprintf(st,"{%d}>0 -> !{%d} & !{%d} ",pul1,lamb,lchim);//terminar en espacios + char st[64]; + sprintf(st,"{%d}>0 -> {%d}=1 & {%d}=1 & {%d}=1 ",pul1,lamb,lchim, lent);//terminar en espacios + des->AddDes(st); + sprintf(st,"{%d}<1 -> {%d}=0 & {%d}=0 & {%d}=0 ",pul1,lamb,lchim, lent);//terminar en espacios + des->AddDes(st); + sprintf(st,"{%d}>0 -> !{%d} ",pul2,lamb);//terminar en espacios + des->AddDes(st); + sprintf(st,"{%d}>0 -> !{%d} ",pul3,lchim);//terminar en espacios + des->AddDes(st); + sprintf(st,"{%d}>0 -> !{%d} ",pul4,lent);//terminar en espacios des->AddDes(st); - - } }; @@ -203,4 +213,4 @@ class CocinaDomoConfig: public DomoConfig //configuracion que se usara-------------------------- -PulSalonConfig ConfiguracionActual; +ActualDomoConfig ConfiguracionActual;